ID 0 Fehler..

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
  • 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...

  • Wenn ich das mache steht im Dialog:
    Scripter -


    Kein Name vom Admin..

  • Das lasse ich alles unter OnPlayerConnect auslesen, daran liegt das nicht :D

  • 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[])
    {
    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 :thumbup:

    2 Mal editiert, zuletzt von SoR'Mirco ()

  • 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 garnicht


    Das 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","");
    }

    All in all it's just another brick in the wall

  • 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)

    All in all it's just another brick in the wall

  • 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 Code


    So nun mal als Text darstellen was du machst


    format = Beavis
    strcat NULL, Beavis
    ergibt Beavis als string


    Nun 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)Pille


    verstehst?
    Du formatierst den alten string neu und setzt ihn mit in das strcat ein

    All in all it's just another brick in the wall