IsPlayerAnAdmin ?!

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
  • Ich habe da ein Problemchen !


    Ich nutze ein MySQL System, Admin erstellen und in der DB Speichern alles kein Thema ...


    Aber warum geht dieses hier nicht :


    /*Hier kann man die Enums finden !*/


    enum PD
    {
    pEingeloggt,
    pGeld,
    pLevel,
    pAdminlevel,
    pFraktion,
    pOnline
    };


    new SpielerInfo[MAX_PLAYERS][PD];
    new Handle;
    new rang;
    new fraktion;


    /*Das Script beginnt hier !*/


    ocmd:setadmin(playerid, params[])
    {
    new query[256];
    //if(!IsPlayerAdmin(playerid))
    if(isPlayerAnAdmin(playerid,1, rang))
    {
    format(query, sizeof query, "[AdmMsg]: %s, Du bist nicht befugt diesen Befehl zu benutzen!" ,Spielername(playerid));
    return SendClientMessage(playerid, Rot, query);
    }
    new pID;
    if(sscanf(params, "ui", pID, rang)) return SendClientMessage(playerid, Blau, "[SysMsg]: Benutze: /setadmin [SpielerID][Rang 0 - 5]");
    SetPVarInt(playerid, "Adminlevel", rang);
    SendClientMessage(pID, Blau, "Der Vorgang war erfolgreich");
    mysql_format(Handle, query, sizeof(query), "UPDATE `users` SET `Adminlevel`='%i' WHERE `username`='%s'",rang,Spielername(playerid));
    mysql_pquery(Handle, query);
    return 1;
    }


    stock isPlayerAnAdmin(playerid)
    {
    if(GetPVarInt(playerid,"Adminlevel")>=rang)
    return 0;
    }


    stock isPlayerNotAnAdmin(playerid)
    {
    if(getPVarInt(playerid,"Adminlevel")<=rang)
    return 0;
    }


    stock Adminrang(playerid)
    {
    new rang[128];
    switch(SpielerInfo[playerid][pAdminlevel])
    {
    case 0 : rang = "Zivilist";
    case 1 : rang = "Probe Supporter";
    case 2 : rang = "Supporter";
    case 3 : rang = "Moderator";
    case 4 : rang = "Admin";
    case 5 : rang = "FullAdmin";
    case 6 : rang = "Inhaber";
    }
    return rang;
    }


    Vielen Dank für Eure Hilfe !

  • Beitrag von Fernando_Jizuya ()

    Dieser Beitrag wurde gelöscht, Informationen über den Löschvorgang sind nicht verfügbar.
  • ocmd:setadmin(playerid, params[])
    {
    //if(!IsPlayerAdmin(playerid))
    if(isPlayerNotAnAdmin(playerid,1))
    {
    format(query, sizeof query, "[AdmMsg]: %s, Du bist nicht befugt diesen Befehl zu benutzen!" ,Spielername(playerid));
    return SendClientMessage(playerid, Rot, query);
    }
    new pID;
    if(sscanf(params, "ui", pID, rang)) return SendClientMessage(playerid, Blau, "[SysMsg]: Benutze: /setadmin [SpielerID][Rang 0 - 5]");
    SetPVarInt(pID, "Adminlevel", rang);
    SendClientMessage(playerid, Blau, "Der Vorgang war erfolgreich");
    new query[256];
    mysql_format(Handle, query, sizeof(query), "UPDATE `users` SET `Adminlevel`='%i' WHERE `username`='%s'",rang,Spielername(pID));
    mysql_pquery(Handle, query);
    return 1;
    }


    stock isPlayerAnAdmin(playerid, rang)
    {
    if(GetPVarInt(playerid,"Adminlevel")>=rang) return 1;
    return 0;
    }


    stock isPlayerNotAnAdmin(playerid, rang)
    {
    if(getPVarInt(playerid,"Adminlevel")<rang) return 1;
    return 0;
    }


    Nächstes mal erkläre bitte auch was nicht geht.

    3HZXdYd.png

    Einmal editiert, zuletzt von Jeffry ()

  • So funktioniert das ganze ! Also mit deinem Code, aber wie mache ich es nun, dass dort etwas in der Richtung steht wie:


    "[AdmMsg]: %s, Du bist nicht befugt diesen Befehl zu benutzen!" Mindest benötigter Rang : (RANG)


    Und eventuell noch sowas wie ... Du hast %s zum (Rang) befördert. Hat Spieler %s zum (RANG) befördert ?


    Eventuell würde mir auch helfen, wenn du es detaliert erklärst warum du es so machst ! Den Query habe ich absichtlich wieder nach oben geschoben ! Da ich sonst Fehler bekomme !


    ocmd:setadmin(playerid, params[])
    {
    new query[256];
    if(isPlayerAnAdmin(playerid,1))
    {
    format(query, sizeof query, "[AdmMsg]: %s, Du bist nicht befugt diesen Befehl zu benutzen!" ,Spielername(playerid));
    return SendClientMessage(playerid, Rot, query);
    }
    new pID;
    if(sscanf(params, "ui", pID, rang)) return SendClientMessage(playerid, Blau, "[SysMsg]: Benutze: /setadmin [SpielerID][Rang 0 - 5]");
    SetPVarInt(pID, "Adminlevel", rang);
    SendClientMessage(playerid, Blau, "Der Vorgang war erfolgreich");
    mysql_format(Handle, query, sizeof(query), "UPDATE `users` SET `Adminlevel`='%i' WHERE `username`='%s'",rang,Spielername(pID));
    mysql_pquery(Handle, query);
    return 1;
    }


    Und zur Hölle warum muss ich GetPVarInt und SetPVarInt nutzren wenn ich mit MySQL arbeite, das verstehe ich nicht ganz :(

    Einmal editiert, zuletzt von LoomaR ()

  • MySQL ist eine Datenbank, wo du Sachen erstellest, löschst, speicherst und lädst. Das hat somit mit einer Abfrage, ob er
    Admin ist/nicht ist nichts zutun. Selbstverständlich kannst du dies per MySQL machen, aber wofür hast du dann:


    enum PD
    {
    pEingeloggt,
    pGeld,
    pLevel,
    pAdminlevel,
    pFraktion,
    pOnline
    };
    new SpielerInfo[MAX_PLAYERS][PD];


    Jeffrey hat es so gemacht:


    stock isPlayerAnAdmin(playerid, p_rang)
    {
    if(GetPVarInt(playerid,"Adminlevel")>=p_rang) return 1;
    return 0;
    }


    stock isPlayerNotAnAdmin(playerid, p_rang)
    {
    if(GetPVarInt(playerid,"Adminlevel")<p_rang) return 1;
    return 0;
    }


    Du könntest das aber ebenfalls in folgendes ändern:


    stock isPlayerAnAdmin(playerid, p_rang)
    {
    if(sInfo[playerid][pAdminlevel]>=p_rang) return 1;
    return 0;
    }


    stock isPlayerNotAnAdmin(playerid, p_rang)
    {
    if(sInfo[playerid][pAdminlevel]<p_rang) return 1;
    return 0;
    }


    Jeffrey : Falls ich etwas falsch erklärt habe, tut es mir natürlich Leid, wollte dich nur korrigieren, falls überhaupt etwas falsch war(ich habs so gesehen).

  • Nur so als Anmerkung: Warum hast du einen 'stock' isPlayerNotAnAdmin wenn du schon isPlayerAnAdmin hast? Ist doch unnötig Arbeit zum schreiben und echt langer Klassenname und joa bestimmt auch nicht so performancefreundlich, wenn man zu allem ne Klasse erstellt oder eine Variable... Geht das nicht mit:
    if(isPlayerAnAdmin){ ... }
    else { ... }
    //bzw
    if(!isPlayerAnAdmin){ ... }
    :o

  • Warum sollte ich jedem mein RCON geben wollen ? Genau, macht man nicht, deswegen benutze ich ein Adminsystem, warum ? Es soll Benutzerfreundlich sein. Mein Server hat mehr als nur ausreichende Ressourcen, weswegen ich mir diese Performancefressenden Klassen noch leisten darf :)