Oft hat man in Arma das Problem, dass man bestimmte Teile einer Mission an Trigger binden möchte, was jedoch je nach Aufgabengebiet mühselig bis fehleranfällig sein kann.
Als bekanntestes Beispiel gilt das Zünden von Sprengsätzen über Trigger. Das Ganze hat man vermutlich mit festen Variabeln in Triggern gelöst, aber das ist mühselig und unpraktisch. So geht es einfacher.
Schnelle Sprengsätze
Trigger on Activation::
null = spawn {
bombe_1 setDammage 1;
sleep 2;
bombe_2 setdammage 1;
//usw.
};
Das ist aber bei größeren Feuerwerken einfach ne ganze Menge Arbeit und macht spätestens bei der zweiten IED - Gruppe keinen Spaß mehr. Hier kommen Synchronisierungen ins Spiel:
Wenn du mit F5 die Sprengsätze mit dem Trigger verbindest (Gruppenauswahl, Rechtsklick, Linien zum Trigger ziehen, Einzellinien sind für Arma 2 Nutzer) und in den Trigger folgendes schreibst:
Trigger on Activation::
{
_x setDammage 1;
sleep (round (random 2));
} foreach(synchronizedObjects thisTrigger);
Diese vier Zeilen zerstören mit einem Abstand zwischen 0 - 2 Sekunden jedes Objekt, das mit dem Objekt thisTrigger
, sprich der Trigger an dem ihr arbeitet, verbunden ist. Das Austauschen von thisTrigger
mit dem Namen eines anderen Objektes ist möglich, wobei die Sprengsätze dann selbstverständlich mit diesem verbunden werden müssen.
Schnelle Basen, Anlandungen etc.
Das gleiche Prinzip kann auch für andere Prozesse angewandt werden. Wenn man als Beispiel eine feindliche Anlandung plant und Lufteinheiten in den eigenen Reihen weiß, ist die Aufklärung dieser fertig gebauten, wunderschön gestalteten Basis genau dann fertig, wenn der Jet eine Runde über die Karte gedreht hat. Das Ganze kann man recht simpel umgehen, indem man die Objekte in der Basis mit einem.
if (isServer) then {
hideObjectGlobal this;
};
in der Initzeile ALLER dortigen Objekte für alle Augen unsichtbar macht. Jetzt muss man sich nur überlegen, wann man die Basis sichtbar machen möchte. Das ist eure Aufgabe und hier ist das Wie: Such dir ein Objekt aus/platziere eines und synchronisiere deine Basis damit. Wir nennen dieses Objekt in dem folgenden Beispiel: Synchro_Basis_1
Nun erstellst du einen serverseitigen Trigger, durch den die Basis sichtbar werden soll.
In dessen on Activation schreibst du:
{
_x hideObjectGlobal false;
} foreach(synchronizedObjects Synchro_Basis_1);
deleteVehicle Synchro_Basis_1;
Und damit hast du eine für die Aufklärung noch nicht sichtbare Basis erschaffen. Herzlichen Glückwunsch. Jetzt pass nur auf, dass du den Trigger nicht so setzt, dass
- A: Man sich daran vorbeischleichen kann
- B: Man die Basis sehen könnte, wenn du sie aufdeckst
- C: Einheiten in der Basis weiterhin auf dich schießen und Fahrzeuge auf dem Radar auftauchen