Compare commits

..

11 Commits

Author SHA1 Message Date
a2c3a5ab1c sounds 2024-06-15 16:42:54 -07:00
a4a8303e08 aj_cbrn 2024-06-15 16:40:10 -07:00
hizumi
db7bdf1ecd Update fn_createBox.sqf
All checks were successful
Generate testing snapshot / Create testing release (push) Successful in 37s
fix incorrect ace variable name. fixes #47.
2024-05-26 16:36:47 -05:00
hizumi
0f8783ffa9 add initial dead unit garbage collection
All checks were successful
Generate testing snapshot / Create testing release (push) Successful in 40s
2024-05-23 21:21:10 -05:00
hizumi
fac86f18f0 Update CHANGELOG.md
All checks were successful
Generate testing snapshot / Create testing release (push) Successful in 42s
version 4.1.2 release notes
2024-04-25 21:36:48 -05:00
hizumi
87b6f359c1 Update fn_addEmptyGroupCleanupPFH.sqf
fix logic order and update logging output
2024-04-25 21:34:34 -05:00
hizumi
cbd8b5963e Update fn_addEmptyGroupCleanupPFH.sqf
All checks were successful
Generate testing snapshot / Create testing release (push) Successful in 37s
add more logging as to where the empty group is owned to track down deletion issues
2024-04-21 19:44:19 -05:00
hizumi
09ee014912 Merge branch 'develop' of https://gitea.iceberg-gaming.com/17th-Ranger-Battalion-ORG/MissionTemplate into develop
All checks were successful
Generate testing snapshot / Create testing release (push) Successful in 32s
2024-04-21 18:43:09 -05:00
hizumi
5b482b022f Update SupplyCrates.hpp
swap Tier1 5.56 mags to rhs 5.56 mags for mod compatability
2024-04-21 18:42:47 -05:00
hizumi
8afe420527 versioning update
4.1.2
2024-04-21 18:42:25 -05:00
ff98546907 Merge pull request 'main' (#45) from main into develop
All checks were successful
Generate testing snapshot / Create testing release (push) Successful in 37s
Reviewed-on: #45
2024-04-21 18:34:12 -05:00
27 changed files with 622 additions and 10 deletions

View File

@@ -0,0 +1,18 @@
class AJDJ
{
class CBRN
{
file = "AJ_CBRN_V2\functions";
class zenModules{ postInit = 1; };
class createArea{};
class chemicalParticleLoop{};
class chemicalDamage{};
class getProtectionLevel{};
class equipMask{};
class chemicalInitClient{};
class chemicalDetector{};
class unconAlarm{};
class chemicalAlarm{};
class deleteArea{};
};
};

13
AJ_CBRN_V2/CfgSounds.hpp Normal file
View File

@@ -0,0 +1,13 @@
class chemical_alarm
{
name = "chemical_alarm";
sound[] = {"AJ_CBRN_V2\sounds\AJ_warning_2.ogg", 0.9, 1, 3}; //directory, volume, pitch, range
titles[]={};
};
class uncon_alarm
{
name = "uncon_alarm";
sound[] = {"AJ_CBRN_V2\sounds\AJ_warning_1.ogg", 0.9, 1, 5}; //directory, volume, pitch, range
titles[]={};
};

2
AJ_CBRN_V2/config.hpp Normal file
View File

@@ -0,0 +1,2 @@
#include "CfgFunctions.hpp"
#include "CfgSounds.hpp"

View File

@@ -0,0 +1,12 @@
//chemical detector audible warning of lethal levels of contamianation
//gets triggered when activating chemical trigger
//turns off when exiting the chemical trigger
while { true } do {
if ("ChemicalDetector_01_watch_F" in (assignedItems player)) then {
// play the sound
playSound "chemical_alarm";
};
sleep 5;
};

View File

@@ -0,0 +1,39 @@
if (!hasInterface) exitWith {};
waitUntil {
!isNull player
};
params ["_trg"];
// start the alarm audio script (includes checking for device)
private _alarmHandle = ([] spawn AJDJ_fnc_chemicalAlarm);
// main loop for doing hurty things when in chemical area
while { player inArea _trg } do {
// check for player protection level
private _protectionLevel = call AJDJ_fnc_getProtectionLevel;
//if the player does not have full protection
if !(_protectionLevel == 2) then {
//if the player does not have mask protection
if (_protectionLevel == 1) then {
sleep 5.0;
_limbSelection = selectRandom ["body", "head", "hand_r", "hand_l", "leg_r", "leg_l"];
[player, 0.2, _limbSelection, "vehiclecrash"] call ace_medical_fnc_addDamageToUnit;
} else {
// deal the damage
_limbSelection = selectRandom ["body", "head", "hand_r", "hand_l", "leg_r", "leg_l"];
[player, 0.2, _limbSelection, "vehiclecrash"] call ace_medical_fnc_addDamageToUnit;
// deal it again for extra speedy killing
_limbSelection = selectRandom ["body", "head", "hand_r", "hand_l", "leg_r", "leg_l"];
[player, 0.2, _limbSelection, "vehiclecrash"] call ace_medical_fnc_addDamageToUnit;
};
};
sleep 5;
};
terminate _alarmHandle;

View File

@@ -0,0 +1,80 @@
/*
Chemical Detector script by Ajdj100
Version 1.0.0
Adds functionality to the chemical detector
call this script from initPlayerLocal.sqf (example on line 16).
Parameters:
0: Array of objects - the sources of contamination. (Required)
1: Number - the radius of contamination around the source object(s) in meters. (optional, defaults to 50m)
initPlayerLocal.sqf Example:
chemDetector = [[Chemical1], 250] execVM "chemicalDetector.sqf"; (Creates a contamination zone 250m around the location of the Chemical1 object)
*/
// if not a real gamer, exit
if (!hasInterface) exitWith {};
waitUntil {
!isNull player;
};
while { true } do {
// get all chemical areas
private _sources =+ (missionNamespace getVariable ["chemicalSources", []]);
// if there are chemical sources present, and the player has a chemical detector
if (!(_sources isEqualTo []) && ("ChemicalDetector_01_watch_F" in (assignedItems player))) then {
// sort based on distance to chemical source, including radius of chemical
private _sortedSources =+ [_sources, [], {
(_x distance player) - (_x getVariable "radius")
}] call BIS_fnc_sortBy;
// selects nearest source of chemical
private _source = (_sortedSources select 0);
// global threat variable (for use in audio functions)
private _threat = (10 - ((player distance _source) - (_source getVariable "radius")))/3 min 9.99 max 0 toFixed 2;
// do some stuff for the display
"ChemicalDetector" cutRsc ["RscWeaponChemicalDetector", "PLAIN", 1, false];
private _ui = uiNamespace getVariable "RscWeaponChemicalDetector";
if !(isNull _ui) then {
private _obj = _ui displayCtrl 101;
_obj ctrlAnimateModel ["Threat_Level_Source", parseNumber _threat, true];
};
// if the player is in a chemical zone
if ((parseNumber _threat) > 3) then {
// if the player is knocked out
if ((player getVariable "ACE_isUnconscious")) then {
//wait 20 seconds to detect uncon
sleep 20;
// loop until the player wakes up
// if !(player getVariable "ACE_isUnconscious") exitWith {
// systemChat "DEBUG unit woke up before alarm";
// };
waitUntil {
sleep 1;
[player] remoteExecCall ["AJDJ_fnc_unconAlarm", 0]; //THIS HAS A BUG, IT WONT TURN OFF AFTER ESCAPING THE GAS.
!(player getVariable "ACE_isUnconscious"); //THIS NEEDS TO BE SPAWNED AS A SEPERATE
};
};
};
} else { //default for if there are no chemical sources present
"ChemicalDetector" cutRsc ["RscWeaponChemicalDetector", "PLAIN", 1, false];
private _ui = uiNamespace getVariable "RscWeaponChemicalDetector";
if !(isNull _ui) then {
private _obj = _ui displayCtrl 101;
_obj ctrlAnimateModel ["Threat_Level_Source", 0.00, true];
};
};
sleep 0.5;
};

View File

@@ -0,0 +1,17 @@
/*
CBRN Script client side initialization Ajdj100
Version 0.1.0
Adds functionality to a few things for the client
Call this script from initPlayerLocal.sqf (example on line 10).
initPlayerLocal.sqf Example:
call AJDJ_fnc_chemicalInitClient;
*/
aceMask = ["EquipMask","Put on Gas Mask","",{call AJDJ_fnc_equipMask},{true}] call ace_interact_menu_fnc_createAction;
[player, 1, ["ACE_SelfActions", "ACE_Equipment"], aceMask] call ace_interact_menu_fnc_addActionToObject;
call AJDJ_fnc_chemicalDetector;

View File

@@ -0,0 +1,58 @@
/*
spawns the visible component of the chemical area
returns the particle source for use in deletion
*/
if (!hasInterface) exitWith {};
params ["_location", "_radius"];
_location set [2, 0];
private _pSource = ("#particlesource" createVehicleLocal _location);
_pSource setParticleParams
[
["\A3\data_f\ParticleEffects\Universal\Universal", 16, 12, 0, 8],
"", "Billboard", 1, 10, // animationName, type, timerPeriod, lifeTime
[0,0,-1000], // position relative to referenceObject
[0, 0, 0], // velocity
0, 0.005, 0.003925, 0.1, [5, 5], // rotation, weight, volume, rubbing, size
[[0.6, 0.6, 0.2, 0], [0.6, 0.6, 0.2, 0.7], [0.6, 0.6, 0.2, 0]], // colors
[1], // animationPhase
0, 0, // randomDirectionPeriod, randomDirectionIntensity
"", "", // onTimer, beforeDestroy
_pSource, // referenceObject
0, false, // angle, bounces
-1, [], // bounceOnSurface, emissiveColor
[0, 1, 0]// vectorDir - CANNOT be [0, 0, 0]
];
_pSource setDropInterval (0.5/_radius);
_pSource setParticleCircle [(_radius/2), [0,1,0]];
/*
lifeTime,
position,
moveVelocity,
rotationVelocity,
size,
color,
directionPeriod,
directionIntensity,
angle,
bounceOnSurface
*/
_pSource setParticleRandom
[
0,
[(_radius/2), (_radius/2), 1],
[0, 0, 0.5],
4,
1,
[0, 0, 0, 0],
0,
0
];
//return the particle source
_pSource;

View File

@@ -0,0 +1,44 @@
/*
creates a new contamination area
Params:
0: Position array OR Object - The source of the contamination
1: Radius - the radius of contamination around the object
Location can be either a position array [x,y,z] or an object
[location, radius] call AJDJ_fnc_createArea;
*/
params ["_location", "_radius"];
//init temp for emitter object
private _emitterObject = _location;
if ("OBJECT" isEqualTo typeName _location) then {
_location = getPos _location;
} else {
_emitterObject = ("Land_GarbageBarrel_02_F" createVehicle _location);
};
//create trigger to control area
private _trg = createTrigger ["EmptyDetector", _location, false];
_trg setTriggerArea [_radius, _radius, 0, false, (_radius/2)];
_trg setTriggerActivation ["ANYPLAYER", "PRESENT", true];
_trg setTriggerStatements ["this", "[thisTrigger] spawn AJDJ_fnc_chemicalDamage", ""];
//start loop for particle effects
private _pSource = [_location, _radius, _emitterObject] call AJDJ_fnc_chemicalParticleLoop;
//bind variables
_trg setVariable ["pSource", _pSource]; //particle source
_trg setVariable ["radius", _radius]; //area of effect (for chemical detector use);
systemChat str _emitterObject;
//store trigger in barrel for deletion
_emitterObject setVariable ["trigger", _trg];
private _sources =+ (missionNamespace getVariable ["chemicalSources", []]);
_sources pushBack _trg;
missionNamespace setVariable ["chemicalSources", _sources];

View File

@@ -0,0 +1,18 @@
params["_target"];
if (_target isEqualTo objNull) exitWith {};
private _trg = (_target getVariable "trigger");
private _sources =+ (missionNamespace getVariable ["chemicalSources", []]);
_sources deleteAt (_sources find _trg);
missionNamespace setVariable ["chemicalSources", _sources];
// delete the particle emitter
deleteVehicle (_trg getVariable "pSource");
// set the trigger area to 0 (removes the area of effect)
// _trg setTriggerArea [0, 0, 0, false, 0];
deleteVehicle _trg;
deleteVehicle _target;

View File

@@ -0,0 +1,43 @@
/*
Gasmask equipping script by Ajdj100
Version 0.1.0
Script to allow players to equip gasmasks via ACE self interact if they are holding one in their inventory.
PASTE THE FOLLOWING INTO initPlayerLocal.sqf TO INITIALIZE:
aceMask = ["EquipMask","Put on Gas Mask","",{execVM "scripts\aceGasmask.sqf"},{true}] call ace_interact_menu_fnc_createAction;
[player, 1, ["ACE_SelfActions", "ACE_Equipment"], aceMask] call ace_interact_menu_fnc_addActionToObject;
*/
//if not a player, exit
if (!hasInterface) exitwith {};
// init lists of masks
private _allowedGoggles = [
"G_AirPurifyingRespirator_01_F",
"G_AirPurifyingRespirator_02_black_F",
"G_AirPurifyingRespirator_02_olive_F",
"G_AirPurifyingRespirator_02_sand_F"
];
private _items = items player;
private _availableGoggles = (_items arrayIntersect _allowedGoggles);
//if the player has a gasmask in their inventory
if !(_availableGoggles isEqualTo []) then {
//temporarily stores faceware
private _tempGoggles = goggles player;
//Swaps mask with current facewear
player addGoggles (_availableGoggles select 0);
player removeItem (_availableGoggles select 0);
player addItem _tempGoggles;
hint "Added mask"; //debug message
} else {
hint "No mask in inventory"
};

View File

@@ -0,0 +1,51 @@
/*
returns protection level of local player
*/
// init lists of protective equiptment
private _allowedGoggles = [
"G_AirPurifyingRespirator_01_F",
"G_AirPurifyingRespirator_02_black_F",
"G_AirPurifyingRespirator_02_olive_F",
"G_AirPurifyingRespirator_02_sand_F",
"G_RegulatorMask_F"
];
private _allowedUniforms = [
"U_B_CBRN_Suit_01_MTP_F",
"U_B_CBRN_Suit_01_Tropic_F",
"U_B_CBRN_Suit_01_Blue_F",
"U_B_CBRN_Suit_01_White_F",
"U_B_CBRN_Suit_01_Wdl_F",
"U_I_CBRN_Suit_01_AAF_F",
"U_I_E_CBRN_Suit_01_EAF_F"
];
private _allowedVehicles = [
"rhsusf_m1a2sep1wd_usarmy",
"rhsusf_m1a2sep1tuskiwd_usarmy",
"rhsusf_m1a2sep1tuskiiwd_usarmy",
"rhsusf_m1a2sep2wd_usarmy",
"RHS_M2A3_BUSKIII_wd",
"B_APC_Wheeled_01_cannon_F"
];
//init protection level variable
private _protectionLevel = 0;
// if they are wearing a mask
if (goggles player in _allowedGoggles) then {
// if they are wearing the suit
if (uniform player in _allowedUniforms) then {
_protectionLevel = 2;
} else {
_protectionLevel = 1;
};
};
// if the player is in a protected vehicle
if (typeOf objectParent player in _allowedVehicles) then {
_protectionLevel = 2
};
//return
_protectionLevel;

View File

@@ -0,0 +1,8 @@
/*
Script to handle the audio alert for going unconsious in gas
By Ajdj100
version 0.1.0
*/
params ["_unit"];
_unit say3D "uncon_alarm";

View File

@@ -0,0 +1,27 @@
["CBRN", "Create Chemical Area",
{
params ["_position", "_attachedObj"];
["Chemical Area Option",
[[ "SLIDER:RADIUS", "Radius", [0, 500, 50, 0, _position, [1,0,0,1]]]],
{
params ["_dialog", "_args"];
_args params ["_position"];
_dialog params ["_radius"];
[_position, _radius] remoteExec ["AJDJ_fnc_createArea", 0, true];
},
{},
[_position, _attachedObj]
] call zen_dialog_fnc_create;
}
] call zen_custom_modules_fnc_register;
["CBRN", "Delete Chemical Area",
{
params ["_position", "_attachedObj"];
[_attachedObj] remoteExec ["AJDJ_fnc_deleteArea", 0, true];
}
] call zen_custom_modules_fnc_register;

43
AJ_CBRN_V2/readme.md Normal file
View File

@@ -0,0 +1,43 @@
### How to add to mission:
Drag the AJ_CBRN_V2 folder into your mission folder and add the following line into class CfgFunctions in description.ext:
#include "AJ_CBRN_V2\CfgFunctions.hpp"
Add the following line into CfgSounds in description.ext:
#include "AJ_CBRN_V2\CfgSounds.hpp"
lastly, add the following line to initPlayerLocal.sqf:
call AJDJ_fnc_chemicalInitClient;
### How to use:
to create and delete a chemical area in zeus, use the modules under the CBRN tab.
to create a chemical area in editor or through script, use the following line:
[location, radius] call AJDJ_fnc_createArea;
location can be either an object, or an array of coordinates. Examples below:
[myObject, 40] call AJDJ_fnc_createArea;
[[6113.79,8642.26,0], 10] call AJDJ_fnc_createArea;
to delete an area through script, use the following line:
[object] call ["AJDJ_fnc_deleteArea", 0, true];
[IMPORTANT] note that these must be executed globally to function correctly. When using the init field of an object, it will automatically run globally
If you are working in an sqf, you will have to use remoteExec
currently all the CBRN equiptment from the contact DLC is supported. It is possible to add your own gear to this, but it involves editing a number of
arrays across a number of sqf's. In future I will make it easier to customize what gear provides protection.
Please reach out to me if you have any issues or suggestions at @ajdj100 on discord.

Binary file not shown.

Binary file not shown.

View File

@@ -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

View File

@@ -26,7 +26,7 @@ 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},
@@ -57,7 +57,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},

View File

@@ -94,6 +94,11 @@ class Params {};
class CfgFunctions {
#include "framework\CfgFunctions.hpp"
#include "custom_scripts.hpp"
#include "AJ_CBRN_V2\CfgFunctions.hpp"
};
class CfgSounds {
#include "AJ_CBRN_V2\CfgSounds.hpp"
};
class CfgLeaflets {

View File

@@ -120,6 +120,7 @@ class DOUBLES(PREFIX,performance) {
class addServerStatsPFH {};
class calculateServerStats {};
class addEmptyGroupCleanupPFH {};
class addDeadUnitCleanupPFH {};
};
};

View File

@@ -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];

View File

@@ -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
//---------------------

View 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;

View File

@@ -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;

View File

@@ -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;

View File

@@ -1,4 +1,4 @@
#define MAJOR 4
#define MINOR 0
#define PATCHLVL 0
#define MINOR 1
#define PATCHLVL 2
#define BUILD 0