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;
};
Display More
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);
};
};
};
};
Display More
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)
Display More
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.
Display More