Code
- // Inhalt von spawnRandomBarrel.sqf
- spawnRandomBarrel = {
- private["_pos", "_propBarrel"];
- // Liste von vorher markierten Punkten
- _spawnPoints = [
- markerPos "barrelSpawn1",
- markerPos "barrelSpawn2",
- markerPos "barrelSpawn3"
- // Füge weitere Marker-Positionen hinzu, wenn nötig
- ];
- // Wähle eine zufällige Position aus der Liste
- _pos = selectRandom _spawnPoints;
- // Erstelle das Fass an der ausgewählten Position
- _propBarrel = "Land_GarbageBarrel_02_buried_F" createVehicle _pos;
- // Führe den Explosionscode für das Fass aus
- [_propBarrel] call fnc_explodeBarrel;
- };
Code
- // Explosionscode für das Fass
- fnc_explodeBarrel = {
- private["_unit", "_pos", "_explosionAgent"];
- _unit = _this select 0;
- _pos = getPosATL _unit;
- // Führe den Explosionscode nur aus, wenn das Fass beschädigt wurde oder zerstört ist
- if ((damage _unit > 0.35) || (getDammage _unit > 0.60) || !alive _unit) then {
- // Lösche das Fass
- deleteVehicle _unit;
- // Erstelle einen Sprengladungs-Auslöser über dem Fass
- _explosionAgent = "DemoCharge_Remote_Ammo" createVehicle [_pos select 0, _pos select 1, (_pos select 2) + 1];
- _explosionAgent setDamage 1;
- // Lösche vorherige Effekte, falls vorhanden
- if (!isNil {_unit getVariable "effects"}) then {
- deleteVehicle (_unit getVariable "effects" select 0);
- deleteVehicle (_unit getVariable "effects" select 1);
- };
- _unit setVariable ["effects", nil];
- } else {
- // Führe Effekte aus, wenn das Fass beschädigt wurde
- if (((damage _unit > 0.20 && damage _unit < 0.35) || (getDammage _unit > 0.25)) && (isNil {_unit getVariable "effects"})) then {
- // Erstelle Feuer- und Raucheffekte
- _fire = "#particlesource" createVehicle [getPosATL _unit select 0, getPosATL _unit select 1, (getPosATL _unit select 2) + 1];
- _fire setParticleClass "ObjectDestructionFire1Tiny";
- _smoke = "#particlesource" createVehicle (getPosATL _unit);
- _smoke setParticleClass "ObjectDestructionRefractSmall";
- _unit setVariable ["effects", [_fire, _smoke]];
- // die Löschung von Effekten und das Auslösen der Explosion nach einer Verzögerung
- [_unit, _fire, _smoke] spawn {
- _unit = _this select 0;
- _pos = getPosATL _unit;
- sleep 7.5;
- // Beende, wenn inzwischen die Effekte gelöscht wurden
- if (isNil {_unit getVariable "effects"}) exitWith {};
- // Lösche das Fass
- deleteVehicle _unit;
- // Erstelle einen Sprengladungs-Auslöser über dem Fass
- _explosionAgent = "DemoCharge_Remote_Ammo" createVehicle [_pos select 0, _pos select 1, (_pos select 2) + 1];
- _explosionAgent setDamage 1;
- // Lösche vorherige Effekte
- deleteVehicle (_this select 1);
- deleteVehicle (_this select 2);
- };
- };
- };
- };
Da ich nicht weiß wie und wo du des aufrufen möchtest hier 2 Vorschläge:
Code
- Option 1: In der Init-Datei (init.sqf)
- Vorteile:
- Die Funktion wird sofort beim Start der Mission aufgerufen.
- Weniger Abhängigkeit von bestimmten Ereignissen während der Mission.
- Nachteile:
- Fässer erscheinen sofort beim Start der Mission.
- // Inhalt von init.sqf
- // ... (andere Initialisierungscodes)
- // Füge dem Event-Handler für das Fass hinzu
- ["Hit", {params ["_unit", "_source", "_damage", "_instigator"]; [_unit] call fnc_explodeBarrel;}] remoteExec ["addEventHandler", 0, objNull];
- // Fass an zufälliger Position spawnen
- spawnRandomBarrel;
- // ... (weitere Initialisierungscodes, falls vorhanden)
Code
- Option 2: In einem Trigger
- Vorteile:
- Du kannst das Erscheinen der Fässer an spezifische Ereignisse oder Bedingungen in der Mission koppeln.
- Nachteile:
- Erfordert die Konfiguration eines Triggers und das Festlegen von Bedingungen.
- Erstelle einen Trigger.
- Setze die Auslöserbedingung nach deinen Wünschen (zum Beispiel "Einheit betritt Bereich").
- In den Auslöser-Effekten füge den Befehl execVM "spawnRandomBarrel.sqf"; hinzu.