Server crash on ID 0 Death
#1

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.

Help please?

Код:
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;
  }
Reply
#2

First off all, what is this supposed to do?
if(GetDistanceBetweenPlayers(playerid) < 10)
Shouldn't there be two parameters to this?

At the top of OnPlayerDeath under justdied[playerid] = 1, you need to make sure the killer isn't an invalid player id.
So add this:
pawn Код:
if(killerid == INVALID_PLAYER_ID || killerid == playerid) return 1;
under
pawn Код:
justdied[playerid] = 1;
Reply
#3

I thank you for this, I got rid of the GetDistance. Didn't need it.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)