Fix firedNear did not work as intended

This commit is contained in:
A Man
2022-05-05 17:58:36 +02:00
parent effb78fe13
commit 89d4bdfc9a

View File

@@ -1,102 +1,91 @@
//[unit, weapon, muzzle, mode, ammo, magazine, projectile] //[unit, firer, distance, weapon, muzzle, mode, ammo]
private ["_handled"]; local _unit = _this select 0;
//Init local _firer = _this select 1;
//[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; local _distance = _this select 2;
_arc = 60; local _weapon = _this select 3;
_isBallistic = (getNumber (configfile >> "CfgAmmo" >> _ammo >> "whistleOnFire") > 0); local _ammo = _this select 6;
_dmgDistance = getNumber (configfile >> "CfgAmmo" >> _ammo >> "whistleDist");
_isRocket = ((_ammo isKindOf "RocketBase") && (_firer isKindOf "CAManBase"));
_isPlayer = (_unit == player);
_inVehicle = (vehicle _unit != _unit);
//_evType = "";
//_recordable = false;
// Both the firer and those nearby (<=8m) go into "combat" to prevent ALT-F4 local _handled = false;
//diag_log ("DEBUG: AMMO TYPE: " +str(_ammo)); local _arc = 60;
if !(_ammo isKindOf "LitObject") then { local _isBallistic = (getNumber (configfile >> "CfgAmmo" >> _ammo >> "whistleOnFire") > 0);
_firer setVariable["startcombattimer", 1]; local _dmgDistance = getNumber (configfile >> "CfgAmmo" >> _ammo >> "whistleDist");
if !(_firer getVariable["inCombat",false]) then { local _isRocket = ((_ammo isKindOf "RocketBase") && (_firer isKindOf "CAManBase"));
_firer setVariable["inCombat",true,true]; local _isPlayer = (_unit == player);
}; local _inVehicle = (vehicle _unit != _unit);
if (_distance <= 8) then {
_unit setVariable["startcombattimer", 1]; // Both the firer and those nearby (<=8m) go into "combat" to prevent ALT-F4
if !(_unit getVariable["inCombat",false]) then { //diag_log ("DEBUG: AMMO TYPE: " +str(_ammo));
_unit setVariable["inCombat",true,true]; if (!(_ammo isKindOf "LitObject") && !(_ammo isKindOf "ThrownObjects")) then {
}; // Fired eventhandler handles the combat of the firer
}; if (_distance <= 8) then {
[player,true] call fnc_setCombat;
}; };
};
if (_inVehicle) exitWith {}; if (_inVehicle) exitWith {};
if (_firer == player) exitWith {}; if (_firer == player) exitWith {};
//Is in danger angle? //Is in danger angle?
_turretDir = _firer weaponDirection _weapon; local _turretDir = _firer weaponDirection _weapon;
_weaponDir = ((_turretDir select 0) atan2 (_turretDir select 1)); local _weaponDir = ((_turretDir select 0) atan2 (_turretDir select 1));
_pos1 = getPosATL _unit; local _pos1 = getPosATL _unit;
_pos2 = getPosATL _firer; local _pos2 = getPosATL _firer;
_facing = ((_pos1 select 0) - (_pos2 select 0)) atan2 ((_pos1 select 1) - (_pos2 select 1)); local _facing = ((_pos1 select 0) - (_pos2 select 0)) atan2 ((_pos1 select 1) - (_pos2 select 1));
_firingArc = (_weaponDir - _facing); local _firingArc = (_weaponDir - _facing);
_firingArc = (-_firingArc) max (_firingArc); local _firingArc = (-_firingArc) max (_firingArc);
//In front? //In front?
_isInFront = (_firingArc < _arc); local _isInFront = (_firingArc < _arc);
_isInRear = (_firingArc > (180 - _arc)); local _isInRear = (_firingArc > (180 - _arc));
//Ballistic Handler //Ballistic Handler
if ((_isBallistic && _isInFront) && (_distance < (_dmgDistance * 2))) then { if ((_isBallistic && _isInFront) && (_distance < (_dmgDistance * 2))) then {
if (_distance < _dmgDistance) then { if (_distance < _dmgDistance) then {
//Will Cause Damage //Will Cause Damage
1 call fnc_usec_bulletHit; 1 call fnc_usec_bulletHit;
[20,45] call fnc_usec_pitchWhine; //Visual , Sound [20,45] call fnc_usec_pitchWhine; //Visual , Sound
if (_distance < ((_dmgDistance / 2) + 1)) then { if (_distance < ((_dmgDistance / 2) + 1)) then {
//serious ballistic damage //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 { if (_isPlayer) then {
[_unit, "head_hit", 1.51, _firer, _ammo] call fnc_usec_damageHandler; [_unit, "head_hit", 1.51, _firer, _ammo] call fnc_usec_damageHandler;
// head damage > 1.5 ---> log + death // head damage > 1.5 ---> log + death
}; };
[_unit,2] call fnc_usec_damageUnconscious;
}; [_unit,4] call fnc_usec_damageUnconscious;
if ((_distance < 10) && !_handled) then { } else {
[10,20] call fnc_usec_pitchWhine; //Visual , Sound //Just Knocked out
// Unconscious [_unit,0.5] call fnc_usec_damageUnconscious;
[_unit,0.2] call fnc_usec_damageUnconscious; };
}; } else {
if ((_distance < 20) && !_handled && _isPlayer) then { //Hit warn zone
// Warn if (_unit == player) then {
[10,20] call fnc_usec_pitchWhine; //Visual , Sound [10,20] call fnc_usec_pitchWhine; //Visual , Sound
addCamShake [15, 0.8, 25]; addCamShake [15, 0.8, 25];
};
}; };
}; };
//Launcher Handler } 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