Merge branch 'master' into require-surrender-captive

This commit is contained in:
Glowbal 2015-08-08 23:21:00 +02:00
commit 54ad9d1444
186 changed files with 3241 additions and 654 deletions

View File

@ -107,3 +107,4 @@ VyMajoris(W-Cephei)<vycanismajoriscsa@gmail.com>
Winter <simon@agius-muscat.net>
zGuba
Drill <drill87@gmail.com>
MikeMatrix <m.braun92@gmail.com>

View File

@ -31,7 +31,7 @@ _actions = [];
if (getText (_item >> "ACE_Attachable") != "") then {
_displayName = getText(_item >> "displayName");
_picture = getText(_item >> "picture");
_action = [_x, _displayName, _picture, {_this call FUNC(attach)}, {_this call FUNC(canAttach)}, {}, [_x]] call EFUNC(interact_menu,createAction);
_action = [_x, _displayName, _picture, {[{_this call FUNC(attach)}, _this] call EFUNC(common,execNextFrame)}, {_this call FUNC(canAttach)}, {}, [_x]] call EFUNC(interact_menu,createAction);
_actions pushBack [_action, [], _target];
};
};
@ -44,7 +44,7 @@ _actions = [];
if (getText (_item >> "ACE_Attachable") != "") then {
_displayName = getText(_item >> "displayName");
_picture = getText(_item >> "picture");
_action = [_x, _displayName, _picture, {_this call FUNC(attach)}, {_this call FUNC(canAttach)}, {}, [_x]] call EFUNC(interact_menu,createAction);
_action = [_x, _displayName, _picture, {[{_this call FUNC(attach)}, _this] call EFUNC(common,execNextFrame)}, {_this call FUNC(canAttach)}, {}, [_x]] call EFUNC(interact_menu,createAction);
_actions pushBack [_action, [], _target];
};
};

View File

@ -1,9 +1,9 @@
// by commy2
#include "script_component.hpp"
private ["_wall", "_paper"];
private "_paper";
_wall = _this select 0;
params ["_wall"];
if (local _wall) then {
_paper = "UserTexture_1x2_F" createVehicle position _wall;

View File

@ -341,6 +341,14 @@ if(isMultiplayer && { ACE_time > 0 || isNull player } ) then {
GVAR(deviceKeyHandlingArray) = [];
GVAR(deviceKeyCurrentIndex) = -1;
// Register localizations for the Keybinding categories
["ACE3 Equipment", localize LSTRING(ACEKeybindCategoryEquipment)] call cba_fnc_registerKeybindModPrettyName;
["ACE3 Common", localize LSTRING(ACEKeybindCategoryCommon)] call cba_fnc_registerKeybindModPrettyName;
["ACE3 Weapons", localize LSTRING(ACEKeybindCategoryWeapons)] call cba_fnc_registerKeybindModPrettyName;
["ACE3 Movement", localize LSTRING(ACEKeybindCategoryMovement)] call cba_fnc_registerKeybindModPrettyName;
["ACE3 Scope Adjustment", localize LSTRING(ACEKeybindCategoryScopeAdjustment)] call cba_fnc_registerKeybindModPrettyName;
["ACE3 Vehicles", localize LSTRING(ACEKeybindCategoryVehicles)] call cba_fnc_registerKeybindModPrettyName;
["ACE3 Equipment", QGVAR(openDevice), (localize "STR_ACE_Common_toggleHandheldDevice"),
{
[] call FUNC(deviceKeyFindValidIndex);

View File

@ -65,7 +65,8 @@ if (isNil _name) then {
localizedDescription,
possibleValues,
isForced,
defaultValue
defaultValue,
category
];*/
_settingData = [
_name,
@ -75,7 +76,8 @@ if (isNil _name) then {
getText (_optionEntry >> "description"),
getArray (_optionEntry >> "values"),
getNumber (_optionEntry >> "force") > 0,
_value
_value,
getText (_optionEntry >> "category")
];
//Strings in the values array won't be localized from the config, so just do that now:

View File

@ -30,14 +30,14 @@ if (_vehicle isKindOf "Ship" ) then {
_emptyPos = (getPosASL _vehicle) call EFUNC(common,ASLtoPosition);
_emptyPos = [(_emptyPos select 0) + random(5), (_emptyPos select 1) + random(5), _emptyPos select 2 ];
} else {
if !(speed _vehicle <1 && {isTouchingGround _vehicle}) then {_validVehiclestate = false};
if !(speed _vehicle <1 && {(((getPosATL _vehicle) select 2) < 2)}) then {_validVehiclestate = false};
TRACE_1("Vehicle Ground Check", isTouchingGround _vehicle);
_emptyPos = ((getPosASL _vehicle) call EFUNC(common,ASLtoPosition) findEmptyPosition [0, 13, typeof _unit]);
};
};
TRACE_1("getPosASL Vehicle Check", getPosASL _vehicle);
if (!_validVehiclestate) exitwith { diag_log format["Unable to unload patient because invalid vehicle state. Either moving or Not close enough on the ground. %1", getPos _vehicle]; false };
if (!_validVehiclestate) exitwith { diag_log format["Unable to unload patient because invalid (%1) vehicle state. Either moving or Not close enough on the ground. position: %2 isTouchingGround: %3 Speed: %4", _vehicle, getPos _vehicle, isTouchingGround _vehicle, speed _vehicle]; false };
diag_log str _emptyPos;

View File

@ -598,5 +598,86 @@
<Polish>Następne urządzenie podręczne</Polish>
<Czech>Procházet ruční zařízení</Czech>
</Key>
<Key ID="STR_ACE_Common_Disabled">
<English>Disabled</English>
<Czech>Zakázáno</Czech>
<French>Non</French>
<German>Deaktiviert</German>
<Italian>Disattivato</Italian>
<Polish>Wyłączone</Polish>
<Portuguese>Desativado</Portuguese>
<Russian>Откл.</Russian>
<Spanish>Desactivado</Spanish>
</Key>
<Key ID="STR_ACE_Common_Enabled">
<English>Enabled</English>
<Czech>Zapnuto</Czech>
<French>Oui</French>
<German>Aktiviert</German>
<Italian>Attivato</Italian>
<Polish>Włączone</Polish>
<Portuguese>Ativado</Portuguese>
<Russian>Вкл.</Russian>
<Spanish>Activado</Spanish>
</Key>
<Key ID="STR_ACE_Common_Yes">
<English>Yes</English>
<German>Ja</German>
<Spanish>Si</Spanish>
<Polish>Tak</Polish>
<Czech>Ano</Czech>
<French>Oui</French>
<Russian>Да</Russian>
<Hungarian>Igen</Hungarian>
<Portuguese>Sim</Portuguese>
<Italian>Si</Italian>
</Key>
<Key ID="STR_ACE_Common_No">
<English>No</English>
<German>Nein</German>
<Spanish>No</Spanish>
<Polish>Nie</Polish>
<Czech>Ne</Czech>
<French>Non</French>
<Russian>Нет</Russian>
<Hungarian>Nem</Hungarian>
<Portuguese>Não</Portuguese>
<Italian>No</Italian>
</Key>
<Key ID="STR_ACE_Common_VehiclesOnly">
<English>Vehicles only</English>
</Key>
<Key ID="STR_ACE_Common_DoNotForce">
<English>Do Not Force</English>
<Polish>Nie wymuszaj</Polish>
<Spanish>No forzar</Spanish>
<German>Nicht erzwingen</German>
<Czech>Nevynucovat</Czech>
<Portuguese>Não forçar</Portuguese>
</Key>
<Key ID="STR_ACE_Common_ACEKeybindCategoryEquipment">
<English>ACE3 Equipment</English>
<Polish>ACE3 Wyposażenie</Polish>
</Key>
<Key ID="STR_ACE_Common_ACEKeybindCategoryCommon">
<English>ACE3 Common</English>
<Polish>ACE3 Ogólne</Polish>
</Key>
<Key ID="STR_ACE_Common_ACEKeybindCategoryWeapons">
<English>ACE3 Weapons</English>
<Polish>ACE3 Broń</Polish>
</Key>
<Key ID="STR_ACE_Common_ACEKeybindCategoryMovement">
<English>ACE3 Movement</English>
<Polish>ACE3 Ruch</Polish>
</Key>
<Key ID="STR_ACE_Common_ACEKeybindCategoryScopeAdjustment">
<English>ACE3 Scope Adjustment</English>
<Polish>ACE3 Regulacja optyki</Polish>
</Key>
<Key ID="STR_ACE_Common_ACEKeybindCategoryVehicles">
<English>ACE3 Vehicles</English>
<Polish>ACE3 Pojazdy</Polish>
</Key>
</Package>
</Project>

View File

@ -123,7 +123,8 @@ class CfgVehicles {
displayName = "$STR_ACE_ROLLWIRE";
distance = 4;
condition = "true";
statement = QUOTE([ARR_2(_target,_player)] call FUNC(deploy));
//wait a frame to handle "Do When releasing action menu key" option:
statement = QUOTE([ARR_2({_this call FUNC(deploy)}, [ARR_2(_target,_player)])] call EFUNC(common,execNextFrame));
showDisabled = 0;
exceptions[] = {};
priority = 5;

View File

@ -37,7 +37,7 @@ deleteVehicle _wirecoil;
_unit setVariable [QGVAR(wireDeployed), false];
GVAR(deployPFH) = [{
EXPLODE_4_PVT(_this select 0,_wireNoGeo,_wireNoGeoPos,_unit,_action);
EXPLODE_3_PVT(_this select 0,_wireNoGeo,_wireNoGeoPos,_unit);
private ["_range", "_posStart", "_posEnd", "_dirVect", "_dir", "_anim", "_wire"];
_posStart = (_wireNoGeo modelToWorldVisual (_wireNoGeo selectionPosition "start")) call EFUNC(common,positionToASL);
@ -73,7 +73,7 @@ GVAR(deployPFH) = [{
{
_wireNoGeo animate [_x, _anim];
} foreach WIRE_FAST;
}, 0, [_wireNoGeo, _wireNoGeoPos, _unit, _action]] call CBA_fnc_addPerFrameHandler;
}, 0, [_wireNoGeo, _wireNoGeoPos, _unit]] call CBA_fnc_addPerFrameHandler;
[localize "STR_ACE_ROLLWIRE", "", ""] call EFUNC(interaction,showMouseHint);

View File

@ -2,6 +2,8 @@ class ACE_Settings {
class GVAR(EnableCombatDeafness) {
value = 1;
typeName = "BOOL";
displayName = CSTRING(CombatDeafness_DisplayName);
description = CSTRING(CombatDeafness_Description);
};
class GVAR(EarplugsVolume) {
value = 0.5;

View File

@ -109,6 +109,27 @@ class CfgVehicles {
typeName = "BOOL";
defaultValue = 1;
};
class DisableEarRinging {
displayName = CSTRING(DisableEarRinging);
typeName = "NUMBER";
class values {
class DoNotForce {
default = 1;
name = ECSTRING(common,DoNotForce);
value = -1;
};
/* Probably don't want to allow forcing ear ringing for people who have serious problems with the effect
class NotDisabled {
name = ECSTRING(common,No);
value = 0;
};
*/
class IsDisabled {
name = ECSTRING(common,Yes);
value = 1;
};
};
};
};
class ModuleDescription {
description = CSTRING(Module_Description);

View File

@ -16,4 +16,9 @@ if !(_activated) exitWith {};
[_logic, QGVAR(enableCombatDeafness), "EnableCombatDeafness"] call EFUNC(common,readSettingFromModule);
// Do Not Force - read module setting only non-default is set due to using SCALAR
if ((_logic getVariable "DisableEarRinging") != -1) then {
[_logic, QGVAR(DisableEarRinging), "DisableEarRinging"] call EFUNC(common,readSettingFromModule);
};
diag_log text "[ACE]: Hearing Module Initialized.";

View File

@ -126,7 +126,7 @@
<Portuguese>Ativar surdez em combate?</Portuguese>
</Key>
<Key ID="STR_ACE_Hearing_CombatDeafness_Description">
<English>Enable combat deafness?</English>
<English>Reduces the hearing ability as the player takes hearing damage</English>
<Polish>Możliwość chwilowej utraty słuchu przy głośnych wystrzałach i jednoczesnym braku włożonych stoperów</Polish>
<Spanish>Habilita la sordera de combate</Spanish>
<German>Aktiviere Taubheit im Gefecht?</German>
@ -134,7 +134,7 @@
<Portuguese>Ativar surdez em combate?</Portuguese>
</Key>
<Key ID="STR_ACE_Hearing_Module_Description">
<English></English>
<English>Controls combat deafness and ear ringing. When activated, players can be deafened when a gun is fired in their vicinity or an explosion takes place without hearing protection</English>
<Polish>Głuchota bojowa pojawia się w momentach, kiedy stoimy w pobliżu broni wielkokalibrowej bez ochrony słuchu, lub np. podczas ostrzału artyleryjskiego. Moduł ten pozwala na włączenie lub wyłączenie tego efektu.</Polish>
<German>Dieses Modul aktiviert/deaktiviert die Taubheit im Gefecht. Wenn aktiviert, können Spieler ohne Gehörschutz taub werden, wenn eine Waffe in ihrer Nähe abgefeuert wird oder eine Explosion stattfindet.</German>
<Czech>Ztráta sluchu je možná ve chvíly, kdy se v bezprostřední blízkosti střílí z velkorážní zbraně nebo při bombardování a osoba je bez ochrany sluchu (např. špunty). Tento modul umožňuje tuto věc povolit nebo zakázat.</Czech>

View File

@ -3,12 +3,14 @@ class ACE_Settings {
value = 0;
typeName = "BOOL";
isClientSettable = 1;
category = LSTRING(Category_InteractionMenu);
displayName = CSTRING(AlwaysUseCursorSelfInteraction);
};
class GVAR(cursorKeepCentered) {
value = 0;
typeName = "BOOL";
isClientSettable = 1;
category = LSTRING(Category_InteractionMenu);
displayName = CSTRING(cursorKeepCentered);
description = CSTRING(cursorKeepCenteredDescription);
};
@ -16,42 +18,49 @@ class ACE_Settings {
value = 0;
typeName = "BOOL";
isClientSettable = 1;
category = LSTRING(Category_InteractionMenu);
displayName = CSTRING(AlwaysUseCursorInteraction);
};
class GVAR(UseListMenu) {
value = 0;
typeName = "BOOL";
isClientSettable = 1;
category = LSTRING(Category_InteractionMenu);
displayName = CSTRING(UseListMenu);
};
class GVAR(colorTextMax) {
value[] = {1, 1, 1, 1};
typeName = "COLOR";
isClientSettable = 1;
category = LSTRING(Category_InteractionMenu);
displayName = CSTRING(ColorTextMax);
};
class GVAR(colorTextMin) {
value[] = {1, 1, 1, 0.25};
typeName = "COLOR";
isClientSettable = 1;
category = LSTRING(Category_InteractionMenu);
displayName = CSTRING(ColorTextMin);
};
class GVAR(colorShadowMax) {
value[] = {0, 0, 0, 1};
typeName = "COLOR";
isClientSettable = 1;
category = LSTRING(Category_InteractionMenu);
displayName = CSTRING(ColorShadowMax);
};
class GVAR(colorShadowMin) {
value[] = {0, 0, 0, 0.25};
typeName = "COLOR";
isClientSettable = 1;
category = LSTRING(Category_InteractionMenu);
displayName = CSTRING(ColorShadowMin);
};
class GVAR(textSize) {
value = 2;
typeName = "SCALAR";
isClientSettable = 1;
category = LSTRING(Category_InteractionMenu);
displayName = CSTRING(textSize);
values[] = {"$str_very_small", "$str_small", "$str_medium", "$str_large", "$str_very_large"};
};
@ -59,6 +68,7 @@ class ACE_Settings {
value = 2;
typeName = "SCALAR";
isClientSettable = 1;
category = LSTRING(Category_InteractionMenu);
displayName = CSTRING(shadowSetting);
description = CSTRING(shadowSettingDescription);
values[] = {"$STR_A3_OPTIONS_DISABLED", "$STR_A3_OPTIONS_ENABLED", CSTRING(shadowOutline)};
@ -67,12 +77,14 @@ class ACE_Settings {
value = 1;
typeName = "BOOL";
isClientSettable = 1;
category = LSTRING(Category_InteractionMenu);
displayName = CSTRING(ActionOnKeyRelease);
};
class GVAR(menuBackground) {
value = 0;
typeName = "SCALAR";
isClientSettable = 1;
category = LSTRING(Category_InteractionMenu);
displayName = CSTRING(background);
values[] = {"$STR_A3_OPTIONS_DISABLED", CSTRING(backgroundBlur), CSTRING(backgroundBlack)};
};
@ -80,6 +92,7 @@ class ACE_Settings {
value = 0;
typeName = "BOOL";
isClientSettable = 1;
category = LSTRING(Category_InteractionMenu);
displayName = CSTRING(addBuildingActions);
description = CSTRING(addBuildingActionsDescription);
};

View File

@ -267,5 +267,9 @@
<Czech>Přidá možnost interakce pro otevření dvěří a umistňovat žebříky na budovy. (Poznámka: Použití této možnosti snižuje výkon při otevírání pomocí interakčního menu, zejména ve velkých městech.) </Czech>
<Spanish>Añade las acciones de interacción para la apertura de puertas y montaje de escaleras en los edificios. (Nota: Hay un coste de rendimiento al abrir el menú de interacción, especialmente en las ciudades)</Spanish>
</Key>
<Key ID="STR_ACE_Interact_Menu_Category_InteractionMenu">
<English>Interaction Menu</English>
<Polish>Menu interakcji</Polish>
</Key>
</Package>
</Project>
</Project>

View File

@ -91,7 +91,7 @@ class CfgVehicles {
class ACE_JoinGroup {
displayName = CSTRING(JoinGroup);
condition = QUOTE([ARR_2(_player,_target)] call DFUNC(canJoinGroup));
condition = QUOTE(GVAR(EnableTeamManagement) && {[ARR_2(_player,_target)] call DFUNC(canJoinGroup)});
statement = QUOTE([_player] joinSilent group _target);
showDisabled = 0;
priority = 2.6;
@ -351,7 +351,7 @@ class CfgVehicles {
hotkey = "7";
};
class ACE_Gesture_Yes {
displayName = CSTRING(Gestures_Yes);
displayName = ECSTRING(common,Yes);
condition = QUOTE(canStand _target);
statement = QUOTE(_target playActionNow ([ARR_2('gestureYes','gestureNod')] select floor random 2););
showDisabled = 1;
@ -359,7 +359,7 @@ class CfgVehicles {
hotkey = "8";
};
class ACE_Gesture_No {
displayName = CSTRING(Gestures_No);
displayName = ECSTRING(common,No);
condition = QUOTE(canStand _target);
statement = QUOTE(_target playActionNow 'gestureNo';);
showDisabled = 1;

View File

@ -385,30 +385,6 @@
<Portuguese>Olá</Portuguese>
<Italian>Ciao</Italian>
</Key>
<Key ID="STR_ACE_Interaction_Gestures_Yes">
<English>Yes</English>
<German>Ja</German>
<Spanish>Si</Spanish>
<Polish>Tak</Polish>
<Czech>Ano</Czech>
<French>Oui</French>
<Russian>Да</Russian>
<Hungarian>Igen</Hungarian>
<Portuguese>Sim</Portuguese>
<Italian>Si</Italian>
</Key>
<Key ID="STR_ACE_Interaction_Gestures_No">
<English>No</English>
<German>Nein</German>
<Spanish>No</Spanish>
<Polish>Nie</Polish>
<Czech>Ne</Czech>
<French>Non</French>
<Russian>Нет</Russian>
<Hungarian>Nem</Hungarian>
<Portuguese>Não</Portuguese>
<Italian>No</Italian>
</Key>
<Key ID="STR_ACE_Interaction_WeaponOnBack">
<English>Put weapon on back</English>
<German>Waffe wegstecken</German>

View File

@ -14,7 +14,13 @@
visibleMap &&
{alive ACE_player} &&
{"ItemMap" in (assignedItems ACE_player)} &&
{
scopeName "hasMap";
{
if (_x isKindOf ["ItemMap", configFile >> "CfgWeapons"]) exitWith {true breakOut "hasMap"};
} forEach (assignedItems ACE_player);
false
} &&
{"ACE_MapTools" in (items ACE_player)} &&
{!GVAR(mapTool_isDragging)} &&
{!GVAR(mapTool_isRotating)}

View File

@ -4,8 +4,9 @@ class ACE_Medical_Actions {
class Bandage {
displayName = CSTRING(Bandage);
displayNameProgress = CSTRING(Bandaging);
category = "bandage";
treatmentLocations[] = {"All"};
allowedSelections[] = {"All"};
requiredMedic = 0;
treatmentTime = 5;
treatmentTimeSelfCoef = 1;
@ -25,11 +26,13 @@ class ACE_Medical_Actions {
animationCallerProne = "AinvPpneMstpSlayW[wpn]Dnon_medicOther";
animationCallerSelf = "AinvPknlMstpSlayW[wpn]Dnon_medic";
animationCallerSelfProne = "AinvPpneMstpSlayW[wpn]Dnon_medic";
litter[] = { {"All", "", {{"ACE_MedicalLitterBase", "ACE_MedicalLitter_bandage1", "ACE_MedicalLitter_bandage2", "ACE_MedicalLitter_bandage3"}}} };
litter[] = { {"All", "_previousDamage > 0", {{"ACE_MedicalLitterBase", "ACE_MedicalLitter_bandage1", "ACE_MedicalLitter_bandage2", "ACE_MedicalLitter_bandage3"}}}, {"All", "_previousDamage <= 0", {"ACE_MedicalLitter_clean"}} };
};
class Morphine: Bandage {
displayName = CSTRING(Inject_Morphine);
displayNameProgress = CSTRING(Injecting_Morphine);
allowedSelections[] = {"hand_l", "hand_r", "leg_l", "leg_r"};
category = "medication";
treatmentTime = 2;
items[] = {"ACE_morphine"};
callbackSuccess = QUOTE(DFUNC(treatmentBasic_morphine));
@ -39,6 +42,8 @@ class ACE_Medical_Actions {
class Epinephrine: Bandage {
displayName = CSTRING(Inject_Epinephrine);
displayNameProgress = CSTRING(Injecting_Epinephrine);
allowedSelections[] = {"hand_l", "hand_r", "leg_l", "leg_r"};
category = "medication";
requiredMedic = 1;
treatmentTime = 3;
items[] = {"ACE_epinephrine"};
@ -49,6 +54,8 @@ class ACE_Medical_Actions {
class BloodIV: Bandage {
displayName = CSTRING(Transfuse_Blood);
displayNameProgress = CSTRING(Transfusing_Blood);
allowedSelections[] = {"hand_l", "hand_r", "leg_l", "leg_r"};
category = "advanced";
requiredMedic = 1;
treatmentTime = 20;
items[] = {"ACE_bloodIV"};
@ -57,14 +64,17 @@ class ACE_Medical_Actions {
litter[] = {};
};
class BloodIV_500: BloodIV {
category = "advanced";
items[] = {"ACE_bloodIV_500"};
};
class BloodIV_250: BloodIV {
category = "advanced";
items[] = {"ACE_bloodIV_250"};
};
class BodyBag: Bandage {
displayName = CSTRING(PlaceInBodyBag);
displayNameProgress = CSTRING(PlacingInBodyBag);
category = "advanced";
treatmentLocations[] = {"All"};
requiredMedic = 0;
treatmentTime = 4;
@ -81,7 +91,9 @@ class ACE_Medical_Actions {
class Diagnose: Bandage {
displayName = CSTRING(Actions_Diagnose);
displayNameProgress = CSTRING(Actions_Diagnosing);
category = "examine";
treatmentLocations[] = {"All"};
allowedSelections[] = {"head"};
requiredMedic = 0;
treatmentTime = 1;
items[] = {};
@ -97,10 +109,12 @@ class ACE_Medical_Actions {
class Advanced {
class FieldDressing {
displayName = CSTRING(Bandage);
displayName = CSTRING(Actions_FieldDressing);
displayNameProgress = CSTRING(Bandaging);
category = "bandage";
// Which locations can this treatment action be used? Available: Field, MedicalFacility, MedicalVehicle, All.
treatmentLocations[] = {"All"};
allowedSelections[] = {"All"};
// What is the level of medical skill required for this treatment action? 0 = all soldiers, 1 = medic, 2 = doctor
requiredMedic = 0;
// The time it takes for a treatment action to complete. Time is in seconds.
@ -121,20 +135,24 @@ class ACE_Medical_Actions {
animationCallerProne = "AinvPpneMstpSlayW[wpn]Dnon_medicOther";
animationCallerSelf = "AinvPknlMstpSlayW[wpn]Dnon_medic";
animationCallerSelfProne = "AinvPpneMstpSlayW[wpn]Dnon_medic";
litter[] = { {"All", "", {{"ACE_MedicalLitter_bandage2", "ACE_MedicalLitter_bandage3"}}} };
litter[] = { {"All", "_previousDamage > 0", {{"ACE_MedicalLitter_bandage2", "ACE_MedicalLitter_bandage3"}}}, {"All", "_previousDamage <= 0", {"ACE_MedicalLitter_clean"}} };
};
class PackingBandage: fieldDressing {
displayName = CSTRING(Actions_PackingBandage);
items[] = {"ACE_packingBandage"};
};
class ElasticBandage: fieldDressing {
displayName = CSTRING(Actions_ElasticBandage);
items[] = {"ACE_elasticBandage"};
};
class QuikClot: fieldDressing {
displayName = CSTRING(Actions_QuikClot);
items[] = {"ACE_quikclot"};
};
class Tourniquet: fieldDressing {
displayName = CSTRING(Apply_Tourniquet);
displayNameProgress = CSTRING(Applying_Tourniquet);
allowedSelections[] = {"hand_l", "hand_r", "leg_l", "leg_r", "body"};
items[] = {"ACE_tourniquet"};
treatmentTime = 6;
callbackSuccess = QUOTE(DFUNC(treatmentTourniquet));
@ -144,6 +162,8 @@ class ACE_Medical_Actions {
class Morphine: fieldDressing {
displayName = CSTRING(Inject_Morphine);
displayNameProgress = CSTRING(Injecting_Morphine);
allowedSelections[] = {"hand_l", "hand_r", "leg_l", "leg_r"};
category = "medication";
items[] = {"ACE_morphine"};
treatmentTime = 3;
callbackSuccess = QUOTE(DFUNC(treatmentAdvanced_medication));
@ -163,8 +183,10 @@ class ACE_Medical_Actions {
litter[] = { {"All", "", {"ACE_MedicalLitter_epinephrine"}} };
};
class BloodIV: fieldDressing {
displayName = CSTRING(Transfuse_Blood);
displayName = CSTRING(Actions_Blood4_1000);
displayNameProgress = CSTRING(Transfusing_Blood);
allowedSelections[] = {"hand_l", "hand_r", "leg_l", "leg_r"};
category = "advanced";
items[] = {"ACE_bloodIV"};
requiredMedic = 1;
treatmentTime = 7;
@ -173,38 +195,45 @@ class ACE_Medical_Actions {
litter[] = {};
};
class BloodIV_500: BloodIV {
displayName = CSTRING(Actions_Blood4_500);
items[] = {"ACE_bloodIV_500"};
};
class BloodIV_250: BloodIV {
displayName = CSTRING(Actions_Blood4_250);
items[] = {"ACE_bloodIV_250"};
};
class PlasmaIV: BloodIV {
displayName = CSTRING(Transfuse_Plasma);
displayName = CSTRING(Actions_Plasma4_1000);
displayNameProgress = CSTRING(Transfusing_Plasma);
items[] = {"ACE_plasmaIV"};
animationCaller = "AinvPknlMstpSnonWnonDnon_medic1";
};
class PlasmaIV_500: PlasmaIV {
displayName = CSTRING(Actions_Plasma4_500);
items[] = {"ACE_plasmaIV_500"};
};
class PlasmaIV_250: PlasmaIV {
displayName = CSTRING(Actions_Plasma4_250);
items[] = {"ACE_plasmaIV_250"};
};
class SalineIV: BloodIV {
displayName = CSTRING(Transfuse_Saline);
displayName = CSTRING(Actions_Saline4_1000);
displayNameProgress = CSTRING(Transfusing_Saline);
items[] = {"ACE_salineIV"};
animationCaller = "AinvPknlMstpSnonWnonDnon_medic1";
};
class SalineIV_500: SalineIV {
displayName = CSTRING(Actions_Saline4_500);
items[] = {"ACE_salineIV_500"};
};
class SalineIV_250: SalineIV {
displayName = CSTRING(Actions_Saline4_250);
items[] = {"ACE_salineIV_250"};
};
class SurgicalKit: fieldDressing {
displayName = "";
displayName = CSTRING(Use_SurgicalKit);
displayNameProgress = CSTRING(TreatmentAction);
category = "advanced";
items[] = {"ACE_surgicalKit"};
treatmentLocations[] = {QGVAR(useLocation_SurgicalKit)};
requiredMedic = QGVAR(medicSetting_SurgicalKit);
@ -217,8 +246,9 @@ class ACE_Medical_Actions {
litter[] = { {"All", "", {"ACE_MedicalLitter_gloves"} }};
};
class PersonalAidKit: fieldDressing {
displayName = "";
displayName = CSTRING(Use_Aid_Kit);
displayNameProgress = CSTRING(TreatmentAction);
category = "advanced";
items[] = {"ACE_personalAidKit"};
treatmentLocations[] = {QGVAR(useLocation_PAK)};
requiredMedic = QGVAR(medicSetting_PAK);
@ -235,8 +265,9 @@ class ACE_Medical_Actions {
litter[] = { {"All", "", {"ACE_MedicalLitter_gloves"}}, {"All", "", {{"ACE_MedicalLitterBase", "ACE_MedicalLitter_bandage1", "ACE_MedicalLitter_bandage2", "ACE_MedicalLitter_bandage3"}} }, {"All", "", {{"ACE_MedicalLitterBase", "ACE_MedicalLitter_bandage1", "ACE_MedicalLitter_bandage2", "ACE_MedicalLitter_bandage3"}}} };
};
class CheckPulse: fieldDressing {
displayName = "";
displayName = CSTRING(Actions_CheckPulse);
displayNameProgress = CSTRING(Check_Pulse_Content);
category = "examine";
treatmentLocations[] = {"All"};
requiredMedic = 0;
treatmentTime = 2;
@ -246,18 +277,23 @@ class ACE_Medical_Actions {
callbackProgress = "";
animationPatient = "";
animationCaller = ""; // TODO
animationCallerProne = "";
animationCallerSelfProne = "";
itemConsumed = 0;
litter[] = {};
};
class CheckBloodPressure: CheckPulse {
displayName = CSTRING(Actions_CheckBloodPressure);
callbackSuccess = QUOTE(DFUNC(actionCheckBloodPressure));
displayNameProgress = CSTRING(Check_Bloodpressure_Content);
};
class CheckResponse: CheckPulse {
displayName = CSTRING(Check_Response);
callbackSuccess = QUOTE(DFUNC(actionCheckResponse));
displayNameProgress = CSTRING(Check_Response_Content);
};
class RemoveTourniquet: CheckPulse {
class RemoveTourniquet: Tourniquet {
displayName = CSTRING(Actions_RemoveTourniquet);
treatmentTime = 2.5;
callbackSuccess = QUOTE(DFUNC(actionRemoveTourniquet));
condition = QUOTE([ARR_2(_this select 1, _this select 2)] call FUNC(hasTourniquetAppliedTo));
@ -266,7 +302,9 @@ class ACE_Medical_Actions {
class CPR: fieldDressing {
displayName = CSTRING(Actions_CPR);
displayNameProgress = CSTRING(Actions_PerformingCPR);
category = "advanced";
treatmentLocations[] = {"All"};
allowedSelections[] = {"body"};
requiredMedic = 0;
treatmentTime = 15;
items[] = {};
@ -286,6 +324,7 @@ class ACE_Medical_Actions {
class BodyBag: fieldDressing {
displayName = CSTRING(PlaceInBodyBag);
displayNameProgress = CSTRING(PlacingInBodyBag);
category = "advanced";
treatmentLocations[] = {"All"};
requiredMedic = 0;
treatmentTime = 2;
@ -817,9 +856,9 @@ class ACE_Medical_Advanced {
// specific details for the ACE_Morphine treatment action
class Morphine {
painReduce = 15;
hrIncreaseLow[] = {-10, -30, 35};
hrIncreaseNormal[] = {-10, -50, 40};
hrIncreaseHigh[] = {-10, -40, 50};
hrIncreaseLow[] = {-10, -20, 35};
hrIncreaseNormal[] = {-10, -30, 35};
hrIncreaseHigh[] = {-10, -35, 50};
timeInSystem = 900;
maxDose = 4;
inCompatableMedication[] = {};

View File

@ -1,94 +1,116 @@
class ACE_Settings {
class GVAR(level) {
category = LSTRING(Category_Medical);
value = 1;
typeName = "SCALAR";
values[] = {"Disabled", "Basic", "Advanced"};
};
class GVAR(medicSetting) {
category = LSTRING(Category_Medical);
value = 1;
typeName = "SCALAR";
values[] = {"Disabled", "Normal", "Advanced"};
};
class GVAR(enableFor) {
category = LSTRING(Category_Medical);
value = 0;
typeName = "SCALAR";
values[] = {"Players only", "Players and AI"};
};
class GVAR(enableOverdosing) {
category = LSTRING(Category_Medical);
typeName = "BOOL";
value = 1;
};
class GVAR(bleedingCoefficient) {
category = LSTRING(Category_Medical);
typeName = "SCALAR";
value = 1;
};
class GVAR(painCoefficient) {
category = LSTRING(Category_Medical);
typeName = "SCALAR";
value = 1;
};
class GVAR(enableAirway) {
category = LSTRING(Category_Medical);
typeName = "BOOL";
value = false;
};
class GVAR(enableFractures) {
category = LSTRING(Category_Medical);
typeName = "BOOL";
value = false;
};
class GVAR(enableAdvancedWounds) {
category = LSTRING(Category_Medical);
typeName = "BOOL";
value = false;
};
class GVAR(enableVehicleCrashes) {
category = LSTRING(Category_Medical);
typeName = "BOOL";
value = 1;
};
class GVAR(enableScreams) {
category = LSTRING(Category_Medical);
typeName = "BOOL";
value = 1;
};
class GVAR(playerDamageThreshold) {
category = LSTRING(Category_Medical);
typeName = "SCALAR";
value = 1;
};
class GVAR(AIDamageThreshold) {
category = LSTRING(Category_Medical);
typeName = "SCALAR";
value = 1;
};
class GVAR(enableUnconsciousnessAI) {
category = LSTRING(Category_Medical);
value = 1;
typeName = "SCALAR";
values[] = {"Disabled", "50/50", "Enabled"};
};
class GVAR(remoteControlledAI) {
category = LSTRING(Category_Medical);
typeName = "BOOL";
value = 1;
};
class GVAR(preventInstaDeath) {
category = LSTRING(Category_Medical);
typeName = "BOOL";
value = 0;
};
class GVAR(enableRevive) {
category = LSTRING(Category_Medical);
typeName = "SCALAR";
value = 0;
values[] = {"Disabled", "Players only", "Players and AI"};
};
class GVAR(maxReviveTime) {
category = LSTRING(Category_Medical);
typeName = "SCALAR";
value = 120;
};
class GVAR(amountOfReviveLives) {
category = LSTRING(Category_Medical);
typeName = "SCALAR";
value = -1;
};
class GVAR(allowDeadBodyMovement) {
category = LSTRING(Category_Medical);
typeName = "BOOL";
value = 0;
};
class GVAR(allowLitterCreation) {
category = LSTRING(Category_Medical);
typeName = "BOOL";
value = 1;
};
class GVAR(litterSimulationDetail) {
category = LSTRING(Category_Medical);
displayName = CSTRING(litterSimulationDetail);
description = CSTRING(litterSimulationDetail_Desc);
typeName = "SCALAR";
@ -100,40 +122,48 @@ class ACE_Settings {
isClientSettable = 1;
};
class GVAR(litterCleanUpDelay) {
category = LSTRING(Category_Medical);
typeName = "SCALAR";
value = 0;
};
class GVAR(medicSetting_PAK) {
category = LSTRING(Category_Medical);
typeName = "SCALAR";
value = 1;
values[] = {"Anyone", "Medics only", "Doctors only"};
};
class GVAR(medicSetting_SurgicalKit) {
category = LSTRING(Category_Medical);
typeName = "SCALAR";
value = 1;
values[] = {"Anyone", "Medics only", "Doctors only"};
};
class GVAR(consumeItem_PAK) {
category = LSTRING(Category_Medical);
typeName = "SCALAR";
value = 0;
values[] = {"No", "Yes"};
};
class GVAR(consumeItem_SurgicalKit) {
category = LSTRING(Category_Medical);
typeName = "SCALAR";
value = 0;
values[] = {"No", "Yes"};
};
class GVAR(useLocation_PAK) {
category = LSTRING(Category_Medical);
typeName = "SCALAR";
value = 3;
values[] = {"Anywhere", "Medical vehicles", "Medical facility", "vehicle & facility", "Disabled"};
};
class GVAR(useLocation_SurgicalKit) {
category = LSTRING(Category_Medical);
typeName = "SCALAR";
value = 2;
values[] = {"Anywhere", "Medical vehicles", "Medical facility", "vehicle & facility", "Disabled"};
};
class GVAR(useCondition_PAK) {
category = LSTRING(Category_Medical);
displayName = CSTRING(AdvancedMedicalSettings_useCondition_PAK_DisplayName);
description = CSTRING(AdvancedMedicalSettings_useCondition_PAK_Description);
typeName = "SCALAR";
@ -141,6 +171,7 @@ class ACE_Settings {
values[] = {"Anytime", "Stable"};
};
class GVAR(useCondition_SurgicalKit) {
category = LSTRING(Category_Medical);
displayName = CSTRING(AdvancedMedicalSettings_useCondition_SurgicalKit_DisplayName);
description = CSTRING(AdvancedMedicalSettings_useCondition_SurgicalKit_Description);
typeName = "SCALAR";
@ -148,20 +179,24 @@ class ACE_Settings {
values[] = {"Anytime", "Stable"};
};
class GVAR(keepLocalSettingsSynced) {
category = LSTRING(Category_Medical);
typeName = "BOOL";
value = 1;
};
class GVAR(healHitPointAfterAdvBandage) {
category = LSTRING(Category_Medical);
displayName = CSTRING(healHitPointAfterAdvBandage);
typeName = "BOOL";
value = 0;
};
class GVAR(painIsOnlySuppressed) {
category = LSTRING(Category_Medical);
displayName = CSTRING(painIsOnlySuppressed);
typeName = "BOOL";
value = 1;
};
class GVAR(painEffectType) {
category = LSTRING(Category_Medical);
displayName = CSTRING(painEffectType);
typeName = "SCALAR";
value = 0;
@ -169,15 +204,18 @@ class ACE_Settings {
isClientSettable = 1;
};
class GVAR(allowUnconsciousAnimationOnTreatment) {
category = LSTRING(Category_Medical);
typeName = "BOOL";
value = 0;
};
class GVAR(moveUnitsFromGroupOnUnconscious) {
category = LSTRING(Category_Medical);
typeName = "BOOL";
value = 0;
};
class GVAR(menuTypeStyle) {
category = LSTRING(Category_Medical);
displayName = CSTRING(menuTypeDisplay);
description = CSTRING(menuTypeDescription);
typeName = "SCALAR";

View File

@ -92,7 +92,7 @@ class CfgVehicles {
typeName = "NUMBER";
class values {
class disable {
name = CSTRING(disabled);
name = ECSTRING(common,Disabled);
value = 0;
};
class normal {
@ -101,7 +101,7 @@ class CfgVehicles {
default = 1;
};
class full {
name = CSTRING(enabled);
name = ECSTRING(common,Enabled);
value = 2;
};
};
@ -198,8 +198,8 @@ class CfgVehicles {
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 keep { name = ECSTRING(common,No); value = 0; };
class remove { name = ECSTRING(common,Yes); value = 1; default = 1; };
};
};
class useCondition_PAK {
@ -220,7 +220,7 @@ class CfgVehicles {
class vehicle { name = CSTRING(AdvancedMedicalSettings_vehicle); value = 1; };
class facility { name = CSTRING(AdvancedMedicalSettings_facility); value = 2; };
class vehicleAndFacility { name = CSTRING(AdvancedMedicalSettings_vehicleAndFacility); value = 3; default = 1; };
class disabled { name = CSTRING(AdvancedMedicalSettings_disabled); value = 4;};
class disabled { name = ECSTRING(common,Disabled); value = 4;};
};
};
class medicSetting_SurgicalKit: medicSetting_PAK {
@ -280,7 +280,7 @@ class CfgVehicles {
typeName = "NUMBER";
defaultValue = 0;
class values {
class disable { name = CSTRING(disabled); value = 0; default = 1;};
class disable { name = ECSTRING(common,Disabled); value = 0; default = 1;};
class playerOnly { name = CSTRING(playeronly); value = 1; };
class playerAndAI { name = CSTRING(playersandai); value = 2; };
};
@ -373,11 +373,11 @@ class CfgVehicles {
typeName = "NUMBER";
class values {
class none {
name = CSTRING(No);
name = ECSTRING(common,No);
value = 0;
};
class medic {
name = CSTRING(Yes);
name = ECSTRING(common,Yes);
value = 1;
default = 1;
};
@ -717,6 +717,9 @@ class CfgVehicles {
destrType = "DestructNo";
model = QUOTE(PATHTOF(data\littergeneric.p3d));
};
class ACE_MedicalLitter_clean: ACE_MedicalLitterBase {
model = QUOTE(PATHTOF(data\littergeneric_clean.p3d));
};
class ACE_MedicalLitter_bandage1: ACE_MedicalLitterBase {
model = QUOTE(PATHTOF(data\littergeneric_bandages1.p3d));
};

Binary file not shown.

Binary file not shown.

View File

@ -58,4 +58,5 @@ if ([_caller] call FUNC(isMedic)) then {
if (_logOutPut != "") then {
[_target,"activity", LSTRING(Check_Bloodpressure_Log), [[_caller] call EFUNC(common,getName), _logOutPut]] call FUNC(addToLog);
[_target,"quick_view", LSTRING(Check_Bloodpressure_Log), [[_caller] call EFUNC(common,getName), _logOutPut]] call FUNC(addToLog);
};

View File

@ -50,4 +50,5 @@ if (_heartRate > 1.0) then {
if (_logOutPut != "") then {
[_unit,"activity", LSTRING(Check_Pulse_Log),[[_caller] call EFUNC(common,getName),_logOutPut]] call FUNC(addToLog);
[_unit,"quick_view", LSTRING(Check_Pulse_Log),[[_caller] call EFUNC(common,getName),_logOutPut]] call FUNC(addToLog);
};

View File

@ -28,3 +28,4 @@ if ([_target] call EFUNC(common,isAwake)) then {
["displayTextStructured", [_caller], [[_output, [_target] call EFUNC(common,getName)], 2, _caller]] call EFUNC(common,targetEvent);
[_target,"activity",_output, [[_target] call EFUNC(common,getName)]] call FUNC(addToLog);
[_target,"quick_view",_output, [[_target] call EFUNC(common,getName)]] call FUNC(addToLog);

View File

@ -16,7 +16,7 @@
#include "script_component.hpp"
private ["_caller", "_target", "_selectionName", "_className", "_config", "_medicRequired", "_items", "_locations", "_return", "_condition", "_patientStateCondition"];
private ["_caller", "_target", "_selectionName", "_className", "_config", "_medicRequired", "_items", "_locations", "_return", "_condition", "_patientStateCondition", "_allowedSelections"];
_caller = _this select 0;
_target = _this select 1;
_selectionName = _this select 2;
@ -44,6 +44,8 @@ if !([_caller, _medicRequired] call FUNC(isMedic)) exitwith {false};
_items = getArray (_config >> "items");
if (count _items > 0 && {!([_caller, _target, _items] call FUNC(hasItems))}) exitwith {false};
_allowedSelections = getArray (_config >> "allowedSelections");
if !("All" in _allowedSelections || {(_selectionName in _allowedSelections)}) exitwith {false};
_return = true;
if (getText (_config >> "condition") != "") then {

View File

@ -16,12 +16,13 @@
#define MIN_ENTRIES_LITTER_CONFIG 3
private ["_target", "_className", "_config", "_litter", "_createLitter", "_position", "_createdLitter", "_caller", "_selectionName", "_usersOfItems"];
private ["_target", "_className", "_config", "_litter", "_createLitter", "_position", "_createdLitter", "_caller", "_selectionName", "_usersOfItems", "_previousDamage"];
_caller = _this select 0;
_target = _this select 1;
_selectionName = _this select 2;
_className = _this select 3;
_usersOfItems = _this select 5;
_previousDamage = _this select 6;
if !(GVAR(allowLitterCreation)) exitwith {};
if (vehicle _caller != _caller || vehicle _target != _target) exitwith {};
@ -76,7 +77,7 @@ _createdLitter = [];
_litterCondition = missionNamespace getvariable _litterCondition;
if (typeName _litterCondition != "CODE") then {_litterCondition = {false}};
};
if !([_caller, _target, _selectionName, _className, _usersOfItems] call _litterCondition) exitwith {};
if !([_caller, _target, _selectionName, _className, _usersOfItems, _previousDamage] call _litterCondition) exitwith {};
if (typeName _litterOptions == "ARRAY") then {
// Loop through through the litter options and place the litter

View File

@ -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", "_patientStateCondition"];
private ["_caller", "_target", "_selectionName", "_className", "_config", "_medicRequired", "_items", "_locations", "_return", "_callbackProgress", "_treatmentTime", "_callerAnim", "_patientAnim", "_iconDisplayed", "_return", "_usersOfItems", "_consumeItems", "_condition", "_displayText", "_wpn", "_treatmentTimeConfig", "_patientStateCondition", "_allowedSelections"];
_caller = _this select 0;
_target = _this select 1;
_selectionName = _this select 2;
@ -49,6 +49,9 @@ _medicRequired = if (isNumber (_config >> "requiredMedic")) then {
if !([_caller, _medicRequired] call FUNC(isMedic)) exitwith {false};
_allowedSelections = getArray (_config >> "allowedSelections");
if !("All" in _allowedSelections || {(_selectionName in _allowedSelections)}) exitwith {false};
// Check item
_items = getArray (_config >> "items");
if (count _items > 0 && {!([_caller, _target, _items] call FUNC(hasItems))}) exitwith {false};
@ -156,7 +159,7 @@ if (_caller == _target) then {
_callerAnim = [getText (_config >> "animationCallerSelf"), getText (_config >> "animationCallerSelfProne")] select (stance _caller == "PRONE");
};
_caller setvariable [QGVAR(selectedWeaponOnTreatment), currentWeapon _caller];
_caller setvariable [QGVAR(selectedWeaponOnTreatment), (weaponState _caller)];
// Cannot use secondairy weapon for animation
if (currentWeapon _caller == secondaryWeapon _caller) then {

View File

@ -31,4 +31,7 @@ if (random(1)>= 0.6) exitwith {
_target setvariable [QGVAR(bloodPressure), [50,70]];
};
[_target, "activity", LSTRING(Activity_fullHeal), [[_caller] call EFUNC(common,getName)]] call FUNC(addToLog);
[_target, "activity_view", LSTRING(Activity_fullHeal), [[_caller] call EFUNC(common,getName)]] call FUNC(addToLog); // TODO expand message
true;

View File

@ -38,5 +38,6 @@ if !([_target] call FUNC(hasMedicalEnabled)) exitwith {
}foreach _items;*/
[_target, "activity", LSTRING(Activity_bandagedPatient), [[_caller] call EFUNC(common,getName)]] call FUNC(addToLog);
[_target, "activity_view", LSTRING(Activity_bandagedPatient), [[_caller] call EFUNC(common,getName)]] call FUNC(addToLog); // TODO expand message
true;

View File

@ -68,4 +68,7 @@ if (alive _target) exitwith {
// Resetting damage
_target setDamage 0;
[_target, "activity", LSTRING(Activity_fullHeal), [[_caller] call EFUNC(common,getName)]] call FUNC(addToLog);
[_target, "activity_view", LSTRING(Activity_fullHeal), [[_caller] call EFUNC(common,getName)]] call FUNC(addToLog); // TODO expand message
};

View File

@ -33,5 +33,6 @@ _items = _this select 4;
}foreach _items;
[_target, "activity", LSTRING(Activity_usedItem), [[_caller] call EFUNC(common,getName), _className]] call FUNC(addToLog);
[_target, "activity_view", LSTRING(Activity_usedItem), [[_caller] call EFUNC(common,getName), _className]] call FUNC(addToLog); // TODO expand message
true;

View File

@ -30,3 +30,4 @@ _removeItem = _items select 0;
[[_target, _className], QUOTE(DFUNC(treatmentIVLocal)), _target] call EFUNC(common,execRemoteFnc); /* TODO Replace by event system */
[_target, _removeItem] call FUNC(addToTriageCard);
[_target, "activity", LSTRING(Activity_gaveIV), [[_caller] call EFUNC(common,getName)]] call FUNC(addToLog);
[_target, "activity_view", LSTRING(Activity_gaveIV), [[_caller] call EFUNC(common,getName)]] call FUNC(addToLog); // TODO expand message

View File

@ -44,6 +44,7 @@ _removeItem = _items select 0;
[_target, _removeItem] call FUNC(addToTriageCard);
[_target, "activity", LSTRING(Activity_appliedTourniquet), [[_caller] call EFUNC(common,getName)]] call FUNC(addToLog);
[_target, "activity_view", LSTRING(Activity_gaveIV), [[_caller] call EFUNC(common,getName)]] call FUNC(addToLog); // TODO expand message
true;

View File

@ -44,9 +44,14 @@ if (vehicle _caller == _caller) then {
};
_caller setvariable [QGVAR(treatmentPrevAnimCaller), nil];
_weaponSelect = (_caller getvariable [QGVAR(selectedWeaponOnTreatment), ""]);
if (_weaponSelect != "") then {
_caller selectWeapon _weaponSelect;
_weaponSelect = (_caller getvariable [QGVAR(selectedWeaponOnTreatment), []]);
if ((_weaponSelect params [["_previousWeapon", ""]]) && {(_previousWeapon != "") && {_previousWeapon in (weapons _caller)}}) then {
for "_index" from 0 to 99 do {
_caller action ["SwitchWeapon", _caller, _caller, _index];
//Just check weapon, muzzle and mode (ignore ammo in case they were reloading)
if (((weaponState _caller) select [0,3]) isEqualTo (_weaponSelect select [0,3])) exitWith {TRACE_1("Restoring", (weaponState _caller));};
if ((weaponState _caller) isEqualTo ["","","","",0]) exitWith {ERROR("weaponState not found");};
};
} else {
_caller action ["SwitchWeapon", _caller, _caller, 99];
};

View File

@ -42,9 +42,14 @@ if (vehicle _caller == _caller) then {
};
_caller setvariable [QGVAR(treatmentPrevAnimCaller), nil];
_weaponSelect = (_caller getvariable [QGVAR(selectedWeaponOnTreatment), ""]);
if (_weaponSelect != "") then {
_caller selectWeapon _weaponSelect;
_weaponSelect = (_caller getvariable [QGVAR(selectedWeaponOnTreatment), []]);
if ((_weaponSelect params [["_previousWeapon", ""]]) && {(_previousWeapon != "") && {_previousWeapon in (weapons _caller)}}) then {
for "_index" from 0 to 99 do {
_caller action ["SwitchWeapon", _caller, _caller, _index];
//Just check weapon, muzzle and mode (ignore ammo in case they were reloading)
if (((weaponState _caller) select [0,3]) isEqualTo (_weaponSelect select [0,3])) exitWith {TRACE_1("Restoring", (weaponState _caller));};
if ((weaponState _caller) isEqualTo ["","","","",0]) exitWith {ERROR("weaponState not found");};
};
} else {
_caller action ["SwitchWeapon", _caller, _caller, 99];
};
@ -62,11 +67,24 @@ if (isNil _callback) then {
_callback = missionNamespace getvariable _callback;
};
_args call _callback;
//Get current damage before treatment (for litter)
_previousDamage = switch (toLower _selectionName) do {
case ("head"): {_target getHitPointDamage "HitHead"};
case ("body"): {_target getHitPointDamage "HitBody"};
case ("hand_l"): {_target getHitPointDamage "HitLeftArm"};
case ("hand_r"): {_target getHitPointDamage "HitRightArm"};
case ("leg_l"): {_target getHitPointDamage "HitLeftLeg"};
case ("leg_r"): {_target getHitPointDamage "HitRightLeg"};
default {damage _target};
};
_args call _callback;
_args pushBack _previousDamage;
_args call FUNC(createLitter);
//If we're not already tracking vitals, start:
if (!(_target getvariable [QGVAR(addedToUnitLoop),false])) then {
[_target] call FUNC(addToInjuredCollection);
};
["medical_treatmentSuccess", [_caller, _target, _selectionName, _className]] call EFUNC(common,localEvent);

View File

@ -2928,24 +2928,6 @@
<Polish>Traktuj jednostki zdalnie sterowane (przez Zeusa) jako AI, nie jako graczy?</Polish>
<Czech>Ošetřit vzdáleně ovládané jednotky jako AI, ne jako hráče?</Czech>
</Key>
<Key ID="STR_ACE_Medical_disabled">
<English>Disabled</English>
<Russian>Отключено</Russian>
<Polish>Wyłączone</Polish>
<Spanish>Desactivado</Spanish>
<German>Deaktiviert</German>
<Czech>Zakázáno</Czech>
<Portuguese>Desativado</Portuguese>
</Key>
<Key ID="STR_ACE_Medical_enabled">
<English>Enabled</English>
<Russian>Включено</Russian>
<Polish>Włączone</Polish>
<Spanish>Activado</Spanish>
<German>Aktiviert</German>
<Czech>Povoleno</Czech>
<Portuguese>Ativado</Portuguese>
</Key>
<Key ID="STR_ACE_Medical_MedicalSettings_preventInstaDeath_DisplayName">
<English>Prevent instant death</English>
<Russian>Отключить мгновенную смерть</Russian>
@ -3237,15 +3219,6 @@
<Czech>Vozidla a zařízení</Czech>
<Portuguese>Veículos e instalações</Portuguese>
</Key>
<Key ID="STR_ACE_Medical_AdvancedMedicalSettings_disabled">
<English>Disabled</English>
<Russian>Отключено</Russian>
<Polish>Wyłączone</Polish>
<Spanish>Desactivado</Spanish>
<German>Deaktiviert</German>
<Czech>Zakázáno</Czech>
<Portuguese>Desativado</Portuguese>
</Key>
<Key ID="STR_ACE_Medical_AdvancedMedicalSettings_medicSetting_SurgicalKit_DisplayName">
<English>Allow Surgical kit (Adv)</English>
<Russian>Разрешить хирургический набор (усл.)</Russian>
@ -3612,30 +3585,6 @@
<Czech>[ACE] Zdravotnické zásoby (pokročilé)</Czech>
<Portuguese>[ACE] Caixa com suprimentos médicos (Avançados)</Portuguese>
</Key>
<Key ID="STR_ACE_Medical_Yes">
<English>Yes</English>
<German>Ja</German>
<Spanish>Si</Spanish>
<Polish>Tak</Polish>
<Czech>Ano</Czech>
<French>Oui</French>
<Russian>Да</Russian>
<Hungarian>Igen</Hungarian>
<Portuguese>Sim</Portuguese>
<Italian>Si</Italian>
</Key>
<Key ID="STR_ACE_Medical_No">
<English>No</English>
<German>Nein</German>
<Spanish>No</Spanish>
<Polish>Nie</Polish>
<Czech>Ne</Czech>
<French>Non</French>
<Russian>Нет</Russian>
<Hungarian>Nem</Hungarian>
<Portuguese>Não</Portuguese>
<Italian>No</Italian>
</Key>
<Key ID="STR_ACE_Medical_AnyTime">
<English>Anytime</English>
<Czech>Kdykoli</Czech>
@ -3648,5 +3597,17 @@
<Spanish>Estable</Spanish>
<Polish>Po stabilizacji</Polish>
</Key>
<Key ID="STR_ACE_Medical_Category_Medical">
<English>Medical</English>
<Czech>Zdravotní</Czech>
<French>Médical</French>
<German>Sanitäter</German>
<Italian>Medico</Italian>
<Polish>Medyczne</Polish>
<Portuguese>Médico</Portuguese>
<Russian>Медик</Russian>
<Spanish>Médico</Spanish>
<Hungarian>Orvosi</Hungarian>
</Key>
</Package>
</Project>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 52 KiB

View File

@ -0,0 +1 @@
z\ace\addons\medical_menu

View File

@ -0,0 +1,25 @@
class ACE_Settings {
class GVAR(allow) {
displayName = CSTRING(allow);
description = CSTRING(allow_Descr);
value = 1;
typeName = "SCALAR";
values[] = {ECSTRING(common,Disabled), ECSTRING(common,Enabled), ECSTRING(common,VehiclesOnly)};
};
class GVAR(useMenu) {
displayName = CSTRING(useMenu);
description = CSTRING(useMenu_Descr);
value = 0;
typeName = "SCALAR";
values[] = {ECSTRING(common,Disabled), ECSTRING(common,Enabled), ECSTRING(common,VehiclesOnly)};
isClientSettable = 1;
};
class GVAR(openAfterTreatment) {
displayName = CSTRING(openAfterTreatment);
description = CSTRING(openAfterTreatment_Descr);
typeName = "BOOL";
value = 1;
isClientSettable = 1;
};
};

View File

@ -0,0 +1,11 @@
class Extended_PreInit_EventHandlers {
class ADDON {
init = QUOTE(call COMPILE_FILE(XEH_preInit));
};
};
class Extended_PostInit_EventHandlers {
class ADDON {
init = QUOTE(call COMPILE_FILE(XEH_postInit));
};
};

View File

@ -0,0 +1,70 @@
class CfgVehicles {
class ACE_Module;
class ACE_moduleMedicalSettings: ACE_Module {
scope = 2;
displayName = CSTRING(module_DisplayName);
icon = QUOTE(PATHTOEF(medical,UI\Icon_Module_Medical_ca.paa));
category = "ACE_medical";
function = QUOTE(DFUNC(module));
functionPriority = 1;
isGlobal = 1;
isTriggerActivated = 0;
author = ECSTRING(common,ACETeam);
class Arguments {
class allow {
displayName = CSTRING(allow);
description = CSTRING(allow_Descr);
typeName = "NUMBER";
class values {
class disable {
name = ECSTRING(common,Disabled);
value = 0;
};
class enable {
name = ECSTRING(common,Enabled);
value = 1;
default = 1;
};
class VehiclesOnly {
name = ECSTRING(common,VehiclesOnly);
value = 2;
};
};
};
};
class ModuleDescription {
description = CSTRING(module_Desc);
sync[] = {};
};
};
class Man;
class CAManBase: Man {
class ACE_SelfActions {
class Medical_Menu {
displayName = CSTRING(OpenMenu);
runOnHover = 0;
exceptions[] = {"isNotInside"};
condition = QUOTE([ARR_2(ACE_player,_target)] call FUNC(canOpenMenu));
statement = QUOTE([_target] call DFUNC(openMenu));
icon = PATHTOEF(medical,UI\icons\medical_cross.paa);
};
};
class ACE_Actions {
// Create a consolidates medical menu for treatment while boarded
class ACE_MainActions {
class Medical_Menu {
displayName = CSTRING(OpenMenu);
runOnHover = 0;
exceptions[] = {"isNotInside"};
condition = QUOTE([ARR_2(ACE_player,_target)] call FUNC(canOpenMenu));
statement = QUOTE([_target] call DFUNC(openMenu));
icon = PATHTOEF(medical,UI\icons\medical_cross.paa);
};
};
};
};
};

View File

@ -0,0 +1,10 @@
ace_medical_menu
===============
Provides the CSE medical menu for the advanced medical system.
## Maintainers
The people responsible for merging changes to this component or answering potential questions.
- [Glowbal](https://github.com/Glowbal)

View File

@ -0,0 +1,34 @@
#include "script_component.hpp"
if (!hasInterface) exitwith {};
["medical_treatmentSuccess", {
if (GVAR(openAfterTreatment) && {GVAR(pendingReopen)}) then {
GVAR(pendingReopen) = false;
[{
[GVAR(INTERACTION_TARGET)] call FUNC(openMenu);
}, []] call EFUNC(common,execNextFrame);
};
}] call EFUNC(common,addEventhandler);
["ACE3 Common", QGVAR(displayMenuKeyPressed), localize LSTRING(DisplayMenuKey),
{
_target = cursorTarget;
if (!(_target isKindOf "CAManBase") || ACE_player distance _target > 10) then {_target = ACE_player};
// Conditions: canInteract
if !([ACE_player, _target, ["isNotInside"]] call EFUNC(common,canInteractWith)) exitWith {false};
if !([ACE_player, _target] call FUNC(canOpenMenu)) exitwith {false};
// Statement
[_target] call FUNC(openMenu);
false
},
{
if (ACE_time - GVAR(lastOpenedOn) > 0.5) then {
[ObjNull] call FUNC(openMenu);
};
},
[35, [false, false, false]], false, 0] call CBA_fnc_addKeybind;

View File

@ -0,0 +1,29 @@
#include "script_component.hpp"
ADDON = false;
PREP(onMenuOpen);
PREP(openMenu);
PREP(canOpenMenu);
PREP(updateIcons);
PREP(updateUIInfo);
PREP(handleUI_DisplayOptions);
PREP(handleUI_dropDownTriageCard);
PREP(getTreatmentOptions);
PREP(updateActivityLog);
PREP(updateQuickViewLog);
PREP(updateBodyImage);
PREP(updateInformationLists);
PREP(setTriageStatus);
PREP(collectActions);
PREP(module);
GVAR(INTERACTION_TARGET) = objNull;
GVAR(actionsOther) = [];
GVAR(actionsSelf) = [];
GVAR(selectedBodyPart) = 0;
call FUNC(collectActions);
ADDON = true;

View File

@ -0,0 +1,18 @@
#include "script_component.hpp"
class CfgPatches {
class ADDON {
units[] = {};
weapons[] = {};
requiredVersion = REQUIRED_VERSION;
requiredAddons[] = {"ace_medical"};
author[] = {$STR_ACE_Common_ACETeam, "Glowbal"};
authorUrl = "http://ace3mod.com";
VERSION_CONFIG;
};
};
#include "CfgEventHandlers.hpp"
#include "ui\menu.hpp"
#include "ACE_Settings.hpp"
#include "CfgVehicles.hpp"

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,24 @@
/*
* Author: Glowbal
* Check if ACE_player can Open the medical menu
*
* Arguments:
* 0: Caller <OBJECT>
* 1: Target <OBJECT>
*
* Return Value:
* Can open <BOOL>
*
* Example:
* [] call ace_medical_menu_canOpenMenu
*
* Public: No
*/
#include "script_component.hpp"
params ["_caller", "_target"];
if !(GVAR(allow) == 1 || (GVAR(allow) == 2 && {vehicle _caller != _caller || vehicle _target != _target} && {alive ACE_player})) exitwith {false};
if !(GVAR(useMenu) == 1 || (GVAR(useMenu) == 2 && {vehicle _caller != _caller || vehicle _target != _target} && {alive ACE_player})) exitwith {false};
true;

View File

@ -0,0 +1,42 @@
/*
* Author: Glowbal
* Collect treatment actions from medical config
*
* Arguments:
* None
*
* Return Value:
* None
*
* Example:
* [] call ace_medical_menu_fnc_collectActions
*
* Public: No
*/
#include "script_component.hpp"
private ["_configBasic", "_configAdvanced", "_fnc_compileActionsLevel"];
_configBasic = (configFile >> "ACE_Medical_Actions" >> "Basic");
_configAdvanced = (configFile >> "ACE_Medical_Actions" >> "Advanced");
_fnc_compileActionsLevel = {
private ["_entryCount", "_actions", "_displayName", "_condition", "_category", "_statement"];
params ["_config"];
_actions = [];
{
if (isClass _x) then {
_displayName = getText (_x >> "displayName");
_category = getText (_x >> "category");
_condition = format[QUOTE([ARR_4(ACE_player, GVAR(INTERACTION_TARGET), EGVAR(medical,SELECTIONS) select GVAR(selectedBodyPart), '%1')] call DEFUNC(medical,canTreatCached)), configName _x];
_statement = format[QUOTE([ARR_4(ACE_player, GVAR(INTERACTION_TARGET), EGVAR(medical,SELECTIONS) select GVAR(selectedBodyPart), '%1')] call DEFUNC(medical,treatment)), configName _x];
_actions pushBack [_displayName, _category, compile _condition, compile _statement];
};
nil
}count ("true" configClasses _config);
_actions // return
};
GVAR(actionsBasic) = [_configBasic] call _fnc_compileActionsLevel;
GVAR(actionsAdvanced) = [_configAdvanced] call _fnc_compileActionsLevel;

View File

@ -0,0 +1,42 @@
/*
* Author: Glowbal
* Grab available treatment options for given category
*
* Arguments:
* 0: The medic <OBJECT>
* 1: The patient <OBJECT>
* 2: Category name <STRING>
*
* Return Value:
* Available actions <ARRAY>
*
* Exmaple:
* [ACE_player, poor_dude, "some category"] call ace_medical_menu_fnc_getTreatmentOptions
*
* Public: No
*/
#include "script_component.hpp"
private "_actions";
params ["_player", "_target", "_name"];
if (!([ACE_player, _target, ["isNotInside"]] call EFUNC(common,canInteractWith))) exitwith {[]};
_actions = if (EGVAR(medical,level) == 2) then {
GVAR(actionsAdvanced);
} else {
GVAR(actionsBasic);
};
_collectedActions = [];
_bodyPart = EGVAR(medical,SELECTIONS) select GVAR(selectedBodyPart);
{
_x params ["", "_currentCategory", "_currentCondition"];
if (_name == _currentCategory && {call _currentCondition}) then {
_collectedActions pushBack _x;
};
nil
} count _actions;
_collectedActions // return

View File

@ -0,0 +1,110 @@
/*
* Author: Glowbal
* Display the available treatment options in category
*
* Arguments:
* 0: Category name <STRING>
*
* Return Value:
* None
*
* Example:
* ["some category"] call ace_medical_menu_handleUI_DisplayOptions
*
* Public: No
*/
#include "script_component.hpp"
#define START_IDC 20
#define END_IDC 27
#define AMOUNT_OF_ENTRIES (count _entries)
if (!hasInterface) exitwith{};
private ["_entries", "_display", "_newTarget", "_card", "_ctrl", "_code"];
params ["_name"];
disableSerialization;
_display = uiNamespace getVariable QGVAR(medicalMenu);
if (isNil "_display") exitwith {}; // no valid dialog present
if (_name isEqualTo "toggle") exitwith {
if (GVAR(INTERACTION_TARGET) != ACE_player) then {
_newTarget = ACE_player;
} else {
_newTarget = GVAR(INTERACTION_TARGET_PREVIOUS);
};
GVAR(INTERACTION_TARGET_PREVIOUS) = GVAR(INTERACTION_TARGET);
[_newTarget] spawn {
closeDialog 0;
sleep 0.1;
[_this select 0] call FUNC(openMenu);
};
};
// Clean the dropdown options list from all actions
for [{_x = START_IDC}, {_x <= END_IDC}, {_x = _x + 1}] do {
_ctrl = (_display displayCtrl (_x));
_ctrl ctrlSetText "";
_ctrl ctrlShow false;
_ctrl ctrlSetEventHandler ["ButtonClick",""];
_ctrl ctrlSetTooltip "";
_ctrl ctrlCommit 0;
};
GVAR(LatestDisplayOptionMenu) = _name;
// The triage card has no options available
lbClear 212;
if (_name isEqualTo "triage") exitwith {
ctrlEnable [212, true];
private ["_log", "_triageCardTexts", "_message"];
_log = GVAR(INTERACTION_TARGET) getvariable [QEGVAR(medical,triageCard), []];
_triageCardTexts = [];
{
_x params ["_item", "_amount", "_time"];
_message = _item;
if (isClass(configFile >> "CfgWeapons" >> _item)) then {
_message = getText(configFile >> "CfgWeapons" >> _item >> "DisplayName");
} else {
if (isLocalized _message) then {
_message = localize _message;
};
};
_triageCardTexts pushback format["%1x - %2 (%3m)", _amount, _message, round((ACE_time - _time) / 60)];
nil;
}count _log;
if (count _triageCardTexts == 0) exitwith {
lbAdd [212,(localize ELSTRING(medical,TriageCard_NoEntry))];
};
{
lbAdd [212,_x];
nil;
}count _triageCardTexts;
};
ctrlEnable [212, false];
_entries = [ACE_player, GVAR(INTERACTION_TARGET), _name] call FUNC(getTreatmentOptions);
{
//player sidechat format["TRIGGERED: %1",_x];
if (_forEachIndex > END_IDC) exitwith {};
_ctrl = (_display displayCtrl (START_IDC + _forEachIndex));
if (!(_forEachIndex > AMOUNT_OF_ENTRIES)) then {
_ctrl ctrlSetText (_x select 0);
_code = format ["ace_medical_menu_pendingReopen = true; call %1;", (_x select 3)];
_ctrl ctrlSetEventHandler ["ButtonClick", _code];
_ctrl ctrlSetTooltip (_x select 0); // TODO implement
_ctrl ctrlShow true;
} else {
_ctrl ctrlSetText "";
_ctrl ctrlSetEventHandler ["ButtonClick", ""];
};
_ctrl ctrlCommit 0;
} forEach _entries;

View File

@ -0,0 +1,35 @@
/*
* Author: Glowbal
* Handle the triage card display
*
* Arguments:
* None
*
* Return Value:
* None
*
* Example:
* [] call ace_medical_menu_handleUI_dropDownTriageCard
*
* Public: No
*/
#include "script_component.hpp"
private ["_display", "_pos", "_ctrl", "_currentPos", "_idc"];
disableSerialization;
_display = uiNamespace getVariable QGVAR(medicalMenu);
_pos = [0, 0, 0, 0];
_currentPos = ctrlPosition (_display displayCtrl 2002);
_currentPos params ["_currentPosX", "_currentPosY"];
if (_currentPosX == 0 && _currentPosY == 0) then {
_pos = ctrlPosition (_display displayCtrl 2001);
};
for "_idc" from 2002 to 2006 step 1 do {
_pos set [1, (_pos select 1) + (_pos select 3)];
_ctrl = _display displayCtrl _idc;
_ctrl ctrlSetPosition _pos;
_ctrl ctrlCommit 0;
};

View File

@ -0,0 +1,22 @@
/*
* Author: Glowbal
* Module for adjusting the medical menu settings
*
* Arguments:
* 0: The module logic <LOGIC>
* 1: units <ARRAY>
* 2: activated <BOOL>
*
* Return Value:
* None <NIL>
*
* Public: No
*/
#include "script_component.hpp"
params ["_logic", "_units", "_activated"];
if !(_activated) exitWith {};
[_logic, QGVAR(allow), "allow"] call EFUNC(common,readSettingFromModule);

View File

@ -0,0 +1,77 @@
/*
* Author: Glowbal
* Handle medical menu opened
*
* Arguments:
* 0: Medical Menu display <DISPLAY>
*
* Return Value:
* None
*
* Example:
* [medical_menu] call ace_medical_menu_onMenuOpen
*
* Public: No
*/
#include "script_component.hpp"
private "_target";
params ["_display"];
if (isNil "_display") exitwith {};
if (isNil QGVAR(LatestDisplayOptionMenu)) then {
GVAR(LatestDisplayOptionMenu) = "triage";
} else {
if (GVAR(LatestDisplayOptionMenu) == "toggle") then {
GVAR(LatestDisplayOptionMenu) = "triage";
GVAR(INTERACTION_TARGET) = GVAR(INTERACTION_TARGET_PREVIOUS);
};
};
_target = GVAR(INTERACTION_TARGET);
if (isNil QGVAR(INTERACTION_TARGET_PREVIOUS)) then {
GVAR(INTERACTION_TARGET_PREVIOUS) = _target;
};
[GVAR(LatestDisplayOptionMenu)] call FUNC(handleUI_DisplayOptions);
disableSerialization;
[_target, _display] call FUNC(updateUIInfo);
(_display displayCtrl 11) ctrlSetTooltip localize LSTRING(VIEW_TRIAGE_CARD);
(_display displayCtrl 12) ctrlSetTooltip localize LSTRING(EXAMINE_PATIENT);
(_display displayCtrl 13) ctrlSetTooltip localize LSTRING(BANDAGE_FRACTURES);
(_display displayCtrl 14) ctrlSetTooltip localize LSTRING(MEDICATION);
(_display displayCtrl 15) ctrlSetTooltip localize LSTRING(AIRWAY_MANAGEMENT);
(_display displayCtrl 16) ctrlSetTooltip localize LSTRING(ADVANCED_TREATMENT);
(_display displayCtrl 17) ctrlSetTooltip localize LSTRING(DRAG_CARRY);
(_display displayCtrl 18) ctrlSetTooltip localize LSTRING(TOGGLE_SELF);
(_display displayCtrl 301) ctrlSetTooltip localize LSTRING(SELECT_HEAD);
(_display displayCtrl 302) ctrlSetTooltip localize LSTRING(SELECT_TORSO);
(_display displayCtrl 303) ctrlSetTooltip localize LSTRING(SELECT_ARM_R);
(_display displayCtrl 304) ctrlSetTooltip localize LSTRING(SELECT_ARM_L);
(_display displayCtrl 305) ctrlSetTooltip localize LSTRING(SELECT_LEG_R);
(_display displayCtrl 306) ctrlSetTooltip localize LSTRING(SELECT_LEG_L);
(_display displayCtrl 2001) ctrlSetTooltip localize LSTRING(SELECT_TRIAGE_STATUS);
(_display displayCtrl 1) ctrlSetText format ["%1", [_target] call EFUNC(common,getName)];
setMousePosition [0.4, 0.4];
[QGVAR(onMenuOpen), "onEachFrame", {
params ["_display"];
if (isNull GVAR(INTERACTION_TARGET)) then {
GVAR(INTERACTION_TARGET) = ACE_player;
};
[GVAR(INTERACTION_TARGET), _display] call FUNC(updateUIInfo);
[GVAR(INTERACTION_TARGET)] call FUNC(updateIcons);
[GVAR(LatestDisplayOptionMenu)] call FUNC(handleUI_DisplayOptions);
_status = [GVAR(INTERACTION_TARGET)] call FUNC(getTriageStatus);
(_display displayCtrl 2000) ctrlSetText (_status select 0);
(_display displayCtrl 2000) ctrlSetBackgroundColor (_status select 2);
}, [_display]] call BIS_fnc_addStackedEventHandler;
["Medical_onMenuOpen", [ACE_player, _interactionTarget]] call EFUNC(common,localEvent);

View File

@ -0,0 +1,33 @@
/*
* Author: Glowbal
* Open the medical menu for target
*
* Arguments:
* 0: Target <OBJECT>
*
* Return Value:
* None
*
* Example:
* [some_player] call ace_medical_menu_openMenu
*
* Public: No
*/
#include "script_component.hpp"
params ["_interactionTarget"];
if (dialog || isNull _interactionTarget) exitwith {
disableSerialization;
private "_display";
_display = uiNamespace getVariable QGVAR(medicalMenu);
if (!isNil "_display") then {
closeDialog 314412;
};
};
GVAR(INTERACTION_TARGET) = _interactionTarget;
createDialog QGVAR(medicalMenu);
GVAR(lastOpenedOn) = ACE_time;

View File

@ -0,0 +1,18 @@
/*
* Author: Glowbal
* Set the triage status of object
*
* Arguments:
* 0: Target <OBJECT>
* 1: Status <NUMBER>
*
* Return Value:
* None
*
* Public: No
*/
#include "script_component.hpp"
params ["_target", "_status"];
_target setvariable [QEGVAR(medical,triageLevel), _status, true];

View File

@ -0,0 +1,42 @@
/*
* Author: Glowbal
* Update the activity log
*
* Arguments:
* 0: display <DISPLAY>
* 1: log collection <ARRAY>
*
* Return Value:
* None
*
* Example:
* [some_display, log] call ace_medical_menu_updateActivityLog
*
* Public: No
*/
#include "script_component.hpp"
private "_logCtrl";
params ["_display", "_logs"];
_logCtrl = _display displayCtrl 214;
lbClear _logCtrl;
{
_x params ["_message", "_moment", "_dummy", "_arguments"];
if (isLocalized _message) then {
_message = localize _message;
};
{
if (typeName _x == "STRING" && {isLocalized _x}) then {
_arguments set [_foreachIndex, localize _x];
};
} forEach _arguments;
_message = format ([_message] + _arguments);
_logCtrl lbAdd format ["%1 %2", _moment, _message];
nil
} count _logs;

View File

@ -0,0 +1,42 @@
/*
* Author: Glowbal
* Update the body image on the menu
*
* Arguments:
* 0: selection bloodloss <ARRAY>
* 1: display <DISPLAY>
*
* Return Value:
* None
*
* Example:
* [0.3, some_display] call ace_medical_menu_updateBodyImage
*
* Public: No
*/
#include "script_component.hpp"
params ["_selectionBloodLoss", "_display"];
// Handle the body image coloring
_availableSelections = [50, 51, 52, 53, 54, 55];
{
private ["_red", "_green", "_blue"];
_red = 1;
_green = 1;
_blue = 1;
if (_x > 0) then {
if (_damaged select _forEachIndex) then {
_green = (0.9 - _x) max 0;
_blue = _green;
} else {
_green = (0.9 - _x) max 0;
_red = _green;
//_blue = _green;
};
};
(_display displayCtrl (_availableSelections select _forEachIndex)) ctrlSetTextColor [_red, _green, _blue, 1.0];
} forEach _selectionBloodLoss;

View File

@ -0,0 +1,35 @@
/*
* Author: Glowbal
* Update the category icons
*
* Arguments:
* None
*
* Return Value:
* None
*
* Example:
* [] call ace_medical_menu_updateIcons
*
* Public: No
*/
#include "script_component.hpp"
#define START_IDC 111
#define END_IDC 118
private ["_display", "_idc", "_options", "_name", "_amount"];
disableSerialization;
_display = uiNamespace getVariable QGVAR(medicalMenu);
_options = ["triage" , "examine", "bandage", "medication", "airway", "advanced", "drag", "toggle"];
for "_idc" from START_IDC to END_IDC step 1 do {
_amount = [ACE_player, GVAR(INTERACTION_TARGET), _options select (_idc - START_IDC)] call FUNC(getTreatmentOptions);
if ((count _amount) > 0 || _idc == START_IDC || _idc == END_IDC) then {
(_display displayCtrl _idc) ctrlSettextColor [1, 1, 1, 1];
} else {
(_display displayCtrl _idc) ctrlSettextColor [0.4, 0.4, 0.4, 1];
};
};

View File

@ -0,0 +1,36 @@
/*
* Author: Glowbal
* Update the treatment information list
*
* Arguments:
* 0: display <DISPLAY>
* 1: message collection <ARRAY>
* 2: injury collection <ARRAY>
*
* Return Value:
* None
*
* Public: No
*/
#include "script_component.hpp"
private "_lbCtrl";
params ["_display", "_genericMessages", "_allInjuryTexts"];
_lbCtrl = _display displayCtrl 213;
lbClear _lbCtrl;
{
_lbCtrl lbAdd (_x select 0);
_lbCtrl lbSetColor [_forEachIndex, _x select 1];
} forEach _genericMessages;
_amountOfGeneric = count _genericMessages;
{
_lbCtrl lbAdd (_x select 0);
_lbCtrl lbSetColor [_forEachIndex + _amountOfGeneric, _x select 1];
} forEach _allInjuryTexts;
if (count _allInjuryTexts == 0) then {
_lbCtrl lbAdd localize ELSTRING(medical,NoInjuriesBodypart);
};

View File

@ -0,0 +1,42 @@
/*
* Author: Glowbal
* Update the quick view log
*
* Arguments:
* 0: display <DISPLAY>
* 1: log collection <ARRAY>
*
* Return Value:
* None
*
* Example:
* [some_display, log] call ace_medical_menu_updateQuickViewLog
*
* Public: No
*/
#include "script_component.hpp"
private "_logCtrl";
params ["_display", "_logs"];
_logCtrl = _display displayCtrl 215;
lbClear _logCtrl;
{
_x params ["_message", "_moment", "_dummy", "_arguments"];
if (isLocalized _message) then {
_message = localize _message;
};
{
if (typeName _x == "STRING" && {isLocalized _x}) then {
_arguments set [_foreachIndex, localize _x];
};
} forEach _arguments;
_message = format ([_message] + _arguments);
_logCtrl lbAdd format ["%1 %2", _moment, _message];
nil
} count _logs;

View File

@ -0,0 +1,144 @@
/*
* Author: Glowbal
* Update all UI information in the medical menu
*
* Arguments:
* 0: target <OBJECT>
* 1: display <DISPLAY>
*
* Return Value:
* None
*
* Example:
* [some_player, some_display] call ace_medical_menu_updateUIInfo
*
* Public: No
*/
#include "script_component.hpp"
private ["_genericMessages", "_totalIvVolume", "_damaged", "_selectionBloodLoss", "_allInjuryTexts"];
params ["_target", "_display"];
_selectionN = GVAR(selectedBodyPart);
if (_selectionN < 0 || _selectionN > 5) exitwith {};
_genericMessages = [];
if (EGVAR(medical,level) >= 2) then {
_partText = [ELSTRING(medical,Head), ELSTRING(medical,Torso), ELSTRING(medical,LeftArm) ,ELSTRING(medical,RightArm) ,ELSTRING(medical,LeftLeg), ELSTRING(medical,RightLeg)] select _selectionN;
_genericMessages pushBack [localize _partText, [1, 1, 1, 1]];
};
if (_target getVariable [QGVAR(isBleeding), false]) then {
_genericMessages pushBack [localize ELSTRING(medical,Status_Bleeding), [1, 0.1, 0.1, 1]];
};
if (_target getVariable [QGVAR(hasLostBlood), 0] > 1) then {
_genericMessages pushBack [localize ELSTRING(medical,Status_Lost_Blood), [1, 0.1, 0.1, 1]];
};
if (((_target getVariable [QGVAR(tourniquets), [0, 0, 0, 0, 0, 0]]) select _selectionN) > 0) then {
_genericMessages pushBack [localize ELSTRING(medical,Status_Tourniquet_Applied), [0.77, 0.51, 0.08, 1]];
};
if (_target getVariable [QGVAR(hasPain), false]) then {
_genericMessages pushBack [localize ELSTRING(medical,Status_Pain), [1, 1, 1, 1]];
};
_totalIvVolume = 0;
{
private "_value";
_value = _target getVariable _x;
if (!isNil "_value") then {
_totalIvVolume = _totalIvVolume + (_target getVariable [_x, 0]);
};
} count GVAR(IVBags);
if (_totalIvVolume >= 1) then {
_genericMessages pushBack [format [localize ELSTRING(medical,receivingIvVolume), floor _totalIvVolume], [1, 1, 1, 1]];
};
_damaged = [false, false, false, false, false, false];
_selectionBloodLoss = [0, 0, 0, 0, 0, 0];
_allInjuryTexts = [];
if (EGVAR(medical,level) >= 2) then {
_openWounds = _target getVariable [QEGVAR(medical,openWounds), []];
private "_amountOf";
{
_amountOf = _x select 3;
// Find how much this bodypart is bleeding
if (_amountOf > 0) then {
_damaged set [_x select 2, true];
_selectionBloodLoss set [_x select 2, (_selectionBloodLoss select (_x select 2)) + (20 * ((_x select 4) * _amountOf))];
if (_selectionN == (_x select 2)) then {
// Collect the text to be displayed for this injury [ Select injury class type definition - select the classname DisplayName (6th), amount of injuries for this]
if (_amountOf >= 1) then {
// TODO localization
_allInjuryTexts pushBack [format["%2x %1", (EGVAR(medical,AllWoundInjuryTypes) select (_x select 1)) select 6, _amountOf], [1,1,1,1]];
} else {
// TODO localization
_allInjuryTexts pushBack [format["Partial %1", (EGVAR(medical,AllWoundInjuryTypes) select (_x select 1)) select 6], [1,1,1,1]];
};
};
};
} forEach _openWounds;
_bandagedwounds = _target getVariable [QEGVAR(medical,bandagedWounds), []];
{
_amountOf = _x select 3;
// Find how much this bodypart is bleeding
if !(_damaged select (_x select 2)) then {
_selectionBloodLoss set [_x select 2, (_selectionBloodLoss select (_x select 2)) + (20 * ((_x select 4) * _amountOf))];
};
if (_selectionN == (_x select 2)) then {
// Collect the text to be displayed for this injury [ Select injury class type definition - select the classname DisplayName (6th), amount of injuries for this]
if (_amountOf > 0) then {
if (_amountOf >= 1) then {
// TODO localization
_allInjuryTexts pushBack [format ["[B] %2x %1", (EGVAR(medical,AllWoundInjuryTypes) select (_x select 1)) select 6, _amountOf], [0.88,0.7,0.65,1]];
} else {
// TODO localization
_allInjuryTexts pushBack [format ["[B] Partial %1", (EGVAR(medical,AllWoundInjuryTypes) select (_x select 1)) select 6], [0.88,0.7,0.65,1]];
};
};
};
} forEach _bandagedwounds;
} else {
_damaged = [true, true, true, true, true, true];
{
_selectionBloodLoss set [_forEachIndex, _target getHitPointDamage _x];
if (_target getHitPointDamage _x > 0 && _forEachIndex == _selectionN) then {
_pointDamage = _target getHitPointDamage _x;
_severity = switch (true) do {
case (_pointDamage > 0.5): {localize ELSTRING(medical,HeavilyWounded)};
case (_pointDamage > 0.1): {localize ELSTRING(medical,LightlyWounded)};
default {localize ELSTRING(medical,VeryLightlyWounded)};
};
_part = localize ([
ELSTRING(medical,Head),
ELSTRING(medical,Torso),
ELSTRING(medical,LeftArm),
ELSTRING(medical,RightArm),
ELSTRING(medical,LeftLeg),
ELSTRING(medical,RightLeg)
] select _forEachIndex);
_allInjuryTexts pushBack [format ["%1 %2", _severity, toLower _part], [1,1,1,1]];
};
} forEach ["HitHead", "HitBody", "HitLeftArm", "HitRightArm", "HitLeftLeg", "HitRightLeg"];
};
[_selectionBloodLoss, _display] call FUNC(updateBodyImage);
[_display, _genericMessages, _allInjuryTexts] call FUNC(updateInformationLists);
_logs = _target getVariable [QEGVAR(medical,logFile_activity_view), []];
[_display, _logs] call FUNC(updateActivityLog);
_logs = _target getVariable [QEGVAR(medical,logFile_quick_view), []];
[_display, _logs] call FUNC(updateQuickViewLog);
_triageStatus = [_target] call EFUNC(medical,getTriageStatus);
(_display displayCtrl 2000) ctrlSetText (_triageStatus select 0);
(_display displayCtrl 2000) ctrlSetBackgroundColor (_triageStatus select 2);

View File

@ -0,0 +1 @@
#include "\z\ace\addons\medical_menu\script_component.hpp"

View File

@ -0,0 +1,12 @@
#define COMPONENT medical_menu
#include "\z\ace\addons\main\script_mod.hpp"
#ifdef DEBUG_ENABLED_MEDICAL_MENU
#define DEBUG_MODE_FULL
#endif
#ifdef DEBUG_SETTINGS_MEDICAL_MENU
#define DEBUG_SETTINGS DEBUG_SETTINGS_MEDICAL_MENU
#endif
#include "\z\ace\addons\main\script_macros.hpp"

View File

@ -0,0 +1,391 @@
<?xml version="1.0"encoding="UTF-8"?>
<Project name="Combat Space Enhancement">
<Package name="Combat Medical System">
<Container name="UI">
<Key ID="STR_ACE_Medical_Menu_OpenMenu">
<English>Medical Menu</English>
</Key>
<Key ID="STR_ACE_Medical_Menu_allow">
<English>Allow Medical Menu</English>
</Key>
<Key ID="STR_ACE_Medical_Menu_allow_Descr">
<English>Allow clients to use the medical menu</English>
</Key>
<Key ID="STR_ACE_Medical_Menu_useMenu">
<English>Use Medical menu</English>
</Key>
<Key ID="STR_ACE_Medical_Menu_useMenu_Descr">
<English>If allowed by server, enable the option to use the Medical Menu through keybinding and interaction menu</English>
</Key>
<Key ID="STR_ACE_Medical_Menu_openAfterTreatment">
<English>Re-open Medical menu</English>
</Key>
<Key ID="STR_ACE_Medical_Menu_openAfterTreatment_Descr">
<English>Re-open the medical menu after succesful treatment</English>
</Key>
<Key ID="STR_ACE_Medical_Menu_DisplayMenuKey">
<English>Open Medical Menu</English>
</Key>
<Key ID="STR_ACE_Medical_Menu_module_DisplayName">
<English>Medical Menu Settings</English>
</Key>
<Key ID="STR_ACE_Medical_Menu_module_Desc">
<English>Configure the usage of the Medical Menu</English>
</Key>
<Key ID="STR_ACE_Medical_Menu_EXAMINE_TREATMENT">
<Original>EXAMINE &amp; TREATMENT</Original>
<Russian>ОСМОТР И ЛЕЧЕНИЕ</Russian>
<English>EXAMINE &amp; TREATMENT</English>
<Spanish>EXAMINAR &amp; TRATAMIENTO</Spanish>
<French>EXAMINER &amp; TRAITEMENTS</French>
<Polish>BADANIE &amp; LECZENIE</Polish>
</Key>
<Key ID="STR_ACE_Medical_Menu_STATUS">
<Original>STATUS</Original>
<Russian>СОСТОЯНИЕ</Russian>
<English>STATUS</English>
<Spanish>ESTADO</Spanish>
<French>ÉTATS</French>
<Polish>STATUS</Polish>
</Key>
<Key ID="STR_ACE_Medical_Menu_OVERVIEW">
<Original>OVERVIEW</Original>
<Russian>ОБЩАЯ ИНФОРМАЦИЯ</Russian>
<English>OVERVIEW</English>
<Spanish>DESCRIPCIÓN</Spanish>
<French>DESCRIPTION</French>
<Polish>OPIS</Polish>
</Key>
<Key ID="STR_ACE_Medical_Menu_ACTIVITY_LOG">
<Original>ACTIVITY LOG</Original>
<Russian>ПРОВЕДЕННЫЕ МАНИПУЛЯЦИИ</Russian>
<English>ACTIVITY LOG</English>
<Spanish>REGISTRO DE ACTIVIDAD</Spanish>
<French>REGISTRE DES SOINS</French>
<Polish>LOGI AKTYWNOŚCI</Polish>
</Key>
<Key ID="STR_ACE_Medical_Menu_QUICK_VIEW">
<Original>QUICK VIEW</Original>
<Russian>БЫСТРЫЙ ОСМОТР</Russian>
<English>QUICK VIEW</English>
<Spanish>VISTA RÁPIDA</Spanish>
<French>VUE RAPIDE</French>
<Polish>SZYBKI PODGLĄD</Polish>
</Key>
<Key ID="STR_ACE_Medical_Menu_TRIAGE_NONE">
<Original>None</Original>
<Russian>Не ранен</Russian>
<Spanish>Ninguno</Spanish>
<French>Aucun</French>
<Polish>Brak</Polish>
</Key>
<Key ID="STR_ACE_Medical_Menu_TRIAGE_MINOR">
<Original>Minor</Original>
<Russian>Несрочная помощь</Russian>
<Spanish>Menor</Spanish>
<French>Mineur</French>
<Polish>Normalny</Polish>
</Key>
<Key ID="STR_ACE_Medical_Menu_TRIAGE_DELAYED">
<Original>Delayed</Original>
<Russian>Срочная помощь</Russian>
<Spanish>Diferido</Spanish>
<French>Urgent</French>
<Polish>Opóźniony</Polish>
</Key>
<Key ID="STR_ACE_Medical_Menu_TRIAGE_IMMEDIATE">
<Original>Immediate</Original>
<Russian>Неотложная помощь</Russian>
<Spanish>Inmediato</Spanish>
<French>Immédiat</French>
<Polish>Natychmiastowy</Polish>
</Key>
<Key ID="STR_ACE_Medical_Menu_TRIAGE_DECEASED">
<Original>Deceased</Original>
<Russian>Морг</Russian>
<Spanish>Fallecido</Spanish>
<French>Décédé</French>
<Polish>Nie żyje</Polish>
</Key>
<Key ID="STR_ACE_Medical_Menu_VIEW_TRIAGE_CARD">
<Original>View triage Card</Original>
<Russian>Смотреть первичную карточку</Russian>
<Spanish>Ver Triage</Spanish>
<French>Voir Carte de Triage</French>
<Polish>Pokaż kartę segregacyjną</Polish>
</Key>
<Key ID="STR_ACE_Medical_Menu_EXAMINE_PATIENT">
<Original>Examine Patient</Original>
<Russian>Осмотреть пациента</Russian>
<Spanish>Examinar Paciente</Spanish>
<French>Examiner Patient</French>
<Polish>Zbadaj pacjenta</Polish>
</Key>
<Key ID="STR_ACE_Medical_Menu_BANDAGE_FRACTURES">
<Original>Bandage / Fractures</Original>
<Russian>Раны / переломы</Russian>
<Spanish>Vendajes/Fracturas </Spanish>
<French>Bandages / Fractures</French>
<Polish>Bandaże / Złamania</Polish>
</Key>
<Key ID="STR_ACE_Medical_Menu_MEDICATION">
<Original>Medication</Original>
<Russian>Медикаменты</Russian>
<Spanish>Medicación</Spanish>
<French>Médications</French>
<Polish>Leki</Polish>
</Key>
<Key ID="STR_ACE_Medical_Menu_AIRWAY_MANAGEMENT">
<Original>Airway Management</Original>
<Russian>Дыхательные пути</Russian>
<Spanish>Vías Aéreas</Spanish>
<French>Gestion Des Voie REspiratoire</French>
<Polish>Drogi oddechowe</Polish>
</Key>
<Key ID="STR_ACE_Medical_Menu_ADVANCED_TREATMENT">
<Original>Advanced Treatments</Original>
<Russian>Специальная медпомощь</Russian>
<Spanish>Tratamientos Avanzados</Spanish>
<French>Traitement Avancé</French>
<Polish>Zaawansowane zabiegi</Polish>
</Key>
<Key ID="STR_ACE_Medical_Menu_DRAG_CARRY">
<Original>Drag/Carry</Original>
<Russian>Тащить/нести</Russian>
<Spanish>Arrastrar/Cargar</Spanish>
<French>Glisser/Porter</French>
<Polish>Ciągnij/Nieś</Polish>
</Key>
<Key ID="STR_ACE_Medical_Menu_TOGGLE_SELF">
<Original>Toggle (Self)</Original>
<Russian>Лечить себя/другого раненого</Russian>
<French>Activer (sois)</French>
<Polish>Przełącz (na siebie)</Polish>
<Spanish>Alternar</Spanish>
</Key>
<Key ID="STR_ACE_Medical_Menu_SELECT_TRIAGE_STATUS">
<Original>Select triage status</Original>
<Russian>Сортировка</Russian>
<Spanish>Seleccionar estado de Triage</Spanish>
<French>Selectioner l'état de Triage</French>
<Polish>Wybierz priorytet</Polish>
</Key>
<Key ID="STR_ACE_Medical_Menu_SELECT_HEAD">
<Original>Select Head</Original>
<Russian>Выбрать голову</Russian>
<Spanish>Seleccionar Cabeza</Spanish>
<French>Selectioner Tête</French>
<Polish>Wybierz głowę</Polish>
</Key>
<Key ID="STR_ACE_Medical_Menu_SELECT_TORSO">
<Original>Select Torso</Original>
<Russian>Выбрать торс</Russian>
<Spanish>Seleccionar Torso</Spanish>
<French>Selectioner Torse</French>
<Polish>Wybierz tors</Polish>
</Key>
<Key ID="STR_ACE_Medical_Menu_SELECT_ARM_L">
<Original>Select Left Arm</Original>
<Russian>Выбрать левую руку</Russian>
<Spanish>Seleccionar Brazo Izquierdo</Spanish>
<French>Selectioner Bras Gauche</French>
<Polish>Wybierz lewą rękę</Polish>
</Key>
<Key ID="STR_ACE_Medical_Menu_SELECT_ARM_R">
<Original>Select Right Arm</Original>
<Russian>Выбрать правую руку</Russian>
<Spanish>Seleccionar Brazo Derecho</Spanish>
<French>Selectioner Bras Droit</French>
<Polish>Wybierz prawą rękę</Polish>
</Key>
<Key ID="STR_ACE_Medical_Menu_SELECT_LEG_L">
<Original>Select Left Leg</Original>
<Russian>Выбрать левую ногу</Russian>
<Spanish>Seleccionar Pierna Izquierda</Spanish>
<French>Selectioner Jambe Gauche</French>
<Polish>Wybierz lewą nogę</Polish>
</Key>
<Key ID="STR_ACE_Medical_Menu_SELECT_LEG_R">
<Original>Select Right Leg</Original>
<Russian>Выбрать правую ногу</Russian>
<Spanish>Seleccionar Pierna Derecha</Spanish>
<French>Selectioner Jambe Droite</French>
<Polish>Wybierz prawą nogę</Polish>
</Key>
<Key ID="STR_ACE_Medical_Menu_HEAD">
<Original>Head</Original>
<Russian>Голова</Russian>
<Spanish>Cabeza</Spanish>
<French>Tête</French>
<Polish>Głowa</Polish>
</Key>
<Key ID="STR_ACE_Medical_Menu_TORSO">
<Original>Torso</Original>
<Russian>Торс</Russian>
<French>Torse</French>
<Polish>Tors</Polish>
</Key>
<Key ID="STR_ACE_Medical_Menu_ARM_L">
<Original>Left Arm</Original>
<Russian>Левая рука</Russian>
<Spanish>Brazo Izquierdo</Spanish>
<French>Bras Gauche</French>
<Polish>Lewa ręka</Polish>
</Key>
<Key ID="STR_ACE_Medical_Menu_ARM_R">
<Original>Right Arm</Original>
<Russian>Правая рука</Russian>
<Spanish>Brazo Derecho</Spanish>
<French>Bras Droit</French>
<Polish>Prawa ręka</Polish>
</Key>
<Key ID="STR_ACE_Medical_Menu_LEG_L">
<Original>Left Leg</Original>
<Russian>Левая нога</Russian>
<Spanish>Pierna Izquierda</Spanish>
<French>Jambe Gauche</French>
<Polish>Lewa noga</Polish>
</Key>
<Key ID="STR_ACE_Medical_Menu_LEG_R">
<Original>Right Leg</Original>
<Russian>Правая нога</Russian>
<Spanish>Pierna Derecha</Spanish>
<French>Jambe Droite</French>
<Polish>Prawa noga</Polish>
</Key>
<Key ID="STR_ACE_Medical_Menu_SELECTED_BODY_PART">
<Original>Body Part: %1</Original>
<Russian>Часть тела: %1</Russian>
<Spanish>Parte del cuerpo: %1</Spanish>
<French>Partie du corps: %1</French>
<Polish>Część ciała: %1</Polish>
</Key>
<Key ID="STR_ACE_Medical_Menu_SMALL">
<Original>Small</Original>
<Russian>малого размера</Russian>
<Spanish>Pequeña</Spanish>
<French>Petite</French>
<Polish>małym</Polish>
</Key>
<Key ID="STR_ACE_Medical_Menu_MEDIUM">
<Original>Medium</Original>
<Russian>среднего размера</Russian>
<Spanish>Mediana</Spanish>
<French>moyenne</French>
<Polish>średnim</Polish>
</Key>
<Key ID="STR_ACE_Medical_Menu_LARGE">
<Original>Large</Original>
<Russian>большого размера</Russian>
<Spanish>Grande</Spanish>
<French>Grande</French>
<Polish>dużym</Polish>
</Key>
<Key ID="STR_ACE_Medical_Menu_MULTIPLE_OPEN_WOUNDS">
<Original>There are %2 %1 Open Wounds</Original>
<Russian>%2 открытые раны %1</Russian>
<Spanish>Hay %2 Heridas Abiertas %1</Spanish>
<French>Il y a %2 %1 Blessure Ouverte</French>
<Polish>Widzisz otwarte rany w ilości %2 o %1 rozmiarze</Polish>
</Key>
<Key ID="STR_ACE_Medical_Menu_SINGLE_OPEN_WOUND">
<Original>There is 1 %1 Open Wound</Original>
<Russian>Открытая рана %1</Russian>
<Spanish>Hay 1 Herida Abierta %1</Spanish>
<French>Il y a 1 blessure ouverte %1</French>
<Polish>Widzisz 1 otwartą ranę o %1 rozmiarze</Polish>
</Key>
<Key ID="STR_ACE_Medical_Menu_PARTIAL_OPEN_WOUND">
<Original>There is a partial %1 Open wound</Original>
<Russian>Частично открытая рана %1</Russian>
<Spanish>Hay una herida parcial abierta %1</Spanish>
<French>Il y a une Blessure Patiellement Ouverte %1</French>
<Polish>Widzisz częściowo otwartą ranę o %1 rozmiarze</Polish>
</Key>
<Key ID="STR_ACE_Medical_Menu_MULTIPLE_BANDAGED_WOUNDS">
<Original>There are %2 %1 Bandaged Wounds</Original>
<Russian>%2 перевязанные раны %1</Russian>
<Spanish>Hay %2 Heridas %1 Vendadas</Spanish>
<French>Il y a %2 %1 Blessure Bandée</French>
<Polish>Widzisz %2 zabandażowanych ran o %1 rozmiarze</Polish>
</Key>
<Key ID="STR_ACE_Medical_Menu_SINGLE_BANDAGED_WOUND">
<Original>There is 1 %1 Bandaged Wound</Original>
<Russian>1 перевязанная рана %1</Russian>
<Spanish>Hay 1 Herida Vendada %1</Spanish>
<French>Il y a 1 %1 Blessure Bandée</French>
<Polish>Widzisz 1 zabandażowaną ranę o %1 rozmiarze</Polish>
</Key>
<Key ID="STR_ACE_Medical_Menu_PARTIAL_BANDAGED_WOUND">
<Original>There is a partial %1 Bandaged wound</Original>
<Russian>Частично перевязанная рана %1</Russian>
<Spanish>Hay una Herida parcial %1 Vendada</Spanish>
<French>Il y a %1 Blessure Partielment Bandée</French>
<Polish>Widzisz 1 częściowo zabandażowaną ranę o %1 rozmiarze</Polish>
</Key>
<Key ID="STR_ACE_Medical_Menu_NORMAL_BREATHING">
<Original>Normal breathing</Original>
<Russian>Дыхание в норме</Russian>
<Spanish>Respiración normal</Spanish>
<French>Respiration Normale</French>
<Polish>Normalny oddech</Polish>
</Key>
<Key ID="STR_ACE_Medical_Menu_NO_BREATHING">
<Original>No breathing</Original>
<Russian>Дыхания нет</Russian>
<Spanish>No respira</Spanish>
<French>Apnée</French>
<Polish>Brak oddechu</Polish>
</Key>
<Key ID="STR_ACE_Medical_Menu_DIFFICULT_BREATHING">
<Original>Difficult breathing</Original>
<Russian>Дыхание затруднено</Russian>
<Spanish>Dificultad para respirar</Spanish>
<French>Difficultée Respiratoire</French>
<Polish>Trudności z oddychaniem</Polish>
</Key>
<Key ID="STR_ACE_Medical_Menu_ALMOST_NO_BREATHING">
<Original>Almost no breathing</Original>
<Russian>Дыхания почти нет</Russian>
<Spanish>Casi sin respirar</Spanish>
<French>Respiration Faible</French>
<Polish>Prawie brak oddechu</Polish>
</Key>
<Key ID="STR_ACE_Medical_Menu_STATUS_BLEEDING">
<Original>Bleeding</Original>
<Russian>Кровотечение</Russian>
<Spanish>Sangrando</Spanish>
<French>Seignement</French>
<Polish>Krwawienie zewnętrzne</Polish>
</Key>
<Key ID="STR_ACE_Medical_Menu_STATUS_PAIN">
<Original>in Pain</Original>
<Russian>Испытывает боль</Russian>
<Spanish>Con Dolor</Spanish>
<French>A De La Douleur</French>
<Polish>W bólu</Polish>
</Key>
<Key ID="STR_ACE_Medical_Menu_STATUS_LOST_BLOOD">
<Original>Lost a lot of Blood</Original>
<Russian>Большая кровопотеря</Russian>
<Spanish>Mucha Sangre perdida</Spanish>
<French>A Perdu Bcp de Sang</French>
<Polish>Stracił dużo krwi</Polish>
</Key>
<Key ID="STR_ACE_Medical_Menu_STATUS_TOURNIQUET_APPLIED">
<Original>Tourniquet [CAT]</Original>
<Russian>Жгут</Russian>
<Spanish>Torniquete [CAT]</Spanish>
<French>Garot [CAT]</French>
<Polish>Opaska uciskowa [CAT]</Polish>
</Key>
<Key ID="STR_ACE_Medical_Menu_STATUS_NPA_APPLIED">
<Original>Nasopharyngeal Tube [NPA]</Original>
<Russian>Назотрахеальная трубка</Russian>
<Spanish>Torniquete [CAT]</Spanish>
<French>Canule Naseaupharyngée [NPA]</French>
<Polish>Rurka nosowo-gardłowa [NPA]</Polish>
</Key>
</Container>
</Package>
</Project>

View File

@ -0,0 +1,570 @@
#include "\z\ace\addons\common\define.hpp"
class GVAR(medicalMenu) {
idd = 314412;
movingEnable = true;
onLoad = QUOTE(uiNamespace setVariable [ARR_2(QUOTE(QGVAR(medicalMenu)), _this select 0)]; [ARR_2(QUOTE(QGVAR(id)), true)] call EFUNC(common,blurScreen); [_this select 0] call FUNC(onMenuOpen););
onUnload = QUOTE([ARR_2(QUOTE(QGVAR(id)), false)] call EFUNC(common,blurScreen); [ARR_2(QUOTE(QGVAR(onMenuOpen)), 'onEachFrame')] call BIS_fnc_removeStackedEventHandler;);
class controlsBackground {
class HeaderBackground: ACE_gui_backgroundBase{
idc = -1;
SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)";
x = "1 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
y = "1 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - (((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
w = "38 * (((safezoneW / safezoneH) min 1.2) / 40)";
h = "1 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
text = "#(argb,8,8,3)color(0,0,0,0)";
};
class CenterBackground: HeaderBackground {
y = "2.1 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - (((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
h = "16 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
text = "#(argb,8,8,3)color(0,0,0,0.8)";
colorText[] = {0, 0, 0, "(profilenamespace getvariable ['GUI_BCG_RGB_A',0.9])"};
colorBackground[] = {0,0,0,"(profilenamespace getvariable ['GUI_BCG_RGB_A',0.9])"};
};
class BottomBackground: CenterBackground {
y = "(18.6 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - (((safezoneW / safezoneH) min 1.2) / 1.2))/2))";
h = "9 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
};
};
class controls {
class HeaderName {
idc = 1;
type = CT_STATIC;
x = "1 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
y = "1 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - (((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
w = "38 * (((safezoneW / safezoneH) min 1.2) / 40)";
h = "1 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
style = ST_LEFT + ST_SHADOW;
font = "PuristaMedium";
SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)";
colorText[] = {0.95, 0.95, 0.95, 0.75};
colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.69])","(profilenamespace getvariable ['GUI_BCG_RGB_G',0.75])","(profilenamespace getvariable ['GUI_BCG_RGB_B',0.5])", "(profilenamespace getvariable ['GUI_BCG_RGB_A',0.9])"};
text = "";
};
class IconsBackGroundBar: ACE_gui_backgroundBase{
idc = -1;
SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)";
x = "1 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
y = "2.1 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - (((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
w = "38 * (((safezoneW / safezoneH) min 1.2) / 40)";
h = "3.1 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
text = QUOTE(PATHTOF(data\background_img.paa));
colorText[] = {1, 1, 1, 0.0};
};
class CatagoryLeft: HeaderName {
x = "1 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
y = "2.5 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - (((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
w = "12.33 * (((safezoneW / safezoneH) min 1.2) / 40)";
h = "1 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
style = ST_CENTER;
colorText[] = {1, 1, 1.0, 0.9};
colorBackground[] = {0,0,0,0};
SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1.2)";
text = $STR_ACE_Medical_Menu_EXAMINE_TREATMENT;
};
class CatagoryCenter: CatagoryLeft {
x = "13.33 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
text = $STR_ACE_Medical_Menu_STATUS;
};
class CatagoryRight: CatagoryCenter{
x = "25.66 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
text = $STR_ACE_Medical_Menu_OVERVIEW;
};
class Line: ACE_gui_backgroundBase {
idc = -1;
SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)";
x = "1.5 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
y = "3.7 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - (((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
w = "37 * (((safezoneW / safezoneH) min 1.2) / 40)";
h = "0.03 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
text = "#(argb,8,8,3)color(1,1,1,0.5)";
};
class iconImg1: ACE_gui_backgroundBase {
idc = 111;
x = "1.5 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
y = "3.73 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - (((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
w = "1.5 * (((safezoneW / safezoneH) min 1.2) / 40)";
h = "1.5 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
size = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1.4)";
SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 0.1)";
colorBackground[] = {0,0,0,1};
colorPicture[] = {1,1,1,1};
colorText[] = {1,1,1,1};
text = QUOTE(PATHTOF(data\icons\triage_card_small.paa));
};
class iconImg2: iconImg1 {
idc = 112;
x = "3 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
text = QUOTE(PATHTOF(data\icons\examine_patient_small.paa));
};
class iconImg3: iconImg1 {
idc = 113;
x = "4.5 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
text = QUOTE(PATHTOF(data\icons\bandage_fracture_small.paa));
};
class iconImg4: iconImg1 {
idc = 114;
x = "6 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
text = QUOTE(PATHTOF(data\icons\medication_small.paa));
};
class iconImg5: iconImg1 {
idc = 115;
x = "7.5 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
text = QUOTE(PATHTOF(data\icons\airway_management_small.paa));
};
class iconImg6: iconImg1 {
idc = 116;
x = "9 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
text = QUOTE(PATHTOF(data\icons\advanced_treatment_small.paa));
};
class iconImg7: iconImg1 {
idc = 117;
x = "10.5 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
text = QUOTE(PATHTOF(data\icons\icon_carry.paa));
};
class iconImg8: iconImg1 {
idc = 118;
x = "12 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
text = QUOTE(PATHTOF(data\icons\toggle_self_small.paa));
};
class BtnIconLeft1: ACE_gui_buttonBase {
idc = 11;
x = "1.5 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
y = "3.73 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - (((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
w = "1.5 * (((safezoneW / safezoneH) min 1.2) / 40)";
h = "1.5 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
size = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1.4)";
SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 0.1)";
animTextureNormal = "#(argb,8,8,3)color(0,0,0,0.0)";
animTextureDisabled = "#(argb,8,8,3)color(0,0,0,0.0)";
animTextureOver = "#(argb,8,8,3)color(0,0,0,0.0)";
animTextureFocused = "#(argb,8,8,3)color(0,0,0,0.0)";
animTexturePressed = "#(argb,8,8,3)color(0,0,0,0.0)";
animTextureDefault = "#(argb,8,8,3)color(0,0,0,0.0)";
action = QUOTE(['triage'] call FUNC(handleUI_DisplayOptions););
};
class BtnIconLeft2: BtnIconLeft1 {
idc = 12;
x = "3 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
action = QUOTE(['examine'] call FUNC(handleUI_DisplayOptions););
};
class BtnIconLeft3: BtnIconLeft1 {
idc = 13;
x = "4.5 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
action = QUOTE(['bandage'] call FUNC(handleUI_DisplayOptions););
};
class BtnIconLeft4: BtnIconLeft1 {
idc = 14;
x = "6 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
action = QUOTE(['medication'] call FUNC(handleUI_DisplayOptions););
};
class BtnIconLeft5: BtnIconLeft1 {
idc = 15;
x = "7.5 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
action = QUOTE(['airway'] call FUNC(handleUI_DisplayOptions););
};
class BtnIconLeft6: BtnIconLeft1 {
idc = 16;
x = "9 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
action = QUOTE(['advanced'] call FUNC(handleUI_DisplayOptions););
};
class BtnIconLeft7: BtnIconLeft1 {
idc = 17;
x = "10.5 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
action = QUOTE(['drag'] call FUNC(handleUI_DisplayOptions););
};
class BtnIconLeft8: BtnIconLeft1 {
idc = 18;
x = "12 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
action = QUOTE(['toggle'] call FUNC(handleUI_DisplayOptions););
};
class TriageCardList: ACE_gui_listBoxBase {
idc = 212;
x = "1.5 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
y = "5.4 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - (((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
w = "12 * (((safezoneW / safezoneH) min 1.2) / 40)";
h = "10 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 0.7)";
rowHeight = 0.03;
colorBackground[] = {0, 0, 0, 0.2};
colorText[] = {1,1, 1, 1.0};
colorScrollbar[] = {0.95, 0.95, 0.95, 1};
colorSelect[] = {0.95, 0.95, 0.95, 1};
colorSelect2[] = {0.95, 0.95, 0.95, 1};
colorSelectBackground[] = {0, 0, 0, 0.0};
colorSelectBackground2[] = {0.0, 0.0, 0.0, 0.0};
};
// Left side
class BtnMenu1: BtnIconLeft1 {
idc = 20;
y = "5.4 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - (((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
w = "12 * (((safezoneW / safezoneH) min 1.2) / 40)";
h = "1 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
text = "";
size = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 0.9)";
animTextureNormal = "#(argb,8,8,3)color(0,0,0,0.8)";
animTextureDisabled = "#(argb,8,8,3)color(0,0,0,0.5)";
animTextureOver = "#(argb,8,8,3)color(1,1,1,1)";
animTextureFocused = "#(argb,8,8,3)color(1,1,1,1)";
animTexturePressed = "#(argb,8,8,3)color(1,1,1,1)";
animTextureDefault = "#(argb,8,8,3)color(1,1,1,1)";
color[] = {1, 1, 1, 1};
color2[] = {0,0,0, 1};
colorBackgroundFocused[] = {1,1,1,1};
colorBackground[] = {1,1,1,1};
colorbackground2[] = {1,1,1,1};
colorDisabled[] = {0.5,0.5,0.5,0.8};
colorFocused[] = {0,0,0,1};
periodFocus = 1;
periodOver = 1;
action = "";
};
class BtnMenu2: BtnMenu1 {
idc = 21;
y = "6.5 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - (((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
text = "";
};
class BtnMenu3: BtnMenu1 {
idc = 22;
y = "7.6 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - (((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
text = "";
};
class BtnMenu4: BtnMenu1 {
idc = 23;
y = "8.7 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - (((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
text ="";
};
class BtnMenu5: BtnMenu1 {
idc = 24;
y = "9.8 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - (((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
text = "";
};
class BtnMenu6: BtnMenu1 {
idc = 25;
y = "10.9 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - (((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
text = "";
};
class BtnMenu7: BtnMenu1 {
idc = 26;
y = "12 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - (((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
text = "";
};
class BtnMenu8: BtnMenu1 {
idc = 27;
y = "13.1 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - (((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
text = "";
};
// center
class bodyImgBackground: ACE_gui_backgroundBase {
idc = -1;
x = "13.33 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
y = "3.73 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - (((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
w = "12.33 * (((safezoneW / safezoneH) min 1.2) / 40)";
h = "12.33 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1.4)";
colorBackground[] = {1,1,1,1};
colorPicture[] = {1,1,1,1};
colorText[] = {1,1,1,1};
text = QUOTE(PATHTOEF(medical,ui\body_background.paa));
};
class bodyImgHead: bodyImgBackground {
idc = 50;
x = "13.33 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
y = "3.73 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - (((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
w = "12.33 * (((safezoneW / safezoneH) min 1.2) / 40)";
h = "12.33 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1.4)";
colorBackground[] = {1,1,1,1};
colorPicture[] = {1,1,1,0.75};
colorText[] = {1,1,1,0.75};
text = QUOTE(PATHTOEF(medical,ui\body_head.paa));
};
class bodyImgTorso: bodyImgHead {
idc = 51;
text = QUOTE(PATHTOEF(medical,ui\body_torso.paa));
};
class bodyImgArms_l: bodyImgHead {
idc = 52;
text = QUOTE(PATHTOEF(medical,ui\body_arm_left.paa));
};
class bodyImgArms_r: bodyImgHead {
idc = 53;
text = QUOTE(PATHTOEF(medical,ui\body_arm_right.paa));
};
class bodyImgLegs_l: bodyImgHead {
idc = 54;
text = QUOTE(PATHTOEF(medical,ui\body_leg_left.paa));
};
class bodyImgLegs_r: bodyImgHead {
idc = 55;
text = QUOTE(PATHTOEF(medical,ui\body_leg_right.paa));
};
class selectHead: ACE_gui_buttonBase {
idc = 301;
x = "18.8 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
y = "3.9 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - (((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
w = "1.4 * (((safezoneW / safezoneH) min 1.2) / 40)";
h = "1.5 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
size = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1.4)";
SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 0.1)";
animTextureNormal = "#(argb,8,8,3)color(0,0,0,0.0)";
animTextureDisabled = "#(argb,8,8,3)color(0,0,0,0.0)";
animTextureOver = "#(argb,8,8,3)color(0,0,0,0.0)";
animTextureFocused = "#(argb,8,8,3)color(0,0,0,0.0)";
animTexturePressed = "#(argb,8,8,3)color(0,0,0,0.0)";
animTextureDefault = "#(argb,8,8,3)color(0,0,0,0.0)";
action = QUOTE(GVAR(selectedBodyPart) = 0; [GVAR(INTERACTION_TARGET)] call FUNC(updateUIInfo););
};
class selectTorso : selectHead {
idc = 302;
x = "18.4 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
y = "5.4 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - (((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
w = "2.2 * (((safezoneW / safezoneH) min 1.2) / 40)";
h = "4.1 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
action = QUOTE(GVAR(selectedBodyPart) = 1; [GVAR(INTERACTION_TARGET)] call FUNC(updateUIInfo););
};
class selectLeftArm: selectHead{
idc = 303;
x = "17.4 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
y = "5.9 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - (((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
w = "1.1 * (((safezoneW / safezoneH) min 1.2) / 40)";
h = "4.3 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
action = QUOTE(GVAR(selectedBodyPart) = 3; [GVAR(INTERACTION_TARGET)] call FUNC(updateUIInfo););
};
class selectRightArm: selectLeftArm{
idc = 304;
x = "20.6 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
action = QUOTE(GVAR(selectedBodyPart) = 2; [GVAR(INTERACTION_TARGET)] call FUNC(updateUIInfo););
};
class selectLeftLeg :selectHead {
idc = 305;
x = "18.5 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
y = "9.5 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - (((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
w = "1.1 * (((safezoneW / safezoneH) min 1.2) / 40)";
h = "6 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
action = QUOTE(GVAR(selectedBodyPart) = 5; [GVAR(INTERACTION_TARGET)] call FUNC(updateUIInfo););
};
class selectRightLeg :selectLeftLeg {
idc = 306;
x = "19.6 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
action = QUOTE(GVAR(selectedBodyPart) = 4; [GVAR(INTERACTION_TARGET)] call FUNC(updateUIInfo););
};
class TriageTextBottom: HeaderName {
idc = 2000;
x = "13.33 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
y = "16.5 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - (((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
w = "12.33 * (((safezoneW / safezoneH) min 1.2) / 40)";
h = "1.1 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
style = ST_CENTER;
colorText[] = {1, 1, 1.0, 1};
colorBackground[] = {0,0.0,0.0,0.7};
SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)";
text = "";
};
// Right side
class InjuryList: ACE_gui_listBoxBase {
idc = 213;
x = "25.66 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
y = "5.5 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - (((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
w = "12.33 * (((safezoneW / safezoneH) min 1.2) / 40)";
h = "10 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 0.7)";
rowHeight = 0.03;
colorBackground[] = {0, 0, 0, 0.2};
colorText[] = {1,1, 1, 1.0};
colorScrollbar[] = {0.95, 0.95, 0.95, 1};
colorSelect[] = {0.95, 0.95, 0.95, 1};
colorSelect2[] = {0.95, 0.95, 0.95, 1};
colorSelectBackground[] = {0, 0, 0, 0.0};
colorSelectBackground2[] = {0.0, 0.0, 0.0, 0.5};
};
// bottom
class ActivityLogHeader: CatagoryLeft {
x = "1 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
y = "18.6 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - (((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
w = "18.5 * (((safezoneW / safezoneH) min 1.2) / 40)";
h = "1 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
style = ST_CENTER;
colorText[] = {0.6, 0.7, 1.0, 1};
colorBackground[] = {0,0,0,0};
SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)";
text = $STR_ACE_Medical_Menu_ACTIVITY_LOG;
};
class QuickViewHeader: ActivityLogHeader {
x = "19.5 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
text = $STR_ACE_Medical_Menu_QUICK_VIEW;
};
class LineBottomHeaders: Line {
y = "19.5 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - (((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
};
class ActivityLog: InjuryList {
idc = 214;
//style = 16;
//type = 102;
//rows=1;
colorBackground[] = {0, 0, 0, 0};
x = "1.5 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
y = "(19.5 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - (((safezoneW / safezoneH) min 1.2) / 1.2))/2))";
w = "18.5 * (((safezoneW / safezoneH) min 1.2) / 40)";
h = "6.5 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 0.7)";
//colorSelectBackground[] = {0, 0, 0, 0.0};
//colorSelectBackground2[] = {0.0, 0.0, 0.0, 0.0};
//columns[] = {0.0, 0.08};
//canDrag=true;
//arrowEmpty = "#(argb,8,8,3)color(1,1,1,1)";
// arrowFull = "#(argb,8,8,3)color(1,1,1,1)";
drawSideArrows = 0;
//idcLeft = -1;
//idcRight = -1;
};
class QuikViewLog: InjuryList {
idc = 215;
//style = 16;
//type = 102;
//rows=1;
colorBackground[] = {0, 0, 0, 0};
x = "21.5 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
y = "(19.5 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - (((safezoneW / safezoneH) min 1.2) / 1.2))/2))";
w = "18.5 * (((safezoneW / safezoneH) min 1.2) / 40)";
h = "6.5 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 0.7)";
colorSelectBackground[] = {0, 0, 0, 0.0};
colorSelectBackground2[] = {0.0, 0.0, 0.0, 0.0};
//columns[] = {0.0, 0.08};
//canDrag=true;
//arrowEmpty = "#(argb,8,8,3)color(1,1,1,1)";
// arrowFull = "#(argb,8,8,3)color(1,1,1,1)";
drawSideArrows = 0;
//idcLeft = -1;
//idcRight = -1;
};
class selectTriageStatus: ACE_gui_buttonBase {
idc = 2001;
x = "13.33 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
y = "16.5 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - (((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
w = "12.33 * (((safezoneW / safezoneH) min 1.2) / 40)";
h = "1.1 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
style = ST_CENTER;
size = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1.4)";
SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)";
animTextureNormal = "#(argb,8,8,3)color(0,0,0,0.0)";
animTextureDisabled = "#(argb,8,8,3)color(0,0,0,0.0)";
animTextureOver = "#(argb,8,8,3)color(0,0,0,0.0)";
animTextureFocused = "#(argb,8,8,3)color(0,0,0,0.0)";
animTexturePressed = "#(argb,8,8,3)color(0,0,0,0.0)";
animTextureDefault = "#(argb,8,8,3)color(0,0,0,0.0)";
action = QUOTE([] call FUNC(handleUI_dropDownTriageCard););
};
class selectTriageStatusNone: selectTriageStatus {
idc = 2002;
x = 0;
y = 0;
w = 0;
h = 0;
text = $STR_ACE_Medical_Menu_TRIAGE_NONE;
style = ST_CENTER;
size = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)";
SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)";
animTextureNormal = "#(argb,8,8,3)color(0,0,0,0.9)";
animTextureDisabled = "#(argb,8,8,3)color(0,0,0,0.9)";
animTextureOver = "#(argb,8,8,3)color(0,0,0,0.9)";
animTextureFocused = "#(argb,8,8,3)color(0,0,0,0.9)";
animTexturePressed = "#(argb,8,8,3)color(0,0,0,0.9)";
animTextureDefault = "#(argb,8,8,3)color(0,0,0,0.9)";
action = QUOTE([] call FUNC(handleUI_dropDownTriageCard); [ARR_2(GVAR(INTERACTION_TARGET),0)] call FUNC(setTriageStatus););
};
class selectTriageStatusMinor: selectTriageStatus {
idc = 2003;
x = 0;
y = 0;
w = 0;
h = 0;
text = $STR_ACE_Medical_Menu_TRIAGE_MINOR;
style = ST_CENTER;
size = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)";
SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)";
animTextureNormal = "#(argb,8,8,3)color(0,0.5,0,0.9)";
animTextureDisabled = "#(argb,8,8,3)color(0,0.5,0,0.9)";
animTextureOver = "#(argb,8,8,3)color(0,0.5,0,0.9)";
animTextureFocused = "#(argb,8,8,3)color(0,0.5,0,0.9)";
animTexturePressed = "#(argb,8,8,3)color(0,0.5,0,0.9)";
animTextureDefault = "#(argb,8,8,3)color(0,0.5,0,0.9)";
action = QUOTE([] call FUNC(handleUI_dropDownTriageCard); [ARR_2(GVAR(INTERACTION_TARGET),1)] call FUNC(setTriageStatus););
};
class selectTriageStatusDelayed: selectTriageStatus {
idc = 2004;
x = 0;
y = 0;
w = 0;
h = 0;
text = $STR_ACE_Medical_Menu_TRIAGE_DELAYED;
style = ST_CENTER;
size = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)";
SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)";
animTextureNormal = "#(argb,8,8,3)color(0.77,0.51,0.08,0.9)";
animTextureDisabled = "#(argb,8,8,3)color(0.77,0.51,0.08,0.9)";
animTextureOver = "#(argb,8,8,3)color(0.77,0.51,0.08,0.9)";
animTextureFocused = "#(argb,8,8,3)color(0.77,0.51,0.08,0.9)";
animTexturePressed = "#(argb,8,8,3)color(0.77,0.51,0.08,0.9)";
animTextureDefault = "#(argb,8,8,3)color(0.77,0.51,0.08,0.9)";
action = QUOTE([] call FUNC(handleUI_dropDownTriageCard); [ARR_2(GVAR(INTERACTION_TARGET),2)] call FUNC(setTriageStatus););
};
class selectTriageStatusImmediate: selectTriageStatus {
idc = 2005;
x = 0;
y = 0;
w = 0;
h = 0;
text = $STR_ACE_Medical_Menu_TRIAGE_IMMEDIATE;
style = ST_CENTER;
size = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)";
SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)";
animTextureNormal = "#(argb,8,8,3)color(1,0.2,0.2,0.9)";
animTextureDisabled = "#(argb,8,8,3)color(1,0.2,0.2,0.9)";
animTextureOver = "#(argb,8,8,3)color(1,0.2,0.2,0.9)";
animTextureFocused = "#(argb,8,8,3)color(1,0.2,0.2,0.9)";
animTexturePressed = "#(argb,8,8,3)color(1,0.2,0.2,0.9)";
animTextureDefault = "#(argb,8,8,3)color(1,0.2,0.2,0.9)";
action = QUOTE([] call FUNC(handleUI_dropDownTriageCard); [ARR_2(GVAR(INTERACTION_TARGET),3)] call FUNC(setTriageStatus););
};
class selectTriageStatusDeceased: selectTriageStatus {
idc = 2006;
x = 0;
y = 0;
w = 0;
h = 0;
text = $STR_ACE_Medical_Menu_TRIAGE_DECEASED;
style = ST_CENTER;
size = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)";
SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)";
animTextureNormal = "#(argb,8,8,3)color(0,0,0,0.9)";
animTextureDisabled = "#(argb,8,8,3)color(0,0,0,0.9)";
animTextureOver = "#(argb,8,8,3)color(0,0,0,0.9)";
animTextureFocused = "#(argb,8,8,3)color(0,0,0,0.9)";
animTexturePressed = "#(argb,8,8,3)color(0,0,0,0.9)";
animTextureDefault = "#(argb,8,8,3)color(0,0,0,0.9)";
action = QUOTE([] call FUNC(handleUI_dropDownTriageCard); [ARR_2(GVAR(INTERACTION_TARGET),4)] call FUNC(setTriageStatus););
};
};
};

View File

@ -11,7 +11,7 @@ class ACE_Settings {
isClientSettable = 1;
displayName = CSTRING(ShowPlayerNames);
description = CSTRING(ShowPlayerNames_Desc);
values[] = {CSTRING(Disabled), CSTRING(Enabled), CSTRING(OnlyCursor), CSTRING(OnlyKeypress), CSTRING(OnlyCursorAndKeypress)};
values[] = {ECSTRING(common,Disabled), CSTRING(Enabled), CSTRING(OnlyCursor), CSTRING(OnlyKeypress), CSTRING(OnlyCursorAndKeypress)};
};
class GVAR(showPlayerRanks) {
value = 1;
@ -42,7 +42,7 @@ class ACE_Settings {
isClientSettable = 1;
displayName = CSTRING(ShowSoundWaves);
description = CSTRING(ShowSoundWaves_Desc);
values[] = {CSTRING(Disabled), CSTRING(NameTagSettings), CSTRING(AlwaysShowAll)};
values[] = {ECSTRING(common,Disabled), CSTRING(NameTagSettings), CSTRING(AlwaysShowAll)};
};
class GVAR(playerNamesViewDistance) {
value = 5;

View File

@ -16,7 +16,7 @@ class CfgVehicles {
class values {
class DoNotForce {
default = 1;
name = CSTRING(DoNotForce);
name = ECSTRING(common,DoNotForce);
value = -1;
};
class ForceHide {
@ -54,7 +54,7 @@ class CfgVehicles {
class values {
class DoNotForce {
default = 1;
name = CSTRING(DoNotForce);
name = ECSTRING(common,DoNotForce);
value = -1;
};
class ForceHide {
@ -74,7 +74,7 @@ class CfgVehicles {
class values {
class DoNotForce {
default = 1;
name = CSTRING(DoNotForce);
name = ECSTRING(common,DoNotForce);
value = -1;
};
class ForceHide {

View File

@ -149,14 +149,6 @@
<Czech>Zobrazit jména a hodnosti pro spřátelené AI jednotky? Výchozí: Nevynucovat</Czech>
<Portuguese>Mostra o nome e patente para unidades IA aliadas? Padrão: Não forçar</Portuguese>
</Key>
<Key ID="STR_ACE_NameTags_DoNotForce">
<English>Do Not Force</English>
<Polish>Nie wymuszaj</Polish>
<Spanish>No forzar</Spanish>
<German>Nicht erzwingen</German>
<Czech>Nevynucovat</Czech>
<Portuguese>Não forçar</Portuguese>
</Key>
<Key ID="STR_ACE_NameTags_ForceHide">
<English>Force Hide</English>
<Polish>Wymuś ukrycie</Polish>
@ -213,22 +205,6 @@
<Czech>Tento modul umožňuje si přizpůsobit nastavení a vzdálenost jmenovky.</Czech>
<Portuguese>Este módulo permite que você personalize as configurações e distâncias de etiquetas de nome.</Portuguese>
</Key>
<Key ID="STR_ACE_NameTags_Disabled">
<English>Disabled</English>
<Polish>Wyłączone</Polish>
<Spanish>Desactivado</Spanish>
<German>Deaktiviert</German>
<Czech>Zakázáno</Czech>
<Portuguese>Desativado</Portuguese>
</Key>
<Key ID="STR_ACE_NameTags_Enabled">
<English>Enabled</English>
<Polish>Włączone</Polish>
<Spanish>Activado</Spanish>
<German>Aktiviert</German>
<Czech>Povoleno</Czech>
<Portuguese>Ativado</Portuguese>
</Key>
<Key ID="STR_ACE_NameTags_OnlyCursor">
<English>Only on Cursor</English>
<Polish>Tylko pod kursorem</Polish>

View File

@ -1,5 +1,10 @@
class Extended_PreInit_EventHandlers {
class ADDON {
init = QUOTE(call COMPILE_FILE(XEH_preInit));
};
class ADDON {
init = QUOTE(call COMPILE_FILE(XEH_preInit));
};
};
class Extended_PostInit_EventHandlers {
class ADDON {
init = QUOTE(call COMPILE_FILE(XEH_postInit));
};
};

View File

@ -0,0 +1,11 @@
#include "script_component.hpp"
["SettingsInitialized", {
GVAR(categories) pushback ""; //Ensure All Catagories is at top
{
if !(_x select 8 in GVAR(categories)) then {
GVAR(categories) pushback (_x select 8);
};
}foreach EGVAR(common,settings);
}] call EFUNC(common,addEventHandler);

View File

@ -10,16 +10,19 @@ PREP(onSliderPosChanged);
PREP(onServerSaveInputField);
PREP(onServerSettingsMenuOpen);
PREP(onServerListBoxShowSelectionChanged);
PREP(onCategorySelectChanged);
PREP(resetSettings);
PREP(serverResetSettings);
PREP(settingsMenuUpdateKeyView);
PREP(settingsMenuUpdateList);
PREP(serverSettingsMenuUpdateKeyView);
PREP(serverSettingsMenuUpdateList);
PREP(onServerCategorySelectChanged);
PREP(updateSetting);
PREP(exportSettings);
PREP(toggleIncludeClientSettings);
PREP(moduleAllowConfigExport);
PREP(stringEscape);
GVAR(clientSideOptions) = [];
GVAR(clientSideColors) = [];
@ -29,5 +32,7 @@ GVAR(ClientSettingsExportIncluded) = false;
GVAR(serverSideOptions) = [];
GVAR(serverSideColors) = [];
GVAR(serverSideValues) = [];
GVAR(categories) = [];
GVAR(currentCategorySelection) = 0;
ADDON = true;

View File

@ -40,7 +40,7 @@ private ["_compiledConfig", "_name", "_typeName", "_isClientSetable", "_localize
if (GVAR(ClientSettingsExportIncluded) || !_isClientSetable) then {
_value = missionNamespace getvariable [_name, _defaultValue];
if (_typeName == "STRING") then { // I dont think we have string values, but just in case
if (_typeName == "STRING") then {
_value = format['"%1"', _value];
};
if (_typeName == "BOOL") then {

View File

@ -0,0 +1,27 @@
/*
* Author: Glowbal
* Changes which category is selected
*
* Arguments:
* None
*
* Return Value:
* None
*
* Example:
* [] call ACE_optionsmenu_fnc_onCategorySelectChanged
*
* Public: No
*/
#include "script_component.hpp"
private ["_settingsMenu"];
disableSerialization;
_settingsMenu = uiNamespace getVariable 'ACE_settingsMenu';
_ctrlComboBox = (_settingsMenu displayCtrl 14);
GVAR(currentCategorySelection) = lbCurSel _ctrlComboBox;
[false] call FUNC(settingsMenuUpdateList);

View File

@ -0,0 +1,26 @@
/*
* Author: Glowbal
* Changes which category is selected
*
* Arguments:
* None
*
* Return Value:
* None
*
* Example:
* [] call ACE_optionsmenu_fnc_onCategorySelectChanged
*
* Public: No
*/
#include "script_component.hpp"
private ["_settingsMenu", "_ctrlComboBox"];
disableSerialization;
_settingsMenu = uiNamespace getVariable 'ACE_serverSettingsMenu';
_ctrlComboBox = (_settingsMenu displayCtrl 14);
GVAR(currentCategorySelection) = lbCurSel _ctrlComboBox;
[false] call FUNC(serverSettingsMenuUpdateList);

View File

@ -29,7 +29,10 @@ switch (GVAR(optionMenu_openTab)) do {
_settingName = _setting select 0;
_convertedValue = switch (toUpper (_setting select 1)) do {
case "STRING": {format ['"%1"', _inputText]};
case "STRING": {
ctrlSetText [414, _inputText call FUNC(stringEscape)];
format ['%1', _inputText call FUNC(stringEscape)];
};
case "ARRAY": {format [call compile "[%1]", _inputText]};
case "SCALAR": {parseNumber _inputText;};
default {throw "Error"};

View File

@ -61,7 +61,19 @@ _menu = uiNamespace getvariable "ACE_serverSettingsMenu";
(_menu displayCtrl 1003) ctrlEnable false;
if (GVAR(ClientSettingsExportIncluded)) then {
(_settingsMenu displayCtrl 1102) ctrlSetText localize (LSTRING(exClientSettings));
(_settingsMenu displayCtrl 1102) ctrlSetText localize (CSTRING(exClientSettings));
} else {
(_settingsMenu displayCtrl 1102) ctrlSetText localize (LSTRING(inClientSettings));
(_settingsMenu displayCtrl 1102) ctrlSetText localize (CSTRING(inClientSettings));
};
lbClear (_menu displayCtrl 14);
{
if (_x == "") then {
_x = localize "STR_ACE_OptionsMenu_category_all";
};
if (isLocalized _x) then {_x = localize _x};
(_menu displayCtrl 14) lbAdd _x;
} forEach GVAR(categories);
(_menu displayCtrl 14) lbSetCurSel GVAR(currentCategorySelection); //All Catagoies

View File

@ -52,3 +52,16 @@ if (GVAR(serverConfigGeneration) == 0) then {
(_menu displayCtrl 1102) ctrlEnable false;
(_menu displayCtrl 1102) ctrlShow false;
};
lbClear (_menu displayCtrl 14);
{
if (_x == "") then {
_x = localize "STR_ACE_OptionsMenu_category_all";
};
if (isLocalized _x) then {_x = localize _x};
(_menu displayCtrl 14) lbAdd _x;
} forEach GVAR(categories);
(_menu displayCtrl 14) lbSetCurSel GVAR(currentCategorySelection); //All Catagoies

View File

@ -16,7 +16,7 @@
#include "script_component.hpp"
private ["_settingsMenu", "_ctrlList", "_collection", "_settingIndex", "_setting", "_entryName", "_localizedName", "_localizedDescription", "_possibleValues", "_settingsValue", "_currentColor", "_expectedType"];
private ["_settingsMenu", "_ctrlList", "_collection", "_settingIndex", "_setting", "_entryName", "_localizedName", "_localizedDescription", "_possibleValues", "_settingsValue", "_currentColor", "_expectedType", "_filteredCollection", "_selectedCategory"];
disableSerialization;
_settingsMenu = uiNamespace getVariable 'ACE_serverSettingsMenu';
@ -29,16 +29,24 @@ _collection = switch (GVAR(optionMenu_openTab)) do {
default {[]};
};
if (count _collection > 0) then {
_selectedCategory = GVAR(categories) select GVAR(currentCategorySelection);
_filteredCollection = [];
{
if (_selectedCategory == "" || {_selectedCategory == (_x select 8)}) then {
_filteredCollection pushBack _x;
};
} forEach _collection;
if (count _filteredCollection > 0) then {
_settingIndex = (lbCurSel _ctrlList);
if (_settingIndex > (count _collection)) then {
_settingIndex = count _collection - 1;
if (_settingIndex > (count _filteredCollection)) then {
_settingIndex = count _filteredCollection - 1;
};
if (_settingIndex < 0) then {
_settingIndex = 0;
};
_setting = _collection select _settingIndex;
_setting = _filteredCollection select _settingIndex;
_entryName = _setting select 0;
_localizedName = _setting select 3;
@ -52,12 +60,12 @@ if (count _collection > 0) then {
switch (GVAR(optionMenu_openTab)) do {
case (MENU_TAB_SERVER_OPTIONS): {
_possibleValues = _setting select 5;
_settingsValue = _setting select 8;
_settingsValue = _setting select 9;
// Created disable/enable options for bools
if ((_setting select 1) == "BOOL") then {
lbClear 400;
lbAdd [400, (localize LSTRING(Disabled))];
lbAdd [400, (localize LSTRING(Enabled))];
lbAdd [400, (localize ELSTRING(common,No))];
lbAdd [400, (localize ELSTRING(common,Yes))];
_settingsValue = [0, 1] select _settingsValue;
} else {
lbClear 400;
@ -66,14 +74,14 @@ if (count _collection > 0) then {
(_settingsMenu displayCtrl 400) lbSetCurSel _settingsValue;
};
case (MENU_TAB_SERVER_COLORS): {
_currentColor = _setting select 8;
_currentColor = _setting select 9;
{
sliderSetPosition [_x, (255 * (_currentColor select _forEachIndex))];
} forEach [410, 411, 412, 413];
};
case (MENU_TAB_SERVER_VALUES): {
// TODO implement
_settingsValue = _setting select 8;
_settingsValue = _setting select 9;
// Created disable/enable options for bools
_expectedType = switch (_setting select 1) do {

View File

@ -16,7 +16,7 @@
#include "script_component.hpp"
private ["_settingsMenu", "_ctrlList", "_settingsText", "_color", "_settingsColor", "_updateKeyView", "_settingsValue"];
private ["_settingsMenu", "_ctrlList", "_settingsText", "_color", "_settingsColor", "_updateKeyView", "_settingsValue", "_selectedCategory"];
DEFAULT_PARAM(0,_updateKeyView,true);
disableSerialization;
@ -24,55 +24,65 @@ _settingsMenu = uiNamespace getVariable 'ACE_serverSettingsMenu';
_ctrlList = _settingsMenu displayCtrl 200;
lbclear _ctrlList;
_selectedCategory = GVAR(categories) select GVAR(currentCategorySelection);
switch (GVAR(optionMenu_openTab)) do {
case (MENU_TAB_SERVER_OPTIONS): {
{
if ((_x select 3) != "") then {
_ctrlList lbadd (_x select 3);
} else {
_ctrlList lbadd (_x select 0);
if (_selectedCategory == "" || _selectedCategory == (_X select 8)) then {
if ((_x select 3) != "") then {
_ctrlList lbadd (_x select 3);
} else {
_ctrlList lbadd (_x select 0);
};
_settingsValue = _x select 9;
// Created disable/enable options for bools
_settingsText = if ((_x select 1) == "BOOL") then {
[(localize ELSTRING(common,No)), (localize ELSTRING(common,Yes))] select _settingsValue;
} else {
(_x select 5) select _settingsValue;
};
_ctrlList lbadd (_settingsText);
};
_settingsValue = _x select 8;
// Created disable/enable options for bools
_settingsText = if ((_x select 1) == "BOOL") then {
[(localize LSTRING(Disabled)), (localize LSTRING(Enabled))] select _settingsValue;
} else {
(_x select 5) select _settingsValue;
};
_ctrlList lbadd (_settingsText);
}foreach GVAR(serverSideOptions);
};
case (MENU_TAB_SERVER_COLORS): {
{
_color = +(_x select 8);
{
_color set [_forEachIndex, ((round (_x * 100))/100)];
} forEach _color;
_settingsColor = str _color;
if ((_x select 3) != "") then {
_ctrlList lbadd (_x select 3);
} else {
_ctrlList lbadd (_x select 0);
if (_selectedCategory == "" || _selectedCategory == (_X select 8)) then {
_color = +(_x select 9);
{
_color set [_forEachIndex, ((round (_x * 100))/100)];
} forEach _color;
_settingsColor = str _color;
if ((_x select 3) != "") then {
_ctrlList lbadd (_x select 3);
} else {
_ctrlList lbadd (_x select 0);
};
_ctrlList lbadd (_settingsColor);
_ctrlList lnbSetColor [[_forEachIndex, 1], (_x select 9)];
};
_ctrlList lbadd (_settingsColor);
_ctrlList lnbSetColor [[_forEachIndex, 1], (_x select 8)];
}foreach GVAR(serverSideColors);
};
case (MENU_TAB_SERVER_VALUES): {
{
if ((_x select 3) != "") then {
_ctrlList lbadd (_x select 3);
} else {
_ctrlList lbadd (_x select 0);
if (_selectedCategory == "" || _selectedCategory == (_X select 8)) then {
if ((_x select 3) != "") then {
_ctrlList lbadd (_x select 3);
} else {
_ctrlList lbadd (_x select 0);
};
_settingsValue = _x select 9;
if (typeName _settingsValue != "STRINg") then {
_settingsValue = format["%1", _settingsValue];
};
_ctrlList lbadd (_settingsValue);
};
_settingsValue = _x select 8;
if (typeName _settingsValue != "STRINg") then {
_settingsValue = format["%1", _settingsValue];
};
_ctrlList lbadd (_settingsValue);
}foreach GVAR(serverSideValues);
};
};

Some files were not shown because too many files have changed in this diff Show More