Server crash when use Spectate - Printable Version
+- SA-MP Forums Archive (
https://sampforum.blast.hk)
+-- Forum: SA-MP Scripting and Plugins (
https://sampforum.blast.hk/forumdisplay.php?fid=8)
+--- Forum: Scripting Help (
https://sampforum.blast.hk/forumdisplay.php?fid=12)
+--- Thread: Server crash when use Spectate (
/showthread.php?tid=610606)
Server crash when use Spectate -
2k16 - 26.06.2016
Here's the script. When i choose case 0 or 1. My server got crashed D:
OnPlayerKeyStateChange
Код HTML:
[04:07:36] [debug] Run time error 4: "Array index out of bounds"
[04:07:36] [debug] Accessing element at index 51 past array upper bound 49
[04:07:36] [debug] AMX backtrace:
[04:07:36] [debug] #0 0004d4a0 in ?? (2, 0, 0) from gamemode.amx
[04:07:36] [debug] #1 000a980c in public GAC_OnPlayerKeyStateChange (2, 4, 0) from gamemode.amx
[04:07:36] [debug] #2 native CallLocalFunction () from samp03svr
[04:07:36] [debug] #3 000114f0 in public ATT_OnPlayerKeyStateChange (2, 4, 0) from gamemode.amx
[04:07:36] [debug] #4 00008f30 in public OnPlayerKeyStateChange (2, 4, 0) from gamemode.amx
Код:
if(AccInfo[playerid][spec] && PlayerInfo[playerid][VIP] != 0)
{
if(newkeys & KEY_LOOK_BEHIND && IsPlayerSpectating(playerid))
{
cmd_specoff(playerid, "");
}
else if(newkeys & KEY_FIRE && IsPlayerSpectating(playerid))
{
UpdatePlayerSpectating(playerid, 0, false);
}
else if(newkeys & KEY_ACTION && IsPlayerSpectating(playerid))
{
UpdatePlayerSpectating(playerid, 1, false);
}
}
OnPlayerDisconnect
Код HTML:
[08:32:33] [debug] Run time error 5: "Invalid memory access"
[08:32:33] [debug] AMX backtrace:
[08:32:33] [debug] #0 00000780 in public OnPlayerDisconnect () from gamemode.amx
[08:32:33] [debug] #1 0004d504 in ?? (1, 0, 0) from gamemode.amx
[08:32:33] [debug] #2 000a980c in public GAC_OnPlayerKeyStateChange (1, 4, 0) from gamemode.amx
[08:32:33] [debug] #3 native CallLocalFunction () from samp03svr
[08:32:33] [debug] #4 000114f0 in public ATT_OnPlayerKeyStateChange (1, 4, 0) from gamemode.amx
[08:32:33] [debug] #5 00008f30 in public OnPlayerKeyStateChange (1, 4, 0) from gamemode.amx
Код:
foreach(new i : Player)
{
if(IsPlayerSpectating(i))
{
if(AccInfo[i][spec] && AccInfo[i][specid] == playerid)
{
UpdatePlayerSpectating(i, 0, true);
}
}
}
Da Function
Код HTML:
UpdatePlayerSpectating(playerid, type = 0, bool:forcestop = false)
{
switch(type)
{
case 0:
{
new check = 0;
foreach(new i : Player)
{
if(i < AccInfo[i][specid]) i = (AccInfo[playerid][specid] + 1);
if(i > GetPlayerPoolSize()) i = 0, check += 1;
if(check > 1) break;
if(IsPlayerSpawned(i))
{
if(i != playerid)
{
if(!IsPlayerSpectating(i))
{
SetPlayerSpectating(playerid, i);
break;
}
}
}
}
if(forcestop)
{
cmd_specoff(playerid, "");
SendClientMessage(playerid, red, "** There was no player to spectate further");
}
else
{
SetPlayerSpectating(playerid, AccInfo[playerid][specid]);
}
}
case 1:
{
new check = 0;
foreach(new i : Player)
{
if(i > AccInfo[i][specid]) i = (AccInfo[playerid][specid] - 1);
if(i < 0) i = GetPlayerPoolSize(), check += 1;
if(check > 1) break;
if(IsPlayerSpawned(i))
{
if(i != playerid)
{
if(! IsPlayerSpectating(i))
{
SetPlayerSpectating(playerid, i);
break;
}
}
}
}
if(forcestop)
{
cmd_specoff(playerid, "");
SendClientMessage(playerid, red, "** There was no player to spectate back");
}
else
{
SetPlayerSpectating(playerid, AccInfo[playerid][specid]);
}
}
case 2:
{
if(GetPlayerInterior(playerid) != GetPlayerInterior(AccInfo[playerid][specid]))
{
AC_BS_SetPlayerInterior(playerid, GetPlayerInterior(AccInfo[playerid][specid]));
}
if(GetPlayerVirtualWorld(playerid) != GetPlayerVirtualWorld(AccInfo[playerid][specid]))
{
AC_BS_SetPlayerVirtualWorld(playerid, GetPlayerVirtualWorld(AccInfo[playerid][specid]));
}
if(IsPlayerInAnyVehicle(AccInfo[playerid][specid]))
{
PlayerSpectateVehicle(playerid, GetPlayerVehicleID(AccInfo[playerid][specid]));
}
else
{
PlayerSpectatePlayer(playerid, AccInfo[playerid][specid]);
}
}
}
return true;
}