summaryrefslogtreecommitdiffstats
path: root/Client/Module/CM
diff options
context:
space:
mode:
authorhybrid <hybrid@hybridlabs.pro>2026-06-11 19:55:04 +0300
committerhybrid <hybrid@hybridlabs.pro>2026-06-11 19:55:04 +0300
commitb06990293397d4b6d0374097f09d1cc5679216e3 (patch)
tree5719922562e317a8083250c178f24376b6692569 /Client/Module/CM
downloada2wf_saralite-b06990293397d4b6d0374097f09d1cc5679216e3.tar.gz
a2wf_saralite-b06990293397d4b6d0374097f09d1cc5679216e3.tar.bz2
a2wf_saralite-b06990293397d4b6d0374097f09d1cc5679216e3.zip
init
Diffstat (limited to '')
-rw-r--r--Client/Module/CM/CM_Countermeasures.sqf22
-rw-r--r--Client/Module/CM/CM_Flares.sqf46
-rw-r--r--Client/Module/CM/CM_Init.sqf9
-rw-r--r--Client/Module/CM/CM_Spoofing.sqf18
4 files changed, 95 insertions, 0 deletions
diff --git a/Client/Module/CM/CM_Countermeasures.sqf b/Client/Module/CM/CM_Countermeasures.sqf
new file mode 100644
index 0000000..795108b
--- /dev/null
+++ b/Client/Module/CM/CM_Countermeasures.sqf
@@ -0,0 +1,22 @@
+Private ["_flarecount","_i","_isActive","_missile","_type","_vehicle"];
+_vehicle = _this select 0;
+_missile = _this select 1;
+
+if (alive _vehicle && (getPos _vehicle) select 2 > 5) then {
+ _isActive = _vehicle getvariable "FlareActive";
+ _type = getNumber (configFile >> "CfgAmmo" >> _missile >> "AirLock");
+ if ((_type == 1) && (! _isActive)) then {
+ private ["_flarecount"];
+ _vehicle setVariable ["FlareActive", true];
+ if ((driver _vehicle) == player) then {_vehicle vehicleChat "WARNING: incomming missile!"};
+ _flarecount = _vehicle getVariable "FlareCount";
+ if (_flarecount > 0) then {
+ _this Spawn CM_Spoofing;
+ for [{_i=0}, {_i<8}, {_i=_i+1}] do {
+ [_vehicle] Call CM_Flares;
+ sleep 0.3;
+ };
+ };
+ _vehicle setVariable ["FlareActive", false];
+ };
+}; \ No newline at end of file
diff --git a/Client/Module/CM/CM_Flares.sqf b/Client/Module/CM/CM_Flares.sqf
new file mode 100644
index 0000000..5d616d8
--- /dev/null
+++ b/Client/Module/CM/CM_Flares.sqf
@@ -0,0 +1,46 @@
+//--- ArmA 2 countermeasures, by Maddmatt.
+Private ["_dirpos","_div","_emmiters","_flare","_flarecount","_flares","_flarevel","_i","_launchercount","_li","_muzzzlevel","_relpos","_sm","_sp","_vehicle","_vvel"];
+_vehicle = _this select 0;
+_flares = [];
+_emmiters = [];
+_muzzzlevel = 25;
+if (_vehicle isKindOf "Plane") then {_muzzzlevel = 150};
+_launchercount = 0;
+while {([0,0,0] distance (_vehicle selectionPosition (format ["flare_launcher%1",_launchercount+1]))) != 0} do {_launchercount = _launchercount+1};
+
+for "_i" from 1 to (_launchercount) do {
+ _flarecount = (_vehicle getVariable "FlareCount") - 1;
+ _vehicle setVariable ["FlareCount", _flarecount];
+ _relpos = _vehicle modelToWorld (_vehicle selectionPosition format["flare_launcher%1",_i]);
+ _dirpos = _vehicle modelToWorld (_vehicle selectionPosition format["flare_launcher%1_dir",_i]);
+ _flare = "FlareCountermeasure" createVehicleLocal _relpos;
+ _dirpos = [(_dirpos select 0) - (_relpos select 0),(_dirpos select 1) - (_relpos select 1),(_dirpos select 2) - (_relpos select 2)];
+ _div = (abs (_dirpos select 0)) + (abs (_dirpos select 1)) + (abs (_dirpos select 2));
+ _flarevel = [(_dirpos select 0)/_div*_muzzzlevel,(_dirpos select 1)/_div*_muzzzlevel,(_dirpos select 2)/_div*_muzzzlevel];
+ _vvel = velocity _vehicle;
+
+ _flare setVelocity [(_flarevel select 0) + (_vvel select 0),(_flarevel select 1) + (_vvel select 1),(_flarevel select 2) + (_vvel select 2)];
+ _flares = _flares + [_flare];
+
+ _sm = "#particlesource" createVehicleLocal getpos _flare;
+ _sm setParticleRandom [0.5, [0.3, 0.3, 0.3], [0.5, 0.5, 0.5], 0, 0.3, [0, 0, 0, 0], 0, 0,360];
+ _sm setParticleParams [["\ca\Data\ParticleEffects\Universal\Universal", 16, 12, 8,0],"", "Billboard", 1, 3, [0, 0, 0],[0,0,0], 1, 1, 0.80, 0.5, [1.3,4],[[0.9,0.9,0.9,0.6], [1,1,1,0.3], [1,1,1,0]],[1],0.1,0.1,"","",_flare];
+ _sm setDropInterval 0.02;
+
+ _sp = "#particlesource" createVehicleLocal getpos _flare;
+ _sp setParticleRandom [0.03, [0.3, 0.3, 0.3], [1, 1, 1], 0, 0.2, [0, 0, 0, 0], 0, 0,360];
+ _sp setParticleParams [["\ca\Data\ParticleEffects\Universal\Universal", 16, 13, 2,0],"", "Billboard", 1, 0.1, [0, 0, 0],[0,0,0], 1, 1, 0.80, 0.5, [1.5,0],[[1,1,1,-4], [1,1,1,-4], [1,1,1,-2],[1,1,1,0]],[1000],0.1,0.1,"","",_flare,360];
+ _sp setDropInterval 0.001;
+
+ _li = "#lightpoint" createVehicleLocal getpos _flare;
+ _li setLightBrightness 0.1;
+ _li setLightAmbient [0.8, 0.6, 0.2];
+ _li setLightColor [1, 0.5, 0.2];
+ _li lightAttachObject [_flare, [0,0,0]];
+ _emmiters = _emmiters + [_sm,_sp,_li];
+};
+
+(_emmiters + _flares) spawn {
+ sleep 4.5 + random 1;
+ {deletevehicle _x} forEach _this;
+}; \ No newline at end of file
diff --git a/Client/Module/CM/CM_Init.sqf b/Client/Module/CM/CM_Init.sqf
new file mode 100644
index 0000000..d1a119b
--- /dev/null
+++ b/Client/Module/CM/CM_Init.sqf
@@ -0,0 +1,9 @@
+Private ["_amount","_vehicle"];
+_vehicle = _this select 0;
+
+if (isNull _vehicle) exitWith {};
+waitUntil {commonInitComplete};
+sleep 2;
+_amount = if (_vehicle isKindOf "Plane") then {'WFBE_COUNTERMEASUREPLANES' Call GetNamespace} else {'WFBE_COUNTERMEASURECHOPPERS' Call GetNamespace};
+_vehicle setVariable ["FlareCount", _amount];
+_vehicle setVariable ["FlareActive", false];
diff --git a/Client/Module/CM/CM_Spoofing.sqf b/Client/Module/CM/CM_Spoofing.sqf
new file mode 100644
index 0000000..25bb764
--- /dev/null
+++ b/Client/Module/CM/CM_Spoofing.sqf
@@ -0,0 +1,18 @@
+Private ["_ammo","_chance","_enemy","_prob","_missile","_vehicle"];
+_vehicle = _this select 0;
+_ammo = _this select 1;
+_enemy = _this select 2;
+_missile = objnull;
+
+if ((alive _vehicle) && (isEngineOn _vehicle)) then {
+ _missile = nearestObject [_enemy,_ammo];
+ waitUntil {(_missile distance _vehicle) < ((speed _vehicle) * 1.5)};
+ _prob = 25 + (random 75);
+ _chance = random 100;
+ if (_prob > _chance) then {
+ while {alive _missile} do {
+ _missile setDir ((getDir _missile) + ((random 20) - 10));
+ sleep 0.1;
+ };
+ };
+}; \ No newline at end of file