PDA

Просмотр полной версии : [Вопрос] Run Time error 4 "Array index out of bounds" (OnPlayerDeath)



Dima_Tushin
10.11.2014, 13:52
Вот у меня вопрос как определить ошибку в CrashDetectore я подключил его к моду и меня вышло вот это!



run Time error 4 "Array index out of bounds"

accessing element at index 65535 past array upper bound 499

AMX backtrace:

#0 0000e138 in public OnPlayerDeath (1, 65535, 54) From new.amx
Перевод:


пробег Время ошибка 4 "Индекс массива выходит за границы"

доступ элемент в индекс 65535 прошлом массива верхняя граница 499

AMX трассировку:

# 0 0000e138 в общественном OnPlayerDeath (1, 65535, 54) От new.amx
/========================[Теперь во Фрагам]============================/
проблема в том когда убиваешь человека в Квадрате зоны SKills не прибавляется помогите!


new ScoreZahvat[MAX_PLAYERS];//Скиллы
new Time[MAX_PLAYERS];//Время Войны
new Text:CaptureMafia[2];//ТекстДрав!
new Capture[MAX_PLAYERS];//Зона Войны
enum Mz
{
mFrackVlad,//Владельцы бизнеса
mNapad,//Нападение на бизнеса
}
new MZInfo[1][Mz];


if(strcmp(cmd, "/bizwar", true) == 0)
{
if(IsAMafia(playerid))
{
for(new b = 0; b < TotalSBizz; b++)
{
if(PlayerToPoint(3, playerid, SBizzInfo[b][sbEntranceX], SBizzInfo[b][sbEntranceY], SBizzInfo[b][sbEntranceZ]))
{
MZInfo[0][mNapad] = PlayerInfo[playerid][pMember];
MZInfo[0][mFrackVlad] = SBizzInfo[b][sbMafia];

format(Stringers, sizeof(Stringers), "%s Напала на %s. Бизнес: %s", GetMafiaName(PlayerInfo[playerid][pMember]), GetMafiaName(SBizzInfo[b][sbMafia]), SBizzInfo[b][sbMessage]);
SendFamilyMessage(SBizzInfo[b][sbMafia], COLOR_BLUE, Stringers);
format(Stringers, sizeof(Stringers), "%s Напала на %s. Бизнес: %s", GetMafiaName(PlayerInfo[playerid][pMember]), GetMafiaName(SBizzInfo[b][sbMafia]), SBizzInfo[b][sbMessage]);
SendFamilyMessage(PlayerInfo[playerid][pMember], COLOR_GREEN, Stringers);

Capture[playerid] = GangZoneCreate(328.755706, 2412.644531, 448.755706, 2564.644531);
GangZoneShowForAll(Capture[playerid], COLOR_YELLOW);
GangZoneFlashForAll(Capture[playerid], COLOR_BLUE);
// ScoreZahvat[MZInfo[0][mNapad]] = 0;
// ScoreZahvat[MZInfo[0][mFrackVlad]] = 0;
Time[playerid] = 350;
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(PlayerInfo[i][pMember] == MZInfo[0][mNapad] || PlayerInfo[i][pMember] == MZInfo[0][mFrackVlad])
{
format(Stringers, sizeof(Stringers), "~g~%s~y~: ~g~Skills: ~y~%d", GetMafiaName(MZInfo[0][mNapad]), ScoreZahvat[MZInfo[0][mNapad]]);
TextDrawSetString(CaptureMafia[0], Stringers);
format(Stringers, sizeof(Stringers), "~g~%s~y~: ~g~Skills: ~y~%d", GetMafiaName(MZInfo[0][mFrackVlad]), ScoreZahvat[MZInfo[0][mFrackVlad]]);
TextDrawSetString(CaptureMafia[1], Stringers);
TextDrawShowForPlayer(i, CaptureMafia[0]), TextDrawShowForPlayer(i, CaptureMafia[1]);
}
}
}
}
}
return 1;
}


if(Time[i] > 0)
{
Time[i] --;//Отмимаем время
if(Time[i] == 300)
{
SendFamilyMessage(MZInfo[0][mFrackVlad], COLOR_WHITE,"[Внимание]: Время до захвата бизнеса осталось 5 минут!");
SendFamilyMessage(MZInfo[0][mNapad], COLOR_WHITE,"[Внимание]: Время до захвата бизнеса осталось 5 минут!");
return 1;
}
if(Time[i] == 120)
{
SendFamilyMessage(MZInfo[0][mFrackVlad], COLOR_WHITE,"[Внимание]: Время до захвата бизнеса осталось 2 минут!");
SendFamilyMessage(MZInfo[0][mNapad], COLOR_WHITE,"[Внимание]: Время до захвата бизнеса осталось 2 минут!");
return 1;
}
if(Time[i] == 60)
{
SendFamilyMessage(MZInfo[0][mFrackVlad], COLOR_WHITE, "[Внимание]: Время до захвата бизнеса осталось 1 минута");
SendFamilyMessage(MZInfo[0][mNapad], COLOR_WHITE, "[Внимание]: Время до захвата бизнеса осталось 1 минута");
return 1;
}
if(Time[i] == 0)
{
for(new e = 0; e < TotalSBizz; e++)
{
SendFamilyMessage(MZInfo[0][mFrackVlad], COLOR_WHITE, "[Внимание]: Время до захвата бизнеса вышло!");
SendFamilyMessage(MZInfo[0][mNapad], COLOR_WHITE, "[Внимание]: Время до захвата бизнеса вышло!");
if(ScoreZahvat[MZInfo[0][mFrackVlad]] > ScoreZahvat[MZInfo[0][mNapad]])
{
MZInfo[0][mFrackVlad] = SBizzInfo[i][sbMafia];
SendFamilyMessage(MZInfo[0][mFrackVlad], COLOR_WHITE, "[Победа!]: Вы отстояли свой бизнес!");
SendFamilyMessage(MZInfo[0][mNapad], COLOR_WHITE, "[Поражение]: Вы не смогли захватить новый бизнес!");
SaveSBizz(e);
return 1;
}
else
{
MZInfo[0][mNapad] = SBizzInfo[i][sbMafia];
SendFamilyMessage(MZInfo[0][mNapad], COLOR_WHITE, "[Победа!]: Вы захватили новый бизнес!");
SendFamilyMessage(MZInfo[0][mFrackVlad], COLOR_WHITE, "[Поражение]: Вы не смогли отстоять свой бизнес!");
SaveSBizz(e);
return 1;
}
}
// ScoreZahvat[MZInfo[0][mFrackVlad]] = 0;
// ScoreZahvat[MZInfo[0][mNapad]] = 0;
Time[i] = 0;
GangZoneStopFlashForAll(Capture[i]);
GangZoneHideForAll(Capture[i]);
GangZoneShowForAll(Capture[i], COLOR_YELLOW);
TextDrawHideForPlayer(i, CaptureMafia[0]);
TextDrawHideForPlayer(i, CaptureMafia[0]);
return 1;
}
}

public OnPlayerDeath(playerid, killerid, reason)
{

if(SelectChar[playerid] == 9999)
{
SetPlayerSkin(playerid, OldSkin[playerid]);
PlayerInfo[playerid][pSkin] = OldSkin[playerid];
SelectChar[playerid] = 0;
}
CharPrice[playerid] = 0;
SelectCharID[playerid] = 0;
if(IsAMafia(playerid))
{
if(PlayerToKvadrat(playerid, 328.755706, 2412.644531, 448.755706, 2564.644531))
{
if(MZInfo[0][mFrackVlad] == PlayerInfo[killerid][pMember] && MZInfo[0][mNapad] == PlayerInfo[playerid][pMember])
{
ScoreZahvat[MZInfo[0][mNapad]]++;
}
if(MZInfo[0][mNapad] == PlayerInfo[killerid][pMember] && MZInfo[0][mFrackVlad] == PlayerInfo[playerid][pMember])
{
ScoreZahvat[MZInfo[0][mFrackVlad]]++;
}
format(Stringers, sizeof(Stringers), "~g~%s~y~: ~g~Skills: ~y~%d", MZInfo[0][mNapad], ScoreZahvat[MZInfo[0][mNapad]]);
TextDrawSetString(CaptureMafia[0], Stringers);
format(Stringers, sizeof(Stringers), "~g~%s~y~: ~g~Skills: ~y~%d", MZInfo[0][mFrackVlad], ScoreZahvat[MZInfo[0][mFrackVlad]]);
TextDrawSetString(CaptureMafia[1], Stringers);
}
return 1;
}
return 1;
}

DeimoS
10.11.2014, 14:05
Выход за пределы массива. В данном случае это случается, когда игрок умирает сам по себе. В параметр killerid передаётся значение INVALID_PLAYER_ID (это макрос, в котором указано число 65535) и чтоб избежать подобной ошибки, нужно просто проверять killerid

public OnPlayerDeath(playerid, killerid, reason)
{

if(SelectChar[playerid] == 9999)
{
SetPlayerSkin(playerid, OldSkin[playerid]);
PlayerInfo[playerid][pSkin] = OldSkin[playerid];
SelectChar[playerid] = 0;
}
CharPrice[playerid] = 0;
SelectCharID[playerid] = 0;
if(IsAMafia(playerid))
{
if(PlayerToKvadrat(playerid, 328.755706, 2412.644531, 448.755706, 2564.644531))
{
if((MZInfo[0][mFrackVlad] == PlayerInfo[killerid][pMember] && killerid != INVALID_PLAYER_ID) && MZInfo[0][mNapad] == PlayerInfo[playerid][pMember])
{
ScoreZahvat[MZInfo[0][mNapad]]++;
}
if((MZInfo[0][mNapad] == PlayerInfo[killerid][pMember] && killerid != INVALID_PLAYER_ID) && MZInfo[0][mFrackVlad] == PlayerInfo[playerid][pMember])
{
ScoreZahvat[MZInfo[0][mFrackVlad]]++;
}
format(Stringers, sizeof(Stringers), "~g~%s~y~: ~g~Skills: ~y~%d", MZInfo[0][mNapad], ScoreZahvat[MZInfo[0][mNapad]]);
TextDrawSetString(CaptureMafia[0], Stringers);
format(Stringers, sizeof(Stringers), "~g~%s~y~: ~g~Skills: ~y~%d", MZInfo[0][mFrackVlad], ScoreZahvat[MZInfo[0][mFrackVlad]]);
TextDrawSetString(CaptureMafia[1], Stringers);
}
return 1;
}
return 1;
}

Dima_Tushin
10.11.2014, 14:14
хе-хе блин все знаете ) Спасибо!