OnPlayerDeath - Problem (Debug)

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • Hallo ihr da :)
    Ich habe heute wieder mal ein problem, welches ich selber nicht lösen kann.
    Error-Meldung:


    Code
    [debug] Run time error 4: "Array index out of bounds"
    [debug]  Accessing element at index 65535 past array upper bound 49
    [debug] AMX backtrace:
    [debug] #0 0002f65c in public OnPlayerDeath (playerid=1, killerid=65535, reason=255) at C:\SA-MP Server\gamemodes\xGR-1-0-0.pwn:4478

    Die Zeilen:

    if(PlayerInfo[playerid][pHeadValue] > 0 && PlayerInfo[killerid][pLeader] == 8 || PlayerInfo[killerid][pMember] == 8)
    {
    SendClientMessage(playerid, COLOR_LIGHTRED, "KOPFGELD: Du wurdest von einem Hitman getötet, weil ein Kopfgeld auf dich ausgesetzt war.");
    SendClientMessage(playerid, COLOR_YELLOW, "* Du möchstest dich auch rächen? Dann setz ein Kopfgeld! (/kopfgeld)");
    }


    Nun ist meine Frage, wie kann ich die killerid auf 49/50 beschränken?
    mit new killerid[MAX_PLAYERS]; hat es nicht funktioniert.



    MfG,
    James.

  • Code
    if(killerid != INVALID_PLAYER_ID)
    {
    if(PlayerInfo[playerid][pHeadValue] > 0 && PlayerInfo[killerid][pLeader] == 8 || PlayerInfo[killerid][pMember] == 8)
    {
    SendClientMessage(playerid, COLOR_LIGHTRED, "KOPFGELD: Du wurdest von einem Hitman getötet, weil ein Kopfgeld auf dich ausgesetzt war.");
    SendClientMessage(playerid, COLOR_YELLOW, "* Du möchstest dich auch rächen? Dann setz ein Kopfgeld! (/kopfgeld)");
    }
    }

    Sry, keine Ahnung wie das mit der Einrückung geht. ^^

  • liegt daran, das die killerid nicht Online ist d.h. der Spieler ist ohne Fremdeinwirkung gestorben.


    Einfach abfragen ob killerid existiert:
    if(PlayerInfo[playerid][pHeadValue] > 0 && PlayerInfo[killerid][pLeader] == 8 || PlayerInfo[killerid][pMember] == 8)
    zu
    if(PlayerInfo[playerid][pHeadValue] > 0 && PlayerInfo[killerid][pLeader] == 8 && killerid != INVALID_PLAYER_ID || PlayerInfo[killerid][pMember] == 8 && killerid != INVALID_PLAYER_ID)


    LG

  • Nein, du könntest das anders machen, sodass du das nur einmal machen musst:



    public OnPlayerDeath(playerid,killerid,reason)
    {
    if(killerid != INVALID_PLAYER_ID)
    {
    //Hier deinen ganzen OnPlayerDeath Code
    }



    return 1;
    }


    Dann bei deinem vorhandenen Code die INVALID Killerid entfernen :)


    Mit freundlichen Grüßen
    JustMe.77 8)