mirror of
https://github.com/acemod/ACE3.git
synced 2024-08-30 18:23:18 +00:00
Merge pull request #3323 from acemod/fixVehicleCrashes
Fix vehicle crashes
This commit is contained in:
commit
8e49c8b1b3
@ -26,8 +26,8 @@ private ["_damageThreshold", "_damageBodyPart", "_chanceFatal"];
|
|||||||
params ["_unit", "_part", ["_withDamage", 0]];
|
params ["_unit", "_part", ["_withDamage", 0]];
|
||||||
|
|
||||||
if (!alive _unit) exitWith {true};
|
if (!alive _unit) exitWith {true};
|
||||||
if (_part < 0 || _part > 5) exitWith {false};
|
|
||||||
if ((vehicle _unit != _unit) && {!alive (vehicle _unit)}) exitWith { true };
|
if ((vehicle _unit != _unit) && {!alive (vehicle _unit)}) exitWith { true };
|
||||||
|
if (_part < 0 || _part > 5) exitWith {false};
|
||||||
|
|
||||||
// Find the correct Damage threshold for unit.
|
// Find the correct Damage threshold for unit.
|
||||||
_damageThreshold = [1,1,1];
|
_damageThreshold = [1,1,1];
|
||||||
|
@ -77,13 +77,15 @@ _minLethalDamage = if (_typeIndex >= 0) then {
|
|||||||
0.01
|
0.01
|
||||||
};
|
};
|
||||||
|
|
||||||
if (vehicle _unit != _unit && {!(vehicle _unit isKindOf "StaticWeapon")} && {isNull _shooter} && {_projectile == ""} && {_selection == ""}) then {
|
private _vehicle = vehicle _unit;
|
||||||
|
private _effectiveSelectionName = _selection;
|
||||||
|
if ((_vehicle != _unit) && {!(_vehicle isKindOf "StaticWeapon")} && {_shooter in [objNull, driver _vehicle, _vehicle]} && {_projectile == ""} && {_selection == ""}) then {
|
||||||
if (GVAR(enableVehicleCrashes)) then {
|
if (GVAR(enableVehicleCrashes)) then {
|
||||||
_selection = GVAR(SELECTIONS) select (floor(random(count GVAR(SELECTIONS))));
|
_effectiveSelectionName = _this select 1; //pull random selection from HDC
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
if ((_minLethalDamage <= _newDamage) && {[_unit, [_selection] call FUNC(selectionNameToNumber), _newDamage] call FUNC(determineIfFatal)}) then {
|
if ((_minLethalDamage <= _newDamage) && {[_unit, [_effectiveSelectionName] call FUNC(selectionNameToNumber), _newDamage] call FUNC(determineIfFatal)}) then {
|
||||||
if ((_unit getVariable [QGVAR(preventInstaDeath), GVAR(preventInstaDeath)])) exitwith {
|
if ((_unit getVariable [QGVAR(preventInstaDeath), GVAR(preventInstaDeath)])) exitwith {
|
||||||
_damageReturn = 0.9;
|
_damageReturn = 0.9;
|
||||||
};
|
};
|
||||||
@ -99,13 +101,8 @@ if ((_minLethalDamage <= _newDamage) && {[_unit, [_selection] call FUNC(selectio
|
|||||||
[_unit] call FUNC(addToInjuredCollection);
|
[_unit] call FUNC(addToInjuredCollection);
|
||||||
|
|
||||||
if (_unit getVariable [QGVAR(preventInstaDeath), GVAR(preventInstaDeath)]) exitWith {
|
if (_unit getVariable [QGVAR(preventInstaDeath), GVAR(preventInstaDeath)]) exitWith {
|
||||||
if (vehicle _unit != _unit and {damage (vehicle _unit) >= 1}) then {
|
private _delayedUnconsicous = false;
|
||||||
[_unit] call EFUNC(common,unloadPerson);
|
if (_vehicle != _unit and {damage _vehicle >= 1}) then {
|
||||||
};
|
|
||||||
|
|
||||||
private "_delayedUnconsicous";
|
|
||||||
_delayedUnconsicous = false;
|
|
||||||
if (vehicle _unit != _unit and {damage (vehicle _unit) >= 1}) then {
|
|
||||||
[_unit] call EFUNC(common,unloadPerson);
|
[_unit] call EFUNC(common,unloadPerson);
|
||||||
_delayedUnconsicous = true;
|
_delayedUnconsicous = true;
|
||||||
};
|
};
|
||||||
@ -118,7 +115,7 @@ if (_unit getVariable [QGVAR(preventInstaDeath), GVAR(preventInstaDeath)]) exitW
|
|||||||
if (_delayedUnconsicous) then {
|
if (_delayedUnconsicous) then {
|
||||||
[{
|
[{
|
||||||
[_this select 0, true] call FUNC(setUnconscious);
|
[_this select 0, true] call FUNC(setUnconscious);
|
||||||
}, [_unit], 0.7, 0] call EFUNC(common,waitAndExecute);
|
}, [_unit], 0.7] call EFUNC(common,waitAndExecute);
|
||||||
} else {
|
} else {
|
||||||
[{
|
[{
|
||||||
[_this select 0, true] call FUNC(setUnconscious);
|
[_this select 0, true] call FUNC(setUnconscious);
|
||||||
|
@ -29,7 +29,8 @@ if (_hitPointIndex >= 0) then {_newDamage = _damage - (_unit getHitIndex _hitPoi
|
|||||||
TRACE_7("ACE_DEBUG: HandleDamage_Caching Called",_unit, _selectionName, _damage, _source, _projectile,_hitPointIndex,_newDamage);
|
TRACE_7("ACE_DEBUG: HandleDamage_Caching Called",_unit, _selectionName, _damage, _source, _projectile,_hitPointIndex,_newDamage);
|
||||||
|
|
||||||
// Check for vehicle crash
|
// Check for vehicle crash
|
||||||
if (vehicle _unit != _unit && {!(vehicle _unit isKindOf "StaticWeapon")} && {isNull _source} && {_projectile == ""} && {_selectionName == ""}) then {
|
private _vehicle = vehicle _unit;
|
||||||
|
if ((_vehicle != _unit) && {!(_vehicle isKindOf "StaticWeapon")} && {_source in [objNull, driver _vehicle, _vehicle]} && {_projectile == ""} && {_selectionName == ""}) then {
|
||||||
if (GVAR(enableVehicleCrashes)) then {
|
if (GVAR(enableVehicleCrashes)) then {
|
||||||
_selectionName = _hitSelections select (floor(random(count _hitSelections)));
|
_selectionName = _hitSelections select (floor(random(count _hitSelections)));
|
||||||
_projectile = "vehiclecrash";
|
_projectile = "vehiclecrash";
|
||||||
@ -40,7 +41,7 @@ if (vehicle _unit != _unit && {!(vehicle _unit isKindOf "StaticWeapon")} && {isN
|
|||||||
|
|
||||||
// Handle falling damage
|
// Handle falling damage
|
||||||
_impactVelocity = (velocity _unit) select 2;
|
_impactVelocity = (velocity _unit) select 2;
|
||||||
if (_impactVelocity < -5 && {vehicle _unit == _unit}) then {
|
if (_impactVelocity < -5 && {_vehicle == _unit}) then {
|
||||||
TRACE_1("Starting isFalling", time);
|
TRACE_1("Starting isFalling", time);
|
||||||
_unit setVariable [QGVAR(isFalling), true];
|
_unit setVariable [QGVAR(isFalling), true];
|
||||||
_unit setVariable [QGVAR(impactVelocity), _impactVelocity];
|
_unit setVariable [QGVAR(impactVelocity), _impactVelocity];
|
||||||
|
@ -47,6 +47,12 @@ if (((_reviveVal == 1 && {[_unit] call EFUNC(common,isPlayer)} || _reviveVal ==
|
|||||||
_args params ["_unit"];
|
_args params ["_unit"];
|
||||||
_startTime = _unit getVariable [QGVAR(reviveStartTime), 0];
|
_startTime = _unit getVariable [QGVAR(reviveStartTime), 0];
|
||||||
|
|
||||||
|
//If we are in reivie state in a blown up vehicle, try to unload so that people can access the body
|
||||||
|
if ((alive _unit) && {(vehicle _unit) != _unit} && {!alive (vehicle _unit)}) then {
|
||||||
|
TRACE_2("Unloading", _unit, vehicle _unit);
|
||||||
|
[_unit] call EFUNC(common,unloadPerson);
|
||||||
|
};
|
||||||
|
|
||||||
if (GVAR(maxReviveTime) > 0 && {ACE_time - _startTime > GVAR(maxReviveTime)}) exitwith {
|
if (GVAR(maxReviveTime) > 0 && {ACE_time - _startTime > GVAR(maxReviveTime)}) exitwith {
|
||||||
[_idPFH] call CBA_fnc_removePerFrameHandler;
|
[_idPFH] call CBA_fnc_removePerFrameHandler;
|
||||||
_unit setVariable [QGVAR(inReviveState), nil, true];
|
_unit setVariable [QGVAR(inReviveState), nil, true];
|
||||||
|
Loading…
Reference in New Issue
Block a user