28.10.2012, 01:35 | #1 (permalink) |
Registriert seit: 30.06.2009
Ort: Berlin
Beiträge: 9
|
Script müsste funktionieren tut es aber nicht
Liebe Community,
in einer MP-Mission soll ein Flugzeug und ein Pilot via Script spawnen und einen Heli abschießen. Beides: Flugzeug und Pilot spawnen, aber der Pilot fällt vom Himmel und das Flugzeug stürzt ab. Das ganze ist unter ACE und eben für MP gedacht. Hier das Script, das auch ausgeführt wird. Erkennt jemand den Fehler? grpMig1=createGroup "East"; _Mig1Pilot="RU_Soldier_Pilot" createUnit [[(getMarkerPos "mrkMig1Spawn" select 0),(getMarkerPos "mrkMig1Spawn" select 1),70],grpMig1,[],0,"form"]; _Mig1Pilot setSkill 1.0; Mig1 = createVehicle ["SU34",[(getMarkerPos "mrkMig1Spawn" select 0),(getMarkerPos "mrkMig1Spawn" select 1),70], [], 0, "FLY"]; Mig1 lock false; _Mig1Pilot moveInDriver Mig1; Mig1 FlyInHeight 70; Mig1 setDir 280; _vel = velocity Mig1; _dir = direction Mig1; _speed = 200; Mig1 setVelocity [(_vel select 0)+(sin _dir*_speed),(_vel select 1)+ (cos _dir*_speed),(_vel select 2)]; grpMig1 addVehicle Mig1; hint format ["%1", (isNull _Mig1Pilot)]; ;_wp1 = grpMig1 addWaypoint [getMarkerPos "mrkMig1Destroy",0]; ;_wp1 setWaypointType "SAD"; ;_wp1 setWaypointSpeed "FULL" ;_wp1 setWaypointStatements ["true",""]; ;_wp2 = grpMig1 addWaypoint [getMarkerPos "mrkMig1Move",0,1]; ;_wp2 setWaypointType "MOVE"; ;_wp2 setWaypointSpeed "NORMAL"; ;_wp2 setWaypointStatements ["true",""]; ;_wp3 = grpMig1 addWaypoint [getMarkerPos "mrkMig1Unload",0,2]; ;_wp3 setWaypointType "UNLOAD"; ;_wp3 setWaypointSpeed "NORMAL"; Vielen Dank für die Hilfe - haben zu zweit schon das Internet durchstöbert und den Editing Guide benutzt. Kommen trotzdem nicht drauf. |
28.10.2012, 08:05 | #2 (permalink) |
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
|
Muss nicht! Du hast hier die unterschiedlichen Aufrufmöglichkeiten von createUnit vermischt.
//Seite ohne Anführungszeichen grpMig1=createGroup East; //Gruppe vor createUnit anführen _Mig1Pilot = grpMig1 createUnit ["RU_Soldier_Pilot", [0,0], [], 0, "FORM"]; Wenn du die Unit gleich in ein Objekt versetzt, dann reicht als Position [0,0] Wenn vermeidbar solltest du in einem Skript nur lokale Variable verwenden. Fehler sind einfach mit einem Test über einen Funk-Auslöser zu finden: Code:
Mig1 = createVehicle ["SU34",position player, [], 0, "FLY"]; Mig1Pilot = createGroup East createUnit ["RU_Soldier_Pilot",[0,0],[],0,"FORM"]; Mig1Pilot moveInDriver Mig1; player moveInGunner Mig1; Geändert von Vienna (28.10.2012 um 08:14 Uhr). |
28.10.2012, 08:49 | #3 (permalink) |
Registriert seit: 28.10.2012
Beiträge: 2
|
Hallo zusammen,
ich bin der andere Teil von "wir haben zu zweit...". Erstmal danke für die Fehler- und Verbesserungshinweise. Das eigentliche Problem scheint das "moveInDriver" zu sein. Jet und Pilot werden erzeugt (beide übrigens gegnerische Fraktion), nur wird der Pilot nicht in den Jet gesetzt, sondern fällt runter und der Jet stürzt führerlos ab. Bin im BI-Wiki über einen Hinweis über "MP-Locality" gestolpert, d. h. moveInDriver soll nur für "local units" funtionieren (z. B. Player, was auch klappt). Das legt nahe, dass der erzeugte Pilot nicht "local" ist. Die richtige Bedeutung habe ich aber noch nicht vollends verstanden. Vielleicht hat jemand dazu einen Tipp? Viele Grüße, Noqmar |
28.10.2012, 08:55 | #4 (permalink) |
Registriert seit: 28.10.2012
Beiträge: 2
|
Abgefahren (-geflogen)
Nach beherzigung der Ratschläge, Umstellung auf SQF-Syntax, und Eliminierung von unnötigem Zeugs funktioniert es jetzt hiermit:
Code:
// create SU-34 at spawn marker _su1 = createVehicle ["SU34",[(getMarkerPos "mrkSU1Spawn" select 0),(getMarkerPos "mrkSU1Spawn" select 1),70],[],0,"FLY"]; // set direction and velocity vector _dir = 280; _su1 setDir _dir; _vel = velocity _su1; _speed = 200; _su1 setVelocity [(_vel select 0)+(sin _dir * _speed),(_vel select 1)+ (cos _dir * _speed),(_vel select 2)]; // create group for later waypoint additions _grpSU1 = createGroup East; // create group assigned pilot and move him into SU-34 _su1Pilot = _grpSU1 createUnit ["RU_Soldier_Pilot", [0,0], [], 0, "FORM"]; _su1Pilot moveInDriver _su1; |
28.10.2012, 10:50 | #5 (permalink) |
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
|
Um in MP Lokalitäts-Probleme zu vermeiden, sollte in den Sripten if (! isServer) exitWith {}; die erste Zeile sein, wenn das Skript Befehle abruft, welche nicht für einen Client bestimmt sind.
So ist auch sichergestellt, dass ein solches Skript nicht auf mehreren PCs aufgerufen wird, sondern nur beim Server/Host (z.B. wenn das Skript über einen allgemeinen Ereignis-Auslöser aufgerufen wird). KIs, welche nicht der Kontrolle eines Spielers zugewiesen sind, werden vom Host/Server gesteuert und befolgen keine "lokalen Befehle" von einem Client. Eine KI, welche der Gruppe des Spielers angehört, kann nur von diesem Spieler mit lokalen Befehlen befehligt werden. Solches ist beim Befehl http://community.bistudio.com/wiki/moveInDriver zu sehen (ganz oben). http://community.bistudio.com/wiki/setPos hingegen ist ein globaler Befehl! |
28.10.2012, 13:52 | #8 (permalink) |
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
|
Solche Funktionen verderben einem die Freude am Skripten! Es ist doch viel interessanter eigene Skripte zu erstellen. Diese BIS-Funktionen sind in entpackter Form geeignet sich was "abzuschauen". Allerdings für Anfänger oft verwirrend. Einmal zum Reinschauen siehe Anhang. Dabei ist zu beachten, dass es sich um Funktionen handelt. Diese geben Werte zurück, dürfen aber keine Verzögerung (sleep) beinhalten. Die darin enthaltenen Kommentare müssen zuvor entfernt werden. Das geschieht durch den Preprozessor wie folgt: FunktionsName = compile preprocessFileLineNumbers "SkriptFunktionName.sqf"; Aufruf dann mit: _Ergebnis = [x,y] call FunktionsName; Dazu auch ein Beispiel im Anhang. |
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
|
|
Ähnliche Themen | ||||
Thema | Autor | Forum | Antworten | Letzter Beitrag |
Beta-Patch für OpA erschienen | det99 | Community | 1429 | 18.07.2014 16:51 |
Day & Weather Script | Moerderhoschi | Editing & Scripting | 13 | 02.12.2012 10:29 |
Ammobox Script problem | G36Firestorm | Editing & Scripting | 11 | 18.07.2011 15:04 |
marker über script erzeugen | hypercop | Editing & Scripting | 2 | 28.08.2010 22:40 |
Improved Bullet Cam Script | miromanu | Editing & Scripting | 3 | 21.08.2010 01:01 |