diff --git a/addons/advanced_ballistics/stringtable.xml b/addons/advanced_ballistics/stringtable.xml
index 8ba88dee2b..5c6dd58d6e 100644
--- a/addons/advanced_ballistics/stringtable.xml
+++ b/addons/advanced_ballistics/stringtable.xml
@@ -210,7 +210,6 @@
Define o raio ao redor do jogador (em metros) onde a balística avançada será aplicada aos projéteis
-
Moduł ten pozwala aktywować zaawansowaną balistykę biorącą przy obliczeniach trajektorii lotu pocisku pod uwagę takie rzeczy jak temperatura powietrza, ciśnienie atmosferyczne, wilgotność powietrza, siły Coriolisa i Eotvosa, grawitację a także broń z jakiej wykonywany jest strzał oraz rodzaj amunicji. Wszystko to sprowadza się na bardzo dokładne odwzorowanie balistyki.
Tento modul umožňuje aktivovat pokročilou balistiku, která vypočítává trajektorii kulky a bere do úvahy věci jako je teplota vzduchu, atmosférický tlak, vlhkost vzduchu, gravitaci, typ munice a zbraň, ze které je náboj vystřelen. To vše přispívá k velmi přesné balistice.
Este módulo permite que você ative cálculos de balística avançada, fazendo a trajetória do projétil levar em consideração coisas como temperatura do ar, pressão atmosférica, umidade, força de Coriolis, a gravidade, o modelo da arma no qual o disparo é realizado e o tipo de munição. Tudo isso acrescenta-se a um balística muito precisa.
diff --git a/addons/common/functions/fnc_checkFiles.sqf b/addons/common/functions/fnc_checkFiles.sqf
index 631329ecee..647a1b00a6 100644
--- a/addons/common/functions/fnc_checkFiles.sqf
+++ b/addons/common/functions/fnc_checkFiles.sqf
@@ -56,20 +56,23 @@ _addons = [_addons, {_this find "ace_" == 0}] call FUNC(filter);
} forEach getArray (configFile >> "ACE_Extensions" >> "extensions");
///////////////
-// check server version
+// check server version/addons
///////////////
if (isMultiplayer) then {
if (isServer) then {
// send servers version of ACE to all clients
GVAR(ServerVersion) = _version;
+ GVAR(ServerAddons) = _addons;
publicVariable QGVAR(ServerVersion);
+ publicVariable QGVAR(ServerAddons);
} else {
- // clients have to wait for the variable
+ // clients have to wait for the variables
[{
- if (isNil QGVAR(ServerVersion)) exitWith {};
+ if (isNil QGVAR(ServerVersion) || isNil QGVAR(ServerAddons)) exitWith {};
- private "_version";
- _version = _this select 0;
+ private ["_version","_addons"];
+ _version = (_this select 0) select 0;
+ _addons = (_this select 0) select 1;
if (_version != GVAR(ServerVersion)) then {
private "_errorMsg";
@@ -82,7 +85,18 @@ if (isMultiplayer) then {
};
};
+ _addons = _addons - GVAR(ServerAddons);
+ if !(_addons isEqualTo []) then {
+ _errorMsg = format ["Client/Server Addon Mismatch. Client has extra addons: %1.",_addons];
+
+ diag_log text format ["[ACE] ERROR: %1", _errorMsg];
+
+ if (hasInterface) then {diag_log str "1";
+ ["[ACE] ERROR", _errorMsg, {findDisplay 46 closeDisplay 0}] call FUNC(errorMessage);
+ };
+ };
+
[_this select 1] call CBA_fnc_removePerFrameHandler;
- }, 1, _version] call CBA_fnc_addPerFrameHandler;
+ }, 1, [_version,_addons]] call CBA_fnc_addPerFrameHandler;
};
};
diff --git a/addons/common/functions/fnc_checkPBOs.sqf b/addons/common/functions/fnc_checkPBOs.sqf
index 4733f1a81f..ac6d8fb270 100644
--- a/addons/common/functions/fnc_checkPBOs.sqf
+++ b/addons/common/functions/fnc_checkPBOs.sqf
@@ -8,8 +8,8 @@
* 0: Warn once
* 1: Warn permanently
* 2: Kick
- * 1: Check all PBOs? (Optional - default: "[]")
- * 2: Whitelist (Optinal - default: false)
+ * 1: Check all PBOs? (Optional - default: false)
+ * 2: Whitelist (Optinal - default: "[]")
*
* Return value:
* None
diff --git a/addons/common/functions/fnc_hideUnit.sqf b/addons/common/functions/fnc_hideUnit.sqf
index b3cd6f7b77..94857335f4 100644
--- a/addons/common/functions/fnc_hideUnit.sqf
+++ b/addons/common/functions/fnc_hideUnit.sqf
@@ -29,6 +29,6 @@ if !(_reason in _setHiddenReasons) then {
_unit setVariable [QGVAR(setHiddenReasons), _setHiddenReasons, true];
};
-if !(isObjectHidden _unit) then {
+//if !(isObjectHidden _unit) then { (Uncomment when isObjectHidden hits stable branch)
["hideObjectGlobal",[_unit,true]] call FUNC(serverEvent);
-};
+//};
diff --git a/addons/common/functions/fnc_moduleCheckPBOs.sqf b/addons/common/functions/fnc_moduleCheckPBOs.sqf
index 9543b3a5c9..c75324c9a3 100644
--- a/addons/common/functions/fnc_moduleCheckPBOs.sqf
+++ b/addons/common/functions/fnc_moduleCheckPBOs.sqf
@@ -3,7 +3,9 @@
* Initializes the check-PBOs module.
*
* Arguments:
- * Whatever the module provides. (I dunno.)
+ * 0: The module logic
+ * 1: units
+ * 2: activated
*
* Return Value:
* None
diff --git a/addons/common/stringtable.xml b/addons/common/stringtable.xml
index ccc94b361b..28a40e382a 100644
--- a/addons/common/stringtable.xml
+++ b/addons/common/stringtable.xml
@@ -579,18 +579,21 @@
Seleccionar dispositivo de mano
Ativa dispositivo de mão
Przełącz urządzenie podręczne
+ Přepnout ruční zařízení
Close Handheld Device
Cerrar dispositivo de mano
Fecha dispositivo de mão
Zamknij urządzenie podręczne
+ Zavřít ruční zařízení
Cycle Handheld Devices
Cambiar dispositivos de mano
Troca dispositivos de mão
Następne urządzenie podręczne
+ Procházet ruční zařízení
\ No newline at end of file
diff --git a/addons/explosives/stringtable.xml b/addons/explosives/stringtable.xml
index 40e436656b..a2c3612b24 100644
--- a/addons/explosives/stringtable.xml
+++ b/addons/explosives/stringtable.xml
@@ -549,11 +549,13 @@
Explode on defusal?
Explosão no desarmamento?
Eksplozja przy rozbrajaniu?
+ Explodovat při zneškodňování?
Enable certain explosives to explode on defusal? Default: Yes
Ativa certos explosivos para detonar no desarmamento? Padrão: Sim
Spraw, aby niektóre ładunki wybuchowe eksplodowały przy próbie ich rozbrojenia? Domyślnie:Tak
+ Umožnit u některých výbušnin explozi při pokusu je zneškodnit? Výchozí: Ano
diff --git a/addons/interact_menu/stringtable.xml b/addons/interact_menu/stringtable.xml
index f87880e83c..4ab84e1c51 100644
--- a/addons/interact_menu/stringtable.xml
+++ b/addons/interact_menu/stringtable.xml
@@ -88,6 +88,7 @@
Enable Blue Force Tracking. Default: No
Ativa Rastreio de Forças Azuis. Padrão: Não
Aktywuj Blue Force Tracking. Domyślnie: Nie
+ Povolit Blue Force Tracking. Výchozí: Ne
Interval
diff --git a/addons/medical/ACE_Medical_Treatments.hpp b/addons/medical/ACE_Medical_Treatments.hpp
index 8eacf39006..079ae40506 100644
--- a/addons/medical/ACE_Medical_Treatments.hpp
+++ b/addons/medical/ACE_Medical_Treatments.hpp
@@ -11,6 +11,7 @@ class ACE_Medical_Actions {
treatmentTimeSelfCoef = 1;
items[] = {{"ACE_fieldDressing", "ACE_packingBandage", "ACE_elasticBandage", "ACE_quikclot"}};
condition = "";
+ patientStateCondition = 0;
itemConsumed = 1;
callbackSuccess = QUOTE(DFUNC(treatmentBasic_bandage));
@@ -107,6 +108,7 @@ class ACE_Medical_Actions {
// Item required for the action. Leave empty for no item required.
items[] = {"ACE_fieldDressing"};
condition = "";
+ patientStateCondition = 0;
// Callbacks
callbackSuccess = QUOTE(DFUNC(treatmentAdvanced_bandage));
callbackFailure = "";
@@ -206,6 +208,7 @@ class ACE_Medical_Actions {
items[] = {"ACE_surgicalKit"};
treatmentLocations[] = {QGVAR(useLocation_SurgicalKit)};
requiredMedic = QGVAR(medicSetting_SurgicalKit);
+ patientStateCondition = QGVAR(useCondition_SurgicalKit);
treatmentTime = "(count ((_this select 1) getVariable ['ACE_Medical_bandagedWounds', []]) * 5)";
callbackSuccess = "";
callbackProgress = QUOTE(DFUNC(treatmentAdvanced_surgicalKit_onProgress));
@@ -219,6 +222,7 @@ class ACE_Medical_Actions {
items[] = {"ACE_personalAidKit"};
treatmentLocations[] = {QGVAR(useLocation_PAK)};
requiredMedic = QGVAR(medicSetting_PAK);
+ patientStateCondition = QGVAR(useCondition_PAK);
treatmentTime = QUOTE((_this select 1) call FUNC(treatmentAdvanced_fullHealTreatmentTime));
callbackSuccess = QUOTE(DFUNC(treatmentAdvanced_fullHeal));
itemConsumed = QGVAR(consumeItem_PAK);
@@ -266,10 +270,10 @@ class ACE_Medical_Actions {
requiredMedic = 0;
treatmentTime = 15;
items[] = {};
- condition = "((_this select 1) getvariable ['ACE_medical_inCardiacArrest', false])";
+ condition = "!([(_this select 1)] call ace_common_fnc_isAwake)";
callbackSuccess = QUOTE(DFUNC(treatmentAdvanced_CPR));
callbackFailure = "";
- callbackProgress = "(((_this select 0) select 1) getvariable ['ACE_medical_inCardiacArrest', false])";
+ callbackProgress = "!([((_this select 0) select 1)] call ace_common_fnc_isAwake)";
animationPatient = "";
animationPatientUnconscious = "AinjPpneMstpSnonWrflDnon_rolltoback";
animationCaller = "AinvPknlMstpSlayWnonDnon_medic";
diff --git a/addons/medical/ACE_Settings.hpp b/addons/medical/ACE_Settings.hpp
index 2b28e91882..fcaba03aa0 100644
--- a/addons/medical/ACE_Settings.hpp
+++ b/addons/medical/ACE_Settings.hpp
@@ -133,6 +133,20 @@ class ACE_Settings {
value = 2;
values[] = {"Anywhere", "Medical vehicles", "Medical facility", "vehicle & facility", "Disabled"};
};
+ class GVAR(useCondition_PAK) {
+ displayName = CSTRING(AdvancedMedicalSettings_useCondition_PAK_DisplayName);
+ description = CSTRING(AdvancedMedicalSettings_useCondition_PAK_Description);
+ typeName = "SCALAR";
+ value = 0;
+ values[] = {"Anytime", "Stable"};
+ };
+ class GVAR(useCondition_SurgicalKit) {
+ displayName = CSTRING(AdvancedMedicalSettings_useCondition_SurgicalKit_DisplayName);
+ description = CSTRING(AdvancedMedicalSettings_useCondition_SurgicalKit_Description);
+ typeName = "SCALAR";
+ value = 0;
+ values[] = {"Anytime", "Stable"};
+ };
class GVAR(keepLocalSettingsSynced) {
typeName = "BOOL";
value = 1;
diff --git a/addons/medical/CfgVehicles.hpp b/addons/medical/CfgVehicles.hpp
index c8a4528ca5..66df5550fc 100644
--- a/addons/medical/CfgVehicles.hpp
+++ b/addons/medical/CfgVehicles.hpp
@@ -196,13 +196,21 @@ class CfgVehicles {
class consumeItem_PAK {
displayName = CSTRING(AdvancedMedicalSettings_consumeItem_PAK_DisplayName);
description = CSTRING(AdvancedMedicalSettings_consumeItem_PAK_Description);
-
typeName = "NUMBER";
class values {
class keep { name = CSTRING(No); value = 0; };
class remove { name = CSTRING(Yes); value = 1; default = 1; };
};
};
+ class useCondition_PAK {
+ displayName = CSTRING(AdvancedMedicalSettings_useCondition_PAK_DisplayName);
+ description = CSTRING(AdvancedMedicalSettings_useCondition_PAK_Description);
+ typeName = "NUMBER";
+ class values {
+ class AnyTime { name = CSTRING(AnyTime); value = 0; };
+ class Stable { name = CSTRING(Stable); value = 1; default = 1; };
+ };
+ };
class useLocation_PAK {
displayName = CSTRING(AdvancedMedicalSettings_useLocation_PAK_DisplayName);
description = CSTRING(AdvancedMedicalSettings_useLocation_PAK_Description);
@@ -227,15 +235,23 @@ class CfgVehicles {
displayName = CSTRING(AdvancedMedicalSettings_useLocation_SurgicalKit_DisplayName);
description = CSTRING(AdvancedMedicalSettings_useLocation_SurgicalKit_Description);
};
+ class useCondition_SurgicalKit: useCondition_PAK {
+ displayName = CSTRING(AdvancedMedicalSettings_useCondition_SurgicalKit_DisplayName);
+ description = CSTRING(AdvancedMedicalSettings_useCondition_SurgicalKit_Description);
+ class values {
+ class AnyTime { name = CSTRING(AnyTime); value = 0; default = 1; };
+ class Stable { name = CSTRING(Stable); value = 1; };
+ };
+ };
class healHitPointAfterAdvBandage {
displayName = CSTRING(AdvancedMedicalSettings_healHitPointAfterAdvBandage_DisplayName);
- description = CSTRING(AdvancedMedicalSettings_healHitPointAfterAdvBandage_Description);
+ description = CSTRING(AdvancedMedicalSettings_healHitPointAfterAdvBandage_Description);
typeName = "BOOL";
defaultValue = 0;
};
class painIsOnlySuppressed {
displayName = CSTRING(AdvancedMedicalSettings_painIsOnlySuppressed_DisplayName);
- description = CSTRING(AdvancedMedicalSettings_painIsOnlySuppressed_Description);
+ description = CSTRING(AdvancedMedicalSettings_painIsOnlySuppressed_Description);
typeName = "BOOL";
defaultValue = 1;
};
diff --git a/addons/medical/XEH_postInit.sqf b/addons/medical/XEH_postInit.sqf
index 0b51f57165..f9f821eeb3 100644
--- a/addons/medical/XEH_postInit.sqf
+++ b/addons/medical/XEH_postInit.sqf
@@ -92,7 +92,7 @@ GVAR(effectTimeBlood) = ACE_time;
[{
private["_bleeding", "_blood"];
// Zeus interface is open or player is dead; disable everything
- if (!(isNull (findDisplay 312)) or !(alive ACE_player)) exitWith {
+ if (!(isNull curatorCamera) or !(alive ACE_player)) exitWith {
GVAR(effectUnconsciousCC) ppEffectEnable false;
GVAR(effectUnconsciousRB) ppEffectEnable false;
GVAR(effectBlindingCC) ppEffectEnable false;
@@ -174,52 +174,54 @@ GVAR(lastHeartBeatSound) = ACE_time;
if ((ACE_time > GVAR(lastHeartBeat) + _interval)) then {
GVAR(lastHeartBeat) = ACE_time;
- // Pain effect
- _strength = (_pain - (ACE_player getvariable [QGVAR(painSuppress), 0])) max 0;
- _strength = _strength * (ACE_player getVariable [QGVAR(painCoefficient), GVAR(painCoefficient)]);
- if (GVAR(painEffectType) == 1) then {
- GVAR(effectPainCC) ppEffectEnable false;
- if (_pain > (ACE_player getvariable [QGVAR(painSuppress), 0]) && {alive ACE_player}) then {
- _strength = _strength * 0.15;
- GVAR(effectPainCA) ppEffectEnable true;
- GVAR(effectPainCA) ppEffectAdjust [_strength, _strength, false];
- GVAR(effectPainCA) ppEffectCommit 0.01;
- [{
- GVAR(effectPainCA) ppEffectAdjust [(_this select 0), (_this select 0), false];
- GVAR(effectPainCA) ppEffectCommit (_this select 1);
- }, [_strength * 0.1, _interval * 0.2], _interval * 0.05, 0] call EFUNC(common,waitAndExecute);
- [{
- GVAR(effectPainCA) ppEffectAdjust [(_this select 0), (_this select 0), false];
+ // Pain effect, no pain effect in zeus camera
+ if (isNull curatorCamera) then {
+ _strength = (_pain - (ACE_player getvariable [QGVAR(painSuppress), 0])) max 0;
+ _strength = _strength * (ACE_player getVariable [QGVAR(painCoefficient), GVAR(painCoefficient)]);
+ if (GVAR(painEffectType) == 1) then {
+ GVAR(effectPainCC) ppEffectEnable false;
+ if (_pain > (ACE_player getvariable [QGVAR(painSuppress), 0]) && {alive ACE_player}) then {
+ _strength = _strength * 0.15;
+ GVAR(effectPainCA) ppEffectEnable true;
+ GVAR(effectPainCA) ppEffectAdjust [_strength, _strength, false];
GVAR(effectPainCA) ppEffectCommit 0.01;
- }, [_strength * 0.7], _interval * 0.3, 0] call EFUNC(common,waitAndExecute);
- [{
- GVAR(effectPainCA) ppEffectAdjust [(_this select 0), (_this select 0), false];
- GVAR(effectPainCA) ppEffectCommit (_this select 1);
- }, [_strength * 0.1, _interval * 0.55], _interval * 0.4, 0] call EFUNC(common,waitAndExecute);
+ [{
+ GVAR(effectPainCA) ppEffectAdjust [(_this select 0), (_this select 0), false];
+ GVAR(effectPainCA) ppEffectCommit (_this select 1);
+ }, [_strength * 0.1, _interval * 0.2], _interval * 0.05, 0] call EFUNC(common,waitAndExecute);
+ [{
+ GVAR(effectPainCA) ppEffectAdjust [(_this select 0), (_this select 0), false];
+ GVAR(effectPainCA) ppEffectCommit 0.01;
+ }, [_strength * 0.7], _interval * 0.3, 0] call EFUNC(common,waitAndExecute);
+ [{
+ GVAR(effectPainCA) ppEffectAdjust [(_this select 0), (_this select 0), false];
+ GVAR(effectPainCA) ppEffectCommit (_this select 1);
+ }, [_strength * 0.1, _interval * 0.55], _interval * 0.4, 0] call EFUNC(common,waitAndExecute);
+ } else {
+ GVAR(effectPainCA) ppEffectEnable false;
+ };
} else {
GVAR(effectPainCA) ppEffectEnable false;
- };
- } else {
- GVAR(effectPainCA) ppEffectEnable false;
- if (_pain > (ACE_player getvariable [QGVAR(painSuppress), 0]) && {alive ACE_player}) then {
- _strength = _strength * 0.9;
- GVAR(effectPainCC) ppEffectEnable true;
- GVAR(effectPainCC) ppEffectAdjust [1,1,0, [1,1,1,1], [0,0,0,0], [1,1,1,1], [1 - _strength,1 - _strength,0,0,0,0.2,2]];
- GVAR(effectPainCC) ppEffectCommit 0.01;
- [{
- GVAR(effectPainCC) ppEffectAdjust [1,1,0, [1,1,1,1], [0,0,0,0], [1,1,1,1], [1 - (_this select 0),1 - (_this select 0),0,0,0,0.2,2]];
- GVAR(effectPainCC) ppEffectCommit (_this select 1);
- }, [_strength * 0.1, _interval * 0.2], _interval * 0.05, 0] call EFUNC(common,waitAndExecute);
- [{
- GVAR(effectPainCC) ppEffectAdjust [1,1,0, [1,1,1,1], [0,0,0,0], [1,1,1,1], [1 - (_this select 0),1 - (_this select 0),0,0,0,0.2,2]];
+ if (_pain > (ACE_player getvariable [QGVAR(painSuppress), 0]) && {alive ACE_player}) then {
+ _strength = _strength * 0.9;
+ GVAR(effectPainCC) ppEffectEnable true;
+ GVAR(effectPainCC) ppEffectAdjust [1,1,0, [1,1,1,1], [0,0,0,0], [1,1,1,1], [1 - _strength,1 - _strength,0,0,0,0.2,2]];
GVAR(effectPainCC) ppEffectCommit 0.01;
- }, [_strength * 0.7], _interval * 0.3, 0] call EFUNC(common,waitAndExecute);
- [{
- GVAR(effectPainCC) ppEffectAdjust [1,1,0, [1,1,1,1], [0,0,0,0], [1,1,1,1], [1 - (_this select 0),1 - (_this select 0),0,0,0,0.2,2]];
- GVAR(effectPainCC) ppEffectCommit (_this select 1);
- }, [_strength * 0.1, _interval * 0.55], _interval * 0.4, 0] call EFUNC(common,waitAndExecute);
- } else {
- GVAR(effectPainCC) ppEffectEnable false;
+ [{
+ GVAR(effectPainCC) ppEffectAdjust [1,1,0, [1,1,1,1], [0,0,0,0], [1,1,1,1], [1 - (_this select 0),1 - (_this select 0),0,0,0,0.2,2]];
+ GVAR(effectPainCC) ppEffectCommit (_this select 1);
+ }, [_strength * 0.1, _interval * 0.2], _interval * 0.05, 0] call EFUNC(common,waitAndExecute);
+ [{
+ GVAR(effectPainCC) ppEffectAdjust [1,1,0, [1,1,1,1], [0,0,0,0], [1,1,1,1], [1 - (_this select 0),1 - (_this select 0),0,0,0,0.2,2]];
+ GVAR(effectPainCC) ppEffectCommit 0.01;
+ }, [_strength * 0.7], _interval * 0.3, 0] call EFUNC(common,waitAndExecute);
+ [{
+ GVAR(effectPainCC) ppEffectAdjust [1,1,0, [1,1,1,1], [0,0,0,0], [1,1,1,1], [1 - (_this select 0),1 - (_this select 0),0,0,0,0.2,2]];
+ GVAR(effectPainCC) ppEffectCommit (_this select 1);
+ }, [_strength * 0.1, _interval * 0.55], _interval * 0.4, 0] call EFUNC(common,waitAndExecute);
+ } else {
+ GVAR(effectPainCC) ppEffectEnable false;
+ };
};
};
};
diff --git a/addons/medical/XEH_preInit.sqf b/addons/medical/XEH_preInit.sqf
index a932ee5c9d..b479383468 100644
--- a/addons/medical/XEH_preInit.sqf
+++ b/addons/medical/XEH_preInit.sqf
@@ -56,6 +56,7 @@ PREP(isInMedicalFacility);
PREP(isInMedicalVehicle);
PREP(isMedic);
PREP(isMedicalVehicle);
+PREP(isInStableCondition);
PREP(itemCheck);
PREP(modifyMedicalAction);
PREP(onMedicationUsage);
diff --git a/addons/medical/functions/fnc_canTreat.sqf b/addons/medical/functions/fnc_canTreat.sqf
index 062a696fcd..4795ccc561 100644
--- a/addons/medical/functions/fnc_canTreat.sqf
+++ b/addons/medical/functions/fnc_canTreat.sqf
@@ -16,7 +16,7 @@
#include "script_component.hpp"
-private ["_caller", "_target", "_selectionName", "_className", "_config", "_medicRequired", "_items", "_locations", "_return", "_condition"];
+private ["_caller", "_target", "_selectionName", "_className", "_config", "_medicRequired", "_items", "_locations", "_return", "_condition", "_patientStateCondition"];
_caller = _this select 0;
_target = _this select 1;
_selectionName = _this select 2;
@@ -44,7 +44,6 @@ if !([_caller, _medicRequired] call FUNC(isMedic)) exitwith {false};
_items = getArray (_config >> "items");
if (count _items > 0 && {!([_caller, _target, _items] call FUNC(hasItems))}) exitwith {false};
-_locations = getArray (_config >> "treatmentLocations");
_return = true;
if (getText (_config >> "condition") != "") then {
@@ -62,6 +61,14 @@ if (getText (_config >> "condition") != "") then {
};
if (!_return) exitwith {false};
+_patientStateCondition = if (isText(_config >> "patientStateCondition")) then {
+ missionNamespace getvariable [getText(_config >> "patientStateCondition"), 0]
+} else {
+ getNumber(_config >> "patientStateCondition")
+};
+if (_patientStateCondition == 1 && {!([_target] call FUNC(isInStableCondition))}) exitwith {false};
+
+_locations = getArray (_config >> "treatmentLocations");
if ("All" in _locations) exitwith {true};
private [ "_medFacility", "_medVeh"];
diff --git a/addons/medical/functions/fnc_getUnconsciousCondition.sqf b/addons/medical/functions/fnc_getUnconsciousCondition.sqf
index 83955f7bd1..19d3bdec1d 100644
--- a/addons/medical/functions/fnc_getUnconsciousCondition.sqf
+++ b/addons/medical/functions/fnc_getUnconsciousCondition.sqf
@@ -16,7 +16,6 @@
private ["_unit","_return"];
_unit = _this select 0;
-if (GVAR(level) == 1) exitwith {true};
if (isnil QGVAR(unconsciousConditions)) then {
GVAR(unconsciousConditions) = [];
};
diff --git a/addons/medical/functions/fnc_handleBandageOpening.sqf b/addons/medical/functions/fnc_handleBandageOpening.sqf
index a92bf9029c..a86077cb3b 100644
--- a/addons/medical/functions/fnc_handleBandageOpening.sqf
+++ b/addons/medical/functions/fnc_handleBandageOpening.sqf
@@ -58,10 +58,10 @@ if (isClass (_config >> _className)) then {
_bandagedWounds = _target getvariable [QGVAR(bandagedWounds), []];
_exist = false;
-_injuryId = _injury select 0;
+_injuryType = _injury select 1;
_bandagedInjury = [];
{
- if ((_x select 0) == _injuryId) exitwith {
+ if ((_x select 1) == _injuryType && (_x select 2) == (_injury select 2)) exitwith {
_exist = true;
_existingInjury = _x;
_existingInjury set [3, (_existingInjury select 3) + _impact];
@@ -73,16 +73,11 @@ _bandagedInjury = [];
if !(_exist) then {
// [ID, classID, bodypart, percentage treated, bloodloss rate]
- _bandagedInjury = [_injuryId, _injury select 1, _injury select 2, _impact, _injury select 4];
+ _bandagedInjury = [_injury select 0, _injury select 1, _injury select 2, _impact, _injury select 4];
_bandagedWounds pushback _bandagedInjury;
};
-_target setvariable [QGVAR(bandagedWounds), _bandagedWounds, !USE_WOUND_EVENT_SYNC];
-
-if (USE_WOUND_EVENT_SYNC) then {
- // sync _bandagedInjury
-
-};
+_target setvariable [QGVAR(bandagedWounds), _bandagedWounds, true];
// Check if we are ever going to reopen this
if (random(1) <= _reopeningChance) then {
@@ -95,22 +90,19 @@ if (random(1) <= _reopeningChance) then {
_injuryIndex = _this select 3;
_injury = _this select 4;
- if (alive _target) then {
+ //if (alive _target) then {
_openWounds = _target getvariable [QGVAR(openWounds), []];
if ((count _openWounds)-1 < _injuryIndex) exitwith {};
_selectedInjury = _openWounds select _injuryIndex;
- if (_selectedInjury select 0 == _injury select 0) then { // matching the IDs
+ if (_selectedInjury select 1 == _injury select 1 && (_selectedInjury select 2) == (_injury select 2)) then { // matching the IDs
_selectedInjury set [3, (_selectedInjury select 3) + _impact];
_openWounds set [_injuryIndex, _selectedInjury];
- _target setvariable [QGVAR(openWounds), _openWounds, !USE_WOUND_EVENT_SYNC];
- if (USE_WOUND_EVENT_SYNC) then {
- ["medical_propagateWound", [_target, _selectedInjury]] call EFUNC(common,globalEvent);
- };
+
_bandagedWounds = _target getvariable [QGVAR(bandagedWounds), []];
_exist = false;
- _injuryId = _injury select 0;
+ _injuryId = _injury select 1;
{
- if ((_x select 0) == _injuryId) exitwith {
+ if ((_x select 1) == _injuryId && (_x select 2) == (_injury select 2)) exitwith {
_exist = true;
_existingInjury = _x;
_existingInjury set [3, ((_existingInjury select 3) - _impact) max 0];
@@ -119,10 +111,11 @@ if (random(1) <= _reopeningChance) then {
}foreach _bandagedWounds;
if (_exist) then {
- _target setvariable [QGVAR(bandagedWounds), _bandagedWounds, !USE_WOUND_EVENT_SYNC];
+ _target setvariable [QGVAR(bandagedWounds), _bandagedWounds, true];
+ _target setvariable [QGVAR(openWounds), _openWounds, true];
};
};
// Otherwise something went wrong, we we don't reopen them..
- };
- }, [_target, _impact, _part, _injuryIndex, _injury], _delay, 0] call EFUNC(common,waitAndExecute);
+ //};
+ }, [_target, _impact, _part, _injuryIndex, +_injury], _delay, 0] call EFUNC(common,waitAndExecute);
};
diff --git a/addons/medical/functions/fnc_handleDamage.sqf b/addons/medical/functions/fnc_handleDamage.sqf
index ab6e6f2a68..aad69ee2fa 100644
--- a/addons/medical/functions/fnc_handleDamage.sqf
+++ b/addons/medical/functions/fnc_handleDamage.sqf
@@ -80,10 +80,10 @@ if (GVAR(level) < 2) then {
} else {
_damageReturn = _damageReturn min 0.89;
};
+
};
[_unit] call FUNC(addToInjuredCollection);
-
if (_unit getVariable [QGVAR(preventInstaDeath), GVAR(preventInstaDeath)]) exitWith {
if (vehicle _unit != _unit and {damage (vehicle _unit) >= 1}) then {
[_unit] call EFUNC(common,unloadPerson);
@@ -99,7 +99,7 @@ if (_unit getVariable [QGVAR(preventInstaDeath), GVAR(preventInstaDeath)]) exitW
if (_damageReturn >= 0.9 && {_selection in ["", "head", "body"]}) exitWith {
if (_unit getvariable ["ACE_isUnconscious", false]) exitwith {
[_unit] call FUNC(setDead);
- 0.89
+ 0.89;
};
if (_delayedUnconsicous) then {
[{
@@ -110,9 +110,9 @@ if (_unit getVariable [QGVAR(preventInstaDeath), GVAR(preventInstaDeath)]) exitW
[_this select 0, true] call FUNC(setUnconscious);
}, [_unit]] call EFUNC(common,execNextFrame);
};
- 0.89
+ 0.89;
};
- _damageReturn min 0.89;
+ 0.89;
};
if (((_unit getVariable [QGVAR(enableRevive), GVAR(enableRevive)]) > 0) && {_damageReturn >= 0.9} && {_selection in ["", "head", "body"]}) exitWith {
@@ -120,8 +120,7 @@ if (((_unit getVariable [QGVAR(enableRevive), GVAR(enableRevive)]) > 0) && {_dam
[_unit] call EFUNC(common,unloadPerson);
};
[_unit] call FUNC(setDead);
-
- 0.89
+ 0.89;
};
-_damageReturn
+_damageReturn;
diff --git a/addons/medical/functions/fnc_handleDamage_advanced.sqf b/addons/medical/functions/fnc_handleDamage_advanced.sqf
index 9da0d065ed..e617738a90 100644
--- a/addons/medical/functions/fnc_handleDamage_advanced.sqf
+++ b/addons/medical/functions/fnc_handleDamage_advanced.sqf
@@ -39,8 +39,6 @@ _damageBodyParts = _unit getvariable [QGVAR(bodyPartStatus), [0,0,0,0,0,0]];
_damageBodyParts set [_part, (_damageBodyParts select _part) + _newDamage];
_unit setvariable [QGVAR(bodyPartStatus), _damageBodyParts, true];
-[_unit] call FUNC(handleDamage_advancedSetDamage);
-
_typeOfDamage = [_typeOfProjectile] call FUNC(getTypeOfDamage);
[_unit, _selectionName, _newDamage, _typeOfProjectile, _typeOfDamage] call FUNC(handleDamage_assignWounds);
diff --git a/addons/medical/functions/fnc_handleDamage_caching.sqf b/addons/medical/functions/fnc_handleDamage_caching.sqf
index 9760770d71..99816ee274 100644
--- a/addons/medical/functions/fnc_handleDamage_caching.sqf
+++ b/addons/medical/functions/fnc_handleDamage_caching.sqf
@@ -81,12 +81,17 @@ if (diag_frameno > (_unit getVariable [QGVAR(frameNo_damageCaching), -3]) + 2) t
_args = _this select 0;
if (diag_frameno > (_args select 1) + 2) then {
+ (_args select 0) setDamage 0;
+
_cache_params = (_args select 0) getVariable [QGVAR(cachedHandleDamageParams), []];
_cache_damages = (_args select 0) getVariable QGVAR(cachedDamages);
{
_params = _x + [_cache_damages select _foreachIndex];
_params call FUNC(handleDamage_advanced);
}foreach _cache_params;
+
+ [(_args select 0)] call FUNC(handleDamage_advancedSetDamage);
+
[(_this select 1)] call cba_fnc_removePerFrameHandler;
};
}, 0, [_unit, diag_frameno] ] call CBA_fnc_addPerFrameHandler;
diff --git a/addons/medical/functions/fnc_isInStableCondition.sqf b/addons/medical/functions/fnc_isInStableCondition.sqf
new file mode 100644
index 0000000000..f7c22ed085
--- /dev/null
+++ b/addons/medical/functions/fnc_isInStableCondition.sqf
@@ -0,0 +1,30 @@
+/*
+* Author: Glowbal
+* Check if a unit is in a stable condition
+*
+* Arguments:
+* 0: The patient
Treat remote controlled units as AI not players?
¿Tratar unidades remotamente controladas como IA?
Tratar unidades remotamente controladas como IA?
Traktuj jednostki zdalnie sterowane (przez Zeusa) jako AI, nie jako graczy?
+ Ošetřit vzdáleně ovládané jednotky jako AI, ne jako hráče?
Disabled
@@ -3179,14 +3181,22 @@
Localizações do KPS
- Where can the personal aid kit be used?
+ Where can the Personal Aid Kit be used?
Где может использоваться аптечка?
Gdzie można korzystać z apteczek osobistych?
¿Dónde se puede utilizar el equipo de primeros auxilios?
Wo kann der Erstehilfekasten verwendet werden?
- Kde může být osobní lékárnička použita?
+ Kde může být použita osobní lékárnička?
Onde o kit de primeiros socorros pode ser utilizado?
+
+ Condition PAK
+ Podmínka osobní lékárničky
+
+
+ When can the Personal Aid Kit be used?
+ Kde může být použita osobní lékárnička?
+
Anywhere
Где угодно
@@ -3286,6 +3296,14 @@
Kde může být použita chirurgická souprava?
Onde o kit cirúrgico pode ser utilizado?
+
+ Condition Surgical kit (Adv)
+ Podmínka chirurgické soupravy (Pokr.)
+
+
+ When can the Surgical kit be used?
+ Kde může být použita chirurgická souprava?
+
Bloodstains
Blutflecken
@@ -3611,5 +3629,13 @@
Não
No
+
+ Anytime
+ Kdykoli
+
+
+ Stable
+ Stabilní
+
\ No newline at end of file
diff --git a/addons/nametags/functions/fnc_drawNameTagIcon.sqf b/addons/nametags/functions/fnc_drawNameTagIcon.sqf
index 7b6bbda138..021a4e2a0b 100644
--- a/addons/nametags/functions/fnc_drawNameTagIcon.sqf
+++ b/addons/nametags/functions/fnc_drawNameTagIcon.sqf
@@ -35,7 +35,7 @@ if ((_iconType == ICON_NAME_SPEAK) || (_iconType == ICON_SPEAK)) then {
_alpha = _alpha max 0.6;//Boost alpha when speaking
} else {
if (_iconType == ICON_NAME_RANK) then {
- _icon = TEXTURES_RANKS select ((["PRIVATE", "CORPORAL", "SERGEANT", "LIEUTENANT", "CAPTAIN", "MAJOR", "COLONEL"] find (rank _target)) + 1);
+ _icon = format["\A3\Ui_f\data\GUI\Cfg\Ranks\%1_gs.paa",(toLower(rank _target))];
_size = 1;
};
};
diff --git a/addons/nametags/script_component.hpp b/addons/nametags/script_component.hpp
index da912b48c4..7bf0acbc4a 100644
--- a/addons/nametags/script_component.hpp
+++ b/addons/nametags/script_component.hpp
@@ -16,15 +16,3 @@
#define ICON_NAME_RANK 2
#define ICON_NAME_SPEAK 3
#define ICON_SPEAK 4
-
-//todo?: custom rank icons??
-#define TEXTURES_RANKS [ \
- "", \
- "\A3\Ui_f\data\GUI\Cfg\Ranks\private_gs.paa", \
- "\A3\Ui_f\data\GUI\Cfg\Ranks\corporal_gs.paa", \
- "\A3\Ui_f\data\GUI\Cfg\Ranks\sergeant_gs.paa", \
- "\A3\Ui_f\data\GUI\Cfg\Ranks\lieutenant_gs.paa", \
- "\A3\Ui_f\data\GUI\Cfg\Ranks\captain_gs.paa", \
- "\A3\Ui_f\data\GUI\Cfg\Ranks\major_gs.paa", \
- "\A3\Ui_f\data\GUI\Cfg\Ranks\colonel_gs.paa" \
- ]
\ No newline at end of file
diff --git a/addons/optionsmenu/stringtable.xml b/addons/optionsmenu/stringtable.xml
index 3af9ca8b30..d1b6199413 100644
--- a/addons/optionsmenu/stringtable.xml
+++ b/addons/optionsmenu/stringtable.xml
@@ -348,12 +348,14 @@
Noticias ACE
Notícias do ACE
Wiadomości ACE
+ ACE Novinky
Show News on Main Menu
Mostrar noticias en el menú principal
Mostrar notícias no menu principal
Pokazuj wiadomości ACE w menu głównym
+ Zobrazit novinky v hlavním menu
\ No newline at end of file
diff --git a/addons/sitting/stringtable.xml b/addons/sitting/stringtable.xml
index 2287ba2ae8..cbf63d2117 100644
--- a/addons/sitting/stringtable.xml
+++ b/addons/sitting/stringtable.xml
@@ -5,26 +5,31 @@
Sit Down
Usiądź
Sentar
+ Sednout si
Stand Up
Wstań
Levantar
+ Vstát
Enable Sitting
Habilitar opção para sentar
Aktywuj siadanie
+ Povolit sezení
Sitting
Sentado
Siadanie
+ Sedící
This module allows you to disable the ability to sit on chairs and toilets.
Este módulo permite que você desabilite a capacidade de sentar-se em cadeiras e banheiros.
Moduł ten pozwala na włączenie lub wyłączenie możliwości siadania na krzesłach i toaletach.
+ Tento modul dovoluje zakázat možnost sedět na židlých a toaletách.
\ No newline at end of file
diff --git a/addons/spectator/stringtable.xml b/addons/spectator/stringtable.xml
index 368944c3d3..f271bfabf5 100644
--- a/addons/spectator/stringtable.xml
+++ b/addons/spectator/stringtable.xml
@@ -4,107 +4,77 @@
Spectator
Obserwator
-
-
-
+ Pozorovatel
Enable Spectator
Aktywuj obserwatora
-
-
-
+ Povolit pozorovatele
Begin spectating on player death?
Włącz obserwatora po śmierci gracza?
-
-
-
+ Přepnout do pozorovatele po hráčově smrti?
Player Side Only
Tylko strona gracza
-
-
-
+ Pouze strana hráče
Only spectate units belonging to player's side?
Pozwól obserwować jednostki będące tylko po stronie gracza?
-
-
-
+ Pozorovat pouze jednotky patřící k hráčově straně?
Spectate AI
Obserwacja AI
-
-
-
+ Pozorovat AI
Allow spectating of AI units?
Pozwól obserwować jednostki AI?
-
-
-
+ Umožnit pozorovat AI jednotky?
Track Units
Śledź jednostki
-
-
-
+ Sledovat jednotky
Track units' movements throughout mission?
Śledź ruch jednostek w trakcie misji?
-
-
-
+ Sledovat pohyby jednotek napříč misí?
Start Position
Pozycja startowa
-
-
-
+ Počáteční pozice
Use this module as a starting position for spectator camera?
Użyj pozycji modułu jako pozycje startową dla kamery obserwatora?
-
-
-
+ Použít tento modul jako počáteční pozici pro pozorovací kameru?
End Mission
Zakończ misję
-
-
-
+ Konec mise
End mission when all players dead (default BIS behaviour)?
Zakończ misję kiedy wszyscy gracze będą martwi (domyślne zachowanie BIS)?
-
-
-
+ Ukončit misi když umřou všichni hráči (výchozí BIS chování)?
View Distance
Zasięg widzenia
-
-
-
+ Dohlednost
OK
OK
-
-
-
+ OK
\ No newline at end of file
diff --git a/documentation/development/setting-up-the-development-environment.md b/documentation/development/setting-up-the-development-environment.md
index 5264760785..e02760f96d 100644
--- a/documentation/development/setting-up-the-development-environment.md
+++ b/documentation/development/setting-up-the-development-environment.md
@@ -23,7 +23,7 @@ This page describes how you can setup your development environment for ACE3, all
## 2. Why so complicated?
-If you have contributed to AGM you might be used to an easier build process, where there was even an .exe you could use for building. ACE3, however, makes use of CBA macros to simplify things and give the developer access to a better debug process, which requires a stricter build environment. Additionally, Mikero's tools are stricter and report more errors than AddonBuilder does. The structure of this development environment also allows for [file patching](#file-patching), which is very useful for debugging.
+If you have contributed to AGM you might be used to an easier build process, where there was even an .exe you could use for building. ACE3, however, makes use of CBA macros to simplify things and give the developer access to a better debug process, which requires a stricter build environment. Additionally, Mikero's tools are stricter and report more errors than AddonBuilder does. The structure of this development environment also allows for [file patching](#7-file-patching), which is very useful for debugging.
Not offering .exes for the Python scripts we use allows us to make easy changes without the hassle of compiling self-extracting exes all the time.