OnPlayerDeath Arrays -
ReshiramZekrom - 11.09.2013
I've a problem with arrays.. I know that i've to put INVALID_PLAYER_ID but i don't know where D:
Код:
[18:53:06] [debug] Run time error 4: "Array index out of bounds"
[18:53:06] [debug] Accessing element at index 65535 past array upper bound 499
[18:53:06] [debug] AMX backtrace:
[18:53:06] [debug] #0 0000e3ec in public OnPlayerDeath (0x00000002, 0x0000ffff, 0x000000ff) from IusSilverP2.amx
pawn Код:
public OnPlayerDeath(playerid, killerid, reason)
{
if(GetPlayerWeapon(killerid) == 38 && wartime == 0 && lvl[playerid] < 10)
{
BanEx(killerid,"AutoBan Minigun"); //Ban if they have a minigun
}
if(happytime == true)
{
if(killerid != INVALID_PLAYER_ID) cookies[killerid] ++;
SendClientMessage(killerid,COLOR_GREEN,"*** Cookie bonus per l'Happy Time!");
}
if(IsPlayerInRangeOfPoint(killerid, 20, 292.8081,-35.4008,1001.5156))
{
new str1[128],name[24];
GetPlayerName(killerid, name, sizeof(name));
format(str1, sizeof(str1), "*** %s и stato automaticamente kickato per aver killato al /negozio!", name);
SendClientMessageToAll(COLOR_RED, str1);
KickWithMessage(killerid, COLOR_RED, "*** Sei stato kickato per aver ucciso al /negozio!");
}
SendDeathMessage(killerid, playerid, reason);//kill list
dinamite[playerid] = 0; //variabile dinamite
if(dinamite[playerid] == 1)
{
DestroyDynamicObject(bombobj);
}
//CONSEGUENZE KILL
heal[playerid] = 0;
rock[playerid] = 0;
if(playerid != INVALID_PLAYER_ID) morti[playerid] ++;//aumentano le morti
if(killerid != INVALID_PLAYER_ID) kills[killerid] ++;//aumentano le kills
if(killerid != INVALID_PLAYER_ID) SetPlayerScore(killerid, GetPlayerScore(killerid) + 1);//aumenta di uno score
if(killerid != INVALID_PLAYER_ID) GivePlayerMoney(killerid, 1000);// ti da soldi
//RICAVO INFORMAZIONI
new nome[MAX_PLAYER_NAME],killer[MAX_PLAYER_NAME];
GetPlayerName(playerid,nome, sizeof(nome));
GetPlayerName(killerid,killer, sizeof(killer));
//SPREE AUMENTA
if(killerid != INVALID_PLAYER_ID) spree[killerid] ++;
if(spree[killerid] == 10)//se lo spree и = 10
{
SendClientMessage(killerid,COLOR_GREEN,"*** Hai ucciso 10 persone di fila e hai ottenuto un cookie!");
SendClientMessage(killerid,COLOR_GREEN,"*** Uccidine altri 10 per ottenere 3 cookies!");
cookies[killerid] ++;
}
if(spree[playerid] == 20)//se lo spree и = 20
{
SendClientMessage(killerid,COLOR_GREEN,"*** Hai ucciso 20 persone di fila e hai ottenuto 3 cookies!");
SendClientMessage(killerid,COLOR_GREEN,"*** Hai raggiunto il massimo killing - spree e il tuo spree и stato azzerato!");
cookies[killerid] += 3;
spree[killerid] = 0;
}
if(playerid != INVALID_PLAYER_ID) spree[playerid] = 0;//spree azzerato in caso di morte
//CASO ADMIN KILL
if(lvl[playerid] > 0) return SendClientMessage(killerid,COLOR_YELLOW,"*** Hai ucciso un admin e hai ricevuto un cookie come ricompensa!"),cookies[killerid] ++, ak[killerid] ++;
//fake kill
if(fakekill[playerid] == 5) return BanEx(playerid,"Fake kill");
new Float:x,Float:y,Float:z;
GetPlayerPos(playerid,x,y,z);
if(IsPlayerInRangeOfPoint(killerid, 50, x,y,z))
{
fakekill[playerid] ++;
}
if(reason == 50)
{
SendClientMessage(killerid,COLOR_RED,"*** Sei stato ucciso per helikill!");
SetPlayerHealth(killerid,0);
}
if(eventoox[killerid] == 1)
{
new str1[128],name [24];
GetPlayerName(killerid, name, sizeof(name));
format(str1, sizeof(str1), "*** %s и stato automaticamente kickato per aver killato all'evento OX!", name);
SendClientMessageToAll(COLOR_RED, str1);
KickWithMessage(killerid, COLOR_RED, "*** Sei stato kickato per aver ucciso all'evento OX!");
}
if(eventoox[playerid] == 1)
{
eventoox[playerid] = 2;
SendClientMessage(playerid,COLOR_RED,"*** Digita /joinox per tornare all'evento!");
}
if(wanted[playerid] == 1)
{
wanted[playerid] = 0;
cookies[killerid] ++;
new nomes[24],knome[24],stringaw[256];
GetPlayerName(playerid,nomes,24);
GetPlayerName(killerid, knome, 24);
SendClientMessage(killerid,COLOR_YELLOW,"*** Complimenti, hai ucciso il ricercato vincendo un cookie!");
format(stringaw,sizeof(stringaw),"{FFFF00}[WANTED]: {FF00FF}Il Giocatore %s ha ucciso il ricercato %s ricevendo un cookie come premio!",knome,nomes);
SendClientMessageToAll(-1, stringaw);
}
return 1;
}
Re: OnPlayerDeath Arrays -
Konstantinos - 11.09.2013
You need to check if the killer is not invalid player. You do check for invalid ids but in the playerid. Just to know, if the playerid was not valid, OnPlayerDeath would not be called at all. All you need to do is check if killerid is valid:
pawn Код:
public OnPlayerDeath(playerid, killerid, reason)
{
SendDeathMessage(killerid, playerid, reason);//kill list
if(killerid != INVALID_PLAYER_ID )
{
if(GetPlayerWeapon(killerid) == 38 && wartime == 0 && lvl[playerid] < 10)
{
BanEx(killerid,"AutoBan Minigun"); //Ban if they have a minigun
}
if(happytime == true)
{
cookies[killerid] ++;
SendClientMessage(killerid,COLOR_GREEN,"*** Cookie bonus per l'Happy Time!");
}
if(IsPlayerInRangeOfPoint(killerid, 20, 292.8081,-35.4008,1001.5156))
{
new str1[128],name[24];
GetPlayerName(killerid, name, sizeof(name));
format(str1, sizeof(str1), "*** %s и stato automaticamente kickato per aver killato al /negozio!", name);
SendClientMessageToAll(COLOR_RED, str1);
KickWithMessage(killerid, COLOR_RED, "*** Sei stato kickato per aver ucciso al /negozio!");
}
kills[killerid] ++;//aumentano le kills
SetPlayerScore(killerid, GetPlayerScore(killerid) + 1);//aumenta di uno score
GivePlayerMoney(killerid, 1000);// ti da soldi
//RICAVO INFORMAZIONI
new nome[MAX_PLAYER_NAME],killer[MAX_PLAYER_NAME];
GetPlayerName(playerid,nome, sizeof(nome));
GetPlayerName(killerid,killer, sizeof(killer));
//SPREE AUMENTA
spree[killerid] ++;
if(spree[killerid] == 10)//se lo spree и = 10
{
SendClientMessage(killerid,COLOR_GREEN,"*** Hai ucciso 10 persone di fila e hai ottenuto un cookie!");
SendClientMessage(killerid,COLOR_GREEN,"*** Uccidine altri 10 per ottenere 3 cookies!");
cookies[killerid] ++;
}
if(spree[killerid] == 20)//se lo spree и = 20
{
SendClientMessage(killerid,COLOR_GREEN,"*** Hai ucciso 20 persone di fila e hai ottenuto 3 cookies!");
SendClientMessage(killerid,COLOR_GREEN,"*** Hai raggiunto il massimo killing - spree e il tuo spree и stato azzerato!");
cookies[killerid] += 3;
spree[killerid] = 0;
}
spree[playerid] = 0;//spree azzerato in caso di morte
//CASO ADMIN KILL
if(lvl[playerid] > 0) return SendClientMessage(killerid,COLOR_YELLOW,"*** Hai ucciso un admin e hai ricevuto un cookie come ricompensa!"),cookies[killerid] ++, ak[killerid] ++;
//fake kill
if(fakekill[playerid] == 5) return BanEx(playerid,"Fake kill");
new Float:x,Float:y,Float:z;
GetPlayerPos(playerid,x,y,z);
if(IsPlayerInRangeOfPoint(killerid, 50, x,y,z))
{
fakekill[playerid] ++;
}
if(reason == 50)
{
SendClientMessage(killerid,COLOR_RED,"*** Sei stato ucciso per helikill!");
SetPlayerHealth(killerid,0);
}
if(eventoox[killerid] == 1)
{
new str1[128],name [24];
GetPlayerName(killerid, name, sizeof(name));
format(str1, sizeof(str1), "*** %s и stato automaticamente kickato per aver killato all'evento OX!", name);
SendClientMessageToAll(COLOR_RED, str1);
KickWithMessage(killerid, COLOR_RED, "*** Sei stato kickato per aver ucciso all'evento OX!");
}
if(wanted[playerid] == 1)
{
wanted[playerid] = 0;
cookies[killerid] ++;
new nomes[24],knome[24],stringaw[256];
GetPlayerName(playerid,nomes,24);
GetPlayerName(killerid, knome, 24);
SendClientMessage(killerid,COLOR_YELLOW,"*** Complimenti, hai ucciso il ricercato vincendo un cookie!");
format(stringaw,sizeof(stringaw),"{FFFF00}[WANTED]: {FF00FF}Il Giocatore %s ha ucciso il ricercato %s ricevendo un cookie come premio!",knome,nomes);
SendClientMessageToAll(-1, stringaw);
}
}
if(eventoox[playerid] == 1)
{
eventoox[playerid] = 2;
SendClientMessage(playerid,COLOR_RED,"*** Digita /joinox per tornare all'evento!");
}
dinamite[playerid] = 0; //variabile dinamite
if(dinamite[playerid] == 1)
{
DestroyDynamicObject(bombobj);
}
morti[playerid] ++;//aumentano le morti
heal[playerid] = 0;
rock[playerid] = 0;
return 1;
}