Ben_Lovejoy
Компетентный
Добрый вечер уважаемые форумчане, столкнулся с такой проблемой. Проверил мод на crashdetect и вот что он мне показал:
Как Вы уже заметили ошибка произошла от паблика public MainTimer ()
Что бы это могло значить? Кто подскажет как исправить проблему, плюсом не обделю.
Сам паблик:
PHP:
[21:14:35] [debug] Run time error 4: "Array index out of bounds"
[21:14:35] [debug] Accessing element at index 412 past array upper bound 2
[21:14:35] [debug] AMX backtrace:
[21:14:35] [debug] #0 001cea28 in ?? () from gamemode.amx
[21:14:35] [debug] #1 001ce720 in ?? () from gamemode.amx
[21:14:35] [debug] #2 001c1ec4 in public MainTimer () from gamemode.amx
[21:14:36] [debug] Run time error 4: "Array index out of bounds"
Что бы это могло значить? Кто подскажет как исправить проблему, плюсом не обделю.
Сам паблик:
PHP:
public MainTimer()
{
if(FrakCD > 0 && IsCapture == 0) FrakCD--;
WHDataUpdate();
for(new i;i<6;i++) if(gGunWorkTime[i]) gGunWorkTime[i]--;
for(new i2;i2<2;i2++)
{
new text[256];
strcat(text,"{"#cLIGHTBLUE"} Очередь на загрузку:{"#cWHITE"}");
for(new i;i<10;i++)
{
if(gTruckLoadTurn[i2][i] != INVALID_PLAYER_ID && !IsPlayerConnected(gTruckLoadTurn[i2][i])) gTruckLoadTurn[i2][i] = INVALID_PLAYER_ID;
if(i != 9 && gTruckLoadTurn[i2][i] == INVALID_PLAYER_ID && gTruckLoadTurn[i2][i+1] != INVALID_PLAYER_ID) {gTruckLoadTurn[i2][i] = gTruckLoadTurn[i2][i+1]; gTruckLoadTurn[i2][i+1] = INVALID_PLAYER_ID;}
if(gTruckLoadTurn[i2][i] != INVALID_PLAYER_ID) format(text,sizeof(text),"%s\n%d. %s",text,i+1,pData[gTruckLoadTurn[i2][i]][pNickname]);
else format(text,sizeof(text),"%s\n%d. Свободно",text,i+1);
}
UpdateDynamic3DTextLabelText(gTruckLoadTurnText[i2], CWHITE, text);
if(gTruckLoadTurn[i2][0] != INVALID_PLAYER_ID)
{
new playerid = gTruckLoadTurn[i2][0];
new amount = GetPVarInt(playerid,"truckamount");
if(IsPlayerConnected(playerid))
{
if(pTemp[playerid][pTruckWagonID] != INVALID_VEHICLE_ID)
{
if(amount - pTemp[playerid][pTruckWeight] == 100)
{
pTemp[playerid][pTruckWeight] += 100;
if(!i2) gCoalWH -= 100;
else gWoodWH -= 100;
pTemp[playerid][pTruckWagonTime] = 60;
SendClientMessage(playerid,CGREEN,"Ваша фура загружена. У Вас есть 1 минута чтобы прицепить её");
SendClientMessage(playerid,CGREEN,"Если не успеете заказ будет аннулирован. Деньги не возвращаются");
}
else if(pTemp[playerid][pTruckWeight] < amount)
{
pTemp[playerid][pTruckWeight] += 100;
if(!i2) gCoalWH -= 100;
else gWoodWH -= 100;
}
else if(pTemp[playerid][pTruckWagonTime] && GetPVarInt(playerid,"waitgruz") == 2) pTemp[playerid][pTruckWagonTime]--;
if(pTemp[playerid][pTruckWagonTime] < 1 && GetPVarInt(playerid,"waitgruz") == 2)
{
if(IsValid3DTextLabel(pTemp[playerid][pTruckWagonText])) DestroyDynamic3DTextLabelEx(pTemp[playerid][pTruckWagonText]);
DestroyVehicle(pTemp[playerid][pTruckWagonID]);
pTemp[playerid][pTruckWagonText] = Text3D:INVALID_3DTEXT_ID;
pTemp[playerid][pTruckWagonID] = INVALID_VEHICLE_ID;
pTemp[playerid][pTruckWeight] = 0;
pTemp[playerid][pTruckWagonTime] = 0;
gTruckLoadTurn[i2][0] = INVALID_PLAYER_ID;
SendClientMessage(playerid,CRED,"Вы не успели. Заказ аннулирован");
}
if(pTemp[playerid][pTruckWagonText] != Text3D:INVALID_3DTEXT_ID)
{
new mes[128];
if(i2 == 0) format(mes,sizeof(mes),"{"#cGREEN"}Угля в фуре: {"#cWHITE"}%d/%d",pTemp[playerid][pTruckWeight],amount);
if(i2 == 1) format(mes,sizeof(mes),"{"#cGREEN"}Древесины в фуре: {"#cWHITE"}%d/%d",pTemp[playerid][pTruckWeight],amount);
UpdateDynamic3DTextLabelText(pTemp[playerid][pTruckWagonText],CWHITE,mes);
}
}
else
{
SendClientMessage(playerid,CWHITE,"Подошла очередь загрузки вашей фуры");
SendClientMessage(playerid,CWHITE,"После загрузки у Вас будет всего минута, чтобы прицепить её.");
SetPVarInt(playerid,"waitgruz",2);
pTemp[playerid][pTruckWagonTime] = 60;
if(!i2) pTemp[playerid][pTruckWagonID] = CreateVehicle(450,384.9763,902.6101,20.2163,82.9793,1,1,-1);
else pTemp[playerid][pTruckWagonID] = CreateVehicle(450,-2003.7578,-2421.1641,31.6471,134.4641,1,1,-1);
if(pTemp[playerid][pTruckWagonText] != Text3D:INVALID_3DTEXT_ID) DestroyDynamic3DTextLabelEx(pTemp[playerid][pTruckWagonText]);
pTemp[playerid][pTruckWagonText] = CreateDynamic3DTextLabel("_",CWHITE,0.0,0.0,2.0,20.0,INVALID_PLAYER_ID,pTemp[playerid][pTruckWagonID]);
}
if(!IsPlayerInDynamicArea(playerid,gAreas[arTruckWagonCoal]) && !IsPlayerInDynamicArea(playerid,gAreas[arTruckWagonWood]) && (gTruckLoadTurn[0][0] == playerid || gTruckLoadTurn[1][0] == playerid))
{
new vehicleid = GetPlayerVehicleID(playerid);
if(IsTrailerAttachedToVehicle(vehicleid))
{
new trailerid = GetVehicleTrailer(vehicleid);
if(pTemp[playerid][pTruckWagonID] == trailerid)
{
new loadid = GetPVarInt(playerid,"loadid");
pTemp[playerid][pTruckLoadID] = loadid;
DeletePVar(playerid,"loadid");
SetPVarInt(playerid,"truckonroad",1);
gTruckLoadTurn[loadid][0] = INVALID_PLAYER_ID;
SendClientMessage(playerid,CWHITE,"Теперь можете спокойно ехать к оружейному заводу. (( /gps => Дальнобойщики => Оружейный завод ))");
}
else
{
SendClientMessage(playerid,CGRAY,"Данную фуру уже арендуют");
RemovePlayerFromVehicle(playerid);
}
}
}
}
}
}
new text[256];
strcat(text,"{"#cINFO"} Очередь на экзамен:{"#cWHITE"}");
for(new i;i<20;i++)
{
if(gDSTurn[i] != INVALID_PLAYER_ID && !IsPlayerConnected(gDSTurn[i]) || (gDSTurn[i] != INVALID_PLAYER_ID && !pTemp[gDSTurn[i]][pWaitingExam])) gDSTurn[i] = INVALID_PLAYER_ID;
if(i != 19 && gDSTurn[i] == INVALID_PLAYER_ID && gDSTurn[i+1] != INVALID_PLAYER_ID)
{
gDSTurn[i] = gDSTurn[i+1];
gDSTurn[i+1] = INVALID_PLAYER_ID;
if(!i)
{
new mes[128];
format(mes,sizeof(mes),"%s ожидает вызова на практический экзамен по вождению",pData[gDSTurn[0]][pNickname]);
for(new j;j<MAX_PLAYERS;j++)
{
if(!IsPlayerConnected(j) || !pTemp[j][pLogined]) continue;
else if(pData[j][pFraction] == 1)
{
SendClientMessage(j,CINFO,mes);
}
}
}
}
if(gDSTurn[i] != INVALID_PLAYER_ID) format(text,sizeof(text),"%s\n%d. %s",text,i+1,pData[gDSTurn[i]][pNickname]);
}
UpdateDynamic3DTextLabelText(gDSTurnText,CWHITE,text);
if(gGangRespawnCar) gGangRespawnCar--;
if(RestartTime)
{
RestartTime--;
new mes[36];
format(mes,sizeof(mes),"~w~RESTART %d SEC",RestartTime);
GameTextForAll(mes,2000,3);
if(!RestartTime)
{
SendRconCommand("gmx");
RestartTime = 0;
}
}
for(new i;i<MAX_PLAYERS;i++)
{
if(gReconnectTime[i]) gReconnectTime[i]--;
pTemp[i][pKick2] = 0;
/*pTemp[i][pOff] = 0;*/
/* if(!pTemp[i][pLogined])
{
pTemp[i][pLoginTime]--;
if(pTemp[i][pLoginTime] <= 0)
{
SendClientMessage(i,CRED,"Время на регистрацию / вход ограничено");
NewKick(i);
}
}*/
pTemp[i][pAFK] ++;
if(pTemp[i][pAFK] >= 3)
{
new mes[128];
format(mes,sizeof(mes),"{"#cRED"}На паузе %s сек.",Converts(pTemp[i][pAFK]));
SetPlayerChatBubble(i,mes,CWHITE,10.0,1600);
pTemp[i][pIsAFK] = true;
}
if(pData[i][pAdmin] < 3 && (pTemp[i][pAFK] > 900 || pTemp[i][pDarkAFK] > 900))
{
SendClientMessage(i,CGRAY,"Вы были кикнуты за простой в АФК");
NewKick(i);
}
if(pTemp[i][pFillGoing])
{
new vehicleid = GetPlayerVehicleID(i);
if(vehicleid && pTemp[i][pFillingAmount] > gVehicles[vehicleid-1][vFuel] + 1.0) gVehicles[vehicleid-1][vFuel] += 1.0;
else if(vehicleid)
{
gVehicles[vehicleid-1][vFuel] = pTemp[i][pFillingAmount];
TogglePlayerControllable(i,1);
SendClientMessage(i,CGREEN,"Транспорт заправлен, можете ехать");
pTemp[i][pFilling] = false;
pTemp[i][pFillGoing] = false;
pTemp[i][pFillingAmount] = 0.0;
pTemp[i][pFillingSpeed] = 0.0;
pTemp[i][pFillingAccel] = 0.0;
pTemp[i][pFillingID] = 0;
pTemp[i][pFillingPrice] = 0;
}
}
if(GetPlayerSurfingVehicleID(i) != INVALID_VEHICLE_ID)
{
new cid = GetPlayerSurfingVehicleID(i);
new cm = GetVehicleModel(cid); // получаем модель авто
switch(cm)
{
case 430,446,452,453,454,472,473,484,493,595:{return 1;} // если это лодка, скидывать ненадо)
default:{}
}
new Float:x, Float:y, Float:z;
GetPlayerPos(i,x,y,z);
x -= 1.5;
SetPlayerPos(i,x,y,z);
}
if(pTemp[i][pWork] == 2 && IsPlayerInDynamicArea(i,gAreas[arAntiCleo]))
{
new Float:x, Float:y, Float:z;
GetPlayerPos(i,x,y,z);
if(z < -100.0)
{
SFCM(i,CGRAY,"Вы были кикнуты по подозрению в читерстве (Спидхак / ТП / Флай 7 ) (%.2f)",RandomEx(10,15) + RandomEx(0,100)/100 + 0.0);
//NewKick(i);
}
}
if(pTemp[i][pTazer])
{
pTemp[i][pTazer]--;
if(!pTemp[i][pTazer])
{
SetPlayerSpecialAction(i,SPECIAL_ACTION_NONE);
TogglePlayerControllable(i,1);
}
}
if(GetPlayerVirtualWorld(i) != pTemp[i][pWorld]) pTemp[i][pWorldKick]++;
/* if(logFreez && pTemp[i][pWorldKick] == 3 && IsPlayerConnected(i))
{
new mes[128];
format(mes,sizeof(mes),"%s [%d] подозревается во фризе виртуального мира",pData[i][pNickname],i);
AdminChat(CRED,mes);
pTemp[i][pWorldKick] = 0;
}*/
if(pTemp[i][pAdvertTime] > 0) pTemp[i][pAdvertTime]--;
}
new h, m;
gettime(h,m);
if(gCurMinutes != m)
{
gCurMinutes = m;
if(gCurHour != h)
{
gCurHour = h;
if(h == 5 && m == 0) SendClientMessageToAll(CRED,"Внимание, через 3 минуты произойдёт автоматический рестарт сервера!");
}
else if(m == 2 && h == 5) hbminus();
else if(m == 3 && h == 5)
{
SendClientMessageToAll(CRED,"Авторестарт сервера... (#8)");
GameModeExit();
}
}
//Объявления
if(gAdvertTime > 0) gAdvertTime--;
for(new i;i<MAX_ADVERT_COUNT;i++)
{
if(gAdvert[i][adTime]) gAdvert[i][adTime]--;
if(gAdvert[i][adCheked] && !gAdvert[i][adTime])
{
// gNewsMoney += gAdvert[i][adMoney];
// SaveNewsMoney();
new mes[168];
format(mes,sizeof(mes),"%s Отправитель: %s (тел. %d)",gAdvert[i][adText],gAdvert[i][adSender],gAdvert[i][adPhone]);
SendClientMessageToAll(0x00FF00FF,mes);
format(mes,sizeof(mes)," Объявление проверил: %s %s",gAdvert[i][adRang], gAdvert[i][adCheker]);
SendClientMessageToAll(CGREEN,mes);
strdel(gAdvert[i][adSender],0,24);
gAdvert[i][adPhone] = 0;
strdel(gAdvert[i][adText],0,100);
strdel(gAdvert[i][adCheker],0,24);
gAdvert[i][adBusy] = false;
gAdvert[i][adCheked] = false;
gAdvert[i][adCheking] = false;
gAdvert[i][adTime] = 0;
if(gAdvertCount > 0) gAdvertCount--;
}
}
return 1;
}
Последнее редактирование:
