From ae13438ce2c840ccd39e071764b2d3d75561e3c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Dahlgren?= Date: Wed, 4 Nov 2020 19:57:04 +0100 Subject: [PATCH 01/16] Add Dahlgren to maintainers (#7985) --- AUTHORS.txt | 1 + docs/team.md | 1 + 2 files changed, 2 insertions(+) diff --git a/AUTHORS.txt b/AUTHORS.txt index e8d1b9affb..4781fdb531 100644 --- a/AUTHORS.txt +++ b/AUTHORS.txt @@ -9,6 +9,7 @@ Brandon (TCVM) bux578 commy2 +Dahlgren esteldunedain Felix Wiegand Garth "L-H" de Wet diff --git a/docs/team.md b/docs/team.md index 3846f7e1fe..345fe1b126 100644 --- a/docs/team.md +++ b/docs/team.md @@ -61,6 +61,7 @@ This lists all the maintainers responsible for project management and the overal - [mharis001](https://github.com/mharis001){:target="_blank"} - [Brandon (TCVM)](https://github.com/TheCandianVendingMachine){:target="_blank"} - [veteran29](https://github.com/veteran29){:target="_blank"} +- [Dahlgren](https://github.com/Dahlgren){:target="_blank"} ## Contributors From 0a27a275d1d41d3ca4e052eef0eb46d6f8e4e344 Mon Sep 17 00:00:00 2001 From: Kyle Mckay <5459452+kymckay@users.noreply.github.com> Date: Wed, 4 Nov 2020 23:22:51 +0000 Subject: [PATCH 02/16] Update my GitHub link (#7991) --- docs/team.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/team.md b/docs/team.md index 345fe1b126..5ea6fb7264 100644 --- a/docs/team.md +++ b/docs/team.md @@ -38,7 +38,7 @@ This lists all the maintainers responsible for project management and the overal - Coding, Performance, SME - [jokoho48](https://github.com/jokoho48){:target="_blank"} - Scripting, Model Editing / Import -- [SilentSpike](https://github.com/SilentSpike){:target="_blank"} +- [SilentSpike](https://github.com/kymckay){:target="_blank"} - Scripting, Config - [Ruthberg](https://github.com/ulteq){:target="_blank"} - Scripting, Config From bc7194942f7a09a32e21a7b3c9311e973ba3dbc0 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Thu, 5 Nov 2020 11:42:41 -0600 Subject: [PATCH 03/16] Update fnc_sortStatement_protection.sqf (#7989) --- addons/arsenal/functions/fnc_sortStatement_protection.sqf | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/addons/arsenal/functions/fnc_sortStatement_protection.sqf b/addons/arsenal/functions/fnc_sortStatement_protection.sqf index 4ab0509e42..463c75e03d 100644 --- a/addons/arsenal/functions/fnc_sortStatement_protection.sqf +++ b/addons/arsenal/functions/fnc_sortStatement_protection.sqf @@ -14,7 +14,8 @@ * Public: No */ -params ["_itemCfg", "_ballisticCo", "_explosiveCo"]; +params ["_itemInfo", "_ballisticCo", "_explosiveCo"]; +_itemInfo params ["_itemCfg"]; (([[_itemCfg], ["passthrough", "armor"]] call BIS_fnc_configExtremes) select 1) params [["_passthroughMax", 0], ["_armorMax", 0]]; From 712a27788fbdafb45a1308dee4eff0463f1fc2f6 Mon Sep 17 00:00:00 2001 From: Elgin675 Date: Sat, 7 Nov 2020 16:35:40 +0100 Subject: [PATCH 04/16] Translations - Update / Fix French Translations (Medical Treatment) (#7988) * Translations - Fix French "TreatmentTime" keys. * Translations - Add French "TreatmentTime" keys. * Translations - Fix some french keys (medical_treatment). * Translation - Add french "Treatment_WoundStitchTime" and "AllowBodyBagUnconscious "keys * Translations - Fix french "Medical_Treatment_AllowSelfStitch_DisplayName" key * Fix french "Medical_Treatment_MedicIV_Description" key * Fix french "Medical_Treatment_AllowSelfIV_DisplayName" key --- addons/medical_treatment/stringtable.xml | 46 ++++++++++++++---------- 1 file changed, 27 insertions(+), 19 deletions(-) diff --git a/addons/medical_treatment/stringtable.xml b/addons/medical_treatment/stringtable.xml index 1c59c6ba81..8af257fa42 100644 --- a/addons/medical_treatment/stringtable.xml +++ b/addons/medical_treatment/stringtable.xml @@ -240,48 +240,50 @@ Autoinjector Treatment Time + Durée d'interaction - Auto-injecteurs Time, in seconds, required to administer medication using an autoinjector. + Définit le temps nécessaire à l'administration d'une substance auto-injectable (en secondes). Tourniquet Treatment Time - Temps de traitement du tourniquet + Durée d'interaction - Garrots Tourniquet-Behandlungszeit Time, in seconds, required to apply/remove a tourniquet. - Temps en secondes nécessaire pour appliquer un garrot. + Définit le temps nécessaire à l'application ou au retrait d'un garrot (en secondes). Zeit in Sekunden, die benötigt wird, um ein Tourniquet anzuwenden. IV Bag Treatment Time - Temps de traitement du sac IV + Durée d'interaction - IVs IV Beutelbehandlungszeit Time, in seconds, required to administer an IV bag. - Temps en secondes nécessaire pour appliquer un sac IV. + Définit le temps nécessaire à la pose d'une perfusion IV (en secondes). Zeit in Sekunden, die benötigt wird, um einen Infusionsbeutel aufzutragen. Splint Treatment Time - Temps de traitement de l'attelle + Durée d'interaction - Attelles Schienenbehandlungszeit Time, in seconds, required to apply a splint. - Temps en secondes nécessaire pour appliquer une attelle. + Définit le temps nécessaire à l'application d'une attelle (en secondes). Zeit in Sekunden, die zum Anbringen einer Schiene benötigt wird. Body Bag Use Time - Temps d'utilisation du sac mortuaire + Durée d'interaction - Housses mortuaires Anwendungszeit für Leichensack Time, in seconds, required to put a patient in a body bag. - Temps en secondes qu'il faut pour appliquer un sac mortuaire. + Définit le temps nécessaire à la mise en housse d'un corps (en secondes). Zeit in Sekunden, die benötigt wird, um einen Leichensack aufzutragen. @@ -303,7 +305,7 @@ Training level required to use epinephrine. アドレナリンの使用に訓練レベルを必要とさせます。 - Définit quelle qualification médicale est requise pour pouvoir utiliser l'épinéphrine. + Définit la qualification médicale requise pour utiliser l'épinéphrine. Уровень подготовки, необходимый для использования Адреналина. É necessária uma qualificação médica para usar epinefrina. 要受過何種程度的醫療訓練才可以使用腎上腺素 @@ -332,7 +334,7 @@ Controls where epinephrine can be used. アドレナリンが使える場所を決定します。 - Définit où l'épinéphrine peut être utilisée. + Définit les lieux où l'usage d'épinéphrine est autorisé. Контролирует, где можно использовать Адреналин. Controla onde Epinefrina pode ser utilizada. 控制何處能使用腎上腺素 @@ -362,7 +364,7 @@ Training level required to use a PAK. 応急処置キットの使用に訓練レベルを必要とさせます。 - Définit quelle qualification médicale est requise pour pouvoir utiliser la trousse sanitaire. + Définit la qualification médicale requise pour utiliser la trousse sanitaire. Уровень подготовки, необходимый для использования Аптечки. É necessária uma qualificação médica para usar KPS 要受過何種程度的醫療訓練才可以使用個人急救包 @@ -392,7 +394,7 @@ Controls where a PAK can be used. 応急処置キットが使える場所を決定します。 - Définit où la trousse sanitaire peut être utilisée. + Définit les lieux où l'usage de la trousse sanitaire est autorisé. Контролирует, где можно использовать Аптечку. Controla onde o KPS pode ser utilizado. 控制何處能使用個人急救包 @@ -494,7 +496,7 @@ Training level required to use a surgical kit. 縫合キットの使用に訓練レベルを必要とさせます。 - Définit quelle qualification médicale est requise pour pouvoir utiliser une trousse chirurgicale. + Définit la qualification médicale requise pour utiliser la trousse chirurgicale. Уровень медицинской подготовки, необходимый для использования Хирургического набора. É necessária uma qualificação médica para usar Kit Cirúrgico 要受過多少程度的醫療訓練才能使用手術包。 @@ -520,7 +522,7 @@ Controls where a surgical kit can be used. 縫合キットが使える場所を決定します。 - Définit où la trousse chirurgicale peut être utilisée. + Définit les lieux où l'usage de la trousse chirurgicale est autorisé. Контролирует, где можно использовать Хирургический набор Controle onde o Kit Cirúrgico pode ser utilizado. 控制何處能使用手術包 @@ -556,7 +558,7 @@ Self Stitching - Suturer soi-même + Réaliser des sutures sur soi-même Auto-Cirurgia 自己縫合 自我縫合 @@ -580,16 +582,18 @@ Wound Stitch Time + Durée d'interaction - Sutures Time, in seconds, required to stitch a single wound. + Définit le temps nécessaire à la suture d'une plaie (en secondes). Self IV Transfusion Eigennutzung von Bluttransfusionen Внутривенное переливание на себе 自己 IV 輸血 - Autotransfusion d'IV + Pose d'IV sur soi-même Autotransfusão de IV 自我注射點滴 Samoaplikace IV transfuze @@ -601,7 +605,7 @@ Erlaube Bluttransfusionen an sich selbst zu benutzen Позволяет использовать внутривенные переливания на себе 自らに対して IV 輸血を可能にします。 - Permet de poser des IV sur soi-même. + Active la possibilité de s'auto-poser des IVs. Permite utilizar bolsas de IV para transfusão em si mesmo 啟用是否能對自己注射點滴 Umožňuje aplikovat IV transfuze na sama sebe. @@ -610,15 +614,17 @@ Allow Unconscious Body Bag + Housse mortuaire - Autoriser patients inconscients Enables placing an unconscious patient in a body bag. + Active la possibilité de placer des patients inconscients dans les housses mortuaires.\nAttention : le cas échéant cela provoquera la mort du patient. Allow IV Transfusion Erlaube Bluttransfusionen Zezwalaj na przetaczanie płynów IV - Pose de perfusion autorisée pour + Pose de perfusions autorisée pour 允許操作點滴 IV 輸血の制限 Povolit IV transfuzi @@ -628,7 +634,7 @@ Training level required to transfuse IVs. 'Fähigkeiten-Level', das benötigt wird, um Blut zu transfundieren. Poziom wyszkolenia potrzebny aby móc przetaczać płyny IV. - Définit quelle qualification médicale est requise pour pouvoir poser des perfusions intraveineuses. + Définit la qualification médicale requise pour poser des perfusions intraveineuses. 要有何種醫療水準才可注射點滴。 IV 輸血を行うのに訓練済レベルを要求とします。 Úroveň výcviku nutná pro IV transfuzi. @@ -844,9 +850,11 @@ CPR Treatment Time + Durée d'interaction - RCP Time, in seconds, required to perform CPR on a patient. + Définit le temps nécessaire à la mise en œuvre d'une RCP (en secondes). Holster Required From 95d4dc811bc4ec7c5abb9cb02d13fd6e5ee59568 Mon Sep 17 00:00:00 2001 From: Elgin675 Date: Sat, 7 Nov 2020 16:36:12 +0100 Subject: [PATCH 05/16] Translations - Update French Translations (Arsenal, Markers and Medical GUI) (#7987) * Translation - Add french "Arsenal_sortByProtection" keys * Translation - Add french "Markers_Timestamp" keys * Translation - Add french "Medical_GUI_InteractionMenuShowTriage" keys --- addons/arsenal/stringtable.xml | 2 ++ addons/markers/stringtable.xml | 14 ++++++++++++++ addons/medical_gui/stringtable.xml | 2 ++ 3 files changed, 18 insertions(+) diff --git a/addons/arsenal/stringtable.xml b/addons/arsenal/stringtable.xml index 2585abc530..ebb9d7a5c8 100644 --- a/addons/arsenal/stringtable.xml +++ b/addons/arsenal/stringtable.xml @@ -418,9 +418,11 @@ Sort by ballistic protection + Trier par protection balistique Sort by explosive protection + Trier par résistance aux explosifs Share or stop sharing the selected loadout diff --git a/addons/markers/stringtable.xml b/addons/markers/stringtable.xml index 1fb27d8a1d..3b0fed2a04 100644 --- a/addons/markers/stringtable.xml +++ b/addons/markers/stringtable.xml @@ -152,45 +152,59 @@ Allow Timestamps + Permettre l'horodatage Whether to allow timestamps to be automatically applied to markers + Active une interface permettant d'apposer un horodatage sur les marqueurs. Add Timestamp: + Ajouter l'horodatage Watch Required + Une montre est requise. Timestamp Format + Horodatage - Format Changes the timestamp format + Modifie le format de l'horodatage. "HH" - Hour + "HH" - Heures "MM" - Minute + "MM" - Minutes "SS" - Seconds + "SS" - Secondes "MM" - Milliseconds + "MS" - Millisecondes Timestamp Hour Format + Horodatage - Système horaire 24-Hour Clock + Format 24 heures 12-Hour Clock + Format 12 heures Changes timestamp to use either 24-hour or 12-hour clock format + Permet de choisir le système d'horodatage souhaité, au format 12 ou 24 heures. diff --git a/addons/medical_gui/stringtable.xml b/addons/medical_gui/stringtable.xml index a081b31695..709b03fc25 100644 --- a/addons/medical_gui/stringtable.xml +++ b/addons/medical_gui/stringtable.xml @@ -191,9 +191,11 @@ Show Triage Level in Interaction Menu + Couleur de triage dans le menu d'interaction Shows the patient's triage level by changing the color of the main and medical menu actions. + Modifie la couleur du menu d'interactions et du sous-menu médical en fonction de la fiche de triage du patient. Medical From 5d1aa28419a409eaf9f7a13ecac93f18a94b2b74 Mon Sep 17 00:00:00 2001 From: Elgin675 Date: Sun, 8 Nov 2020 00:08:01 +0100 Subject: [PATCH 06/16] Translations - Add French "Medical_Treatment_bodybagWhileStillAlive" key (#7993) --- addons/medical_treatment/stringtable.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/addons/medical_treatment/stringtable.xml b/addons/medical_treatment/stringtable.xml index 8af257fa42..514a4795e6 100644 --- a/addons/medical_treatment/stringtable.xml +++ b/addons/medical_treatment/stringtable.xml @@ -4306,6 +4306,7 @@ The body twitched and may not be dead! + L'unité a bougé et n'est peut-être pas morte ! From 119450f4e9269190d8706305c1efd5b6d4f94926 Mon Sep 17 00:00:00 2001 From: BaerMitUmlaut Date: Sun, 8 Nov 2020 15:54:14 +0100 Subject: [PATCH 07/16] DAGR / Interaction Menu / Repair - Fix overwriting globals (#7990) * Remove global DAGR_NEXT variable * Remove global ERR variable * Fix overwriting global this variable * Fix overwriting global total and hitpoint variables * fix condition Co-authored-by: PabstMirror --- addons/dagr/Dialog.hpp | 1 - addons/dagr/functions/fnc_menuInit.sqf | 1 - .../functions/fnc_disarmDropItems.sqf | 1 - addons/interact_menu/functions/fnc_keyUp.sqf | 10 ++++++-- addons/interact_menu/functions/fnc_render.sqf | 8 ++++++- .../fnc_userActions_getHouseActions.sqf | 23 +++++++++++++++++-- .../functions/fnc_normalizeHitPoints.sqf | 11 +++++++-- 7 files changed, 45 insertions(+), 10 deletions(-) diff --git a/addons/dagr/Dialog.hpp b/addons/dagr/Dialog.hpp index 52e3a8f683..51b6c988b6 100644 --- a/addons/dagr/Dialog.hpp +++ b/addons/dagr/Dialog.hpp @@ -201,7 +201,6 @@ class DAGR_Menu { class DAGR_NEXT_Button : DAGR_Button { idc = 266868; - action = QUOTE(DAGR_NEXT = true); x = 0.60; y = 0.65; }; diff --git a/addons/dagr/functions/fnc_menuInit.sqf b/addons/dagr/functions/fnc_menuInit.sqf index c535ac1349..498d6614d4 100644 --- a/addons/dagr/functions/fnc_menuInit.sqf +++ b/addons/dagr/functions/fnc_menuInit.sqf @@ -596,7 +596,6 @@ GVAR(menuRun) = true; GVAR(F1) = false; GVAR(MENU_B) = false; GVAR(SEL) = false; - DAGR_NEXT = false; GVAR(RIGHT) = false; GVAR(LEFT) = false; GVAR(UP) = false; diff --git a/addons/disarming/functions/fnc_disarmDropItems.sqf b/addons/disarming/functions/fnc_disarmDropItems.sqf index 4c8fb3bf2d..f46c06b280 100644 --- a/addons/disarming/functions/fnc_disarmDropItems.sqf +++ b/addons/disarming/functions/fnc_disarmDropItems.sqf @@ -92,7 +92,6 @@ if (({((_x select 0) in _listOfItemsToRemove) && {(getNumber (configFile >> "Cfg }; //Verify holder has mags unit had if (!([_targetMagazinesStart, _targetMagazinesEnd, _holderMagazinesStart, _holderMagazinesEnd] call FUNC(verifyMagazinesMoved))) then { - ERR = [_targetMagazinesStart, _targetMagazinesEnd, _holderMagazinesStart, _holderMagazinesEnd]; _holder setVariable [QGVAR(holderInUse), false]; [_caller, _target, "Debug: Crate Magazines not in holder"] call FUNC(eventTargetFinish); }; diff --git a/addons/interact_menu/functions/fnc_keyUp.sqf b/addons/interact_menu/functions/fnc_keyUp.sqf index 2504ca2b78..9ed14d66d3 100644 --- a/addons/interact_menu/functions/fnc_keyUp.sqf +++ b/addons/interact_menu/functions/fnc_keyUp.sqf @@ -25,8 +25,6 @@ if (uiNamespace getVariable [QGVAR(cursorMenuOpened),false]) then { }; if (GVAR(actionSelected)) then { - this = GVAR(selectedTarget); - private _player = ACE_Player; private _target = GVAR(selectedTarget); @@ -38,6 +36,11 @@ if (GVAR(actionSelected)) then { // Check the action conditions private _actionData = GVAR(selectedAction) select 0; + + // Use global variable this for action condition and action code + private _savedThis = this; + this = GVAR(selectedTarget); + if ([_target, _player, _actionData select 6] call (_actionData select 4)) then { // Call the statement [_target, _player, _actionData select 6] call (_actionData select 3); @@ -45,6 +48,9 @@ if (GVAR(actionSelected)) then { // Clear the conditions caches again if the action was performed [QGVAR(clearConditionCaches), []] call CBA_fnc_localEvent; }; + + // Restore this variable + this = _savedThis; }; ["ace_interactMenuClosed", [GVAR(openedMenuType)]] call CBA_fnc_localEvent; diff --git a/addons/interact_menu/functions/fnc_render.sqf b/addons/interact_menu/functions/fnc_render.sqf index 687498e7cd..36e86cd9b3 100644 --- a/addons/interact_menu/functions/fnc_render.sqf +++ b/addons/interact_menu/functions/fnc_render.sqf @@ -91,13 +91,16 @@ if (GVAR(openedMenuType) >= 0) then { }; }; if (_runOnHover) then { - this = GVAR(selectedTarget); private _player = ACE_Player; private _target = GVAR(selectedTarget); // Clear the conditions caches [QGVAR(clearConditionCaches), []] call CBA_fnc_localEvent; + // Use global variable this for action condition and action code + private _savedThis = this; + this = GVAR(selectedTarget); + // Check the action conditions private _actionData = GVAR(selectedAction) select 0; if ([_target, _player, _actionData select 6] call (_actionData select 4)) then { @@ -107,6 +110,9 @@ if (GVAR(openedMenuType) >= 0) then { // Clear the conditions caches again if the action was performed [QGVAR(clearConditionCaches), []] call CBA_fnc_localEvent; }; + + // Restore this variable + this = _savedThis; }; }; }; diff --git a/addons/interact_menu/functions/fnc_userActions_getHouseActions.sqf b/addons/interact_menu/functions/fnc_userActions_getHouseActions.sqf index 46667857f5..0d02b6a6c1 100644 --- a/addons/interact_menu/functions/fnc_userActions_getHouseActions.sqf +++ b/addons/interact_menu/functions/fnc_userActions_getHouseActions.sqf @@ -41,15 +41,34 @@ private _fnc_getMemPointOffset = { private _fnc_userAction_Statement = { params ["_target", "_player", "_variable"]; _variable params ["_actionStatement", "_actionCondition"]; + + // Use global variable this for action condition and action code + private _savedThis = this; this = _target getVariable [QGVAR(building), objNull]; + call _actionStatement; + + // Restore this variable + this = _savedThis; }; + private _fnc_userAction_Condition = { params ["_target", "_player", "_variable"]; _variable params ["_actionStatement", "_actionCondition"]; + + private _building = _target getVariable [QGVAR(building), objNull]; + if (isNull _building) exitWith {false}; + + // Use global variable this for action condition and action code + private _savedThis = this; this = _target getVariable [QGVAR(building), objNull]; - if (isNull this) exitWith {false}; - call _actionCondition; + + private _result = call _actionCondition; + + // Restore this variable + this = _savedThis; + + _result }; private _configPath = configFile >> "CfgVehicles" >> _typeOfBuilding >> "UserActions"; diff --git a/addons/repair/functions/fnc_normalizeHitPoints.sqf b/addons/repair/functions/fnc_normalizeHitPoints.sqf index fb07147a6a..5a33151875 100644 --- a/addons/repair/functions/fnc_normalizeHitPoints.sqf +++ b/addons/repair/functions/fnc_normalizeHitPoints.sqf @@ -46,9 +46,11 @@ TRACE_2("",_realHitPoints,_dependentHitPoints); if (_dependentHitPoints isEqualTo []) exitWith {}; -// Define global variables -Total = damage _vehicle; +// Define global variables and save original values +private _savedGlobals = [["total", total]]; +total = damage _vehicle; { + _savedGlobals pushBack [_x, missionNamespace getVariable _x]; missionNamespace setVariable [_x, _vehicle getHitPointDamage _x]; } forEach _realHitPoints; @@ -58,3 +60,8 @@ Total = damage _vehicle; TRACE_2("setting depend hitpoint", _x, _damage); _vehicle setHitPointDamage [_x, _damage]; } forEach _dependentHitPoints; + +// Restore global variables +{ + missionNamespace setVariable _x; +} forEach _savedGlobals; From 0e642758d6d3b93ff0ee4f5b97a374165dc2e25b Mon Sep 17 00:00:00 2001 From: BaerMitUmlaut Date: Sun, 8 Nov 2020 23:24:44 +0100 Subject: [PATCH 08/16] Medical Statemachine - Add setting to disallow bleedout in cardiac arrest (#7547) * Add setting to disable bleedout in cardiac arrest * Improve setting name and description --- addons/medical_statemachine/Statemachine.hpp | 1 + addons/medical_statemachine/initSettings.sqf | 9 +++++++++ addons/medical_statemachine/stringtable.xml | 11 ++++++++++- 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/addons/medical_statemachine/Statemachine.hpp b/addons/medical_statemachine/Statemachine.hpp index 17a4baaf07..2aaba197e2 100644 --- a/addons/medical_statemachine/Statemachine.hpp +++ b/addons/medical_statemachine/Statemachine.hpp @@ -103,6 +103,7 @@ class ACE_Medical_StateMachine { }; class Bleedout { targetState = "Dead"; + condition = QGVAR(cardiacArrestBleedoutEnabled); events[] = {QEGVAR(medical,Bleedout)}; }; }; diff --git a/addons/medical_statemachine/initSettings.sqf b/addons/medical_statemachine/initSettings.sqf index df66002ff9..75d93f19b2 100644 --- a/addons/medical_statemachine/initSettings.sqf +++ b/addons/medical_statemachine/initSettings.sqf @@ -41,3 +41,12 @@ [1, 3600, 300], true ] call CBA_settings_fnc_init; + +[ + QGVAR(cardiacArrestBleedoutEnabled), + "CHECKBOX", + [LSTRING(CardiacArrestBleedout_DisplayName), LSTRING(CardiacArrestBleedout_Description)], + [ELSTRING(medical,Category), LSTRING(SubCategory)], + true, + true +] call CBA_settings_fnc_init; diff --git a/addons/medical_statemachine/stringtable.xml b/addons/medical_statemachine/stringtable.xml index 6952f16dd5..58efa9bb1d 100644 --- a/addons/medical_statemachine/stringtable.xml +++ b/addons/medical_statemachine/stringtable.xml @@ -98,7 +98,7 @@ Cardiac Arrest Time - Zeit bis zum Herzstillstand + Überlebenszeit im Herzstillstand 心停止時間 Длительность остановки сердца Durée de l'arrêt cardiaque @@ -119,6 +119,7 @@ Controlla quanto tempo ci vuole per morire di arresto cardiaco. Nastavuje po jak dlouhé době pacient zemře kvůli srdeční zástavě. Definiuje czas potrzebny na śmierć z powodu zatrzymania akcji serca. + Bestimmt die Dauer bis zum Tod durch Herzstillstand. Ne kadar süre de kalbi durarak ölmesini belirleyin. @@ -134,5 +135,13 @@ Zatrzymanie Akcji Serca Kalbi Durdu + + Bleedout During Cardiac Arrest + Ausbluten im Herzstillstand + + + Controls whether a person can die in cardiac arrest by blood loss before the cardiac arrest time runs out. + Legt fest, ob man während des Herzstillstands durch Blutverlust sterben kann, auch wenn die Überlebenszeit im Herzstillstand noch nicht ausgelaufen ist. + From 718d28226331d03a5917ea9080cc942f879fe419 Mon Sep 17 00:00:00 2001 From: Laid3acK Date: Sun, 8 Nov 2020 23:26:30 +0100 Subject: [PATCH 09/16] Ballistics - Update the B 556x45 dual (#7982) * B_556x45_dual * B_556x45_dual --- addons/ballistics/CfgAmmo.hpp | 8 ++++++++ addons/scopes/CfgWeapons.hpp | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/addons/ballistics/CfgAmmo.hpp b/addons/ballistics/CfgAmmo.hpp index 20e9af803b..8ad1b4729a 100644 --- a/addons/ballistics/CfgAmmo.hpp +++ b/addons/ballistics/CfgAmmo.hpp @@ -130,6 +130,14 @@ class CfgAmmo { ACE_muzzleVelocities[]={723, 764, 796, 825, 843, 866, 878, 892, 906, 915, 922, 900}; ACE_barrelLengths[]={210.82, 238.76, 269.24, 299.72, 330.2, 360.68, 391.16, 419.1, 449.58, 480.06, 508.0, 609.6}; }; + + class B_556x45_dual: B_556x45_Ball { + airFriction = -0.00055; + ACE_ammoTempMuzzleVelocityShifts[] = {-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_muzzleVelocities[] = {268}; // at 21°C, at 15°C 267 m/s according with the 20Rnd_556x45_UW_mag initSpeed + ACE_barrelLengths[] = {457.2}; // according with the SDAR barrel length: https://en.wikipedia.org/wiki/Kel-Tec_RFB + }; + class ACE_556x45_Ball_Mk262 : B_556x45_Ball { airFriction=-0.00111805; ACE_caliber=5.69; diff --git a/addons/scopes/CfgWeapons.hpp b/addons/scopes/CfgWeapons.hpp index b521b541eb..653742180f 100644 --- a/addons/scopes/CfgWeapons.hpp +++ b/addons/scopes/CfgWeapons.hpp @@ -340,7 +340,7 @@ class CfgWeapons { class arifle_SDAR_F: SDAR_base_F { ACE_RailHeightAboveBore = 0; - ACE_IronSightBaseAngle = -0.037242; + ACE_IronSightBaseAngle = -0.042972; }; class SMG_01_Base: Rifle_Short_Base_F { From d27122fa16c66f3166656785c0f56324953d513b Mon Sep 17 00:00:00 2001 From: BaerMitUmlaut Date: Sun, 8 Nov 2020 23:27:10 +0100 Subject: [PATCH 10/16] Medical Status - Fix unconscious AI aiming at enemies (#7977) * Fix unconscious AI aiming at enemies * Improve handling when locality changes Co-authored-by: PabstMirror Co-authored-by: PabstMirror --- .../functions/fnc_setUnconsciousState.sqf | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/addons/medical_status/functions/fnc_setUnconsciousState.sqf b/addons/medical_status/functions/fnc_setUnconsciousState.sqf index 715041d701..6508e2fb1c 100644 --- a/addons/medical_status/functions/fnc_setUnconsciousState.sqf +++ b/addons/medical_status/functions/fnc_setUnconsciousState.sqf @@ -52,9 +52,20 @@ if (_active) then { // Do "Unlock controls" user action, co-pilot will then have to do the "Take Controls" actions _unit action ["UnlockVehicleControl", vehicle _unit]; }; + + // Disable AI aiming + if (!isPlayer _unit && {_unit checkAIFeature "WEAPONAIM"}) then { + _unit disableAI "WEAPONAIM"; + _unit setVariable [QGVAR(reenableWeaponAim), true, true]; + }; } else { // Unit has woken up, no longer need to track this _unit setVariable [QEGVAR(medical,lastWakeUpCheck), nil]; + + // Reenable AI aiming + if (_unit getVariable [QGVAR(reenableWeaponAim), false]) then { + _unit enableAI "WEAPONAIM"; + }; }; // This event doesn't correspond to unconscious in statemachine From 0c84cdd3755eaae80e337e6f981c0c16851ea9ab Mon Sep 17 00:00:00 2001 From: BaerMitUmlaut Date: Sun, 8 Nov 2020 23:32:02 +0100 Subject: [PATCH 11/16] Fix unconscious medics not being healed by other AI medics (#7995) --- addons/medical_ai/functions/fnc_canRequestMedic.sqf | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/addons/medical_ai/functions/fnc_canRequestMedic.sqf b/addons/medical_ai/functions/fnc_canRequestMedic.sqf index c2a29c1c9f..135c345750 100644 --- a/addons/medical_ai/functions/fnc_canRequestMedic.sqf +++ b/addons/medical_ai/functions/fnc_canRequestMedic.sqf @@ -19,7 +19,8 @@ // we ignore this here. We need to "notice" the medic that he should // treat other units, or else he won't do anything on his own. -if ([_this] call EFUNC(medical_treatment,isMedic) || {vehicle _this != _this}) exitWith {false}; +private _isMedic = [_this] call EFUNC(medical_treatment,isMedic); +if (_isMedic && {!IS_UNCONSCIOUS(_this)} || {vehicle _this != _this}) exitWith {false}; // Search for a medic, prioritize unitReady private _medic = objNull; From 1efa25fe2b1594434acf66c3aa38240144c87fe9 Mon Sep 17 00:00:00 2001 From: Dedmen Miller Date: Mon, 9 Nov 2020 00:26:02 +0100 Subject: [PATCH 12/16] Explosives - Add `clackerAdded` event (#7994) * Add clackerPlaced event * Update docs/wiki/framework/events-framework.md Co-authored-by: PabstMirror --- addons/explosives/functions/fnc_addClacker.sqf | 2 ++ docs/wiki/framework/events-framework.md | 1 + 2 files changed, 3 insertions(+) diff --git a/addons/explosives/functions/fnc_addClacker.sqf b/addons/explosives/functions/fnc_addClacker.sqf index 684161d7ee..6b48980d54 100644 --- a/addons/explosives/functions/fnc_addClacker.sqf +++ b/addons/explosives/functions/fnc_addClacker.sqf @@ -46,3 +46,5 @@ _unit setVariable [QGVAR(Clackers), _clacker, true]; //display clacker code message: [format [localize LSTRING(DetonateCode), GVAR(PlacedCount)]] call EFUNC(common,displayTextStructured); + +[QGVAR(clackerAdded), [_unit, _explosive, GVAR(PlacedCount)]] call CBA_fnc_localEvent; diff --git a/docs/wiki/framework/events-framework.md b/docs/wiki/framework/events-framework.md index 30feada6cf..d1cc6d01d0 100644 --- a/docs/wiki/framework/events-framework.md +++ b/docs/wiki/framework/events-framework.md @@ -82,6 +82,7 @@ MenuType: 0 = Interaction, 1 = Self Interaction | Event Key | Parameters | Locality | Type | Description | |----------|---------|---------|---------|---------|---------| |`ace_tripflareTriggered` | [_flareObject, [_posX, _posY, _posZ]] | Global | Listen | Tripflare triggered +|`ace_explosives_clackerAdded` | [_unit, _explosive, _id] | Local | Listen | Clacker added to explosive ### 2.9 Logistics Wirecutter (`ace_logistics`) From 92cd36776562d25bbf3bb214cd4b50d22b27cf32 Mon Sep 17 00:00:00 2001 From: Elgin675 Date: Mon, 9 Nov 2020 00:46:13 +0100 Subject: [PATCH 13/16] Translations - Add French "Medical_Statemachine_CardiacArrestBleedout" keys (#7997) --- addons/medical_statemachine/stringtable.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/addons/medical_statemachine/stringtable.xml b/addons/medical_statemachine/stringtable.xml index 58efa9bb1d..31a91d1413 100644 --- a/addons/medical_statemachine/stringtable.xml +++ b/addons/medical_statemachine/stringtable.xml @@ -138,10 +138,12 @@ Bleedout During Cardiac Arrest Ausbluten im Herzstillstand + Saignement durant l'arrêt cardiaque Controls whether a person can die in cardiac arrest by blood loss before the cardiac arrest time runs out. Legt fest, ob man während des Herzstillstands durch Blutverlust sterben kann, auch wenn die Überlebenszeit im Herzstillstand noch nicht ausgelaufen ist. + Définit si un joueur en arrêt cardiaque peut mourir par exsanguination, avant que la durée de l'arrêt cardiaque définie ci-dessus ne soit écoulée. From a621d2eb72e82a2246f339da19b6317600a55a95 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Tue, 10 Nov 2020 10:06:45 -0600 Subject: [PATCH 14/16] Medical Statemachine - Ensure bleedout condition string is code (#7998) --- addons/medical_statemachine/Statemachine.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/medical_statemachine/Statemachine.hpp b/addons/medical_statemachine/Statemachine.hpp index 2aaba197e2..eecb6a236c 100644 --- a/addons/medical_statemachine/Statemachine.hpp +++ b/addons/medical_statemachine/Statemachine.hpp @@ -103,7 +103,7 @@ class ACE_Medical_StateMachine { }; class Bleedout { targetState = "Dead"; - condition = QGVAR(cardiacArrestBleedoutEnabled); + condition = QUOTE((GVAR(cardiacArrestBleedoutEnabled))); // wrap to ensure cba uses this as code and not a direct variable events[] = {QEGVAR(medical,Bleedout)}; }; }; From 629942885e111d99f054ec3e247b8454876b58b0 Mon Sep 17 00:00:00 2001 From: BaerMitUmlaut Date: Tue, 10 Nov 2020 17:07:42 +0100 Subject: [PATCH 15/16] Fix players occasionally being invincible after respawning (#7999) --- .../medical_statemachine/functions/fnc_resetStateDefault.sqf | 3 --- 1 file changed, 3 deletions(-) diff --git a/addons/medical_statemachine/functions/fnc_resetStateDefault.sqf b/addons/medical_statemachine/functions/fnc_resetStateDefault.sqf index 4cffd47076..b29adcb9f4 100644 --- a/addons/medical_statemachine/functions/fnc_resetStateDefault.sqf +++ b/addons/medical_statemachine/functions/fnc_resetStateDefault.sqf @@ -17,7 +17,4 @@ params ["_unit"]; -// Statemachine only handles local units -if !(local _unit) exitWith {}; - [_unit, EGVAR(medical,STATE_MACHINE), "Dead", "Default"] call CBA_statemachine_fnc_manualTransition; From ad75c7c9b82cee25ece78de93ab59fb2dffd9e82 Mon Sep 17 00:00:00 2001 From: BaerMitUmlaut Date: Sun, 15 Nov 2020 19:57:27 +0100 Subject: [PATCH 16/16] Common / Medical - Fix loading patients into turret only seats (#7980) * Fix loading patients into turret only seats * Fix cargo logic, adjust function for captives (#8000) Co-authored-by: PabstMirror --- .../functions/fnc_addLoadCaptiveActions.sqf | 2 +- .../captives/functions/fnc_canLoadCaptive.sqf | 2 +- .../captives/functions/fnc_doLoadCaptive.sqf | 2 +- .../common/functions/fnc_loadPersonLocal.sqf | 23 +++++++++++++++++-- .../functions/fnc_nearestVehiclesFreeSeat.sqf | 17 ++++++++++---- .../functions/fnc_unloadPersonLocal.sqf | 10 ++++++++ 6 files changed, 46 insertions(+), 10 deletions(-) diff --git a/addons/captives/functions/fnc_addLoadCaptiveActions.sqf b/addons/captives/functions/fnc_addLoadCaptiveActions.sqf index d1ad8f603d..279ca0924e 100644 --- a/addons/captives/functions/fnc_addLoadCaptiveActions.sqf +++ b/addons/captives/functions/fnc_addLoadCaptiveActions.sqf @@ -22,4 +22,4 @@ private _statement = { [_player, _target, _vehicle] call FUNC(doLoadCaptive); }; -[_target call EFUNC(common,nearestVehiclesFreeSeat), _statement, _target] call EFUNC(interact_menu,createVehiclesActions) +[[_target, nil, true] call EFUNC(common,nearestVehiclesFreeSeat), _statement, _target] call EFUNC(interact_menu,createVehiclesActions) diff --git a/addons/captives/functions/fnc_canLoadCaptive.sqf b/addons/captives/functions/fnc_canLoadCaptive.sqf index 2129b36f5a..b1757884b7 100644 --- a/addons/captives/functions/fnc_canLoadCaptive.sqf +++ b/addons/captives/functions/fnc_canLoadCaptive.sqf @@ -34,7 +34,7 @@ if (isNull _target || {(vehicle _target) != _target} || {!(_target getVariable [ if (isNull _vehicle) then { // Looking at a captive unit, get nearest vehicle with valid seat: - _vehicle = (_target call EFUNC(common,nearestVehiclesFreeSeat)) param [0, objNull]; + _vehicle = ([_target, nil, true] call EFUNC(common,nearestVehiclesFreeSeat)) param [0, objNull]; } else { // We have a vehicle picked, make sure it has empty seats: if (_vehicle emptyPositions "cargo" == 0 && {_vehicle emptyPositions "gunner" == 0}) then { diff --git a/addons/captives/functions/fnc_doLoadCaptive.sqf b/addons/captives/functions/fnc_doLoadCaptive.sqf index e4e3b5f45b..7740610b6a 100644 --- a/addons/captives/functions/fnc_doLoadCaptive.sqf +++ b/addons/captives/functions/fnc_doLoadCaptive.sqf @@ -31,7 +31,7 @@ if (isNull _target || {(vehicle _target) != _target} || {!(_target getVariable [ if (isNull _vehicle) then { // Looking at a captive unit, get nearest vehicle with valid seat: - _vehicle = (_target call EFUNC(common,nearestVehiclesFreeSeat)) param [0, objNull]; + _vehicle = ([_target, nil, true] call EFUNC(common,nearestVehiclesFreeSeat)) param [0, objNull]; } else { // We have a vehicle picked, make sure it has empty seats: if (_vehicle emptyPositions "cargo" == 0 && {_vehicle emptyPositions "gunner" == 0}) then { diff --git a/addons/common/functions/fnc_loadPersonLocal.sqf b/addons/common/functions/fnc_loadPersonLocal.sqf index 0426a94582..7135e9e302 100644 --- a/addons/common/functions/fnc_loadPersonLocal.sqf +++ b/addons/common/functions/fnc_loadPersonLocal.sqf @@ -21,11 +21,30 @@ params ["_unit", "_vehicle", ["_caller", objNull]]; TRACE_3("loadPersonLocal",_unit,_vehicle,_caller); private _slotsOpen = false; -if ((_vehicle emptyPositions "cargo" > 0) && {!(_unit getVariable ['ACE_isUnconscious', false])} || {(getNumber (configFile >> "CfgVehicles" >> (typeOf _vehicle) >> "ejectDeadCargo")) == 0}) then { +if ((_vehicle emptyPositions "cargo" > 0) && {!(_unit getVariable ['ACE_isUnconscious', false]) || {(getNumber (configFile >> "CfgVehicles" >> (typeOf _vehicle) >> "ejectDeadCargo")) == 0}}) then { _unit moveInCargo _vehicle; + TRACE_1("moveInCargo",_vehicle); _slotsOpen = true; } else { - if (_vehicle emptyPositions "gunner" > 0) then { + // Check if an empty turret is available + // This already excludes FFV seats, which count as cargo positions + private _turrets = fullCrew [_vehicle, "turret", true]; + private _index = _turrets findIf {isNull (_x#0)}; + if (_index >= 0) exitWith { + _unit moveInTurret [_vehicle, _turrets#_index#3]; + TRACE_2("moveInTurret",_vehicle,_turrets#_index#3); + _slotsOpen = true; + }; + + // Check if the commander seat is available + if (_vehicle emptyPositions "commander" > 0) exitWith { + _unit moveInCommander _vehicle; + TRACE_1("moveInCommander",_vehicle); + _slotsOpen = true; + }; + + // Lastly, check if the gunner seat is available + if (_vehicle emptyPositions "gunner" > 0) exitWith { _unit moveInGunner _vehicle; _slotsOpen = true; }; diff --git a/addons/common/functions/fnc_nearestVehiclesFreeSeat.sqf b/addons/common/functions/fnc_nearestVehiclesFreeSeat.sqf index aba75ff60f..83ed8ceb20 100644 --- a/addons/common/functions/fnc_nearestVehiclesFreeSeat.sqf +++ b/addons/common/functions/fnc_nearestVehiclesFreeSeat.sqf @@ -5,22 +5,29 @@ * * Arguments: * 0: Unit - * 1: Distance + * 1: Distance + * 2: Restriceted to cargo only * * Return Value: * Nearest vehicles with a free seat * * Example: - * [bob] call ace_common_fnc_nearestVehiclesFreeSeat + * [cursorObject] call ace_common_fnc_nearestVehiclesFreeSeat * * Public: Yes */ -params ["_unit", ["_distance", 10]]; +params ["_unit", ["_distance", 10], ["_cargoOnly", false]]; private _nearVehicles = nearestObjects [_unit, ["Car", "Air", "Tank", "Ship_F", "Pod_Heli_Transport_04_crewed_base_F"], _distance]; _nearVehicles select { // Filter cargo seats that will eject unconscious units (e.g. quad bike) - ((_x emptyPositions "cargo" > 0) && {!(_unit getVariable ['ACE_isUnconscious', false])} || {(getNumber (configFile >> "CfgVehicles" >> (typeOf _x) >> "ejectDeadCargo")) == 0}) - || {_x emptyPositions "gunner" > 0} + private _canSitInCargo = (!(_unit getVariable ['ACE_isUnconscious', false])) || {(getNumber (configFile >> "CfgVehicles" >> (typeOf _x) >> "ejectDeadCargo")) == 0}; + ((fullCrew [_x, "", true]) findIf { + _x params ["_body", "_role", "_cargoIndex"]; + (isNull _body) // seat empty + && {_role != "DRIVER"} // not driver seat + && {_canSitInCargo || {_cargoIndex == -1}} // won't be ejected (uncon) + && {(!_cargoOnly) || {_cargoIndex != -1}} // not restricted (captive) + }) > -1 } diff --git a/addons/common/functions/fnc_unloadPersonLocal.sqf b/addons/common/functions/fnc_unloadPersonLocal.sqf index d51f911eaf..dd4480c1f9 100644 --- a/addons/common/functions/fnc_unloadPersonLocal.sqf +++ b/addons/common/functions/fnc_unloadPersonLocal.sqf @@ -49,6 +49,16 @@ unassignVehicle _unit; TRACE_1("Ejecting", alive _unit); _unit action ["Eject", vehicle _unit]; +// Failsafe - sometimes eject alone doesn't work, but moveOut does +[{ + params ["_unit"]; + + if (vehicle _unit != _unit) then { + WARNING_1("UnloadPersonLocal [%1] did not eject normally",_unit); + moveOut _unit; + }; +}, [_unit], 1] call CBA_fnc_waitAndExecute; + [{ params ["_unit", "_emptyPos"]; (alive _unit) && {(vehicle _unit) != _unit}