[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
  • C
    if(ai == 18)
    
    
        if(ai == 19)
    
    
        if(ai == 17)
    
    
        if(ai == 27)

    Wir mache ich aus diesen If Abfragen eine, irgendwie mache ich das mit den | falsch.

    wm2c6p1.png
    Ich weiß, dass ich weiß, dass ich nichts weiß.

  • Also ist es doch so richtig, hat nicht funktioniert, weil ich falsche ids eingetragen habe ^^


    Tag mismatch Zeile 5.
    Warum geht das so nicht?


    C
    new HealthTextLabel[10];
    Code
    for(new i;i<sizeof HealthLabels;i++ )
    	{
    		new string[250];
    		format(string,sizeof(string),"health: %d",Health1);
    		HealthTextLabel[i] = CreateDynamic3DTextLabel(string, YELLOW,HealthLabels[i][0],HealthLabels[i][1],HealthLabels[i][2]+2, 15.0);
    	}

    wm2c6p1.png
    Ich weiß, dass ich weiß, dass ich nichts weiß.

  • Habe folgendes Problem:


    Folgendes fuehrt irgendwie immer zum crash des compilers, wenn ich einem new Float: einen Wert von GetDistance zuweisen will.


    Code
    forward Float:GetDistance( Float:x1, Float:y1, Float:z1, Float:x2, Float:y2, Float:z2 );
    
    
    
    
    stock Float:GetDistance(Float:x1, Float:y1, Float:z1, Float:x2, Float:y2, Float:z2)
    {
        return VectorSize(x1-x2, y1-y2, z1-z2);
    }
    new Float:r=GetDistance(playerPos[0][0],playerPos[0][1],playerPos[0][2],circleCenter[0][0],circleCenter[0][1],circleCenter[0][2]);
  • Du musst kein Float vor dem Stock und Forward angeben.

    Code
    forward GetDistance( Float:x1, Float:y1, Float:z1, Float:x2, Float:y2, Float:z2 );
    stock GetDistance(Float:x1, Float:y1, Float:z1, Float:x2, Float:y2, Float:z2)
    {
        return VectorSize(x1-x2, y1-y2, z1-z2);
    }
    new Float:r=GetDistance(playerPos[0][0],playerPos[0][1],playerPos[0][2],circleCenter[0][0],circleCenter[0][1],circleCenter[0][2]);

    //e: Generell brauchst du für einen Stock auch kein Forward, lediglich muss ein Public mit Forward genutzt werden.

  • //e: Generell brauchst du für einen Stock auch kein Forward, lediglich muss ein Public mit Forward genutzt werden.

    Nein, das stimmt so beides nicht.


    1. Tags wie (Float:) müssen für Funktionen angegeben werden, ansonsten weiß der Compiler ja nicht, dass es sich um einen Tag handelt.


    2. Wenn man die Funktion von der Code Logik her verwendet, bevor sie definiert wurde, muss man sie forwarden, damit der Compiler weiß, um welchen Tag es sich handelt. (Nur nötig bei TAG Funktionen)


    Keine Ahnung wieso da der Compiler bei dir crasht, aber nutz es doch lieber als Makro:


    #define GetDistance(%0,%1,%2,%3,%4,%5) VectorSize((%0)-(%3),(%1)-(%4),(%2)-(%5))

    ast2ufdyxkb1.png


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

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Danke dir, leider klappt das irgendwie auch nicht, gibt auch einen Compilercrash der genau darauf zurueckzufuehren ist.
    Zu Fuss geht das auch nicht


    Code
    new Float:r=floatabs(floatsqroot(((playerPos[0][0]-circleCenter[0][0])*(playerPos[0][0]-circleCenter[0][0]))+((playerPos[0][1]-circleCenter[0][1])*(playerPos[0][1]-circleCenter[0][1]))+((playerPos[0][2]-circleCenter[0][2])*(cplayerPos[0][2]-circleCenter[0][2]))));

    Ist erstmal weiter nicht schlimm, komme die naechsten Minuten mit einer anderen Problematik.

  • Ich meinte lediglich, dass vor einem Forward sowie Public kein Float kommt.

    Doch, wenn diese einen TAG-Wert returnen, dann schon :)



    Zu Fuss geht das auch nicht

    Das liegt dann offensichtlich an den Variablen :D
    Hast wohl einen Fehler bei der Deklaration gemacht :)

    ast2ufdyxkb1.png


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

  • Das hier ist der Code zu folgendem Konstrukt


    kreis.png


    Ich habe einen Ortsvektor mit einem Punkt wo der Spieler hinschauen soll, bspw ein Gebaeude.
    Dann habe ich einen Ortsvektor mit den Koordinaten des Spielers von denen aus der Spieler auf den anderen schauen soll.
    Weiterhin soll sich der Spieler auf einer Kreisbahn um ein Objekt bewegen, dazu muss ich die fehlenden Ortsvektoren auf der Kreisbahn extrapolieren.
    Dazu habe ich einen Ortsvektor des Mittelpunkts angenommen,den Ortsvektor des Punktes auf der Kreisbahn vor der Rotation (also Spieler) und der neue Ortsvektor jener danach. θ sei der Winkel der Bewegung. n sei der normalisierte Normalenvektor der Ebene in der die Kreisbahn liegt.


    So nun bin ich jedoch am Raetseln wie ich es umsetzen soll dass der Spieler in speed/360 Zeit jeweils um eine Koordinate weiter geschoben wird, wie kriege ich das vernuenftig realisiert, bspw. durch Timer? Oder gibt es da clevere Loesungen?
    Jede speed/360 Sekunde eine Funktion durch einen Timer aufrufen oder so ist ja auch doof.

    Einmal editiert, zuletzt von Sub Royal ()

  • Wie krieg ich das alles in eine einzige Funktion?

    Das solltest du nicht tun wollen.


    Du solltest die User_ID einfach im Enum zwischenspeichern, wenn du den Spieler eh lädst.



    Wie mache ich, dass ich beim erstellen alle Index-Werte im Array auf 100 setze?

    new HP[10] = {100, ...};



    oder so ist ja auch doof.

    Wieso?


    Wenn es um solche Delays geht, muss man einen Timer verwenden.


    Kannst ja immer die selbe Funktion aufrufen. Übergibst und zählst halt immer den Parameter hoch :)
    (Mit [wiki]SetTimerEx[/wiki])

    ast2ufdyxkb1.png


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

  • Ich setzte für mehrere Dinge den selben Timer, all diese Dingen haben die selbe Index-ID im Array Objekt[0] und z.B Test[0]
    Jetzt will ich nach dem Timer ein Objekt erstellen, kann in den Timer eine Zahl mitgeben? Die Zahl setzt er dann für den Array-Index ein?


    Objekt[2] soll nach Timerende erstellt werden, dann einfach eine 2 den Timer mitgeben und er kann die Zahl dann im Array-i einsetzten.


    Ist so etwas möglich, oder was kann ich machen?

    wm2c6p1.png
    Ich weiß, dass ich weiß, dass ich nichts weiß.

  • Nein ich lade den Spieler nicht, diese Funktion muss wirklich die userID returnen

    Naja, dann solltest du es so lösen:

    C
    //Hier ist Code 1
    Funktion_Der_UserID();
    //Hier ist Code 2


    Nimm nun den Code 2 und Kapsel ihn in eine neue Funktion:

    C
    //Hier ist Code 1
    Funktion_Der_UserID();
    
    
    stock Code2(playerid, user_ID)
    {
        //Hier ist nun Code 2
    }


    Und dann kannst du einfach Code2 aufrufen, sobald du den Wert der User_ID hast und dahin alles übergeben und nutzen :)

    Ist so etwas möglich

    Natürlich, einfach mit [wiki]SetTimerEx[/wiki] :)

    ast2ufdyxkb1.png


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