Switch/Case

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
  • Wieso kommt nur die Farbe Rot im Chat und nicht der Text?
    Liegt bestimmt daran das am Ende des Case immer SendClientMessageToAll ist oder?



    COMMAND:aduty(playerid,params[])
    {
    new str[128];
    if(!isAnAdmin(playerid,1)) return SendClientMessage(playerid,GRAU,ADMINMELDUNG);
    if(User[playerid][AdminDuty] == 0)
    {
    switch(User[playerid][Admin])
    {
    case 1:format(str,128,"** %s ist nun als %s im Dienst",PlayerName(playerid),Adminrang[User[playerid][Admin]],SendClientMessageToAll(SUPPORTER,str));
    case 2:format(str,128,"** %s ist nun als %s im Dienst",PlayerName(playerid),Adminrang[User[playerid][Admin]],SendClientMessageToAll(MODERATOR,str));
    case 3:format(str,128,"** %s ist nun als %s im Dienst",PlayerName(playerid),Adminrang[User[playerid][Admin]],SendClientMessageToAll(ADMINISTRATOR,str));
    case 4:format(str,128,"** %s ist nun als %s im Dienst",PlayerName(playerid),Adminrang[User[playerid][Admin]],SendClientMessageToAll(SERVERLEITER,str));
    }
    User[playerid][AdminDuty] = 1;
    }else if(User[playerid][AdminDuty] == 1)
    {
    switch(User[playerid][Admin])
    {
    case 1:format(str,128,"** %s ist nun nicht mehr als %s im Dienst",PlayerName(playerid),Adminrang[User[playerid][Admin]],SendClientMessageToAll(SUPPORTER,str));
    case 2:format(str,128,"** %s ist nun nicht mehr als %s im Dienst",PlayerName(playerid),Adminrang[User[playerid][Admin]],SendClientMessageToAll(MODERATOR,str));
    case 3:format(str,128,"** %s ist nun nicht mehr als %s im Dienst",PlayerName(playerid),Adminrang[User[playerid][Admin]],SendClientMessageToAll(ADMINISTRATOR,str));
    case 4:format(str,128,"** %s ist nun nicht mehr als %s im Dienst",PlayerName(playerid),Adminrang[User[playerid][Admin]],SendClientMessageToAll(SERVERLEITER,str));
    }
    User[playerid][AdminDuty] = 0;
    }
    return 1;
    }

  • Du kannst nicht im format den String direkt senden.
    Du bisst den String erst formatieren und anschließend senden.
    So müsste das aussehen:

    case 1:
    {
    format(str,128,"** %s ist nun als %s im Dienst",PlayerName(playerid),Adminrang[User[playerid][Admin]]);
    SendClientMessageToAll(SUPPORTER,str); // Ich geh mal davon aus, dass das "SUPPORTER" eine Farbe ist.
    }


  • Du kannst sehr wohl multiple Aktionen in einer Zeile ausführen, jedoch wie du bereits erkannt hast funktioniert das so nicht, da erst der text abgesendet wird und danach ist format erst fertig mit dme formatieren deines textes.


    format(str,128,"** %s ist nun als %s im Dienst",PlayerName(playerid),Adminrang[User[playerid][Admin]]),SendClientMessageToAll(SUPPORTER,str);


    Zu beachten ist das es ein unterschied gibt in den zwischen den zwei operatoren ';' und ',' , da beim Semikolon der opcode break ausgeführt wird und beim komma nicht, somit ist auch die ohne Semikolon etwas schneller.
    Das durchgängig zu verwenden würde ich nicht tun.

  • Du kannst sehr wohl multiple Aktionen in einer Zeile ausführen, jedoch wie du bereits erkannt hast funktioniert das so nicht, da erst der text abgesendet wird und danach ist format erst fertig mit dme formatieren deines textes.

    Ich habe auch nicht behauptet, dass es nicht geht.
    Meiner Meinung nach ist es aber in mehreren Zeilen übersichtlicher.