From 49989a44179cd8fdb48ceb9acc8b33574fda3aa5 Mon Sep 17 00:00:00 2001 From: gerard-sog Date: Sun, 20 Oct 2024 11:16:43 +0200 Subject: [PATCH 1/2] refactor: split missionEventHandlers --- README.md | 2 +- functions/colsog_fn_firstAidConvertAce.sqf | 59 ------------------- functions/colsog_fn_missionEventHandlers.sqf | 10 ++++ .../entityKilled/fn_firstAidConvertAce.sqf | 45 ++++++++++++++ .../entityKilled/fn_intelOnBodies.sqf | 34 +++++++++++ init.sqf | 4 +- 6 files changed, 92 insertions(+), 62 deletions(-) delete mode 100644 functions/colsog_fn_firstAidConvertAce.sqf create mode 100644 functions/colsog_fn_missionEventHandlers.sqf create mode 100644 functions/missionEventHandlers/entityKilled/fn_firstAidConvertAce.sqf create mode 100644 functions/missionEventHandlers/entityKilled/fn_intelOnBodies.sqf diff --git a/README.md b/README.md index cffd6c3..8559c22 100644 --- a/README.md +++ b/README.md @@ -390,7 +390,7 @@ At the death of a unit (AI/Player): 1x "ACE_morphine" ``` -see [colsog_fn_firstAidConvertAce.sqf](https://github.com/gerard-sog/arma3-macvsog-columbia-scripts/blob/main/functions/colsog_fn_firstAidConvertAce.sqf) +see [fn_firstAidConvertAce.sqf](https://github.com/gerard-sog/arma3-macvsog-columbia-scripts/blob/main/functions/missionEventHandlers/entityKilled/fn_firstAidConvertAce.sqf) diff --git a/functions/colsog_fn_firstAidConvertAce.sqf b/functions/colsog_fn_firstAidConvertAce.sqf deleted file mode 100644 index f222851..0000000 --- a/functions/colsog_fn_firstAidConvertAce.sqf +++ /dev/null @@ -1,59 +0,0 @@ -if !(isClass (configFile >> "CfgPatches" >> "ace_main")) exitWith {}; - -if (!isServer) exitWith {}; - -ClassFirstAidConvertACE = "FirstAidKit"; -ClassMedicConvertACE = "Medikit"; -if (isClass (configFile >> "CfgPatches" >> "vn_emm")) then { - ClassFirstAidConvertACE = "vn_o_item_firstaidkit"; - ClassMedicConvertACE = "vn_b_item_medikit_01"; -}; - -addMissionEventHandler ["EntityKilled", { - params ["_killed", "_killer"]; - - if (_killed isKindOf "CAManBase") then { - private _unit = _this select 0; - private _items = items _unit; - - // Medical - if (ClassMedicConvertACE in _items) then { - _unit removeItems ClassFirstAidConvertACE; - _unit removeItem ClassMedicConvertACE; - _backpack = BackpackContainer _unit; - _backpack addItemCargoGlobal ["ACE_fieldDressing", colsog_medikit_convertAceFieldDressing]; - _backpack addItemCargoGlobal ["ACE_salineIV_500", colsog_medikit_convertAceSalineIv500]; - _backpack addItemCargoGlobal ["ACE_epinephrine", colsog_medikit_convertAceEpinephrine]; - _backpack addItemCargoGlobal ["ACE_morphine", colsog_medikit_convertAceMorphine]; - _backpack addItemCargoGlobal ["ACE_tourniquet", colsog_medikit_convertAceTourniquet]; - _backpack addItemCargoGlobal ["ACE_splint", colsog_medikit_convertAceSplint]; - }; - - if (ClassFirstAidConvertACE in _items) then { - while {({_x == ClassFirstAidConvertACE} count items _unit) > 0} do { - _unit removeItem ClassFirstAidConvertACE; - _vest = vestContainer _unit; - _vest addItemCargoGlobal ["ACE_fieldDressing", colsog_firstAid_convertAceFieldDressing]; - _vest addItemCargoGlobal ["ACE_morphine", colsog_firstAid_convertAceMorphine]; - }; - }; - - // Intel - private _chanceOfUnitCarryingIntel = [1, 100] call BIS_fnc_randomNum; - if (_chanceOfUnitCarryingIntel <= colsog_intel_chanceOfUnitCarryingIntel) then - { - private _chanceOfIntelFallingOnGround = [1, 100] call BIS_fnc_randomNum; - if (_chanceOfIntelFallingOnGround <= colsog_intel_chanceOfIntelFallingOnGround) then - { - // Intel can be found on the ground. - private _groundWeaponHolder = createVehicle ["groundweaponholder", getPosATL _unit, [], 1, "CAN_COLLIDE"]; - _groundWeaponHolder addItemCargoGlobal [colsog_intel_inventoryItem, 1]; - } else - { - // Intel can be found in the inventory of the unit. - private _uniform = uniformContainer _unit; - _uniform addItemCargoGlobal [colsog_intel_inventoryItem, 1]; - }; - }; - }; -}]; \ No newline at end of file diff --git a/functions/colsog_fn_missionEventHandlers.sqf b/functions/colsog_fn_missionEventHandlers.sqf new file mode 100644 index 0000000..5d03d22 --- /dev/null +++ b/functions/colsog_fn_missionEventHandlers.sqf @@ -0,0 +1,10 @@ +if !(isClass (configFile >> "CfgPatches" >> "ace_main")) exitWith {}; + +if (!isServer) exitWith {}; + +addMissionEventHandler ["EntityKilled", { + params ["_killed"]; + + [_killed] execVM "functions\missionEventHandlers\entityKilled\fn_firstAidConvertAce.sqf"; + [_killed] execVM "functions\missionEventHandlers\entityKilled\fn_intelOnBodies.sqf"; +}]; \ No newline at end of file diff --git a/functions/missionEventHandlers/entityKilled/fn_firstAidConvertAce.sqf b/functions/missionEventHandlers/entityKilled/fn_firstAidConvertAce.sqf new file mode 100644 index 0000000..d18873b --- /dev/null +++ b/functions/missionEventHandlers/entityKilled/fn_firstAidConvertAce.sqf @@ -0,0 +1,45 @@ +/* + * Convert basic medikit into ace medical items. + * + * Arguments: + * 0: killed OPFOR unit. + * + * Return values: + * None + */ + +params ["_killed"]; + +ClassFirstAidConvertACE = "FirstAidKit"; +ClassMedicConvertACE = "Medikit"; +if (isClass (configFile >> "CfgPatches" >> "vn_emm")) then { + ClassFirstAidConvertACE = "vn_o_item_firstaidkit"; + ClassMedicConvertACE = "vn_b_item_medikit_01"; +}; + +if (_killed isKindOf "CAManBase") then { + private _unit = _this select 0; + private _items = items _unit; + + // Medical + if (ClassMedicConvertACE in _items) then { + _unit removeItems ClassFirstAidConvertACE; + _unit removeItem ClassMedicConvertACE; + private _backpack = BackpackContainer _unit; + _backpack addItemCargoGlobal ["ACE_fieldDressing", colsog_medikit_convertAceFieldDressing]; + _backpack addItemCargoGlobal ["ACE_salineIV_500", colsog_medikit_convertAceSalineIv500]; + _backpack addItemCargoGlobal ["ACE_epinephrine", colsog_medikit_convertAceEpinephrine]; + _backpack addItemCargoGlobal ["ACE_morphine", colsog_medikit_convertAceMorphine]; + _backpack addItemCargoGlobal ["ACE_tourniquet", colsog_medikit_convertAceTourniquet]; + _backpack addItemCargoGlobal ["ACE_splint", colsog_medikit_convertAceSplint]; + }; + + if (ClassFirstAidConvertACE in _items) then { + while {({_x == ClassFirstAidConvertACE} count items _unit) > 0} do { + _unit removeItem ClassFirstAidConvertACE; + private _vest = vestContainer _unit; + _vest addItemCargoGlobal ["ACE_fieldDressing", colsog_firstAid_convertAceFieldDressing]; + _vest addItemCargoGlobal ["ACE_morphine", colsog_firstAid_convertAceMorphine]; + }; + }; +}; \ No newline at end of file diff --git a/functions/missionEventHandlers/entityKilled/fn_intelOnBodies.sqf b/functions/missionEventHandlers/entityKilled/fn_intelOnBodies.sqf new file mode 100644 index 0000000..c9b768d --- /dev/null +++ b/functions/missionEventHandlers/entityKilled/fn_intelOnBodies.sqf @@ -0,0 +1,34 @@ +/* + * Add intel OPFOR units when killed. + * + * Arguments: + * 0: killed OPFOR unit. + * + * Return values: + * None + */ + +params ["_killed"]; + +if (_killed isKindOf "O_Soldier_base_F") then { + private _unit = _this select 0; + private _items = items _unit; + + // Intel + private _chanceOfUnitCarryingIntel = [1, 100] call BIS_fnc_randomNum; + if (_chanceOfUnitCarryingIntel <= colsog_intel_chanceOfUnitCarryingIntel) then + { + private _chanceOfIntelFallingOnGround = [1, 100] call BIS_fnc_randomNum; + if (_chanceOfIntelFallingOnGround <= colsog_intel_chanceOfIntelFallingOnGround) then + { + // Intel can be found on the ground. + private _groundWeaponHolder = createVehicle ["groundweaponholder", getPosATL _unit, [], 1, "CAN_COLLIDE"]; + _groundWeaponHolder addItemCargoGlobal [colsog_intel_inventoryItem, 1]; + } else + { + // Intel can be found in the inventory of the unit. + private _uniform = uniformContainer _unit; + _uniform addItemCargoGlobal [colsog_intel_inventoryItem, 1]; + }; + }; +}; \ No newline at end of file diff --git a/init.sqf b/init.sqf index 9af0fd5..1dd92f4 100644 --- a/init.sqf +++ b/init.sqf @@ -61,8 +61,8 @@ execVM "functions\sensors\engine\init_colsog_engineSensor.sqf"; // init Gravity sensors placed by player execVM "functions\sensors\gravity\init_colsog_gravitySensor.sqf"; -// init convertMedicKit on killed units -execVM "functions\colsog_fn_firstAidConvertAce.sqf"; +// init missionEventHandlers on server +execVM "functions\colsog_fn_missionEventHandlers.sqf"; // run the script to create the nice vectored map borders // commented out by default as currently we only have borders for Cam Lao Nam From fad4e9f68222ad6490bf984433285b8345f263db Mon Sep 17 00:00:00 2001 From: gerard-sog Date: Sun, 20 Oct 2024 11:20:06 +0200 Subject: [PATCH 2/2] add link to youtube --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 8559c22..94d416a 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,8 @@ Compilation of scripts used during multiplayer PVE/PVP mission on Arma 3. Also f If you want to contribute to this project, see [CONTRIBUTING.md](https://github.com/gerard-sog/arma3-macvsog-columbia-scripts/blob/main/CONTRIBUTING.md). +YouTube channel showcasing the scripts: [YouTube - RT Columbia](https://www.youtube.com/@RTColumbia/videos) + ## Table of contents - [Requirements](#requirements) - [Installation](#installation)