If abfrage hilfe

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
  • Hey,
    Ich bin noch recht neu in der SAMP Scripting scene deswegen muss ich euch schon wieder was fragen ^^.
    Also ich möchte abfragen, ob der admin höher als rang 3 ist.
    Ich habs jetzt gerade so.

    ocmd:makeadmin(playerid,params[])
    {
    if(!pAdmin(playerid,3)) return SendClientMessage(playerid,ROT,"Du darfst den Command nicht nutzen, da du kein High-Admin bist.");
    {
    new pID, Level;
    if(sscanf(params,"ud",pID,Level))return SendClientMessage(playerid,ROT,"FEHLER: /makeadmin [ID/Name] [AdminLevel]");
    if(!IsPlayerConnected(pID))return SendClientMessage(playerid,ROT,"FEHLER: Dieser Spieler ist nicht online!");
    if(Level < 0 || Level > 5) return SendClientMessage(playerid,0xC8C8C8FF, "Der Adminrank muss zwischen 0 [Uninvite] und 5 liegen!");
    SetPVarInt(pID,"Adminlevel",Level);
    SpielerSpeichern(pID);
    }
    return 1;
    }



    Allerdings kann ich das mit Admin Rang 5 nicht.
    Achso hier noch der Stock für das pAdmin:

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

  • Bin mir nicht sicher aber glaube das mit den Klammern ist falsch.


    Versuchs mal so:
    ocmd:makeadmin(playerid,params[])
    {
    if(!pAdmin(playerid,3)) return SendClientMessage(playerid,ROT,"Du darfst den Command nicht nutzen, da du kein High-Admin bist.");
    new pID, Level;
    if(sscanf(params,"ud",pID,Level))return SendClientMessage(playerid,ROT,"FEHLER: /makeadmin [ID/Name] [AdminLevel]");
    if(!IsPlayerConnected(pID))return SendClientMessage(playerid,ROT,"FEHLER: Dieser Spieler ist nicht online!");
    if(Level < 0 || Level > 5) return SendClientMessage(playerid,0xC8C8C8FF, "Der Adminrank muss zwischen 0 [Uninvite] und 5 liegen!");
    SetPVarInt(pID,"Adminlevel",Level);
    SpielerSpeichern(pID);
    return 1;
    }

  • Aber dann fehlt mir dich der Rang.


    Also ich möchte ja, dass jeder Admin über Rang 3 /makeadmin machen kann.

  • John_Hunter das war schon richtig was er hatte.
    man kann erst 1 und dann 0 returnen...
    denn das return 1; steht unter einer abfrage, wenn also die abfrage true ist, wird eins returnt, bei einem return wird die methode sofort abgebrochen und der wert returnt..
    d.h. das return 0 kommt garnicht mehr vor, ausser die bedingung ist eben false, dann überspringt es das return 1; und verwendet return 0;


    du kannst es genauso so schreiben


    if(rang<=Adminrang) return 1;
    else return 0;


    //achja und das was du geschrieben hast is völliger mist, wieso überflüssige methoden erstellen =!


  • Wo siehst Du denn in seinem Stock eine Beendung der If Schleife?
    Demnach waren return 1 und return 0 auf einer Ebene.


    Und warum ich den anderen Stock bevorzuge?


    Ganz einfach: Stell Dir mal vor, Du willst den Rang eines admins ermitteln, ohne zu wissen, welchen er hat.


    Dann kann man den Rang nicht als Parameter übergeben.


    also gibt man ihn per return aus.


    Grüße


  • Das ist eine sache der bequemlichkeit... man kann dann genauso GetPVarInt benutzen... einen stock für einen einzelnen methodenaufruf zu machen finde ich überflüssig.
    und zu der if-abfrage... auch eher falsch.
    nach solchen sachen wie if, else, case, for (kA wie die heissen?) wird alles bis zum nächsten ; aufgerufen, daher kann man sich die {} sparen. somit wird nur alles bis zum return 1; aufgerufen, der rest ist nicht in der if-abfrage ;)


  • Ich glaub das müsste dir ein bisschen weiterhelfen leider kein ocmd aber hier musst du selber mal testen :


    //----------------------------------[MAKEADMIN]------------------------------------------------
    if(strcmp(cmd, "/makeadmin", true) == 0)
    {
    if(PlayerInfo[playerid][pAdmin] == 2002 || IsPlayerAdmin(playerid))
    {
    tmp = strtok(cmdtext, idx);
    if(!strlen(tmp))
    {
    SendClientMessage(playerid, COLOR_GRAD2, "Benutze: /makeadmin [ID] [Level]");
    return 1;
    }
    new para1 = ReturnUser(tmp);
    tmp = strtok(cmdtext, idx);
    new level = strval(tmp);
    if(IsPlayerConnected(para1))
    {
    if(para1 != INVALID_PLAYER_ID)
    {
    GetPlayerName(para1, giveplayer, sizeof(giveplayer));
    GetPlayerName(playerid, sendername, sizeof(sendername));
    if(PlayerInfo[para1][pAdmin] < level)
    {
    printf("AdmCmd: %s hat %s zu einem Level %d Admin befördert.", sendername, giveplayer, level);
    format(string, sizeof(string), "Du wurdest durch %s zu einem Level %d Admin befördert", sendername, level);
    SendClientMessage(para1, COLOR_LIGHTBLUE, string);
    format(string, sizeof(string), "Du hast %s zu einem Level %d Admin befördert.", giveplayer,level);
    SendClientMessage(playerid, COLOR_LIGHTBLUE, string);
    }
    else
    {
    printf("AdmCmd: %s hat %s zu einem Level %d Admin degradiert.", sendername, giveplayer, level);
    format(string, sizeof(string), "Du wurdest durch %s zu einem Level %d Admin degradiert", sendername, level);
    SendClientMessage(para1, COLOR_LIGHTBLUE, string);
    format(string, sizeof(string), "Du hast %s zu einem Level %d Admin degradiert.", giveplayer,level);
    SendClientMessage(playerid, COLOR_LIGHTBLUE, string);
    } }
    PlayerInfo[para1][pAdmin] = level;
    }
    }
    }