mirror of
https://github.com/EpochModTeam/DayZ-Epoch.git
synced 2025-12-14 04:02:37 +03:00
In the initialize section of the fsm r_player_unconscious and r_player_timeout return their default values (false and 0). Also, the Vanilla server-side combat check doesn't appear to work, or it doesn't work with the antihack disabled (I haven't tested with it enabled). New variable inCombat is set more quickly than the combatTimeout variable
97 lines
3.0 KiB
Plaintext
97 lines
3.0 KiB
Plaintext
//[unit, weapon, muzzle, mode, ammo, magazine, projectile]
|
|
private ["_handled"];
|
|
//Init
|
|
//[unit, firer, distance, weapon, muzzle, mode, ammo]
|
|
_unit = _this select 0;
|
|
_firer = _this select 1;
|
|
_distance = _this select 2;
|
|
_weapon = _this select 3;
|
|
_ammo = _this select 6;
|
|
//_killerID = _firer getVariable["MemberID",0];
|
|
|
|
_handled = false;
|
|
_arc = 60;
|
|
_isBallistic = (getNumber (configfile >> "CfgAmmo" >> _ammo >> "whistleOnFire") > 0);
|
|
_dmgDistance = getNumber (configfile >> "CfgAmmo" >> _ammo >> "whistleDist");
|
|
_isRocket = ((_ammo isKindOf "RocketBase") && (_firer isKindOf "Man"));
|
|
_isPlayer = (_unit == player);
|
|
_inVehicle = (vehicle _unit != _unit);
|
|
//_evType = "";
|
|
//_recordable = false;
|
|
|
|
// Both the firer and those nearby (<=8m) go into "combat" to prevent ALT-F4
|
|
//diag_log ("DEBUG: AMMO TYPE: " +str(_ammo));
|
|
_firer setVariable["startcombattimer", 1];
|
|
_firer setVariable["inCombat", 1, true];
|
|
if (_distance <= 8) then {
|
|
_unit setVariable["startcombattimer", 1];
|
|
_unit setVariable["inCombat", 1, true];
|
|
};
|
|
|
|
if (_inVehicle) exitWith {};
|
|
if (_firer == player) exitWith {};
|
|
|
|
//Is in danger angle?
|
|
_turretDir = _firer weaponDirection _weapon;
|
|
_weaponDir = ((_turretDir select 0) atan2 (_turretDir select 1));
|
|
_pos1 = getPosATL _unit;
|
|
_pos2 = getPosATL _firer;
|
|
_facing = ((_pos1 select 0) - (_pos2 select 0)) atan2 ((_pos1 select 1) - (_pos2 select 1));
|
|
_firingArc = (_weaponDir - _facing);
|
|
_firingArc = (-_firingArc) max (_firingArc);
|
|
|
|
//In front?
|
|
_isInFront = (_firingArc < _arc);
|
|
_isInRear = (_firingArc > (180 - _arc));
|
|
|
|
//Ballistic Handler
|
|
if ((_isBallistic && _isInFront) && (_distance < (_dmgDistance * 2))) then {
|
|
if (_distance < _dmgDistance) then {
|
|
//Will Cause Damage
|
|
1 call fnc_usec_bulletHit;
|
|
[20,45] call fnc_usec_pitchWhine; //Visual , Sound
|
|
if (_distance < ((_dmgDistance / 2) + 1)) then {
|
|
//serious ballistic damage
|
|
if (_isPlayer) then {
|
|
[_unit, "head_hit", 1.51, _firer, _ammo] call fnc_usec_damageHandler;
|
|
// head damage > 1.5 ---> log + death
|
|
};
|
|
|
|
[_unit,4] call fnc_usec_damageUnconscious;
|
|
} else {
|
|
//Just Knocked out
|
|
[_unit,0.5] call fnc_usec_damageUnconscious;
|
|
};
|
|
} else {
|
|
//Hit warn zone
|
|
if (_unit == player) then {
|
|
[10,20] call fnc_usec_pitchWhine; //Visual , Sound
|
|
addCamShake [15, 0.8, 25];
|
|
};
|
|
};
|
|
} else {
|
|
if (_isRocket && (_isInFront or _isInRear)) then {
|
|
if ((_distance < 5) && !_handled) then {
|
|
1 call fnc_usec_bulletHit;
|
|
[20,45] call fnc_usec_pitchWhine; //Visual , Sound
|
|
// Dead
|
|
if (_isPlayer) then {
|
|
[_unit, "head_hit", 1.51, _firer, _ammo] call fnc_usec_damageHandler;
|
|
// head damage > 1.5 ---> log + death
|
|
};
|
|
[_unit,2] call fnc_usec_damageUnconscious;
|
|
};
|
|
if ((_distance < 10) && !_handled) then {
|
|
[10,20] call fnc_usec_pitchWhine; //Visual , Sound
|
|
// Unconscious
|
|
[_unit,0.2] call fnc_usec_damageUnconscious;
|
|
};
|
|
if ((_distance < 20) && !_handled && _isPlayer) then {
|
|
// Warn
|
|
[10,20] call fnc_usec_pitchWhine; //Visual , Sound
|
|
addCamShake [15, 0.8, 25];
|
|
};
|
|
};
|
|
};
|
|
//Launcher Handler
|