Nametag Farbe per Command ändern

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 wollte mal fragen, wie man ingame per Command die Nametag farbe eines anderen Spielers ändern kann.
    Z.B. /nametag ID Gruen


    Ich schätze mal das geht mit der Funktion SetPlayerColor, ich checke jedoch nicht wirklich, wie ich diese so einsetze, dass ich damit die Farbe eines anderen Spielers ändere


    Freue mich über eure Hilfe! :)

  • Willkommen auf Breadfish!


    Hier der Befehl:
    dcmd_setcolor(playerid,params[])
    {
    new pID, tmp[20], idx;
    tmp = strtok(params, idx);
    if(!strlen(tmp)) return SendClientMessage(playerid,0xFF0000FF,"Fehler: /setcolor [playerid/SpielerName] [Farbe]");
    if(IsNumeric(tmp)) pID = strval(tmp);
    else pID = ReturnPlayerID(tmp);
    tmp = strtok(params, idx);
    if(!strlen(tmp)) return SendClientMessage(playerid,0xFF0000FF,"Fehler: /setcolor [playerid/SpielerName] [Farbe]");
    if(!IsPlayerConnected(pID)) return SendClientMessage(playerid,0xFF0000FF,"Der Spieler ist nicht online.");

    if(!strcmp(tmp, "blau", true)) SetPlayerColor(pID, COLOR_BLUE);
    else if(!strcmp(tmp, "gelb", true)) SetPlayerColor(pID, COLOR_YELLOW);
    else if(!strcmp(tmp, "rot", true)) SetPlayerColor(pID, COLOR_RED);
    else if(!strcmp(tmp, "grün", true)) SetPlayerColor(pID, COLOR_GREEN);
    else if(!strcmp(tmp, "weiß", true)) SetPlayerColor(pID, COLOR_WHITE);
    else return SendClientMessage(playerid,0xFF0000FF,"Diese Farbe existiert nicht.");

    new str[145];
    GetPlayerName(pID, str, MAX_PLAYER_NAME);
    format(str, sizeof(str), "Du hast die Farbe von %s zu %s geändert.", str, tmp);
    SendClientMessage(playerid, 0xFFFFFFFF, str);
    return 1;
    }
    Ich denke das ist alles recht selbsterklärend.
    strtok gibt dir immer die Zeichen bis zum nächsten Leerzeichen zurück.
    Falls du ocmd verwendest, ersetze das dcmd_ mit ocmd:.


    Diese Funktionen fügst du einmalig in deinen Gamemode ganz unten ein:

    Spoiler anzeigen
    stock strtok(const string[], &index) //©Jeffry
    {
    new result[20], length = strlen(string), i = index;
    while ((i < length) && (string[i] == ' ')) i++;
    strmid(result,string,i,((index = strfind(string, " ", false, i)) == -1) ? (index = length) : (index) , 20);
    index++;
    return result;
    }

    Spoiler anzeigen
    stock ReturnPlayerID(l_PlayerName[]) //©Jeffry
    {
    new l_name[MAX_PLAYER_NAME];
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(GetPlayerName(i, l_name, MAX_PLAYER_NAME))
    {
    if(!strcmp(l_name,l_PlayerName, true)) return i;
    }
    }
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(GetPlayerName(i, l_name, MAX_PLAYER_NAME))
    {
    if(strfind(l_name,l_PlayerName,true)!=-1) return i;
    }
    }
    return INVALID_PLAYER_ID;
    }

    Spoiler anzeigen
    stock IsNumeric(string[])
    {
    for (new i = 0, j = strlen(string); i < j; i++)
    {
    if ((string[i] > '9' || string[i] < '0')) return 0;
    }
    return 1;
    }


    Alternativ könnte man es auch mit sscanf machen.

  • Ja, weil er auch mal mitdenken soll und sich nicht alles von Onkel Jeffry machen lassen soll...
    Man lernt nix, wenn man nicht mitdenken muss, das ist Bestandteil aller Lehrmethoden.
    Ich habe ihm ein Beispiel genannt und wenn nan sich mal 5 Minuten Gedanken macht, warum der Code so ist, wie er ist, dann kann er es auch selbstständig anpassen...Deswegen sagte ich auch, er solle sich mal meinen Code anschauen und gucken, was sscanf macht.
    Das ist PAWN und nicht C++.

  • Danke dafür, dass du probierst mich zum nachdenken "anzureizen", das bringt mir dennoch nichts, wenn ich nicht verstehe, wie man damit umgeht und ich zukünftig nicht mit sscanf arbeiten muss.


    Jeffry: Wie füge ich da noch ein, dass der User, dessen Farbe geändert wurde eine Nachricht bekommt?
    z.B. Ein Administrator hat deine Farbe zu %s geändert.

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Einfach unter der anderen Nachricht einfügen:
    format(str, sizeof(str), "Ein Administrator hat dir die Farbe zu %s geändert.", tmp);
    SendClientMessage(pID, 0xFFFFFFFF, str);


    @Jack_Bauer:
    Meiner Meinung nach ist die Methode sich etwas anzuschauen, was komplett ist, und daraus zu lernen die bessere Methode, wenn man sehr wenig bis gar keine Kenntnisse hat. aviate: stimmt dem sicher auch zu, vor allem wenn er gar nicht mit sscanf arbeiten will.
    Das grüne Häkchen an Post #6 düfte Onkel Jeffry's Methode wohl bestätigen.