Ich pushe das mal weil ich immer noch keine Lösung gefunden habe![]()
new Float:cHealth;
GetPlayerHealth(playerid, cHealth);
SetPlayerHealth(playerid, cHealth + 50.0);
Ich pushe das mal weil ich immer noch keine Lösung gefunden habe![]()
new Float:cHealth;
GetPlayerHealth(playerid, cHealth);
SetPlayerHealth(playerid, cHealth + 50.0);
Ich pushe das mal weil ich immer noch keine Lösung gefunden habe
Mach das am Besten zu einer Funktion:
stock GivePlayerHealth(playerid, Float:add)
{
new Float:h;
GetPlayerHealth(playerid, h);
return SetPlayerHealth(playerid, h+add);
}
//Nutzung dann einfach:
GivePlayerHealth(playerid, 50.0);
Mal kurz eine frage...
Du hast aber keine Plugins in die Server.cfg eingetragen und es scheint, dass ein paar c++ redistributable fehlen ![]()
Weiß Jemand warum ?
Timer sind unpräzise. Es kann gut sein, dass der Timer eig viel länger braucht.
Dafür gibt es einen TimerFix oder stell die Animationszeit einfach bissl höher ![]()
Habs schon habe Runtime durchlaufen lassen.
Wie enferne ich den Spawn button nochmal?
Habe gerade iwie ein Kleines Problem.
Ich habe ein System wo ich mit Float Daten Arbeite aber das Multiplizieren Funktioniert nicht.
Bei dem Preis Kommt 0 Raus aber wieso ?
new Fichte = 1,
Pappel = 1,
Tanne = 1,
Eiche = 1,
Buche = 1;
new Float:hf_q1 = 0.0,
Float:hf_q2 = 0.25,
Float:hf_q3 = 0.5,
Float:hf_q4 = 0.75,
Float:hf_q5 = 1.0;
forward Float:GetPreis(playerid, i);
stock Float:GetPreis(playerid, i)
{
new Float:Preis;
if(Holzfb[Holzf[playerid][holzf_hladei][i]][holzfb_typ] == 1)
{
switch(Holzfb[Holzf[playerid][holzf_hladei][i]][holzfb_qualitat])
{
case 0: { Preis = floatmul(hf_q1, Fichte); }
case 1: { Preis = floatmul(hf_q2, Fichte); }
case 2: { Preis = floatmul(hf_q3, Fichte); }
case 3: { Preis = floatmul(hf_q4, Fichte); }
case 4: { Preis = floatmul(hf_q5, Fichte); }
}
}
if(Holzfb[Holzf[playerid][holzf_hladei][i]][holzfb_typ] == 2)
{
switch(Holzfb[Holzf[playerid][holzf_hladei][i]][holzfb_qualitat])
{
case 0: { Preis = floatmul(hf_q1, Pappel); }
case 1: { Preis = floatmul(hf_q2, Pappel); }
case 2: { Preis = floatmul(hf_q3, Pappel); }
case 3: { Preis = floatmul(hf_q4, Pappel); }
case 4: { Preis = floatmul(hf_q5, Pappel); }
}
}
if(Holzfb[Holzf[playerid][holzf_hladei][i]][holzfb_typ] == 3)
{
switch(Holzfb[Holzf[playerid][holzf_hladei][i]][holzfb_qualitat])
{
case 0: { Preis = floatmul(hf_q1, Tanne); }
case 1: { Preis = floatmul(hf_q2, Tanne); }
case 2: { Preis = floatmul(hf_q3, Tanne); }
case 3: { Preis = floatmul(hf_q4, Tanne); }
case 4: { Preis = floatmul(hf_q5, Tanne); }
}
}
if(Holzfb[Holzf[playerid][holzf_hladei][i]][holzfb_typ] == 4)
{
switch(Holzfb[Holzf[playerid][holzf_hladei][i]][holzfb_qualitat])
{
case 0: { Preis = floatmul(hf_q1, Eiche); }
case 1: { Preis = floatmul(hf_q2, Eiche); }
case 2: { Preis = floatmul(hf_q3, Eiche); }
case 3: { Preis = floatmul(hf_q4, Eiche); }
case 4: { Preis = floatmul(hf_q5, Eiche); }
}
}
if(Holzfb[Holzf[playerid][holzf_hladei][i]][holzfb_typ] == 5)
{
switch(Holzfb[Holzf[playerid][holzf_hladei][i]][holzfb_qualitat])
{
case 0: { Preis = floatmul(hf_q1, Buche); }
case 1: { Preis = floatmul(hf_q1, Buche); }
case 2: { Preis = floatmul(hf_q1, Buche); }
case 3: { Preis = floatmul(hf_q1, Buche); }
case 4: { Preis = floatmul(hf_q1, Buche); }
}
}
printf("%0.2f", Preis);
return Preis;
}
Alles anzeigen
Habe gerade iwie ein Kleines Problem.
Nutze doch Arrays, damit kannst du das viel einfacher alles machen:
new holzTyp[] = {
1, //Fichte
1, //Pappel
1, //Tanne
1, //Eiche
1 //Buche
};
new Float:hf_q[] = {0.0, 0.25, 0.5, 0.75, 1.0};
forward Float:GetPreis(playerid, i);
stock Float:GetPreis(playerid, i)
{
new idx = Holzf[playerid][holzf_hladei][i];
new typ = Holzfb[idx][holzfb_typ];
new quali = Holzfb[idx][holzfb_qualitat];
if(typ <= 0 || typ > sizeof(holzTyp)) return 0.0;
if(quali < 0 || quali >= sizeof(hf_q)) return 0.0;
printf("%.02f * %.02f = %.02f",hf_q[quali],holzTyp[typ-1],floatmul(hf_q[quali], holzTyp[typ-1]));
return floatmul(hf_q[quali], holzTyp[typ-1]);
}
Alles anzeigen
Und dann schau mal aufs print ![]()
Hallo!
Ich möchte folgenden Befehl erstellen, damit nur ein bestimmter Rang die User nur zum Helfer machen kann.
Wie kan ich das lösen?
ocmd:makehelfer(playerid, params[])
{
#pragma unused params
if(Eingeloggt[playerid] == 0)return SendClientMessage(playerid, GRAU, "Du bist nicht eingeloggt!");
new pID, adminid, string[128];
if(IsPlayerAdmin(playerid) || isPlayerAnAdmin(playerid,6))
{
if(sscanf(params, "ui", pID, adminid))return SendClientMessage(playerid, GRAU, "Benutze /makeadmin [SpielerID/Name] [Teamrang]");
if(IsPlayerNPC(pID))return 1;
if(!Eingeloggt[pID])return SendClientMessage(playerid, GRAU, "Dieser Spieler ist nicht eingeloggt!");
if(SpielerDaten[pID][pIntro] < 1)return SendClientMessage(playerid, GRAU, "Der Spieler ist noch im Tutorial.");
if(adminid == 0){
format(string, sizeof(string), "Du hast %s aus dem Teamposten %s entlassen", SpielerDaten[pID][pName], GetAdminRangName(pID));
SendClientMessage(playerid, BLAU, string);
format(string, sizeof(string), "%s hat dich aus dem Team entlassen!", SpielerDaten[playerid][pName]);
SendClientMessage(pID, BLAU, string);
format(string, sizeof(string), "AdmCMD: %s hat %s aus dem Team entlassen!", SpielerDaten[playerid][pName], SpielerDaten[pID][pName]);
SendAdminMessage(ADMCMD, string);
SpielerDaten[pID][pAdmin] = 0;
SpielerSpeichern(pID);
return 1;
}
if(adminid < 1 || adminid > MAX_ADMIN)return SendClientMessage(playerid, GRAU, "Dieser Adminrang existriert nicht!");
SpielerDaten[pID][pAdmin] = adminid;
format(string, sizeof(string), "Du hast %s den Teamrang %s gegeben", SpielerDaten[pID][pName], GetAdminRangName(pID));
SendClientMessage(playerid, BLAU, string);
format(string, sizeof(string), "* %s hat dir den Teamrang %s gegeben", SpielerDaten[playerid][pName], GetAdminRangName(pID));
SendClientMessage(pID, BLAU, string);
format(string, sizeof(string), "AdmCMD: %s hat %s zum %s ernannt.", SpielerDaten[playerid][pName], SpielerDaten[pID][pName], GetAdminRangName(pID));
SendAdminMessage(ADMCMD, string);
//SpawnPlayerEx(pID);
SpielerSpeichern(pID);
return 1;
}
else {SendClientMessage(playerid, GRAU, "Du hast nicht genügend Rechte für diesen Befehl.");}
return 1;
}
if(IsPlayerAdmin(playerid) || isPlayerAnAdmin(playerid,6))
zu
if(!isPlayerAnAdmin(playerid,6))
Wenn du eine Fehler Meldung dahinter machen willst, einfach nach der Klammer return SendClientMessage(..); schreiben.
Danke, aber wie mach ich es, das der Admin Rang einen Spieler nur Rang 1 also Helfer geben kann?
MfG
Danke, aber wie mach ich es, das der Admin Rang einen Spieler nur Rang 1 also Helfer geben kann?
Was meinst du jetzt genau?
Ein Adminlevel rang 1er soll einem Spieler nur Rang 1 geben können?
Und Adminlevel rang 2 nur Rang 2 oder wie?
Admin Rang 5 soll nur Adminang 1 geben und alles über Admin Rang 5 soll nur alles ab Adminrang 2 geben.
Admin Rang 5 soll nur Adminang 1 geben und alles über Admin Rang 5 soll nur alles ab Adminrang 2 geben.
indem du abfragst ob er unter dem Rang ist oder über dem Rang mit < - >
Das ist mir schon klar, aber wie frage ich ab das der "Helferverwalter" dem Spieler nur Rang 1 also Helfer geben kann und keine anderen Ränge? Was muss ich da an meinem Code ändern?
MfG
Habe dann eine Mülltonne hingestellt die dann ca 170 entsprach und siehe da es Funktioniert
Ich verstehe nicht genau, was du damit meinst, aber gut, dass es jetzt klappt!
Weiß Jemand warum ?
Lief die Animation zu dem Zeitpunkt dann schon die 4,7 Sekunden? Zum Teil laufen so kurze Timer etwas langsamer in Summe, sodass das am Ende eventuell auch mal eine Sekunde ausmachen kann.
Das ist mir schon klar, aber wie frage ich ab das der "Helferverwalter" dem Spieler nur Rang 1 also Helfer geben kann und keine anderen Ränge? Was muss ich da an meinem Code ändern?
if(IsPlayerAdmin(playerid) || isPlayerAnAdmin(playerid,6))
zu:
if(IsPlayerAdmin(playerid))
if(IsPlayerNPC(pID))return 1;
zu:
if(isPlayerAnAdmin(playerid,5) && adminid > 1) return SendClientMessage(playerid, GRAU, "Du kannst nur Rang 1 vergeben.");
if(IsPlayerNPC(pID))return 1;
OK sry wenn ich es etwas unverständliche Erklärt habe.
Ich habe mir die beiden Position
GetDynamicObjectRot(obj, Pos[0], Pos[1], Pos[2]);
GetPlayerFacingAngle(playerid, a);
x -= (dist * floatsin(-Pos[2], degrees));
y -= (dist * floatcos(-Pos[2], degrees));
if(Pos[2] > 0)
{
diff = (floatround(a) % 360) - floatround(Pos[2]);
}
A und Pos[2] mal Printen lassen es kam raus
A = 170 und Pos[2] = 380 ( nicht genau so aber weiß es gerade nichtmehr )
Dann habe ich eine Tonne auf die Z-Rotation also in diesem Fall Pos[2] auf 170 gedreht und es hat Funktioniert weil A 170 - Pos[2] 170 Ja zwischen -15 und 15 Liegt.
Dann habe ich es mit -170 Probiert da ging es nicht dann habe ich die eine Rechnung hinzugefügt und nun Funktioniert es egal welche Rotation die Mülltonne hat.
@Jeffry:
Gibt es ein Timerinclude was 100% richtig Funktioniert ?
bzw nahezu 100%ig ?
Dann habe ich es mit -170 Probiert da ging es nicht dann habe ich die eine Rechnung hinzugefügt und nun Funktioniert es egal welche Rotation die Mülltonne hat.
Ok, was interessant ist, da es bei mir so ging. Naja, Hauptsache ist, dass es bei dir jetzt geht.
Das "% 360" ist in diesem Fall jetzt übrigens obsolet und könnte entfernt werden.
bzw nahezu 100%ig ?
Du könntest dir diese Include anschauen: http://forum.sa-mp.com/showthread.php?t=289675