PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Probleme mit Rechnung in einem Script


JoeJoe87577
25.12.2013, 14:36
Hallo zusammen,

ich habe ein Problem mit einer Rechnung in einem Script. Ich erzeuge Lichter um ein Helipad herum mit mehreren for Schleifen. Wenn ich das Ganze mit festen werten mache funktioniert alles auch wie es soll. Sobald ich aber dafür eine Variable einsetze zerlegt es mir die letzte Schleife.

Script mit festen werten
Helipad Position [23200, 18950,3.19]
for "_i" from 0 to 5 do {
"Land_Flush_Light_yellow_F" createVehicle [(23201.25 - (_i*.5)),18950,3.19];
sleep .1;
};

for "_i" from 1 to 4 do {
"Land_Flush_Light_yellow_F" createVehicle [23201.25,(18950 + (_i*.5)),3.19];
"Land_Flush_Light_yellow_F" createVehicle [23198.75,(18950 + (_i*.5)),3.19];
"Land_Flush_Light_yellow_F" createVehicle [23201.25,(18950 - (_i*.5)),3.19];
"Land_Flush_Light_yellow_F" createVehicle [23198.75,(18950 - (_i*.5)),3.19];
sleep .1;
};

for "_i" from 0 to 10 do {
"Land_Flush_Light_green_F" createVehicle [(23195 + (_i * 1) ),18955,3.19];
"Land_Flush_Light_green_F" createVehicle [(23195 + (_i * 1) ),18945,3.19];
"Land_Flush_Light_green_F" createVehicle [23195,(18945 + (_i * 1)),3.19];
"Land_Flush_Light_green_F" createVehicle [23205,(18945 + (_i * 1)),3.19];
sleep .1;
};

Script mit Variablen (_innerLight und _outerLight werden mit entsprechenden Classnames ersetzt):
for "_i" from 0 to 5 do {
_innerLight createVehicle [((_x + 1.25) - (_i*.5)),_y,_z];
sleep .1;
};

for "_i" from 1 to 4 do {
_innerLight createVehicle [(_x + 1.25),(_y + (_i*.5)),_z];
_innerLight createVehicle [(_x - 1.25),(_y + (_i*.5)),_z];
_innerLight createVehicle [(_x + 1.25),(_y - (_i*.5)),_z];
_innerLight createVehicle [(_x - 1.25),(_y - (_i*.5)),_z];
sleep .1;
};

for "_i" from 0 to 10 do {
_outerLight createVehicle [((_x - 5) + (_i * 1)),(_y + 5),_z];
_outerLight createVehicle [((_x - 5) + (_i * 1)),(_y - 5),_z];
_outerLight createVehicle [(_x - 5),((_y - 5) + (_i * 1)),_z];
_outerLight createVehicle [(_x + 5),((_y - 5) + (_i * 1)),_z];
sleep .1;
};

Sieht einer von euch einen Unterschied zwischen den beiden Rechnungen?

Nach einigen Versuchen ist mir jetzt auch aufgefallen, dass sobald das Helipad an einer Position ohne Nachkommastellen ist, keine Probleme auftreten. Sobald das Helipad aber an einer Kommaposition ist, sind die Positionen der Lichter falsch.

Buliwyf
25.12.2013, 14:50
Die wichtigste Info fehlt mal wieder... wie füllst Du denn die Variablen _innerLight und _outerLight?

Ich schätze der String wird nicht richtig übergeben?!

JoeJoe87577
25.12.2013, 14:54
Die werden so befüllt:

switch (_innerLight) do
{
case "red": {_innerLight = "Land_Flush_Light_red_F"};
case "green": {_innerLight = "Land_Flush_Light_green_F"};
case "yellow": {_innerLight = "Land_Flush_Light_yellow_F"};
case "blue": {_innerLight = "Land_runway_edgelight_blue_F"};
case "white": {_innerLight = "Land_runway_edgelight"};
default {_innerLight = "Land_Flush_Light_yellow_F"};
};

switch (_outerLight) do
{
case "red": {_outerLight = "Land_Flush_Light_red_F"};
case "green": {_outerLight = "Land_Flush_Light_green_F"};
case "yellow": {_outerLight = "Land_Flush_Light_yellow_F"};
case "blue": {_outerLight = "Land_runway_edgelight_blue_F"};
case "white": {_outerLight = "Land_runway_edgelight"};
default {_outerLight = "Land_Flush_Light_green_F"};
};

Das ist nicht das Problem, die Klassen werden ordentlich ausgewählt.

JoeJoe87577
25.12.2013, 16:29
Ich werde mich später mal hin setzen und alles von Hand ausrechnen und dann hoffe ich, dass ich den Fehler in meiner Rechnung finde.
Außerdem habe ich das Script mal in den BIS Foren veröffentlicht: Link (http://forums.bistudio.com/showthread.php?170638-Helipad-Light-Script)

Edit:
Ich habe jetzt alles nochmal von Hand durchgerechnet und dann auch nochmal vom Script ausgeben lassen. Die Werte passen, sowohl von Hand als auch vom Script berechnet. Aber die Lichter werden von ArmA an der falschen stelle erstellt. Irgendwas verhaut die Engine da mit den Positionen...

Pfandgiraffe
25.12.2013, 18:45
Du rechnest 0*1...

Schreib nicht from 0 to.... sondern 1 to...

JoeJoe87577
25.12.2013, 18:50
Auch das war Absicht, weil die Rechnung dadurch leichter wurde. Und solange ich nicht alles mal 0 rechne (was ich mit den klammern verhindern wollte) sollte es ja funktionieren. Und es erklärt immer noch nicht warum das nur an manchen Positionen nicht geht.

JoeJoe87577
26.12.2013, 22:15
Ich hab mal noch eine andere Frage, ist es möglich Objekte (die runway lights) aus einem Script heraus zu gruppieren und als ganze Gruppe um einen Punkt zu drehen? Das ganze soll dann so aussehen, wie wenn man im Editor mehrere Fahrzeuge markiert und dann mit Shift dreht.
Ich saß nämlich grade 3 Stunden an dem Problem mehrere Objekte um einen Punkt beliebig zu drehen.

SmokyJoey
27.12.2013, 10:55
also dass mit dem Objekte drehen würde ich in etwa so gestalten:

_objektlist = nearestObjects [quellUnit , [], 10];

{ _x setDir 180} forEach _objectlist;


also nur grob - nicht getestet.

Ich bin nicht so der Profi - aber das wäre so meine Richtung die ich einschlagen würde

JoeJoe87577
27.12.2013, 11:30
Das Problem ist, dass ich mit setDir jedes Objekt um sich selbst drehe. Ich will aber alle Objekte zusammen um einen Punkt drehen.

Buliwyf
27.12.2013, 12:13
Sowas? >> SHK moveObjects - Scripts - Armaholic (http://www.armaholic.com/page.php?id=22554) <<

JoeJoe87577
27.12.2013, 12:34
Jaa Danke Buliwyf, dass ist genau das was ich noch gebraucht hab :D