From 1783bf4db65bc9594e268a5e32c06986686e43be Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Sat, 17 Jan 2015 00:39:46 -0600 Subject: [PATCH] #49 - targetEvent for flashbang --- addons/grenades/XEH_preInit.sqf | 2 +- .../functions/fnc_flashbangExplosionEH.sqf | 131 +++++++++--------- .../functions/fnc_flashbangThrownFuze.sqf | 6 +- 3 files changed, 70 insertions(+), 69 deletions(-) diff --git a/addons/grenades/XEH_preInit.sqf b/addons/grenades/XEH_preInit.sqf index 650ff5eb69..e83aeaae6b 100644 --- a/addons/grenades/XEH_preInit.sqf +++ b/addons/grenades/XEH_preInit.sqf @@ -6,4 +6,4 @@ PREP(flashbangThrownFuze); PREP(nextMode); PREP(throwGrenade); -[QGVAR(flashbangExplosionEvent), { _this call DFUNC(flashbangExplosionEH) }] call EFUNC(common,addEventHandler); +["flashbangExplosion", { _this call DFUNC(flashbangExplosionEH) }] call EFUNC(common,addEventHandler); diff --git a/addons/grenades/functions/fnc_flashbangExplosionEH.sqf b/addons/grenades/functions/fnc_flashbangExplosionEH.sqf index 7323329f33..1ef7ea1484 100644 --- a/addons/grenades/functions/fnc_flashbangExplosionEH.sqf +++ b/addons/grenades/functions/fnc_flashbangExplosionEH.sqf @@ -1,82 +1,85 @@ /* - * Author: KoffeinFlummi - * - * Creates the flashbang effect locally/knocks out AI units. - * - * Arguments: - * 0: The unit (Object) - * 1: The grenade (Object) - * - * Return Value: - * None - */ +* Author: KoffeinFlummi +* +* Creates the flashbang effect and knock out AI units. +* +* Arguments: +* 0: The grenade (Object) +* +* Return Value: +* None +*/ - #include "script_component.hpp" +#include "script_component.hpp" -_unit = _this select 0; -_grenade = _this select 1; +private ["_grenade", "_affected", "_strength", "_posGrenade", "_posUnit", "_angleGrenade", "_angleView", "_angleDiff", "_light"]; -if (!local _unit) exitWith {}; -if (!alive _unit) exitWith {}; -if (damage _unit >= 1) exitWith {}; +_grenade = _this select 0; -_strength = 1 - ((_unit distance _grenade) min 15) / 15; +_affected = _grenade nearEntities ["CAManBase", 50]; -if (_unit != ACE_player) exitWith { - //must be AI - _unit disableAI "MOVE"; - _unit disableAI "ANIM"; - _unit disableAI "AUTOTARGET"; - _unit disableAI "TARGET"; - _unit disableAI "FSM"; - _unit setSkill (skill _unit / 50); +{ + if ((local _x) && {alive _x}) then { - [FUNC(flashbangEffectStages), 0, [EFFECT_STAGE_RESETAI, (time + (7 * _strength)), _unit]] call CBA_fnc_addPerFrameHandler; -}; + _strength = 1 - ((_x distance _grenade) min 15) / 15; -// is there line of sight to the grenade? -_posGrenade = getPosASL _grenade; -_posGrenade set [2, (_posGrenade select 2) + 0.2]; // compensate for grenade glitching into ground -if (lineIntersects [_posGrenade, getPosASL _unit, _grenade, _unit]) then { - _strength = _strength / 10; -}; + if (_x != ACE_player) then { + //must be AI + _x disableAI "MOVE"; + _x disableAI "ANIM"; + _x disableAI "AUTOTARGET"; + _x disableAI "TARGET"; + _x disableAI "FSM"; + _x setSkill ((skill _x) / 50); -// beeeeeeeeeeeeeeeeeeeeeeeeeeeeep -if (isClass (configFile >> "CfgPatches" >> "ACE_Hearing") and _strength > 0) then { - [_unit, 0.5 + (_strength / 2)] call EFUNC(hearing,earRinging); -}; + [FUNC(flashbangEffectStages), 0, [EFFECT_STAGE_RESETAI, (time + (7 * _strength)), _x]] call CBA_fnc_addPerFrameHandler; + } else { + //Do effects for player + // is there line of sight to the grenade? + _posGrenade = getPosASL _grenade; + _posGrenade set [2, (_posGrenade select 2) + 0.2]; // compensate for grenade glitching into ground + if (lineIntersects [_posGrenade, getPosASL _x, _grenade, _x]) then { + _strength = _strength / 10; + }; -// account for people looking away by slightly -// reducing the effect for visual effects. -_posUnit = getPos _unit; -_posGrenade = getPos _grenade; -_angleGrenade = ((_posGrenade select 0) - (_posUnit select 0)) atan2 ((_posGrenade select 1) - (_posUnit select 1)); -_angleGrenade = (_angleGrenade + 360) % 360; + // beeeeeeeeeeeeeeeeeeeeeeeeeeeeep + if (isClass (configFile >> "CfgPatches" >> "ACE_Hearing") and _strength > 0) then { + [_x, 0.5 + (_strength / 2)] call EFUNC(hearing,earRinging); + }; -_angleView = (eyeDirection player select 0) atan2 (eyeDirection player select 1); -_angleView = (_angleView + 360) % 360; + // account for people looking away by slightly + // reducing the effect for visual effects. + _posUnit = getPos _x; + _posGrenade = getPos _grenade; + _angleGrenade = ((_posGrenade select 0) - (_posUnit select 0)) atan2 ((_posGrenade select 1) - (_posUnit select 1)); + _angleGrenade = (_angleGrenade + 360) % 360; -_angleDiff = 180 - abs (abs (_angleGrenade - _angleView) - 180); -_angleDiff = ((_angleDiff - 45) max 0); + _angleView = (eyeDirection player select 0) atan2 (eyeDirection player select 1); + _angleView = (_angleView + 360) % 360; -_strength = _strength - _strength * (_angleDiff / 135); + _angleDiff = 180 - abs (abs (_angleGrenade - _angleView) - 180); + _angleDiff = ((_angleDiff - 45) max 0); -// create flash to illuminate environment -_light = "#lightpoint" createVehicleLocal getPos _grenade; -_light setLightBrightness 200; -_light setLightAmbient [1,1,1]; -_light setLightColor [1,1,1]; -_light setLightDayLight true; + _strength = _strength - _strength * (_angleDiff / 135); -[FUNC(flashbangEffectStages), 0, [EFFECT_STAGE_DELETELIGHT, (time + (0.1)), _light]] call CBA_fnc_addPerFrameHandler; + // create flash to illuminate environment + _light = "#lightpoint" createVehicleLocal getPos _grenade; + _light setLightBrightness 200; + _light setLightAmbient [1,1,1]; + _light setLightColor [1,1,1]; + _light setLightDayLight true; + [FUNC(flashbangEffectStages), 0, [EFFECT_STAGE_DELETELIGHT, (time + (0.1)), _light]] call CBA_fnc_addPerFrameHandler; -// blind player -if (_strength > 0.1) then { - GVAR(flashbangPPEffectCC) ppEffectEnable true; - GVAR(flashbangPPEffectCC) ppEffectAdjust [1,1,(0.8 + _strength) min 1,[1,1,1,0],[0,0,0,1],[0,0,0,0]]; - GVAR(flashbangPPEffectCC) ppEffectCommit 0.01; + // blind player + if (_strength > 0.1) then { + GVAR(flashbangPPEffectCC) ppEffectEnable true; + GVAR(flashbangPPEffectCC) ppEffectAdjust [1,1,(0.8 + _strength) min 1,[1,1,1,0],[0,0,0,1],[0,0,0,0]]; + GVAR(flashbangPPEffectCC) ppEffectCommit 0.01; - [FUNC(flashbangEffectStages), 0, [EFFECT_STAGE_PARTIALRECOVERY, (time + (7 * _strength)), _strength]] call CBA_fnc_addPerFrameHandler; - [FUNC(flashbangEffectStages), 0, [ EFFECT_STAGE_FULLRECOVERY, (time + (17 * _strength))]] call CBA_fnc_addPerFrameHandler; -}; + [FUNC(flashbangEffectStages), 0, [EFFECT_STAGE_PARTIALRECOVERY, (time + (7 * _strength)), _strength]] call CBA_fnc_addPerFrameHandler; + [FUNC(flashbangEffectStages), 0, [ EFFECT_STAGE_FULLRECOVERY, (time + (17 * _strength))]] call CBA_fnc_addPerFrameHandler; + }; + }; + }; +} forEach _affected; diff --git a/addons/grenades/functions/fnc_flashbangThrownFuze.sqf b/addons/grenades/functions/fnc_flashbangThrownFuze.sqf index 141804bbbc..aec10301ab 100644 --- a/addons/grenades/functions/fnc_flashbangThrownFuze.sqf +++ b/addons/grenades/functions/fnc_flashbangThrownFuze.sqf @@ -12,9 +12,7 @@ if (_waitUntilTime > time) exitWith {}; if (alive _projectile) then { playSound3D ["A3\Sounds_F\weapons\Explosion\explosion_mine_1.wss", _projectile, false, getPosASL _projectile, 5, 1.2, 400]; - + _affected = _projectile nearEntities ["CAManBase", 50]; - { - [QGVAR(flashbangExplosionEvent), [_x], [_x, _projectile]] call EFUNC(common,targetEvent); - } forEach _affected; + ["flashbangExplosion", _affected, [_projectile]] call EFUNC(common,targetEvent); };