PDA

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



Ne_nub
14.07.2017, 20:59
Доброго времени суток. Возникла такая проблема. В консоле при уничтожении машины пишет ошибку, она в public OnVehicleDeath, на строчке 6751


Run time error 4: "Array index out of bounds"
[debug] Attempted to read/write array element at negative index -1
[debug] AMX backtrace:
[debug] #0 002e29e8 in public OnVehicleDeath (vehicleid=266, killerid=0) at D:\Mod\gamemodes\edit.pwn:6751



public OnVehicleDeath(vehicleid, killerid)
{
if(killerid != INVALID_PLAYER_ID && !IsPlayerConnected(killerid)) return 0;
new Float: pos[3];
GetVehicleRotation(vehicleid, pos[0], pos[1], pos[2]);
if((pos[1] < 90 && pos[1] > -90) && VehicleInfo[vehicleid][vDriver] == INVALID_PLAYER_ID && GetPVarInt(killerid, "lastveh") != vehicleid && killerid != INVALID_PLAYER_ID)
{
if(AntiCheatMessage[killerid] == 0)
{
new string[128];
format(string, sizeof(string), "%s[%d] возможно использует CarFair", GetName(killerid), killerid);
SendAdminMessage(COLOR_ORANGE, string);
WriteLog("CheatLog", string);
}
AntiCheatMessage[killerid] = 10;
return 0;
}
DeletePVar(killerid, "lastveh");
if(vehicleid >= aTruck[0][0] && vehicleid <= aTruck[2][1])
{
new playerid = VehicleInfo[vehicleid][vDriver];
if(playerid != INVALID_PLAYER_ID)
{
SendClientMessage(playerid,COLOR_RED,"Трак уничтожен.Вам было возвращено 80% от стоимости груза.");
new back = pTemp[playerid][pTruckWeight]/100*80*2;
TransferMoney(-1,playerid,back,"Возврат за уничтоженый трак", 1);
if(pTemp[playerid][pTruckWagonID] != INVALID_VEHICLE_ID)
{
if(IsValidDynamic3DTextLabel(pTemp[playerid][pTruckWagonText]))
{
DestroyDynamic3DTextLabel(pTemp[playerid][pTruckWagonText]);
pTemp[playerid][pTruckWagonText] = Text3D:INVALID_3DTEXT_ID;
}
DestroyVehicle(pTemp[playerid][pTruckWagonID]);
pTemp[playerid][pTruckWagonID] = INVALID_VEHICLE_ID;
pTemp[playerid][pTruckWagonTime] = 0;
pTemp[playerid][pTruckWeight] = 0;
pTemp[playerid][pTruckLoadID] = 0;
SetPVarInt(playerid,"informed",0);
SetPVarInt(playerid,"truckonroad",0);
}
pTemp[playerid][pTruckID] = INVALID_VEHICLE_ID;
}
}
new get_rent = GetArendCarID(vehicleid);
if(get_rent != INVALID_VEHICLE_ID)
{
new playerid = ArendInfo[get_rent][aPlayerID]; //Вот эта строчка.
ArendInfo[get_rent][aPlayerID] = INVALID_PLAYER_ID;
if(IsPlayerConnected(playerid) && GetPVarInt(playerid, "arendkey") == get_rent)
{
SendClientMessage(playerid, COLOR_WHITE, "Транспорт, который вы арендовали, был уничтожен. Аренда закончилась");
SetPVarInt(playerid, "arendkey", -1);
}
}
return 1;
}

Osetin
17.07.2017, 02:01
Выход за пределы массива - http://pro-pawn.ru/showthread.php?12957

BodyanZe
05.08.2017, 22:13
Нету проверки на то, что машина не является арендной, поэтому в проверку
if(get_rent != INVALID_VEHICLE_ID) стоит добавить
if(get_rent != INVALID_VEHICLE_ID && get_rent >= 0)