Files
DayZ-Epoch/SQF/dayz_code/compile/player_weaponFiredNear.sqf
ebaydayz 77e760fe73 Update private tags
From
e69f8d5306

Moved dog files to the \dog\ folder and pzombie files to the \pzombie\
folder. Also removed some legacy files that are no longer used.

The actions\ and compile\ folders are fully up to date now
2016-03-30 14:55:45 -04:00

95 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];
if (_distance <= 8) then {
_unit setVariable["startcombattimer", 1];
};
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