[MySQL] IstAdmin Abfrage erstellen?

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
  • Heyho Fische,
    ich hab ne kleine Frage ich bin ja noch am scripten lernen und wollt mal fragen wie ich eine MySQL IstAdmin Abfrage mach.


    Und zwar wenn ich denn Spieler erstell mach ich ja folgendes:
    CreateAccount(playerid, inputtext);


    CreateAccount Stock:
    stock CreateAccount(playerid, pass[])
    {
    new query[256],Name[MAX_PLAYER_NAME];
    GetPlayerName(playerid, Name, MAX_PLAYER_NAME);
    mysql_real_escape_string(Name,Name);
    mysql_real_escape_string(pass,pass);
    format(query, sizeof(query), "INSERT INTO `accounts` (`Name`, `Passwort`) VALUES ('%s', '%s')", Name, pass);
    mysql_query(query);
    return true;
    }


    Aber so richtig gespeichert wird er erst wenn er disconnected:


    stock SavePlayer(playerid)
    {
    if(IsPlayerConnected(playerid) && !IsPlayerNPC(playerid))
    {
    if(GetPVarInt(playerid,"Eingeloggt") == 1)
    {
    mysql_SetInt("accounts", "Level", SpielerInfo[playerid][pLevel], "Name", SpielerInfo[playerid][pName]);
    mysql_SetInt("accounts", "Geld", SpielerInfo[playerid][pGeld], "Name", SpielerInfo[playerid][pName]);
    mysql_SetInt("accounts", "Kills", SpielerInfo[playerid][pKills], "Name", SpielerInfo[playerid][pName]);
    mysql_SetInt("accounts", "Tode", SpielerInfo[playerid][pTode], "Name", SpielerInfo[playerid][pName]);
    mysql_SetFloat("accounts", "Health", SpielerInfo[playerid][pHealth], "Name", SpielerInfo[playerid][pName]);
    mysql_SetInt("accounts", "Admin", SpielerInfo[playerid][pAdmin], "Name", SpielerInfo[playerid][pName]);
    }
    }
    return 1;
    }


    Und geladen wird er auch:


    stock LoadPlayer(playerid)
    {
    if(IsPlayerConnected(playerid) && !IsPlayerNPC(playerid))
    {
    GetPlayerName(playerid, SpielerInfo[playerid][pName], MAX_PLAYER_NAME);
    SpielerInfo[playerid][pLevel] = mysql_GetInt("accounts", "Level", "Name", SpielerInfo[playerid][pName]);
    SpielerInfo[playerid][pGeld] = mysql_GetInt("accounts", "Geld", "Name", SpielerInfo[playerid][pName]);
    SpielerInfo[playerid][pKills] = mysql_GetInt("accounts", "Kills", "Name", SpielerInfo[playerid][pName]);
    SpielerInfo[playerid][pTode] = mysql_GetInt("accounts", "Tode", "Name", SpielerInfo[playerid][pName]);
    SpielerInfo[playerid][pHealth] = mysql_GetFloat("accounts","Health","Name", SpielerInfo[playerid][pName]);
    SpielerInfo[playerid][pAdmin] = mysql_GetInt("accounts", "Admin", "Name", SpielerInfo[playerid][pName]);
    }
    return 1;
    }


    Jetz wollte ich euch fragen ob ihr mir evntl. erklären könnt wie ich eine IstAdmin Abfrage machen kann also z.B


    if(!IstAdmin(playerid) = 1-4 ) return SCM(playerid,FARBE,"Du hast keinen RANG 1-4 für diesen Command");


    (Nach dem MYSQL Tutorial von maddin: )
    Ich möchte aber auch kein C&P'ler sein deswegen bitte mit erklärung.
    Wäre super freundlich von euch,
    Danke,
    Zieglein

    "Imagine if the government went after corruption as hard as it goes after guys who run filesharing sites. Priorities. " - @Snowden
    "More worrying than FBI temporarily running a server that contained child porn, is hacking computers anywhere in the world with one warrant" - @josephfcox

  • indem du dir ne Funktion schreibst.



    stock IstAdmin(playerid,alevel) // Funktion namens IstAdmin mit den Parametern Playerid und alevel.
    if(SpielerInfo[playerid][pAdmin] >=alevel)return 1; // Falls das gewünschte adminlevel höher oder gleichist, gibt es 1 zurück.
    return 0;// Falls nicht 0.


    //Anwendung
    if(!IstAdmin(playerid,1)) return SCM(playerid,FARBE,"Du hast keinen RANG 1-4 für diesen Command");//Alles was nicht mindestens Adminlevel 1 hat, wird nichts.


    Sollte so hinhauen, ist halt nicht getestet.

  • Also kann ich nicht nur 1 sondern auch 4 einsetzen ?

    "Imagine if the government went after corruption as hard as it goes after guys who run filesharing sites. Priorities. " - @Snowden
    "More worrying than FBI temporarily running a server that contained child porn, is hacking computers anywhere in the world with one warrant" - @josephfcox

  • @.x22 Zieglein: Ja, kannst du..
    Würde dir aber empfehlen, es mit "SpielerInfo[playerid][pAdmin]" zu machen, da du immer wieder die Funktion IstAdmin aufrufst, und das zieht mehr Ressourcen..


    Hier mal mit dem Beispiel von Slash:
    if(SpielerInfo[playerid][pAdmin] < 1) return SCM(playerid,FARBE,"Du hast keinen RANG 1-4 für diesen Command");


    //Oder eben


    if(!SpielerInfo[playerid][pAdmin])return SCM(playerid,FARBE,"Du hast keinen RANG 1-4 für diesen Command"); //pAdmin beträgt 0, weshalb du das '!' setzen kannst

  • ErikSon:
    aber wenn ich will, dass nur der Projektleiter den Command ausführen kann muss ich wohl die obere Variante nehmen.. :o

    "Imagine if the government went after corruption as hard as it goes after guys who run filesharing sites. Priorities. " - @Snowden
    "More worrying than FBI temporarily running a server that contained child porn, is hacking computers anywhere in the world with one warrant" - @josephfcox

  • Was meinst du mit obere Variante?


    Wenn Adminrank 4 = Projektleiter ist, dann muss das so aussehen:
    if(SpielerInfo[playerid][pAdmin] < 4) return SCM(playerid,FARBE,"Du bist nicht der Projektleiter!"); // Irgendeine Message

  • Kleiner Tipp noch, weil ich das gerade sehe.


    Ich würde dir empfehlen, das Laden sowie das Speichern noch umzuschreiben. Bei vielen Daten zieht das ne' Menge an Ressourcen. Und das kann zu laggs führen. Man öffnet ja auch nicht jedes mal aufs Neue den Kühlschrank, wenn man 10 Sachen rausholen will.


    -Nur als Hinweis für später.


    /Edit.


    Wenn NUR der Projektleiter den Command ausführen soll, musst du einfach die Variable aus dem Array nehmen.
    if(SpielerInfo[playerid][pAdmin] != Level_für_PLeiter)return Send..(.."du bist kein Projektleiter");

  • thihi danke ihr lieben :)


    Greetz,
    Ziege

    "Imagine if the government went after corruption as hard as it goes after guys who run filesharing sites. Priorities. " - @Snowden
    "More worrying than FBI temporarily running a server that contained child porn, is hacking computers anywhere in the world with one warrant" - @josephfcox

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