PDA

Просмотр полной версии : [Вопрос] OnPlayerDeath



semen7907
29.04.2014, 13:17
Подскажите что не так, когда я умираю, вылазит это:


[14:13:14] [debug] Run time error 4: "Array index out of bounds"
[14:13:14] [debug] Accessing element at index 65535 past array upper bound 60
[14:13:14] [debug] AMX backtrace:
[14:13:14] [debug] #0 000d23bc in public OnPlayerDeath (playerid=0, killerid=65535, reason=255) at C:\Users\name\Desktop\Mod.pwn:774






new die[120];
new Float:HPKiller[MAX_PLAYERS];
new Float:ARMKiller[MAX_PLAYERS];
GetPlayerHealth(killerid, HPKiller[playerid]);
GetPlayerArmour(killerid, ARMKiller[playerid]);
format(die, sizeof(die), "Âàñ óáèë {FFFF00}%s {33FF66}ó íåãî îñòàëîñü {33FFFF}%.1f {33FF66}HP è {33FFFF}%.1f {33FF66}Áðîíè", playerName(killerid), HPKiller[playerid], ARMKiller[playerid]);
SendClientMessage(playerid, 0x33FF66AA, die);

Caypen
29.04.2014, 14:03
playerName(killerid
В этом,ты узнаешь имя убийцы в любом случае, даже если убийцы нет а именно INVALID_PLAYER_ID

XemyL
29.04.2014, 14:22
Для исправления, сделай чтобы этот код выполнялся только при условии:

if(killerid != INVALID_PLAYER_ID)

DeimoS
29.04.2014, 17:25
Вообще паблик должен иметь такой вид

public OnPlayerDeath(playerid, killerid, reason)
{
//Тут общий код (например, массив для хранения текста) и всё, что связано только с playerid (а так же SendDeathMessage, если оно есть)
if(killerid != INVALID_PLAYER_ID)
{
//А тут всё, что связано с killerid. Все массивы, функции и прочее.
}
return 1;
}
И так же во всех случаях работы с массивами. Например, если имеется переменная, значение которой используется как индекс для обращения к ячейке массива, и для этой переменной задать значение, например, "-1", получится выход за пределы массива, ибо ячейки "-1" не существует. Поэтому в таких случаях так же следует продумывать проверку и не допускать значений, которые превышают размеры массива.