/setlevel [Y_INI: AdminLevel in UserFile schreiben und speichern]

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!


    COMMAND:setlevel(playerid, params[])
    {
    new ID,
    Level,
    string1[128],
    string2[128],
    pName[MAX_PLAYER_NAME],
    PlayerWhoseLevelGetsSet,
    AdminWhoExecutesTheCommand[MAX_PLAYER_NAME];
    if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, COLOR_RED, "[ERROR] Du bist kein Admin");
    if(sscanf(params, "ui", ID, Level)) return SendClientMessage(playerid, COLOR_RED, "[ERROR] Gebrauch: /setlevel [ID] [Level]");
    if(!IsPlayerConnected(ID)) return SendClientMessage(playerid, COLOR_RED, "[ERROR] Dieser Spieler ist nicht online!");
    if(Level < 0 || Level > 5) return SendClientMessage(playerid, COLOR_RED, "[ERROR] Ungueltiges Level.");


    GetPlayerName(playerid, AdminWhoExecutesTheCommand, sizeof(AdminWhoExecutesTheCommand));
    GetPlayerName(PlayerWhoseLevelGetsSet, pName, sizeof(pName));

    new INI:file = INI_Open(Path(playerid));
    INI_WriteInt(file, "AdminLevel", Level);
    INI_Close(file);


    if(pInfo[PlayerWhoseLevelGetsSet][AdminLevel] < Level)
    {
    format(string1, sizeof(string1), "[ADMININFO] Admin {%06x}%s "#COLOR_TURQUOISE_EMBED"hat {%06x}%s "#COLOR_TURQUOISE_EMBED"auf "#COLOR_GOLD_EMBED"Level %i "#COLOR_GREEN_EMBED"heraufgestuft!", GetPlayerColor(playerid) >>> 8, AdminWhoExecutesTheCommand, GetPlayerColor(PlayerWhoseLevelGetsSet) >>> 8, pName, Level);
    SendClientMessageToAll(COLOR_TURQUOISE, string1);
    pInfo[PlayerWhoseLevelGetsSet][AdminLevel] = Level;
    return 1;
    }
    if(pInfo[PlayerWhoseLevelGetsSet][AdminLevel] > Level)
    {
    format(string2, sizeof(string2), "[ADMININFO] Admin {%06x}%s "#COLOR_TURQUOISE_EMBED"hat {%06x}%s "#COLOR_TURQUOISE_EMBED"auf "#COLOR_GOLD_EMBED"Level %i "#COLOR_RED_EMBED"herabgestuft!", GetPlayerColor(playerid) >>> 8, AdminWhoExecutesTheCommand, GetPlayerColor(PlayerWhoseLevelGetsSet) >>> 8, pName, Level);
    SendClientMessageToAll(COLOR_TURQUOISE, string2);
    Level = pInfo[PlayerWhoseLevelGetsSet][AdminLevel];
    return 1;
    }
    return 1;
    }


    Problem: Ich habe nun einen Account auf Level 5 gestuft. Er lässt sich allerdings nicht mehr herabstufen. Die ClientMessage wird zwar ausgegeben, aber in der user datei bleibt immer die 5 stehen.
    Hier noch die stock Funktion für Path.
    stock Path(playerid)
    {
    new string[128],
    name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,sizeof(name));
    format(string,sizeof(string),UserPath,name);
    return string;
    }


    Danke!

    Einmal editiert, zuletzt von Manyula ()

  • Auf dem ersten Blick erkenne ich zwar nichts, aber folgende Frage haette ich:
    if(pInfo[PlayerWhoseLevelGetsSet][AdminLevel] < Level)
    {
    format(string1, sizeof(string1), "[ADMININFO] Admin {%06x}%s "#COLOR_TURQUOISE_EMBED"hat {%06x}%s "#COLOR_TURQUOISE_EMBED"auf "#COLOR_GOLD_EMBED"Level %i "#COLOR_GREEN_EMBED"heraufgestuft!", GetPlayerColor(playerid) >>> 8, AdminWhoExecutesTheCommand, GetPlayerColor(PlayerWhoseLevelGetsSet) >>> 8, pName, Level);
    SendClientMessageToAll(COLOR_TURQUOISE, string1);
    pInfo[PlayerWhoseLevelGetsSet][AdminLevel] = Level;
    return 1;
    }
    if(pInfo[PlayerWhoseLevelGetsSet][AdminLevel] > Level)
    {
    format(string2, sizeof(string2), "[ADMININFO] Admin {%06x}%s "#COLOR_TURQUOISE_EMBED"hat {%06x}%s "#COLOR_TURQUOISE_EMBED"auf "#COLOR_GOLD_EMBED"Level %i "#COLOR_RED_EMBED"herabgestuft!", GetPlayerColor(playerid) >>> 8, AdminWhoExecutesTheCommand, GetPlayerColor(PlayerWhoseLevelGetsSet) >>> 8, pName, Level);
    SendClientMessageToAll(COLOR_TURQUOISE, string2);
    Level = pInfo[PlayerWhoseLevelGetsSet][AdminLevel];
    return 1;
    }


    Wieso benutzt du beim hochstufen

    Zitat

    pInfo[PlayerWhoseLevelGetsSet][AdminLevel] = Level;

    und beim herunterstufen

    Zitat

    Level = pInfo[PlayerWhoseLevelGetsSet][AdminLevel];

    ?
    Versuchs mal wie in der ersten Abfrage, denn wie du es in der zweiten machst, machts für mich keinen Sinn. Du setzt das Level welches du geben willst wieder auf das, was er zuvor hatte.
    Oder verguck ich mich?


    Mit freundlichen Grüßen,
    DarkZero

  • Hast recht. Habs jetzt hingekriegt, hat bisschen mehr nicht gestimmt. Der richtige Code sieht jetzt so aus, nur für die SuFu, falls mal jemand danach suchen sollte...


    COMMAND:setlevel(playerid, params[])
    {
    new ID,
    Level,
    string1[128],
    string2[128],
    pName[MAX_PLAYER_NAME],
    AdminWhoExecutesTheCommand[MAX_PLAYER_NAME];
    if(pInfo[playerid][AdminLevel] == 0) return SendClientMessage(playerid, COLOR_RED, "[ERROR] Du bist kein Admin.");
    if(pInfo[playerid][AdminLevel] > 0 && pInfo[playerid][AdminLevel] < 5) return SendClientMessage(playerid, COLOR_RED, "[ERROR] Du hast einen zu niedrigen Adminlevel, um diese Aktion auszuführen!");
    if(sscanf(params, "ui", ID, Level)) return SendClientMessage(playerid, COLOR_RED, "[ERROR] Gebrauch: /setlevel [ID] [Level]");
    if(!IsPlayerConnected(ID)) return SendClientMessage(playerid, COLOR_RED, "[ERROR] Dieser Spieler ist nicht online!");
    if(Level < 0 || Level > 5) return SendClientMessage(playerid, COLOR_RED, "[ERROR] Ungueltiges Level.");
    if(ID == playerid) return SendClientMessage(playerid, COLOR_RED, "[ERROR] Du kannst nicht deinen eigenen Adminlevel setzen!");


    GetPlayerName(playerid, AdminWhoExecutesTheCommand, sizeof(AdminWhoExecutesTheCommand));
    GetPlayerName(ID, pName, sizeof(pName));

    if(pInfo[ID][AdminLevel] < Level)
    {
    format(string1, sizeof(string1), "[ADMININFO] Admin {%06x}%s "#COLOR_TURQUOISE_EMBED"hat {%06x}%s "#COLOR_TURQUOISE_EMBED"auf "#COLOR_GOLD_EMBED"Level %i "#COLOR_GREEN_EMBED"heraufgestuft!", GetPlayerColor(playerid) >>> 8, AdminWhoExecutesTheCommand, GetPlayerColor(ID) >>> 8, pName, Level);
    SendClientMessageToAll(COLOR_TURQUOISE, string1);
    pInfo[ID][AdminLevel] = Level;
    return 1;
    }
    if(pInfo[ID][AdminLevel] > Level)
    {
    format(string2, sizeof(string2), "[ADMININFO] Admin {%06x}%s "#COLOR_TURQUOISE_EMBED"hat {%06x}%s "#COLOR_TURQUOISE_EMBED"auf "#COLOR_GOLD_EMBED"Level %i "#COLOR_RED_EMBED"herabgestuft!", GetPlayerColor(playerid) >>> 8, AdminWhoExecutesTheCommand, GetPlayerColor(ID) >>> 8, pName, Level);
    SendClientMessageToAll(COLOR_TURQUOISE, string2);
    pInfo[ID][AdminLevel] = Level;
    return 1;
    }
    new INI:file = INI_Open(Path(playerid));
    INI_WriteInt(file, "AdminLevel", pInfo[playerid][AdminLevel]);
    INI_Close(file);
    return 1;
    }


    Den file-Part hab ich ganz nach unten, unter beide if-Abfragen gemacht, da er davor, als der Part noch darüber war, den AdminLevel doppelt in die Userfile geschrieben hat. Und das, worauf du mich hingewiesen hast, war auch ausschlaggebend. ;)
    Vielen Dank!


    EDIT: "PlayerWhoseLevelGetsSet"-Variable war dasselbe, wie "ID", also doppelt gemoppelt. Habs aus dem Code entfernt und angepasst.

    Einmal editiert, zuletzt von Manyula ()