Wenn ich random(3) im switch erstelle. Kann ich dann case 0: -> 2 nutzen oder bis 3?
[SAMMELTHREAD] Kleine Scripting Fragen
- Rafelder
- Unerledigt
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
-
-
Bis 2 kannst du nutzen.
-
-
-
Also ist es doch so richtig, hat nicht funktioniert, weil ich falsche ids eingetragen habe
Tag mismatch Zeile 5.
Warum geht das so nicht? -
-
new Text3D:HealthTextLabel[10];
-
Habe folgendes Problem:
Folgendes fuehrt irgendwie immer zum crash des compilers, wenn ich einem new Float: einen Wert von GetDistance zuweisen will.
Codeforward 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.
Codeforward 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))
-
Ja klar, habe nie abgestritten, dass Tags mit (Float:) definiert werden müssen.
Ich meinte lediglich, dass vor einem Forward sowie Public kein Float kommt. -
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))
Danke dir, leider klappt das irgendwie auch nicht, gibt auch einen Compilercrash der genau darauf zurueckzufuehren ist.
Zu Fuss geht das auch nichtCodenew 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
Hast wohl einen Fehler bei der Deklaration gemacht -
-
new HP[10] = 100; (<- scheint nicht zu gehen)
Wie mache ich, dass ich beim erstellen alle Index-Werte im Array auf 100 setze?
-
C
Alles anzeigen#include <a_samp> new Float:playerPos[]={3.93,2.34,4.0}; new Float:playerLookAt[]={3.0,2.0,1.0}; 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]); //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])))); new Float:r=1.0; main() { } stock RotatePlayerCamera(playerid, Float:pX, Float:pY, Float:pZ, Float:lAx, Float:lAy, Float:lAz, speed) { new Float:circleCenter[]={lAx, lAy, pZ}; SetPlayerPos(playerid,pX,pY,pZ); SetPlayerCameraLookAt(playerid, lAx, lAy, lAz); new Float:xa,Float:xy; //new Float:r=floatabs(floatsqroot(((pX-circleCenter[0][0])*(pX-circleCenter[0][0]))+((pY-circleCenter[0][1])*(pY-circleCenter[0][1]))+((pZ-circleCenter[0][2])*(pZ-circleCenter[0][2])))); xa=acos((pX[0]-circleCenter[0])/r); xy=asin((pY[1]-circleCenter[1])/r); new rotatingCoords[360][]; for(new i;i<360;i++) { new Float:y,Float:x; x=circleCenter[0]+r*floatcos(i+xa,degrees); y=circleCenter[1]+r*floatsin(i+xy,degrees); rotatingCoords[i][0]=x; rotatingCoords[i][1]=y; rotatingCoords[i][2]=circleCenter[0][2]; printf("New post after %d degrees X:%f Y:%f Z:%f,i,rotatingCoords[i][0],rotatingCoords[i][1],rotatingCoords[i][2]) } //Immer nach speed/360 sekunden InterpolateCameraLookAt(playerid, pX , pY , pZ , lAx, lAy, lAz, speed, CAMERA_MOVE); }
Das hier ist der Code zu folgendem Konstrukt
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. -
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]) -
Nein ich lade den Spieler nicht, diese Funktion muss wirklich die userID returnen
-
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?
-
Nein ich lade den Spieler nicht, diese Funktion muss wirklich die userID returnen
Naja, dann solltest du es so lösen:
Nimm nun den Code 2 und Kapsel ihn in eine neue Funktion:
Und dann kannst du einfach Code2 aufrufen, sobald du den Wert der User_ID hast und dahin alles übergeben und nutzenIst so etwas möglich
Natürlich, einfach mit [wiki]SetTimerEx[/wiki]