Skip to content

Commit

Permalink
Handle enemy causing veh explode, fix revive unload
Browse files Browse the repository at this point in the history
Fix #3269
  • Loading branch information
PabstMirror committed Feb 16, 2016
1 parent 9441b54 commit 5c9dfd7
Show file tree
Hide file tree
Showing 4 changed files with 15 additions and 13 deletions.
2 changes: 1 addition & 1 deletion addons/medical/functions/fnc_determineIfFatal.sqf
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,8 @@ private ["_damageThreshold", "_damageBodyPart", "_chanceFatal"];
params ["_unit", "_part", ["_withDamage", 0]];

if (!alive _unit) exitWith {true};
if (_part < 0 || _part > 5) exitWith {false};
if ((vehicle _unit != _unit) && {!alive (vehicle _unit)}) exitWith { true };
if (_part < 0 || _part > 5) exitWith {false};

// Find the correct Damage threshold for unit.
_damageThreshold = [1,1,1];
Expand Down
19 changes: 8 additions & 11 deletions addons/medical/functions/fnc_handleDamage.sqf
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@ if !(local _unit) exitWith {
nil
};

// if (alive _unit) then {diag_log text format ["HD: %1", _this];};

private ["_damageReturn", "_typeOfDamage", "_minLethalDamage", "_newDamage", "_typeIndex", "_preventDeath"];

// bug, assumed fixed, @todo excessive testing, if nothing happens remove
Expand Down Expand Up @@ -78,14 +80,14 @@ _minLethalDamage = if (_typeIndex >= 0) 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 {
_selection = _this select 1; //pull random selection from HDC
TRACE_1("Veh Crash",_selection);
_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 {
_damageReturn = 0.9;
};
Expand All @@ -101,13 +103,8 @@ if ((_minLethalDamage <= _newDamage) && {[_unit, [_selection] call FUNC(selectio
[_unit] call FUNC(addToInjuredCollection);

if (_unit getVariable [QGVAR(preventInstaDeath), GVAR(preventInstaDeath)]) exitWith {
if (vehicle _unit != _unit and {damage (vehicle _unit) >= 1}) then {
[_unit] call EFUNC(common,unloadPerson);
};

private "_delayedUnconsicous";
_delayedUnconsicous = false;
if (vehicle _unit != _unit and {damage (vehicle _unit) >= 1}) then {
private _delayedUnconsicous = false;
if (_vehicle != _unit and {damage _vehicle >= 1}) then {
[_unit] call EFUNC(common,unloadPerson);
_delayedUnconsicous = true;
};
Expand All @@ -120,7 +117,7 @@ if (_unit getVariable [QGVAR(preventInstaDeath), GVAR(preventInstaDeath)]) exitW
if (_delayedUnconsicous) then {
[{
[_this select 0, true] call FUNC(setUnconscious);
}, [_unit], 0.7, 0] call EFUNC(common,waitAndExecute);
}, [_unit], 0.7] call EFUNC(common,waitAndExecute);
} else {
[{
[_this select 0, true] call FUNC(setUnconscious);
Expand Down
1 change: 0 additions & 1 deletion addons/medical/functions/fnc_handleDamage_caching.sqf
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,6 @@ private _vehicle = vehicle _unit;
if ((_vehicle != _unit) && {!(_vehicle isKindOf "StaticWeapon")} && {_source in [objNull, driver _vehicle, _vehicle]} && {_projectile == ""} && {_selectionName == ""}) then {
if (GVAR(enableVehicleCrashes)) then {
_selectionName = _hitSelections select (floor(random(count _hitSelections)));
TRACE_1("Veh Crash",_selectionName);
_projectile = "vehiclecrash";
_this set [1, _selectionName];
_this set [4, _projectile];
Expand Down
6 changes: 6 additions & 0 deletions addons/medical/functions/fnc_setDead.sqf
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,12 @@ if (((_reviveVal == 1 && {[_unit] call EFUNC(common,isPlayer)} || _reviveVal ==
_args params ["_unit"];
_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 {
[_idPFH] call CBA_fnc_removePerFrameHandler;
_unit setVariable [QGVAR(inReviveState), nil, true];
Expand Down

0 comments on commit 5c9dfd7

Please sign in to comment.