12.01.2014, 16:26 | #1 (permalink) |
Registriert seit: 15.05.2012
Beiträge: 27
|
Hilfe bei "Heli Evakuierungs Script"
Hi Leute,
nach unzähligen Stunden ohne nennenswerten Fortschritt, wende ich mich jetzt an euch Ich schreibe gerade ein einfaches Helikopter Evakuierungs-Script. Der Heli (evac_heli) ist als Objekt vorhanden und steht auf einem Helipad (helipad). Der Player soll via Funk (am besten übers BIS_Communicationmenu) die Evakuierung anfordern. Der Heli soll starten zur Position des 'anfordernden players' fliegen, diesen einsammeln und anschließend zur Landezone (wieder das Helipad) fliegen, dort landen und den Player (und seine, mit ihm eingestiegenen Jungs) rausschmeißen, dann den Motor ausmachen und warten, bis zum nächsten Ruf über Funk. Teil der description.ext: PHP-Code:
PHP-Code:
PHP-Code:
wenn ich auf den eintrag im Comm-menü "Evakuierung" drücke, geschieht nichts. Daher habe ich erstmal ein Trigger erstellt, diesem "Funk Bravo" zugewiesen und darüber das "evac.sqf" ausführen lassen. ich denke mal über Arrays würde das alles besser laufen, aber die checke ich noch nich so richtig... nach betätigen des "Funk Bravo", kommt der Sound zu "EVAC_DENIED" (also abgelehnt), was er eigentlich nur ausführen soll, wenn der helikopter motor bereits läuft (also der heli schon unterwegs ist). dann geht er automatisch weiter im script und führ die andern zwei sounds aus (wobei allerdings der Text nicht funktioniert -.-), startet den motor und macht ihn direkt wieder aus... mehr passiert nicht -.- gerne lade ich hier auch die test-mission dazu hoch. in dieser test-mission geht es auch übrigens um meinen andern post von gestern: PIP - Livefeed - Hilfe Jungs ^^ - HX3 Foren hoffe ihr könnt mir da weiterhelfen. PS: das ganze soll möglichst auch multiplayerfähig sein |
12.01.2014, 18:11 | #2 (permalink) |
Registriert seit: 02.11.2010
Beiträge: 113
|
Schick mal die Testmissi, vielleicht kann ich dir weiterhelfen.
Ich versuche es zumindest ... LG Jan janis.11@gmx.net |
13.01.2014, 02:51 | #3 (permalink) |
Registriert seit: 15.05.2011
Beiträge: 1.109
|
~ im sqf?
Nimm sleep Warum evac_heli action ["engineOn", evac_heli]; ? Sobald der Heli einen WP bekommt, macht er den Motor an. Kannst du eigentlich weglassen. Der Heli hat eine Crew, richtig? Ist der Motor DEFINITV aus? Diese BIS Funktion, was genau bewirkt die? Erstellt die einen AddAction-eintrag oder wie ruft man die auf? Ich frage aus Interesse, da ich diese noch nie benutzt habe. addWaypoint fordert eine Gruppe. Ich bezweifel, dass evac_heli eine "Gruppe" ist, sondern vielmehr der der name des Helis. Probiere mal diese in deiner Init: Code:
anforderung = false; evac_heli = group testgruppe; Code:
private ["_wp1","_wp2","_wp3","_wp4"]; if (anforderung) exitWith { sleep 1; evac_heli sideRadio "evac3"; evac_heli globalchat Localize "STR_EVAC_DENIED"; sleep 1; }; anforderung = true; evac_heli sideRadio "evac1"; evac_heli globalchat Localize "STR_EVAC_REQUEST"; sleep 5; evac_heli sideRadio "evac2"; evac_heli globalchat Localize "STR_EVAC_ACCEPT"; // evac_heli allowDamage false; sleep 5; _wp0 = testgruppe addwaypoint [getPos player, 0]; _wp0 setwaypointtype "MOVE"; player sideChat "erster WP zugewiesen"; //testausgabe _wp1 = testgruppe addwaypoint [getPos player, 1]; // wp1 = [group evac_heli] addwaypoint [getPos player, 1]; dürfte auch funktionieren ist ansichtssache _wp1 setWaypointType "LOAD"; _wp1 setWaypointBehaviour "CARELESS"; _wp1 setWaypointCombatMode "BLUE"; doStop evac_heli; evac_heli land "LAND"; _wp2 = testgruppe addwaypoint [getPos helipad, 2]; _wp2 setWaypointType "MOVE"; _wp2 setWaypointStatements [player in evac_heli]; _wp3 = testgruppe addwaypoint [getPos helipad, 3]; _wp3 setwaypointtype "UNLOAD"; // ??-> nicht TR UNLOAD ?? , bin mir da nicht so sicher doStop evac_heli; evac_heli land "LAND"; evac_heli action ["engineOff", evac_heli]; waitUntil {!isEngineon evac_heli || !alive evac_heli}; deleteWaypoint [testgruppe , 0]; deleteWaypoint [testgruppe , 1]; deleteWaypoint [testgruppe , 2]; deleteWaypoint [testgruppe , 3]; anfoderung = false; //im sqf wird in diesem Fall kein exit genommen, da das script nach der letzten Zeile endet Bei dem Löschen der Wegpunkte bin ich mir nicht sicher, ob das sein muss. Probieren geht über studieren. xD Lösche mal deine RPT Einträge. Starte das Script und poste die Fehlermeldung aus der RPT, wenn welche auftauchen Geändert von Drunken Officer (13.01.2014 um 03:24 Uhr). |
13.01.2014, 09:29 | #4 (permalink) |
Registriert seit: 15.05.2012
Beiträge: 27
|
hatte bei mir jetzt persönlich kein Unterschied gemacht ^^ aber okee ich nehme sleep da hast du Recht. Den Befehl habe ich nur reingenommen um zu schauen ob der Heli überhaupt auf das Script reagiert (da die Wapoints ja nicht funktionierten). BLUFOR » Luft » GhostHawk Da es kein leeres Fahrzeug ist, geh ich von aus, das Pilot, Copilot & Gunner drinne sitzen. Der Rotor bewegt sich nicht, das sehe ich über's Lifefeed (Init auf Player, Quelle ist ein Fahnenmast, Ziel der Helikopter). So kann ich ganz einfach kontrollieren ob der (doch recht weit entfernte) Helikopter noch still steht oder sich rührt da hast du ebenfalls Recht. das müsste ich dann wohl über die Arrays lösen oder? zwecks "select 0", "select 1", etc... was bedeutet das hier genau?: ...schon so oft gesehen, aber nie gecheckt da ich die bedeutung/verwendung von "arrays" noch nicht wirklich geblickt habe sollte dort dann "isEngineOn = false;" stehen? ich habe allgemein das "isEngineOn" nur reingenommen, um festzustellen ob der Heli bereits unterwegs ist. Falls ein zweiter Player "Evakuierung" anfordert und der Heli aber grade unterwegs ist, um einen anderen Player zu holen, dann soll die Anfrage verweigert werden (EVAC_DENIED). das müsste doch dann so aussehen oder?: PHP-Code:
ich hoffe doch sehr, das der heli ein paar evakuierungen übersteht Mit "BIS_fnc_addCommMenuItem" kann man Einträge in dem Reiter "Kommunikation" erstellen (Taste 0, 8), anstatt wie bei einem Trigger mit "Funk Alpha/Bravo/usw", wo es dann unter "Funk" (Taste 0, 0) steht. Was für Möglichkeiten man genau hat, weis ich allerdings selbst nicht Naja ich werd aufjedenfall nach Feierabend mal ausprobieren was du mir hier vorgeschlagen hast, danke schonmal |
13.01.2014, 12:44 | #5 (permalink) |
Registriert seit: 15.05.2011
Beiträge: 1.109
|
Großer, ich habe ganz bewußt mit der Anforderung garbeitet. Wenn du es mit EngineOn machen willst, so tu dies. Hast du dir mein geposteten Vorschlag genau angeschaut? Wie soll das mit der IF-Abfrage denn funktionieren, wenn du unten wieder isEngineOn = false reinschreibst. Obwohl dieser code Quark ist, weil der Syntax so lautet: Boolean = isEngineOn vehicle
Da mit der gruppe ist mir ein Fehler passiert testgruppe = group evac_heli Private bedeutet, die Variablen werden nur in diesem Script genutzt Nein das mit der Gruppe löst du nicht über einen Array in diesem Fall. Lies dir doch mal bitte bei BIS Wiki den Befehl durch. Du gibst den Namen des Fahrzeuges an. Laß dir doch per sideChat die Gruppe des HEli ausgeben. Dürfte irgendetwas mit Aplha 1:1 oder so rauskommen. http://community.bistudio.com/wiki/C...ommands_Arma_3 Edit: Wieso hast do ein do stop drin??? ich bau mal was zusammen.... Geändert von Drunken Officer (13.01.2014 um 13:39 Uhr). |
13.01.2014, 14:19 | #6 (permalink) |
Registriert seit: 15.05.2011
Beiträge: 1.109
|
Das ist ein einfaches Abholscript.
Der Heli fliegt direkt zu deiner Position, lädt dich ein und fliegt zurück zu der Position, von der er gestartet ist Aufruf über evac = [heliname] execVM "dof_evac_heli.sqf" Code:
//**********************DOF_EVAC_HELI********************* //******************************************************* //********************einfaches Abholscript******************** //******************* von Drunken Officer********************** // // aufruf über evac = [Heliname]execVM "evac_heli.sqf"; //************************************************************* private ["_wp0", "_wpende", "_pos", "_zuHause","_hubi"]; if (isNil "dof_evac_anforderung") then {dof_evac_anforderung = false}; if (dof_evac_anforderung) exitWith { sleep 1; hint "Anforderung läuft bereit"; }; _hubi = _this select 0; _zuHause = getPos _hubi; _pos = getPos Player; dof_evac_anforderung = true; _hubi setfuel 1; hint "Anforderung wird bestätigt. Warten Sie. \n Der Huberschrauber ist auf dem Weg"; _wp0 = group _hubi addwaypoint [_pos, 0]; _wp0 setwaypointtype "MOVE"; _hubi setCombatMode "blue"; _hubi setBehaviour "SAFE"; _hubi allowfleeing 0; waitUntil {_hubi distance _pos < 500}; "SmokeShellGreen" createVehicle _pos; waitUntil {_hubi distance _pos < 150}; _hubi setspeedMode "LIMITED"; _hubi land "GET IN"; waitUntil {getpos _hubi select 2 < 5}; _hubi flyinHeight 2; waitUntil {{_x in _hubi;} forEach units group player}; _wpende = group _hubi addWaypoint [_zuHause,1]; [group _hubi, 1] SetWaypointType "move"; _hubi setspeedMode "normal"; _hubi flyinHeight 100; waitUntil {_hubi distance _zuHause < 150}; _hubi setspeedMode "LIMITED"; _hubi land "LAND"; waitUntil {isTouchingGround _hubi}; {_x action ["getOut", _hubi];} forEach units group player; _hubi action ["engineOff", _hubi]; deleteWaypoint [group _hubi , 0]; deleteWaypoint [group _hubi , 1]; dof_evac_anforderung = false; Geändert von Drunken Officer (13.01.2014 um 14:37 Uhr). |
13.01.2014, 15:28 | #7 (permalink) |
Registriert seit: 15.05.2012
Beiträge: 27
|
Erstmal ein GROßES Dankeschön an euch, für die schnelle und aufschlußreiche Hilfe
Habe jetz schon ein besseres Verständnis für die "Arrays", denn... ...das habe ich bereits mehrmals getan und denke immernoch » (mit andern Worten, das will nich in mein Kopf rein) ...mag mir einer noch schnell das "select 0, select 1, etc" bei den arrays erklären ? grade im bezug auf: Code:
_hubi = _this select 0; [...] waitUntil {getpos _hubi select 2 < 5}; Code:
deleteWaypoint [group _hubi , 0]; deleteWaypoint [group _hubi , 1]; |
13.01.2014, 16:04 | #8 (permalink) |
Registriert seit: 15.05.2011
Beiträge: 1.109
|
mit dem Aufruf [heliname] exec...
Damit erzeugst du einen Array. Select 0 wählt das erste Element aus 1 das 2. 2 das 3. usw Mal angenommen evac = [heliname, 30 70] execVM "dof_evac.sqf"; zur Verdeutlichung: evac = [select 0, select 1, select 2] .... Code:
... _hubi = _this select 0; // _hubi ist einfach eine Variable, damit später nicht im (_this select 0) geschreiben werden muss _wartezeit = _this select 1; _flughoehe = _this select 2; ... ... sleep _wartezeit; _wpende = group _hubi addWaypoint [_zuHause,1]; [group _hubi, 1] SetWaypointType "move"; _hubi setspeedMode "normal"; _hubi flyinHeight _flughoehe; ... ... Jetzt habe ich das Script abgeändert. Er wartet nicht bis alle Einheiten eingestiegen sind, sondern nur eine im Array vordefinierte Zeit. Dann fliegt der Heli in einer vordefinierten Höhe davon. waitUntil {getpos _hubi select 2 < 5}; getPos fragt die Position des Helis ab und bekommt einen Array [länge,breite, höhe] select 2 fragt das 3. element dieses array ab. ****************** Eine Script für dich zur Veranschaulichung Stelle dir einen Heli auf die KArte und lasse diesen von a nach b fleigen. in die Init des Helis schreibst du rein: test = [this] execVM "DOF_TEST.sqf"; Code:
private ["_heli"]; _heli = _this select 0; //du übergibst mit THIS das Fahrzeug while {alive _heli} do { _pos = getPos _heli; player sideChat format ["das ist der array: %1", _pos]; hint format ["aber schöner sieht es so aus \n Länge: %1 \n Breite: %2 \n Höhe: %3", _pos select 0, _pos select 1, _pos select 2]; sleep 3; }; Geändert von Drunken Officer (13.01.2014 um 16:13 Uhr). |
13.01.2014, 17:02 | #9 (permalink) |
Registriert seit: 15.05.2012
Beiträge: 27
|
Vielen Dank dafür.
Jetzt bin ich schon ein ganzes Stück weiter (nicht nur in diese Script hier, sondern allgemein). Werde heute abend leider nicht dazu kommen, das ganze zu testen, da mein Weibchen heute ein wenig aufmerksamkeit haben möchte Aber werde es die Tage ausprobieren und anschließend hier berichten. Habe ja jetzt 2 Versionen des "Heli-Evac-Scripts", einmal von JanIs (per Email) und einmal von Drunken Officer. Wenn das alles klappt, muss ich's nur noch hinbekommen das LifeFeed(PiP) auf dem Laptop (oder einem Schild, Tafel, o.ä.) darzustellen und nicht als Minibildschirm im eingenen Screen. Siehe: PIP - Livefeed - Hilfe Jungs ^^ |
13.01.2014, 20:12 | #10 (permalink) |
Registriert seit: 02.11.2010
Beiträge: 113
|
@Drunken Officer
Dein Script hat IMHO einen kleinen Fehler drin. Anstatt: Code:
waitUntil {{_x in _hubi;} forEach units group player}; Code:
waitUntil {{_x in _hubi} count units group player == count units group player};}; Ansonsten läuft es einwandfrei. Just my 2 Cents Greetz Jan |
13.01.2014, 20:58 | #11 (permalink) |
Registriert seit: 15.05.2012
Beiträge: 27
|
Hey Jungs,
also das Heli-Evac-Script läuft einwandfrei in der aktuellen Fassung sieht es wie folgt aus: Code:
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SCRIPT by DrunkenOfficer, JanIs, b0rnkilla - - - - - - vielen Dank für die große Unterstützung an - - - - - - - - - - DrunkenOfficer und Janis - - - - - - - - */ - - - - - - - - - - - - - - - - - - - - - - - - - - private ["_wp0", "_wp1", "_pos", "_lz","_heli"]; if (isNil "heli_unterwegs") then {heli_unterwegs = false}; if (heli_unterwegs) exitWith { sleep 1 + (random 2); evac_heli sideRadio "evac3"; evac_heli globalchat localize "STR_EVAC_DENIED"; }; _heli = _this select 0; _lz = getPos _heli; _pos = getPos Player; heli_unterwegs = true; _heli setfuel 1; sleep 1 + (random 2); evac_heli sideRadio "evac1"; evac_heli globalchat localize "STR_EVAC_REQUEST"; sleep 4 + (random 3); evac_heli sideRadio "evac2"; evac_heli globalchat localize "STR_EVAC_ACCEPT"; _wp0 = group _heli addwaypoint [_pos, 0]; _wp0 setwaypointtype "MOVE"; _heli setCombatMode "blue"; _heli setBehaviour "SAFE"; _heli allowfleeing 0; waitUntil {_heli distance _pos < 500}; "SmokeShellGreen" createVehicle _pos; waitUntil {_heli distance _pos < 150}; _heli setspeedMode "LIMITED"; _heli land "GET IN"; waitUntil {getpos _heli select 2 < 5}; _heli flyinHeight 2; waitUntil {{_x in _heli;} forEach units group player}; _wp1 = group _heli addWaypoint [_lz,1]; [group _heli, 1] SetWaypointType "move"; _heli setspeedMode "normal"; _heli flyinHeight 100; waitUntil {_heli distance _lz < 150}; _heli setspeedMode "LIMITED"; _heli land "LAND"; waitUntil {isTouchingGround _heli}; {_x action ["getOut", _heli];} forEach units group player; _heli action ["engineOff", _heli]; deleteWaypoint [group _heli , 0]; deleteWaypoint [group _heli , 1]; heli_unterwegs = false; Ein Soldat (soldat2) soll zu mir rüber laufen. Den Befehl dazu bekommt er über ein addAction-Command, der an einem Objekt (laptop) durch einen Spieler ausgelöst wird. Schaut's euch mal an: Init.sqf - Eintrag: Code:
laptop addAction["<t color='#000000'>Komm her, Soldat!</t>","lauf.sqf", soldat]; Code:
private ["_wp0","_pos","_soldat"]; _soldat = _this select 2; _soldat = leader _soldat; _pos = getPos Player; sleep 1 + (random 2); soldat2 sidechat localize "STR_ONMYWAY"; sleep 1; _wp0 = group _soldat addwaypoint [_pos, 0]; _wp0 setwaypointtype "MOVE"; _soldat setCombatMode "blue"; _soldat setBehaviour "SAFE"; _soldat allowfleeing 0; sleep 1; soldat2 sidechat localize "STR_W_F_ORDERS"; soldat2 action ["salute", soldat2]; sleep 1; soldat2 action ["salute", soldat2]; |
13.01.2014, 21:00 | #12 (permalink) |
Registriert seit: 15.05.2012
Beiträge: 27
|
Ouw... danke JanIs, für den Hinweis (den Scriptbefehl hatte du ja bereits in deiner Version verwendet^^) werde dies noch abändern. |
13.01.2014, 23:53 | #13 (permalink) |
Registriert seit: 15.05.2012
Beiträge: 27
|
Soooo....
den Fehler in der "lauf.sqf" hab ich selbst gefunden und das ganze mit den Arrays habe ich nun verstanden! eeeeeeendliiiich hier nur zur Info wie die "lauf.sqf" jetzt ausschaut: Code:
//Test-Script, um Soldat2 via addAction am Laptop zum Player laufen zu lassen. //by b0rnkilla private ["_wp0","_pos","_soldat","_grp"]; _soldat = _this select 2; _pos = getPos Player; _grp = group soldat2; sleep 1 + (random 2); soldat2 sidechat localize "STR_ONMYWAY"; sleep 1; _wp0 = _grp addwaypoint [_pos, 0]; _wp0 setwaypointtype "MOVE"; _grp setCombatMode "blue"; _grp setBehaviour "SAFE"; _grp setspeedMode "FULL"; _grp allowfleeing 0; sleep 1; waitUntil {soldat2 distance player < 8}; soldat2 sidechat localize "STR_W_F_ORDERS"; soldat2 action ["salute", soldat2]; sleep 2; soldat2 action ["salute", soldat2]; Der Thread kann jetzt geschlossen werden |
14.01.2014, 11:33 | #14 (permalink) |
Registriert seit: 02.11.2010
Beiträge: 113
|
Naja eigentlich war es deine Wegpunktversion. Ich wusste ja nicht, dass du lieber die gescriptete Version hättest. Aber egal, Hauptsache es läuft jetzt alles wunschgemäß. |
04.05.2014, 00:46 | #15 (permalink) |
Registriert seit: 28.06.2013
Ort: Franken
Beiträge: 23
|
Ich hab mal versucht euer script in eine Test mission zu packen und hab noch bissl dran rum geschraubt
Steam Workshop :: z_Heli_evacuation_test das was hier oben als Verbesserung rein gesetzt wurde... hat glaub ich einen fehler. Code:
waitUntil {{_x in _hubi} count units group player == count units group player};}; Code:
waitUntil {{{_x in _hubi} count units group player == count units group player};};
__________________
My Youtube Gaming Chanel: http://www.youtube.com/user/LtKeller1 visit us on our Arma 3 Server: sAHVg GameServer |
04.05.2014, 10:31 | #16 (permalink) |
Registriert seit: 15.05.2011
Beiträge: 1.109
|
Jo ich habe da auch weiter gebaut. Meine aktuelle Version, fordert einen Wurf einer Rauchgranate. Es kann wahlweise nach Hause geflogen werden bzw eine neu Lz gewählt werden. Baue gerade noch den Dialog ein.
Die 2. Klammer am Ende ist nutzlos. WaitUntil wird bereits mit der ersten klammer geschlossen. Also die 2. Löschen Geändert von Drunken Officer (04.05.2014 um 10:37 Uhr). |
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
|
|
Ähnliche Themen | ||||
Thema | Autor | Forum | Antworten | Letzter Beitrag |
Script hilfe gesucht (RP Server) | G00DPiXel | Editing & Scripting | 0 | 21.08.2013 17:16 |
Motorrad config.cpp/modell.cfg Hilfe | Q_W_E_R | Mods & Addons | 15 | 29.05.2013 22:03 |
Hilfe bei Nachtsichtgerät | xsnake02x | Editing & Scripting | 3 | 13.03.2013 13:02 |
Neuling brauch Hilfe | Joghurt | Multiplayer Community | 1 | 02.11.2010 22:42 |