mirror of
https://github.com/acemod/ACE3.git
synced 2024-08-30 18:23:18 +00:00
Merge pull request #1790 from acemod/medicalImprovements
Medical improvements
This commit is contained in:
commit
44de95ea81
@ -11,6 +11,7 @@ class ACE_Medical_Actions {
|
||||
treatmentTimeSelfCoef = 1;
|
||||
items[] = {{"ACE_fieldDressing", "ACE_packingBandage", "ACE_elasticBandage", "ACE_quikclot"}};
|
||||
condition = "";
|
||||
patientStateCondition = 0;
|
||||
itemConsumed = 1;
|
||||
|
||||
callbackSuccess = QUOTE(DFUNC(treatmentBasic_bandage));
|
||||
@ -107,6 +108,7 @@ class ACE_Medical_Actions {
|
||||
// Item required for the action. Leave empty for no item required.
|
||||
items[] = {"ACE_fieldDressing"};
|
||||
condition = "";
|
||||
patientStateCondition = 0;
|
||||
// Callbacks
|
||||
callbackSuccess = QUOTE(DFUNC(treatmentAdvanced_bandage));
|
||||
callbackFailure = "";
|
||||
@ -206,6 +208,7 @@ class ACE_Medical_Actions {
|
||||
items[] = {"ACE_surgicalKit"};
|
||||
treatmentLocations[] = {QGVAR(useLocation_SurgicalKit)};
|
||||
requiredMedic = QGVAR(medicSetting_SurgicalKit);
|
||||
patientStateCondition = QGVAR(useCondition_SurgicalKit);
|
||||
treatmentTime = "(count ((_this select 1) getVariable ['ACE_Medical_bandagedWounds', []]) * 5)";
|
||||
callbackSuccess = "";
|
||||
callbackProgress = QUOTE(DFUNC(treatmentAdvanced_surgicalKit_onProgress));
|
||||
@ -219,6 +222,7 @@ class ACE_Medical_Actions {
|
||||
items[] = {"ACE_personalAidKit"};
|
||||
treatmentLocations[] = {QGVAR(useLocation_PAK)};
|
||||
requiredMedic = QGVAR(medicSetting_PAK);
|
||||
patientStateCondition = QGVAR(useCondition_PAK);
|
||||
treatmentTime = QUOTE((_this select 1) call FUNC(treatmentAdvanced_fullHealTreatmentTime));
|
||||
callbackSuccess = QUOTE(DFUNC(treatmentAdvanced_fullHeal));
|
||||
itemConsumed = QGVAR(consumeItem_PAK);
|
||||
@ -266,10 +270,10 @@ class ACE_Medical_Actions {
|
||||
requiredMedic = 0;
|
||||
treatmentTime = 15;
|
||||
items[] = {};
|
||||
condition = "((_this select 1) getvariable ['ACE_medical_inCardiacArrest', false])";
|
||||
condition = "!([(_this select 1)] call ace_common_fnc_isAwake)";
|
||||
callbackSuccess = QUOTE(DFUNC(treatmentAdvanced_CPR));
|
||||
callbackFailure = "";
|
||||
callbackProgress = "(((_this select 0) select 1) getvariable ['ACE_medical_inCardiacArrest', false])";
|
||||
callbackProgress = "!([((_this select 0) select 1)] call ace_common_fnc_isAwake)";
|
||||
animationPatient = "";
|
||||
animationPatientUnconscious = "AinjPpneMstpSnonWrflDnon_rolltoback";
|
||||
animationCaller = "AinvPknlMstpSlayWnonDnon_medic";
|
||||
|
@ -133,6 +133,20 @@ class ACE_Settings {
|
||||
value = 2;
|
||||
values[] = {"Anywhere", "Medical vehicles", "Medical facility", "vehicle & facility", "Disabled"};
|
||||
};
|
||||
class GVAR(useCondition_PAK) {
|
||||
displayName = CSTRING(AdvancedMedicalSettings_useCondition_PAK_DisplayName);
|
||||
description = CSTRING(AdvancedMedicalSettings_useCondition_PAK_Description);
|
||||
typeName = "SCALAR";
|
||||
value = 0;
|
||||
values[] = {"Anytime", "Stable"};
|
||||
};
|
||||
class GVAR(useCondition_SurgicalKit) {
|
||||
displayName = CSTRING(AdvancedMedicalSettings_useCondition_SurgicalKit_DisplayName);
|
||||
description = CSTRING(AdvancedMedicalSettings_useCondition_SurgicalKit_Description);
|
||||
typeName = "SCALAR";
|
||||
value = 0;
|
||||
values[] = {"Anytime", "Stable"};
|
||||
};
|
||||
class GVAR(keepLocalSettingsSynced) {
|
||||
typeName = "BOOL";
|
||||
value = 1;
|
||||
|
@ -196,13 +196,21 @@ class CfgVehicles {
|
||||
class consumeItem_PAK {
|
||||
displayName = CSTRING(AdvancedMedicalSettings_consumeItem_PAK_DisplayName);
|
||||
description = CSTRING(AdvancedMedicalSettings_consumeItem_PAK_Description);
|
||||
|
||||
typeName = "NUMBER";
|
||||
class values {
|
||||
class keep { name = CSTRING(No); value = 0; };
|
||||
class remove { name = CSTRING(Yes); value = 1; default = 1; };
|
||||
};
|
||||
};
|
||||
class useCondition_PAK {
|
||||
displayName = CSTRING(AdvancedMedicalSettings_useCondition_PAK_DisplayName);
|
||||
description = CSTRING(AdvancedMedicalSettings_useCondition_PAK_Description);
|
||||
typeName = "NUMBER";
|
||||
class values {
|
||||
class AnyTime { name = CSTRING(AnyTime); value = 0; };
|
||||
class Stable { name = CSTRING(Stable); value = 1; default = 1; };
|
||||
};
|
||||
};
|
||||
class useLocation_PAK {
|
||||
displayName = CSTRING(AdvancedMedicalSettings_useLocation_PAK_DisplayName);
|
||||
description = CSTRING(AdvancedMedicalSettings_useLocation_PAK_Description);
|
||||
@ -227,15 +235,23 @@ class CfgVehicles {
|
||||
displayName = CSTRING(AdvancedMedicalSettings_useLocation_SurgicalKit_DisplayName);
|
||||
description = CSTRING(AdvancedMedicalSettings_useLocation_SurgicalKit_Description);
|
||||
};
|
||||
class useCondition_SurgicalKit: useCondition_PAK {
|
||||
displayName = CSTRING(AdvancedMedicalSettings_useCondition_SurgicalKit_DisplayName);
|
||||
description = CSTRING(AdvancedMedicalSettings_useCondition_SurgicalKit_Description);
|
||||
class values {
|
||||
class AnyTime { name = CSTRING(AnyTime); value = 0; default = 1; };
|
||||
class Stable { name = CSTRING(Stable); value = 1; };
|
||||
};
|
||||
};
|
||||
class healHitPointAfterAdvBandage {
|
||||
displayName = CSTRING(AdvancedMedicalSettings_healHitPointAfterAdvBandage_DisplayName);
|
||||
description = CSTRING(AdvancedMedicalSettings_healHitPointAfterAdvBandage_Description);
|
||||
description = CSTRING(AdvancedMedicalSettings_healHitPointAfterAdvBandage_Description);
|
||||
typeName = "BOOL";
|
||||
defaultValue = 0;
|
||||
};
|
||||
class painIsOnlySuppressed {
|
||||
displayName = CSTRING(AdvancedMedicalSettings_painIsOnlySuppressed_DisplayName);
|
||||
description = CSTRING(AdvancedMedicalSettings_painIsOnlySuppressed_Description);
|
||||
description = CSTRING(AdvancedMedicalSettings_painIsOnlySuppressed_Description);
|
||||
typeName = "BOOL";
|
||||
defaultValue = 1;
|
||||
};
|
||||
|
@ -56,6 +56,7 @@ PREP(isInMedicalFacility);
|
||||
PREP(isInMedicalVehicle);
|
||||
PREP(isMedic);
|
||||
PREP(isMedicalVehicle);
|
||||
PREP(isInStableCondition);
|
||||
PREP(itemCheck);
|
||||
PREP(modifyMedicalAction);
|
||||
PREP(onMedicationUsage);
|
||||
|
@ -16,7 +16,7 @@
|
||||
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_caller", "_target", "_selectionName", "_className", "_config", "_medicRequired", "_items", "_locations", "_return", "_condition"];
|
||||
private ["_caller", "_target", "_selectionName", "_className", "_config", "_medicRequired", "_items", "_locations", "_return", "_condition", "_patientStateCondition"];
|
||||
_caller = _this select 0;
|
||||
_target = _this select 1;
|
||||
_selectionName = _this select 2;
|
||||
@ -44,7 +44,6 @@ if !([_caller, _medicRequired] call FUNC(isMedic)) exitwith {false};
|
||||
_items = getArray (_config >> "items");
|
||||
if (count _items > 0 && {!([_caller, _target, _items] call FUNC(hasItems))}) exitwith {false};
|
||||
|
||||
_locations = getArray (_config >> "treatmentLocations");
|
||||
|
||||
_return = true;
|
||||
if (getText (_config >> "condition") != "") then {
|
||||
@ -62,6 +61,14 @@ if (getText (_config >> "condition") != "") then {
|
||||
};
|
||||
if (!_return) exitwith {false};
|
||||
|
||||
_patientStateCondition = if (isText(_config >> "patientStateCondition")) then {
|
||||
missionNamespace getvariable [getText(_config >> "patientStateCondition"), 0]
|
||||
} else {
|
||||
getNumber(_config >> "patientStateCondition")
|
||||
};
|
||||
if (_patientStateCondition == 1 && {!([_target] call FUNC(isInStableCondition))}) exitwith {false};
|
||||
|
||||
_locations = getArray (_config >> "treatmentLocations");
|
||||
if ("All" in _locations) exitwith {true};
|
||||
|
||||
private [ "_medFacility", "_medVeh"];
|
||||
|
@ -16,7 +16,6 @@
|
||||
private ["_unit","_return"];
|
||||
_unit = _this select 0;
|
||||
|
||||
if (GVAR(level) == 1) exitwith {true};
|
||||
if (isnil QGVAR(unconsciousConditions)) then {
|
||||
GVAR(unconsciousConditions) = [];
|
||||
};
|
||||
|
@ -58,10 +58,10 @@ if (isClass (_config >> _className)) then {
|
||||
|
||||
_bandagedWounds = _target getvariable [QGVAR(bandagedWounds), []];
|
||||
_exist = false;
|
||||
_injuryId = _injury select 0;
|
||||
_injuryType = _injury select 1;
|
||||
_bandagedInjury = [];
|
||||
{
|
||||
if ((_x select 0) == _injuryId) exitwith {
|
||||
if ((_x select 1) == _injuryType && (_x select 2) == (_injury select 2)) exitwith {
|
||||
_exist = true;
|
||||
_existingInjury = _x;
|
||||
_existingInjury set [3, (_existingInjury select 3) + _impact];
|
||||
@ -73,16 +73,11 @@ _bandagedInjury = [];
|
||||
|
||||
if !(_exist) then {
|
||||
// [ID, classID, bodypart, percentage treated, bloodloss rate]
|
||||
_bandagedInjury = [_injuryId, _injury select 1, _injury select 2, _impact, _injury select 4];
|
||||
_bandagedInjury = [_injury select 0, _injury select 1, _injury select 2, _impact, _injury select 4];
|
||||
_bandagedWounds pushback _bandagedInjury;
|
||||
};
|
||||
|
||||
_target setvariable [QGVAR(bandagedWounds), _bandagedWounds, !USE_WOUND_EVENT_SYNC];
|
||||
|
||||
if (USE_WOUND_EVENT_SYNC) then {
|
||||
// sync _bandagedInjury
|
||||
|
||||
};
|
||||
_target setvariable [QGVAR(bandagedWounds), _bandagedWounds, true];
|
||||
|
||||
// Check if we are ever going to reopen this
|
||||
if (random(1) <= _reopeningChance) then {
|
||||
@ -95,22 +90,19 @@ if (random(1) <= _reopeningChance) then {
|
||||
_injuryIndex = _this select 3;
|
||||
_injury = _this select 4;
|
||||
|
||||
if (alive _target) then {
|
||||
//if (alive _target) then {
|
||||
_openWounds = _target getvariable [QGVAR(openWounds), []];
|
||||
if ((count _openWounds)-1 < _injuryIndex) exitwith {};
|
||||
_selectedInjury = _openWounds select _injuryIndex;
|
||||
if (_selectedInjury select 0 == _injury select 0) then { // matching the IDs
|
||||
if (_selectedInjury select 1 == _injury select 1 && (_selectedInjury select 2) == (_injury select 2)) then { // matching the IDs
|
||||
_selectedInjury set [3, (_selectedInjury select 3) + _impact];
|
||||
_openWounds set [_injuryIndex, _selectedInjury];
|
||||
_target setvariable [QGVAR(openWounds), _openWounds, !USE_WOUND_EVENT_SYNC];
|
||||
if (USE_WOUND_EVENT_SYNC) then {
|
||||
["medical_propagateWound", [_target, _selectedInjury]] call EFUNC(common,globalEvent);
|
||||
};
|
||||
|
||||
_bandagedWounds = _target getvariable [QGVAR(bandagedWounds), []];
|
||||
_exist = false;
|
||||
_injuryId = _injury select 0;
|
||||
_injuryId = _injury select 1;
|
||||
{
|
||||
if ((_x select 0) == _injuryId) exitwith {
|
||||
if ((_x select 1) == _injuryId && (_x select 2) == (_injury select 2)) exitwith {
|
||||
_exist = true;
|
||||
_existingInjury = _x;
|
||||
_existingInjury set [3, ((_existingInjury select 3) - _impact) max 0];
|
||||
@ -119,10 +111,11 @@ if (random(1) <= _reopeningChance) then {
|
||||
}foreach _bandagedWounds;
|
||||
|
||||
if (_exist) then {
|
||||
_target setvariable [QGVAR(bandagedWounds), _bandagedWounds, !USE_WOUND_EVENT_SYNC];
|
||||
_target setvariable [QGVAR(bandagedWounds), _bandagedWounds, true];
|
||||
_target setvariable [QGVAR(openWounds), _openWounds, true];
|
||||
};
|
||||
};
|
||||
// Otherwise something went wrong, we we don't reopen them..
|
||||
};
|
||||
}, [_target, _impact, _part, _injuryIndex, _injury], _delay, 0] call EFUNC(common,waitAndExecute);
|
||||
//};
|
||||
}, [_target, _impact, _part, _injuryIndex, +_injury], _delay, 0] call EFUNC(common,waitAndExecute);
|
||||
};
|
||||
|
30
addons/medical/functions/fnc_isInStableCondition.sqf
Normal file
30
addons/medical/functions/fnc_isInStableCondition.sqf
Normal file
@ -0,0 +1,30 @@
|
||||
/*
|
||||
* Author: Glowbal
|
||||
* Check if a unit is in a stable condition
|
||||
*
|
||||
* Arguments:
|
||||
* 0: The patient <OBJECT>
|
||||
*
|
||||
* Return Value:
|
||||
* Is in stable condition <BOOL>
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_unit"];
|
||||
_unit = _this select 0;
|
||||
|
||||
if (GVAR(level) <= 1) exitwith {
|
||||
([_unit] call FUNC(getBloodloss)) == 0;
|
||||
};
|
||||
|
||||
_totalBloodLoss = 0;
|
||||
_openWounds = _unit getvariable [QGVAR(openWounds), []];
|
||||
{
|
||||
// total bleeding ratio * percentage of injury left
|
||||
_totalBloodLoss = _totalBloodLoss + ((_x select 4) * (_x select 3));
|
||||
}foreach _openWounds;
|
||||
|
||||
(_totalBloodLoss == 0);
|
@ -33,5 +33,7 @@ if !(_activated) exitWith {};
|
||||
[_logic, QGVAR(consumeItem_SurgicalKit), "consumeItem_SurgicalKit"] call EFUNC(common,readSettingFromModule);
|
||||
[_logic, QGVAR(useLocation_PAK), "useLocation_PAK"] call EFUNC(common,readSettingFromModule);
|
||||
[_logic, QGVAR(useLocation_SurgicalKit), "useLocation_SurgicalKit"] call EFUNC(common,readSettingFromModule);
|
||||
[_logic, QGVAR(useCondition_PAK), "useCondition_PAK"] call EFUNC(common,readSettingFromModule);
|
||||
[_logic, QGVAR(useCondition_SurgicalKit), "useCondition_SurgicalKit"] call EFUNC(common,readSettingFromModule);
|
||||
[_logic, QGVAR(healHitPointAfterAdvBandage), "healHitPointAfterAdvBandage"] call EFUNC(common,readSettingFromModule);
|
||||
[_logic, QGVAR(painIsOnlySuppressed), "painIsOnlySuppressed"] call EFUNC(common,readSettingFromModule);
|
||||
|
@ -66,6 +66,11 @@ if (((_reviveVal == 1 && {[_unit] call EFUNC(common,isPlayer)} || _reviveVal ==
|
||||
_unit setvariable [QGVAR(reviveStartTime), nil];
|
||||
[(_this select 1)] call cba_fnc_removePerFrameHandler;
|
||||
};
|
||||
if (GVAR(level) >= 2) then {
|
||||
if (_unit getvariable [QGVAR(heartRate), 60] > 0) then {
|
||||
_unit setvariable [QGVAR(heartRate), 0];
|
||||
};
|
||||
};
|
||||
}, 1, [_unit] ] call CBA_fnc_addPerFrameHandler;
|
||||
false;
|
||||
};
|
||||
|
@ -16,7 +16,7 @@
|
||||
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_caller", "_target", "_selectionName", "_className", "_config", "_medicRequired", "_items", "_locations", "_return", "_callbackProgress", "_treatmentTime", "_callerAnim", "_patientAnim", "_iconDisplayed", "_return", "_usersOfItems", "_consumeItems", "_condition", "_displayText", "_wpn", "_treatmentTimeConfig"];
|
||||
private ["_caller", "_target", "_selectionName", "_className", "_config", "_medicRequired", "_items", "_locations", "_return", "_callbackProgress", "_treatmentTime", "_callerAnim", "_patientAnim", "_iconDisplayed", "_return", "_usersOfItems", "_consumeItems", "_condition", "_displayText", "_wpn", "_treatmentTimeConfig", "_patientStateCondition"];
|
||||
_caller = _this select 0;
|
||||
_target = _this select 1;
|
||||
_selectionName = _this select 2;
|
||||
@ -53,9 +53,6 @@ if !([_caller, _medicRequired] call FUNC(isMedic)) exitwith {false};
|
||||
_items = getArray (_config >> "items");
|
||||
if (count _items > 0 && {!([_caller, _target, _items] call FUNC(hasItems))}) exitwith {false};
|
||||
|
||||
// Check allowed locations
|
||||
_locations = getArray (_config >> "treatmentLocations");
|
||||
|
||||
_return = true;
|
||||
if (isText (_config >> "Condition")) then {
|
||||
_condition = getText(_config >> "condition");
|
||||
@ -74,6 +71,16 @@ if (isText (_config >> "Condition")) then {
|
||||
};
|
||||
if (!_return) exitwith {false};
|
||||
|
||||
_patientStateCondition = if (isText(_config >> "patientStateCondition")) then {
|
||||
missionNamespace getvariable [getText(_config >> "patientStateCondition"), 0]
|
||||
} else {
|
||||
getNumber(_config >> "patientStateCondition")
|
||||
};
|
||||
if (_patientStateCondition == 1 && {!([_target] call FUNC(isInStableCondition))}) exitwith {false};
|
||||
|
||||
// Check allowed locations
|
||||
_locations = getArray (_config >> "treatmentLocations");
|
||||
|
||||
if ("All" in _locations) then {
|
||||
_return = true;
|
||||
} else {
|
||||
|
@ -23,7 +23,7 @@ _selectionName = _this select 2;
|
||||
_className = _this select 3;
|
||||
_items = _this select 4;
|
||||
|
||||
// TODO replace by event system instead
|
||||
[[_caller, _target], QUOTE(DFUNC(treatmentAdvanced_CPRLocal)), _target] call EFUNC(common,execRemoteFnc); /* TODO Replace by event system */
|
||||
|
||||
if (alive _target && {(_target getvariable [QGVAR(inCardiacArrest), false] || _target getvariable [QGVAR(inReviveState), false])}) then {
|
||||
[[_caller, _target], QUOTE(DFUNC(treatmentAdvanced_CPRLocal)), _target] call EFUNC(common,execRemoteFnc); /* TODO Replace by event system */
|
||||
};
|
||||
true;
|
||||
|
@ -14,17 +14,15 @@
|
||||
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_caller","_target", "_n"];
|
||||
private ["_caller","_target", "_reviveStartTime"];
|
||||
_caller = _this select 0;
|
||||
_target = _this select 1;
|
||||
|
||||
_n = _target getvariable [QEGVAR(common,ENABLE_REVIVE_COUNTER),0];
|
||||
if (_n > 0) then {
|
||||
_n = _n - random(20);
|
||||
if (_n < 0) then {
|
||||
_n = 0;
|
||||
if (_target getvariable [QGVAR(inReviveState), false]) exitwith {
|
||||
_reviveStartTime = _target getvariable [QGVAR(reviveStartTime),0];
|
||||
if (_reviveStartTime > 0) then {
|
||||
_target setvariable [QGVAR(reviveStartTime), (_reviveStartTime + random(20)) min ACE_time];
|
||||
};
|
||||
_target setvariable [QEGVAR(common,ENABLE_REVIVE_COUNTER), _n];
|
||||
};
|
||||
|
||||
if (random(1)>= 0.6) exitwith {
|
||||
|
@ -60,4 +60,4 @@ if (isNil _callback) then {
|
||||
|
||||
_args call _callback;
|
||||
|
||||
_args call FUNC(createLitter);
|
||||
// _args call FUNC(createLitter);
|
||||
|
@ -3179,7 +3179,7 @@
|
||||
<Portuguese>Localizações do KPS</Portuguese>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Medical_AdvancedMedicalSettings_useLocation_PAK_Description">
|
||||
<English>Where can the personal aid kit be used?</English>
|
||||
<English>Where can the Personal Aid Kit be used?</English>
|
||||
<Russian>Где может использоваться аптечка?</Russian>
|
||||
<Polish>Gdzie można korzystać z apteczek osobistych?</Polish>
|
||||
<Spanish>¿Dónde se puede utilizar el equipo de primeros auxilios?</Spanish>
|
||||
@ -3187,6 +3187,12 @@
|
||||
<Czech>Kde může být osobní lékárnička použita?</Czech>
|
||||
<Portuguese>Onde o kit de primeiros socorros pode ser utilizado?</Portuguese>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Medical_AdvancedMedicalSettings_useCondition_PAK_DisplayName">
|
||||
<English>Condition PAK</English>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Medical_AdvancedMedicalSettings_useCondition_PAK_Description">
|
||||
<English>When can the Personal Aid Kit be used?</English>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Medical_AdvancedMedicalSettings_anywhere">
|
||||
<English>Anywhere</English>
|
||||
<Russian>Где угодно</Russian>
|
||||
@ -3286,6 +3292,12 @@
|
||||
<Czech>Kde může být použita chirurgická souprava?</Czech>
|
||||
<Portuguese>Onde o kit cirúrgico pode ser utilizado?</Portuguese>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Medical_AdvancedMedicalSettings_useCondition_SurgicalKit_DisplayName">
|
||||
<English>Condition Surgical kit (Adv)</English>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Medical_AdvancedMedicalSettings_useCondition_SurgicalKit_Description">
|
||||
<English>When can the Surgical kit be used?</English>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Medical_AdvancedMedicalSettings_healHitPointAfterAdvBandage_DisplayName">
|
||||
<English>Bloodstains</English>
|
||||
<German>Blutflecken</German>
|
||||
@ -3611,5 +3623,11 @@
|
||||
<Portuguese>Não</Portuguese>
|
||||
<Italian>No</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Medical_AnyTime">
|
||||
<English>Anytime</English>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Medical_Stable">
|
||||
<English>Stable</English>
|
||||
</Key>
|
||||
</Package>
|
||||
</Project>
|
Loading…
Reference in New Issue
Block a user