Müsste so eigentlich richtig sein, jedenfalls ist es die Abfrage mit killerid & INVALID_PLAYER_ID.
Ob es das wirklich ist,kann ichauch schlecht wissen.
Denn woher sollte ich z.B. wissen was folgendes bewirkt / ist:
PlayerInfo[killerid][pHCValue] // 10
SafetyLogoutDeath = SetTimerEx("Tot",60000,0,"d",playerid); // 18
SafetyLogoutDeath2 = SetTimerEx("TotSpawn",4000,0,"d",playerid); // 19
SafetyLogoutDeath = SetTimerEx("Tot",60000,0,"d",playerid); // 30
SafetyLogoutDeath2 = SetTimerEx("TotSpawn",4000,0,"d",playerid); // 31
Denke du müsstest aber noch PlayerInfo[playerid][pContractValue] auf 0 setzen, wenn der Spieler stirbt ( Damit die Abfrage in OnPlayerDeath nicht weiterhin funktioniert , Zeile 3 ). Vorrausgesetzt du hast es nicht schon in OnPlayerSpawn.
//Edit: Quatsch.Ist nicht richtig.
public OnPlayerDeath(playerid, killerid, reason)
{
if(PlayerInfo[playerid][pContractValue] > 0)
{
if( killerid != INVALID_PLAYER_ID )
{
new string[256], hitman[MAX_PLAYER_NAME], opfer[MAX_PLAYER_NAME];
GetPlayerName(playerid,opfer,sizeof(opfer));
GetPlayerName(killerid,hitman,sizeof(hitman));
format(string,sizeof(string),"Hitman %s hat den Auftrag auf %s erledigt und erhält %d€.",hitman,opfer,PlayerInfo[killerid][pHCValue]);
SendHitmanMessage(0xFFE600FF,string);
PlayerInfo[killerid][pContract] = 0;
PlayerInfo[killerid][pHCValue] = 0;
GetPlayerPos(playerid,tX,tY,tZ);
SetPVarFloat(playerid,"lastx",tX);
SetPVarFloat(playerid,"lasty",tY);
SetPVarFloat(playerid,"lastz",tZ);
SafetyLogoutDeath = SetTimerEx("Tot",60000,0,"d",playerid);
SafetyLogoutDeath2 = SetTimerEx("TotSpawn",4000,0,"d",playerid);
SetPVarInt(playerid,"Tot",1);
SetPVarInt(playerid,"Skin",GetPlayerSkin(playerid));
}
else
{
GetPlayerPos(playerid,tX,tY,tZ);
SetPVarFloat(playerid,"lastx",tX);
SetPVarFloat(playerid,"lasty",tY);
SetPVarFloat(playerid,"lastz",tZ);
SafetyLogoutDeath = SetTimerEx("Tot",60000,0,"d",playerid);
SafetyLogoutDeath2 = SetTimerEx("TotSpawn",4000,0,"d",playerid);
SetPVarInt(playerid,"Tot",1);
SetPVarInt(playerid,"Skin",GetPlayerSkin(playerid));
}
}
return 1;
}
Ich denke du bräuchtest es so. Wie gesagt, ich kann aber nicht wissen ob es wirklich so bei dir sein soll.Du müsstest wissen, ob folgender Code:
else
{
GetPlayerPos(playerid,tX,tY,tZ);
SetPVarFloat(playerid,"lastx",tX);
SetPVarFloat(playerid,"lasty",tY);
SetPVarFloat(playerid,"lastz",tZ);
SafetyLogoutDeath = SetTimerEx("Tot",60000,0,"d",playerid);
SafetyLogoutDeath2 = SetTimerEx("TotSpawn",4000,0,"d",playerid);
SetPVarInt(playerid,"Tot",1);
SetPVarInt(playerid,"Skin",GetPlayerSkin(playerid));
}
Nur aufgerufen werden soll, wenn PlayerInfo[playerid][pContractValue] größer als 0 ist.