31.07.2014, 05:08
I'v duel system , when player disconnecting it keep getting this msgs in crashdetect:
OnPlayerDisconnect
Код:
[16:39:54] [debug] Run time error 4: "Array index out of bounds" [16:39:54] [debug] Accessing element at negative index -1 [16:39:54] [debug] AMX backtrace: [16:39:54] [debug] #0 00009014 in public SSCANF_OnPlayerDisconnect (playerid=1, reason=1) at C:\Users\MaHdy\Desktop\DuelSystem.pwn:91 [16:39:54] [debug] #1 00002604 in public OnPlayerDisconnect (playerid=1, reason=1) at C:\Users\MaHdy\Desktop\SPA Orginal Build 2\pawno\include\sscanf2.inc:229 [16:39:54] [part] Mahdi has left the server (1:1) [16:39:55] [chat] [Ry[A]n]: x8g[uo1sang
Код:
public OnPlayerDisconnect(playerid, reason)
{
new duelid = GetPVarInt(playerid, "DuelDID");
new dueler, dueler2;
dueler = dInfo[duelid][Inviter];
dueler2 = dInfo[duelid][Invitee];
if(InDuel[dueler] == 1 && InDuel[dueler2] == 1)
{
new sReason[15];
switch(reason)
{
case 0: format(sReason, sizeof(sReason), "Timeout");
case 1: format(sReason, sizeof(sReason), "Leaving");
case 2: format(sReason, sizeof(sReason), "Kicked");
}
new gBet = dInfo[duelid][BetMoney];
new gDuelSpot = dInfo[duelid][Location];
new Slot[MAX_DUEL_WEPS];
for(new i=0; i < MAX_DUEL_WEPS; i++) Slot[i] = dWeps[duelid][i];
new winner, loser;
if(dueler == playerid)
{
winner = dueler2;
loser = dueler;
}
else if(dueler2 == playerid)
{
winner = dueler;
loser = dueler2;
}
Money_GivePlayerMoney(winner, gBet);
new wepstr[200];
for(new x=0; x < MAX_DUEL_WEPS; x++)
{
if(IsValidWeapon(Slot[x])) format(wepstr, sizeof(wepstr), "%s%s ", wepstr, weaponNames(Slot[x]));
}
new str[150];
format(str, sizeof(str), "Duel | %s has left the server during a duel with %s (Reason: %s)", pName(loser), pName(winner), sReason);
SendClientMessageToAll(COLOR_DUEL, str);
format(str, sizeof(str), "Duel | %s won the duel against %s (Weapons %s) (Bet: $%d) (%s [ID %d])", pName(winner), pName(loser), wepstr, gBet, ReturnDuelNameFromID(gDuelSpot), gDuelSpot);
SendClientMessageToAll(COLOR_DUEL, str);
SetPlayerArmour(winner, 0);
RemoveFromDuel(loser);
RemoveFromDuel(winner);
ResetDuelInformation(duelid);
RemoveDuelInvite(dueler2, dueler);
SpawnPlayer(winner);
SetPlayerVirtualWorld(winner, 0);
TotalDuels--;
}
TextDrawDestroy(SpecTD[playerid][0]);
TextDrawDestroy(SpecTD[playerid][1]);
InDuel[playerid] = 0;
KillTimer(DuelTimer[playerid]);
return 1;
}

