Armed-Assault.de Twitter
Antwort
 
Themen-Optionen Ansicht
Alt 01.03.2016, 13:33   #1 (permalink)
Newbie
 
Registriert seit: 10.01.2015
Beiträge: 10
Standard Wegpunkt Condition

Hallo Leute, ich bin es mal wieder.

Ich habe ein kleine Mission erstellt und genau das ende will einfach nicht klappen. Und zwar habe ich ein Heli der angeflogen kommt und landet. Ein Squad aus 1-4 spieler steigt dann ein der heli soll wegfliegen, aber erst wenn auch alle drin sind.

Hier mal die Reihenfolge der Waypoints.
0: LOAD
1: MOVE(hier muss doch eine Condition gesetzt werden oder?

Hier die Condition:

Code:
((isNull p1) AND (!alive p1) OR (p1 in h1)) AND 
((isNull p2) AND (!alive p2) OR (p2 in h1)) AND 
((isNull p3) AND (!alive p3) OR (p3 in h1)) AND 
((isNull p4) AND (!alive p4) OR (p4 in h1))

p1 bis p4 sind meine Spielbaren Charaktere, wobei p1 der "Player" ist.
Ich will halt auf nummer sicher gehen das der Heli erst weg fliegt wenn alle Einheiten drin sind. Dazu muss der ja checken ob die Einheit existiert und wenn ja, ob diese tot ist oder schon im Heli.

Hab schon isNil sowie oben zu sehen isNull ausprobiert.

Tipps, Ratschläge? Danke im voraus

MfG
Heisenberg
Heisenberg ist offline   Mit Zitat antworten
Alt 01.03.2016, 14:07   #2 (permalink)
500 Beiträge1000 Beiträge
 
Benutzerbild von Cartman
 
Registriert seit: 07.07.2014
Ort: nähe Hamburg
Alter: 36
Beiträge: 1.148
Standard

Ich nutze immer das hier:

Code:
if (!isServer) exitWith {};




heli1 = createVehicle ["UK3CB_BAF_Wildcat_Transport_RN_ZZ396", getPos helistart1, [], 100, "FLY"];
sleep 0.1;
_Grph1 = Creategroup WEST;
_Unit1= "B_mas_uk_Helipilot_F" createUnit [getPos heli1, _Grph1,"unith1 = this", 1, "corporal"];
_Unit2= "B_mas_uk_Helicrew_F" createUnit [getPos heli1, _Grph1,"unith2 = this", 1, "corporal"];
sleep 0.1;

//Setzt Pilot in Heli
unith1 moveinDriver heli1;
unith1 setCaptive true;

unith2 moveingunner heli1;
unith2 setCaptive true;

heli1 allowfleeing 0;
heli1 allowdamage false;


//Wegpunkt #1
_waypoint0 = _Grph1 addwaypoint[getpos helih1,100];
_waypoint0 setWaypointType "move";
_waypoint0 setWaypointBehaviour "STEALTH";
_waypoint0 setWaypointCombatMode "blue";

//Warten bis und Landen
waituntil {(heli1 distance helih1 < 300)};
heli1 land "helih1";
waituntil {(getpos heli1 select 2 < 1)};
sleep 3;
heli1 engineOn true;




//Warten bis s1 in Heli dann abflug	
waituntil {(a1 distance heli1 < 5)};
sleep 5;
heli_1 = true;
publicVariable "heli_1";
sleep 5;
_waypoint1 = _Grph1 addwaypoint[getpos helistart2,10];
_waypoint1 setWaypointType "move";
_waypoint1 setWaypointBehaviour "STEALTH";
_waypoint1 setWaypointCombatMode "blue";


sleep 5;
_waypoint2 = _Grph1 addwaypoint[getpos helih2,10];
_waypoint2 setWaypointType "move";
_waypoint2 setWaypointBehaviour "STEALTH";
_waypoint2 setWaypointCombatMode "blue";


waituntil {(heli1 distance helih2 < 300)};
heli1 land "helih2";
sleep 3;
Classnames der Helis und Besatzung muss man natürlich anpassen. Die Positionen sind unsichtbare Helipads, die ich vorher place.

A1 ist der Name des Gruppenführers. Ich sag vor der Mission immer an, dass der Gruppenführer als letztes aufsitzen soll. Macht die Sache etwas einfacher.

So kannst Du die Abholung spawnen und musst das nicht vorher placen und mit Wegpunkten arbeiten. Einfach nen Auslöser über der EZ und die Bedingung auf "this && isServer".

Was die Anfrage angeht, bin ich da mit meinen beschränkten Kenntnissen auch überfragt. Würde mich auch mal Interessieren.
__________________
Come for ArmA, stay for drama
Cartman ist offline   Mit Zitat antworten
Alt 01.03.2016, 19:40   #3 (permalink)
50 Beiträge100 Beiträge250 Beiträge
 
Registriert seit: 10.10.2006
Beiträge: 263
Standard

Code:
((!alive p1) or (p1 in h1)) and ((!alive p2) or (p2 in h1)) and ((!alive p3) or (p3 in h1))
Wichtig dabei ist die Klammer setzung damit er Entweder Lebt P1 oder er ist im h1 drine. danach überprüft er ob der p2 und p3 immer in den Gruppen wenn nun alle 3 True sind also Wahr macht er weiter.

Die Überprüfung erfolgt am Ende. Also er geht zu den WP Überprüft ist es erfüllt und geht weiter zum Nächsten. Also muss es Wahrscheinlich bei Load bei dir rein. Sonst fliegt er erst los und Fragt dann ab.
Nokman ist offline   Mit Zitat antworten
Alt 01.03.2016, 19:52   #4 (permalink)
500 Beiträge1000 Beiträge
 
Benutzerbild von Drunken Officer
 
Registriert seit: 15.05.2011
Beiträge: 1.109
Standard

Öhm, wenn du mit WP im Editor arbeits, warum nicht einfach die Wegpunkte des Trupps und des Helis syncronisieren?

Handelt es sich um eine Singleplayer-Mission?
Sind p1 bis p4 am Leben zu diesem Zeitpunkt oder kann es bereits Ausfälle geben?

so aus dem Bauch heraus würde ich folgenden Code in die Condition des Helis-WP bei der Aufnahmestelle schreiben:

Edit: code geändert, war im Original falsch

{_x in (vehicle this)} count units group p1 == count units group p1
Ich meine, dass eine tote Einheit nicht der Gruppe zugerechnet wird



@Cartman
paar Tipps

_heliarray= [getPos helistart1, random 360, "UK3CB_BAF_Wildcat_Transport_RN_ZZ396", RESISTANCE] call bis_fnc_spawnvehicle; _heli = heliarray select 1; // Fahrzeug ist jetzt ansprechbar als _heli
bei dieser Funktion sind die Crewmitglieder schon drin.

Alternativ gibt es zu deiner Variante den spawnVehilceCrew als Befehl. Dann sind die sofort im Fahrzeug.


waituntil {sleep 5; (a1 distance heli1 < 5)};
--> löschen --> sleep 5;
heli_1 = true; publicVariable "heli_1"; -> -> missionNameSpace setVariable ["heli_1", true]

Du brauchst zwischen den Wegpunkten kein sleep setzen.
__________________
Bewegende Momente bei ArmA 3

Geändert von Drunken Officer (03.03.2016 um 09:49 Uhr).
Drunken Officer ist offline   Mit Zitat antworten
Alt 02.03.2016, 09:30   #5 (permalink)
500 Beiträge1000 Beiträge
 
Benutzerbild von Cartman
 
Registriert seit: 07.07.2014
Ort: nähe Hamburg
Alter: 36
Beiträge: 1.148
Standard

Zitat von Drunken Officer Beitrag anzeigen

@Cartman
paar Tipps

_heliarray= [getPos helistart1, random 360, "UK3CB_BAF_Wildcat_Transport_RN_ZZ396", RESISTANCE] call bis_fnc_spawnvehicle; _heli = heliarray select 1; // Fahrzeug ist jetzt ansprechbar als _heli
bei dieser Funktion sind die Crewmitglieder schon drin.

Alternativ gibt es zu deiner Variante den spawnVehilceCrew als Befehl. Dann sind die sofort im Fahrzeug.


waituntil {sleep 5; (a1 distance heli1 < 5)};
--> löschen --> sleep 5;
heli_1 = true; publicVariable "heli_1"; -> -> missionNameSpace setVariable ["heli_1", true]

Du brauchst zwischen den Wegpunkten kein sleep setzen.

Das mit der Crew kenne ich, aber ich finde es ganz nett, dass ich selbst aussuchen kann, wer drin sitzt.

Ist sonst aber auch nicht mein Script, ich habe das zu A2 Zeiten von Dirty Harry übernommen.

Werde die Änderungen mal übernehmen. Danke dafür.
__________________
Come for ArmA, stay for drama
Cartman ist offline   Mit Zitat antworten
Alt 02.03.2016, 12:33   #6 (permalink)
Newbie
 
Registriert seit: 10.01.2015
Beiträge: 10
Standard

Das ist eine SP Co-Op mission. Also alleine oder mit bis zu 3 anderen Spielern. keine KI Spieler. Deswegen gibt es keine Wegpunkte die ich mit dem des Helis syncen kann.

Danke für die Tipps. Werde die mal testen und mich dann melden.
Heisenberg ist offline   Mit Zitat antworten
Alt 02.03.2016, 14:00   #7 (permalink)
Newbie
 
Registriert seit: 10.01.2015
Beiträge: 10
Standard

Der Tipp von Nokman ging nicht. der Heli landet und fliegt dann direkt wieder los, ohne zu warten ob einheiten drin sind. Hab die Condition in beiden Wegpunkten probiert.

Beim Code von Drunken Officer kommt eine Fehlermeldung.
Condition: Type Nothing, expected Bool

Cartman: Muss ich dein Skript in eine .sqf datei speichern und die in der init.sqf datei nennen? KAnn das skript dann ja über ein Trigger aufrufen, oder?
Heisenberg ist offline   Mit Zitat antworten
Alt 02.03.2016, 14:24   #8 (permalink)
500 Beiträge1000 Beiträge
 
Benutzerbild von Cartman
 
Registriert seit: 07.07.2014
Ort: nähe Hamburg
Alter: 36
Beiträge: 1.148
Standard

Jo, muss als .sqf abgespeichert werden. Der Trigger muss die Bedingung "this && isServer" haben, damit der Heli nur einmal gespawnt wird und nicht für jeden Spieler. Außerdem musst Du eine Spiellogik erstellen und die Server nennen.

Die Positionen sind bei mir unsichtbare Helipads. Die einfach helistart, helih1 und helih2 nennen. Beim ersten wird der Heli gespawnt, beim zweiten holt er ab (Evac), beim dritten landet er (Base).

Wenn ich nen größeren Heli mit ner Rampe benutze, baue ich auch noch die Animationsbefehle für die Rampe mit ein, dann öffnet und schließt er automatisch die Rampe.

P.S. Der Heli wird für die Fraktion WEST erstellt. Das musst Du natürlich ändern, wenn Du Opfor spielst. Außerdem setze ich die danach auf setcaptive und den Heli auf allowDamage false, damit er nicht beschossen wird und nicht kaputt geht. Da musst anpassen, wenn Du das nicht möchtest.
__________________
Come for ArmA, stay for drama

Geändert von Cartman (02.03.2016 um 14:28 Uhr).
Cartman ist offline   Mit Zitat antworten
Alt 02.03.2016, 19:26   #9 (permalink)
500 Beiträge1000 Beiträge
 
Benutzerbild von Drunken Officer
 
Registriert seit: 15.05.2011
Beiträge: 1.109
Standard

Zitat:

Beim Code von Drunken Officer kommt eine Fehlermeldung.
Condition: Type Nothing, expected Bool

Mein Fehler! Mein erster Code wirft eine Zahl aus.
Die Bool-Abfrage muss lauten:
{_x in (vehicle this)} count units group p1 == count units group p1
__________________
Bewegende Momente bei ArmA 3
Drunken Officer ist offline   Mit Zitat antworten
Alt 02.03.2016, 19:39   #10 (permalink)
500 Beiträge1000 Beiträge
 
Benutzerbild von Drunken Officer
 
Registriert seit: 15.05.2011
Beiträge: 1.109
Standard

Ich habe es z.B. so gemacht. Folgender gedachter Verlauf:
- Team startet in Basis und der Heli (Transe) steht dort bereits.
- Team wird ausgeflogen zu Punkt A
- Team raus, Heli zurück
- Team ist fertig, alle tot, halb Altis in Flammen
- Heli kommt -> alle rein
- Heli fliegt zurück zur Basis
- Bier trinken

Dazu laße ich in der InitServer.sqf u.a. folgenden Aufruf machen:
Code:
_varload = execVM "Variablen\variablen.sqf";
waituntil { sleep 1; scriptdone _varload};
In der Variablen.sqf steht dann folgendes drin:
Code:
DOF_fnc_trnChopper = 
    {
        private ["_lfz", "_gruppe", "_LZ", "_LP", "_wph", "_wpe", "_dof_repair_parts"];
        _lfz = _this select 0;
        _gruppe = _this select 1;
        _LZ = _this select 2;
        _LP = _this select 3;
        _art = _this select 4;
        
        switch (_art) do 
        
        {
            case "rein": 
                            {
                                    //waituntil {sleep 2;{_x in transportheli} count units _gruppe == count units _gruppe };
                                    _wph = (group _lfz) addwaypoint [getMarkerPos _LZ, 0];
                                    _wph setWaypointtype "MOVE";
                                    _wph setWaypointSpeed "NORMAL";
                                    _wph setWaypointBehaviour "SAFE";
                                    _wph setWaypointStatements ["true", "(vehicle this) LAND 'GET OUT';"]; 
                                    waitUntil {sleep 1; _lfz distance getWPPos [(group _lfz), 1] < 1000};    
                                    _wph setWaypointSpeed "LIMITED";
                                    waituntil {sleep 2; {_x in _lfz} count units _gruppe == 0 };
                            };
            case "raus":
                            {
                                    _wph = (group _lfz) addwaypoint [getMarkerPos _LZ, 0];
                                    _wph setWaypointtype "MOVE";
                                    _wph setWaypointSpeed "NORMAL";
                                    _wph setWaypointBehaviour "SAFE";
                                    _wph setWaypointStatements ["true", "(vehicle this) LAND 'GET IN';"]; 
                                    waituntil {sleep 2; {_x in _lfz} count units _gruppe == count units _gruppe };
                            };
        };
                _wpe = (group _lfz) addwaypoint [(getpos _LP), 0];
                _wpe setWaypointStatements ["true", "(vehicle this) LAND 'LAND';"]; 
                waitUntil {sleep 5; isTouchingGround _lfz};
                _lfz action ["engineOff", _lfz];
                _dof_repair_parts = (configfile >> "CfgVehicles" >> typeof _lfz >> "HitPoints") call BIS_fnc_getCfgSubClasses; 
                _lfz setDammage 0; 
                {_lfz setHit [_x, 0] } forEach _dof_repair_parts;
                _lfz setfuel 1;
                _lfz setVehicleAmmo 1;
                            
        
                            
    };
Jetz will ich erreichen, dass der Heli meine Leute zum Einsatzort fliegt.
[Transe, (group p1), "mkr_LZ_rein", helipad1, "rein"] spawn DOF_fnc_trnChopper;

Wenn das ganze über nen Trigger läuft, dann
if (isServer) then { .... };

Jetz will ich erreichen, dass der Heli meine Leute aus dem Einsatzort fliegt.
[Transe, (group p1), "mkr_LZ_raus", helipad1, "raus"] spawn DOF_fnc_trnChopper;
__________________
Bewegende Momente bei ArmA 3

Geändert von Drunken Officer (02.03.2016 um 19:42 Uhr).
Drunken Officer ist offline   Mit Zitat antworten
Alt 02.03.2016, 23:40   #11 (permalink)
Newbie
 
Registriert seit: 10.01.2015
Beiträge: 10
Standard

Ich teste das morgen mal alles aus und melde mich dann.

Hier mal ein grober Ablaufplan der Mission:
-Squad von 1-4 Spieler sitzen in einem Heli der das Team einfliegt
-Squad wird in der Base abgesetzt
-Squad kämpft sich über die Insel, rettet die Jungfrauen, beendet die Mission (Dabei können verluste auftreten, so dass nicht alle die starten auch wieder raus müssen)
-Squad geht zur Evac, dabei wird ein Trigger aktiviert der einen Heli anfliegen und landen lässt
-Squad steigt ein und fliegt in die Heimat

Beim letzten Schritt soll es egal sein in welcher Reihenfolge die Spieler einsteigen. Ich kann auch schlecht als Condition (p1 in heli) nehmen, da vielleicht ein SP nicht den Char auswählt den ich p1 genannt habe.
Heisenberg ist offline   Mit Zitat antworten
Alt 03.03.2016, 09:42   #12 (permalink)
500 Beiträge1000 Beiträge
 
Benutzerbild von Drunken Officer
 
Registriert seit: 15.05.2011
Beiträge: 1.109
Standard

Zum SP:
Wenn du P1 als Spieler setzt, ist das der Chararkter der im Spiel gespielt wird.


Warum läßt du die Spieler nicht einer Gruppe zuweisen und arbeitest dann mit dieser Variable weiter? Ihr versteift euch immer auf einen Charakter.
In die Init von P1: myteam = group this; this setGroupID ["Kampfzwerge"] Das setzt im Multiplayer voraus, dass P1 besetzt ist.
Jeder (Server & Client) weiß jetzt, was "myteam" ist.
Du kannst auch Serversetig eine Gruppe erstellen und die Leute nach Spielbeginn in diese Eintreten lassen. Ich habe das öfters gemacht, denn so umgeht man einen Pflichtslot. Allerdings kann man bei 4 Leuten auf diesen Hokus-Pokus verzichten.
P1 als Pflichtslot nehmen und färtsch. Dazu schreibt man einfach in die Description von P1
"Teamleader (slot required)"

Dann kannst du Arbeiten mit:
{_x in (vehicle this)} count units myteam == count units myteam
__________________
Bewegende Momente bei ArmA 3

Geändert von Drunken Officer (03.03.2016 um 10:02 Uhr).
Drunken Officer ist offline   Mit Zitat antworten
Alt 03.03.2016, 11:28   #13 (permalink)
Newbie
 
Registriert seit: 10.01.2015
Beiträge: 10
Standard

Ich bin da jetzt echt ratlos langsam...so schwer kann das doch nicht sein.

Habe in das init feld von p1 myteam = group this; this setGroupID ["Kampfzwerge"] eingetragen, in das description feld das der Slot benötigt wird und dann noch {_x in (vehicle this)} count units myteam == count units myteam in den zweiten WEgpunkt, also den nach dem Laden.

Der HEli kommt angeflogen, landet und nach paar Sekunden hebt er hab und fliegt zum 2ten WEgpunkt, der ja nur aktiviert werden dürfte wenn die Condition erfüllt wäre. Ist sie nicht, denn kein Spieler oder NPC or whatever sitzt da drin. Darum verstehe ich nicht wieso der HEli dann trotzdem losfliegt.
Heisenberg ist offline   Mit Zitat antworten
Alt 03.03.2016, 13:35   #14 (permalink)
500 Beiträge1000 Beiträge
 
Benutzerbild von Drunken Officer
 
Registriert seit: 15.05.2011
Beiträge: 1.109
Standard

- Den WP mal nicht auf "Laden" setzen, sondern auf "Bewegen".
- in diesen WP schreibst du rein bei akt: (vehicle this) land "GET IN"

Setze den 2. WP mal näher dran.

Edit: gerade getest. Es funktioniert so. Aber trotzdem spinnt es gelegentlich rum. Probiere es mit der Variable. GGf mach ich mal ein Video, wenn ich Zeit ab. Ich muss erstmal Level-Up bei Naval Action machen.
__________________
Bewegende Momente bei ArmA 3

Geändert von Drunken Officer (03.03.2016 um 14:09 Uhr).
Drunken Officer ist offline   Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Flugzeug spawn mit Wegpunkt - Skriptproblem? skydiv Editing & Scripting 4 12.11.2015 04:57
Wegpunkt - transport entladen mani1001 Editing & Scripting 2 08.08.2014 15:04
F-22 Raptor Tunen 8-) Clawhammer Mods & Addons 5 26.02.2013 14:59
Wegpunkt an Einheit heften MagicStyle Editing & Scripting 9 03.10.2012 13:55
Wegpunkt "entlassen": Vorstellung und Problem Asso-Loki Editing & Scripting 0 13.09.2011 18:29


Kontakt - HX3.de - Archiv - Nach oben

Angetrieben durch vBulletin, Entwicklung von Philipp Dörner & Tobias



SEO by vBSEO 3.2.0 ©2008, Crawlability, Inc.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116