PDA

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



HarrWe
06.09.2016, 08:26
Дратути, сегодня с утра заметил что не робит команда. Сразу вырубил сервер пошёл искать ошибку, но её не нашёл, потом запустил ещё раз сервер, выполнил команду, она опять не заработала, и когда сворачивал игру заметил консоль...

[07:09:04] [debug] Run time error 4: "Array index out of bounds"
[07:09:04] [debug] Accessing element at index 232 past array upper bound 46
[07:09:04] [debug] AMX backtrace:
[07:09:04] [debug] #0 00037f98 in public cmd_dropgun (playerid=0, ... <1 argument>) at C:\Users\has\Desktop\Сервер\gamemodes\fas.pwn:3239
[07:09:04] [debug] #1 native DC_CMD () from dc_cmd.DLL
[07:09:04] [debug] #2 0000137c in public OnPlayerCommandText (playerid=0, cmdtext[]=@00071abc "/dropgun") at C:\Users\has\Desktop\Сервер\pawno\include\dc_cmd.inc:62

Вот это команда
3239 строка -

new f = MAX_DROP_GUN+1;


CMD:dropgun(playerid)
{
SetPVarInt(playerid,"Floodgun",GetTickCount());new str23[30];
if(GetPlayerState(playerid) != PLAYER_STATE_ONFOOT) return 1;
new GunID = GetPlayerWeapon(playerid);
new GunSlot = convert_slot(GunID);
new GunAmmo = GetPlayerAmmo(playerid);
if(GunID > 0 && GunAmmo != 0)
{
new f = MAX_DROP_GUN+1;
for(new a = 0; a < MAX_DROP_GUN; a++)
{
if(gi[a][ObjPos][0] == 0.0)
{
f = a;
break;
}
}
ResetPlayerWeaponSlot(playerid, GunSlot);
gi[f][ObjData][0] = GunID;
gi[f][ObjData][1] = GunAmmo;
GetPlayerPos(playerid, gi[f][ObjPos][0], gi[f][ObjPos][1], gi[f][ObjPos][2]);
gi[f][ObjID] = CreateDynamicObject(gun_info[GunID][0], gi[f][ObjPos][0], gi[f][ObjPos][1], gi[f][ObjPos][2]-1, 93.7, 120.0, 120.0);

format(str23, 60, "Вы выкинули | {FFFFFF}%s", gun_info[gi[f][ObjData][1]]);
SendClientMessage(playerid, -1, str23);
return true;
}
return true;
}

В моём старом моде это команда отлично работала.

DeimoS
06.09.2016, 10:59
Значение MAX_DROP_GUN покажи (как макрос объявлен).
И инициализацию массива gi (new gi[...][...])

HarrWe
06.09.2016, 17:35
#define MAX_DROP_GUN 50


enum gInfo
{
Float:ObjPos[3],
ObjID,
ObjData[2]
};
new gi[MAX_DROP_GUN][gInfo];



Всё тему можно закрыть, проблема была в format(str23, 60, "Вы выкинули | %s", gun_info[gi[f][ObjData][1]]);

Вот тут) gun_info[gi[f][ObjData][1]]

gun_info[gi[f][ObjData]][1]

DeimoS спс что пытался помочь)

Daniel_Cortez
06.09.2016, 18:30
На будущее, для таких проблем уже есть отдельный урок:
http://pro-pawn.ru/showthread.php?12957