[SAMMELTHREAD] Kleine Scripting Fragen

Dein Problem konnte durch einen User gelöst werden? Bedank dich bei ihm indem du seinen Beitrag als Hilfreich markierst sowie einen Daumen oben dalässt
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
  • Hallöle,
    ich möchte gerne, dass meine Befehle nicht nur andere Spieler per ID, sondern auch mit Ihren Namen ansprechen kann.
    Mein versuch war bisher gescheitert und sah bisher so aus.


    Code
    ocmd:makeadmin(playerid, params[]){
        new text[128], pID;
        if(pData[playerid][pAdminLevel] < 4) return SendClientMessage(playerid, COLOR_RED, "Du darfst diesen Befehl nicht nutzen!");
        if(sscanf(params, "d", pID) || sscanf(params, "s", pData[pID][pName])) return SendClientMessage(playerid, COLOR_GREY, "Nutze: /setadmin [SpielerID/Name]");
        SendClientMessage(playerid, COLOR_GREY, "Du wurdest zu Adminlevel 4.");
        return 1;
    }


    Jedoch war es leider falsch, nun würde ich gerne einen Hint/Hinweis bekommen,
    ich lerne lieber durch ausprobrieren, aber ich verzweifle gerade und eine kleine Hilfe wäre super ^^.


    lg

  • Haha, und wieder ein Problem, gut ich bin alleine mit meinem Script, daher ist diese function zu testen schwierig, aber das Grundprinzip funktioniert.
    Jedoch sehe ich meinen eigenen Logikfehler und wo ich ansetzen muss, doch fehlt mir der Ansatz und ich bin blöd beim Googeln oder Googel mag mich nicht
    mit richtigen Ergebnissen segnen :P


    Code
    ocmd:showplayers(playerid, params){
        new text[256], pID;
        for(new i = 0; i < MAX_PLAYERS; i++){
             if(!IsPlayerConnected(playerid)) return 1;
    	 format(text,sizeof(text), "\nID: %i, Name: %s, Geld: %i", pID, pData[pID][pName], pData[pID][pMoney]);
        }
        ShowPlayerDialog(playerid, DIALOG_SHOWPLAYERS, DIALOG_STYLE_MSGBOX, "ALLE ONLINE SPIELER", text, "Schliessen", "");
        return 1;
    }

    Mein Fehler liegt glaube ich bei dem Inhalt der for-Schleife und IsPlayerConnected.
    Ein paar richtige Tipps/Hinweise wären gut ^^.


    lg

  • Beitrag von German_ScripterHD ()

    Dieser Beitrag wurde vom Autor gelöscht ().
  • Mit dem return 1; in der Schleife brichtst du denn ganzen Command ab.
    Mach das zu einem continue;
    continue; heisst einfach er soll mit dem nächsten in der Schleife weitermachen.


    //Edit
    ausserdem wird dir so nur der letze Online Spieler angezeigt da du den string immer wieder überschreibst.

    seekrass approved
    4x vom Discord geflogen


    shoxinat0r 4
    dennismitzwein 2
    Trooper[Y] 2
    maddin 1
    Unbekannter Discord Kick 2
  • Dein Fehler, ist folgender:
    Du benutzt return 1 in der for Schleife bei if(!IsPlayerConnected)return 1; dies hat zur Folge, das deine Schleife beendet wird.


    ändere:

    C
    for(new i = 0; i < MAX_PLAYERS; i++){
         if(!IsPlayerConnected(playerid)) return 1;
         format(text,sizeof(text), "\nID: %i, Name: %s, Geld: %i", pID, pData[pID][pName], pData[pID][pMoney]);
    }


    zu:


    C
    for(new i = 0; i < MAX_PLAYERS; i++){
        if(IsPlayerConnected(playerid)){
             format(text,sizeof(text), "\nID: %i, Name: %s, Geld: %i", pID, pData[pID][pName], pData[pID][pMoney]);
        }
    }


    Mit freundlichen Grüßen
    German_ScripterHD

  • Ist auch nicht ganz richtig, du musst natürlich i nehmen und nicht playerid oder pID

    Code
    for(new i = 0; i < MAX_PLAYERS; i++){
        if(IsPlayerConnected(i)){
             format(text,sizeof(text), "\nID: %i, Name: %s, Geld: %i", i, pData[i][pName], pData[i][pMoney]);
        }
    }

    Wäre folgendes denn auch richtig?

    Code
    for(new i = 0; i < MAX_PLAYERS; i++){
        if(!IsPlayerConnected(playerid)) continue; //Die Variante sollte ja eig auch durchgehen
        format(text,sizeof(text), "\nID: %i, Name: %s, Geld: %i", pID, pData[pID][pName], pData[pID][pMoney]);
    }

    Aber vom Prinzip habe ich alles richtig gemacht oder?


    lg

  • Wäre folgendes denn auch richtig?

    Code
    for(new i = 0; i < MAX_PLAYERS; i++){
        if(!IsPlayerConnected(playerid)) continue; //Die Variante sollte ja eig auch durchgehen
        format(text,sizeof(text), "\nID: %i, Name: %s, Geld: %i", pID, pData[pID][pName], pData[pID][pMoney]);
    }

    Aber vom Prinzip habe ich alles richtig gemacht oder?


    lg

    Wie gesagt überschreibst du immer den vorherigen string. Somit wird dir nur der letze Spieler im Dialog angezeigt.
    Du musst es wie folgt machen:


    Code
    ocmd:showplayers(playerid, params){
        new text[2048], pID; //String grösse eventuell noch anpassen
        for(new i = 0; i < MAX_PLAYERS; i++){
             if(!IsPlayerConnected(playerid)) continue;
    		format(text,sizeof(text), "%s\nID: %i, Name: %s, Geld: %i", text, pID, pData[pID][pName], pData[pID][pMoney]);
        }
        ShowPlayerDialog(playerid, DIALOG_SHOWPLAYERS, DIALOG_STYLE_MSGBOX, "ALLE ONLINE SPIELER", text, "Schliessen", "");
        return 1;
    }

    seekrass approved
    4x vom Discord geflogen


    shoxinat0r 4
    dennismitzwein 2
    Trooper[Y] 2
    maddin 1
    Unbekannter Discord Kick 2
  • ich habe eine kurze Frage bezüglich eines Pawncompiler Fehlers'.


    Folgenden Errorhinweis erhalte ich:
    error 052: multi-dimensional arrays must be fully initialized.


    Code
    new Strassen_Muell_Info[MAX_STRASSEN_MULL][Strassen_Muell] =
    {
    	/*
    	Hier habe ich all meine Müllkoordinaten eingefügt
    	hier nochmal die letzte Zeile:
    	*/
    	{1681.2594, -2255.9763, -3.6071, 0.00, 0.00, 0.00},
    	{1682.0052, -2322.0591, -3.5742, 0.00, 0.00, 0.00}
    };


    Was meint er denn mit Multi-Dimensional?

  • ich habe eine kurze Frage bezüglich eines Pawncompiler Fehlers'.


    Folgenden Errorhinweis erhalte ich:
    error 052: multi-dimensional arrays must be fully initialized.


    Code
    new Strassen_Muell_Info[MAX_STRASSEN_MULL][Strassen_Muell] =
    {
    	/*
    	Hier habe ich all meine Müllkoordinaten eingefügt
    	hier nochmal die letzte Zeile:
    	*/
    	{1681.2594, -2255.9763, -3.6071, 0.00, 0.00, 0.00},
    	{1682.0052, -2322.0591, -3.5742, 0.00, 0.00, 0.00}
    };

    Was meint er denn mit Multi-Dimensional?

    Ist die Anzahl der Einträge von zu erstellenden Mülltonnen die selbe wie die von MAX_STRASSEN_MULL?
    Falls ja: Wie ist Strassen_Muell aufgebaut? Hast du vielleicht in dem Enum mehr als 6 Felder?
    Falls nicht: Versuch mal spaßeshalbar MAX_STRASSEN_MULL auf 2 zu setzen und dann die von dir genannten Werte zu nutzen.
    Was erhälst du nun?

  • Ist die Anzahl der Einträge von zu erstellenden Mülltonnen die selbe wie die von MAX_STRASSEN_MULL?Falls ja: Wie ist Strassen_Muell aufgebaut? Hast du vielleicht in dem Enum mehr als 6 Felder?
    Falls nicht: Versuch mal spaßeshalbar MAX_STRASSEN_MULL auf 2 zu setzen und dann die von dir genannten Werte zu nutzen.
    Was erhälst du nun?


    Ja habe im Enum mehr als 6 Felder bis jetzt wusste ich nicht das es daran liegen könnte...


    Enum:


    Ich nutze hier ja lediglich nur die Float's.
    Versuche aber mal das alles auf 2 zu setzen...

  • Dann musst du deine Definierung deiner Mülltonnen ebenso gestalten.
    Sprich von nur Koordinaten erweitern um die 3 weiteren Felder.
    Es gibt andere Möglichkeiten, um die 6 Felder beizubehalten, aber ergibt wenig sinn, dies auch wirklich zu tun. :)

  • Dann musst du deine Definierung deiner Mülltonnen ebenso gestalten.
    Sprich von nur Koordinaten erweitern um die 3 weiteren Felder.
    Es gibt andere Möglichkeiten, um die 6 Felder beizubehalten, aber ergibt wenig sinn, dies auch wirklich zu tun. :)

    habe das jetzt seperat gemacht. Ein enum nur für die Koordinaten und der andere den rest.
    Allerdings bekomme ich erneut die selbe Errormeldung.


    Code
    new Strassen_Muell_Info[MAX_STRASSEN_MULL][Strassen_Muell] =
    {
    	/*
    	Hier habe ich all meine Müllkoordinaten eingefügt
    	hier nochmal die letzte Zeile:
    	*/
    	{1681.2594, -2255.9763, -3.6071, 0.00, 0.00, 0.00},
    	{1682.0052, -2322.0591, -3.5742, 0.00, 0.00, 0.00}
    };


    die Zeile }; zeigt er mir den Fehler an aber warum genau da? Ich meine da wird das ganze doch beendet oder nicht?



    //Edit:
    Danke @German_ScripterHD und @Knolle.
    Der Fehler lag darin was German_ScripterHD geschrieben hat mit den MAX_STRASSEN_MULL.