Pretraga

Pritisnite Enter za pretragu ili Escape za zatvaranje

Zaključano

'OnPlayerDeath' - Array Index Out of Bounds

Započeo Plen Ki Mun
pre 7 godina
1,324
pregleda
9
postova
Ova tema je zaključana. Samo moderatori i administratori mogu odgovarati.
Mate
Underboss
pre 7 godina
Problem(error/warning): Ma nešto zeza OnPlayerDeath callback baca nesto array index out of bounds
Dio skripte
:

public OnPlayerDeath(playerid, killerid, reason)
{
Killstreak(playerid, killerid);

new string;
if(IsPlayerConnected(killerid) && killerid != INVALID_PLAYER_ID)
{
PlayerInfo++;
    PlayerInfo++;
    if(OnHit != 0)
{
GivePlayerMoneyEx(killerid, OnHit);

new result;
format(result, sizeof(result), "{FFFF00}: {FFFFFF}Ubio si %s i zaradio na njegovoj glavi $%d!", GetName(playerid), OnHit);
SCM(playerid, -1, result);
format(result, sizeof(result), "{FFFF00}: {FFFFFF}%s je ubio %d i zaradio $%d!", GetName(killerid), GetName(playerid), OnHit);
SCMToAll(-1, result);
OnHit = 0;
}
if(PlayerInfo >= 1)
{
format(string, 150, ": {FFFFFF}Ubio si %s.", GetName(playerid));
SCM(killerid, -1, string);
GivePlayerMoneyEx(killerid, 1000);
} SetPlayerScore(killerid, GetPlayerScore(killerid)+1);
}
else
{
format(string, 150, ": {FFFFFF}ubio si %s.", GetName(playerid));
SCM(killerid, -1, string);
GivePlayerMoneyEx(killerid, 1000);
SetPlayerScore(killerid, GetPlayerScore(killerid)+1);
}
AntiFakekill++;
SetTimerEx("AntiFakekillTimer", 1000,false,"i",playerid);
SendDeathMessage(killerid,playerid,reason);
SCM(playerid, TOMATO, ": {FFFFFF}Ubijen si nakazo, spremi kofer i pakuj prnje..");
format(string, 150, "~w~Ubijen si od ~r~%s", GetName(killerid));
GameTextForPlayer(playerid, string,2500,3);
return 1;
}


Debug iz server_log(ukoliko je u pitanju crashanje servera - crashdetect log):
[18:47:35] Run time error 4: "Array index out of bounds"
[18:47:35] AMX backtrace:
[18:47:35] #0 0009ae98 in ?? (0, 65535) from CNR.amx
[18:47:35] #1 00058d90 in public OnPlayerDeath (0, 65535, 255) from CNR.amx


Slika/video ingame problema(obavezno ako je ingame problem): //
Milosh
Rookie
pre 7 godina
INVALID_PLAYER_ID je definisano kao 65535.

Napraviš uslov pod OnPlayerDeath.
if(killerid != INVALID_PLAYER_ID) {
      funkcija;
}
Mate
Underboss
pre 7 godina
Već postoji dolje, ali isti problem.
RahimPAWNO
OG Legend
pre 7 godina
Probaj sada, pozivao si funkciju Killstreak(playerid,killerid); prije provjere.

public OnPlayerDeath(playerid, killerid, reason)
{

new string;
if(IsPlayerConnected(killerid) && killerid != INVALID_PLAYER_ID)
{
            Killstreak(playerid, killerid);
    PlayerInfo++;
    PlayerInfo++;
    if(OnHit != 0)
{
GivePlayerMoneyEx(killerid, OnHit);

new result;
format(result, sizeof(result), "{FFFF00}: {FFFFFF}Ubio si %s i zaradio na njegovoj glavi $%d!", GetName(playerid), OnHit);
SCM(playerid, -1, result);
format(result, sizeof(result), "{FFFF00}: {FFFFFF}%s je ubio %d i zaradio $%d!", GetName(killerid), GetName(playerid), OnHit);
SCMToAll(-1, result);
OnHit = 0;
}
if(PlayerInfo >= 1)
{
format(string, 150, ": {FFFFFF}Ubio si %s.", GetName(playerid));
SCM(killerid, -1, string);
GivePlayerMoneyEx(killerid, 1000);
} SetPlayerScore(killerid, GetPlayerScore(killerid)+1);
}
else
{
format(string, 150, ": {FFFFFF}ubio si %s.", GetName(playerid));
SCM(killerid, -1, string);
GivePlayerMoneyEx(killerid, 1000);
SetPlayerScore(killerid, GetPlayerScore(killerid)+1);
}
AntiFakekill++;
SetTimerEx("AntiFakekillTimer", 1000,false,"i",playerid);
SendDeathMessage(killerid,playerid,reason);
SCM(playerid, TOMATO, ": {FFFFFF}Ubijen si nakazo, spremi kofer i pakuj prnje..");
format(string, 150, "~w~Ubijen si od ~r~%s", GetName(killerid));
GameTextForPlayer(playerid, string,2500,3);
return 1;
}
Mate
Underboss
pre 7 godina
Ne radi, opet isto.
Ivan_Ino
Kingpin
pre 7 godina

public OnPlayerDeath(playerid, killerid, reason)
{
if (playerid == INVALID_PLAYER_ID || killerid == INVALID_PLAYER_ID) {
return 1;
}

Killstreak(playerid, killerid);

new string;
if(IsPlayerConnected(killerid) && killerid != INVALID_PLAYER_ID)
{
PlayerInfo++;
    PlayerInfo++;
    if(OnHit != 0)
{
GivePlayerMoneyEx(killerid, OnHit);

new result;
format(result, sizeof(result), "{FFFF00}: {FFFFFF}Ubio si %s i zaradio na njegovoj glavi $%d!", GetName(playerid), OnHit);
SCM(playerid, -1, result);
format(result, sizeof(result), "{FFFF00}: {FFFFFF}%s je ubio %d i zaradio $%d!", GetName(killerid), GetName(playerid), OnHit);
SCMToAll(-1, result);
OnHit = 0;
}
if(PlayerInfo >= 1)
{
format(string, 150, ": {FFFFFF}Ubio si %s.", GetName(playerid));
SCM(killerid, -1, string);
GivePlayerMoneyEx(killerid, 1000);
} SetPlayerScore(killerid, GetPlayerScore(killerid)+1);
}
else
{
format(string, 150, ": {FFFFFF}ubio si %s.", GetName(playerid));
SCM(killerid, -1, string);
GivePlayerMoneyEx(killerid, 1000);
SetPlayerScore(killerid, GetPlayerScore(killerid)+1);
}
AntiFakekill++;
SetTimerEx("AntiFakekillTimer", 1000,false,"i",playerid);
SendDeathMessage(killerid,playerid,reason);
SCM(playerid, TOMATO, ": {FFFFFF}Ubijen si nakazo, spremi kofer i pakuj prnje..");
format(string, 150, "~w~Ubijen si od ~r~%s", GetName(killerid));
GameTextForPlayer(playerid, string,2500,3);
return 1;
}


mozda ovako?

usput, da li je crasher dao vise linija loga, trebao bi prikazati broj linije gdje se poziva ta metoda
Mate
Underboss
pre 7 godina
@Ino42O

Pokusat cu sada ovo za death, ali mi isto i ovo u log izbacuje jer sam prebacio na novi ServerSided money.

Log:
[10:22:47] #0 00092ccc in public GivePlayerCash (65535, 2500) from CNR.amx


Kod:

// Anti-Money Hack
forward GivePlayerCash(playerid, money);
public GivePlayerCash(playerid, money)
{
    CashC += money;
    ResetMoneyBar(playerid);
    UpdateMoneyBar(playerid,CashC);
    return CashC;
}
forward SetPlayerCash(playerid, money);
SetPlayerCash(playerid, money)
{
    CashC = money;
    ResetMoneyBar(playerid);
    UpdateMoneyBar(playerid,CashC);
    return CashC;
}
forward ResetPlayerCash(playerid);
ResetPlayerCash(playerid)
{
    CashC = 0;
    ResetMoneyBar(playerid);
    UpdateMoneyBar(playerid,CashC);
    return CashC;
}
forward GetPlayerCash(playerid);
GetPlayerCash(playerid)
{
    return CashC;
}
Ivan_Ino
Kingpin
pre 7 godina
dodas provjere gdje pozivas te funkcije tipa:
if (IsPlayerConnected(id)) {
GivePlayerCash(id, money);
}


ili

forward GivePlayerCash(playerid, money);
public GivePlayerCash(playerid, money)
{
if (!IsPlayerConnected(playerid)) {
return 1;
}

    CashC += money;
    ResetMoneyBar(playerid);
    UpdateMoneyBar(playerid,CashC);
    return CashC;
}
Rax_King
Godfather
pre 7 godina
65535 broj ti predstavlja najcesce INVALID_PLAYER_ID/VEHICLE_ID

Morate biti prijavljeni da biste odgovorili na ovu temu.

Prijava