ArmA2Base.de

ArmA2Base.de - News, Mods, Addons und Missionen für ArmA2 - Operation Arrowhead - Combined Operations - British Armed Forces - Private Military Company

Logo ArmA2Base.de
Freitag, 20. Oktober 2017
Start Einloggen Einloggen Die Mitglieder Das Foren-Team Suchfunktion
19983 Beiträge & 2933 Themen in 35 Foren
Keine neuen Beiträge, seit Ihrem letzten Besuch am 20.10.2017 - 18:00.
  Login speichern
Forenübersicht » ArmA 2 Editing » Editing & Scripting » Unitcapture/-play und Scriptingfrage

vorheriges Thema   nächstes Thema  
5 Beiträge in diesem Thema (offen) Seiten (1): (1)
Autor
Beitrag
Padi ist offline Padi  
Unitcapture/-play und Scriptingfrage
116 Beiträge -

Warrant Officer
Guten Abend,

Ich hätte mal eine Frage zu der Unitcapture/-play Funktion.
Und zwar wüsste ich gerne, ob es möglich ist, einen Flug so aufzuzeichnen, dass ich einige Abfragen einbauen kann, die festlegen, wann der Heli das nächste Teilstück fliegt.

Konkret soll der Heli die Truppen absetzen, warten, bis alle ausgestiegen sind, und dann weiterfliegen.
Ebenso soll er die Truppen erst wieder aufnehmen, wenn er per Funk angefordert wird sowie auch erst wieder starten, wenn das Einsatzteam vollzählig an Bord ist.

Zusätzlich stehe ich zurzeit bei meinen Scriptingbemühungen trotz SQF-Guide auf dem Schlauch.

Das ist meine ursprüngliche Idee:

private["_hostage"];
private["_guards"];
_hostage = [g1];
_guards = [e1,e2];


if (alive _hostage) && (!alive _guards);
then
{(_hostage setCaptive false); ([_hostage] join grpNull); ([_hostage] join Angriffstrupp); ([_hostage] enableAI "ANIM"); (player removeaction 0)};
else
{(player removeaction 0)};


Hier wird mir ein Fehler in Zeile 7 angezeigt, den ich aber nicht lokalisieren kann. Er soll direkt vor dem "if" sein.

Dann habe ich es nach Studium des Guides umgeschrieben, um ohne neue Variablen auszukommen.
Dabei ist das herausgekommen:

if (alive g1) && (!alive e1) && (!alive e2)
then
{(g1 setCaptive false); ([g1] join grpNull); ([g1] join Angriffstrupp); ([g1] enableAI "ANIM"); (player removeaction 0)}
else
{(player removeaction 0)};


Hier soll der Fehler in Zeile 1 vor dem ersten "&&" sein.

Dieses Problem hält mich in verschiedenen Ausprägungen leider inzwischen 1 Woche auf und deshalb habe ich mich nun entschlossen, die hier versammelte Intelligenz und Fachkunde zu fragen, da ich das Feature auf jeden Fall in der Mission haben möchte.

Danke im Voraus
Beitrag vom 10.05.2015 - 21:45
Diesen Beitrag melden   nach weiteren Posts von Padi suchen Padi`s Profil ansehen Padi eine private Nachricht senden Padi zu Ihren Freunden hinzufügen zum Anfang der Seite
Entzypos ist offline Entzypos  
1 Beitrag - Private
Zu unit capture, währe am einfachsten wenn du deinen Flug immer einzelt aufzeichnimst.
Also:




Zitat

FlugLanden = [coords];
FlugWeiterFliegen = [coords];

[heli, Fluglanden] spawn Bis_fnc_Unitplay;

sleep DeineFlugzeit;

waituntil {
{_x in heli} count units GroupName == 0
};

[heli, FlugWeiterFliegen] spawn Bis_fnc_Unitplay;





Truppen wieder aufnehmen:
Zitat

FlugAufnehmen = [coords];
FlugEnde = [coords];

[heli, FlugAufnehmen ] spawn Bis_fnc_Unitplay;

waituntil {
{_x in heli} count units GroupName == count units GroupName
};

[heli, FlugEnde] spawn Bis_fnc_Unitplay;
]



Nicht probiert sollte aber nach meiner logic gehen Grübel
achja
Zitat

{_x in veh} count units GroupName == 0


ist von
http://www.kylania.com/ex/?p=50

Zu deinem 2 fall

Zitat


if (alive g1 && !alive e1 && !alive e2)
then
{(g1 setCaptive false); ([g1] join grpNull); ([g1] join Angriffstrupp); ([g1] enableAI "ANIM"); (player removeaction 0)}
else
{(player removeaction 0)};




Der fehler wahr die fehlende klammer ausenrum. Wink




Dieser Beitrag wurde 2 mal editiert, zuletzt von Entzypos am 21.06.2015 - 21:38.
Beitrag vom 21.06.2015 - 21:37
Diesen Beitrag melden   nach weiteren Posts von Entzypos suchen Entzypos`s Profil ansehen Entzypos eine E-Mail senden Entzypos eine private Nachricht senden Entzypos zu Ihren Freunden hinzufügen zum Anfang der Seite
Padi ist offline Padi  
116 Beiträge -

Warrant Officer
Vielen Dank für die Antwort.
Ich werde es ausprobieren, wenn ich wieder Zeit habe und mich dann wieder melden.
Beitrag vom 22.07.2015 - 14:07
Diesen Beitrag melden   nach weiteren Posts von Padi suchen Padi`s Profil ansehen Padi eine private Nachricht senden Padi zu Ihren Freunden hinzufügen zum Anfang der Seite
Padi ist offline Padi  
116 Beiträge -

Warrant Officer
Du hattest in deiner Korrektur einen kleinen Fehler übersehen.

In Zeile 3 steht:
Zitat
{(g1 setCaptive false); ([g1] join grpNull); ([g1] join Angriffstrupp); (g1 enableAI "ANIM"); (player removeaction 0)}



An der markierten Stelle hatte ich "g1" noch extra in eckige Klammern gesetzt, sodass es nicht funktioniert hat.
Hab ich durch die .rpt rausgefunden und korrigiert. Jetzt funktioniert die Geiselbefreiung zumindest meistens.

Zitat
(g1 removeaction 0)}
else
{(g1 removeaction 0)};



Und hier musste ich "player" durch "g1" ersetzen.

Es kommt aber noch eine Nachfrage:

Das habe ich aus dem Editing Guide und möchte es einbauen. Da ich die SQS in SQF Konversion nicht beherrsche wollte ich es erstmal im SQS-Format einbauen. Ich habe es also nach Vorlage eingebaut und habe nur die Einheitennamen im Friends-Array angepasst.

Zitat
Hier mal ein Beispiel, wie man es umsetzen kann, dass sich Einheiten ergeben, wenn
bestimmte Bedingungen erfüllt sind. Bedingungen könnten sein, das die Einheit weniger
Munition hat als vordefinierter Wert, mehr verletzt ist als vordefinierter Wert oder im
Bereich weniger verbündete Einheiten als vordefinierter Wert sind.
Diese lassen sich nun bündeln, damit sicht nicht jede Einheit gleich ergibt, obwohl noch
genügend Verbündete in der Nähe sind. Es müssen also mehrere Bedingungen erfüllt
sein, bevor sich die Einheit ergibt. Als Beispiel:
?!(canStand _enemy) AND (_ammo < _AmmoStat) : goto "PutDown"
Hier wäre die Bedingung wenn “Einheit nicht mehr stehen kann” und zusätzlich, wenn
“Munitionsstatus kleiner als vorgegebener Wert ist”. Sind beide erfüllt, würde das Skript
zum Label PutDown springen und die Einheit sich ergeben. Im Beispielskript wurden
unter dem Label Check mehrere gemischte Bedingungszeilen untereinander gesetzt.
Trifft eine davon zu, wird sich die Einheit ergeben.
Doch jetzt noch was Besonderes. In der Realität ergeben sich Soldaten manchmal und
greifen plötzlich doch wieder zur Waffe oder haben gar noch eine Waffe irgendwo in der
Tasche. Andere wiederum geben ganz auf. Dieses Skript ermöglicht es dies flexibel zu
definieren. Man kann festlegen, dass die Einheit sich wirklich ergibt oder auch, dass die
Einheit irgendwann versucht zu fliegen. Es kann zusätzlich sogar noch definiert werden,
ob alle Waffen gelöscht werden sollen oder gar noch eine vorhanden bleiben soll.
Wenn sich eine Einheit nun ergibt, legt sie ihre Primär- sowie Sekundärwaffe ab und legt
die Hände hinter den Kopf. Wurde definiert, dass die Einheit fix stehen bleiben soll,
passiert nichts weiter. Wurde definiert, dass die Einheit abhauen soll, kann es passieren
dass sie, wenn nicht alle Waffen gelöscht wurden, zurückschießt oder gar eine
Handgranate wirft. Es kommt sogar vor, dass sich die Einheit an einer Leiche neu
bewaffnet. Die KI wird Dank setCaptive nicht auf kapitulierte Einheiten schießen, außer
sie haut ab oder greift wieder zur Waffe, dann sieht das schon ganz anders aus.
Verwendet man in dem Auslösearray feste Werte, dann weiß man genau, dass sich eine
Einheit ergibt, wenn sie beispielsweise nicht mehr stehen kann und weniger als
vordefinierte Munition hat. Versieht man den Auslösearray aber mit Randomwerten, so
kann man gar nicht vorhersagen wie die einzelne Einheit reagieren wird.
Der Auslösearray
Der Auslösearray erklärt sich hierbei wie folgt
[Name,Fluchtwert,Munition,Verletzt,Waffenweg,Fix,Freunde,Ber eich]
Hier ein Beispiel mit der Verwendung fester Werte:
[this,0.5,1,0.5,0,0,3,150]
Hier ein Beispiel mit der Verwendung einiger variabler Werte:
[this,random 0.7,2,random 1,random 1.5,random 2,6+(random3),200]
6.23 - Einheit ergibt sich
219
Kapitel 6
Diese Werte, egal ob fix oder variable, werden dann an das Skirpt übergeben. Natürlich
muss dieses noch hinter den Array angegeben werden. Die Auslösesyntax lautet dann:
[this,0.5,1,0.5,0,0,3,200] exec "capitulation.sqs";
Arraydefinitionen
Name - Name der Einheit. In der Initzeile auch this möglich.
Fluchtwert - Fluchtwert der Einheit, welche eine der Bedingungen darstellt.
Munition - Mindestwert an Munition der zum Ergeben erreicht sein muss.
Verletzt - Mindestwert der Verletzung der zum Ergeben erreicht sein muss.
Waffenweg - Alle Waffen löschen oder nicht. Wert 1 löscht alle. Bis 0.9 erhält die Waffen.
Durch Radomwert random 1.5 ungewiss. Ab >=1 sind die Waffen weg.
Randomwert sollte nicht größer als 1.5 sein!
Fix - Einheit bleibt nach Ergeben definitiv an der Stelle stehen stehen.
Werte <= 1 fixiert die Einheit, Werte <=2 gibt Fluchtmöglichkeit.
Im Variablebeispiel wurde random 2 definiert. Also Ungewissheit.
Freunde - Wie viele Verbündete sind mindestens noch im Bereich. Wird der Wert
unterschritten, ist die Bedingung erfüllt. Im Beispiel wurde hier der Wert
6+(random3) verwendet. Also mindestens 6 plus Zufallswert.
Im Skipt wurden Osteinheiten definiert. Möchte man eine andere Seite
anlegen, muss man dort die Soldaten- und Fahrzeugklassen der Seite
angeben.
Bereich - Bereich, welcher geprüft werden soll in Metern. Sind in dem Bereich
keine der definierten vorhanden, ist eine weitere Bedingung erfüllt.
Einzelne Einheit
Möchte man nur eine einzelne Einheit mit dem Skript belegen, so schreibt man die
Auslösesyntax in die Initzeile der Einheit und definiert die gewünschten Werte.
[this,0.5,1,0.5,0,0,3,200] exec "capitulation.sqs";
Einheiten in einem Bereich
Mit folgender Auslösesyntax lösen alle Einheiten eines Auslöserbereiches einzeln das
Skript aus. Durch Verwendung der Randomwerte verhält sich nun jede Einheit anders.
Auslöser:
Aktivierung: Ost
Einfach
Achse a/b: beliebig
bei Aktivierung: {[_x,random 0.7,2,random 1,random 1.5,random 2,6,200]
exec "capitulation.sqs"} forEach thislist
220
Dieses Thema lässt sich unendlich ausweiten und auch die Bedingungen bis ins kleinste
Detail festlegen, aber irgendwo muss ja mal eine Grenze sein.
?(!(local server)):exit
_Enemy = _this select 0
_Fleeing = _this select 1
_AmmoStat = _this select 2
_Injurned = _this select 3
_Removeall = _this select 4
_Standfix = _this select 5
_friendly = _this select 6
_Area = _this select 7
_Enemy allowFleeing _Fleeing
#Check
? not alive _enemy : exit
_ammo = count magazines _enemy
_dammage = getdammage _enemy
;Folgende drei Zeilen stellen eine lange Zeile dar! Klassen bei Bedarf ergänzen.
_friends = count nearestObjects [_enemy,
["SoldierEAA","SoldierEAT","SoldierECrew","SoldierEMiner","SoldierEG", "SoldierEMG",
"SoldierEMedic","SoldierESniper","SquadLeaderE","T72","BMP2","UAZMG","ZSU "], _area]
;Folgende zwei Zweierzeilen stellen je eine lange Zeile dar. Also goto hinter die :
? (_friends < _friendly) AND (_ammo < _AmmoStat) AND (_dammage > _Injurned) :
goto "PutDown"
? (_ammo < _AmmoStat) AND (_dammage > _Injurned) AND (_Fleeing > 0.6) :
goto "PutDown"
~5
goto "Check"
#PutDown
_enemy action ["DROPWEAPON", _enemy, primaryWeapon _enemy]
~1
playSound "Dont-shoot"
_enemy action ["DROPWEAPON", _enemy, secondaryWeapon _enemy]
~2
? _Removeall >= 1 : removeallWeapons _enemy
_enemy playMove "AmovPercMstpSsurWnonDnon"
~1
? _standfix <= 1 : goto "Standfix"
? _standfix <= 2 : goto "Fleeing"
exit
#Standfix
_enemy disableAI "ANIM"
_enemy setCaptive true
#Fleeing
_enemy disableAI "ANIM"
_enemy setcaptive true
~30 + (random 60)
_enemy enableAI "ANIM"
_enemy allowFleeing _Fleeing
_enemy setCaptive false
exit




Problem: Die Einheiten ergeben sich direkt nach Spielstart. Egal, ob ich das Script per Auslöser oder per Init eingebunden habe.

Gibt es dafür vielleicht eine zeitgemäßere und/oder einfach anpass- und erweiterbare Variante. Denn ich möchte die Bedingungen erweitern und verfeinern, wenn es läuft, damit das Aufgeben wirklich individuell vorgeht.

Falls es zur Lösung behilflich ist würde ich dir die Missionsstücke zukommen lassen, damit du alles nachvollziehen kannst.

Vielen Dank im Voraus


Dieser Beitrag wurde 1 mal editiert, zuletzt von Padi am 02.08.2015 - 17:16.
Beitrag vom 31.07.2015 - 01:58
Diesen Beitrag melden   nach weiteren Posts von Padi suchen Padi`s Profil ansehen Padi eine private Nachricht senden Padi zu Ihren Freunden hinzufügen zum Anfang der Seite
Padi ist offline Padi  
116 Beiträge -

Warrant Officer
Ich habe inzwischen nach sehr vielen Fehlversuchen die richtige Lösung gefunden.

heli1 engineon true;
hin = [] call Hinflug_heli1;
nul=[] spawn { waitUntil {s1 in heli1};
nul = [] execVM "scripts\team_abgeholt.sqf";
rueck = [] call Rueckflug_heli1;};


Vielleicht hilft das anderen...
Beitrag vom 27.11.2016 - 13:04
Diesen Beitrag melden   nach weiteren Posts von Padi suchen Padi`s Profil ansehen Padi eine private Nachricht senden Padi zu Ihren Freunden hinzufügen zum Anfang der Seite
Baumstruktur - Signaturen verstecken
Seiten (1): (1) vorheriges Thema   nächstes Thema

Gehe zu:  
Es ist / sind gerade 0 registrierte(r) Benutzer und 157 Gäste online. Neuester Benutzer: wq123
Mit 6412 Besuchern waren am 19.05.2013 - 17:33 die meisten Besucher gleichzeitig online.
Alles gute zum Geburtstag    Wir gratulieren ganz herzlich zum Geburtstag:
oli23xx (36)
Aktive Themen der letzten 24 Stunden | Foren-Topuser
 
Aktuelle News, Mods, Addons und Missionen für ArmA2.
Seite in 0.04953 Sekunden generiert


Diese Website wurde mit PHPKIT WCMS erstellt
PHPKIT ist eine eingetragene Marke der mxbyte GbR © 2002-2012