2015-12-15 22:43:26 +00:00
|
|
|
/*
|
|
|
|
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:
|
2016-06-13 16:54:19 +00:00
|
|
|
https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/environment/EPOCH_client_bitePlayer.sqf
|
2015-12-15 22:43:26 +00:00
|
|
|
|
|
|
|
Example:
|
2016-05-23 20:01:40 +00:00
|
|
|
_dog call EPOCH_client_bitePlayer;
|
2015-12-15 22:43:26 +00:00
|
|
|
|
|
|
|
Parameter(s):
|
2016-06-15 00:58:22 +00:00
|
|
|
_unit: OBJECT - attacker
|
2015-12-15 22:43:26 +00:00
|
|
|
|
|
|
|
Returns:
|
|
|
|
NOTHING
|
|
|
|
*/
|
2016-05-23 20:01:40 +00:00
|
|
|
private ["_distance","_toxicChance","_bloodpChance","_fatigueChance","_bleedAmount","_bloodpAmount","_soundEffect","_canSee","_ppEffect","_bleedChance","_soundEffectIndex","_soundEffectGlobal","_animationEffect","_animationEffectGlobal","_cfgObjectInteraction"];
|
2016-06-15 00:58:22 +00:00
|
|
|
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 {
|
2015-12-15 22:43:26 +00:00
|
|
|
|
2016-06-15 00:58:22 +00:00
|
|
|
if !(isNull _unit && alive _unit) then {
|
|
|
|
_distance = 5;
|
|
|
|
_toxicChance = 0.1;
|
|
|
|
_bleedChance = 1;
|
|
|
|
_bloodpChance = 0;
|
|
|
|
_fatigueChance = 0.1;
|
|
|
|
_bleedAmount = 30;
|
|
|
|
_bloodpAmount = 2;
|
|
|
|
_soundEffect = "";
|
|
|
|
_soundEffectGlobal = -1;
|
|
|
|
_animationEffect = "";
|
|
|
|
_animationEffectGlobal = -1;
|
|
|
|
_canSee = false;
|
|
|
|
_ppEffect = 0;
|
2015-09-14 20:55:36 +00:00
|
|
|
|
2016-06-15 00:58:22 +00:00
|
|
|
_cfgObjectInteraction = (('CfgObjectInteractions' call EPOCH_returnConfig) >> (typeOf _unit));
|
|
|
|
if (isClass _cfgObjectInteraction) then {
|
|
|
|
_distance = getNumber (_cfgObjectInteraction >> "distance");
|
|
|
|
_toxicChance = getNumber (_cfgObjectInteraction >> "toxicChance");
|
|
|
|
_bloodpChance = getNumber (_cfgObjectInteraction >> "bloodpChance");
|
|
|
|
_fatigueChance = getNumber (_cfgObjectInteraction >> "fatigueChance");
|
|
|
|
_bleedAmount = getNumber (_cfgObjectInteraction >> "bleedAmount");
|
|
|
|
_bloodpAmount = getNumber (_cfgObjectInteraction >> "bloodpAmount");
|
|
|
|
_soundConfigArray = getArray (_cfgObjectInteraction >> "soundEffect");
|
|
|
|
if !(_soundConfigArray isEqualTo []) then {
|
|
|
|
_soundEffect = selectRandom _soundConfigArray;
|
|
|
|
};
|
|
|
|
_soundEffectGlobal = getNumber (_cfgObjectInteraction >> "soundEffectGlobal");
|
|
|
|
_animConfigArray = getArray (_cfgObjectInteraction >> "animationEffect");
|
|
|
|
if !(_animConfigArray isEqualTo []) then {
|
|
|
|
_animationEffect = selectRandom _animConfigArray;
|
|
|
|
};
|
|
|
|
_animationEffectGlobal = getNumber (_cfgObjectInteraction >> "animationEffectGlobal");
|
|
|
|
_canSee = call compile (getText (_cfgObjectInteraction >> "canSee"));
|
|
|
|
_ppEffect = getNumber (_cfgObjectInteraction >> "ppEffect");
|
2016-05-24 20:00:45 +00:00
|
|
|
};
|
2015-09-14 20:55:36 +00:00
|
|
|
|
2016-06-15 00:58:22 +00:00
|
|
|
if ((_unit distance player) < _distance && _canSee) then {
|
2016-05-23 20:01:40 +00:00
|
|
|
|
2016-06-15 00:58:22 +00:00
|
|
|
if (_soundEffect isEqualType []) then {
|
|
|
|
_soundEffect params ["_soundEffectFinal",["_soundEffectRange",0]];
|
|
|
|
playSound3D [_soundEffectFinal, _unit, false, getPosASL _unit, 1, 1, _soundEffectRange];
|
|
|
|
} else {
|
|
|
|
_soundEffectIndex = EPOCH_sounds find _soundEffect;
|
|
|
|
if (_soundEffectIndex != -1) then {
|
|
|
|
_unit say3D _soundEffect;
|
|
|
|
if (_soundEffectGlobal != -1) then {
|
|
|
|
[player, _unit, _soundEffectIndex, Epoch_personalToken] remoteExec ["EPOCH_server_handle_say3D",2];
|
|
|
|
};
|
|
|
|
};
|
2015-09-14 20:55:36 +00:00
|
|
|
};
|
2016-05-23 20:01:40 +00:00
|
|
|
|
2016-06-15 00:58:22 +00:00
|
|
|
if (_animationEffect != "") then {
|
|
|
|
_unit switchMove _animationEffect;
|
|
|
|
if (_animationEffectGlobal != -1) then {
|
|
|
|
[[_unit,player], _animationEffectGlobal, Epoch_personalToken] remoteExec ["EPOCH_server_handle_switchMove",2];
|
|
|
|
};
|
2016-05-23 20:01:40 +00:00
|
|
|
};
|
|
|
|
|
2016-06-15 00:58:22 +00:00
|
|
|
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 == 1) then {
|
|
|
|
[] spawn{
|
|
|
|
_ppGrain = ppEffectCreate["filmGrain", 2005];
|
|
|
|
_ppChrom = ppEffectCreate["chromAberration", 2006];
|
|
|
|
_ppColor = ppEffectCreate["colorCorrections", 2007];
|
|
|
|
_ppBlur = ppEffectCreate["radialBlur", 2008];
|
|
|
|
_ppColor ppEffectAdjust[1, 1, 0, [1.5, -1, -1.5, 0.5], [5, 3.5, -5, -0.5], [-3, 5, -5, -0.5]];
|
|
|
|
_ppColor ppEffectCommit 5;
|
|
|
|
_ppChrom ppEffectAdjust[0.01, 0.01, true];
|
|
|
|
_ppChrom ppEffectCommit 5;
|
|
|
|
_ppBlur ppEffectAdjust[0.02, 0.02, 0.15, 0.15];
|
|
|
|
_ppBlur ppEffectCommit 5;
|
|
|
|
_ppGrain ppEffectAdjust[0.1, -1, 0.05, 0.05, 2, false];
|
|
|
|
_ppGrain ppEffectCommit 1;
|
|
|
|
_ppGrain ppEffectEnable true;
|
|
|
|
_ppChrom ppEffectEnable true;
|
|
|
|
_ppColor ppEffectEnable true;
|
|
|
|
_ppBlur ppEffectEnable true;
|
|
|
|
uiSleep 2;
|
|
|
|
_ppColor ppEffectAdjust[1, 1, -0.01, [0.0, 0.0, 0.0, 0.0], [1.5, 1, 1.2, 0.6], [0.199, 0.587, 0.114, 0.20]];
|
|
|
|
_ppColor ppEffectCommit 5;
|
|
|
|
_ppChrom ppEffectAdjust[0, 0, true];
|
|
|
|
_ppChrom ppEffectCommit 5;
|
|
|
|
_ppBlur ppEffectAdjust[0, 0, 0, 0];
|
|
|
|
_ppBlur ppEffectCommit 5;
|
|
|
|
uiSleep 5;
|
|
|
|
ppEffectDestroy[_ppGrain, _ppChrom, _ppColor, _ppBlur];
|
|
|
|
};
|
2015-09-14 20:55:36 +00:00
|
|
|
};
|
|
|
|
};
|
2016-06-15 00:58:22 +00:00
|
|
|
if (random 1 < _fatigueChance) then {
|
|
|
|
player setFatigue 1;
|
|
|
|
};
|
2015-09-14 20:55:36 +00:00
|
|
|
};
|
|
|
|
};
|
2015-12-15 22:43:26 +00:00
|
|
|
};
|