[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
  • Hier mal der ganze Befehl


  • Für was wird das genutzt?Du setzt die Variable direkt auf 1 und fragst gleichzeitig ab ob running !=1 && ....
    Also running nicht auf 1 setzen und/oder running !=1 &&  aus der Abfrage entfernen.

    Moin


    Das nutze ich dafuer dass der Befehl nicht nochmal ausgefuehrt wird waehrend der am laufen ist.
    Das wird dann nachher wieder auf 0 gesetzt im Timer


    Jeffrey: Gibts noch ne andere Moeglichkeit 0 zu returnen oder nen Fehler auszugeben, und dabei nicht die Schleife abzubrechen?



    Vielen Dank schonmal mit dem else, damit hats geklappt

  • Absolut Klasse! Das geht!
    Habe nun ein kleines Gedankenproblem womit ich mich befasse.


    Ich will mit meinem Befehl ueberpruefen bei welcher der Koordinaten aus dem Array der Spieler sich befindet, aus dem Array hier


    C
    new Float:beds[][3] = {
    	{268.1000100,1881.5000000,-31.4000000},//Grey
    	{417.6000100,2536.2000000,8.9000000},//Blue
    	{-955.2665,1867.7350,5.6661},//Red
    	{-391.0000000,2227.0000000,41.4000000}//Unspecified
    };


    Ich weiss jetzt nicht wie ich feststellen kann ueber meinen Befehl ob der Spieler bei Grey ist, oder bei Blue etc. da faellt mir aktuell einfach nix zu ein :/
    Habe eventuell gedacht irgendwas richtung if(beds[i] == beds[1] ) oder sowas zu machen, aber ich denke da gibt es eventuell effizientere Loesungsansaetze


    Leider weiss ich nicht wie man Zeilen aus Arrays vergleichen kann

    • Offizieller Beitrag

    Du kannst den Index übergeben und Abfragen. Bspw:
    printf("Distance to closest bed: %f, Index: %d", dist, i);
    Wenn der Index, also die Variable i gleich 0 ist, dann ist er bei Grey, 1 wäre dann Blue etc.
    Achte aber darauf, dass du die Reihenfolge des Arrays nicht willkürlich änderst.

  • Absolut klasse das hat so geklappt.
    Habe nun ein Problem mit einem Befehl.


    Wenn ich hier statt /soundvalid ID einfach nur /soundv eingebe erhalte ich schon die ClientMessage, obwohl /soundv ja nicht /soundvalid ist
    Wo liegt das Problem?


    Einmal editiert, zuletzt von Sub Royal ()

  • if(strcmp(cmd, "/soundvalid", true))

    Es muss: if(!strcmp(cmd,"/soundvalid",true)) heißen :)


    Und wieso nutzt du goto und do-while?


    Bitte goto nie verwenden...das ist ein sehr schlechter programmierstil...


    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • Beitrag von NikBazinga! ()

    Dieser Beitrag wurde vom Autor gelöscht ().
  • @Kaliber :D Da habe ich aber ein dickes Problem wo ich bisher keinen anderen Weg als goto wusste


    Habe in meinem OnPlayerMenuSwitch oder aehnlich Teil ueber 20 solcher Menus, teils auch mit 20 cases.
    Bei jedem der Menu will ich jedoch ueberpruefen ob der Spieler genug Geld hat um sich die Waffen zu kaufen, und wenn nicht nen Fehler ausgeben.
    Das ist super umstaendlich hunderte male if-else zu machen, und ich habe daher keinen ressourcensparenderen Weg gefunden als jedes mal goto zur Fehlerausgabe zu machen anstatt jedes mal die gleiche Nachricht da zu verpacken.


    Hat jemand eventuell ne Idee wie ich das ganze geschickter gestalten kann anstatt imer if-else zu nutzen bei jedem case, und das mit der Fehlerausgabe besser machen kann wenn der Spieler nicht genug Geld hat?

  • Mach doch sowas:


    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • ggf. so?
    else if(Current==pistols)
    {
    ShowMenuForPlayer(pistols,playerid);
    switch(row)
    {
    case 0:
    {
    if(GetPlayerMoney(playerid) < 1500)return SendClientMessage(playerid, -1, NO_MONEY_MSG);
    GivePlayerWeapon(playerid,22,50);
    . }
    . case 1:
    {
    if(GetPlayerMoney(playerid) < 2500)return SendClientMessage(playerid, -1, NO_MONEY_MSG);
    GivePlayerWeapon(playerid,23,50);
    }
    default:
    {
    print("Fail");
    }
    }
    }

  • Vielen Dank fuer eure Vorschlaege!
    Ich werde das mal durchschauen, habe aber aktuell folgendes probiert



    Eine Funktion erstellt


    Welche die gewuenschten Sachen wie ueberpruefung des Geldes, und Fehlermessage direkt verbindet
    Ich werde mal schauen ob das funktioniert

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen