+REP , OnPlayerDisconnect Cause Crash
#1

I'v duel system , when player disconnecting it keep getting this msgs in crashdetect:
Код:
[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
OnPlayerDisconnect
Код:
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;
}
Reply
#2

Try:

pawn Код:
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: sReason = "Timeout";
            case 1: sReason = "Leaving";
            case 2: 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;
}
Reply
#3

Bump I get error:
Код:
[22:15:04] [Ban_console_log]:- metwaly_mohsen Tryed To Connect to server but was kicked as his/her account is banned from the server
[22:15:04] [debug] Run time error 4: "Array index out of bounds"
[22:15:04] [debug] Accessing element at negative index -1
[22:15:04] [debug] AMX backtrace:
[22:15:04] [debug] #0 00009014 in public SSCANF_OnPlayerDisconnect (playerid=7, reason=2) at C:\Users\MaHdy\Desktop\DuelSystem.pwn:90
[22:15:04] [debug] #1 00002604 in public OnPlayerDisconnect (playerid=7, reason=2) at C:\Users\MaHdy\Desktop\SPA Orginal Build 2\pawno\include\sscanf2.inc:229
[22:15:04] [debug] #2 00000008 in public DuelReset () at C:\Users\MaHdy\Desktop\SPA Orginal Build 2\pawno\include\zcmd.inc:62
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)