Erledigt, siehe am Ende des Beitrags!
Hallo Leute!
Ich bin erst seit kurzem am "Scripten" und habe bisher eigentlich alle Aufgaben gemeistert ...
Nun bin ich an einen Adminbefehl dran, der einen zuerst aus einer bestimmten Höhe fallen lässt und dann die Differenz von dem Alten und dem Neuen "Leben" ausgibt (SendClientMessage an den ausführenden Admin und per printf an die Konsole).
Seht selbst, hier mein Code (Habs ein wenig gekürzt 1. wegen Copy&Paste und 2. wegen der Übersichtlichkeit):
forward DownHP(playerid, seconds, pID, health1);
public DownHP(playerid, seconds, pID, health1)
if(seconds > 0)
seconds = seconds -1;
SetTimerEx("DownHP", 1000, 0, "iiif", playerid, seconds, pID, health1);
return 1;
if(seconds == 0)
new Adminname[MAX_PLAYER_NAME], pname[MAX_PLAYER_NAME], Float:health, Float:health2, string[256];
GetPlayerName(playerid, Adminname, sizeof(Adminname));
GetPlayerName(pID, pname, sizeof(pname));
GetPlayerHealth(pID, health2);
health = health1 - health2;
format(string, sizeof(string), "%s wurde geslapt! %f HP verloren (Admin: %s)", pname, health, Adminname);
SendClientMessage(playerid, YELLOW, string);
printf("%s",string);
SetPlayerHealth(pID, health1);
return 1;
dcmd_down(playerid, params[])
new pID, Float:x, Float:y, Float:z, Float:health1, Float:health2, seconds = 5;
GetPlayerHealth(pID, health1);
health2 = health1+100;
SetPlayerHealth(pID, health2);
GetPlayerPos(pID, x, y, z);
SetPlayerPos(pID, x, y, z+20);
DownHP(playerid, seconds, pID, health1); // <- warning 213: tag mismatch
return 1;
Den Warning in Zeile 33 habe ich per "Zufall" wegbekommen (durch "float:health1"), jedoch hat dies nichts an folgenden, für mich nicht nachvollziehbaren Werten, geändert!
[21:42:28] Kevin wurde geslapt! 1119747968.000000 HP verloren (Admin: Kevin)
[21:46:54] Kevin wurde geslapt! -70.000000 HP verloren (Admin: Kevin)
[21:46:54] [death] Kevin died 54
[21:47:05] Kevin wurde geslapt! 1120403328.000000 HP verloren (Admin: Kevin)
[21:47:17] Kevin wurde geslapt! -135.000000 HP verloren (Admin: Kevin)
[21:47:17] [death] Kevin died 54
[21:47:17] Kevin wurde geslapt! 1120403328.000000 HP verloren (Admin: Kevin)
[21:47:19] Kevin wurde geslapt! 1128791936.000000 HP verloren (Admin: Kevin)
Ich hoffe jemand von euch findet den Fehler!
Ich bin es wer weiß wie oft durchgegangen, aber leider habe ich keinen einzigen Fehler gefunden ...
Naja, hier nochmal der Ablauf:
1. /down [ID] und die Person wird in die Luft teleportiert (zuvor SetPlayerHealth +100, damit die Person nicht ausversehen stirbt)
2. Nach 5 Sekunden (Timer) wird die "neue" HP ausgelesen und dann die Differenz ausgerechnet (Also eigentlich WIEVIEL die Person verloren hat).
3. Die HP wird wieder auf "health1" gesetzt (Die Anfangsleben)
Mit freundlichen Grüßen
Kevin
Weitere Infos:
- Selfmade (Kleiner DM-Server)
- Command-System: dcmd
- Windows-Server
Es lag an (dem "Float:")
forward DownHP(playerid, seconds, pID, Float:health1);
public DownHP(playerid, seconds, pID, Float:health1)
Und hierdran:
Das ist falsch:
health = health1 - health2;
health = health2 - health1;
Das ist richtig:
health = (health1 + 100) - health2;