Problem bei format, andere Variable wird überschrieben

Dein Problem konnte durch einen User gelöst werden? Bedank dich bei ihm indem du seinen Beitrag als Hilfreich markierst sowie einen Daumen oben dalässt

Aus gegebenem Anlass: Sichert eure Backupcodes wenn ihr die Zwei-Faktor-Authentifizierung aktiviert habt!

Infos dazu findet ihr nochmal hier

  • Ich wusste nicht, wie ich den Thread am besten nennen soll.


    Also Ich habe ein Mute-System geschrieben, komplett dynamisch mit ablaufende Zeit und so, funktioniert auch alles.


    Die Funktion (Auszug)


    Spieler-ID (Aus der accounts-Tabelle "id") 1 hat den Spieler mit der ID gemutet, also müsste in die Variable pMuteAdmin 1 geschrieben werden. Funktioniert auch, bis

    PAWN
    1. format(PlayerInfo[playerid][pMuteReason], 100, "%s", reason);

    aufgerufen wird. Dannach wird der pMuteAdmin mit der Zahl 101 überschrieben.


    Des weiteren wenn ich statt 100 als format-Länge sizeof(PlayerInfo[playerid][pMuteReason]) angebe, spuckt er Erros:

    Code
    1. C:\Users\Phantom\Documents\AlaskaRPv2\pawno\include\Alaska/functions.pwn(93) : error 001: expected token: "]", but found "-identifier-"
    2. C:\Users\Phantom\Documents\AlaskaRPv2\pawno\include\Alaska/functions.pwn(93) : warning 215: expression has no effect
    3. C:\Users\Phantom\Documents\AlaskaRPv2\pawno\include\Alaska/functions.pwn(93) : error 001: expected token: ";", but found "]"
    4. C:\Users\Phantom\Documents\AlaskaRPv2\pawno\include\Alaska/functions.pwn(93) : error 029: invalid expression, assumed zero
    5. C:\Users\Phantom\Documents\AlaskaRPv2\pawno\include\Alaska/functions.pwn(93) : fatal error 107: too many error messages on one line


    Da ich es Debugt hab, ab wann die Variable pMuteAdmin überschrieben wird; sobald per format der Grund (pMuteReason) geschrieben wird.


    Zusätzlich noch die ENUM-Variablen (Auszug):

    Code
    1. enum E_PLAYER {
    2. pDB,
    3. pLevel,
    4. pMute,
    5. pMuteTime,
    6. pMuteEnd,
    7. pMuteReason[100],
    8. pMuteAdmin
    9. };


    Ich habe keine weitere sinnvolle Idee da ich keine Ansätze habe woran es liegt.

  • Es gibt weder ein maximaler Grund noch soll es mit Defines gelöst werden, es soll Dynamisch sein :p xD


    Ich verstehe nur nicht, warum durch den format, der den Grund aus reason in pMuteReason schreibt, die Varriable pMuteAdmin auch und fehlerhaft überschrieben wird.

  • Beitrag von Mogly1 ()

    Dieser Beitrag wurde vom Autor aus folgendem Grund gelöscht: Sry ich bin Lost ().
    • Hilfreich

    Das Problem dürfte das EOS Zeichen (End of String) sein, welches sich danach platziert. Da enums für PAWN nur aneinandergereihte Werte sind, überschreibt es dir den nächsten enum-Wert, vermutlich mit dem EOS Zeichen.


    Du kannst es so lösen:

    #define MAX_REASON_LENGTH 100

    pMuteReason[MAX_REASON_LENGTH+1],


    und

    format(PlayerInfo[playerid][pMuteReason], MAX_REASON_LENGTH, reason);

    1WV8i3b.png

  • Was wäre SAMP nur ohne Jeffry <3:S


    Muss ich das bei jedem Enum machen, wo dieser ein String ist? Mit diesen End of String habe ich nur halb verstanden aber das was du sagst kling schlüssig und funktioniert.

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen