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; }