-
Notifications
You must be signed in to change notification settings - Fork 103
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
7e405a7
commit ac41e97
Showing
9 changed files
with
232 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,90 @@ | ||
#include "..\script_component.hpp" | ||
/* | ||
* Author: Blue | ||
* Handle effects for when tourniquet is applied for prolonged time | ||
* | ||
* Arguments: | ||
* 0: Unit <OBJECT> | ||
* | ||
* Return Value: | ||
* None | ||
* | ||
* Example: | ||
* [player] call kat_misc_fnc_handleTourniquetEffects; | ||
* | ||
* Public: No | ||
*/ | ||
|
||
params ["_unit"]; | ||
|
||
if (_unit getVariable [QGVAR(Tourniquet_PFH), -1] != -1) exitWith {}; | ||
_unit setVariable [QGVAR(Tourniquet_LegNecrosis_Threshold), 0, true]; | ||
|
||
private _handleLegEffects = { | ||
params ["_unit", "_threshold"]; | ||
|
||
if (_unit getVariable [QGVAR(Tourniquet_LegNecrosis_Threshold), 0] != _threshold) then { | ||
_unit setVariable [QGVAR(Tourniquet_LegNecrosis_Threshold), _threshold, true]; | ||
[_unit] call FUNC(updateDamageEffects); | ||
}; | ||
}; | ||
|
||
private _tourniquetPFH = [{ | ||
params ["_args", "_idPFH"]; | ||
_args params ["_unit", "_handleLegEffects"]; | ||
|
||
private _tourniquet_ArmNecrosis = _unit getVariable [QGVAR(Tourniquet_ArmNecrosis), 0]; | ||
private _tourniquet_LegNecrosis = _unit getVariable [QGVAR(Tourniquet_LegNecrosis), 0]; | ||
|
||
private _activeTourniquets = GET_TOURNIQUETS(_unit); | ||
private _armTourniquets = (_activeTourniquets select 2) + (_activeTourniquets select 3); | ||
private _legTourniquets = (_activeTourniquets select 4) + (_activeTourniquets select 5); | ||
|
||
if (_armTourniquets > 1) then { | ||
_tourniquet_ArmNecrosis = _tourniquet_ArmNecrosis + 1.6; //0.15 | ||
|
||
if (_tourniquet_ArmNecrosis >= 100) then { | ||
_tourniquet_ArmNecrosis = 100; | ||
}; | ||
} else { | ||
_tourniquet_ArmNecrosis = _tourniquet_ArmNecrosis - 3.2; //0.30 | ||
|
||
if (_tourniquet_ArmNecrosis <= 0) then { | ||
_tourniquet_ArmNecrosis = 0; | ||
}; | ||
}; | ||
|
||
if (_legTourniquets > 1) then { | ||
_tourniquet_LegNecrosis = _tourniquet_LegNecrosis + 1.6; | ||
|
||
if (_tourniquet_LegNecrosis >= 100) then { | ||
_tourniquet_LegNecrosis = 100; | ||
}; | ||
} else { | ||
_tourniquet_LegNecrosis = _tourniquet_LegNecrosis - 3.2; | ||
|
||
if (_tourniquet_LegNecrosis <= 0) then { | ||
_tourniquet_LegNecrosis = 0; | ||
}; | ||
}; | ||
|
||
switch (true) do { | ||
case (_tourniquet_LegNecrosis > 20 && _tourniquet_LegNecrosis < 60): {[_unit, 20] call _handleLegEffects;}; | ||
case (_tourniquet_LegNecrosis > 60 && _tourniquet_LegNecrosis < 90): {[_unit, 60] call _handleLegEffects;}; | ||
case (_tourniquet_LegNecrosis > 90): {[_unit, 90] call _handleLegEffects;}; | ||
default {[_unit, 0] call _handleLegEffects;}; | ||
}; | ||
|
||
if ((_tourniquet_ArmNecrosis + _tourniquet_LegNecrosis <= 0 && _armTourniquets + _legTourniquets == 0) || !(alive _unit)) exitWith { | ||
_unit setVariable [QGVAR(Tourniquet_ArmNecrosis), 0]; | ||
_unit setVariable [QGVAR(Tourniquet_LegNecrosis), 0]; | ||
_unit setVariable [QGVAR(Tourniquet_LegNecrosis_Threshold), 0, true]; | ||
_unit setVariable [QGVAR(Tourniquet_PFH), -1]; | ||
[_idPFH] call CBA_fnc_removePerFrameHandler; | ||
}; | ||
|
||
_unit setVariable [QGVAR(Tourniquet_ArmNecrosis), _tourniquet_ArmNecrosis]; | ||
_unit setVariable [QGVAR(Tourniquet_LegNecrosis), _tourniquet_LegNecrosis]; | ||
}, 1, [_unit, _handleLegEffects]] call CBA_fnc_addPerFrameHandler; | ||
|
||
_unit setVariable [QGVAR(Tourniquet_PFH), _tourniquetPFH]; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,102 @@ | ||
#include "..\script_component.hpp" | ||
/* | ||
* Author: commy2, PabstMirror | ||
* Modified: Blue | ||
* Updates damage effects for limping and fractures. | ||
* | ||
* Arguments: | ||
* 0: Unit <OBJECT> | ||
* | ||
* Return Value: | ||
* None | ||
* | ||
* Example: | ||
* [player] call ace_medical_engine_fnc_updateDamageEffects | ||
* | ||
* Public: No | ||
*/ | ||
|
||
params [["_unit", objNull, [objNull]]]; | ||
|
||
if (!local _unit) exitWith { ERROR_2("updateDamageEffects: Unit not local or null [%1:%2]",_unit,typeOf _unit); }; | ||
|
||
private _isLimping = false; | ||
private _hasLegSplint = false; | ||
private _noSprint = false; | ||
private _noJog = false; | ||
|
||
if (ACEGVAR(medical,fractures) > 0) then { | ||
private _fractures = GET_FRACTURES(_unit); | ||
TRACE_1("",_fractures); | ||
if (((_fractures select 4) == 1) || {(_fractures select 5) == 1}) then { | ||
TRACE_1("limping because of fracture",_fractures); | ||
_isLimping = true; | ||
}; | ||
private _aimFracture = 0; | ||
if ((_fractures select 2) == 1) then { _aimFracture = _aimFracture + 4; }; | ||
if ((_fractures select 3) == 1) then { _aimFracture = _aimFracture + 4; }; | ||
|
||
if (ACEGVAR(medical,fractures) in [2, 3]) then { // the limp with a splint will still cause effects | ||
// Block sprint / force walking based on fracture setting and leg splint status | ||
_hasLegSplint = (_fractures select 4) == -1 || {(_fractures select 5) == -1}; | ||
if (ACEGVAR(medical,fractures) == 2) then { | ||
_noSprint = _hasLegSplint; | ||
} else { | ||
_noJog = _hasLegSplint; | ||
}; | ||
|
||
if ((_fractures select 2) == -1) then { _aimFracture = _aimFracture + 2; }; | ||
if ((_fractures select 3) == -1) then { _aimFracture = _aimFracture + 2; }; | ||
}; | ||
_unit setVariable [QACEGVAR(medical_engine,aimFracture), _aimFracture, false]; // local only var, used in ace_medical's postInit to set ACE_setCustomAimCoef | ||
}; | ||
|
||
if (!_isLimping && {ACEGVAR(medical,limping) > 0}) then { | ||
private _openWounds = GET_OPEN_WOUNDS(_unit); | ||
|
||
// Want a copy of combined arrays to prevent wound mixing | ||
private _legWounds = (_openWounds getOrDefault ["leftleg", []]) | ||
+ (_openWounds getOrDefault ["rightleg", []]); | ||
|
||
if (ACEGVAR(medical,limping) == 2) then { | ||
private _bandagedWounds = GET_BANDAGED_WOUNDS(_unit); | ||
_legWounds = _legWounds | ||
+ (_bandagedWounds getOrDefault ["leftleg", []]) | ||
+ (_bandagedWounds getOrDefault ["rightleg", []]); | ||
}; | ||
|
||
{ | ||
_x params ["_xClassID", "_xAmountOf", "", "_xDamage"]; | ||
if ( | ||
(_xAmountOf > 0) | ||
&& {_xDamage > LIMPING_DAMAGE_THRESHOLD_DEFAULT} | ||
// select _causeLimping from woundDetails | ||
&& {(ACEGVAR(medical_damage,woundDetails) get (_xClassID / 10)) select 3} | ||
) exitWith { | ||
TRACE_1("limping because of wound",_x); | ||
_isLimping = true; | ||
}; | ||
} forEach _legWounds; | ||
}; | ||
|
||
if (_unit getVariable [QGVAR(Tourniquet_LegNecrosis_Threshold), 0] >= 20) then { | ||
_noSprint = true; | ||
}; | ||
|
||
if (_unit getVariable [QGVAR(Tourniquet_LegNecrosis_Threshold), 0] >= 60) then { | ||
_noJog = true; | ||
}; | ||
|
||
if (_unit getVariable [QGVAR(Tourniquet_LegNecrosis_Threshold), 0] >= 90) then { | ||
_isLimping = true; | ||
}; | ||
|
||
[_unit, "blockSprint", QACEGVAR(medical,fracture), _noSprint] call ACEFUNC(common,statusEffect_set); | ||
[_unit, "forceWalk", QACEGVAR(medical,fracture), _noJog] call ACEFUNC(common,statusEffect_set); | ||
|
||
_unit setVariable [QACEGVAR(medical,isLimping), _isLimping, true]; | ||
|
||
// refresh | ||
private _isDamaged = _unit getHitPointDamage "HitLegs" >= DAMAGED_MIN_THRESHOLD && {_unit getHitPointDamage "HitLegs" != LIMPING_MIN_DAMAGE}; | ||
|
||
[_unit, "Legs", _isDamaged] call ACEFUNC(medical_engine,damageBodyPart); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters