diff --git a/addons/overpressure/CfgEventHandlers.hpp b/addons/overpressure/CfgEventHandlers.hpp index a008c845f1..1c191b5a0d 100644 --- a/addons/overpressure/CfgEventHandlers.hpp +++ b/addons/overpressure/CfgEventHandlers.hpp @@ -14,38 +14,38 @@ class Extended_PostInit_EventHandlers { class Extended_FiredBIS_EventHandlers { class CAManBase { class ADDON { - firedBIS = QUOTE(if (local (_this select 0) && {getNumber (configfile >> 'CfgMagazines' >> _this select 5 >> QUOTE(QGVAR(Damage))) > 0} || {getNumber (configfile >> 'CfgWeapons' >> _this select 1 >> QUOTE(QGVAR(Damage))) > 0}) then {_this call DFUNC(fireLauncherBackblast)}); + firedBIS = QUOTE(if (local (_this select 0)) then {_this call DFUNC(firedEHBB);};); }; }; class Tank { class ADDON { - firedBIS = QUOTE(if (local (_this select 0) && {getNumber (configfile >> 'CfgMagazines' >> _this select 5 >> QUOTE(QGVAR(Damage))) > 0} || {getNumber (configfile >> 'CfgWeapons' >> _this select 1 >> QUOTE(QGVAR(Damage))) > 0}) then {_this call DFUNC(fireOverpressureZone)}); + firedBIS = QUOTE(if (local (_this select 0)) then {_this call DFUNC(firedEHOP);};); }; }; class Car { class ADDON { - firedBIS = QUOTE(if (local (_this select 0) && {getNumber (configfile >> 'CfgMagazines' >> _this select 5 >> QUOTE(QGVAR(Damage))) > 0} || {getNumber (configfile >> 'CfgWeapons' >> _this select 1 >> QUOTE(QGVAR(Damage))) > 0}) then {_this call DFUNC(fireOverpressureZone)}); + firedBIS = QUOTE(if (local (_this select 0)) then {_this call DFUNC(firedEHOP);};); }; }; class Helicopter { class ADDON { - firedBIS = QUOTE(if (local (_this select 0) && {getNumber (configfile >> 'CfgMagazines' >> _this select 5 >> QUOTE(QGVAR(Damage))) > 0} || {getNumber (configfile >> 'CfgWeapons' >> _this select 1 >> QUOTE(QGVAR(Damage))) > 0}) then {_this call DFUNC(fireOverpressureZone)}); + firedBIS = QUOTE(if (local (_this select 0)) then {_this call DFUNC(firedEHOP);};); }; }; class Plane { class ADDON { - firedBIS = QUOTE(if (local (_this select 0) && {getNumber (configfile >> 'CfgMagazines' >> _this select 5 >> QUOTE(QGVAR(Damage))) > 0} || {getNumber (configfile >> 'CfgWeapons' >> _this select 1 >> QUOTE(QGVAR(Damage))) > 0}) then {_this call DFUNC(fireOverpressureZone)}); + firedBIS = QUOTE(if (local (_this select 0)) then {_this call DFUNC(firedEHOP);};); }; }; class Ship_F { class ADDON { - firedBIS = QUOTE(if (local (_this select 0) && {getNumber (configfile >> 'CfgMagazines' >> _this select 5 >> QUOTE(QGVAR(Damage))) > 0} || {getNumber (configfile >> 'CfgWeapons' >> _this select 1 >> QUOTE(QGVAR(Damage))) > 0}) then {_this call DFUNC(fireOverpressureZone)}); + firedBIS = QUOTE(if (local (_this select 0)) then {_this call DFUNC(firedEHOP);};); }; }; class StaticWeapon { class ADDON { - firedBIS = QUOTE(if (local (_this select 0) && {getNumber (configfile >> 'CfgMagazines' >> _this select 1 >> QUOTE(QGVAR(Damage))) > 0} || {getNumber (configfile >> 'CfgWeapons' >> _this select 1 >> QUOTE(QGVAR(Damage))) > 0}) then {_this call DFUNC(fireOverpressureZone)}); + firedBIS = QUOTE(if (local (_this select 0)) then {_this call DFUNC(firedEHOP);};); }; }; }; diff --git a/addons/overpressure/XEH_preInit.sqf b/addons/overpressure/XEH_preInit.sqf index 5eefc5eae4..d0ce7cbcf1 100644 --- a/addons/overpressure/XEH_preInit.sqf +++ b/addons/overpressure/XEH_preInit.sqf @@ -6,5 +6,7 @@ PREP(fireLauncherBackblast); PREP(fireOverpressureZone); PREP(getDistance); PREP(overpressureDamage); - +PREP(cacheOverPressureValues); +PREP(firedEHOP); +PREP(firedEHBB); ADDON = true; diff --git a/addons/overpressure/functions/fnc_cacheOverPressureValues.sqf b/addons/overpressure/functions/fnc_cacheOverPressureValues.sqf new file mode 100644 index 0000000000..69a38b4c18 --- /dev/null +++ b/addons/overpressure/functions/fnc_cacheOverPressureValues.sqf @@ -0,0 +1,36 @@ +/* + * Author: joko // Jonas + * + * Handle fire of local launchers + * + * Argument: + * 0: Magazine (String) + * 1: + * + * Return value: + * Array: + * 0: + * 1: + * 2: + * + */ + #include "script_component.hpp" + +EXPLODE_2_PVT(_this,_weapon,_magazine); + +private ["_damage","_angle","_range"]; +_damage = getNumber (configFile >> "CfgMagazines" >> _magazine >> QGVAR(damage)); +if (_damage == 0) then { + _angle = getNumber (configFile >> "CfgWeapons" >> _weapon >> QGVAR(angle)) / 2; + _range = getNumber (configFile >> "CfgWeapons" >> _weapon >> QGVAR(range)); + _damage = getNumber (configFile >> "CfgWeapons" >> _weapon >> QGVAR(damage)); +} else { + _angle = getNumber (configFile >> "CfgMagazines" >> _magazine >> QGVAR(angle)) / 2; + _range = getNumber (configFile >> "CfgMagazines" >> _magazine >> QGVAR(range)); +}; + +missionNameSpace setVariable [(QGVAR(Angle) + _magazine),_angle]; +missionNameSpace setVariable [(QGVAR(Range) + _magazine),_range]; +missionNameSpace setVariable [(QGVAR(Damage) + _magazine),_damage]; + +[_angle,_range,_damage] diff --git a/addons/overpressure/functions/fnc_fireLauncherBackblast.sqf b/addons/overpressure/functions/fnc_fireLauncherBackblast.sqf index c3b19db29a..5167423bd2 100644 --- a/addons/overpressure/functions/fnc_fireLauncherBackblast.sqf +++ b/addons/overpressure/functions/fnc_fireLauncherBackblast.sqf @@ -15,7 +15,7 @@ * Return value: * None */ -//#define DEBUG_MODE_FULL + #include "script_component.hpp" EXPLODE_7_PVT(_this,_firer,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile); @@ -29,16 +29,9 @@ _position = getPosASL _projectile; _direction = [0, 0, 0] vectorDiff (vectorDir _projectile); private ["_backblastAngle", "_backblastRange", "_backblastDamage"]; -_backblastDamage = getNumber (configFile >> "CfgMagazines" >> _magazine >> QGVAR(damage)); - -if (_backblastDamage == 0) then { - _backblastAngle = getNumber (configFile >> "CfgWeapons" >> _weapon >> QGVAR(angle)) / 2; - _backblastRange = getNumber (configFile >> "CfgWeapons" >> _weapon >> QGVAR(range)); - _backblastDamage = getNumber (configFile >> "CfgWeapons" >> _weapon >> QGVAR(damage)); -} else { - _backblastAngle = getNumber (configFile >> "CfgMagazines" >> _magazine >> QGVAR(angle)) / 2; - _backblastRange = getNumber (configFile >> "CfgMagazines" >> _magazine >> QGVAR(range)); -}; +_backblastAngle = missionNameSpace getVariable [(QGVAR(Angle) + _magazine),([_weapon,_magazine] call FUNC(cacheOverPressureVales)) select 0]; +_backblastRange = missionNameSpace getVariable [(QGVAR(Range) + _magazine),([_weapon,_magazine] call FUNC(cacheOverPressureVales)) select 1]; +_backblastDamage = missionNameSpace getVariable [(QGVAR(Damage) + _magazine),([_weapon,_magazine] call FUNC(cacheOverPressureVales)) select 2]; // Damage to others private "_affected"; diff --git a/addons/overpressure/functions/fnc_fireOverpressureZone.sqf b/addons/overpressure/functions/fnc_fireOverpressureZone.sqf index c51baf3e64..9731fdfa69 100644 --- a/addons/overpressure/functions/fnc_fireOverpressureZone.sqf +++ b/addons/overpressure/functions/fnc_fireOverpressureZone.sqf @@ -29,24 +29,16 @@ _position = getPosASL _projectile; _direction = vectorDir _projectile; private ["_dangerZoneAngle", "_dangerZoneRange", "_dangerZoneDamage"]; - -_dangerZoneDamage = getNumber (configFile >> "CfgMagazines" >> _magazine >> QGVAR(damage)); - -if (_dangerZoneDamage == 0) then { - _dangerZoneAngle = getNumber (configFile >> "CfgWeapons" >> _weapon >> QGVAR(angle)) / 2; - _dangerZoneRange = getNumber (configFile >> "CfgWeapons" >> _weapon >> QGVAR(range)); - _dangerZoneDamage = getNumber (configFile >> "CfgWeapons" >> _weapon >> QGVAR(damage)); -} else { - _dangerZoneAngle = getNumber (configFile >> "CfgMagazines" >> _magazine >> QGVAR(angle)) / 2; - _dangerZoneRange = getNumber (configFile >> "CfgMagazines" >> _magazine >> QGVAR(range)); -}; +_dangerZoneDamage = missionNameSpace getVariable [(QGVAR(Damage) + _magazine),([_weapon,_magazine] call FUNC(cacheOverPressureVales)) select 2]; +_dangerZoneAngle = missionNameSpace getVariable [(QGVAR(Angle) + _magazine),([_weapon,_magazine] call FUNC(cacheOverPressureVales)) select 0]; +_dangerZoneRange = missionNameSpace getVariable [(QGVAR(Damage) + _magazine),([_weapon,_magazine] call FUNC(cacheOverPressureVales)) select 2]; // Damage to others private "_affected"; _affected = getPos _projectile nearEntities ["CAManBase", _dangerZoneRange]; // Let each client handle their own affected units -["overpressure", _affected, [_firer, _position, _direction, _weapon]] call EFUNC(common,targetEvent); +["overpressure", _affected, [_firer, _position, _direction, _weapon,_magazine]] call EFUNC(common,targetEvent); // Draw debug lines #ifdef DEBUG_MODE_FULL diff --git a/addons/overpressure/functions/fnc_firedEHBB.sqf b/addons/overpressure/functions/fnc_firedEHBB.sqf new file mode 100644 index 0000000000..1d88486c37 --- /dev/null +++ b/addons/overpressure/functions/fnc_firedEHBB.sqf @@ -0,0 +1,21 @@ +/* + * Author: joko // Jonas + * + * Handle fire of local launchers + * + * Argument: + * 0: Unit that fired (Object) + * 1: Weapon fired (String) + * 2: Muzzle (String) + * 3: Mode (String) + * 4: Ammo (String) + * 5: Magazine (String) + * 6: Projectile (Object) + * + * Return value: + * None + */ + + if (missionNameSpace getVariable [(QGVAR(Damage) + _this select 1),(([_this select 1,_this select 5] call DFUNC(cacheOverPressureVales)) select 2)]) then { + _this call DFUNC(fireLauncherBackblast) + }; diff --git a/addons/overpressure/functions/fnc_firedEHOP.sqf b/addons/overpressure/functions/fnc_firedEHOP.sqf new file mode 100644 index 0000000000..6503731c2c --- /dev/null +++ b/addons/overpressure/functions/fnc_firedEHOP.sqf @@ -0,0 +1,21 @@ +/* + * Author: joko // Jonas + * + * Handle fire of Other Weapons + * + * Argument: + * 0: Unit that fired (Object) + * 1: Weapon fired (String) + * 2: Muzzle (String) + * 3: Mode (String) + * 4: Ammo (String) + * 5: Magazine (String) + * 6: Projectile (Object) + * + * Return value: + * None + */ + + if (missionNameSpace getVariable [(QGVAR(Damage) + _this select 1),(([_this select 1,_this select 5] call DFUNC(cacheOverPressureVales)) select 2)]) then { + _this call DFUNC(fireOverpressureZone) + }; diff --git a/addons/overpressure/functions/fnc_overpressureDamage.sqf b/addons/overpressure/functions/fnc_overpressureDamage.sqf index d1280b682f..669c9e8cc4 100644 --- a/addons/overpressure/functions/fnc_overpressureDamage.sqf +++ b/addons/overpressure/functions/fnc_overpressureDamage.sqf @@ -14,13 +14,12 @@ */ #include "script_component.hpp" -EXPLODE_4_PVT(_this,_firer,_posASL,_direction,_weapon); +EXPLODE_4_PVT(_this,_firer,_posASL,_direction,_weapon,_magazine); private ["_overpressureAngle", "_overpressureRange", "_overpressureDamage"]; - -_overpressureAngle = getNumber (configFile >> "CfgWeapons" >> _weapon >> QGVAR(angle)) / 2; -_overpressureRange = getNumber (configFile >> "CfgWeapons" >> _weapon >> QGVAR(range)); -_overpressureDamage = getNumber (configFile >> "CfgWeapons" >> _weapon >> QGVAR(damage)); +_overpressureAngle = missionNameSpace getVariable [(QGVAR(Damage) + _magazine),([_weapon,_magazine] call FUNC(cacheOverPressureVales)) select 2]; +_overpressureRange = missionNameSpace getVariable [(QGVAR(Angle) + _magazine),([_weapon,_magazine] call FUNC(cacheOverPressureVales)) select 0]; +_overpressureDamage = missionNameSpace getVariable [(QGVAR(Damage) + _magazine),([_weapon,_magazine] call FUNC(cacheOverPressureVales)) select 2]; TRACE_4("Parameters:",_overpressureAngle,_overpressureRange,_overpressureDamage,_weapon);