Befehl Frage

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
  • Müsste so klappen:
    new bool:exists;for(new verwalter = 0; verwalter < 4; verwalter ++){if(SD[pID][pVerwalter][verwalter] == verwid) exists = true;}if(exists) return SendClientMessage(playerid, GRAU, "Der Spieler hat diesen Rang bereits.");

    Hier wurde es gemacht, das ne Meldung kommt wenn der Spieer den Rang schon hat. Ich möchte es noch so haben, dass ne eldung kommt wenn ihm der Rang weggenommen wurde und an ihn nochmal wegnimmt.


  • ocmd:makeverwalter(playerid, params[])
    {
    //if(SD[playerid][pEingeloggt] == 0)return SCM(playerid, GRAU, "Du bist nicht eingeloggt!");
    new pID, verwid, spalte, string[128];
    new bool:exists;
    if(verwid(spalte) == 0)) return SendClientMessage(playerid, GRAU, "Der Spieler hat den Rang nicht mehr.");
    if(!iPAA(playerid,5))
    {
    if(sscanf(params, "uii", pID, verwid, spalte))return makeverwalter;
    spalte--;
    //if(adminid < 2)return SCM(playerid, GRAU, "Du kannst nur ab Rang 2 vergeben.");
    if(IPN(pID))return 1;
    //if(IsPlayerNPC(pID))return 1;
    //if(!Eingeloggt[pID])return SCM(playerid, GRAU, "Dieser Spieler ist nicht eingeloggt!");
    //if(SD[pID][pIntro] < 1)return SCM(playerid, GRAU, "Der Spieler ist noch im Tutorial.");
    if(verwid == 0)
    {
    format(string,sizeof(string), GVRN(playerid,spalte));
    SD[pID][pVerwalter][spalte] = verwid;
    format(string, sizeof(string), "Du hast %s %s aus dem Teamposten %s entlassen", string,SD[pID][pName], string);
    SCM(playerid, BLAU, string);
    format(string,sizeof(string), GVRN(playerid,spalte));
    SD[pID][pVerwalter][spalte] = verwid;
    format(string, sizeof(string), "%s %s hat dir den Rang %s entzogenn!", string,SD[playerid][pName],GVRN(pID,spalte));
    SCM(pID, BLAU, string);
    format(string,sizeof(string), GVRN(playerid,spalte));
    SD[pID][pVerwalter][spalte] = verwid;
    format(string, sizeof(string), "AdmCMD: %s %s hat %s %s den Rang %s entzogen!", string,SD[playerid][pName],string, SD[pID][pName],GVRN(pID,spalte));
    SAM(BLAU, string);
    SD[pID][pVerwalter][spalte] = 0;
    SUS(pID);
    return 1;
    }
    //new bool:exists;
    for(new verwalter = 0; verwalter < 4; verwalter ++)
    {
    if(SD[pID][pVerwalter][verwalter] == verwid) exists = true;
    }
    if(exists) return SendClientMessage(playerid, GRAU, "Der Spieler hat diesen Rang bereits.");
    if(verwid < 1 || verwid > 7)return adminrangnichtexistent;
    format(string,sizeof(string), GVRN(pID,spalte));
    SD[pID][pVerwalter][spalte] = verwid;
    format(string, sizeof(string), "Du hast %s %s den Teamrang %s gegeben", string,SD[pID][pName], GVRN(pID,spalte));
    SCM(playerid, BLAU, string);
    format(string, sizeof(string), "%s %s hat dir den Teamrang %s gegeben",GVRN(playerid,spalte),SD[playerid][pName],GVRN(pID,spalte));
    SCM(pID, BLAU, string);
    format(string,sizeof(string), GVRN(pID,spalte));
    SD[pID][pVerwalter][spalte] = verwid;
    format(string, sizeof(string), "AdmCMD: %s %s hat %s %s zum %s ernannt.",string, SD[playerid][pName],string, SD[pID][pName], GVRN(pID,spalte));
    SAM(BLAU,string);
    SUS(pID);
    return 1;
    }
    else {SCM(playerid, GRAU, "Du hast nicht genügend Rechte für diesen Befehl.");}
    return 1;
    }


    Edit: Der Versuch wirft n Fehler

  • ocmd:makeverwalter(playerid,params[])
    {
    new pID, verwid, spalte, string[128],
    bool:exists;
    if(iPAA(playerid,5))return SendClientMessage(playerid,-1,"Spieler ist kein Admin!");
    if(!sscanf(params,"uii",pID, verwid, spalte))return makeverwalter;
    if(verwid < 1 || verwid > 7)return adminrangnichtexistent;
    if(spalte < 1 || spalte > 4)return SendClientMessage(playerid,-1,"Spalte existiert nicht!");
    if(SD[pID][pVerwalter][spalte] == 0)) return SendClientMessage(playerid, -1, "Der Spieler hat den Rang nicht mehr.");
    if(SD[pID][pVerwalter][spalte] == verwid)return SendClientMessag(playerid,-1, "Spieler hat den Rang bereits!"); //Ersetzt die Schleife
    if(SD[pID][pVerwalter][spalte] == 0)
    {
    format(string,sizeof(string), GVRN(playerid,spalte));
    SD[pID][pVerwalter][spalte] = verwid;
    format(string, sizeof(string), "Du hast %s %s aus dem Teamposten %s entlassen", string,SD[pID][pName], string);
    SCM(playerid, BLAU, string);
    format(string,sizeof(string), GVRN(playerid,spalte));
    SD[pID][pVerwalter][spalte] = verwid;
    format(string, sizeof(string), "%s %s hat dir den Rang %s entzogenn!", string,SD[playerid][pName],GVRN(pID,spalte));
    SCM(pID, BLAU, string);
    format(string,sizeof(string), GVRN(playerid,spalte));
    SD[pID][pVerwalter][spalte] = verwid;
    format(string, sizeof(string), "AdmCMD: %s %s hat %s %s den Rang %s entzogen!", string,SD[playerid][pName],string, SD[pID][pName],GVRN(pID,spalte));
    SAM(BLAU, string);
    SD[pID][pVerwalter][spalte] = 0;
    SUS(pID);
    return 1;
    }
    else
    {
    format(string,sizeof(string), GVRN(pID,spalte));
    SD[pID][pVerwalter][spalte] = verwid;
    format(string, sizeof(string), "Du hast %s %s den Teamrang %s gegeben", string,SD[pID][pName], GVRN(pID,spalte));
    SCM(playerid, BLAU, string);
    format(string, sizeof(string), "%s %s hat dir den Teamrang %s gegeben",GVRN(playerid,spalte),SD[playerid][pName],GVRN(pID,spalte));
    SCM(pID, BLAU, string);
    format(string,sizeof(string), GVRN(pID,spalte));
    SD[pID][pVerwalter][spalte] = verwid;
    format(string, sizeof(string), "AdmCMD: %s %s hat %s %s zum %s ernannt.",string, SD[playerid][pName],string, SD[pID][pName], GVRN(pID,spalte));
    SAM(BLAU,string);
    SUS(pID);
    }
    return 1;
    }


    Ich würde sagen so müsste es funktionieren.
    Ich finde du drückst dich teilweise sehr unverständlich aus.
    Dazu ist die Umsetzung so wie du es hast, bzw. machen möchtest ist halt irgendwo sehr umständlich

  • Wenn ich es so mache wie du meinst klappts net.


    Ich hab jetzt mal bei
    if(sscanf(params,"uii",pID, verwid, spalte))return makeverwalter;
    das ! entfernt, dann kommt der Sieler hat den Rag nicht mher wenn ich /makeverwalte Spieleri Rang Spalte eingeb.

  • ocmd:makeverwalter(playerid,params[])
    {
    new pID, verwid, spalte, string[128],
    bool:exists;
    if(iPAA(playerid,5))return SendClientMessage(playerid,-1,"Spieler ist kein Admin!");
    if(!sscanf(params,"uii",pID, verwid, spalte))return makeverwalter;
    if(verwid < 1 || verwid > 7)return adminrangnichtexistent;
    if(spalte < 1 || spalte > 4)return SendClientMessage(playerid,-1,"Spalte existiert nicht!");
    if(SD[pID][pVerwalter][spalte] == verwid)return SendClientMessag(playerid,-1, "Spieler hat den Rang bereits!"); //Ersetzt die Schleife
    if(SD[pID][pVerwalter][spalte] == 0)
    {
    format(string,sizeof(string), GVRN(playerid,spalte));
    SD[pID][pVerwalter][spalte] = verwid;
    format(string, sizeof(string), "Du hast %s %s aus dem Teamposten %s entlassen", string,SD[pID][pName], string);
    SCM(playerid, BLAU, string);
    format(string,sizeof(string), GVRN(playerid,spalte));
    SD[pID][pVerwalter][spalte] = verwid;
    format(string, sizeof(string), "%s %s hat dir den Rang %s entzogenn!", string,SD[playerid][pName],GVRN(pID,spalte));
    SCM(pID, BLAU, string);
    format(string,sizeof(string), GVRN(playerid,spalte));
    SD[pID][pVerwalter][spalte] = verwid;
    format(string, sizeof(string), "AdmCMD: %s %s hat %s %s den Rang %s entzogen!", string,SD[playerid][pName],string, SD[pID][pName],GVRN(pID,spalte));
    SAM(BLAU, string);
    SD[pID][pVerwalter][spalte] = 0;
    SUS(pID);
    return 1;
    }
    else
    {
    format(string,sizeof(string), GVRN(pID,spalte));
    SD[pID][pVerwalter][spalte] = verwid;
    format(string, sizeof(string), "Du hast %s %s den Teamrang %s gegeben", string,SD[pID][pName], GVRN(pID,spalte));
    SCM(playerid, BLAU, string);
    format(string, sizeof(string), "%s %s hat dir den Teamrang %s gegeben",GVRN(playerid,spalte),SD[playerid][pName],GVRN(pID,spalte));
    SCM(pID, BLAU, string);
    format(string,sizeof(string), GVRN(pID,spalte));
    SD[pID][pVerwalter][spalte] = verwid;
    format(string, sizeof(string), "AdmCMD: %s %s hat %s %s zum %s ernannt.",string, SD[playerid][pName],string, SD[pID][pName], GVRN(pID,spalte));
    SAM(BLAU,string);
    SUS(pID);
    }
    return 1;
    }


    Lösch die Zeile einfach.
    Es müsste eigentlich jeder Fall abgedeckt sein

  • Nein, so wie ich es dir ein Beitrag höher geschickt habe


    @Kaliber:
    @Jeffry:
    Wäre es so nicht schlauer?

  • Das funktioniert eben nicht.

    Wieso funktioniert es so nicht?


    Warum sollte ich die Zeile Löschen wenn ich es aber so haben möchte?

    Weil das so nichts bringt.
    Wenn du einen Spieler hast der Verwalter Rang 0 hat,
    du diesen Spieler ernennen möchtest kommt immer die Nachricht, das er den Rang bereits hat.
    Das liegt daran das er tendenziell immer Rang 0 hat.


    Zumal mir der Sinn dafür fehlt

  • Es funktioniert nicht weil dann da kommt /makeverwalter SpielerID TeamRang Spalte.


    Wie gesagt, ich möchte wenn der Spieler den Verwalterrang 0 hat, dassdie Nachicht kommt das man ihn nicht nochmal entlassen kann wenn er schon entlassen ist. Heißt, wenn zb. in Spalte 1 der User entlassen wurde, kannste ihn net nochmal entlassen aus der Spalte.


    Edit: Das Proble hat sich gelöst.


    Jetzt möchte ich aber einen Befehl mahcen /verwalter der folgendermaßen aufgebaut ist


    Tamverwalter
    Eventmanager
    etc


    Wen man auf den Namen klickt sollen die Spieler aufgelistet werden mti dem ang


    Nur werden mi die Spieler nicht angezeigt in der Liste.



    Der Befehl

    ocmd:verwalter(playerid,params[])
    {
    return ShowPlayerDialog(playerid,DIALOG_Verwalter,DIALOG_STYLE_LIST,""#HTML_ROT""#SERVERNAME" "#HTML_WEISS"| Verwalter",""#HTML_WEISS"1\n2\n3\n4\n5\n6\n7\n8\n9","Ok","Abbrechen");
    }


    Der Dialog

    switch(listitem)
    {
    case 0://Allgemeine - Hilfe
    {
    mysql_tquery(handle,"SELECT Name FROM `accounts` WHERE Verwalter1 = 1 OR Verwalter2 = 1 OR Verwalter3 = 1 OR Verwalter4 = 1", "VerwalterList", "d", playerid);
    }


    Die VerwalterList

    public VerwalterList(playerid)
    {
    new rows;
    cache_get_row_count(rows);
    if(rows == 0) return SendClientMessage(playerid,ROT,"Fehler: Aktuell gibt es keine Verwalter!");
    const MAX_ADMINS = 15;
    new table[MAX_ADMINS][2], admins[MAX_ADMINS][MAX_PLAYER_NAME];
    for(new i; i<rows; i++)
    {
    cache_get_value_name(i, "Name", admins[i]);
    table[i][1] = i;
    }
    SortDeepArray(table, 0);
    new string[(MAX_PLAYER_NAME+25)*MAX_ADMINS] = "Name\tOnlinestatus";
    for(new i=MAX_ADMINS-1,idx,r,status[32]; i!=-1; i--)
    {
    r = table[i][0], idx = table[i][1];
    if(r == 0) continue;
    GetPlayerStatus(admins[idx], status);
    format(string,sizeof(string),"%s\n%s\t%s",string,admins[idx],status);
    }
    ShowPlayerDialog(playerid, 8, DIALOG_STYLE_TABLIST_HEADERS, ""#HTML_ROT""#SERVERNAME""#HTML_WEISS" - Verwalter",string,"Abbrechen","");
    return 1;
    }


    Die Spielernamen sollten nach dem Alphabet geordnet sein in der Liste


    Was genau mach ich falsch, dass die Namen nicht angezeigt werden?

  • Okay.


    Aber warum wird mir in der Liste nix angezeigt?


    Edit: Was ich vergas zu erwähnen, die Namen sollen aus allen 4 Verwalterspalten ausgelesen werden.


    Edit: Problem erstmal gelöst.


    Edit: nächster Fehler:


    Immer wenn ich bei menem Dialog auf Abbrechen geh, kommt "Aktuell ist kein Teamverwalter vorhanden."



    public VerwalterList(playerid, verwalterid)
    {
    new rows;
    cache_get_row_count(rows);
    new dialogcaption[128],verwaltername[32];
    switch(verwalterid)
    {
    case 1: verwaltername = "Helferverwalter";
    case 2: verwaltername = "Firmenverwalter";
    case 3: verwaltername = "Bizverwalter";
    case 4: verwaltername = "Fraktionsverwalter";
    case 5: verwaltername = "Parteiverwalter";
    case 6: verwaltername = "Hausverwalter";
    case 7: verwaltername = "Charakterbeauftragten";
    case 8: verwaltername = "Eventmanager";
    case 9: verwaltername = "Teamverwalter";
    default: verwaltername = "";
    }
    printf("ID: %d Name: %s", verwalterid, verwaltername);
    if(rows == 0)
    {
    new string[64];
    format(string, sizeof(string),"Fehler: Aktuell gibt es keine %s!", verwaltername);
    return SendClientMessage(playerid, ROT, string);
    }
    const MAX_ADMINS = 15;
    new string[(MAX_PLAYER_NAME+25)*MAX_ADMINS] = "Name\tOnlinestatus\n";
    for(new i, admin[24], status[32]; i<rows; i++)
    {
    cache_get_value_name(i, "Name", admin);
    GetPlayerStatus(admin, status);
    format(string,sizeof(string),"%s\n%s\t%s",string,admin,status);
    }
    format(dialogcaption, sizeof(dialogcaption), ""#HTML_ROT""#SERVERNAME""#HTML_WEISS" - %s", verwaltername);
    ShowPlayerDialog(playerid, 13, DIALOG_STYLE_TABLIST_HEADERS, dialogcaption ,string ,"Abbrechen", "");
    return 1;
    }


    Mein OnDialogResponse
    https://pastebin.com/j7HEqbcu


    Wo liegt hier der Fehler?

  • Du hast unter dem if (dialogid == 13) die Klammern vergessen.
    Du musst alles darunter einklammern. Also so: