Rangnamen

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
  • Hi, wollte gerade Rangnamen machen,
    Funktioniert aber nicht.


    ocmd:a(playerid,params[])
    {
    //RANGNAME
    new Rangnameadmin[16];
    switch(sInfo[playerid][adminlevel])
    {
    case 0:(Rangnameadmin = "Supporter");
    case 1:(Rangnameadmin = "Moderator");
    case 2:(Rangnameadmin = "Super Moderator");
    case 3:(Rangnameadmin = "Administrator");
    case 4:(Rangnameadmin = "Projektleiter");
    }
    new name[MAX_PLAYER_NAME], text[128];
    if(!IsPlayerAnAdmin(playerid,1))return SendClientMessage(playerid, ROT, "Du bist kein Admin!");
    if(sscanf(params,"s[128]",text))return SendClientMessage(playerid,ROT,"Befehl: /a 'Nachricht'");
    GetPlayerName(playerid,name,sizeof(name));
    format(text,sizeof(text),"**%s %s: %s**",Rangnameadmin,name,text);
    for(new i=0; i<MAX_PLAYERS; i++)
    {
    if(!IsPlayerConnected(i))continue;
    if(!IsPlayerAnAdmin(i,1))continue;
    SendClientMessage(i,GELB,text);
    }
    return 1;
    }


    Weiss jemand woran das liegt ?

  • "Funktioniert nicht" ist immernoch keine Fehlerbeschreibung.
    Bitte etwas präzisieren.


    Aber was mir schonmal auffällt, sind die case Zeilen.


    case 0:(Rangnameadmin = "Supporter");


    Das wird nicht funktionieren, denn du kannst in PAWN nicht einfach einem Array einen String zuweisen, dazu musst du
    die Funktion format() verwenden.


    Beispiel:


    format(Rangnameadmin, sizeof(Rangnameadmin), "Supporter");


    //E: Ach und entfern die Klammern bei den case Zeilen.

  • Funktioniert schon, so:
    if(sInfo[playerid][adminlevel] == 1)
    {
    Rangnameadmin = "Supporter";
    }
    else if(sInfo[playerid][adminlevel] == 2)
    {
    Rangnameadmin = "Moderator";
    }
    else if(sInfo[playerid][adminlevel] == 3)
    {
    Rangnameadmin = "Super Moderator";
    }
    else if(sInfo[playerid][adminlevel] == 4)
    {
    Rangnameadmin = "Administrator";
    }
    else if(sInfo[playerid][adminlevel] == 5)
    {
    Rangnameadmin = "Projektleiter";
    }




    Aber ich hab mal gehört dass es besser ist case zu verwenden, darum immer noch die Frage, ob jemand weiss was falsch ist daran

  • Das wird nicht funktionieren, denn du kannst in PAWN nicht einfach einem Array einen String zuweisen, dazu musst du
    die Funktion format() verwenden.


    Das ist nur bei Arrays aus zum Beispiel einem enum der Fall, nicht bei eindimensionalen Arrays.


    Ganz einfach so, nur die runden Klammern weg machen:
    switch(sInfo[playerid][adminlevel])
    {
    case 0: Rangnameadmin = "Supporter";
    case 1: Rangnameadmin = "Moderator";
    case 2: Rangnameadmin = "Super Moderator";
    case 3: Rangnameadmin = "Administrator";
    case 4: Rangnameadmin = "Projektleiter";
    }



    Außerdem kannst du "text" auf 145 setzen, das ist das Maximum für SendClientMessage.

    3HZXdYd.png

    2 Mal editiert, zuletzt von Jeffry () aus folgendem Grund: Tippfehler.

  • Danke, dann noch eine Frage:
    Kann man das auch Global oder so machen, oder muss ich die jedes mal wenn ich sie
    verwenden möchte extra erstellen?



    Genau so bei den Fraktionen, muss ich dass ja genau so machen, wenn ich bei jeder Frak verschiedene Namen will oder?

  • Klar, global wäre es natürlich optimal.
    new rangName[5][32] =
    {
    "Supporter",
    "Moderator",
    "Super Moderator",
    "Administrator",
    "Projektleiter"
    };
    Unter die Includes, und dann einfach so zugreifen:


    printf("Spieler-Rang: %s", rangName[sInfo[playerid][adminlevel]]);

  • Genau. Einfach so:
    rangName[sInfo[playerid][adminlevel]]
    Das gibt dir den Rangname zurück.


    Kannst es dir so vorstellen:
    new rang = sInfo[playerid][adminlevel];
    rangName[rang]
    Aber die Variable kannst du dir sparen.


    Also so:
    format(text,sizeof(text),"**%s %s: %s**",rangName[sInfo[playerid][adminlevel]],name,text);


    Allerdings musst du aufpassen, wenn Supporter Level 1 ist, dann so:
    format(text,sizeof(text),"**%s %s: %s**",rangName[sInfo[playerid][adminlevel]-1],name,text);

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