Compare commits
16 Commits
4.1.1
...
87ebbae31c
| Author | SHA1 | Date | |
|---|---|---|---|
| 87ebbae31c | |||
| 408228f07b | |||
| 736e90e305 | |||
| f17fff8363 | |||
| 64bc303893 | |||
| 80247a01d0 | |||
|
7322799b78
|
|||
|
|
db7bdf1ecd | ||
|
|
0f8783ffa9 | ||
|
|
fac86f18f0 | ||
|
|
87b6f359c1 | ||
|
|
cbd8b5963e | ||
|
|
09ee014912 | ||
|
|
5b482b022f | ||
|
|
8afe420527 | ||
| ff98546907 |
@@ -4,6 +4,14 @@ 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.1.2] - 2024-04-25
|
||||
|
||||
### Changed
|
||||
|
||||
- Fix internal versioning
|
||||
- Swap resupply box 5.56 magazines due to mod conflict
|
||||
- Group deletion handler now properly processes empty groups and logs errors
|
||||
|
||||
## [4.1.1] - 2024-04-19
|
||||
|
||||
### Added
|
||||
|
||||
8
custom_sounds.hpp
Normal file
8
custom_sounds.hpp
Normal file
@@ -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[]={};
|
||||
// };
|
||||
@@ -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";};
|
||||
};
|
||||
@@ -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
|
||||
|
||||
@@ -140,7 +140,8 @@ class DisallowedEquipment {
|
||||
"Tier1_ATACR18_Geissele_Docter_Black_Vanilla", //Nightforce Series Optic
|
||||
"Tier1_ATACR18_Geissele_Docter_Black", //Nightforce Series Optic
|
||||
"Tier1_ATACR18_Geissele_Docter_Desert_Vanilla", //Nightforce Series Optic
|
||||
"Tier1_ATACR18_Geissele_Docter_Desert" //Nightforce Series Optic
|
||||
"Tier1_ATACR18_Geissele_Docter_Desert", //Nightforce Series Optic
|
||||
"sps_black_hornet_01_F" // Black Hornet Drone Mod
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
@@ -26,13 +26,8 @@ class SupplyCrates {
|
||||
{"1Rnd_SmokeRed_Grenade_shell",24},
|
||||
{"1Rnd_SmokeGreen_Grenade_shell",24},
|
||||
{"1Rnd_SmokeYellow_Grenade_shell",12},
|
||||
{"Tier1_30Rnd_556x45_M856A1_EMag",25},
|
||||
{"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},
|
||||
@@ -57,7 +52,7 @@ class SupplyCrates {
|
||||
{"MRAWS_HEAT_F",35},
|
||||
{"MRAWS_HE_F",15},
|
||||
{"Tier1_250Rnd_762x51_Belt_M993_AP",50},
|
||||
{"Tier1_30Rnd_556x45_M856A1_EMag",25},
|
||||
{"rhs_mag_30Rnd_556x45_M855A1_Stanag",25},
|
||||
{"ACE_30Rnd_556x45_Stanag_M995_AP_mag",50},
|
||||
{"Titan_AA",10},
|
||||
{"Titan_AT",10},
|
||||
|
||||
@@ -96,6 +96,10 @@ class CfgFunctions {
|
||||
#include "custom_scripts.hpp"
|
||||
};
|
||||
|
||||
class CfgSounds {
|
||||
#include "custom_sounds.hpp"
|
||||
};
|
||||
|
||||
class CfgLeaflets {
|
||||
#include "custom_leaflets.hpp"
|
||||
};
|
||||
|
||||
@@ -120,6 +120,7 @@ class DOUBLES(PREFIX,performance) {
|
||||
class addServerStatsPFH {};
|
||||
class calculateServerStats {};
|
||||
class addEmptyGroupCleanupPFH {};
|
||||
class addDeadUnitCleanupPFH {};
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
@@ -21,6 +21,23 @@ _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 {};
|
||||
|
||||
if not (isInRemainsCollector _unit) exitWith {};
|
||||
|
||||
// format["%1 from group %2 died at %3", _unit, group _unit, [datetime] call BIS_fnc_timeToString] remoteExec ["systemChat"];
|
||||
_unit setVariable["milsim_death_time", time];
|
||||
// _unit addEventHandler ["Deleted", {
|
||||
// params ["_entity"];
|
||||
// isGC = _entity getVariable["milsim_garbage_collected", false];
|
||||
// format["%1 from was deleted by custom gc: %2", _entity, str isGC ] remoteExec ["systemChat"];
|
||||
// }];
|
||||
}];
|
||||
|
||||
// declare init complete to other modules
|
||||
missionNamespace setVariable [QGVARMAIN(complete), true, true];
|
||||
|
||||
|
||||
@@ -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
|
||||
//---------------------
|
||||
|
||||
55
framework/performance/functions/fn_addDeadUnitCleanupPFH.sqf
Normal file
55
framework/performance/functions/fn_addDeadUnitCleanupPFH.sqf
Normal file
@@ -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;
|
||||
},
|
||||
180,
|
||||
[],
|
||||
{ // 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;
|
||||
@@ -10,9 +10,39 @@
|
||||
GVAR(emptyGroupCleanupPFH) = [
|
||||
{
|
||||
{
|
||||
if (local _x) then {
|
||||
if ((count units _x) == 0) then {
|
||||
if ((count units _x) == 0) then {
|
||||
if (local _x) then {
|
||||
[
|
||||
LEVEL_INFO,
|
||||
QUOTE(COMPONENT),
|
||||
"DELETING EMPTY GROUP",
|
||||
[
|
||||
["groupId", groupId _x],
|
||||
["netId", netId _x]
|
||||
]
|
||||
] call EFUNC(common,log);
|
||||
deleteGroup _x;
|
||||
} else {
|
||||
if (isServer) then {
|
||||
[
|
||||
LEVEL_INFO,
|
||||
QUOTE(COMPONENT),
|
||||
"NON LOCAL EMPTY GROUP",
|
||||
[
|
||||
["groupId", groupId _x],
|
||||
["groupOwner", groupOwner _x]
|
||||
]
|
||||
] call EFUNC(common,log);
|
||||
} else {
|
||||
[
|
||||
LEVEL_INFO,
|
||||
QUOTE(COMPONENT),
|
||||
"EMPTY REMOTE GROUP",
|
||||
[
|
||||
["groupId", groupId _x]
|
||||
]
|
||||
] call EFUNC(common,log);
|
||||
};
|
||||
};
|
||||
};
|
||||
} forEach allGroups;
|
||||
@@ -39,6 +69,3 @@ GVAR(emptyGroupCleanupPFH) = [
|
||||
{ not (missionNamespace getVariable [QGVAR(emptyGroupCleanup_enable), false]) },
|
||||
[]
|
||||
] call CBA_fnc_createPerFrameHandlerObject;
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -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;
|
||||
@@ -1,4 +1,4 @@
|
||||
#define MAJOR 4
|
||||
#define MINOR 0
|
||||
#define PATCHLVL 0
|
||||
#define MINOR 1
|
||||
#define PATCHLVL 2
|
||||
#define BUILD 0
|
||||
|
||||
Reference in New Issue
Block a user