/giverank mit Namen statt Zahlen

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
  • Habe momentan einen /giverank Befehl der für alle Fraktionen Zahlen als Rang einstellt.



    dcmd_giverank(playerid,params[])
    {
    new pid;
    new rang = sSpieler[playerid][Rang];
    new spieler[256];
    new leader[256];
    new spielername[MAX_PLAYER_NAME];
    new leadername[MAX_PLAYER_NAME];
    GetPlayerName(pid,leadername,sizeof(leadername));
    GetPlayerName(playerid,spielername,sizeof(spielername));
    if(sscanf(params,"ud",pid,rang)) return SendClientMessage(playerid,Weiß,"Info: /giverank (playerid)(rang)");
    if(pid == INVALID_PLAYER_ID) return SendClientMessage(playerid,Weiß,"Der Spieler mit dieser ID ist nicht Online!");
    if(sSpieler[playerid][Leader] < 1) return SendClientMessage(playerid,Weiß,"Du bist kein Leader!");
    if(pid == playerid) return SendClientMessage(playerid,Weiß,"Du kannst dir nicht selbst einen Rang geben!");
    if(rang < 1 || rang > 6) return SendClientMessage(playerid,Weiß,"Der Rang muss zwischen 1 und 6 liegen!");
    if(sSpieler[playerid][Leader] >= 1)
    {
    sSpieler[pid][Rang] = rang;
    format(spieler,sizeof(spieler),"Du wurdest von %s zum Rang %d gemacht",leadername,rang);
    format(leader,sizeof(leader),"Du hast %s Rang %d gegeben.",spielername,rang);
    SendClientMessage(pid,Weiß,spieler);
    SendClientMessage(playerid,Weiß,leader);
    }
    return 1;
    }


    Wie mach ich das nun so, das ich für jede Fraktion einzeln einen namen für rang 1,2 etc machen kann?
    hatte son thema letztens erst gesehen finds aber nichtmehr.


    Danke schonmal

  • Das kannst du über eine Funktion wie diese machen:
    stock GetRangName(playerid)
    {
    new frak = sSpieler[playerid][Member], name[32];
    if(frak == 0) frak = sSpieler[playerid][Leader];
    name = "<Unbekannt>";
    switch(frak)
    {
    case 1: //Fraktion 1
    {
    switch(sSpieler[playerid][Rang])
    {
    case 1: name = "Newbie";
    case 2: name = "Pro";
    //...
    }
    }
    case 2:
    {
    switch(sSpieler[playerid][Rang])
    {
    case 1: name = "Praktikant";
    case 2: name = "Angestellter";
    //...
    }
    }
    //...
    }
    return name;
    }


    Dann so:
    format(spieler,sizeof(spieler),"Du wurdest von %s zum Rang %d (%s)gemacht",leadername,rang, GetRangName(pid));

    3HZXdYd.png

    Einmal editiert, zuletzt von Jeffry () aus folgendem Grund: pid -> playerid im stock

  • So sehen meine stocks für Leader, Fraktion und Rang aus.
    Wie muss ich den stock ändern, das keine 26 Errors kommen?
    Blicke da grade nicht richtig durch


    //FRAKTION
    stock SpielerFraktion(playerid,fraktionsid)
    {
    if(sSpieler[playerid][Fraktion] == fraktionsid) return 1;
    return 0;
    }



    //LEADER
    stock SpielerLeader(playerid,leaderid)
    {
    if(sSpieler[playerid][Leader] == leaderid) return 1;
    return 0;
    }



    //RANG
    stock SpielerRang(playerid,rang)
    {
    if(sSpieler[playerid][Rang] == rang) return 1;
    return 0;
    }

  • Wie muss ich den stock ändern, das keine 26 Errors kommen?

    stock GetRangName(playerid)
    {
    new name[32];
    name = "<Unbekannt>";
    switch(sSpieler[playerid][Fraktion])
    {
    case 1: //Fraktion 1
    {
    switch(sSpieler[playerid][Rang])
    {
    case 1: name = "Newbie";
    case 2: name = "Pro";
    //...
    }
    }
    case 2:
    {
    switch(sSpieler[playerid][Rang])
    {
    case 1: name = "Praktikant";
    case 2: name = "Angestellter";
    //...
    }
    }
    //...
    }
    return name;
    }