diff --git a/.gitignore b/.gitignore index 0003c88..c2f9e6d 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,5 @@ # Notepad++ backups # *.bak + +.vscode/ diff --git a/CHANGELOG.md b/CHANGELOG.md index 860cc69..607dd54 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,29 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project badly attempts [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [4.2.0] - 2024-06-20 + +### Added + +- Custom remainsCollector script to replace and supplement the built in arma remainsCollector function +- New Resupply Boxes +- Ability to spawn spare tires and tracks at the arsenal and via Zeus module + + +### Changed + +- Split vehicle flags into colors and shapes for additional options +- Battalion Callsigns +- Allowed Equipment Definitions +- Resupply Box Contents +- Fixed incorrect ace carry variable setting + +### Removed + +- SMA mod references +- Extraneous server performance calculation broadcast to all clients +- Ability for pilots to check re-insertion queue + ## [4.1.2] - 2024-04-25 ### Changed diff --git a/custom_sounds.hpp b/custom_sounds.hpp new file mode 100644 index 0000000..9e66f13 --- /dev/null +++ b/custom_sounds.hpp @@ -0,0 +1,8 @@ + +// EXAMPLE +// class uncon_alarm +// { +// name = "uncon_alarm"; +// sound[] = {"AJ_CBRN_V2\sounds\AJ_warning_1.ogg", 0.9, 1, 5}; //directory, volume, pitch, range +// titles[]={}; +// }; \ No newline at end of file diff --git a/defines/ApprovedAssets.hpp b/defines/ApprovedAssets.hpp index 32a80f5..09b8218 100644 --- a/defines/ApprovedAssets.hpp +++ b/defines/ApprovedAssets.hpp @@ -1,22 +1,74 @@ // Lists approved fixed-wing and rotary vehicle types that mission makers can use in their missions. class ApprovedAssets { - // Fixed-wing aircraft - class USAF_A10 {callsign = "Ares";}; - class RHSGREF_A29B_HIDF {callsign = "Odyssey";}; - class USAF_C130J {callsign = "Hercules";}; - // Rotary aircraft - class RHS_MELB_MH6M {callsign = "Apollo";}; - class RHS_MELB_AH6M {callsign = "Artemis";}; - class RHS_MELB_H6M {callsign = "Icarus";}; - class RHS_CH_47F {callsign = "Achilles";}; - class ej_MH60MDAP4 {callsign = "Hades";}; - class RHS_UH60M {callsign = "Griffin";}; - class RHS_UH60M_MEV2 {callsign = "Dustoff";}; - class B_T_VTOL_01_INFANTRY_F {callsign = "Pegasus";}; - class B_T_VTOL_01_ARMED_F {callsign = "Spartan";}; - class RHS_AH64D {callsign = "Orion";}; - class RHS_AH1Z {callsign = "Athena";}; - class RHS_UH1Y {callsign = "Homer";}; - class rhsusf_CH53E_USMC {callsign = "Atlas";}; + // APC + class rhsusf_stryker_m1126_m2_d {callsign = "Katana"; category = "APC";}; + class rhsusf_stryker_m1126_mk19_d {callsign = "Katana"; category = "APC";}; + class rhsusf_stryker_m1127_m2_wd {callsign = "Katana"; category = "APC";}; + class rhsusf_stryker_m1132_m2_wd {callsign = "Katana"; category = "APC";}; + class rhsusf_stryker_m1134_wd {callsign = "Katana"; category = "APC";}; + class B_APC_Wheeled_01_cannon_F {callsign = "Rapier"; category = "APC";}; + class B_APC_Tracked_01_CRV_F {callsign = "DuctTape"; category = "APC";}; + // Rotary + class TF373_SOAR_MH47G_No_Rear_Guns {callsign = "Achilles"; category = "Rotary";}; + class TF373_SOAR_MH47G_No_Rear_Guns_EasyActions {callsign = "Achilles"; category = "Rotary";}; + class TF373_SOAR_MH47G {callsign = "Achilles"; category = "Rotary";}; + class TF373_SOAR_MH47G_EasyActions {callsign = "Achilles"; category = "Rotary";}; + class RHS_CH_47F_10 {callsign = "Achilles"; category = "Rotary";}; + class RHS_MELB_AH6M {callsign = "Artemis"; category = "Rotary";}; + class RHS_MELB_MH6M {callsign = "Apollo"; category = "Rotary";}; + class RHS_MELB_H6M {callsign = "Icarus"; category = "Rotary";}; + class RHS_UH60M {callsign = "Griffin"; category = "Rotary";}; + class RHS_UH60M2 {callsign = "Griffin"; category = "Rotary";}; + class RHS_UH60M_MEV {callsign = "Dustoff"; category = "Rotary";}; + class ej_MH60MDAP {callsign = "Hades"; category = "Rotary";}; + class ej_MH60MDAP16H {callsign = "Hades"; category = "Rotary";}; + class ej_MH60MDAP8H {callsign = "Hades"; category = "Rotary";}; + class ej_MH60MDAP4 {callsign = "Hades"; category = "Rotary";}; + class RHS_AH64DGrey {callsign = "Orion"; category = "Rotary";}; + // Air + // Truck + class rhsusf_M1078A1R_SOV_M2_D_fmtv_socom {callsign = "DuctTape"; category = "Truck";}; + class rhsusf_M1084A1R_SOV_M2_D_fmtv_socom {callsign = "DuctTape"; category = "Truck";}; + class rhsusf_M1078A1P2_B_WD_CP_fmtv_usarmy {callsign = ""; category = "Truck";}; + // Boats + class rhsusf_mkvsoc {callsign = "Poseidon"; category = "Boats";}; + class B_Boat_Armed_01_minigun_F {callsign = "Neptune"; category = "Boats";}; + // MRAP + class rhsusf_M1238A1_M2_socom_d {callsign = "Tanto"; category = "MRAP";}; + class rhsusf_M1238A1_Mk19_socom_d {callsign = "Tanto"; category = "MRAP";}; + class rhsusf_M1239_M2_socom_d {callsign = "DuctTape"; category = "MRAP";}; + class rhsusf_M1239_MK19_socom_d {callsign = "DuctTape"; category = "MRAP";}; + class rhsusf_m1245_m2crows_socom_d {callsign = "Dagger"; category = "MRAP";}; + class rhsusf_m1245_mk19crows_socom_d {callsign = "Dagger"; category = "MRAP";}; + class rhsusf_M1239_M2_Deploy_socom_d {callsign = "DuctTape"; category = "MRAP";}; + // TiltRotor + class B_T_VTOL_01_infantry_F {callsign = "Pegasus"; category = "TiltRotor";}; + class B_T_VTOL_01_armed_F {callsign = "Chimera"; category = "TiltRotor";}; + // Water + // Ground Vehicle + // Cars + class rhsusf_m1165a1_gmv_m134d_m240_socom_d {callsign = "Dagger"; category = "Cars";}; + class rhsusf_m1165a1_gmv_m2_m240_socom_d {callsign = "Dagger"; category = "Cars";}; + class rhsusf_m1165a1_gmv_mk19_m240_socom_d {callsign = "Dagger"; category = "Cars";}; + class rhsusf_mrzr4_d {callsign = ""; category = "Cars";}; + class UK3CB_B_M1030_NATO {callsign = ""; category = "Cars";}; + class B_T_LSV_01_AT_F {callsign = ""; category = "Cars";}; + class B_T_LSV_01_armed_F {callsign = ""; category = "Cars";}; + class C_Quadbike_01_F {callsign = ""; category = "Cars";}; + // Fixed-Wing + class B_Plane_CAS_01_dynamicLoadout_F {callsign = "Ares"; category = "Fixed-Wing";}; + class RHS_A10 {callsign = "Ares"; category = "Fixed-Wing";}; + class USAF_AC130U {callsign = "Odin"; category = "Fixed-Wing";}; + class USAF_C130J {callsign = "Hercules"; category = "Fixed-Wing";}; + class B_Plane_Fighter_01_F {callsign = "Xerxes"; category = "Fixed-Wing";}; + // Artillery + class rhsusf_M142_usarmy_WD {callsign = "Halberd"; category = "Artillery";}; + class UK3CB_B_M270_MLRS_HE_DES {callsign = "Halberd"; category = "Artillery";}; + class rhsusf_m109d_usarmy {callsign = "Glaive"; category = "Artillery";}; + class RHS_M119_D {callsign = "Mailman"; category = "Artillery";}; + class B_Mortar_01_F {callsign = "Hammer"; category = "Artillery";}; + // Armor + class B_AFV_Wheeled_01_cannon_F {callsign = "Gladius"; category = "Armor";}; + class B_AFV_Wheeled_01_up_cannon_F {callsign = "Gladius"; category = "Armor";}; }; \ No newline at end of file diff --git a/defines/BattalionInfo.hpp b/defines/BattalionInfo.hpp index 8be13e0..897cf85 100644 --- a/defines/BattalionInfo.hpp +++ b/defines/BattalionInfo.hpp @@ -4,11 +4,11 @@ // Define the callsigns for the Battalion -#define COMMAND_CALLSIGN SPARTAN +#define COMMAND_CALLSIGN STORMSURGE #define RRC_CALLSIGN TIGER #define MEDIC_CALLSIGN LIFELINE -#define ALPHA_CALLSIGN ROGUE -#define ECHO_CALLSIGN FIREBRAND +#define ALPHA_CALLSIGN SAVAGE +#define ECHO_CALLSIGN NIGHTFALL #define WPN_CALLSIGN BLACKFOOT // Define the frequencies for the Battalion diff --git a/defines/SupplyCrates.hpp b/defines/SupplyCrates.hpp index 600e989..26fe919 100644 --- a/defines/SupplyCrates.hpp +++ b/defines/SupplyCrates.hpp @@ -20,7 +20,8 @@ class SupplyCrates { {"ACE_40mm_Flare_ir",12}, {"rhsusf_200Rnd_556x45_mixed_soft_pouch_coyote",25}, {"rhsusf_20Rnd_762x51_m993_Mag",25}, - {"SmokeShell",12}, + {"SmokeShell",24}, + {"ACE_M84",24}, {"rhs_mag_m67",24}, {"1Rnd_Smoke_Grenade_shell",24}, {"1Rnd_SmokeRed_Grenade_shell",24}, @@ -28,17 +29,13 @@ class SupplyCrates { {"1Rnd_SmokeYellow_Grenade_shell",12}, {"rhs_mag_30Rnd_556x45_M855A1_Stanag",25}, {"ACE_30Rnd_556x45_Stanag_M995_AP_mag",75}, - {"SMA_30Rnd_762x35_BLK_EPR",25}, - {"SMA_20Rnd_762x51mm_M80A1_EPR",25}, - {"SMA_20Rnd_762x51mm_M80A1_EPR_Tracer",25}, - {"SMA_20Rnd_762x51mm_Mk316_Mod_0_Special_Long_Range",25}, - {"SMA_20Rnd_762x51mm_Mk316_Mod_0_Special_Long_Range_Tracer",25}, {"Tier1_250Rnd_762x51_Belt_M993_AP",15}, {"ACE_20Rnd_762x51_Mag_Tracer",25}, {"ACE_20Rnd_762x51_M993_AP_Mag",25}, {"rhsusf_20Rnd_762x51_SR25_m993_Mag",25}, {"Tier1_20Rnd_762x51_M993_SR25_Mag",25}, - {"DemoCharge_Remote_Mag",16} + {"KAR_20Rnd_Fury_blk",25}, + {"rhsusf_m112_mag",25}, }; items[] = {}; }; @@ -82,6 +79,7 @@ class SupplyCrates { {"ACE_splint",48}, {"ACE_morphine",50}, {"ACE_epinephrine",50}, + {"ACE_painkillers",20}, {"ACE_bloodIV",75}, {"ACE_bloodIV_500",50}, {"ACE_bloodIV_250",25}, @@ -132,6 +130,42 @@ class SupplyCrates { items[] = {}; }; + class SquadUtility { + boxClass = "Box_Syndicate_Ammo_F"; + displayName = "Squad Utility Supply Crate"; + tooltip = "A crate containing Flairs, Smokes, Breaching Charges"; + icon = "\A3\ui_f\data\map\vehicleicons\iconCrateAmmo_ca.paa"; + + backpacks[] = {}; + weapons[] = {}; + magazines[] = {}; + items[] = { + {"ACE_Chemlight_HiYellow",20}, + {"ACE_Chemlight_HiBlue",20}, + {"ACE_Chemlight_HiGreen",20}, + {"ACE_Chemlight_HiRed",20}, + {"ACE_Chemlight_UltraHiOrange",20}, + {"ACE_HandFlare_Yellow",20}, + {"ACE_HandFlare_White",20}, + {"ACE_HandFlare_Red",20}, + {"ACE_HandFlare_Green",20}, + {"ACE_Chemlight_IR",20}, + {"ACE_IR_Strobe_Item",20}, + {"SmokeShellYellow",20}, + {"SmokeShellBlue",20}, + {"SmokeShellPurple",20}, + {"SmokeShellOrange",20}, + {"SmokeShellGreen",20}, + {"SmokeShellRed",20}, + {"tsp_popperCharge_auto_mag",10}, + {"tsp_frameCharge_mag",20}, + {"tsp_stickCharge_auto_mag",10}, + {"ACE_CableTie",25}, + {"DemoCharge_Remote_Mag",15}, + {"TFAR_anprc152",3}, + }; + }; + class MortarMk6Resupply { boxClass = "Box_NATO_WpsSpecial_F"; displayName = "Mortar MK6 Supply Crate"; @@ -176,4 +210,28 @@ class SupplyCrates { }; items[] = {}; }; + + class ResupplyTire { + boxClass = "ACE_Wheel"; + displayName = "Vehicle Tire"; + tooltip = "A single tire for replacement"; + icon = "A3\ui_f\data\igui\cfg\simpletasks\types\repair_ca.paa"; + + backpacks[] = {}; + weapons[] = {}; + magazines[] = {}; + items[] = {}; + }; + + class ResupplyTrack { + boxClass = "ACE_Track"; + displayName = "Vehicle Track"; + tooltip = "A single track for replacement"; + icon = "z\ace\addons\repair\ui\patch_ca.paa"; + + backpacks[] = {}; + weapons[] = {}; + magazines[] = {}; + items[] = {}; + }; }; \ No newline at end of file diff --git a/defines/VehicleFlags.hpp b/defines/VehicleFlags.hpp index 2e13fb2..752753a 100644 --- a/defines/VehicleFlags.hpp +++ b/defines/VehicleFlags.hpp @@ -84,30 +84,159 @@ class VehicleFlags { actionID = "flag_simpleshape"; actionTitle = "Simple Shapes"; - class GreenOctagon { - actionID = "flag_simpleshape_greenoctagon"; - actionTitle = "Green Octagon"; - texture = "textures\simple_shape\flag_simpleshape_greenoctagon_co.paa"; + class Blue { + actionID = "flags_simpleshape_blue"; + actionTitle = "Blue"; + + class BlueCircle { + actionID = "flag_simpleshape_bluecircle"; + actionTitle = "Blue Circle"; + texture = "textures\simple_shape\flag_simpleshape_bluecircle_co.paa"; + }; + class BlueOctagon { + actionID = "flag_simpleshape_blueoctagon"; + actionTitle = "Blue Octagon"; + texture = "textures\simple_shape\flag_simpleshape_blueoctagon_co.paa"; + }; + class BluePentagon { + actionID = "flag_simpleshape_bluepentagon"; + actionTitle = "Blue Pentagon"; + texture = "textures\simple_shape\flag_simpleshape_bluepentagon_co.paa"; + }; + class BlueSquare { + actionID = "flag_simpleshape_bluesquare"; + actionTitle = "Blue Square"; + texture = "textures\simple_shape\flag_simpleshape_bluesquare_co.paa"; + }; + class BlueTriangle { + actionID = "flag_simpleshape_bluetriangle"; + actionTitle = "Blue Triangle"; + texture = "textures\simple_shape\flag_simpleshape_bluetriangle_co.paa"; + }; }; - class BlueCircle { - actionID = "flag_simpleshape_bluecircle"; - actionTitle = "Blue Circle"; - texture = "textures\simple_shape\flag_simpleshape_bluecircle_co.paa"; + + class Green { + actionID = "flags_simpleshape_green"; + actionTitle = "Green"; + + class GreenCircle { + actionID = "flag_simpleshape_greencircle"; + actionTitle = "Green Circle"; + texture = "textures\simple_shape\flag_simpleshape_greencircle_co.paa"; + }; + class GreenOctagon { + actionID = "flag_simpleshape_greenoctagon"; + actionTitle = "Green Octagon"; + texture = "textures\simple_shape\flag_simpleshape_greenoctagon_co.paa"; + }; + class GreenPentagon { + actionID = "flag_simpleshape_greenpentagon"; + actionTitle = "Green Pentagon"; + texture = "textures\simple_shape\flag_simpleshape_greenpentagon_co.paa"; + }; + class GreenSquare { + actionID = "flag_simpleshape_greensquare"; + actionTitle = "Green Square"; + texture = "textures\simple_shape\flag_simpleshape_greensquare_co.paa"; + }; + class GreenTriangle { + actionID = "flag_simpleshape_greentriangle"; + actionTitle = "Green Triangle"; + texture = "textures\simple_shape\flag_simpleshape_greentriangle_co.paa"; + }; }; - class OrangeSquare { - actionID = "flag_simpleshape_orangesquare"; - actionTitle = "Orange Square"; - texture = "textures\simple_shape\flag_simpleshape_orangesquare_co.paa"; + + class Orange { + actionID = "flags_simpleshape_orange"; + actionTitle = "Orange"; + + class OrangeCircle { + actionID = "flag_simpleshape_orangecircle"; + actionTitle = "Orange Circle"; + texture = "textures\simple_shape\flag_simpleshape_orangecircle_co.paa"; + }; + class OrangeOctagon { + actionID = "flag_simpleshape_orangeoctagon"; + actionTitle = "Orange Octagon"; + texture = "textures\simple_shape\flag_simpleshape_orangeoctagon_co.paa"; + }; + class OrangePentagon { + actionID = "flag_simpleshape_orangepentagon"; + actionTitle = "Orange Pentagon"; + texture = "textures\simple_shape\flag_simpleshape_orangepentagon_co.paa"; + }; + class OrangeSquare { + actionID = "flag_simpleshape_orangesquare"; + actionTitle = "Orange Square"; + texture = "textures\simple_shape\flag_simpleshape_orangesquare_co.paa"; + }; + class OrangeTriangle { + actionID = "flag_simpleshape_orangetriangle"; + actionTitle = "Orange Triangle"; + texture = "textures\simple_shape\flag_simpleshape_orangetriangle_co.paa"; + }; }; - class PinkTriangle { - actionID = "flag_simpleshape_pinktriangle"; - actionTitle = "Pink Triangle"; - texture = "textures\simple_shape\flag_simpleshape_pinktriangle_co.paa"; + + class Pink { + actionID = "flags_simpleshape_pink"; + actionTitle = "Pink"; + + class PinkCircle { + actionID = "flag_simpleshape_pinkcircle"; + actionTitle = "Pink Circle"; + texture = "textures\simple_shape\flag_simpleshape_pinkcircle_co.paa"; + }; + class PinkOctagon { + actionID = "flag_simpleshape_pinkoctagon"; + actionTitle = "Pink Octagon"; + texture = "textures\simple_shape\flag_simpleshape_pinkoctagon_co.paa"; + }; + class PinkPentagon { + actionID = "flag_simpleshape_pinkpentagon"; + actionTitle = "Pink Pentagon"; + texture = "textures\simple_shape\flag_simpleshape_pinkpentagon_co.paa"; + }; + class PinkSquare { + actionID = "flag_simpleshape_pinksquare"; + actionTitle = "Pink Square"; + texture = "textures\simple_shape\flag_simpleshape_pinksquare_co.paa"; + }; + class PinkTriangle { + actionID = "flag_simpleshape_pinktriangle"; + actionTitle = "Pink Triangle"; + texture = "textures\simple_shape\flag_simpleshape_pinktriangle_co.paa"; + }; }; - class RedPentagon { - actionID = "flag_simpleshape_redpentagon"; - actionTitle = "Red Pentagon"; - texture = "textures\simple_shape\flag_simpleshape_redpentagon_co.paa"; + + class Red { + actionID = "flags_simpleshape_red"; + actionTitle = "Red"; + + class RedCircle { + actionID = "flag_simpleshape_redcircle"; + actionTitle = "Red Circle"; + texture = "textures\simple_shape\flag_simpleshape_redcircle_co.paa"; + }; + class RedOctagon { + actionID = "flag_simpleshape_redoctagon"; + actionTitle = "Red Octagon"; + texture = "textures\simple_shape\flag_simpleshape_redoctagon_co.paa"; + }; + class RedPentagon { + actionID = "flag_simpleshape_redpentagon"; + actionTitle = "Red Pentagon"; + texture = "textures\simple_shape\flag_simpleshape_redpentagon_co.paa"; + }; + class RedSquare { + actionID = "flag_simpleshape_redsquare"; + actionTitle = "Red Square"; + texture = "textures\simple_shape\flag_simpleshape_redsquare_co.paa"; + }; + class RedTriangle { + actionID = "flag_simpleshape_redtriangle"; + actionTitle = "Red Triangle"; + texture = "textures\simple_shape\flag_simpleshape_redtriangle_co.paa"; + }; }; }; diff --git a/description.ext b/description.ext index 1efe1da..dd88aa5 100644 --- a/description.ext +++ b/description.ext @@ -96,6 +96,10 @@ class CfgFunctions { #include "custom_scripts.hpp" }; +class CfgSounds { + #include "custom_sounds.hpp" +}; + class CfgLeaflets { #include "custom_leaflets.hpp" }; diff --git a/framework/CfgFunctions.hpp b/framework/CfgFunctions.hpp index 744bea3..55ce5b1 100644 --- a/framework/CfgFunctions.hpp +++ b/framework/CfgFunctions.hpp @@ -120,6 +120,7 @@ class DOUBLES(PREFIX,performance) { class addServerStatsPFH {}; class calculateServerStats {}; class addEmptyGroupCleanupPFH {}; + class addDeadUnitCleanupPFH {}; }; }; @@ -174,6 +175,8 @@ class DOUBLES(PREFIX,vehicleFlags) { class addFlagActions {}; class draw3D {}; class getActionsFlagCategories {}; + class compileFlagAction {}; + class compileFlagCategoryAction {}; class getVehicleFlagsCfg {}; class isClassExcluded {}; }; diff --git a/framework/init/functions/fn_initServer.sqf b/framework/init/functions/fn_initServer.sqf index 9523875..4b512bd 100644 --- a/framework/init/functions/fn_initServer.sqf +++ b/framework/init/functions/fn_initServer.sqf @@ -21,6 +21,37 @@ _curators = allMissionObjects "ModuleCurator_F"; _x removeCuratorAddons ["A3_Modules_F_Curator_Lightning"]; } foreach _curators; +// add dead unit time marking for custom garbage cleanup function +addMissionEventHandler ["EntityKilled", { + params ["_unit", "_killer", "_instigator", "_useEffects"]; + + if not (_unit isKindOf "CAManBase") exitWith {}; + + _unit setVariable["milsim_death_time", time]; + + _unit addEventHandler ["Deleted", { + params ["_entity"]; + _remainsCollector = _entity getVariable["milsim_garbage_collected", false]; + _decayTime = time - (_entity getVariable ["milsim_death_time", time]); + + _i = allUsers select { (getUserInfo _x)#1 isEqualTo _ownerId;}; + _owner = if ( _i isEqualTo []) then [ { "server" }, { (getUserInfo (_i#0))#3 }]; + + diag_log format["isServer: %5, deleted object owned by: %1 via remainsCollector: %2 after %3 seconds of type: %4", _owner, str (not _remainsCollector), _decayTime, _entity, isServer]; + }]; +}]; + + +// add zeus deletion logging to curator objects +{ + _x addEventHandler ["CuratorObjectDeleted", { + params ["_curator", "_entity"]; + + _decayTime = time - (_entity getVariable ["milsim_death_time", time]); + diag_log format["deleted object: %1 via curator: %2 after %3 seconds", _entity, name _curator, _decayTime]; + }]; +} foreach _curators; + // declare init complete to other modules missionNamespace setVariable [QGVARMAIN(complete), true, true]; diff --git a/framework/performance/functions/fn_addCBASettings.sqf b/framework/performance/functions/fn_addCBASettings.sqf index 947c1cb..cbe5fc7 100644 --- a/framework/performance/functions/fn_addCBASettings.sqf +++ b/framework/performance/functions/fn_addCBASettings.sqf @@ -1,5 +1,9 @@ #include "..\script_component.hpp" +//--------------------- +// Garbage Collection +//--------------------- + [ QGVAR(emptyGroupCleanup_enable), "CHECKBOX", @@ -22,6 +26,28 @@ } ] call CBA_fnc_addSetting; +[ + QGVAR(deadUnitCleanup_enable), + "CHECKBOX", + "Dead Unit Cleanup Enabled", + [QUOTE(SETTINGS_GROUP_NAME), QUOTE(COMPONENT_BEAUTIFIED)], + true, + true, + { + params ["_value"]; + [ + QGVAR(deadUnitCleanup_enable), + _value + ] call EFUNC(common,logSettingChanged); + + if (!isNull (missionNamespace getVariable [QGVAR(deadUnitCleanupPFH), locationNull])) then { + deleteLocation GVAR(deadUnitCleanupPFH); + }; + + call FUNC(addDeadUnitCleanupPFH); + } +] call CBA_fnc_addSetting; + //--------------------- // Server CPS //--------------------- diff --git a/framework/performance/functions/fn_addDeadUnitCleanupPFH.sqf b/framework/performance/functions/fn_addDeadUnitCleanupPFH.sqf new file mode 100644 index 0000000..0c91dbd --- /dev/null +++ b/framework/performance/functions/fn_addDeadUnitCleanupPFH.sqf @@ -0,0 +1,55 @@ +#include "..\script_component.hpp" + +[ + LEVEL_INFO, + QUOTE(COMPONENT), + "Initializing dead unit deletion PFH", + [] +] call EFUNC(common,log); + +GVAR(deadUnitCleanupPFH) = [ + { + _maxTime = getMissionConfigValue ["corpseRemovalMaxTime", 300] * 1.5; + _maxDead = getMissionConfigValue ["corpseLimit", 80]; + + // _dead = allDead select { (_x isKindOf "CAManBase") and ( ( (time - (_x getVariable ["milsim_death_time", time] ) ) > (_maxTime * 1.5) ) ) }; + // _dead = _dead apply { [ (time - (_x getVariable ["milsim_death_time", time] ) ), _x ] }; + + _dead = []; + { + if not (_x isKindOf "CAManBase") then { continue }; + if not (isInRemainsCollector _x) then { continue }; + _dead pushBack [time - (_x getVariable ["milsim_death_time", time] ), _x]; + } forEach allDead; + + _dead sort false; + _toDelete = 0 max ( (count _dead ) - _maxDead ); + _dead = _dead select [0, _toDelete]; + { + _unit = _x#1; + _unit setVariable ["milsim_garbage_collected", true]; + deleteVehicle (_unit); + } foreach _dead; + }, + 450, + [], + { // on creation + [ + LEVEL_INFO, + QUOTE(COMPONENT), + "dead unit deletion PFH loaded", + [] + ] call EFUNC(common,log); + }, + { // on deletion + [ + LEVEL_INFO, + QUOTE(COMPONENT), + "dead unit deletion PFH unloaded", + [] + ] call EFUNC(common,log); + }, + { (missionNamespace getVariable [QGVAR(deadUnitCleanup_enable), false]) }, + { false }, + [] +] call CBA_fnc_createPerFrameHandlerObject; diff --git a/framework/reinsert/client/fn_initClient.sqf b/framework/reinsert/client/fn_initClient.sqf index e770796..a73a3f1 100644 --- a/framework/reinsert/client/fn_initClient.sqf +++ b/framework/reinsert/client/fn_initClient.sqf @@ -14,7 +14,7 @@ localNamespace setVariable [QGVAR(checkReinsertQueueClassesAdded), []]; localNamespace setVariable [QGVAR(lastReinsertQueueCheck), diag_tickTime]; // add actions to pilot classes, and don't apply to child classes -[["B_Helipilot_F", "B_helicrew_F"], false] call FUNC(addCheckQueueSelfAction); +// [["B_Helipilot_F", "B_helicrew_F"], false] call FUNC(addCheckQueueSelfAction); ///////////////////////////////////////////////////// diff --git a/framework/resupply/functions/fn_createBox.sqf b/framework/resupply/functions/fn_createBox.sqf index 6bbfbb9..49f3f0d 100644 --- a/framework/resupply/functions/fn_createBox.sqf +++ b/framework/resupply/functions/fn_createBox.sqf @@ -162,7 +162,7 @@ if (isNil "_items") exitWith { [_box,1] call ace_cargo_fnc_setSize; // ignore weight restrictions for carry/drag -_box setVariable ["ace_ignoreWeightCarry", true, true]; +_box setVariable ["ace_dragging_ignoreWeightCarry", true, true]; // Return the box _box; \ No newline at end of file diff --git a/framework/script_version.hpp b/framework/script_version.hpp index 098984e..59fc8a7 100644 --- a/framework/script_version.hpp +++ b/framework/script_version.hpp @@ -1,4 +1,4 @@ #define MAJOR 4 -#define MINOR 1 -#define PATCHLVL 2 +#define MINOR 2 +#define PATCHLVL 0 #define BUILD 0 diff --git a/framework/vehicleFlags/functions/fn_compileFlagAction.sqf b/framework/vehicleFlags/functions/fn_compileFlagAction.sqf new file mode 100644 index 0000000..b78fb2b --- /dev/null +++ b/framework/vehicleFlags/functions/fn_compileFlagAction.sqf @@ -0,0 +1,40 @@ +#include "..\script_component.hpp" + +params ["_target", "_player", "_params", "_flagOptionCfg"]; +_params params ["_rootActionID", "_flagCategoryActionID", "_flagSubclassesCfgs"]; + +private _flagOptionID = getText(_flagOptionCfg >> "actionID"); +private _flagOptionTitle = getText(_flagOptionCfg >> "actionTitle"); +private _flagOptionTexture = getText(_flagOptionCfg >> "texture"); + +// if the texture doesn't exist at the config path, skip this flag option +if (not (fileExists _flagOptionTexture)) then { + diag_log format ["WARN: Flag option texture not found: %1", _flagOptionTexture]; + continue +}; + +// diag_log format ["NewFlagOption: %1 %2", _flagOptionID, _flagOptionData]; + +private _newFlagOption = [ + + _rootActionID + "_" + _flagCategoryActionID + "_" + _flagOptionID, // id + _flagOptionTitle, // displayed title + _flagOptionTexture, // flag icon + { + params ["_target", "_player", "_params"]; + _params params ["_flagOptionTexture"]; + _target forceFlagTexture _flagOptionTexture; + }, // statement + { + params ["_target", "_player", "_params"]; + alive _target; + // true; + }, // condition + nil, // child code + [_flagOptionTexture], // params + nil, // position + 4, // distance + [false, false, false, false, false] // other params +] call ace_interact_menu_fnc_createAction; + +_newFlagOption; \ No newline at end of file diff --git a/framework/vehicleFlags/functions/fn_compileFlagCategoryAction.sqf b/framework/vehicleFlags/functions/fn_compileFlagCategoryAction.sqf new file mode 100644 index 0000000..1df4ac5 --- /dev/null +++ b/framework/vehicleFlags/functions/fn_compileFlagCategoryAction.sqf @@ -0,0 +1,54 @@ +#include "..\script_component.hpp" + +// diag_log format ["NewFlagCategory: %1 %2", _flagCategory, _flagOptions]; + +params ["_rootActionID", "_flagCategoryCfg"]; +private _flagCategoryActionID = getText(_flagCategoryCfg >> "actionID"); +private _flagCategoryTitle = getText(_flagCategoryCfg >> "actionTitle"); + +private _flagSubclassesCfgs = _flagCategoryCfg call BIS_fnc_returnChildren; + +private _flagCategoryAction = [ + _rootActionID + "_" + _flagCategoryActionID, // id + _flagCategoryTitle, // displayed title + getText((_flagSubclassesCfgs#0) >> "texture"), // flag icon for category - use first flag option + {true}, // statement + { + params ["_target", "_player", "_params"]; + alive _target; + // true; + }, // condition + { + // generate child code under category + // this is the level where actual flag options will be displayed + params ["_target", "_player", "_params"]; + // these params are passed from the parent action + _params params ["_rootActionID", "_flagCategoryActionID", "_flagSubclassesCfgs"]; + + private _individualFlagActions = []; + { // forEach _flagSubclassesCfgs; // we'll generate flag options for each category + private _flagOptionCfg = _x; + + // generate flag option for this flag option + private _newFlagOption = [ + _target, + _player, + _params, + _flagOptionCfg + ] call FUNC(compileFlagAction); + + // add flag option to category subactions + _individualFlagActions pushBack [_newFlagOption, [], _target]; + } forEach _flagSubclassesCfgs; + + // return the generated flag options to the category as child actions + _individualFlagActions; + }, // child code + [_rootActionID, _flagCategoryActionID, _flagSubclassesCfgs], // params + nil, // position + 4, // distance + [false, false, false, false, false], // other params + nil // modifier function code +] call ace_interact_menu_fnc_createAction; + +_flagCategoryAction; \ No newline at end of file diff --git a/framework/vehicleFlags/functions/fn_getActionsFlagCategories.sqf b/framework/vehicleFlags/functions/fn_getActionsFlagCategories.sqf index 1c9aabc..41c74d4 100644 --- a/framework/vehicleFlags/functions/fn_getActionsFlagCategories.sqf +++ b/framework/vehicleFlags/functions/fn_getActionsFlagCategories.sqf @@ -5,86 +5,25 @@ 0: STRING - Parent action ID 1: ARRAY - Flag category configs */ +#include "..\script_component.hpp" params ["_rootActionID", "_flagCategoryCfgs"]; private _allCategoryActions = []; { - // diag_log format ["NewFlagCategory: %1 %2", _flagCategory, _flagOptions]; - - private _flagCategoryCfg = _x; - private _flagCategoryActionID = getText(_flagCategoryCfg >> "actionID"); - private _flagCategoryTitle = getText(_flagCategoryCfg >> "actionTitle"); - - private _flagSubclassesCfgs = _flagCategoryCfg call BIS_fnc_returnChildren; - - private _flagCategoryAction = [ - _rootActionID + "_" + _flagCategoryActionID, // id - _flagCategoryTitle, // displayed title - getText((_flagSubclassesCfgs#0) >> "texture"), // flag icon for category - use first flag option - {true}, // statement + _flagCategoryActions = []; + if (configName _x == "SimpleShapes") then { { - params ["_target", "_player", "_params"]; - alive _target; - // true; - }, // condition - { - // generate child code under category - // this is the level where actual flag options will be displayed - params ["_target", "_player", "_params"]; - _params params ["_rootActionID", "_flagCategoryActionID", "_flagSubclassesCfgs"]; - - private _individualFlagActions = []; - { // forEach _flagSubclassesCfgs; - private _flagOptionCfg = _x; - private _flagOptionID = getText(_flagOptionCfg >> "actionID"); - private _flagOptionTitle = getText(_flagOptionCfg >> "actionTitle"); - private _flagOptionTexture = getText(_flagOptionCfg >> "texture"); - - // if the texture doesn't exist at the config path, skip this flag option - if (not (fileExists _flagOptionTexture)) then {continue}; - - // diag_log format ["NewFlagOption: %1 %2", _flagOptionID, _flagOptionData]; - - private _newFlagOption = [ - - _rootActionID + "_" + _flagCategoryActionID + "_" + _flagOptionID, // id - _flagOptionTitle, // displayed title - _flagOptionTexture, // flag icon - { - params ["_target", "_player", "_params"]; - _params params ["_flagOptionTexture"]; - _target forceFlagTexture _flagOptionTexture; - }, // statement - { - params ["_target", "_player", "_params"]; - alive _target; - // true; - }, // condition - nil, // child code - [_flagOptionTexture], // params - nil, // position - 4, // distance - [false, false, false, false, false] // other params - ] call ace_interact_menu_fnc_createAction; - - // add flag option to category subactions - _individualFlagActions pushBack [_newFlagOption, [], _target]; - } forEach _flagSubclassesCfgs; - - // return the generated flag options to the category as child actions - _individualFlagActions; - }, // child code - [_rootActionID, _flagCategoryActionID, _flagSubclassesCfgs], // params - nil, // position - 4, // distance - [false, false, false, false, false], // other params - nil // modifier function code - ] call ace_interact_menu_fnc_createAction; - + _flagCategoryActions pushBack ([_rootActionID, _x] call FUNC(compileFlagCategoryAction)); + } forEach (_x call BIS_fnc_returnChildren); + } else { + _flagCategoryActions pushBack ([_rootActionID, _x] call FUNC(compileFlagCategoryAction)); + }; // add category to all category actions array - _allCategoryActions pushBack [_flagCategoryAction, [], _target]; + { + _allCategoryActions pushBack [_x, [], _target]; + } forEach _flagCategoryActions; } forEach _flagCategoryCfgs; _allCategoryActions; \ No newline at end of file diff --git a/textures/simple_shape/flag_simpleshape_bluecircle_co.paa b/textures/simple_shape/flag_simpleshape_bluecircle_co.paa index 58e6d42..08bc21e 100644 Binary files a/textures/simple_shape/flag_simpleshape_bluecircle_co.paa and b/textures/simple_shape/flag_simpleshape_bluecircle_co.paa differ diff --git a/textures/simple_shape/flag_simpleshape_blueoctagon_co.paa b/textures/simple_shape/flag_simpleshape_blueoctagon_co.paa new file mode 100644 index 0000000..dc7a6bd Binary files /dev/null and b/textures/simple_shape/flag_simpleshape_blueoctagon_co.paa differ diff --git a/textures/simple_shape/flag_simpleshape_bluepentagon_co.paa b/textures/simple_shape/flag_simpleshape_bluepentagon_co.paa new file mode 100644 index 0000000..1f6b311 Binary files /dev/null and b/textures/simple_shape/flag_simpleshape_bluepentagon_co.paa differ diff --git a/textures/simple_shape/flag_simpleshape_bluesquare_co.paa b/textures/simple_shape/flag_simpleshape_bluesquare_co.paa new file mode 100644 index 0000000..d3e822f Binary files /dev/null and b/textures/simple_shape/flag_simpleshape_bluesquare_co.paa differ diff --git a/textures/simple_shape/flag_simpleshape_bluetriangle_co.paa b/textures/simple_shape/flag_simpleshape_bluetriangle_co.paa new file mode 100644 index 0000000..6dc8db8 Binary files /dev/null and b/textures/simple_shape/flag_simpleshape_bluetriangle_co.paa differ diff --git a/textures/simple_shape/flag_simpleshape_greencircle_co.paa b/textures/simple_shape/flag_simpleshape_greencircle_co.paa new file mode 100644 index 0000000..8e8ca88 Binary files /dev/null and b/textures/simple_shape/flag_simpleshape_greencircle_co.paa differ diff --git a/textures/simple_shape/flag_simpleshape_greenoctagon_co.paa b/textures/simple_shape/flag_simpleshape_greenoctagon_co.paa index e513171..fb53a12 100644 Binary files a/textures/simple_shape/flag_simpleshape_greenoctagon_co.paa and b/textures/simple_shape/flag_simpleshape_greenoctagon_co.paa differ diff --git a/textures/simple_shape/flag_simpleshape_greenpentagon_co.paa b/textures/simple_shape/flag_simpleshape_greenpentagon_co.paa new file mode 100644 index 0000000..f6a295a Binary files /dev/null and b/textures/simple_shape/flag_simpleshape_greenpentagon_co.paa differ diff --git a/textures/simple_shape/flag_simpleshape_greensquare_co.paa b/textures/simple_shape/flag_simpleshape_greensquare_co.paa new file mode 100644 index 0000000..e9975a3 Binary files /dev/null and b/textures/simple_shape/flag_simpleshape_greensquare_co.paa differ diff --git a/textures/simple_shape/flag_simpleshape_greentriangle_co.paa b/textures/simple_shape/flag_simpleshape_greentriangle_co.paa new file mode 100644 index 0000000..3145f77 Binary files /dev/null and b/textures/simple_shape/flag_simpleshape_greentriangle_co.paa differ diff --git a/textures/simple_shape/flag_simpleshape_orangecircle_co.paa b/textures/simple_shape/flag_simpleshape_orangecircle_co.paa new file mode 100644 index 0000000..0cd8f25 Binary files /dev/null and b/textures/simple_shape/flag_simpleshape_orangecircle_co.paa differ diff --git a/textures/simple_shape/flag_simpleshape_orangeoctagon_co.paa b/textures/simple_shape/flag_simpleshape_orangeoctagon_co.paa new file mode 100644 index 0000000..2311679 Binary files /dev/null and b/textures/simple_shape/flag_simpleshape_orangeoctagon_co.paa differ diff --git a/textures/simple_shape/flag_simpleshape_orangepentagon_co.paa b/textures/simple_shape/flag_simpleshape_orangepentagon_co.paa new file mode 100644 index 0000000..96002fa Binary files /dev/null and b/textures/simple_shape/flag_simpleshape_orangepentagon_co.paa differ diff --git a/textures/simple_shape/flag_simpleshape_orangesquare_co.paa b/textures/simple_shape/flag_simpleshape_orangesquare_co.paa index 7b12c21..0c23af6 100644 Binary files a/textures/simple_shape/flag_simpleshape_orangesquare_co.paa and b/textures/simple_shape/flag_simpleshape_orangesquare_co.paa differ diff --git a/textures/simple_shape/flag_simpleshape_orangetriangle_co.paa b/textures/simple_shape/flag_simpleshape_orangetriangle_co.paa new file mode 100644 index 0000000..27af985 Binary files /dev/null and b/textures/simple_shape/flag_simpleshape_orangetriangle_co.paa differ diff --git a/textures/simple_shape/flag_simpleshape_pinkcircle_co.paa b/textures/simple_shape/flag_simpleshape_pinkcircle_co.paa new file mode 100644 index 0000000..075c947 Binary files /dev/null and b/textures/simple_shape/flag_simpleshape_pinkcircle_co.paa differ diff --git a/textures/simple_shape/flag_simpleshape_pinkoctagon_co.paa b/textures/simple_shape/flag_simpleshape_pinkoctagon_co.paa new file mode 100644 index 0000000..fda6e0d Binary files /dev/null and b/textures/simple_shape/flag_simpleshape_pinkoctagon_co.paa differ diff --git a/textures/simple_shape/flag_simpleshape_pinkpentagon_co.paa b/textures/simple_shape/flag_simpleshape_pinkpentagon_co.paa new file mode 100644 index 0000000..1b18e3c Binary files /dev/null and b/textures/simple_shape/flag_simpleshape_pinkpentagon_co.paa differ diff --git a/textures/simple_shape/flag_simpleshape_pinksquare_co.paa b/textures/simple_shape/flag_simpleshape_pinksquare_co.paa new file mode 100644 index 0000000..95a37f6 Binary files /dev/null and b/textures/simple_shape/flag_simpleshape_pinksquare_co.paa differ diff --git a/textures/simple_shape/flag_simpleshape_pinktriangle_co.paa b/textures/simple_shape/flag_simpleshape_pinktriangle_co.paa index 7fe2735..dbecfa3 100644 Binary files a/textures/simple_shape/flag_simpleshape_pinktriangle_co.paa and b/textures/simple_shape/flag_simpleshape_pinktriangle_co.paa differ diff --git a/textures/simple_shape/flag_simpleshape_redcircle_co.paa b/textures/simple_shape/flag_simpleshape_redcircle_co.paa new file mode 100644 index 0000000..ac63139 Binary files /dev/null and b/textures/simple_shape/flag_simpleshape_redcircle_co.paa differ diff --git a/textures/simple_shape/flag_simpleshape_redoctagon_co.paa b/textures/simple_shape/flag_simpleshape_redoctagon_co.paa new file mode 100644 index 0000000..49bb1f4 Binary files /dev/null and b/textures/simple_shape/flag_simpleshape_redoctagon_co.paa differ diff --git a/textures/simple_shape/flag_simpleshape_redpentagon_co.paa b/textures/simple_shape/flag_simpleshape_redpentagon_co.paa index d6fcac8..9556c95 100644 Binary files a/textures/simple_shape/flag_simpleshape_redpentagon_co.paa and b/textures/simple_shape/flag_simpleshape_redpentagon_co.paa differ diff --git a/textures/simple_shape/flag_simpleshape_redsquare_co.paa b/textures/simple_shape/flag_simpleshape_redsquare_co.paa new file mode 100644 index 0000000..fea6018 Binary files /dev/null and b/textures/simple_shape/flag_simpleshape_redsquare_co.paa differ diff --git a/textures/simple_shape/flag_simpleshape_redtriangle_co.paa b/textures/simple_shape/flag_simpleshape_redtriangle_co.paa new file mode 100644 index 0000000..4e64dc5 Binary files /dev/null and b/textures/simple_shape/flag_simpleshape_redtriangle_co.paa differ