My server crashes *SOMETIMES* when ID 0 die's, The person who die's then spawns on some stairs near LV Transfender then it restarts and sometimes just stops.
Код:
public OnPlayerDeath(playerid, killerid, reason)
{
justdied[playerid] = 1;
if(GetDistanceBetweenPlayers(playerid) < 10)return SendDeathMessage(killerid, playerid, reason);
new str[156];
new kname[26];
new pname[26];
new wep[26];
GetWeaponName(reason,wep,sizeof(wep));
GetPlayerName(playerid,pname,sizeof(pname));
GetPlayerName(killerid,kname,sizeof(kname));
if(reason == 255)
{
new str1[256];
format(str1,sizeof(str),"* %s has died. (Unknown)",pname);
SendClientMessageToAll(COLOR_RED,str1);
return 1;
}
if(reason == 54)
{
new str1[256];
format(str1,sizeof(str),"* %s has died. (Splat)",pname);
SendClientMessageToAll(COLOR_RED,str1);
return 1;
}
if(reason == 53)
{
new str1[256];
format(str1,sizeof(str),"* %s has Drowned.",pname);
SendClientMessageToAll(COLOR_RED,str1);
return 1;
}
format(str,256,"* %s has been killed by %s. (%s)",pname,kname,wep);
SendClientMessageToAll(COLOR_RED,str);
if(GetPlayerWantedLevel(playerid) == 1 && IsLaw[killerid] == 1)
{
GetPlayerName(killerid,kname,sizeof(kname));
GetPlayerName(playerid,pname,sizeof(pname));
format(str,66,"* %s has been arrested by %s.(1 mins)", pname, kname);
SendClientMessage(playerid,COLOR_RED,"You have been jailed for 1 mins.");
SendClientMessageToAll(COLOR_RED,str);
jail[playerid] = 1;
sjail[playerid] = SetTimerEx("Unjail",60000,false,"i",playerid);
}
if(GetPlayerWantedLevel(playerid) == 2 && IsLaw[killerid] == 1)
{
new str[256];
GetPlayerName(killerid,kname,sizeof(kname));
GetPlayerName(playerid,pname,sizeof(pname));
format(str,66,"* %s has been arrested by %s.(2 mins)", pname, kname);
SendClientMessage(playerid,COLOR_RED,"You have been jailed for 2 mins.");
SendClientMessageToAll(COLOR_RED,str);
jail[playerid] = 1;
sjail[playerid] = SetTimerEx("Unjail",120000,false,"i",playerid);
}
if(GetPlayerWantedLevel(playerid) == 3 && IsLaw[killerid] == 1)
{
new str[256];
GetPlayerName(killerid,kname,sizeof(kname));
GetPlayerName(playerid,pname,sizeof(pname));
format(str,66,"* %s has been arrested by %s.(3 mins)", pname, kname);
SendClientMessage(playerid,COLOR_RED,"You have been jailed for 3 mins.");
SendClientMessageToAll(COLOR_RED,str);
jail[playerid] = 1;
sjail[playerid] = SetTimerEx("Unjail",180000,false,"i",playerid);
}
if(GetPlayerWantedLevel(playerid) == 4 && IsLaw[killerid] == 1)
{
new str[256];
GetPlayerName(killerid,kname,sizeof(kname));
GetPlayerName(playerid,pname,sizeof(pname));
format(str,66,"* %s has been arrested by %s.(4 mins)", pname, kname);
SendClientMessage(playerid,COLOR_RED,"You have been jailed for 4 mins.");
SendClientMessageToAll(COLOR_RED,str);
jail[playerid] = 1;
sjail[playerid] = SetTimerEx("Unjail",240000,false,"i",playerid);
}
if(GetPlayerWantedLevel(playerid) == 5 && IsLaw[killerid] == 1)
{
new str[256];
GetPlayerName(killerid,kname,sizeof(kname));
GetPlayerName(playerid,pname,sizeof(pname));
format(str,66,"* %s has been arrested by %s.(5 mins)", pname, kname);
SendClientMessage(playerid,COLOR_RED,"You have been jailed for 5 mins.");
SendClientMessageToAll(COLOR_RED,str);
jail[playerid] = 1;
sjail[playerid] = SetTimerEx("Unjail",300000,false,"i",playerid);
}
if(GetPlayerWantedLevel(playerid) == 6 && IsLaw[killerid] == 1)
{
new str[256];
GetPlayerName(killerid,kname,sizeof(kname));
GetPlayerName(playerid,pname,sizeof(pname));
format(str,66,"* %s has been arrested by %s.(6 mins)", pname, kname);
SendClientMessage(playerid,COLOR_RED,"You have been jailed for 6 mins.");
SendClientMessageToAll(COLOR_RED,str);
jail[playerid] = 1;
sjail[playerid] = SetTimerEx("Unjail",360000,0,"d",playerid);
}
return 1;
}
At the top of OnPlayerDeath under justdied[playerid] = 1, you need to make sure the killer isn't an invalid player id.
I thank you for this, I got rid of the GetDistance. Didn't need it.