From af2b47de1599870b47c4dc4ec7c296ef8faae1ae Mon Sep 17 00:00:00 2001 From: mazinskihenry <33608576+mazinskihenry@users.noreply.github.com> Date: Mon, 16 Dec 2024 13:40:42 -0800 Subject: [PATCH 1/6] Airway/Breathing/Chemical - Add option for intoxication status visibility (#657) **When merged this pull request will:** - Adds CBA setting for making intoxication status visible - Poisoning now shows up in Check Airway function - Check Breathing function updated to reflect intoxication ### IMPORTANT - [Development Guidelines](https://ace3.acemod.org/wiki/development/) are read, understood and applied. - Title of this PR uses our standard template `Component - Add|Fix|Improve|Change|Make|Remove {changes}`. --------- Co-authored-by: MiszczuZPolski <71414303+MiszczuZPolski@users.noreply.github.com> --- addons/airway/ACE_Medical_Treatment_Actions.hpp | 2 +- addons/airway/functions/fnc_checkAirway.sqf | 9 +++++++++ addons/airway/stringtable.xml | 6 ++++++ addons/breathing/functions/fnc_checkBreathing.sqf | 3 ++- addons/chemical/XEH_preInit.sqf | 10 ++++++++++ addons/chemical/functions/fnc_gui_updateBodyImage.sqf | 2 +- .../functions/fnc_gui_updateInjuryListGeneral.sqf | 3 ++- addons/chemical/stringtable.xml | 8 +++++++- 8 files changed, 38 insertions(+), 5 deletions(-) diff --git a/addons/airway/ACE_Medical_Treatment_Actions.hpp b/addons/airway/ACE_Medical_Treatment_Actions.hpp index a5750776a..922185fa2 100644 --- a/addons/airway/ACE_Medical_Treatment_Actions.hpp +++ b/addons/airway/ACE_Medical_Treatment_Actions.hpp @@ -140,7 +140,7 @@ class ACE_Medical_Treatment_Actions { allowedSelections[] = {"Head"}; allowSelfTreatment = 0; callbackSuccess = QFUNC(checkAirway); - condition = QUOTE(!([_patient] call ACEFUNC(common,isAwake)) && (missionNamespace getVariable [ARR_2(QQGVAR(enable),true)]) && !([_patient] call FUNC(checkMask))); + condition = QUOTE((missionNamespace getVariable [ARR_2(QQGVAR(enable),true)]) && !([_patient] call FUNC(checkMask))); animationPatientUnconscious = "AinjPpneMstpSnonWrflDnon_rolltoback"; animationPatientUnconsciousExcludeOn[] = {"ainjppnemstpsnonwrfldnon", "kat_recoveryposition"}; }; diff --git a/addons/airway/functions/fnc_checkAirway.sqf b/addons/airway/functions/fnc_checkAirway.sqf index ffa120a50..f74c24436 100644 --- a/addons/airway/functions/fnc_checkAirway.sqf +++ b/addons/airway/functions/fnc_checkAirway.sqf @@ -55,6 +55,15 @@ if (!(_patient getVariable [QGVAR(occluded), false]) && !(_patient getVariable [ _hintWidth = 10; }; +if (_patient getVariable [QEGVAR(chemical,airPoisoning), false]) exitWith { + _message = LLSTRING(AirwayStatus_Poison); + + [_message, _hintSize, _medic, _hintWidth] call ACEFUNC(common,displayTextStructured); + [_patient, "quick_view", LSTRING(checkAirway_log)] call EFUNC(circulation,removeLog); + [_patient, "quick_view", LSTRING(checkAirway_poisonLog)] call EFUNC(circulation,removeLog); + [_patient, "quick_view", LSTRING(checkAirway_poisonLog), [[_medic] call ACEFUNC(common,getName)]] call ACEFUNC(medical_treatment,addToLog); +}; + [_message, _hintSize, _medic, _hintWidth] call ACEFUNC(common,displayTextStructured); [_patient, "quick_view", LSTRING(checkAirway_log)] call EFUNC(circulation,removeLog); diff --git a/addons/airway/stringtable.xml b/addons/airway/stringtable.xml index a79ef1fdb..ffd5f3724 100644 --- a/addons/airway/stringtable.xml +++ b/addons/airway/stringtable.xml @@ -195,6 +195,9 @@ %1 检查呼吸道: %2, %3 %1 Heeft de luchtwegen gecheckt: %2, %3 + + %1 checked airways: Heavily Blistered + %1 inserted a %2 %1 intubierte mit %2 @@ -399,6 +402,9 @@ Tuuliputki on selkeä Luchtweg is vrij + + Airway is heavily blistered + Item could not be used, airways are not clear Gegenstand konnte nicht verwendet werden, Atemwege sind nicht frei diff --git a/addons/breathing/functions/fnc_checkBreathing.sqf b/addons/breathing/functions/fnc_checkBreathing.sqf index 8cc5e4de0..7f5042271 100644 --- a/addons/breathing/functions/fnc_checkBreathing.sqf +++ b/addons/breathing/functions/fnc_checkBreathing.sqf @@ -28,7 +28,7 @@ private _breathing = LLSTRING(breathing_isNormal); private _breathing_log = localize ACELSTRING(medical_treatment,Check_Pulse_Normal); private _breath = ""; -if (_patient getVariable [QGVAR(pneumothorax), 0] > 0) then { +if ((_patient getVariable [QGVAR(pneumothorax), 0] > 0) || (_patient getVariable [QEGVAR(chemical,airPoisoning), false])) then { _breathing = LLSTRING(breathing_isShallow); _breathing_log = LLSTRING(breathing_shallow); }; @@ -44,6 +44,7 @@ if (_ph < 7.2) then { _output = format ["%1%2", _breathing ,_breath]; _output_log = format ["%1%2", _breathing_log, _breath]; + if (_hr == 0 || !(alive _patient) || (_patient getVariable [QEGVAR(airway,obstruction), false] && !(_patient getVariable [QEGVAR(airway,overstretch), false])) || _patient getVariable [QEGVAR(airway,occluded), false] || _patient getVariable [QGVAR(hemopneumothorax), false] || _patient getVariable [QGVAR(tensionpneumothorax), false]) then { _output = LLSTRING(breathing_none); _output_log = ACELSTRING(medical_treatment,Check_Pulse_None); diff --git a/addons/chemical/XEH_preInit.sqf b/addons/chemical/XEH_preInit.sqf index 24ffb6cdb..fbcb62f72 100644 --- a/addons/chemical/XEH_preInit.sqf +++ b/addons/chemical/XEH_preInit.sqf @@ -64,4 +64,14 @@ PREP_RECOMPILE_END; [0, 3600, 60], true ] call CBA_Settings_fnc_init; + +// Shows poisioning image +[ + QGVAR(showPoisoning), + "CHECKBOX", + [LLSTRING(SETTING_showPoisoning), LLSTRING(SETTING_showPoisoning_DESC)], + CBA_SETTINGS_CHEM, + [true], + true +] call CBA_Settings_fnc_init; ADDON = true; diff --git a/addons/chemical/functions/fnc_gui_updateBodyImage.sqf b/addons/chemical/functions/fnc_gui_updateBodyImage.sqf index 193f93035..4dfc12897 100644 --- a/addons/chemical/functions/fnc_gui_updateBodyImage.sqf +++ b/addons/chemical/functions/fnc_gui_updateBodyImage.sqf @@ -20,7 +20,7 @@ params ["_ctrlGroup", "_target", "_selectionN"]; private _ctrlAirInfected = _ctrlGroup controlsGroupCtrl IDC_BODY_TORSO_I; -if (_target getVariable [QGVAR(airPoisoning), false]) then { +if ((_target getVariable [QGVAR(airPoisoning), false]) && (missionNamespace getVariable [QGVAR(showPoisoning), true])) then { _ctrlAirInfected ctrlShow true; } else { _ctrlAirInfected ctrlShow false; diff --git a/addons/chemical/functions/fnc_gui_updateInjuryListGeneral.sqf b/addons/chemical/functions/fnc_gui_updateInjuryListGeneral.sqf index 75dfa6985..aef0ab087 100644 --- a/addons/chemical/functions/fnc_gui_updateInjuryListGeneral.sqf +++ b/addons/chemical/functions/fnc_gui_updateInjuryListGeneral.sqf @@ -21,6 +21,7 @@ params ["_ctrl", "_target", "_selectionN", "_entries"]; private _poisontype = _target getVariable [QGVAR(poisonType),""]; -if (_target getVariable [QGVAR(airPoisoning),false]) then{ + +if (_target getVariable [QGVAR(airPoisoning),false] && (missionNamespace getVariable [QGVAR(showPoisoning), true])) then{ _entries pushBack [LLSTRING(Intoxication), [0.4,0,0.5,1]]; }; diff --git a/addons/chemical/stringtable.xml b/addons/chemical/stringtable.xml index 2acab5c11..190b13387 100644 --- a/addons/chemical/stringtable.xml +++ b/addons/chemical/stringtable.xml @@ -121,6 +121,12 @@ Определяет, влияет ли GAS на искусственный интеллект (если вы запускаете его на локальном сервере, это может вызвать проблемы с производительностью). Bepaald of KI/AI beïnvloed wordt door gas (als je dit doet op een lokale server kan dit leiden tot prestatieproblemen) + + Show Poisoning + + + Determines if poisoning and intoxication is shown in the medical menu + Gas mask filter Filtro de la mascara de gas @@ -819,4 +825,4 @@ Determines chance for dropping weapon while in tear gas - + \ No newline at end of file From 2294fa2d807898ab1eb1995d33fd820d8ee2d11e Mon Sep 17 00:00:00 2001 From: mazinskihenry <33608576+mazinskihenry@users.noreply.github.com> Date: Mon, 16 Dec 2024 14:01:33 -0800 Subject: [PATCH 2/6] Breathing/Chemical - Adds Low O2 Warning Tone and Chemical Compatibility (#660) **When merged this pull request will:** - Adds Low O2 Warning Tone for Personal Oxygen Tanks - Adds Resistance against Level 1 Contaminants when wearing an active O2 system - Changes Personal Tank weight and duration ### IMPORTANT - [Development Guidelines](https://ace3.acemod.org/wiki/development/) are read, understood and applied. - Title of this PR uses our standard template `Component - Add|Fix|Improve|Change|Make|Remove {changes}`. --------- Co-authored-by: MiszczuZPolski <71414303+MiszczuZPolski@users.noreply.github.com> --- addons/breathing/CfgMagazines.hpp | 4 ++-- addons/breathing/CfgSounds.hpp | 7 +++++++ addons/breathing/XEH_postInit.sqf | 6 ++++++ addons/breathing/audio/respiratorTone.ogg | Bin 0 -> 21298 bytes .../functions/fnc_attachPersonalOxygen.sqf | 8 +++++++- .../functions/fnc_attachVehicleOxygen.sqf | 2 ++ addons/chemical/functions/fnc_poison.sqf | 5 +++++ 7 files changed, 29 insertions(+), 3 deletions(-) create mode 100644 addons/breathing/audio/respiratorTone.ogg diff --git a/addons/breathing/CfgMagazines.hpp b/addons/breathing/CfgMagazines.hpp index c3342089a..78f4f8312 100644 --- a/addons/breathing/CfgMagazines.hpp +++ b/addons/breathing/CfgMagazines.hpp @@ -47,11 +47,11 @@ class CfgMagazines { picture = QPATHTOF(ui\oxygenTank.paa); ammo = ""; - count = 60; + count = 30; initSpeed = 0; tracersEvery = 0; lastRoundsTracer = 0; - mass = 3; + mass = 5; ACE_isMedicalItem = 1; ACE_asItem = 1; }; diff --git a/addons/breathing/CfgSounds.hpp b/addons/breathing/CfgSounds.hpp index ea57583fe..d10da34cb 100644 --- a/addons/breathing/CfgSounds.hpp +++ b/addons/breathing/CfgSounds.hpp @@ -30,4 +30,11 @@ class CfgSounds sound[] = { QPATHTOF(audio\pneumothoraxcough.ogg), 5, 1, 2 }; titles[] = {}; }; + class GVAR(respiratorTone) { + name = QGVAR(respiratorTone); + + // filename, volume, pitch, distance (optional) + sound[] = { QPATHTOF(audio\respiratorTone.ogg), 5, 1, 2 }; + titles[] = {}; + }; }; \ No newline at end of file diff --git a/addons/breathing/XEH_postInit.sqf b/addons/breathing/XEH_postInit.sqf index 5c45042d4..62efb8271 100644 --- a/addons/breathing/XEH_postInit.sqf +++ b/addons/breathing/XEH_postInit.sqf @@ -14,6 +14,12 @@ _unit say3D [QGVAR(pneumothoraxcough), 15]; }] call CBA_fnc_addEventHandler; +[QGVAR(playRespiratorTone), { + params ["_unit"]; + _unit say3D [QGVAR(respiratorTone), 10]; +}] call CBA_fnc_addEventHandler; + + [QEGVAR(misc,handleRespawn), LINKFUNC(handleRespawn)] call CBA_fnc_addEventHandler; [QACEGVAR(medical_status,initialized), LINKFUNC(handleBreathingConditions)] call CBA_fnc_addEventHandler; diff --git a/addons/breathing/audio/respiratorTone.ogg b/addons/breathing/audio/respiratorTone.ogg new file mode 100644 index 0000000000000000000000000000000000000000..6a0b70b7d56ba64d51e53471f0bfe0f9663893a0 GIT binary patch literal 21298 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 Date: Mon, 16 Dec 2024 23:02:04 +0100 Subject: [PATCH 3/6] French Translation (#656) **When merged this pull request will:** - _Describe what this pull request will do_ - _Each change in a separate line_ ### IMPORTANT - [Development Guidelines](https://ace3.acemod.org/wiki/development/) are read, understood and applied. - Title of this PR uses our standard template `Component - Add|Fix|Improve|Change|Make|Remove {changes}`. --------- Co-authored-by: Fanrod-Bones <106916948+Fanrod-Bones@users.noreply.github.com> --- addons/breathing/stringtable.xml | 12 ++++++++++++ addons/chemical/stringtable.xml | 4 +++- addons/circulation/stringtable.xml | 1 + 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/addons/breathing/stringtable.xml b/addons/breathing/stringtable.xml index b95ed8d96..4db0415a9 100644 --- a/addons/breathing/stringtable.xml +++ b/addons/breathing/stringtable.xml @@ -2748,50 +2748,62 @@ Available Oxygen Masks 使用可能な酸素マスク + Masques à oxygène disponibles Sets which goggles can act as oxygen masks 酸素マスクとして動作させたいゴーグルを指定します + Spécifiez les masques que vous souhaitez utiliser comme masque à oxygène. Connect Personal Oxygen 個人用酸素供給機に接続 + Connecter de l'oxygène personnel Disconnect Personal Oxygen 個人用酸素供給機を切断 + Déconnexion de l'oxygène personnel Check Personal Oxygen Status 個人用酸素供給機の状態を確認 + Vérifier l'état de l'oxygène personnel Minutes Remaining 分残っています + Minutes restantes Oxygen Tank Empty 酸素ボンベは空です + Réservoir d'oxygène vide Connect to Aircraft Oxygen 航空機酸素供給機に接続 + Connexion à l'oxygène de l'aéronef Attached to Aircraft Oxygen 航空機酸素供給機に接続済 + Attaché à l'oxygène de l'aéronef Oxygen already connected 既に酸素供給機に接続済です + Oxygène déjà connecté Oxygen tank disconnected 酸素供給機から切断しました + Réservoir d'oxygène déconnecté Remove Oxygen Mask 酸素マスクを取り外す + Retirer le masque à oxygène diff --git a/addons/chemical/stringtable.xml b/addons/chemical/stringtable.xml index 190b13387..b2243d322 100644 --- a/addons/chemical/stringtable.xml +++ b/addons/chemical/stringtable.xml @@ -799,7 +799,7 @@ Put on gas mask ガスマスクを装着 - Mettre le masque à gaz + Mettre le masque à gaz Take off gas mask @@ -820,9 +820,11 @@ Drop Weapon Chance + Chance de lâcher l'arme Determines chance for dropping weapon while in tear gas + Détermine les chances de lâcher l'arme en cas d'exposition aux gaz lacrymogènes. \ No newline at end of file diff --git a/addons/circulation/stringtable.xml b/addons/circulation/stringtable.xml index 91860e75e..c8e8f400d 100644 --- a/addons/circulation/stringtable.xml +++ b/addons/circulation/stringtable.xml @@ -2593,6 +2593,7 @@ Change Monitoring Device モニタリングする装置を変更 + Changer le dispositif de surveillance CPR Started From 9eb3a2e0a3ad147519901f9eeb2ac8d2d6da8869 Mon Sep 17 00:00:00 2001 From: mazinskihenry <33608576+mazinskihenry@users.noreply.github.com> Date: Mon, 16 Dec 2024 20:01:51 -0800 Subject: [PATCH 4/6] Chemical/Circulation/Watch - Fix Testing Errors (#665) **When merged this pull request will:** - Fixes Poison variable error - Fixes Watch timer duplicating - Fixes ApplyABG issue ### IMPORTANT - [Development Guidelines](https://ace3.acemod.org/wiki/development/) are read, understood and applied. - Title of this PR uses our standard template `Component - Add|Fix|Improve|Change|Make|Remove {changes}`. --- addons/chemical/functions/fnc_poison.sqf | 2 +- addons/circulation/CfgVehicles.hpp | 84 +++++++++++++++++-- .../functions/fnc_addArterialApplyActions.sqf | 10 +-- .../functions/fnc_addArterialTestActions.sqf | 2 +- .../functions/fnc_attachBloodGas.sqf | 3 +- .../functions/fnc_showBloodGas.sqf | 2 +- addons/watch/XEH_PREP.hpp | 4 +- addons/watch/XEH_postInit.sqf | 9 +- addons/watch/functions/fnc_handleRespawn.sqf | 4 +- addons/watch/functions/fnc_showRWatch.sqf | 17 +--- ...WatchTimer.sqf => fnc_startWatchTimer.sqf} | 6 +- 11 files changed, 97 insertions(+), 46 deletions(-) rename addons/watch/functions/{fnc_closeWatchTimer.sqf => fnc_startWatchTimer.sqf} (96%) diff --git a/addons/chemical/functions/fnc_poison.sqf b/addons/chemical/functions/fnc_poison.sqf index 84e117e8f..1d9b58459 100644 --- a/addons/chemical/functions/fnc_poison.sqf +++ b/addons/chemical/functions/fnc_poison.sqf @@ -45,7 +45,7 @@ if (_gasLevel == 0) exitWith { }; // We assume that oxygen masks only cover the mouth and nose, leaving the eyes exposed to CS gas -if ((_unit getVariable [QEGVAR(breathing,oxygenMaskActive)])) exitWith { +if ((_unit getVariable [QEGVAR(breathing,oxygenMaskActive), false])) exitWith { TRACE_1("unit has oxygen mask",_unit); }; diff --git a/addons/circulation/CfgVehicles.hpp b/addons/circulation/CfgVehicles.hpp index 932e1a86a..2caa43f7a 100644 --- a/addons/circulation/CfgVehicles.hpp +++ b/addons/circulation/CfgVehicles.hpp @@ -235,6 +235,15 @@ class CfgVehicles { class LandVehicle; class Car: LandVehicle { + class ACE_SelfActions { + class KAT_ArterialTest { + displayName = CSTRING(Arterial_Test_Action); + condition = QUOTE(_target call ACEFUNC(medical_treatment,isMedicalVehicle)); + statement = ""; + insertChildren = QUOTE([ARR_2(_target,_player)] call FUNC(addArterialTestActions)); + icon = QACEPATHTOF(medical_gui,ui\cross.paa); + }; + }; class ACE_Actions { class ACE_MainActions { class KAT_ArterialTest { @@ -250,6 +259,15 @@ class CfgVehicles { class Car_F: Car {}; class Quadbike_01_base_F: Car_F { + class ACE_SelfActions { + class KAT_ArterialTest { + displayName = CSTRING(Arterial_Test_Action); + condition = QUOTE(_target call ACEFUNC(medical_treatment,isMedicalVehicle)); + statement = ""; + insertChildren = QUOTE([ARR_2(_target,_player)] call FUNC(addArterialTestActions)); + icon = QACEPATHTOF(medical_gui,ui\cross.paa); + }; + }; class ACE_Actions: ACE_Actions { class ACE_MainActions: ACE_MainActions { class KAT_ArterialTest { @@ -264,6 +282,15 @@ class CfgVehicles { }; class Kart_01_Base_F: Car_F { + class ACE_SelfActions { + class KAT_ArterialTest { + displayName = CSTRING(Arterial_Test_Action); + condition = QUOTE(_target call ACEFUNC(medical_treatment,isMedicalVehicle)); + statement = ""; + insertChildren = QUOTE([ARR_2(_target,_player)] call FUNC(addArterialTestActions)); + icon = QACEPATHTOF(medical_gui,ui\cross.paa); + }; + }; class ACE_Actions: ACE_Actions { class ACE_MainActions: ACE_MainActions { class KAT_ArterialTest { @@ -278,6 +305,15 @@ class CfgVehicles { }; class Tank: LandVehicle { + class ACE_SelfActions { + class KAT_ArterialTest { + displayName = CSTRING(Arterial_Test_Action); + condition = QUOTE(_target call ACEFUNC(medical_treatment,isMedicalVehicle)); + statement = ""; + insertChildren = QUOTE([ARR_2(_target,_player)] call FUNC(addArterialTestActions)); + icon = QACEPATHTOF(medical_gui,ui\cross.paa); + }; + }; class ACE_Actions { class ACE_MainActions { class KAT_ArterialTest { @@ -292,6 +328,15 @@ class CfgVehicles { }; class Motorcycle: LandVehicle { + class ACE_SelfActions { + class KAT_ArterialTest { + displayName = CSTRING(Arterial_Test_Action); + condition = QUOTE(_target call ACEFUNC(medical_treatment,isMedicalVehicle)); + statement = ""; + insertChildren = QUOTE([ARR_2(_target,_player)] call FUNC(addArterialTestActions)); + icon = QACEPATHTOF(medical_gui,ui\cross.paa); + }; + }; class ACE_Actions { class ACE_MainActions { class KAT_ArterialTest { @@ -307,6 +352,15 @@ class CfgVehicles { class Air; class Helicopter: Air { + class ACE_SelfActions { + class KAT_ArterialTest { + displayName = CSTRING(Arterial_Test_Action); + condition = QUOTE(_target call ACEFUNC(medical_treatment,isMedicalVehicle)); + statement = ""; + insertChildren = QUOTE([ARR_2(_target,_player)] call FUNC(addArterialTestActions)); + icon = QACEPATHTOF(medical_gui,ui\cross.paa); + }; + }; class ACE_Actions { class ACE_MainActions { class KAT_ArterialTest { @@ -321,6 +375,15 @@ class CfgVehicles { }; class Plane: Air { + class ACE_SelfActions { + class KAT_ArterialTest { + displayName = CSTRING(Arterial_Test_Action); + condition = QUOTE(_target call ACEFUNC(medical_treatment,isMedicalVehicle)); + statement = ""; + insertChildren = QUOTE([ARR_2(_target,_player)] call FUNC(addArterialTestActions)); + icon = QACEPATHTOF(medical_gui,ui\cross.paa); + }; + }; class ACE_Actions { class ACE_MainActions { class KAT_ArterialTest { @@ -336,6 +399,15 @@ class CfgVehicles { class Ship; class Ship_F: Ship { + class ACE_SelfActions { + class KAT_ArterialTest { + displayName = CSTRING(Arterial_Test_Action); + condition = QUOTE(_target call ACEFUNC(medical_treatment,isMedicalVehicle)); + statement = ""; + insertChildren = QUOTE([ARR_2(_target,_player)] call FUNC(addArterialTestActions)); + icon = QACEPATHTOF(medical_gui,ui\cross.paa); + }; + }; class ACE_Actions { class ACE_MainActions { class KAT_ArterialTest { @@ -354,12 +426,12 @@ class CfgVehicles { class ACE_Actions { class ACE_MainActions { class KAT_ApplyBloodTest { - displayName = CSTRING(Arterial_Test); - condition = "true"; - statement = "true"; - insertChildren = QUOTE([ARR_2(_target,_player)] call FUNC(addArterialApplyActions)); - icon = QACEPATHTOF(medical_gui,ui\cross.paa); - }; + displayName = CSTRING(Arterial_Test); + condition = QUOTE(GVAR(abgEnable)); + statement = "true"; + insertChildren = QUOTE([ARR_2(_target,_player)] call FUNC(addArterialApplyActions)); + icon = QACEPATHTOF(medical_gui,ui\cross.paa); + }; }; class ACE_Head { class CheckBloodPressure {}; // Remove the ability to check blood pressure at the head diff --git a/addons/circulation/functions/fnc_addArterialApplyActions.sqf b/addons/circulation/functions/fnc_addArterialApplyActions.sqf index 2e469d019..c75861697 100644 --- a/addons/circulation/functions/fnc_addArterialApplyActions.sqf +++ b/addons/circulation/functions/fnc_addArterialApplyActions.sqf @@ -30,9 +30,9 @@ private _fnc_getActions = { if (_idNumber > 0) then { private _resultSampleMap = missionNamespace getVariable [QEGVAR(circulation,resultSampleMap), []]; - _resultSampleMap = _resultSampleMap get _idNumber; - _resultSampleMap = _resultSampleMap select 1; - private _patient = _resultSampleMap select 0; + _resultSampleArray = _resultSampleMap get _idNumber; + _resultSampleActual = _resultSampleArray select 1; + private _patient = _resultSampleArray select 0; _actions pushBack [ [ @@ -45,7 +45,7 @@ private _fnc_getActions = { [] ] call ACEFUNC(interact_menu,createAction), [], - [_resultSampleMap, _target, _idNumber, _player] + [_resultSampleActual, _target, _idNumber, _player] ]; }; } forEach ([_player, 0] call ACEFUNC(common,uniqueItems)); @@ -54,4 +54,4 @@ private _fnc_getActions = { }; -[[], _fnc_getActions, _player, QGVAR(actionsCache), 9999, "cba_events_loadoutEvent"] call ACEFUNC(common,cachedCall); \ No newline at end of file +[[], _fnc_getActions, _player, QGVAR(actionsCache), 9999, "cba_events_loadoutEvent"] call ACEFUNC(common,cachedCall); diff --git a/addons/circulation/functions/fnc_addArterialTestActions.sqf b/addons/circulation/functions/fnc_addArterialTestActions.sqf index 2631a67d9..b73ce230b 100644 --- a/addons/circulation/functions/fnc_addArterialTestActions.sqf +++ b/addons/circulation/functions/fnc_addArterialTestActions.sqf @@ -56,4 +56,4 @@ private _fnc_getActions = { }; -[[], _fnc_getActions, _player, QGVAR(actionsCache), 9999, "cba_events_loadoutEvent"] call ACEFUNC(common,cachedCall); \ No newline at end of file +[[], _fnc_getActions, _player, QGVAR(actionsCache), 9999, "cba_events_loadoutEvent"] call ACEFUNC(common,cachedCall); diff --git a/addons/circulation/functions/fnc_attachBloodGas.sqf b/addons/circulation/functions/fnc_attachBloodGas.sqf index cb974d473..8205f01be 100644 --- a/addons/circulation/functions/fnc_attachBloodGas.sqf +++ b/addons/circulation/functions/fnc_attachBloodGas.sqf @@ -16,8 +16,7 @@ */ params ["_entries"]; _entries params ["_bloodGas", "_patient", "_idNumber", "_player"]; -_bloodGas params ["_patientName", "_bloodGasArray"]; -_patient setVariable [QGVAR(testedBloodGas), _bloodGasArray, true]; +_patient setVariable [QGVAR(testedBloodGas), _bloodGas, true]; _player removeItem (format ["KAT_bloodResult_%1",_idNumber]); \ No newline at end of file diff --git a/addons/circulation/functions/fnc_showBloodGas.sqf b/addons/circulation/functions/fnc_showBloodGas.sqf index d683e904b..808636bdc 100644 --- a/addons/circulation/functions/fnc_showBloodGas.sqf +++ b/addons/circulation/functions/fnc_showBloodGas.sqf @@ -28,7 +28,7 @@ private _resultSampleMap = missionNamespace getVariable [QEGVAR(circulation,resu _resultCounter = [_resultCounter +1, 1] select (_resultCounter == 20); missionNamespace setVariable [QEGVAR(circulation,resultCounter), _resultCounter, true]; -_resultSampleMap set [_resultCounter, [name(_patient), _bloodGas]]; +_resultSampleMap set [_resultCounter, [_patientName, _bloodGasArray]]; missionNamespace setVariable [QEGVAR(circulation,resultSampleMap), _resultSampleMap, true]; private _itemStr = format ["KAT_bloodResult_%1", _resultCounter]; diff --git a/addons/watch/XEH_PREP.hpp b/addons/watch/XEH_PREP.hpp index d97090421..eeb625ae7 100644 --- a/addons/watch/XEH_PREP.hpp +++ b/addons/watch/XEH_PREP.hpp @@ -1,4 +1,3 @@ -PREP(closeWatchTimer); PREP(handleRespawn); PREP(hideKWatch); PREP(hideCWatch); @@ -8,4 +7,5 @@ PREP(init); PREP(showKWatch); PREP(showCWatch); PREP(showSWatch); -PREP(showRWatch); \ No newline at end of file +PREP(showRWatch); +PREP(startWatchTimer); \ No newline at end of file diff --git a/addons/watch/XEH_postInit.sqf b/addons/watch/XEH_postInit.sqf index fc4683fb8..2d8de495e 100644 --- a/addons/watch/XEH_postInit.sqf +++ b/addons/watch/XEH_postInit.sqf @@ -2,7 +2,7 @@ if (!hasInterface) exitWith {}; -[QGVAR(closeWatchTimer), LINKFUNC(closeWatchTimer)] call CBA_fnc_addEventHandler; +[QGVAR(startWatchTimer), LINKFUNC(startWatchTimer)] call CBA_fnc_addEventHandler; [QEGVAR(misc,handleRespawn), LINKFUNC(handleRespawn)] call CBA_fnc_addEventHandler; [QGVAR(playWatchTone), { @@ -51,7 +51,7 @@ if (!hasInterface) exitWith {}; [ACE_player] call FUNC(showRWatch); } else { call FUNC(hideRWatch); - }; + }; }; }; @@ -96,11 +96,8 @@ if (!hasInterface) exitWith {}; if (_timerActive) then { ACE_player setVariable [QGVAR(rangerStart), false, false]; } else { - if !(GETMVAR(GVAR(RangerActive),false)) then { - [QGVAR(closeWatchTimer), [ACE_player], ACE_player] call CBA_fnc_targetEvent; - }; - ACE_player setVariable [QGVAR(rangerStart), true, false]; + [QGVAR(startWatchTimer), [ACE_player], ACE_player] call CBA_fnc_targetEvent; }; }; diff --git a/addons/watch/functions/fnc_handleRespawn.sqf b/addons/watch/functions/fnc_handleRespawn.sqf index ed450e087..eb6257b23 100644 --- a/addons/watch/functions/fnc_handleRespawn.sqf +++ b/addons/watch/functions/fnc_handleRespawn.sqf @@ -20,5 +20,5 @@ params ["_unit","_dead"]; TRACE_2("handleRespawn",_unit,_dead); -_unit setVariable [QGVAR(RangerStart), false, true]; -_unit setVariable [QGVAR(RangerTimer), 0, true]; \ No newline at end of file +_unit setVariable [QGVAR(rangerStart), false, true]; +_unit setVariable [QGVAR(rangerTimer), 0, true]; \ No newline at end of file diff --git a/addons/watch/functions/fnc_showRWatch.sqf b/addons/watch/functions/fnc_showRWatch.sqf index d2cb346e7..cb74c897f 100644 --- a/addons/watch/functions/fnc_showRWatch.sqf +++ b/addons/watch/functions/fnc_showRWatch.sqf @@ -82,23 +82,8 @@ private _o2 = _display displayCtrl 22810; _second ctrlSetAngle [(linearConversion [0, 60, _seconds, 0, 360]), 0.5, 0.5, true]; private _timeValue = _unit getVariable [QGVAR(rangerTimer), 0]; - private _active = _unit getVariable [QGVAR(rangerStart), false]; _timer ctrlSetText ([_timeValue, 2, 0] call CBA_fnc_formatNumber); - - if (_active) then { - _timeValue = (_timeValue - 1) max 0; - - _timer ctrlSetText ([_timeValue, 2, 0] call CBA_fnc_formatNumber); - _unit setVariable [QGVAR(rangerTimer), _timeValue, false]; - - if (_timeValue == 0) then { - _unit setVariable [QGVAR(rangerStart), false, false]; - [QGVAR(playWatchTone), [_unit, QGVAR(watchAlarm)], _unit] call CBA_fnc_targetEvent; - }; - } else { - _timer ctrlSetText ([_timeValue, 2, 0] call CBA_fnc_formatNumber); - }; }, 1, [ _unit, _hour, @@ -109,4 +94,4 @@ private _o2 = _display displayCtrl 22810; _altitude, _hr, _o2 -]] call CBA_fnc_addPerFrameHandler; \ No newline at end of file +]] call CBA_fnc_addPerFrameHandler; diff --git a/addons/watch/functions/fnc_closeWatchTimer.sqf b/addons/watch/functions/fnc_startWatchTimer.sqf similarity index 96% rename from addons/watch/functions/fnc_closeWatchTimer.sqf rename to addons/watch/functions/fnc_startWatchTimer.sqf index 657ec0cbb..e8dc43a67 100644 --- a/addons/watch/functions/fnc_closeWatchTimer.sqf +++ b/addons/watch/functions/fnc_startWatchTimer.sqf @@ -21,10 +21,6 @@ params ["_unit"]; _this params ["_args", "_pfhID"]; _args params ["_unit"]; - if (GVAR(RangerActive)) exitWith { - _pfhID call CBA_fnc_removePerFrameHandler; - }; - if !(alive _unit) exitWith { _pfhID call CBA_fnc_removePerFrameHandler; }; @@ -47,5 +43,7 @@ params ["_unit"]; _pfhID call CBA_fnc_removePerFrameHandler; }; + } else { + _pfhID call CBA_fnc_removePerFrameHandler; }; }, 1, [_unit]] call CBA_fnc_addPerFrameHandler; \ No newline at end of file From fb837f8cd8a5892f0e9c2bc781d3073e784bdf1c Mon Sep 17 00:00:00 2001 From: MiszczuZPolski <71414303+MiszczuZPolski@users.noreply.github.com> Date: Tue, 17 Dec 2024 07:20:47 +0100 Subject: [PATCH 5/6] Compat RHS USF - Add compatibility for stretcher (#663) **When merged this pull request will:** - Allows attaching stretcher to few selected vehicles ### IMPORTANT - [Development Guidelines](https://ace3.acemod.org/wiki/development/) are read, understood and applied. - Title of this PR uses our standard template `Component - Add|Fix|Improve|Change|Make|Remove {changes}`. --- .hemtt/launch.toml | 6 +++ addons/compat_rhs_usf3/$PBOPREFIX$ | 1 + addons/compat_rhs_usf3/CfgVehicles.hpp | 46 +++++++++++++++++++ .../compat_rhs_usf3}/config.cpp | 12 ++--- addons/compat_rhs_usf3/script_component.hpp | 5 ++ .../functions/fnc_attachStretcher.sqf | 8 ++-- addons/stretcher/vehicle_stretcher.hpp | 24 +++++----- optionals/usaf/$PBOPREFIX$ | 1 - optionals/usaf/CfgVehicles.hpp | 42 ----------------- optionals/usaf/script_component.hpp | 17 ------- 10 files changed, 79 insertions(+), 83 deletions(-) create mode 100644 addons/compat_rhs_usf3/$PBOPREFIX$ create mode 100644 addons/compat_rhs_usf3/CfgVehicles.hpp rename {optionals/usaf => addons/compat_rhs_usf3}/config.cpp (66%) create mode 100644 addons/compat_rhs_usf3/script_component.hpp delete mode 100644 optionals/usaf/$PBOPREFIX$ delete mode 100644 optionals/usaf/CfgVehicles.hpp delete mode 100644 optionals/usaf/script_component.hpp diff --git a/.hemtt/launch.toml b/.hemtt/launch.toml index 6e2348da9..599ddc3f4 100644 --- a/.hemtt/launch.toml +++ b/.hemtt/launch.toml @@ -4,3 +4,9 @@ workshop = [ "463939057", # ACE3's Workshop ID "2369477168" # Advanced Developer Tools's Workshop ID ] + +[rhs] +extends = "default" +workshop = [ + "843577117", # RHS USAF Workshop ID +] diff --git a/addons/compat_rhs_usf3/$PBOPREFIX$ b/addons/compat_rhs_usf3/$PBOPREFIX$ new file mode 100644 index 000000000..e40cfec20 --- /dev/null +++ b/addons/compat_rhs_usf3/$PBOPREFIX$ @@ -0,0 +1 @@ +x\kat\addons\compat_rhs_usf3 diff --git a/addons/compat_rhs_usf3/CfgVehicles.hpp b/addons/compat_rhs_usf3/CfgVehicles.hpp new file mode 100644 index 000000000..d26f53925 --- /dev/null +++ b/addons/compat_rhs_usf3/CfgVehicles.hpp @@ -0,0 +1,46 @@ +class CfgVehicles { + class Truck_01_base_F; + class rhsusf_fmtv_base: Truck_01_base_F {}; + class rhsusf_M1078A1P2_fmtv_usarmy: rhsusf_fmtv_base {}; + class rhsusf_M1078A1P2_D_fmtv_usarmy: rhsusf_M1078A1P2_fmtv_usarmy { + kat_stretcherPos[] = {0,-1,-0.4}; + kat_stretcherVector[] = {{0, 0, 0}, {0, 0, 0}}; + }; + class rhsusf_M1083A1P2_fmtv_usarmy: rhsusf_M1078A1P2_fmtv_usarmy {}; + class rhsusf_M1083A1P2_B_fmtv_usarmy: rhsusf_M1083A1P2_fmtv_usarmy {}; + class rhsusf_M1085A1P2_B_Medical_fmtv_usarmy: rhsusf_M1083A1P2_B_fmtv_usarmy { + kat_stretcherPos[] = {-0.9,3,0.67}; + kat_stretcherVector[] = {{0,0,0},{0,0,0}}; + }; + + class Heli_Transport_01_base_F; + class RHS_UH60_Base: Heli_Transport_01_base_F { + kat_stretcherPos[] = {0,1.25,-1.86}; + kat_stretcherVector[] = {{1, 0, 0}, {0, 0, 1}}; + }; + + class Heli_Transport_02_base_F; + class RHS_CH_47F_base: Heli_Transport_02_base_F { + kat_stretcherPos[] = {0,-0.43,-2.63}; + kat_stretcherVector[] = {{0, 0, 0}, {0, 0, 0}}; + }; + + class MRAP_01_base_F; + class rhsusf_hmmwe_base: MRAP_01_base_F { + kat_stretcherPos[] = {0,-0.5,-0.85}; + kat_stretcherVector[] = {{0, 0, 0}, {0, 0, 0}}; + }; + + class APC_Tracked_03_base_F; + class RHS_M2A2_Base: APC_Tracked_03_base_F { + kat_stretcherPos[] = {-1.19,-0.6,-0.45}; + kat_stretcherVector[] = {{0,0,0},{0,0,0}}; + }; + + class Tank_F; + class APC_Tracked_02_base_F: Tank_F {}; + class rhsusf_m113tank_base: APC_Tracked_02_base_F { + kat_stretcherPos[] = {0,-0.5,-2.05}; + kat_stretcherVector[] = {{0,0,0},{0,0,0}}; + }; +}; diff --git a/optionals/usaf/config.cpp b/addons/compat_rhs_usf3/config.cpp similarity index 66% rename from optionals/usaf/config.cpp rename to addons/compat_rhs_usf3/config.cpp index c09f257f7..98edf92af 100644 --- a/optionals/usaf/config.cpp +++ b/addons/compat_rhs_usf3/config.cpp @@ -3,19 +3,17 @@ class CfgPatches { class ADDON { name = COMPONENT_NAME; - requiredVersion = REQUIRED_VERSION; units[] = {}; weapons[] = {}; - magazines[] = {}; - requiredAddons[] = { - "kat_misc", - "rhsusf_main" - }; + requiredVersion = REQUIRED_VERSION; + requiredAddons[] = {"kat_main", "rhsusf_main_loadorder"}; + skipWhenMissingDependencies = 1; author = "Katalam"; - authors[] = {"Katalam"}; + authors[] = {"MiszczuZPolski", "Katalam"}; url = ECSTRING(main,URL); VERSION_CONFIG; }; }; #include "CfgVehicles.hpp" + diff --git a/addons/compat_rhs_usf3/script_component.hpp b/addons/compat_rhs_usf3/script_component.hpp new file mode 100644 index 000000000..14741af1f --- /dev/null +++ b/addons/compat_rhs_usf3/script_component.hpp @@ -0,0 +1,5 @@ +#define COMPONENT compat_rhs_usf3 +#define COMPONENT_BEAUTIFIED RHS USAF Compatibility + +#include "\x\kat\addons\main\script_mod.hpp" +#include "\x\kat\addons\main\script_macros.hpp" diff --git a/addons/stretcher/functions/fnc_attachStretcher.sqf b/addons/stretcher/functions/fnc_attachStretcher.sqf index 3924e372a..3fa8bb147 100644 --- a/addons/stretcher/functions/fnc_attachStretcher.sqf +++ b/addons/stretcher/functions/fnc_attachStretcher.sqf @@ -18,14 +18,14 @@ params [["_target", objNull, [objNull]]]; if !(isNull attachedTo _target) exitWith {}; -private _vehicles = nearestObjects [_target, ["Car", "Helicopter"], 20]; +private _vehicles = nearestObjects [_target, ["Car", "Helicopter", "Tank"], 20]; private _actions = []; { private _type = typeOf _x; private _name = getText (configFile >> "CfgVehicles" >> _type >> "displayName"); private _uniqueName = format ["kat_stretcher_%1", _type]; - if (isArray (configFile >> "CfgVehicles" >> _type >> "stretcherPos")) then { + if (isArray (configFile >> "CfgVehicles" >> _type >> "kat_stretcherPos")) then { _actions pushBack [ [ _uniqueName, @@ -33,8 +33,8 @@ private _actions = []; "", { params ["_target", "", "_parameter"]; - private _pos = getArray (configFile >> "CfgVehicles" >> typeOf (_parameter select 0) >> "stretcherPos"); - private _vector = getArray (configFile >> "CfgVehicles" >> typeOf (_parameter select 0) >> "stretcherVector"); + private _pos = getArray (configFile >> "CfgVehicles" >> typeOf (_parameter select 0) >> "kat_stretcherPos"); + private _vector = getArray (configFile >> "CfgVehicles" >> typeOf (_parameter select 0) >> "kat_stretcherVector"); _target attachTo [(_parameter select 0), _pos]; _target setVectorDirAndUp _vector; }, diff --git a/addons/stretcher/vehicle_stretcher.hpp b/addons/stretcher/vehicle_stretcher.hpp index 2434507ad..d99242cab 100644 --- a/addons/stretcher/vehicle_stretcher.hpp +++ b/addons/stretcher/vehicle_stretcher.hpp @@ -1,33 +1,33 @@ class LSV_01_unarmed_base_F; class B_LSV_01_unarmed_F: LSV_01_unarmed_base_F { - stretcherPos[] = {0.08,-1.5,-0.69}; - stretcherVector[] = {{1, 0, 0}, {0, 0, 1}}; + kat_stretcherPos[] = {0.08,-1.5,-0.69}; + kat_stretcherVector[] = {{1, 0, 0}, {0, 0, 1}}; }; class Heli_Transport_01_base_F; class B_Heli_Transport_01_F: Heli_Transport_01_base_F { - stretcherPos[] = {0,1.6,-1.55}; - stretcherVector[] = {{1, 0, 0}, {0, 0, 1}}; + kat_stretcherPos[] = {0,1.6,-1.55}; + kat_stretcherVector[] = {{1, 0, 0}, {0, 0, 1}}; }; class B_Truck_01_transport_F; class B_Truck_01_medical_F: B_Truck_01_transport_F { - stretcherPos[] = {-0.15,-4.7,0}; - stretcherVector[] = {{1, 0, 0}, {0, 0, 1}}; + kat_stretcherPos[] = {-0.15,-4.7,0}; + kat_stretcherVector[] = {{1, 0, 0}, {0, 0, 1}}; }; class B_APC_Wheeled_01_base_F; class B_APC_Wheeled_01_cannon_F: B_APC_Wheeled_01_base_F { - stretcherPos[] = {0.85,1.7,-0.41}; - stretcherVector[] = {{0,0.78,-0.22},{0,0.22,0.78}}; + kat_stretcherPos[] = {0.85,1.7,-0.41}; + kat_stretcherVector[] = {{0,0.78,-0.22},{0,0.22,0.78}}; }; class Heli_Transport_03_base_F; class B_Heli_Transport_03_F: Heli_Transport_03_base_F { - stretcherPos[] = {0,-0.4,-2.08}; - stretcherVector[] = {{0, 0, 0}, {0, 0, 0}}; + kat_stretcherPos[] = {0,-0.4,-2.08}; + kat_stretcherVector[] = {{0, 0, 0}, {0, 0, 0}}; }; class LandVehicle; class Car: LandVehicle {}; class Car_F: Car {}; class Quadbike_01_base_F: Car_F { - stretcherPos[] = {0,0.8,-0.56}; - stretcherVector[] = {{1, 0, 0}, {0, 0, 1}}; + kat_stretcherPos[] = {0,0.8,-0.56}; + kat_stretcherVector[] = {{1, 0, 0}, {0, 0, 1}}; }; diff --git a/optionals/usaf/$PBOPREFIX$ b/optionals/usaf/$PBOPREFIX$ deleted file mode 100644 index 150d9eacb..000000000 --- a/optionals/usaf/$PBOPREFIX$ +++ /dev/null @@ -1 +0,0 @@ -x\kat\addons\usaf diff --git a/optionals/usaf/CfgVehicles.hpp b/optionals/usaf/CfgVehicles.hpp deleted file mode 100644 index e71cbe56d..000000000 --- a/optionals/usaf/CfgVehicles.hpp +++ /dev/null @@ -1,42 +0,0 @@ -class CfgVehicles { - class rhsusf_M1078A1P2_fmtv_usarmy; - class rhsusf_M1078A1P2_D_fmtv_usarmy: rhsusf_M1078A1P2_fmtv_usarmy { - stretcherPos[] = {0,-1,-0.4}; - stretcherVector[] = {{0, 0, 0}, {0, 0, 0}}; - }; - class Heli_Transport_01_base_F; - class RHS_UH60_Base: Heli_Transport_01_base_F { - stretcherPos[] = {0,1.25,-1.86}; - stretcherVector[] = {{1, 0, 0}, {0, 0, 1}}; - }; - class Heli_Transport_02_base_F; - class RHS_CH_47F_base: Heli_Transport_02_base_F { - stretcherPos[] = {0,-0.43,-2.63}; - stretcherVector[] = {{0, 0, 0}, {0, 0, 0}}; - }; - class MRAP_01_base_F; - class rhsusf_hmmwe_base: MRAP_01_base_F { - stretcherPos[] = {0,-0.5,-0.85}; - stretcherVector[] = {{0, 0, 0}, {0, 0, 0}}; - }; - class Truck_01_base_F; - class rhsusf_M1220_usarmy_d: Truck_01_base_F { - stretcherPos[] = {-0.05,-2.1,-1.5}; - stretcherVector[] = {{0,0,0},{0,0,0}}; - }; - class APC_Tracked_03_base_F; - class RHS_M2A2_Base: APC_Tracked_03_base_F { - stretcherPos[] = {-1.19,-0.6,-0.45}; - stretcherVector[] = {{0,0,0},{0,0,0}}; - }; - class APC_Tracked_02_base_F; - class rhsusf_m113tank_base: APC_Tracked_02_base_F { - stretcherPos[] = {0,-0.5,-2.05}; - stretcherVector[] = {{0,0,0},{0,0,0}}; - }; - class rhsusf_M1083A1P2_B_fmtv_usarmy; - class rhsusf_M1085A1P2_B_Medical_fmtv_usarmy: rhsusf_M1083A1P2_B_fmtv_usarmy { - stretcherPos[] = {-0.9,3,0.67}; - stretcherVector[] = {{0,0,0},{0,0,0}}; - }; -}; diff --git a/optionals/usaf/script_component.hpp b/optionals/usaf/script_component.hpp deleted file mode 100644 index 21bd5dce7..000000000 --- a/optionals/usaf/script_component.hpp +++ /dev/null @@ -1,17 +0,0 @@ -#define COMPONENT usaf -#define COMPONENT_BEAUTIFIED KAT USAF -#include "\x\kat\addons\main\script_mod.hpp" - -// #define DEBUG_MODE_FULL -// #define DISABLE_COMPILE_CACHE -// #define ENABLE_PERFORMANCE_COUNTERS - -#ifdef DEBUG_ENABLED_USAF - #define DEBUG_MODE_FULL -#endif - -#ifdef DEBUG_SETTINGS_USAF - #define DEBUG_SETTINGS DEBUG_SETTINGS_USAF -#endif - -#include "\x\kat\addons\main\script_macros.hpp" From a36f536be6a9ba6f0ec0cc15d6f1c0ae927132a1 Mon Sep 17 00:00:00 2001 From: MiszczuZPolski <71414303+MiszczuZPolski@users.noreply.github.com> Date: Tue, 17 Dec 2024 07:54:34 +0100 Subject: [PATCH 6/6] Prepare stable update v3.0.4 --- addons/main/script_version.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/main/script_version.hpp b/addons/main/script_version.hpp index da0e91aa9..5f6090b80 100644 --- a/addons/main/script_version.hpp +++ b/addons/main/script_version.hpp @@ -1,4 +1,4 @@ #define MAJOR 3 #define MINOR 0 #define PATCH 4 -#define BUILD 59 +#define BUILD 60