SendFormattedClientMessageToAllAdmins?

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,


    Ich bin seit einigen Monaten dabei ein eigenes Selfmade Roleplay Skript zu entwickeln. Ich habe vor langer Zeit den Makro "SendFormattedClientMessageToAllAdmins" gemacht, es spuckt aber bei jeder Anwendung dieses Makros eine Warnung.


    So sieht der Makro aus:
    #define SendFormattedClientMessageToAllAdmins(%0,%1,%2) do { new _string_[128]; format(_string_, sizeof(_string_), %1, %2); for(new i = 0; i < MAX_PLAYERS; i++) { if(hasMinRank(i, 3)) { SendClientMessage(i, %0, _string_); } } } while(false)


    Warnung:

    Code
    [PFAD]\reallife.pwn(3221) : warning 205: redundant code: constant expression is zero


    Ich brauche es immer mehr und die Anzahl Warnungen steigen. Weiss jemand eine Lösung, um es zu beheben? Ich will kein format() nutzen und es dann mit einem normalen stock zu senden. (Ja so faul bin ich)



    Mit freundlichen Grüssen,
    Peek

  • new _string_[128];


    #define SendFormattedClientMessageToAllAdmins(%0,%1,%2) format(_string_, sizeof(_string_), %1, %2); for(new i = 0; i < MAX_PLAYERS; i++) if(hasMinRank(i, 3)) SendClientMessage(i, %0, _string_)


    so kannst du es ganz normal verwenden und ich würde dir empfehlen den string global zu definieren.


    Zusätzlich ist zu sagen das die do-while schleife einfach nur unnötig ist und somit auch nicht gebrauchen wird

  • Vielen Dank für die Hilfe, leider hat aber dein Code nicht geklappt. Ich bekomme dann Fehler wie "i" wurde nicht definiert usw...


    Mit freundlichen Grüssen,
    Peek

  • //Edit: Ich gehe vom Code im Startpost aus.


    while(false)
    Müsste der Grund sein für die Warnung. Der Compiler erkennt,dass false nun mal false ist und while() nie wahr sein wird.
    Deshalb haben die meisten Code-Snippets es mit einer zusätzlichen Variable gelöst.

    new bool:FALSE = false; // global anlegen
    // #define
    [...] while(FALSE)

  • Da wir hier bereits eine Variable verwenden, kann man sich die Hilfsvariable sparen:
    #define SendFormattedClientMessageToAllAdmins(%0,%1,%2) new _string_[128]; do { format(_string_, sizeof(_string_), %1, %2); for(new i = 0; i < MAX_PLAYERS; i++) { if(hasMinRank(i, 3)) { SendClientMessage(i, %0, _string_); } } } while(_string_[0] != _string_[0])


    _string_[0] wird nie nicht _string_[0] sein, daher ist der Ausdruck immer false.


    Getestet und funktioniert.

  • Da wir hier bereits eine Variable verwenden, kann man sich die Hilfsvariable sparen:
    #define SendFormattedClientMessageToAllAdmins(%0,%1,%2) new _string_[128]; do { format(_string_, sizeof(_string_), %1, %2); for(new i = 0; i < MAX_PLAYERS; i++) { if(hasMinRank(i, 3)) { SendClientMessage(i, %0, _string_); } } } while(_string_[0] != _string_[0])


    _string_[0] wird nie nicht _string_[0] sein, daher ist der Ausdruck immer false.


    Getestet und funktioniert.

    Vielen vielen Dank! Es sind nun 26 Warnings bei mir weg.


    Mit freundlichen Grüssen,
    Peek