Befehl Frage
- Allrounder18
- Geschlossen
- Erledigt
-
-
was meinst du?
-
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.
-
du hast doch die Vorlage
Versuch es doch mal eigenständig anzupassen und wenn es nicht klappt suchen wir gemeinsam den Fehler -
Ich hab mit der Vorlage schon einiges versucht, jedoch klappts nicht.
-
dann schick uns doch deinen Versuch und schildere uns was nicht klappt
-
if(verwid(spalte) == 0)) return SendClientMessage(playerid, GRAU, "Der Spieler hat den Rang nicht mehr.");
So habe ich es versucht. Ich möchte dass diese Meldung kommt, wenn in den Feldern der Rang 0 steht.
-
Hättest du den ganzen Befehl einmal für uns?
-
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 -
Die sscanf Zeile löschen? Das bringt nix.
Edit: Fail, falsche Zeile gelöscht. Warum sollte ch die Zeile Löschen wenn ich es aber so haben möchte?
-
Nein, so wie ich es dir ein Beitrag höher geschickt habe
@Kaliber:
@Jeffry:
Wäre es so nicht schlauer?
#define MAX_Verwalter 8
#define Verwalter_Name_0 "Kein Verwalter"
#define Verwalter_Name_1 "Leaderverwalter"
#define Verwalter_Name_2 "Bizverwalter"
#define Verwalter_Name_3 "Hausverwalter"
#define Verwalter_Name_4 "Leaderverwalter & Bizverwalter"
#define Verwalter_Name_5 "Leaderverwalter & Hausverwalter"
#define Verwalter_Name_6 "Bizverwalter & Hausverwalter"
#define Verwalter_Name_7 "Verwalter"enum Verwalter_Info
{
VerwalterRang
}
new VerwalterInfo[MAX_PLAYERS][Verwalter_Info];ocmd:makeverwalter(playerid,params[])
{
new pID, verwalterID, string[128];
if(VerwalterInfo[playerid][VerwalterRang] == 0)return SendClientMessage(playerid,-1,"Du hast nicht die Berechtigung den befehl auszuführen.");
if(VerwalterInfo[playerid][VerwalterRang] != MAX_Verwalter) SendClientMessage(playerid,-1,"Du hast nicht die Berechtigung den Befehl auszuführen");
if(sscanf(params,"ui"),pID,verwalterID)
{
for(new i=0;i<MAX_Verwalter;i++)
{
SendClientMessage(playerid,-1,"Benutze: /Makeverwalter [Spielername/SpielerID] [Verwalterrang]");
format(string,sizeof(string),"%i: %s",i,VerwalterName(i));
SendClientMessage(playerid,-1,string);
}
return 1;
}
if(!IsPlayerConnected(pID))return SendClientMessage(playerid,-1,"Spieler ist nicht eingelogt!");
if(verwalterID > MAX_Verwalter)
{
for(new i=0;i<MAX_Verwalter;i++)
{
SendClientMessage(playerid,-1, "Benutze: /Makeverwalter [Spielername/SpielerID] [Verwalterrang]");
format(string,sizeof(string),"%i: %s",i,VerwalterName(i));
SendClientMessage(playerid,-1, string);
}
return 1;
}
if(VerwalterInfo[pID][VerwalterRang] == verwalterID)return SendClientMessage(playerid,-1,"Spieler hat bereits den Rang!");
if(VerwalterInfo[pID][VerwalterRang] < verwalterID)
{
format(string,sizeof(string),"%s %s (ID: %d) hat dich zum %s befördert.",
VerwalterName(VerwalterInfo[playerid][VerwalterRang]), SpielerName(playerid), playerid, VerwalterName(verwalterID));
SendClientMessage(pID,-1, string);
format(string,sizeof(string),"Du hast %s (ID: %d) zum %s befördert.",
SpielerName(pID), pID, VerwalterName(verwalterID));
SendClientMessage(playerid,-1, string);
VerwalterInfo[pID][VerwalterRang] = verwalterID;
}
else if(VerwalterInfo[pID][VerwalterRang] > verwalterID)
{
format(string,sizeof(string),"%s %s (ID: %d) hat dich zum %s degradiert.",
VerwalterName(VerwalterInfo[playerid][VerwalterRang]), SpielerName(playerid), playerid, VerwalterName(verwalterID));
SendClientMessage(pID,-1, string);
format(string,sizeof(string),"Du hast %s (ID: %d) zum %s degradiert.",
SpielerName(pID), pID, VerwalterName(verwalterID));
SendClientMessage(playerid,-1, string);
VerwalterInfo[pID][VerwalterRang] = verwalterID;
}
return 1;
}stock VerwalterName(ID)
{
new name[64];
switch(ID)
{
case 0: name = Verwalter_Name_0;
case 1: name = Verwalter_Name_1;
case 2: name = Verwalter_Name_2;
case 3: name = Verwalter_Name_3;
case 4: name = Verwalter_Name_4;
case 5: name = Verwalter_Name_5;
case 6: name = Verwalter_Name_6;
case 7: name = Verwalter_Name_7;
}
return name;
}ocmd:sethaus(playerid,params[])
{
if(!IsPlayerVerwalter(playerid,5))return SendClientMessage(playerid,-1, "Du hast nicht den nötigen Verwalterrang um den Befehl zu nutzen!");
return 1;
}stock IsPlayerVerwalter(playerid,rang)
{
if(VerwalterInfo[playerid][VerwalterRang] >= rang)return 1;
return 0;
} -
Das funktioniert eben nicht.
-
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
etcWen 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?
-
Pack in die SQL-Abfrage einfach order by Name rein, dann musst du's nicht mehr selbst sortieren.
-
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/j7HEqbcuWo liegt hier der Fehler?
-
Du hast unter dem if (dialogid == 13) die Klammern vergessen.
Du musst alles darunter einklammern. Also so:Code
Alles anzeigenif (dialogid == 13) { if(response == 0)return 1; switch(listitem) { case 0://Allgemeine - Hilfe { mysql_tquery(handle,"SELECT Name FROM `accounts` WHERE Verwalter1 = 9 OR Verwalter2 = 9 OR Verwalter3 = 9 OR Verwalter4 = 9","VerwalterList", "dd", playerid, 9); } case 1: { mysql_tquery(handle,"SELECT Name FROM `accounts` WHERE Verwalter1 = 8 OR Verwalter2 = 8 OR Verwalter3 = 8 OR Verwalter4 = 8","VerwalterList", "dd", playerid, 8); } case 2://Allgemeine - Hilfe { mysql_tquery(handle,"SELECT Name FROM `accounts` WHERE Verwalter1 = 7 OR Verwalter2 = 7 OR Verwalter3 = 7 OR Verwalter4 = 7","VerwalterList", "dd", playerid, 7); } case 3://Allgemeine - Hilfe { mysql_tquery(handle,"SELECT Name FROM `accounts` WHERE Verwalter1 = 6 OR Verwalter2 = 6 OR Verwalter3 = 6 OR Verwalter4 = 6","VerwalterList", "dd", playerid, 6); } case 4://Allgemeine - Hilfe { mysql_tquery(handle,"SELECT Name FROM `accounts` WHERE Verwalter1 = 5 OR Verwalter2 = 5 OR Verwalter3 = 5 OR Verwalter4 = 5","VerwalterList", "dd", playerid, 5); } case 5://Allgemeine - Hilfe { mysql_tquery(handle,"SELECT Name FROM `accounts` WHERE Verwalter1 = 4 OR Verwalter2 = 4 OR Verwalter3 = 4 OR Verwalter4 = 4","VerwalterList", "dd", playerid, 4); } case 6://Allgemeine - Hilfe { mysql_tquery(handle,"SELECT Name FROM `accounts` WHERE Verwalter1 = 3 OR Verwalter2 = 3 OR Verwalter3 = 3 OR Verwalter4 = 3","VerwalterList", "dd", playerid, 3); } case 7://Allgemeine - Hilfe { mysql_tquery(handle,"SELECT Name FROM `accounts` WHERE Verwalter1 = 2 OR Verwalter2 = 2 OR Verwalter3 = 2 OR Verwalter4 = 2","VerwalterList", "dd", playerid, 2); } case 8://Allgemeine - Hilfe { mysql_tquery(handle,"SELECT Name FROM `accounts` WHERE Verwalter1 = 1 OR Verwalter2 = 1 OR Verwalter3 = 1 OR Verwalter4 = 1","VerwalterList", "dd", playerid, 1); } } }