Setlevel mit Dini und SSCANF

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
  • Wie der Titel schon sagt, arbeite ich mit Dini und sscanf.


    Ich habe mir ein Levelsystem erstellt, aber ich komme momentan einfach nicht drauf, wie ich den Value eines Spielers ändern kann.


    Momentan sieht es bei mir so aus:


    ocmd:setlevel(playerid,params[])
    {
    // 0 = Gebannt
    // 1 = Spieler
    // 2 = Supporter
    // 3 = Co-Admin
    // 4 = Admin
    new alevel;
    new pName[MAX_PLAYER_NAME], save[28], pID;
    GetPlayerName(playerid, pName, sizeof(pName));
    format(save, sizeof(save), "/Spieler/%s.ini", pName);
    if(dini_Exists(save))
    {
    sInfo[playerid][level] = dini_Int(save,"level");
    if(sInfo[playerid][level] > 2)
    {
    if(sscanf(params,"ui",pID,alevel)) return SendClientMessage(playerid,COLOR_YELLOW,"Benutze: /setlevel [Spieler][User-Level]");
    {
    // Hier fehlt der Code zum ändern des Value
    SendClientMessage(playerid,COLOR_GREEN,"Info: Userlevel erfolgreich angepasst!");
    }
    }
    }
    return 1;
    }


    Wäre nett, wenn mir da jemand helfen könnte, hab bisher kein Tutorial für meine Zwecke gefunden.

    "Dem wird befohlen, der sich nicht selbst gehorchen kann" - Friedrich Nietzsche

  • Das ist mir klar aber ich weiss nicht wie ich den Script sagen soll, dass das die Spielerid von jemand anderen ist und er in seine Datei gehen soll und die variable level auf den integer stellen soll, den ich als parameter mit angegeben habe.

    "Dem wird befohlen, der sich nicht selbst gehorchen kann" - Friedrich Nietzsche

  • Hey,


    achso meinst du das:


    Nun dann musst du mit Sscanf einen string, statt einen Spielernamen angeben, also:


    if(sscanf(params,"s[21]i",name,alevel)) return SendClientMessage(playerid,COLOR_YELLOW,"Benutze: /setlevel [Spieler (exakte Rechtschreibung)] [User-Level]");


    21 ist glaube ich standartmäßig MAX_PLAYER_NAME.
    Dann erstellst du den Pfad so:


    format(save, sizeof(save), "/Spieler/%s.ini", name);


    Wenn dieser Pfad nicht existiert, lässt du halt eine Fehlmeldung ausgeben.


    Grüße,
    tony

  • Wenn du schon sscanf benutzt,dann mach dich doch vorher damit etwas vertraut.
    In meiner Signatur findest du dazu ein sehr ausführliches Tutorial.Hier trotzdem nochmal der Link.
    http://forum.sa-mp.de/wbb/san-…-commands-mit-parametern/
    ocmd:setlevel(playerid,params[])
    {
    // 0 = Gebannt
    // 1 = Spieler
    // 2 = Supporter
    // 3 = Co-Admin
    // 4 = Admin
    new alevel;
    new pName[MAX_PLAYER_NAME], save[28], pID;
    GetPlayerName(playerid, pName, sizeof(pName));
    format(save, sizeof(save), "/Spieler/%s.ini", pName);
    if(dini_Exists(save))
    {
    sInfo[playerid][level] = dini_Int(save,"level"); // <- Wieso lädst du erst hier den Level des Spielers?
    if(sInfo[playerid][level] > 2)
    {
    if(sscanf(params,"ui",pID,alevel)) return SendClientMessage(playerid,COLOR_YELLOW,"Benutze: /setlevel [Spieler][User-Level]");
    {
    // Hier fehlt der Code zum ändern des Value
    GetPlayerName(pID, pName, sizeof(pName) ); // pID ist nun die ID an der wir arbeiten möchten
    format(save, sizeof(save), "/Spieler/%s.ini", pName);
    if(dini_Exists(save))
    {
    dini_IntSet(save, "level", alevel);
    SendClientMessage(playerid,COLOR_GREEN,"Info: Userlevel erfolgreich angepasst!");
    }
    else {
    SendClientMessage(playerid,COLOR_RED,"Spieler hat keinen Account!");
    }
    }
    }
    }
    return 1;
    }
    Die Erklärung lasse ich mal weg zu sscanf.Dazu findest du alles wie gesagt im Tutorial.

  • Der Spielername ist 24 Zeichen lang, aber ich bin Schreibfaul, daher will ich eine ID und keinen Spielernamen verwenden.
    Das mit dem Pfad weiss ich, aber wie soll ich dem Script sagen das die ID 21 (Beispielsweise) nicht ICH bin, sondern jemand anderes und diese ID 21 eine Spielerdatei hat und in dieser Datei halt eine Variable "level" ist mit einem Wert, verstehst du?

    "Dem wird befohlen, der sich nicht selbst gehorchen kann" - Friedrich Nietzsche

  • Wenn du schon sscanf benutzt,dann mach dich doch vorher damit etwas vertraut.
    In meiner Signatur findest du dazu ein sehr ausführliches Tutorial.Hier trotzdem nochmal der Link.
    http://forum.sa-mp.de/wbb/san-…-commands-mit-parametern/


    Die Erklärung lasse ich mal weg zu sscanf.Dazu findest du alles wie gesagt im Tutorial.


    Hab ich mir angeschaut Cheffe, aber ich bin noch nicht so lange bei PAWN dabei und es ist meine erste Scriptsprache. Daher entschuldige mich bitte, meine Devise lautet Learning-by-Doing. Aber vielen Dank für die Hilfe.

    "Dem wird befohlen, der sich nicht selbst gehorchen kann" - Friedrich Nietzsche

  • Der Spielername ist 24 Zeichen lang, aber ich bin Schreibfaul, daher will ich eine ID und keinen Spielernamen verwenden.
    Das mit dem Pfad weiss ich, aber wie soll ich dem Script sagen das die ID 21 (Beispielsweise) nicht ICH bin, sondern jemand anderes und diese ID 21 eine Spielerdatei hat und in dieser Datei halt eine Variable "level" ist mit einem Wert, verstehst du?


    Dazu habe ich ja eine Lösung beschrieben.
    Mit dieser kannst du dann auch einen Account offline bearbeiten.
    Du musst halt nur den ganzen Namen und nicht nur einen Teil / eine ID angeben.
    //Edit: Achte darauf, dass du keine doppelten Posts abgibst, bearbeite lieber deinen ersten, damit du keine Verwarnung erhälst :)


    Grüße,
    tony

  • Der Doppelpost war keine Absicht.


    Btw: Wenn ich kompiliere ist der Dateiname der AMX jetzt so

    Code
    HELLSK~1.amx

    statt

    Code
    hellskitchen.amx


    Jemand eine Ahnung warum?

    "Dem wird befohlen, der sich nicht selbst gehorchen kann" - Friedrich Nietzsche