Vfox
Дебютант
Добрый вечер. Кто может помогите пожалуйста.В Pawn разбираюсь не особо хорошо, но хочу пофиксить ошибку. Когда убиваю себя командой /sethp, падаю на землю или убиваю себя взрывом, выводится в лог сервера вот это:
[20:39:15] Игрок Vladimir_Rizhskiy только что использовал команду "/sethp 0 0 "
[20:39:15] Игрок Vladimir_Rizhskiy только что умер
[20:39:15] [debug] Run time error 4: "Array index out of bounds"
[20:39:15] [debug] Accessing element at index 65535 past array upper bound 499
[20:39:15] [debug] AMX backtrace:
[20:39:15] [debug] #0 003c5994 in public OnPlayerDeath (playerid=0, killerid=65535, reason=255) at C:\Servers\Province rp(CRMP)\gamemodes\PR-RP.pwn:14053
[20:39:15] [death] Vladimir_Rizhskiy died 255
[20:39:19] [debug] Server crashed while executing PR-RP.amx
[20:39:21] [debug] Server crashed while executing PR-RP.amx
Строка с ошибкой:
public OnPlayerDeath(playerid, killerid, reason)
{
if(PlayerLogged[playerid] == 0) return false;
PlayerSpawned[playerid] = 0;
ResetWeapon(playerid);
SetPVarInt(playerid,"K_Times",GetPVarInt(playerid,"K_Times") + 1);
if(reason == 38 && GetPlayerState(killerid) == PLAYER_STATE_PASSENGER)
{
KickEx(playerid,8881);
return true;
}
if(PlayerLie[playerid]) CheckBed(playerid);
if(GetPVarInt(playerid,"K_Times") > 1)
{
KickEx(playerid,0524);
return true;
}
if(reason >= 1 && reason <= 46 && GetPlayerWeapon(killerid) != reason && PlayerInfo[playerid][pLevel] <= 3)
{
KickEx(playerid,0525);
return true;
}
new gunname[32];
new string[250];
if(PlayerInfo[playerid][pJob] == J_TRUCKER) ResetTruck(playerid);
PlayerPlaySound(playerid, 30803, 0.0, 0.0, 0.0);
if(PlayerInfo[playerid][pHealthS] >= 9)
{
PlayerInfo[playerid][pHealthS] -= 4.00;
PlayerInfo[playerid][pHeal] = PlayerInfo[playerid][pHealthS];
}
else
{
PlayerInfo[playerid][pHealthS] = 10;
PlayerInfo[playerid][pHeal] = PlayerInfo[playerid][pHealthS];
SendClientMessage(playerid,COLOR_YELLOW,"{BEBEBE}[ ! ] Âàøå ñîñòîÿíèå çäîðîâüÿ íà ãðàíè!");
}
PlayerInfo[playerid][pHospital] = 1;
GunCheckTime[playerid] = 5;
GetWeaponName(reason,gunname,sizeof(gunname));
if(killerid == INVALID_PLAYER_ID || killerid == 65535) format(string, 128, "{AFAFAF}[ A ] >> %s (ID: %d) ïîãèá",PlayerInfo[playerid][pSendername], playerid);
else if(strlen(gunname) > 1 && killerid != 65535) format(string, 128,"{AFAFAF}[ A ] >> %s (ID: %d) óáèë èãðîêà %s (ID: %d) ñ %s",PlayerInfo[killerid][pSendername],killerid,PlayerInfo[playerid][pSendername],playerid,gunname);
else if(killerid != INVALID_PLAYER_ID && strlen(gunname) < 1) format(string, 128, "{AFAFAF}[ A ] >> %s (ID: %d) óáèë èãðîêà %s (ID: %d) êóëàêàìè",PlayerInfo[killerid][pSendername],killerid,PlayerInfo[playerid][pSendername],playerid);
SendAdminMessage(COLOR_LIGHTRED,string);
printf("Èãðîê %s òîëüêî ÷òî óìåð", PlayerInfo[playerid][pSendername]);
if(GetPVarInt(playerid,"pGPSWork") == 1)
{
DisablePlayerRaceCheckpoint(playerid);
}
DisablePlayerCheckpoint(playerid);
if(IsPlayerAttachedObjectSlotUsed(playerid, 3)) RemovePlayerAttachedObject(playerid,3);
if(GetPVarInt(playerid, "ProductID") > 0)
{
DisablePlayerRaceCheckpoint(playerid);
Delete3DTextLabel(ProductInfo[GetPVarInt(playerid, "ProductID")][pText3D]);
ProductInfo[GetPVarInt(playerid, "ProductID")][pStatus] = false;
DeletePVar(playerid, "ProductID");
}
if(GetPVarInt(playerid, "FuelID") > 0)
{
DisablePlayerRaceCheckpoint(playerid);
Delete3DTextLabel(FuelInfo[GetPVarInt(playerid, "FuelID")][pText3D]);
FuelInfo[GetPVarInt(playerid, "FuelID")][pStatus] = false;
DeletePVar(playerid, "FuelID");
}
if(GetPVarInt(playerid, "Noun") > 0)
{
if(GetPVarInt(playerid, "NounObjID") > 0)
{
//DestroyObject(NounObject[GetPVarInt(playerid, "NounObjID")]);
// new objpos = GetPVarInt(playerid, "NounObjID");
// NounObject[objpos] = CreateObject(899, BuldozerCord[objpos][0], BuldozerCord[objpos][1], BuldozerCord[objpos][2], BuldozerCord[objpos][3]);
// if(GetPVarInt(playerid, "NounObjID") < 10) NounObject[GetPVarInt(playerid, "NounObjID")] = CreateObject(899,59.3836+random(10),1834.3936+random(40), 2.3487, 0.0000, 0.0000, 58.2000);
// else NounObject[GetPVarInt(playerid, "NounObjID")] = CreateObject(899,92.3481+random(20),1863.9661+random(40), 2.3487, 0.0000, 0.0000, 58.2000);
DeletePVar(playerid, "NounObjID");
}
DeletePVar(playerid, "Noun");
DeletePVar(playerid, "OldMinerSkin");
DeletePVar(playerid, "MinerKG");
DeletePVar(playerid, "MinerKG_One");
DisablePlayerRaceCheckpoint(playerid);
}
new caller = Mobile[playerid];
if(caller != -1)
{
SendClientMessage(caller, COLOR_GRAD2, "{CD5C5C}[?] {FFFFFF}Ñâÿçü îáîðâàëàñü");
CellTime[caller] = -1;
Mobile[caller] = -1;
Mobile[playerid] = -1;
CellTime[playerid] = -1;
DeletePVar(playerid, "CallTime");
DeletePVar(caller, "CallTime");
}
if(InShop[playerid] > 0 || GetPVarInt(playerid, "InShop") > 0)
{
DestroyVehicle(salonveh[playerid]);
DeletePVar(playerid, "InShop");
InShop[playerid] = 0;
PlayerTextDrawHide(playerid, VehNazv[playerid]);
PlayerTextDrawHide(playerid, VehCost[playerid]);
TextDrawHideForPlayer(playerid,PressA);
TextDrawHideForPlayer(playerid,PressD);
TextDrawHideForPlayer(playerid,PressH);
TextDrawHideForPlayer(playerid,PressC);
TextDrawHideForPlayer(playerid,PressB);
TextDrawHideForPlayer(playerid,VehBox);
}
if(GetPVarInt(playerid, "LicTest") > 0)
{
DeletePVar(playerid, "LicTest");
DeletePVar(playerid, "LicTestHealth");
DeletePVar(playerid, "LicTestError");
lictest_Time[playerid] = 0;
SendClientMessage(playerid, COLOR_LIGHTRED, "{BEBEBE}[!] {FA8072}Âû ïðîâàëèëè ýêçàìåí ïî âîæäåíèþ");
}
if(PlayerInfo[killerid][pMorgan] == 0)
{
if(IsACop(killerid) || PlayerInfo[killerid][pMember] == F_ARMY) { }
else
{
if(PlayerInfo[killerid][pWanted] >= 6) return true;
PlayerInfo[killerid][pWanted] += 2;
if(PlayerInfo[killerid][pWanted] >= 6) PlayerInfo[killerid][pWanted] = 6;
PlayerInfo[killerid][pWantedTime] = 1800 + random(300);
SetPlayerWantedLevel(killerid,PlayerInfo[killerid][pWanted]);
SetPlayerCriminal(killerid, "Íåèçâåñòíûé", "Óáèéñòâî ÷åëîâåêà");
SendMes(killerid,-1,"ïîãèá %s",PlayerInfo[playerid][pSendername]);
}
}
Что нужно сюда добавить чтобы сервер не крашило?
[20:39:15] Игрок Vladimir_Rizhskiy только что использовал команду "/sethp 0 0 "
[20:39:15] Игрок Vladimir_Rizhskiy только что умер
[20:39:15] [debug] Run time error 4: "Array index out of bounds"
[20:39:15] [debug] Accessing element at index 65535 past array upper bound 499
[20:39:15] [debug] AMX backtrace:
[20:39:15] [debug] #0 003c5994 in public OnPlayerDeath (playerid=0, killerid=65535, reason=255) at C:\Servers\Province rp(CRMP)\gamemodes\PR-RP.pwn:14053
[20:39:15] [death] Vladimir_Rizhskiy died 255
[20:39:19] [debug] Server crashed while executing PR-RP.amx
[20:39:21] [debug] Server crashed while executing PR-RP.amx
Строка с ошибкой:
public OnPlayerDeath(playerid, killerid, reason)
{
if(PlayerLogged[playerid] == 0) return false;
PlayerSpawned[playerid] = 0;
ResetWeapon(playerid);
SetPVarInt(playerid,"K_Times",GetPVarInt(playerid,"K_Times") + 1);
if(reason == 38 && GetPlayerState(killerid) == PLAYER_STATE_PASSENGER)
{
KickEx(playerid,8881);
return true;
}
if(PlayerLie[playerid]) CheckBed(playerid);
if(GetPVarInt(playerid,"K_Times") > 1)
{
KickEx(playerid,0524);
return true;
}
if(reason >= 1 && reason <= 46 && GetPlayerWeapon(killerid) != reason && PlayerInfo[playerid][pLevel] <= 3)
{
KickEx(playerid,0525);
return true;
}
new gunname[32];
new string[250];
if(PlayerInfo[playerid][pJob] == J_TRUCKER) ResetTruck(playerid);
PlayerPlaySound(playerid, 30803, 0.0, 0.0, 0.0);
if(PlayerInfo[playerid][pHealthS] >= 9)
{
PlayerInfo[playerid][pHealthS] -= 4.00;
PlayerInfo[playerid][pHeal] = PlayerInfo[playerid][pHealthS];
}
else
{
PlayerInfo[playerid][pHealthS] = 10;
PlayerInfo[playerid][pHeal] = PlayerInfo[playerid][pHealthS];
SendClientMessage(playerid,COLOR_YELLOW,"{BEBEBE}[ ! ] Âàøå ñîñòîÿíèå çäîðîâüÿ íà ãðàíè!");
}
PlayerInfo[playerid][pHospital] = 1;
GunCheckTime[playerid] = 5;
GetWeaponName(reason,gunname,sizeof(gunname));
if(killerid == INVALID_PLAYER_ID || killerid == 65535) format(string, 128, "{AFAFAF}[ A ] >> %s (ID: %d) ïîãèá",PlayerInfo[playerid][pSendername], playerid);
else if(strlen(gunname) > 1 && killerid != 65535) format(string, 128,"{AFAFAF}[ A ] >> %s (ID: %d) óáèë èãðîêà %s (ID: %d) ñ %s",PlayerInfo[killerid][pSendername],killerid,PlayerInfo[playerid][pSendername],playerid,gunname);
else if(killerid != INVALID_PLAYER_ID && strlen(gunname) < 1) format(string, 128, "{AFAFAF}[ A ] >> %s (ID: %d) óáèë èãðîêà %s (ID: %d) êóëàêàìè",PlayerInfo[killerid][pSendername],killerid,PlayerInfo[playerid][pSendername],playerid);
SendAdminMessage(COLOR_LIGHTRED,string);
printf("Èãðîê %s òîëüêî ÷òî óìåð", PlayerInfo[playerid][pSendername]);
if(GetPVarInt(playerid,"pGPSWork") == 1)
{
DisablePlayerRaceCheckpoint(playerid);
}
DisablePlayerCheckpoint(playerid);
if(IsPlayerAttachedObjectSlotUsed(playerid, 3)) RemovePlayerAttachedObject(playerid,3);
if(GetPVarInt(playerid, "ProductID") > 0)
{
DisablePlayerRaceCheckpoint(playerid);
Delete3DTextLabel(ProductInfo[GetPVarInt(playerid, "ProductID")][pText3D]);
ProductInfo[GetPVarInt(playerid, "ProductID")][pStatus] = false;
DeletePVar(playerid, "ProductID");
}
if(GetPVarInt(playerid, "FuelID") > 0)
{
DisablePlayerRaceCheckpoint(playerid);
Delete3DTextLabel(FuelInfo[GetPVarInt(playerid, "FuelID")][pText3D]);
FuelInfo[GetPVarInt(playerid, "FuelID")][pStatus] = false;
DeletePVar(playerid, "FuelID");
}
if(GetPVarInt(playerid, "Noun") > 0)
{
if(GetPVarInt(playerid, "NounObjID") > 0)
{
//DestroyObject(NounObject[GetPVarInt(playerid, "NounObjID")]);
// new objpos = GetPVarInt(playerid, "NounObjID");
// NounObject[objpos] = CreateObject(899, BuldozerCord[objpos][0], BuldozerCord[objpos][1], BuldozerCord[objpos][2], BuldozerCord[objpos][3]);
// if(GetPVarInt(playerid, "NounObjID") < 10) NounObject[GetPVarInt(playerid, "NounObjID")] = CreateObject(899,59.3836+random(10),1834.3936+random(40), 2.3487, 0.0000, 0.0000, 58.2000);
// else NounObject[GetPVarInt(playerid, "NounObjID")] = CreateObject(899,92.3481+random(20),1863.9661+random(40), 2.3487, 0.0000, 0.0000, 58.2000);
DeletePVar(playerid, "NounObjID");
}
DeletePVar(playerid, "Noun");
DeletePVar(playerid, "OldMinerSkin");
DeletePVar(playerid, "MinerKG");
DeletePVar(playerid, "MinerKG_One");
DisablePlayerRaceCheckpoint(playerid);
}
new caller = Mobile[playerid];
if(caller != -1)
{
SendClientMessage(caller, COLOR_GRAD2, "{CD5C5C}[?] {FFFFFF}Ñâÿçü îáîðâàëàñü");
CellTime[caller] = -1;
Mobile[caller] = -1;
Mobile[playerid] = -1;
CellTime[playerid] = -1;
DeletePVar(playerid, "CallTime");
DeletePVar(caller, "CallTime");
}
if(InShop[playerid] > 0 || GetPVarInt(playerid, "InShop") > 0)
{
DestroyVehicle(salonveh[playerid]);
DeletePVar(playerid, "InShop");
InShop[playerid] = 0;
PlayerTextDrawHide(playerid, VehNazv[playerid]);
PlayerTextDrawHide(playerid, VehCost[playerid]);
TextDrawHideForPlayer(playerid,PressA);
TextDrawHideForPlayer(playerid,PressD);
TextDrawHideForPlayer(playerid,PressH);
TextDrawHideForPlayer(playerid,PressC);
TextDrawHideForPlayer(playerid,PressB);
TextDrawHideForPlayer(playerid,VehBox);
}
if(GetPVarInt(playerid, "LicTest") > 0)
{
DeletePVar(playerid, "LicTest");
DeletePVar(playerid, "LicTestHealth");
DeletePVar(playerid, "LicTestError");
lictest_Time[playerid] = 0;
SendClientMessage(playerid, COLOR_LIGHTRED, "{BEBEBE}[!] {FA8072}Âû ïðîâàëèëè ýêçàìåí ïî âîæäåíèþ");
}
if(PlayerInfo[killerid][pMorgan] == 0)
{
if(IsACop(killerid) || PlayerInfo[killerid][pMember] == F_ARMY) { }
else
{
if(PlayerInfo[killerid][pWanted] >= 6) return true;
PlayerInfo[killerid][pWanted] += 2;
if(PlayerInfo[killerid][pWanted] >= 6) PlayerInfo[killerid][pWanted] = 6;
PlayerInfo[killerid][pWantedTime] = 1800 + random(300);
SetPlayerWantedLevel(killerid,PlayerInfo[killerid][pWanted]);
SetPlayerCriminal(killerid, "Íåèçâåñòíûé", "Óáèéñòâî ÷åëîâåêà");
SendMes(killerid,-1,"ïîãèá %s",PlayerInfo[playerid][pSendername]);
}
}
Что нужно сюда добавить чтобы сервер не крашило?
