Guten Tag,
Ich habe ein Fehler im Script.
Wenn ID 0 Admin ist, wird dieser nur angezeigt, und ID 1 nicht, obwohl dieser auch Admin ist.
ocmd:admins(playerid,params[]){
new str[500],arang[40];
for(new i=0;i<GetMaxPlayers();i++){
if(Spieler[i][SpielerAdmin] == 0){
ShowPlayerDialog(playerid,DIALOG_ADMINS,DIALOG_STYLE_MSGBOX,"{FACC2E}Novel Reallife:{FFFFFF} Aktive Admins","{FFFFFF}\tDerzeit sind keine Admins auf dem Server!","Schließen","");
return 1;
}
switch(Spieler[i][SpielerAdmin]){
case 2:arang="{A901DB}Supporter";
case 3:arang="{0101DF}Moderator";
case 4:arang="{04B404}Administrator";
case 5:arang="{088A08}HeadAdministrator";
case 6:arang="{08298A}Scripter";
case 7:arang="{FF0000}Projektleiter";
}
format(str,sizeof str,"%s{FFFFFF} - %s\n",arang,Name(i));
ShowPlayerDialog(playerid,DIALOG_ADMINS,DIALOG_STYLE_MSGBOX,"{FACC2E}Novel Reallife:{FFFFFF} Aktive Admins",str,"Schließen","");
return 1;
}
return 1;
}
Irgendwie ist da ein Fehler...
-
-
Du musst das "return 1;" in der for-Schleife löschen, da dadurch die Schleife abgebrochen wird.
-
Wenn ich das mache steht im Dialog:
Scripter -Kein Name vom Admin..
-
Wenn ich das mache steht im Dialog:
Scripter -Kein Name vom Admin..
Benötigst du nicht noch GetPlayerName irgendwo? Oder hast du das irgendwo schon eingebaut.
-
Das lasse ich alles unter OnPlayerConnect auslesen, daran liegt das nicht
-
Du musst folgendes in die Schleife packen:
1. Abfrage ob der Spieler i Admin ist. Wenn nicht, nutze continue;
2. wenn der Spieler Admin ist, speicherst du seinen Namen in einen string und fügst ihn mit strcat (oder strins) an einen großen, außerhalb der Schleife liegenden string.Erst wenn alle Spieler durchgegangen sind, gibst du den Dialog aus.
Am besten überprüfst du noch mit einer außerhalb der SChleife liegenden Boolean Variable,
ob überhaupt ein Admin gefunden wurde. Wenn nicht, kommt nach der schleife die entsprechende Meldung.Noch Fragen? Viel Glück
-
Du musst deine for-Schleife nochmal überarbeiten. So, wie sie jetzt ist, fragst du ab, ob der Spieler mit der ID 0 ein Admin ist, oder nicht. Wenn er es ist, wird der Dialog mit den aktiven Admins angezeigt, jedoch nur der Admin mit ID 0 eingetragen. Ist ID 0 kein Admin, so wird der Dialog angezeigt, dass keine Admins online sind. Alle anderen Spieler, welche nicht ID 0 sind, werden erst garnicht überprüft. Beide Dialoge dürfen demnach erst nach der for-Schleife angezeigt werden.
//Pille war schneller
-
Ich verstehe das nicht. Wie soll ich das denn außerhalb der Schleife packen. Könnt ihr vielleicht ein Beispiel machen?
-
ocmd:admins(playerid,params[])
{
//außerhalb der Schleife
for(new i=0;i<100;i++)
{
//innerhalb der Schleife
}
} -
ocmd:admins(playerid,params[])
{
for(new i=0;i<100;i++)
{
//string für den dialog
} // ShowPlayerDialog...
}Wie der nette Kollege schon angedeutet hat würde ich IN der schleife nur den String formatieren und
außerhalb den eigendlichen Dialog erstellen lasse.MfG
Mirco.
//Edit:
ocmd:admins(playerid,params[]){
new str[500],arang[40],cadmin;
for(new i=0;i<GetMaxPlayers();i++)
{
if(Spieler[i][SpielerAdmin]>=2){cadmin++;}
switch(Spieler[i][SpielerAdmin])
{
case 2:arang="{A901DB}Supporter";
case 3:arang="{0101DF}Moderator";
case 4:arang="{04B404}Administrator";
case 5:arang="{088A08}HeadAdministrator";
case 6:arang="{08298A}Scripter";
case 7:arang="{FF0000}Projektleiter";
}
format(str,sizeof str,"%s\n%s{FFFFFF} - %s",str,arang,Name(i));
}
if(cadmin>=1)
{
ShowPlayerDialog(playerid,DIALOG_ADMINS,DIALOG_STYLE_MSGBOX,"{FACC2E}Novel Reallife:{FFFFFF} Aktive Admins",str,"Schließen","");
}
else
{
ShowPlayerDialog(playerid,DIALOG_ADMINS,DIALOG_STYLE_MSGBOX,"{FACC2E}Novel Reallife:{FFFFFF} Aktive Admins","{FFFFFF}\tDerzeit sind keine Admins auf dem Server!","Schließen","");
}
return 1;
}PS: Versuchs mal so
-
Das wird so nicht funktionieren, da Du den String permanent überschreibst mit einem neuen Wert.
So wäre der richtige Weg:
ocmd:admins(playerid,params[]){
new string[500],str[100],arang[40],cadmin;
for(new i=0;i<GetMaxPlayers();i++)
{
if(Spieler[i][SpielerAdmin]>=2){cadmin++;}
switch(Spieler[i][SpielerAdmin])
{
case 2:arang="{A901DB}Supporter";
case 3:arang="{0101DF}Moderator";
case 4:arang="{04B404}Administrator";
case 5:arang="{088A08}HeadAdministrator";
case 6:arang="{08298A}Scripter";
case 7:arang="{FF0000}Projektleiter";
}
format(str,sizeof str,"%s\n%s{FFFFFF} - %s",str,arang,Name(i));
strcat(string, str);
}
if(cadmin>=1)
{
ShowPlayerDialog(playerid,DIALOG_ADMINS,DIALOG_STYLE_MSGBOX,"{FACC2E}Novel Reallife:{FFFFFF} Aktive Admins",string,"Schließen","");
}
else
{
ShowPlayerDialog(playerid,DIALOG_ADMINS,DIALOG_STYLE_MSGBOX,"{FACC2E}Novel Reallife:{FFFFFF} Aktive Admins","{FFFFFF}\tDerzeit sind keine Admins auf dem Server!","Schließen","");
}
return 1;
} -
Einige verstehen die Logik nicht
User der kein Admin ist wird mit im format angegeben
Und wozu strcat nutzen?
brauch man garnichtDas sollte so gehen
ocmd:admins(playerid,params[]){
new string[500],arang[40],bool:found=false;
for(new i=0;i<GetMaxPlayers();i++)
{
if((Spieler[i][SpielerAdmin]<2) || (!IsPlayerConnected(i)))continue;
switch(Spieler[i][SpielerAdmin])
{
case 2:arang="{A901DB}Supporter";
case 3:arang="{0101DF}Moderator";
case 4:arang="{04B404}Administrator";
case 5:arang="{088A08}HeadAdministrator";
case 6:arang="{08298A}Scripter";
case 7:arang="{FF0000}Projektleiter";
}
format(string,500,"%s%s{FFFFFF} - %s\n",string,arang,Name(i));
found = true;
}
if(!found)return ShowPlayerDialog(playerid,DIALOG_ADMINS,DIALOG_STYLE_MSGBOX,"{FACC2E}Novel Reallife:{FFFFFF} Aktive Admins","{FFFFFF}\tDerzeit sind keine Admins auf dem Server!","Schließen","");
return ShowPlayerDialog(playerid,DIALOG_ADMINS,DIALOG_STYLE_MSGBOX,"{FACC2E}Novel Reallife:{FFFFFF} Aktive Admins",string,"Schließen","");
} -
Und wozu strcat nutzen?
strcat hängt string1 an string2.Du machst das mit format - kann man auch machen,
strcat ist allerdings extra für solche Zwecke konzipiert
und bringt deswegen einen kleinen Leistungsschub bei solchen Aufgaben. -
strcat ist allerdings extra für solche Zwecke konzipiert
Das ist mir klar...und bringt deswegen einen kleinen Leistungsschub bei solchen Aufgaben.
strcat lohnt sich bei längeren strings die nicht in einer Zeile passen ohne das es Fehler ausgibt.
Dafür nutzt man es und strcat wird in dein Fall kein vorteil bringen da format eh alles macht
(Außerdem hast du da nen fail drin kannst ja mal testen dann sollteste ihn bemerken) -
Außerdem hast du da nen fail drin kannst ja mal testen dann sollteste ihn bemerken
Ich hab sowas in meinem Script auch mit strcat gearbeitet und es funktioniert problemlos..
Weiß nicht was du meinst, zumal ich ja nichtmal einen Code hier geschrieben habe -
Schau dir das mal an
format(str,sizeof str,"%s\n%s{FFFFFF} - %s",str,arang,Name(i));
strcat(string, str);
Das stammt aus dein CodeSo nun mal als Text darstellen was du machst
format = Beavis
strcat NULL, Beavis
ergibt Beavis als stringNun kommt mal ein Zweiter Wert hinzu und nu pass auf
format = Beavis(absatz)Beavis(absatz)Pille
strcat = Beavis,Beavis(absatz)Beavis(absatz)Pille
ergibt also als string Beavis(absatz)Beavis(absatz)Beavis(absatz)Pilleverstehst?
Du formatierst den alten string neu und setzt ihn mit in das strcat ein -
Das würde so auch keiner machen.
Ich setze schon vorraus, dass der Threadersteller ein bisschen mitdenken kann,
dass er das kann, sieht man ja an seinem Code im ersten Beitrag -
breadfish.de
Hat das Thema geschlossen.