09.04.2014, 16:23 | #1 (permalink) |
Registriert seit: 10.10.2006
Beiträge: 263
|
Fahrzeug Explodiert beim Bauen
Guten Abend Forumgemeinde,
Ich habe bei denn Script von mir ein kleines Problem. Es passiert beim Erstellen von Fahrzeugen das diese sofort Explodieren, meine Vermutung ist da er mit denn createVehiclelocal in Konflikt gerät. Aber das Locale Objekt lösche ich ja schon vor der Erstellung? Das Objekt erhalte ich aus einen anderen Script durch übergabe der Vraiable u. Im Test habe ich das Locale Fahrzeug einfach Ausgelassen wodurch es zu keiner Explosion kommt. Code:
Private ["_p","_x","_y","_z","_schrank","_i","_d","_u","_f"]; _f = false; _u = u; _p = player; _schrank = _u createVehiclelocal [0,0,0]; _i = 0; ende=false; bau=false; _a1 = _p addAction ["<t color='#11FF00'>Bauen</t>",{bau=true}]; _a2 = _p addAction ["<t color='#FF0000'>Abbrechen</t>",{ende=true}]; while{_i < 1000} do { if (bau) then { _u2 = [((getPos _p)select 0) + sin(getDir _p) * 6, ((getPos _p)select 1) + cos(getdir _p) * 6]; deleteVehicle _schrank; _schrank2 = createVehicle [_u,_u2, [], 0, "CAN_COLLIDE"]; _schrank2 setDir _d; _schrank2 setPosASL [((getPos _p)select 0) + sin(getDir _p) * 6, ((getPos _p)select 1) + cos(getdir _p) * 6]; ende = true; }; _x = getPos _p select 0; _x = _x + 10; _y = getPos _p select 1; _y = _y + 10; _z = getPos _p select 2; _d = getDir _p; _schrank setDir _d; _schrank setPos [((getPos _p)select 0) + sin(getDir _p) * 6, ((getPos _p)select 1) + cos(getdir _p) * 6]; sleep 0.1; _i = _i + 1; if(ende) exitWith{ deleteVehicle _schrank; _p removeaction _a1; _p removeaction _a2; }; }; |
10.04.2014, 00:39 | #3 (permalink) |
Registriert seit: 15.05.2011
Beiträge: 1.109
|
So richtig werde ich aus deinem Code nicht schlau.
Du erstellst 2 Einträge und ein lokales Objekt. Deine Schleife zieht an. Deine IF Bedingung wird erstmal ignoriert, da diese eine BAU=TRUE fordert. Bau wurde aber auf FALSE gesetzt. Jetzt überschreibst du die Variablen _x und _y jedesmal. Dein +10 hat keine Wirkung, da du vorher _x % _y wieder der Pos des Spielers zuweist. Ist das gewollt? Wenn die 1000 erreicht wurde, hört dein Script auf und es befindet sich ein lokales Objekt auf dem Server und der Spieler hat dann 2 Actioneinträge. Startet das Script neu, gibt es schonmal ein Problem, da du wieder ein Objekt an diese Stelle bringst. Okay, wir sind bei _i = 500 Bau wird jetzt true Du ermittelst mit _u2 exakt die Position, wo sich _schrank befindet. Du löschst _Schrank, wartest aber nicht, bis es 100% weg ist und erstellst sofort ein neues Objekt an der Pos von _schrank. Jetzt definierst du _x und _y neu. Nun versucht das Script _schrank eine Richtung zuzuweisen. _schrank gibt es aber nicht mehr. Dürfte ein Fehler in der RPT werden. Ende ist jetzt TRUE, damit greift die letzt Bedingung. Da versuchst du wieder _schrank zu löschen. |
10.04.2014, 20:55 | #4 (permalink) |
Registriert seit: 10.10.2006
Beiträge: 263
|
Du hatest natürlich Recht, ich habe das oft sehr oft umgebaut und dran änderungen gemacht das ich es Nie richtig aufgeräumt habe.
Im Grunde Erstelle ich mit denn Script ein Objekt was ich Positionieren kann in demm ich mich Bewege Und dank der Aussage das das Objekt nicht ganz gelöscht ist habe ich denn sleep eingefügt und nun geht es auch Danke Code:
Private ["_p","_schrank","_schrank2","_i","_d","_u","_u2"]; _u = u; // Bauobjekt wird übergeben _p = player; _schrank = _u createVehiclelocal [0,0,0]; //locales Objekt wird Erstellt _i = 0; //Schleifen Zähler ende=false; bau=false; _a1 = _p addAction ["<t color='#11FF00'>Bauen</t>",{bau=true}]; _a2 = _p addAction ["<t color='#FF0000'>Abbrechen</t>",{ende=true}]; while{_i < 1000} do { _d = getDir _p; //Sichtrichtung des Spielers wird Ermittelt _schrank setDir _d; //das Locale Objekt wird gedreht wie der Spieler steht _schrank setPos [((getPos _p)select 0) + sin(getDir _p) * 6, ((getPos _p)select 1) + cos(getdir _p) * 6]; //das Locale Objekt wird zum Spieler gestellt sleep 0.1; _i = _i + 1; //schleife Variable bekommt 1 dazugezählt if (bau) exitWith{ _u2 = [((getPos _p)select 0) + sin(getDir _p) * 6, ((getPos _p)select 1) + cos(getdir _p) * 6]; //Position wird in Variable _u2 geschrieben deleteVehicle _schrank; //Locales Objekt wird gelöscht sleep 0.1; _schrank2 = createVehicle [_u,_u2, [], 0, "CAN_COLLIDE"]; //Globales Objekt wird erstellt _schrank2 setDir _d; //Gobales Objekt wird richtig gedreht _p removeaction _a1; //bau Aktion wird aus der Aktionsleiste gelöscht _p removeaction _a2; //abbrechen Aktion wird gelöscht }; if(ende) exitWith{ deleteVehicle _schrank; _p removeaction _a1; _p removeaction _a2; }; }; deleteVehicle _schrank; _p removeaction _a1; _p removeaction _a2; |
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
Themen-Optionen | |
Ansicht | |
|
|
Ähnliche Themen | ||||
Thema | Autor | Forum | Antworten | Letzter Beitrag |
BTC Revive/Respawn - Fahrzeug verliert den Namen nach Respawn | Jekko | Editing & Scripting | 6 | 27.10.2013 16:13 |
Fahrzeug respawn (kleine hilfe) | JeeperCreeper | Editing & Scripting | 0 | 22.10.2013 11:59 |
Fahrzeug an Fallschirm hängen | xXHappyXx | Editing & Scripting | 9 | 19.11.2012 17:35 |
Fahrzeug Namen ändern/mehrmals einfügen | XxStevenxX | Editing & Scripting | 11 | 09.09.2012 02:56 |
Respawn In Fahrzeug | Steirer | Editing & Scripting | 11 | 18.10.2011 19:06 |