/* Author: Aaron Clark - EpochMod.com Contributors: Description: Performs damage related effects Licence: Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/environment/EPOCH_client_bitePlayer.sqf Example: _dog call EPOCH_client_bitePlayer; Parameter(s): _unit: OBJECT - attacker Returns: NOTHING */ //[[[cog import generate_private_arrays ]]] private ["_animConfigArray","_animationEffect","_animationEffectGlobal","_bleedAmount","_bleedChance","_bloodpAmount","_bloodpChance","_canSee","_cfgObjectInteraction","_distance","_fatigueChance","_handle","_handles","_ppEffect","_say3dsoundsConfig","_selectedMove","_selectedSound","_soundConfigArray","_soundEffect","_soundEffectGlobal","_switchMovehandlerConfig","_toxicChance"]; //[[[end]]] params [["_unit",objNull],["_target",player]]; if (isNull _unit && isNull _target) exitWith {}; if !(_target isEqualTo player) then { // re to other player [_unit,_target] remoteExec ["EPOCH_client_bitePlayer", _target]; } else { if !(isNull _unit && alive _unit) then { _cfgObjectInteraction = (('CfgObjectInteractions' call EPOCH_returnConfig) >> (typeOf _unit)); if (isClass _cfgObjectInteraction) then { _distance = getNumber (_cfgObjectInteraction >> "distance"); _toxicChance = getNumber (_cfgObjectInteraction >> "toxicChance"); _bleedChance = getNumber (_cfgObjectInteraction >> "bleedChance"); _bloodpChance = getNumber (_cfgObjectInteraction >> "bloodpChance"); _fatigueChance = getNumber (_cfgObjectInteraction >> "fatigueChance"); _bleedAmount = getNumber (_cfgObjectInteraction >> "bleedAmount"); _bloodpAmount = getNumber (_cfgObjectInteraction >> "bloodpAmount"); _soundConfigArray = getArray (_cfgObjectInteraction >> "soundEffect"); _soundEffect = ""; if !(_soundConfigArray isEqualTo []) then { _soundEffect = selectRandom _soundConfigArray; }; _soundEffectGlobal = getNumber (_cfgObjectInteraction >> "soundEffectGlobal"); _animConfigArray = getArray (_cfgObjectInteraction >> "animationEffect"); _animationEffect = ""; if !(_animConfigArray isEqualTo []) then { _animationEffect = selectRandom _animConfigArray; }; _animationEffectGlobal = getNumber (_cfgObjectInteraction >> "animationEffectGlobal"); _canSee = call compile (getText (_cfgObjectInteraction >> "canSee")); _ppEffect = getArray (_cfgObjectInteraction >> "ppEffect"); if ((_unit distance player) < _distance && _canSee) then { _say3dsoundsConfig = 'CfgSay3Dhandler' call EPOCH_returnConfig; _switchMovehandlerConfig = 'CfgSwitchMovehandler' call EPOCH_returnConfig; if (_soundEffect isEqualType []) then { _soundEffect params ["_soundEffectFinal",["_soundEffectRange",0]]; playSound3D [_soundEffectFinal, _unit, false, getPosASL _unit, 1, 1, _soundEffectRange]; } else { _selectedSound = (_say3dsoundsConfig >> _soundEffect); if (isClass _selectedSound) then { _unit say3D _soundEffect; if (_soundEffectGlobal isEqualTo 1) then { [player, _unit, _soundEffect, Epoch_personalToken] remoteExec ["EPOCH_server_handle_say3D",2]; }; }; }; _selectedMove = (_switchMovehandlerConfig >> _animationEffect); if (isClass _selectedMove) then { _unit switchMove _animationEffect; if (_animationEffectGlobal isEqualTo 1) then { [player, _animationEffect, Epoch_personalToken, _unit] remoteExec ["EPOCH_server_handle_switchMove",2]; }; }; if (random 1 < _toxicChance) then { EPOCH_playerToxicity = (EPOCH_playerToxicity + (random(100 - EPOCH_playerImmunity))) min 100; }; if (random 1 < _bleedChance) then { player setBleedingRemaining((getBleedingRemaining player) + _bleedAmount); }; if (random 1 < _bloodpChance) then { EPOCH_playerBloodP = (EPOCH_playerBloodP + (_bloodpAmount + (EPOCH_playerBloodP - 100))) min 190; if !(_ppEffect isEqualTo []) then { _ppEffect spawn EPOCH_fnc_spawnEffects; }; }; if (random 1 < _fatigueChance) then { player setFatigue 1; }; }; }; }; };