Rearm - Add enable setting (#8067)

* Add enable setting

* Update test

* Optimize eden macro

* Fix bad command name in eden

* Apply suggestions from code review

Co-authored-by: jonpas <jonpas33@gmail.com>

* Cleanup unused argument

* Handle RHS config

* Optimize init function a little

* Improve macro

Co-authored-by: jonpas <jonpas33@gmail.com>

* compats and leftovers

* function header (sorry jonpas)

* add enabled check to initSupplyVehicle

* use toString

* fix validate

* inheritance cleanup

---------

Co-authored-by: jonpas <jonpas33@gmail.com>
Co-authored-by: LinkIsGrim <salluci.lovi@gmail.com>
This commit is contained in:
Dystopian 2023-07-28 12:47:23 +03:00 committed by GitHub
parent 93520bdc9d
commit 0321545098
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
15 changed files with 88 additions and 74 deletions

View File

@ -1,6 +1,6 @@
#define VANILLA_REARMCARGO (if (getAmmoCargo _this > 0) then {getAmmoCargo _this} else {-1})
#define GET_NUMBER(config,default) (if (isNumber (config)) then {getNumber (config)} else {default})
#define DEFAULT_REARMCARGO GET_NUMBER(configOf _this >> QQGVAR(defaultSupply),-1)
#define DEFAULT_REARMCARGO GET_NUMBER(configOf _this >> 'GVAR(defaultSupply)',VANILLA_REARMCARGO)
class Cfg3DEN {
class Object {

View File

@ -102,66 +102,51 @@ class CfgVehicles {
class Truck_03_base_F;
class O_Truck_03_ammo_F: Truck_03_base_F {
transportAmmo = 0;
GVAR(defaultSupply) = 1200;
};
class Truck_02_base_F;
class Truck_02_Ammo_base_F: Truck_02_base_F {
transportAmmo = 0;
GVAR(defaultSupply) = 1200;
};
class B_Truck_01_mover_F;
class B_Truck_01_ammo_F: B_Truck_01_mover_F {
transportAmmo = 0;
GVAR(defaultSupply) = 1200;
};
class B_APC_Tracked_01_base_F;
class B_APC_Tracked_01_CRV_F: B_APC_Tracked_01_base_F {
transportAmmo = 0;
GVAR(defaultSupply) = 1200;
};
class Heli_Transport_04_base_F;
class O_Heli_Transport_04_ammo_F: Heli_Transport_04_base_F {
transportAmmo = 0;
GVAR(defaultSupply) = 1200;
};
class Pod_Heli_Transport_04_base_F;
class Land_Pod_Heli_Transport_04_ammo_F: Pod_Heli_Transport_04_base_F {
transportAmmo = 0;
GVAR(defaultSupply) = 1200;
};
class Slingload_01_Base_F;
class B_Slingload_01_Ammo_F: Slingload_01_Base_F {
transportAmmo = 0;
GVAR(defaultSupply) = 1200;
};
class ReammoBox_F;
class NATO_Box_Base: ReammoBox_F {};
class NATO_Box_Base;
class Box_NATO_AmmoVeh_F: NATO_Box_Base {
transportAmmo = 0;
GVAR(defaultSupply) = 1200;
};
class EAST_Box_Base: ReammoBox_F {};
class EAST_Box_Base;
class Box_East_AmmoVeh_F: EAST_Box_Base {
transportAmmo = 0;
GVAR(defaultSupply) = 1200;
};
class IND_Box_Base: ReammoBox_F {};
class IND_Box_Base;
class Box_IND_AmmoVeh_F: IND_Box_Base {
transportAmmo = 0;
GVAR(defaultSupply) = 1200;
};
class Box_IND_AmmoOrd_F;
class Box_IDAP_AmmoOrd_F: Box_IND_AmmoOrd_F {
transportAmmo = 0; // not sure why this one has 240
};
// Dummy Vehicles
class ThingX;

View File

@ -1,33 +1,45 @@
#include "script_component.hpp"
GVAR(hardpointGroupsCache) = [] call CBA_fnc_createNamespace;
GVAR(configTypesAdded) = [];
["CBA_settingsInitialized", {
TRACE_2("settingsInit",GVAR(level),GVAR(supply));
["LandVehicle", "Init", {_this call FUNC(initSupplyVehicle)}, true, ["StaticWeapon"], true] call CBA_fnc_addClassEventHandler;
["ReammoBox_F", "Init", {_this call FUNC(initSupplyVehicle)}, true, [], true] call CBA_fnc_addClassEventHandler;
}] call CBA_fnc_addEventHandler;
GVAR(magazineNameCache) = [] call CBA_fnc_createNamespace;
GVAR(originalMagazineNames) = [];
["ace_unconscious", LINKFUNC(handleUnconscious)] call CBA_fnc_addEventHandler;
[QGVAR(initSupplyVehicle), {
TRACE_1("initSupplyVehicle EH",_this); // Warning: this can run before settings are init
[FUNC(initSupplyVehicle), _this] call EFUNC(common,runAfterSettingsInit);
}] call CBA_fnc_addEventHandler;
["vehicle", {
params ["_unit"];
[_unit] call FUNC(dropAmmo);
}] call CBA_fnc_addPlayerEventHandler;
["CBA_settingsInitialized", {
TRACE_3("settingsInit",GVAR(enabled),GVAR(level),GVAR(supply));
if (isServer) then {
addMissionEventHandler ["HandleDisconnect", {params ["_unit"]; [_unit] call FUNC(dropAmmo)}];
};
// need these events before enabled check for zeus rearm
[QGVAR(rearmEntireVehicleSuccessEH), LINKFUNC(rearmEntireVehicleSuccess)] call CBA_fnc_addEventHandler;
[QGVAR(rearmEntireVehicleSuccessLocalEH), LINKFUNC(rearmEntireVehicleSuccessLocal)] call CBA_fnc_addEventHandler;
[QGVAR(makeDummyEH), LINKFUNC(makeDummy)] call CBA_fnc_addEventHandler;
[QGVAR(rearmSuccessEH), LINKFUNC(rearmSuccess)] call CBA_fnc_addEventHandler;
[QGVAR(rearmSuccessLocalEH), LINKFUNC(rearmSuccessLocal)] call CBA_fnc_addEventHandler;
[QGVAR(makeDummyEH), LINKFUNC(makeDummy)] call CBA_fnc_addEventHandler;
[QGVAR(rearmEntireVehicleSuccessEH), LINKFUNC(rearmEntireVehicleSuccess)] call CBA_fnc_addEventHandler;
[QGVAR(rearmEntireVehicleSuccessLocalEH), LINKFUNC(rearmEntireVehicleSuccessLocal)] call CBA_fnc_addEventHandler;
[QGVAR(rearmSuccessEH), LINKFUNC(rearmSuccess)] call CBA_fnc_addEventHandler;
[QGVAR(rearmSuccessLocalEH), LINKFUNC(rearmSuccessLocal)] call CBA_fnc_addEventHandler;
if (!GVAR(enabled)) exitWith {};
["AllVehicles", "Init", LINKFUNC(initSupplyVehicle), true, ["Man", "StaticWeapon"], true] call CBA_fnc_addClassEventHandler;
["ReammoBox_F", "Init", LINKFUNC(initSupplyVehicle), true, [], true] call CBA_fnc_addClassEventHandler;
["House", "Init", LINKFUNC(initSupplyVehicle), true, [], true] call CBA_fnc_addClassEventHandler;
GVAR(magazineNameCache) = [] call CBA_fnc_createNamespace;
GVAR(originalMagazineNames) = [];
// placed in editor static objects don't trigger init
{
_x call FUNC(initSupplyVehicle);
} forEach allMissionObjects "Static";
["ace_unconscious", LINKFUNC(handleUnconscious)] call CBA_fnc_addEventHandler;
["vehicle", {
params ["_unit"];
[_unit] call FUNC(dropAmmo);
}] call CBA_fnc_addPlayerEventHandler;
if (isServer) then {
addMissionEventHandler ["HandleDisconnect", {params ["_unit"]; [_unit] call FUNC(dropAmmo)}];
};
}] call CBA_fnc_addEventHandler;

View File

@ -5,10 +5,17 @@
private _testPass = true;
INFO("Showing CfgVehicles with vanilla transportAmmo");
INFO("Showing CfgVehicles with vanilla transportAmmo and without XEH");
private _badCfgVehicles = toString {
getNumber (_x >> "scope") == 2
&& {getNumber (_x >> "transportAmmo") > 0}
&& {!isText (_x >> "EventHandlers" >> "CBA_Extended_EventHandlers" >> "init")}
};
{
WARNING_2("Type [%1] needs config [transportAmmo: %2]", configName _x, getNumber (_x >> 'transportAmmo'));
diag_log text format ["Class %1: %2 [%3] needs XEH", configName _x, configName inheritsFrom _x, configSourceMod _x];
_testPass = false;
} forEach (configProperties [configFile >> "CfgVehicles", "(isClass _x) && {(getNumber (_x >> 'transportAmmo')) > 0}", true]);
} forEach (_badCfgVehicles configClasses (configFile >> "CfgVehicles"));
_testPass

View File

@ -15,16 +15,26 @@
* Public: No
*/
if (!hasInterface) exitWith {}; // For now we just add actions, so no need non-clients
if (!GVAR(enabled)) exitWith {};
params ["_vehicle"];
private _typeOf = typeOf _vehicle;
private _configOf = configOf _vehicle;
TRACE_2("initSupplyVehicle",_vehicle,_typeOf);
if (local _vehicle && {getAmmoCargo _vehicle > 0}) then {
_vehicle setAmmoCargo 0;
};
if (!hasInterface) exitWith {}; // For now we just add actions, so no need non-clients
if (!alive _vehicle) exitWith {};
private _configSupply = getNumber (_configOf >> QGVAR(defaultSupply));
if (_configSupply == 0) then {
_configSupply = getNumber (_config >> "transportAmmo");
};
private _isSupplyVehicle = _vehicle getVariable [QGVAR(isSupplyVehicle), false];
private _oldRearmConfig = isClass (_configOf >> "ACE_Actions" >> "ACE_MainActions" >> QGVAR(takeAmmo));
TRACE_3("",_configSupply,_isSupplyVehicle,_oldRearmConfig);

View File

@ -4,8 +4,7 @@
* Returns if vehicle or object is a rearm source.
*
* Arguments:
* 0: target <OBJECT>
* 1: check for vanilla rearm vehicle <BOOL> (default: false)
* 0: Target <OBJECT>
*
* Return Value:
* None
@ -15,10 +14,7 @@
*
* Public: Yes
*/
params [
["_target", objNull, [objNull]],
["_testVanillaRearm", false, [false]]
];
params [["_target", objNull, [objNull]]];
if ((_target getVariable [QGVAR(currentSupply), 0]) < 0) exitWith {false};
@ -27,4 +23,4 @@ private _vanillaCargoConfig = getNumber (_vehCfg >> "transportAmmo");
private _rearmCargoConfig = getNumber (_vehCfg >> QGVAR(defaultSupply));
private _supplyVehicle = _target getVariable [QGVAR(isSupplyVehicle), false];
_rearmCargoConfig > 0 || {_supplyVehicle} || {_testVanillaRearm && _vanillaCargoConfig > 0}
_rearmCargoConfig > 0 || {_supplyVehicle} || {_vanillaCargoConfig > 0}

View File

@ -41,7 +41,11 @@ private _currentSupply = if (_addToCurrent) then {
_source setVariable [QGVAR(currentSupply), _currentSupply + _rearmCargo, true];
private _rearmCargoConfig = getNumber (configOf _source >> QGVAR(defaultSupply));
private _config = configOf _source;
private _rearmCargoConfig = getNumber (_config >> QGVAR(defaultSupply));
if (_rearmCargoConfig == 0) then {
_rearmCargoConfig = getNumber (_config >> "transportAmmo");
};
// initialize if it's not a config rearm vehicle
if (!(_rearmCargoConfig > 0 && _source getVariable [QGVAR(isSupplyVehicle), false])) then {

View File

@ -1,7 +1,19 @@
private _category = [LELSTRING(OptionsMenu,CategoryLogistics), LLSTRING(DisplayName)];
[
QGVAR(enabled), "CHECKBOX",
ELSTRING(common,Enabled),
_category,
true,
true,
{[QGVAR(enabled), _this] call EFUNC(common,cbaSettings_settingChanged)},
true
] call CBA_fnc_addSetting;
[
QGVAR(level), "LIST",
[LSTRING(RearmSettings_level_DisplayName), LSTRING(RearmSettings_level_Description)],
[localize ELSTRING(OptionsMenu,CategoryLogistics), localize LSTRING(DisplayName)],
_category,
[[0,1,2],[LSTRING(RearmSettings_vehicle), LSTRING(RearmSettings_magazine), LSTRING(RearmSettings_caliber)],0], // [values, titles, defaultIndex]
true, // isGlobal
{[QGVAR(level), _this] call EFUNC(common,cbaSettings_settingChanged)}
@ -10,7 +22,7 @@
[
QGVAR(supply), "LIST",
[LSTRING(RearmSettings_supply_DisplayName), LSTRING(RearmSettings_supply_Description)],
[localize ELSTRING(OptionsMenu,CategoryLogistics), localize LSTRING(DisplayName)],
_category,
[[0,1,2],[LSTRING(RearmSettings_unlimited), LSTRING(RearmSettings_limited), LSTRING(RearmSettings_magazineSupply)],0], // [values, titles, defaultIndex]
true, // isGlobal
{[QGVAR(supply), _this] call EFUNC(common,cbaSettings_settingChanged)}
@ -18,8 +30,8 @@
[
QGVAR(distance), "SLIDER",
[localize LSTRING(RearmSettings_distance_DisplayName), localize LSTRING(RearmSettings_distance_Description)],
[localize ELSTRING(OptionsMenu,CategoryLogistics), localize LSTRING(DisplayName)],
[LLSTRING(RearmSettings_distance_DisplayName), LLSTRING(RearmSettings_distance_Description)],
_category,
[10, 50, 20, 0],
true, // isGlobal
{[QGVAR(supply), _this] call EFUNC(common,cbaSettings_settingChanged)}

View File

@ -160,7 +160,6 @@ class CfgVehicles {
};
class gm_ural4320_reammo_base: gm_ural4320_base {
transportAmmo = 0;
EGVAR(rearm,defaultSupply) = 1200;
};

View File

@ -6,7 +6,7 @@ class CfgPatches {
units[] = {};
weapons[] = {};
requiredVersion = REQUIRED_VERSION;
requiredAddons[] = {"ace_csw", "ace_explosives", "ace_rearm", "ace_refuel", "ace_repair", "gm_core"};
requiredAddons[] = {"ace_csw", "ace_explosives", "ace_refuel", "ace_repair", "gm_core"};
author = ECSTRING(common,ACETeam);
authors[] = {"sancron", "nomisum"};
url = ECSTRING(main,URL);

View File

@ -161,8 +161,7 @@ class CfgVehicles {
EGVAR(repair,canRepair) = 1;
};
class RHS_Ural_Ammo_Base: RHS_Ural_Base {
transportAmmo = 0;
ace_rearm_defaultSupply = 1200;
EGVAR(rearm,defaultSupply) = 1200;
};
class rhs_kraz255b1_base;
@ -183,14 +182,12 @@ class CfgVehicles {
};
class rhs_gaz66_ammo_base: rhs_gaz66_vmf {
transportAmmo = 0;
ace_rearm_defaultSupply = 1200;
EGVAR(rearm,defaultSupply) = 1200;
};
class rhs_kamaz5350;
class rhs_kamaz5350_ammo_base: rhs_kamaz5350 {
transportAmmo = 0;
ace_rearm_defaultSupply = 1200;
EGVAR(rearm,defaultSupply) = 1200;
};
class MRAP_02_base_F;

View File

@ -7,7 +7,7 @@ class CfgPatches {
units[] = {};
weapons[] = {QGVAR(2b14_carry), QGVAR(nsv_carry), QGVAR(kord_carry), QGVAR(ags30_carry), QGVAR(spg9_carry), QGVAR(spg9m_carry), QGVAR(metis_carry), QGVAR(kornet_carry)};
requiredVersion = REQUIRED_VERSION;
requiredAddons[] = {"ace_explosives", "ace_csw", "ace_rearm", "ace_refuel", "ace_repair", "rhs_main_loadorder"};
requiredAddons[] = {"ace_explosives", "ace_csw", "ace_refuel", "ace_repair", "rhs_main_loadorder"};
author = ECSTRING(common,ACETeam);
authors[] = {"Ruthberg", "GitHawk", "BaerMitUmlaut", "commy2", "Skengman2"};
url = ECSTRING(main,URL);

View File

@ -198,7 +198,6 @@ class CfgVehicles {
};
class rhsusf_M1078A1P2_B_M2_fmtv_usarmy;
class rhsusf_M1078A1R_SOV_M2_D_fmtv_socom: rhsusf_M1078A1P2_B_M2_fmtv_usarmy {
transportAmmo = 0;
EGVAR(rearm,defaultSupply) = 800;
transportFuel = 0;
EGVAR(refuel,hooks)[] = {{1.1,0.9,-1.2}};
@ -210,19 +209,16 @@ class CfgVehicles {
class rhsusf_HEMTT_A4_base: Truck_01_base_F {};
class rhsusf_M977A4_usarmy_wd: rhsusf_HEMTT_A4_base {};
class rhsusf_M977A4_AMMO_usarmy_wd: rhsusf_M977A4_usarmy_wd {
transportAmmo = 0;
EGVAR(rearm,defaultSupply) = 1200;
};
class rhsusf_M977A4_BKIT_usarmy_wd: rhsusf_M977A4_usarmy_wd {};
class rhsusf_M977A4_AMMO_BKIT_usarmy_wd: rhsusf_M977A4_BKIT_usarmy_wd {
transportAmmo = 0;
EGVAR(rearm,defaultSupply) = 1200;
};
class rhsusf_M977A4_BKIT_M2_usarmy_wd: rhsusf_M977A4_usarmy_wd {};
class rhsusf_M977A4_AMMO_BKIT_M2_usarmy_wd: rhsusf_M977A4_BKIT_M2_usarmy_wd {
transportAmmo = 0;
EGVAR(rearm,defaultSupply) = 1200;
};
@ -268,7 +264,6 @@ class CfgVehicles {
class rhsusf_m113_usarmy: rhsusf_m113tank_base {};
class rhsusf_m113_usarmy_supply: rhsusf_m113_usarmy {
transportAmmo = 0;
EGVAR(rearm,defaultSupply) = 1200;
};

View File

@ -7,7 +7,7 @@ class CfgPatches {
units[] = {};
weapons[] = {QGVAR(m252_carry), QGVAR(m2_carry), QGVAR(mk19_carry), QGVAR(tow_carry)};
requiredVersion = REQUIRED_VERSION;
requiredAddons[] = {"ace_explosives", "ace_javelin", "ace_rearm", "ace_refuel", "ace_repair", "ace_csw", "rhsusf_main_loadorder"};
requiredAddons[] = {"ace_explosives", "ace_javelin", "ace_refuel", "ace_repair", "ace_csw", "rhsusf_main_loadorder"};
author = ECSTRING(common,ACETeam);
authors[] = {"Ruthberg", "GitHawk", "BaerMitUmlaut", "Fyuran"};
url = ECSTRING(main,URL);
@ -23,4 +23,3 @@ class CfgPatches {
#include "CfgVehicles.hpp"
#include "CfgGlasses.hpp"
#include "CfgMagazineGroups.hpp"

View File

@ -16,7 +16,6 @@ class vn_wheeled_m54_repair_base: vn_wheeled_m54_03_base {
};
class vn_wheeled_m54_01_base;
class vn_wheeled_m54_ammo_base: vn_wheeled_m54_01_base {
transportAmmo = 0;
EGVAR(rearm,defaultSupply) = 1200;
};
@ -41,7 +40,6 @@ class vn_wheeled_z157_repair_base: vn_wheeled_z157_base {
};
class vn_wheeled_z157_01_base;
class vn_wheeled_z157_ammo_base: vn_wheeled_z157_01_base {
transportAmmo = 0;
EGVAR(rearm,defaultSupply) = 1200;
};