2 Probleme im System

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 Community, ich habe 2 Bugs in meinen Befehlen, jedoch weiß ich nicht woher diese kommen.
    Hier fange ich mal mit Bug 1 an, es geht um das Adminduty System. Man gibt /aduty ein und es sollte "Jayen hat sich als Server Leitung angemeldet" kommen , macht man wieder /aduty sollte "Jayen hat sich als Server Leitung abgemeldet" kommen. Jedoch buggt es, wie man im Screen hier sehen kann, ich gabe die ganze Zeit /aduty ein.

    Hier mal der Code
    ocmd:aduty(playerid,params[])
    {
    if(!isPlayerAnAdmin(playerid,1))return SendClientMessage(playerid,COLOR_GRAU,"Diesen Befehl darfst du nicht benutzen.");

    if(Adminduty[playerid] == 0)
    {
    new Adminrang[64];
    switch(GetPVarInt(playerid,"Fraktion"))
    {
    case 1:(Adminrang="Supporter");
    case 2:(Adminrang="Moderator");
    case 3:(Adminrang="Administrator");
    case 4:(Adminrang="Super Administrator");
    case 5:(Adminrang="Server Manager");
    case 6:(Adminrang="Server Leitung");
    }
    new string[128];
    format(string,sizeof(string),"%s hat sich als %s angemeldet.",SpielerName(playerid),Adminrang);
    SendClientMessageToAll(COLOR_ROT,string);
    Adminduty[playerid] = 1;
    }
    if(Adminduty[playerid] == 1)
    {
    new Adminrang[64];
    switch(GetPVarInt(playerid,"Fraktion"))
    {
    case 1:(Adminrang="Supporter");
    case 2:(Adminrang="Moderator");
    case 3:(Adminrang="Administrator");
    case 4:(Adminrang="Super Administrator");
    case 5:(Adminrang="Server Manager");
    case 6:(Adminrang="Server Leitung");
    }
    new string1[128];
    format(string1,sizeof(string1),"%s hat sich als %s abgemeldet.",SpielerName(playerid),Adminrang);
    SendClientMessageToAll(COLOR_ROT,string1);
    Adminduty[playerid] = 1;
    }
    return 1;
    }


    Dann zum 2 Problem, es geht um das /makeadmin System.
    Jedesmal wenn ich /makeadmin *** 6 mache, steht dort das ich denjenigen als Server Leiter aufgenommen habe, was auch so richtig ist.
    Mache ich jedoch /makeadmin *** 4 steht dort trotzdem das er als Server Leiter ins Team aufgenommen wurde, obwohl Rang 4 Super Administrator ist.
    Hier mal der Befehl
    ocmd:makeadmin(playerid,params[])
    {
    if(!isPlayerAnAdmin(playerid,6))return SendClientMessage(playerid,COLOR_GRAU,"Diesen Befehl darfst du nicht benutzen.");
    new pID, string[128], string1[128], Adminrang;
    if(!IsPlayerConnected(pID))return SendClientMessage(playerid,COLOR_GRAU,"Der angegebene Spieler ist nicht online.");
    if(sscanf(params,"ui",pID,Adminrang))return SendClientMessage(playerid,COLOR_GRAU,"Benutzung: /makeadmin [ID/Teilname] [Rang]");
    if(Adminrang<0||Adminrang>6)return SendClientMessage(playerid,COLOR_GRAU,"Der Adminrang darf nicht unter 0 oder über 6 liegen.");
    SetPVarInt(pID,"Adminlevel",Adminrang);
    SpielerSpeichern(pID);
    new Adminlevel[64];
    switch(GetPVarInt(playerid,"Adminlevel"))
    {
    case 0:(Adminlevel="User");
    case 1:(Adminlevel="Supporter");
    case 2:(Adminlevel="Moderator");
    case 3:(Adminlevel="Administrator");
    case 4:(Adminlevel="Super Administrator");
    case 5:(Adminlevel="Server Manager");
    case 6:(Adminlevel="Server Leitung");


    }
    format(string,sizeof(string),"Du wurdest von %s zum %s ins Team aufgenommen.",SpielerName(playerid),Adminlevel);
    SendClientMessage(pID,COLOR_HELLBLAU,string);
    format(string1,sizeof(string1),"Du hast %s als %s ins Team aufgenommen.",SpielerName(pID),Adminlevel);
    SendClientMessage(playerid,COLOR_HELLBLAU,string1);
    return 1;
    }


    Viele Grüße

  • if(Adminduty[playerid] == 1)
    {
    new Adminrang[64];
    switch(GetPVarInt(playerid,"Fraktion"))
    {
    case 1:(Adminrang="Supporter");
    case 2:(Adminrang="Moderator");
    case 3:(Adminrang="Administrator");
    case 4:(Adminrang="Super Administrator");
    case 5:(Adminrang="Server Manager");
    case 6:(Adminrang="Server Leitung");
    }
    new string1[128];
    format(string1,sizeof(string1),"%s hat sich als %s abgemeldet.",SpielerName(playerid),Adminrang);
    SendClientMessageToAll(COLOR_ROT,string1);
    Adminduty[playerid] = 0;//Hier war der fehler, du musst es auch auf 0setzen
    }


  • Danke dafür, nur das /makeadmin System buggt noch.
    Ich brauche da dringend Hilfe. Wenn ich z.B mich als pID auswähle geht das, wähle ich einen anderen Spieler aus geht das nicht.


    Viele Grüße

  • if(!isPlayerAnAdmin(playerid,6))return SendClientMessage(playerid,COLOR_GRAU,"Diesen Befehl darfst du nicht benutzen.");
    new pID, string[128], string1[128], Adminrang;
    if(!IsPlayerConnected(pID))return SendClientMessage(playerid,COLOR_GRAU,"Der angegebene Spieler ist nicht online.");
    if(sscanf(params,"ui",pID,Adminrang))


    Du fragst ab, ob pID connected ist, wenn du sie nichtmalmehr richtig definiert hast, also durch die Spielereingabe (sscanf-Abfrage)?

  • if(!isPlayerAnAdmin(playerid,6))return SendClientMessage(playerid,COLOR_GRAU,"Diesen Befehl darfst du nicht benutzen.");
    new pID, string[128], string1[128], Adminrang;
    if(!IsPlayerConnected(pID))return SendClientMessage(playerid,COLOR_GRAU,"Der angegebene Spieler ist nicht online.");
    if(sscanf(params,"ui",pID,Adminrang))


    Du fragst ab, ob pID connected ist, wenn du sie nichtmalmehr richtig definiert hast, also durch die Spielereingabe (sscanf-Abfrage)?


    Verstehe ich jetzt nicht.


    Viele Grüße

  • if(!isPlayerAnAdmin(playerid,6))return SendClientMessage(playerid,COLOR_GRAU,"Diesen Befehl darfst du nicht benutzen.");
    new pID, string[128], string1[128], Adminrang;
    if(sscanf(params,"ui",pID,Adminrang))return bla;
    if(!IsPlayerConnected(pID))return SendClientMessage(playerid,COLOR_GRAU,"Der angegebene Spieler ist nicht online.");


    versuchs mal so

  • Aduty geht immer noch nicht, mache ich nun /aduty kommt Traider hat sich als angemeldet und als abgemeldet, also er spammt das doppelt immer.
    ocmd:aduty(playerid,params[])
    {
    if(!isPlayerAnAdmin(playerid,1))return SendClientMessage(playerid,COLOR_GRAU,"Diesen Befehl darfst du nicht benutzen.");
    if(Adminduty[playerid] == 0)
    {
    new Adminrang[64];
    switch(GetPVarInt(playerid,"Adminlevel"))
    {
    case 1:(Adminrang="Supporter");
    case 2:(Adminrang="Moderator");
    case 3:(Adminrang="Administrator");
    case 4:(Adminrang="Super Administrator");
    case 5:(Adminrang="Server Manager");
    case 6:(Adminrang="Server Leitung");
    }
    new string[128];
    format(string,sizeof(string),"%s hat sich als %s angemeldet.",SpielerName(playerid),Adminrang);
    SendClientMessageToAll(COLOR_ROT,string);
    Adminduty[playerid] = 1;
    }
    if(Adminduty[playerid] == 1)
    {
    new Adminrang[64];
    switch(GetPVarInt(playerid,"Adminlevel"))
    {
    case 1:(Adminrang="Supporter");
    case 2:(Adminrang="Moderator");
    case 3:(Adminrang="Administrator");
    case 4:(Adminrang="Super Administrator");
    case 5:(Adminrang="Server Manager");
    case 6:(Adminrang="Server Leitung");
    }
    new string1[128];
    format(string1,sizeof(string1),"%s hat sich als %s abgemeldet.",SpielerName(playerid),Adminrang);
    SendClientMessageToAll(COLOR_ROT,string1);
    Adminduty[playerid] = 0;
    }
    return 1;
    }


    new Adminduty[MAX_PLAYERS] = 0;


    Viele Grüße,

  • 1.

    ocmd:aduty(playerid,params[])
    {
    if(!isPlayerAnAdmin(playerid,1))return SendClientMessage(playerid,COLOR_GRAU,"Diesen Befehl darfst du nicht benutzen.");
    if(Adminduty[playerid] == 0)
    {
    new Adminrang[64];
    switch(GetPVarInt(playerid,"Adminlevel"))
    {
    case 1:(Adminrang="Supporter");
    case 2:(Adminrang="Moderator");
    case 3:(Adminrang="Administrator");
    case 4:(Adminrang="Super Administrator");
    case 5:(Adminrang="Server Manager");
    case 6:(Adminrang="Server Leitung");
    }
    new string[128];
    format(string,sizeof(string),"%s hat sich als %s angemeldet.",SpielerName(playerid),Adminrang);
    SendClientMessageToAll(COLOR_ROT,string);
    Adminduty[playerid] = 1;
    }
    else if(Adminduty[playerid] == 1) //Setzt weiter oben Adminduty auf 1, also wird das erste und das zweite ausgeführt..
    {
    new Adminrang[64];
    switch(GetPVarInt(playerid,"Adminlevel"))
    {
    case 1:(Adminrang="Supporter");
    case 2:(Adminrang="Moderator");
    case 3:(Adminrang="Administrator");
    case 4:(Adminrang="Super Administrator");
    case 5:(Adminrang="Server Manager");
    case 6:(Adminrang="Server Leitung");
    }
    new string1[128];
    format(string1,sizeof(string1),"%s hat sich als %s abgemeldet.",SpielerName(playerid),Adminrang);
    SendClientMessageToAll(COLOR_ROT,string1);
    Adminduty[playerid] = 0;
    }
    return 1;
    }


    2.

    switch(Adminrang)) //Vorher wurd die PVar des Spielers, der /makeadmin eingibt ausgelesen. Wenn du jmd anderen Admin machen wolltest, würde er sagen, dass er als User eingeladen wurde..
    {
    case 0:(Adminlevel="User");
    case 1:(Adminlevel="Supporter");
    case 2:(Adminlevel="Moderator");
    case 3:(Adminlevel="Administrator");
    case 4:(Adminlevel="Super Administrator");
    case 5:(Adminlevel="Server Manager");
    case 6:(Adminlevel="Server Leitung");


    }


    Mfg,
    UncleSub

  • What The F*ck gibt ihr ihn für Tipps?
    Das ist der größte Drec* den ich jemals gelesen habe!



    Hier mal ganz Simple, mein Gott so schwer Leute?

    // Diesen Stock einfach in das Script einbinden.
    stock AdminName(playerid)
    {
    new admname[15];
    switch(GetPVarInt(playerid,"Adminlevel"))
    {
    case 0:{admname="Spieler";}
    case 1:{admname="Supporter";}
    case 2:{admname="Moderator";}
    case 3:{admname="Administrator";}
    case 4:{admname="Super Administrator";}
    case 5:{admname="Server Manager";}
    case 6:{admname="Server Leitung";}
    }
    return admname;
    }


    Dannach setzt du hinter einem String einfach "AdminName(playerid)" rein.
    Hier ein Beispiel:

    new string[100];
    format(string,sizeof(string),"Dein Adminname: %s",AdminName(playerid));


    //edit - Auf dein Script angepasst.


    LG :love:

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Ich scripte dir jetzt sicher keinen ganzen Code oder C+P dein Code.



    if(Adminduty[playerid] == 1) // Zu erst Abfragen ob die Variable auf 1 ist.
    {
    //Deine Sachen
    }
    else if(Adminduty[playerid] == 0) // Dann Abfragen ob die Variable vielleicht doch auf 0 ist.
    {
    //Deine Sachen
    }


    Warum so abfragen?
    Wenn du zuerst abfragst ob er 0 ist, dann wird es ja auf 1 gesetzt. Das Script läuft weiter, und fragt ab ob er auf 1 ist. Du hast ihn ja gerade auf 1 gesetzt.
    Bzw:
    0 Checken...
    0 OK = Auf 1 gesetzt
    1 Checken...
    1 OK = Auf 0 gesetzt


    So sollte es aber aussehen.


    1 Checken...
    1 NICHT OK = Weiter
    0 Checken...
    0 OK = Auf 1 gesetzt

  • What The F*ck gibt ihr ihn für Tipps?
    Das ist der größte Drec* den ich jemals gelesen habe!


    Natürlich ist es mit einem Stock einfacher und auch später praktikabler. Es geht hier aber im großem und ganzem darum, dass er seine Fehler im Script ausbessert. Meine Meinung lasse ich da nirgendwo. Wenn ich solch einen Fehler sehe, behebe ich ihn, wenn man darüber hinaus geht, wissen die meisten Leute nicht mehr weiter und man macht alles nur noch schlimmer. Wenn ich meine persönliche Meinung dazu sagen würde, würde ich ihm auch direkt sagen, dass er sein System mit PVars in die Tonne kloppen soll. Mach ich aber nicht, dann könnte er gleich von vorne anfangen. Also bitte halt dich ein wenig zurück mit deinen Aussagen.


    BTW:

    Zitat

    else if(Adminduty[playerid] == 1) //Setzt weiter oben Adminduty auf 1, also wird das erste und das zweite ausgeführt..


    Ist das selbe wie deins:

    Dann mach ein "else" zwischen die Abfragen.


    Außerdem:

    Variable 1 immer zu erst abfragen. Bzw.


    Was erzählst du? Macht keinen Unterschied.


    Mfg,
    UncleSub

  • Natürlich ist es mit einem Stock einfacher und auch später praktikabler.

    Weiter hab ich nicht gelesen. Den wahrscheinlich folgenden unterbemittelten Text möcht ich mir gar nicht in mein hoch arroganten Schädel einpflanzen.
    Fertig Punkt

    Was erzählst du? Macht keinen Unterschied.

    Du setzt die Variable auf 1.
    Also ist die Variable jetzt auch auf 1!
    Das Script liest noch weiter, und die Variable ist auf 1. Also wird auch 1 ausgeführt du .... mein Gott.
    Wenn man keine Ahnung hat sollte man es lassen.


    Ich bin raus gott schütze Amerika!

  • Nimm das ;)


    ocmd:aduty(playerid,params[])
    {
    if(!isPlayerAnAdmin(playerid,1))return SendClientMessage(playerid,ROT,"Diesen Befehl kannst du nicht nutzen. Mindestens benötigter Rang: {00FF5A}Supporter");
    {
    new string[128],string2[128];
    new adminname[30];
    switch(GetPVarInt(playerid,"Adminlevel"))
    {
    case 0:{adminname="Nein";}
    case 1:{adminname="{00FF5A}Probe Supporter";}
    case 2:{adminname="{572B54}Supporter";}
    case 3:{adminname="{858BBB}Moderator";}
    case 4:{adminname="{0000FF}Super Moderator";}
    case 5:{adminname="{FF0000}Administrator";}
    case 6:{adminname="{FF0000}Server Manager";}
    case 7:{adminname="{FF0000}Community Leitung";}
    case 8:{adminname="{FF0000}Server Leitung";}
    }
    #pragma unused params
    if(GetPVarInt(playerid,"AdminDuty"))
    {
    SetPlayerColor(playerid,0xFFFFFF00);
    ResetPlayerWeapons(playerid);
    SetPlayerHealth(playerid,100);
    SetPlayerArmour(playerid,0);
    format(string,sizeof(string),"{FFFFFF}[Berlin Tag & Nacht] %s hat sich als %s {FFFFFF}abgemeldet.<<",SpielerName(playerid),adminname);
    SendClientMessageToAll(GELB,string);
    DeletePVar(playerid,"AdminDuty");
    return 1;
    }
    else
    {
    SetPlayerColor(playerid,BLAU);
    SetPlayerHealth(playerid,100);
    SetPlayerArmour(playerid,100);
    format(string2,sizeof(string2),"{FFFFFF}[Berlin Tag & Nacht]%s hat sich als %s {FFFFFF}angemeldet.<<",SpielerName(playerid),adminname);
    SendClientMessageToAll(GELB,string2);
    SendClientMessage(playerid,0xB230FFFF,"Du bist nun ein Vorbild Benimm dich!");
    SetPVarInt(playerid,"AdminDuty",1);
    if(GetPVarInt(playerid,"Adminlevel")==1)
    {
    PSUPP[playerid] = Create3DTextLabel("*Probe Supporter im Dienst*",0x00FF82FF,30.0,40.0,50.0,40.0,0);
    Attach3DTextLabelToPlayer(UserAfk[playerid], playerid, 0.0, 0.0, 0.4);
    }
    if(GetPVarInt(playerid,"Adminlevel")==2)
    {
    SUPP[playerid] = Create3DTextLabel("*Supporter im Dienst*",0x00FF1EFF,30.0,40.0,50.0,40.0,0);
    Attach3DTextLabelToPlayer(UserAfk[playerid], playerid, 0.0, 0.0, 0.4);
    }
    if(GetPVarInt(playerid,"Adminlevel")==3)
    {
    MOD[playerid] = Create3DTextLabel("*Moderator im Dienst*",0x00FF1EFF,30.0,40.0,50.0,40.0,0);
    Attach3DTextLabelToPlayer(UserAfk[playerid], playerid, 0.0, 0.0, 0.4);
    }
    if(GetPVarInt(playerid,"Adminlevel")==4)
    {
    SMOD[playerid] = Create3DTextLabel("*Super Moderator im Dienst*",0x00D7FFFF,30.0,40.0,50.0,40.0,0);
    Attach3DTextLabelToPlayer(UserAfk[playerid], playerid, 0.0, 0.0, 0.4);
    }
    if(GetPVarInt(playerid,"Adminlevel")==5)
    {
    ADMIN[playerid] = Create3DTextLabel("*Administrator im Dienst*",0x1400FFFF,30.0,40.0,50.0,40.0,0);
    Attach3DTextLabelToPlayer(UserAfk[playerid], playerid, 0.0, 0.0, 0.4);
    }
    if(GetPVarInt(playerid,"Adminlevel")==6)
    {
    SMNGR[playerid] = Create3DTextLabel("*Server Manager im Dienst*",GELB,30.0,40.0,50.0,40.0,0);
    Attach3DTextLabelToPlayer(UserAfk[playerid], playerid, 0.0, 0.0, 0.4);
    }
    if(GetPVarInt(playerid,"Adminlevel")==7)
    {
    CLEIT[playerid] = Create3DTextLabel("*Communityleitung im Dienst*",0xFF6E00FF,30.0,40.0,50.0,40.0,0);
    Attach3DTextLabelToPlayer(UserAfk[playerid], playerid, 0.0, 0.0, 0.4);
    }
    if(GetPVarInt(playerid,"Adminlevel")==8)
    {
    SLEIT[playerid] = Create3DTextLabel("*Serverleitung im Dienst*",ROT,30.0,40.0,50.0,40.0,0);
    Attach3DTextLabelToPlayer(UserAfk[playerid], playerid, 0.0, 0.0, 0.4);
    }


    }
    return 1;
    }
    }

  • Wenn man keine Ahnung hat sollte man es lassen.

    Da hast du aber recht.


    Das Script liest noch weiter, und die Variable ist auf 1. Also wird auch 1 ausgeführt du .... mein Gott.


    Hast da ja eigentlich recht, aaaaber....Deswegen gibt es if und else if :rolleyes:
    Hier Lektüre zum Lesen dazu: Hier
    Bevor du irgendwo deinen Saft dazu gibst schadet es nicht zu lesen ;)


    Mfg

  • An else if is a check which occurs if the first if check fails to check something else:

    Yep.
    Auf deutsch so viel wie: "Ein "else if" checkt wenn ein "if" was vor dem "else if" falsch war."


    Wo steht da jetzt drin das else if NICHT ausgeführt wird wenn man dem Script mit "return 1;" sagt "Bitte weiter machen"?
    Baue es doch in dein Script ein &. teste es. Dann lernst du was draus &. ich hab meine ruhe :love:

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