From 3571b6d0e0a64f178cf5ac214ee2c24c6c65a68e Mon Sep 17 00:00:00 2001 From: Chase <29675446+theace0296@users.noreply.github.com> Date: Fri, 12 Nov 2021 15:45:21 -0500 Subject: [PATCH] Rework vehicle classification system to not rely on EN translations --- .../Global/common/fn_getVehicleType.sqf | 85 ++++++++++ .../Global/factions/fn_getFactionVehicle.sqf | 65 ++------ .../fn_getVehicleArraysFromVehData.sqf | 152 ++---------------- .../Global/factions/fn_getVehicleData.sqf | 32 ++++ .../factions/fn_getVehicleDataByFaction.sqf | 58 +------ .../Global/factions/fn_ignoreUnit.sqf | 17 +- .../Global/factions/fn_ignoreVehicle.sqf | 36 +++++ .../Global/init/fn_initGlobalVars.sqf | 2 +- RandFramework/cfgFunctions.hpp | 3 + Tools/sqflint.py | 2 + 10 files changed, 209 insertions(+), 243 deletions(-) create mode 100644 RandFramework/Global/common/fn_getVehicleType.sqf create mode 100644 RandFramework/Global/factions/fn_getVehicleData.sqf create mode 100644 RandFramework/Global/factions/fn_ignoreVehicle.sqf diff --git a/RandFramework/Global/common/fn_getVehicleType.sqf b/RandFramework/Global/common/fn_getVehicleType.sqf new file mode 100644 index 00000000..837376a0 --- /dev/null +++ b/RandFramework/Global/common/fn_getVehicleType.sqf @@ -0,0 +1,85 @@ +// private _fnc_scriptName = "TRGM_GLOBAL_fnc_getVehicleType"; +params [["_type", "", [""]]]; + + +private _configPath = (configFile >> "CfgVehicles" >> _type); +private _vehData = [_configPath] call TRGM_GLOBAL_fnc_getVehicleData; +_vehData params ["_className", "_dispName", "_rawDispName", "_calloutName", "_rawCalloutName", "_editorSubcategory", "_category", "_rawCategory", "_isTransport", "_isArmed"]; + +private _returnType = "UnarmedCars"; +if (isNil "_className" || isNil "_dispName" || isNil "_calloutName" || isNil "_rawCategory" || [_configPath] call TRGM_GLOBAL_fnc_ignoreVehicle) then { + _returnType = "UnarmedCars"; +} else { + if (_calloutName isEqualTo "mortar" || _className isKindOf "StaticMortar") then { + _returnType = "Mortars"; + } else { + if (_className isKindOf "StaticMGWeapon" || _className isKindOf "StaticGrenadeLauncher") then { + _returnType = "Turrets"; + } else { + private _typeFound = false; + private _returnTypeMap = [ + ["Cars", ["car", "truck", "mrap", "bike", "bicycle"]], + ["Mortars", ["mortar"]], + ["Turrets", ["turret", "static"]], + ["Boats", ["boat", "ship"]], + ["Artillery", ["artillery", "arty"]], + ["AntiAir", ["_aa", "radar", "air defence"]], + ["Planes", ["plane"]], + ["APCs", ["apc", "ifv"]], + ["Tanks", ["tank", "armor"]], + ["Helos", ["helicopter"]] + ]; + if (!_typeFound) then { + { + private _searchText = _x; + if ([_searchText, _rawCategory] call BIS_fnc_inString) exitWith { + _typeFound = true; + private _mapIndex = _returnTypeMap findIf { _searchText in (_x select 1) }; + _returnType = (_returnTypeMap select _mapIndex) select 0; + if (_returnType in ["Cars", "Helos"]) then { + if (_isArmed && !_isTransport) then { + _returnType = "Armed" + _returnType; + } else { + _returnType = "Unarmed" + _returnType; + }; + }; + }; + } forEach (flatten (_returnTypeMap apply { _x select 1})); + }; + if (!_typeFound) then { + { + private _searchText = _x; + if ([_searchText, _rawCalloutName] call BIS_fnc_inString) exitWith { + _typeFound = true; + private _mapIndex = _returnTypeMap findIf { _searchText in (_x select 1) }; + _returnType = (_returnTypeMap select _mapIndex) select 0; + if (_returnType in ["Cars", "Helos"]) then { + if (_isArmed && !_isTransport) then { + _returnType = "Armed" + _returnType; + } else { + _returnType = "Unarmed" + _returnType; + }; + }; + }; + } forEach (flatten (_returnTypeMap apply { _x select 1})); + }; + }; + }; +}; + +// Possible return types are: +// [ +// "UnarmedCars", +// "ArmedCars", +// "Mortars", +// "Turrets", +// "Boats", +// "Artillery", +// "AntiAir", +// "Planes", +// "APCs", +// "Tanks", +// "ArmedHelos", +// "UnarmedHelos", +// ] +_returnType; \ No newline at end of file diff --git a/RandFramework/Global/factions/fn_getFactionVehicle.sqf b/RandFramework/Global/factions/fn_getFactionVehicle.sqf index 0d07c62e..9619ef3e 100644 --- a/RandFramework/Global/factions/fn_getFactionVehicle.sqf +++ b/RandFramework/Global/factions/fn_getFactionVehicle.sqf @@ -2,8 +2,6 @@ params [["_vehClassName", "", [objNull, ""]], ["_side", WEST]]; format[localize "STR_TRGM2_debugFunctionString", _fnc_scriptName, _fnc_scriptNameParent, (["Client", "Server"] select isServer)] call TRGM_GLOBAL_fnc_log; - - switch (typeName _vehClassName) do { case ("OBJECT") : {_vehClassName = typeOf _vehClassName}; }; @@ -71,50 +69,21 @@ switch (_side) do { }; }; -[_vehClassName, getText(_configPath >> "displayName"), getText(_configPath >> "textSingular"), getText(configfile >> "CfgEditorSubcategories" >> getText(_configPath >> "editorSubcategory") >> "displayName"), (configName _configPath) call TRGM_GLOBAL_fnc_isTransport, (configName _configPath) call TRGM_GLOBAL_fnc_isArmed] params [["_className", ""], ["_dispName", ""], ["_calloutName", ""], ["_category", ""], ["_isTransport", false], ["_isArmed", false]]; - -if (isNil "_className" || isNil "_dispName" || isNil "_calloutName" || isNil "_category") then { - -} else { - if (["GMG", _dispName] call BIS_fnc_inString || ["Quadbike", _className] call BIS_fnc_inString || ["Designator", _className] call BIS_fnc_inString || ["Radar", _className] call BIS_fnc_inString || ["SAM", _className] call BIS_fnc_inString) then { - _returnVeh = _UnarmedCars; - } else { - if ([" (", _category] call BIS_fnc_inString) then { - _category = (_category splitString " (") select 0 - }; - if (_calloutName isEqualTo "mortar" || _className isKindOf "StaticMortar") then { - _returnVeh = _Mortars; - } else { - if (_className isKindOf "StaticMGWeapon" || _className isKindOf "StaticGrenadeLauncher") then { - _returnVeh = _Turrets; - } else { - switch (_category) do { - case "Turrets": { _returnVeh = _Turrets; }; - case "Boats": { _returnVeh = _Boats; }; - case "Boat": { _returnVeh = _Boats; }; - case "Artillery": { _returnVeh = _Artillery; }; - case "Anti-Air": { _returnVeh = _AntiAir; }; - case "Anti-aircraft": { _returnVeh = _AntiAir; }; - case "Planes": { _returnVeh = _Planes; }; - case "Plane": { _returnVeh = _Planes; }; - case "APCs": { _returnVeh = _APCs; }; - case "APC": { _returnVeh = _APCs; }; - case "IFV": { _returnVeh = _APCs; }; - case "Tanks": { _returnVeh = _Tanks; }; - case "Tank": { _returnVeh = _Tanks; }; - case "Helicopters": { if (_isArmed && !_isTransport) then { _returnVeh = _ArmedHelos; } else { _returnVeh = _UnarmedHelos; }; }; - case "Helicopter": { if (_isArmed && !_isTransport) then { _returnVeh = _ArmedHelos; } else { _returnVeh = _UnarmedHelos; }; }; - case "Cars": { if (_isArmed && !_isTransport) then { _returnVeh = _ArmedCars; } else { _returnVeh = _UnarmedCars; }; }; - case "Car": { if (_isArmed && !_isTransport) then { _returnVeh = _ArmedCars; } else { _returnVeh = _UnarmedCars; }; }; - case "Bikes": { if (_isArmed && !_isTransport) then { _returnVeh = _ArmedCars; } else { _returnVeh = _UnarmedCars; }; }; - case "MRAP": { if (_isArmed && !_isTransport) then { _returnVeh = _ArmedCars; } else { _returnVeh = _UnarmedCars; }; }; - case "Truck": { if (_isArmed && !_isTransport) then { _returnVeh = _ArmedCars; } else { _returnVeh = _UnarmedCars; }; }; - case "Trucks": { if (_isArmed && !_isTransport) then { _returnVeh = _ArmedCars; } else { _returnVeh = _UnarmedCars; }; }; - default { }; - }; - }; - }; - }; +private _vehType = [_vehClassName] call TRGM_GLOBAL_fnc_getVehicleType; +switch (_vehType) do { + case "UnarmedCars": { _returnVeh = _UnarmedCars; }; + case "ArmedCars": { _returnVeh = _ArmedCars; }; + case "Mortars": { _returnVeh = _Mortars; }; + case "Turrets": { _returnVeh = _Turrets; }; + case "Boats": { _returnVeh = _Boats; }; + case "Artillery": { _returnVeh = _Artillery; }; + case "AntiAir": { _returnVeh = _AntiAir; }; + case "Planes": { _returnVeh = _Planes; }; + case "APCs": { _returnVeh = _APCs; }; + case "Tanks": { _returnVeh = _Tanks; }; + case "ArmedHelos": { _returnVeh = _ArmedHelos; }; + case "UnarmedHelos": { _returnVeh = _UnarmedHelos; }; + default { _returnVeh = _UnarmedCars; }; }; private _fallbackReturnVeh = _returnVeh; @@ -135,11 +104,11 @@ if (_vehClassName call TRGM_GLOBAL_fnc_isMedical && ({_x call TRGM_GLOBAL_fnc_is _returnVeh = _returnVeh select {_x call TRGM_GLOBAL_fnc_isAmmo}; if (isNil "_returnVeh" || { _returnVeh isEqualTo []}) exitWith {_vehClassName}; } else { - if (_isArmed && ({_x call TRGM_GLOBAL_fnc_isArmed} count _returnVeh) > 0) then { + if (_vehClassName call TRGM_GLOBAL_fnc_isArmed && ({_x call TRGM_GLOBAL_fnc_isArmed} count _returnVeh) > 0) then { _returnVeh = _returnVeh select {_x call TRGM_GLOBAL_fnc_isArmed}; if (isNil "_returnVeh" || { _returnVeh isEqualTo []}) exitWith {_vehClassName}; } else { - if (_isTransport && ({_x call TRGM_GLOBAL_fnc_isTransport} count _returnVeh) > 0) then { + if (_vehClassName call TRGM_GLOBAL_fnc_isTransport && ({_x call TRGM_GLOBAL_fnc_isTransport} count _returnVeh) > 0) then { _returnVeh = _returnVeh select {_x call TRGM_GLOBAL_fnc_isTransport}; if (isNil "_returnVeh" || { _returnVeh isEqualTo []}) exitWith {_vehClassName}; }; diff --git a/RandFramework/Global/factions/fn_getVehicleArraysFromVehData.sqf b/RandFramework/Global/factions/fn_getVehicleArraysFromVehData.sqf index 001cf05e..594c43b8 100644 --- a/RandFramework/Global/factions/fn_getVehicleArraysFromVehData.sqf +++ b/RandFramework/Global/factions/fn_getVehicleArraysFromVehData.sqf @@ -2,8 +2,6 @@ params["_vehData"]; format[localize "STR_TRGM2_debugFunctionString", _fnc_scriptName, _fnc_scriptNameParent, (["Client", "Server"] select isServer)] call TRGM_GLOBAL_fnc_log; - - private _unarmedcars = []; private _armedcars = []; private _trucks = []; @@ -18,52 +16,24 @@ private _planes = []; private _boats = []; private _mortars = []; { - _x params [["_className", ""], ["_dispName", ""], ["_calloutName", ""], ["_category", ""], ["_isTransport", false], ["_isArmed", false]]; - - if (isNil "_className" || isNil "_dispName" || isNil "_calloutName" || isNil "_category") then { - - } else { - if (["GMG", _dispName] call BIS_fnc_inString || ["Quadbike", _className] call BIS_fnc_inString || ["Designator", _className] call BIS_fnc_inString || ["Radar", _className] call BIS_fnc_inString || ["SAM", _className] call BIS_fnc_inString) then { - // Do nothing for these vehs. (Currently removing most "GMG" type vehs, since they are usually OP for small units) - } else { - if ([" (", _category] call BIS_fnc_inString) then { - _category = (_category splitString " (") select 0 - }; - if (_calloutName isEqualTo "mortar" || _className isKindOf "StaticMortar") then { - _mortars pushBackUnique _className; - } else { - if (_className isKindOf "StaticMGWeapon" || _className isKindOf "StaticGrenadeLauncher") then { - _turrets pushBackUnique _className; - } else { - switch (_category) do { - case "Turrets": { _turrets pushBackUnique _className; }; - case "Boats": { _boats pushBackUnique _className; }; - case "Boat": { _boats pushBackUnique _className; }; - case "Artillery": { _artillery pushBackUnique _className; }; - case "Anti-Air": { _antiair pushBackUnique _className; }; - case "Anti-aircraft": { _antiair pushBackUnique _className; }; - case "Planes": { _planes pushBackUnique _className; }; - case "Plane": { _planes pushBackUnique _className; }; - case "APCs": { _apcs pushBackUnique _className; }; - case "APC": { _apcs pushBackUnique _className; }; - case "IFV": { _apcs pushBackUnique _className; }; - case "Tanks": { _tanks pushBackUnique _className; }; - case "Tank": { _tanks pushBackUnique _className; }; - case "Helicopters": { if (_isArmed && !_isTransport) then { _armedhelicopters pushBackUnique _className; } else { _unarmedhelicopters pushBackUnique _className; }; }; - case "Helicopter": { if (_isArmed && !_isTransport) then { _armedhelicopters pushBackUnique _className; } else { _unarmedhelicopters pushBackUnique _className; }; }; - case "Cars": { if (_isArmed && !_isTransport) then { _armedcars pushBackUnique _className; } else { if (_isTransport) then { _trucks pushBackUnique _className; } else { _unarmedcars pushBackUnique _className; }; }; }; - case "Car": { if (_isArmed && !_isTransport) then { _armedcars pushBackUnique _className; } else { if (_isTransport) then { _trucks pushBackUnique _className; } else { _unarmedcars pushBackUnique _className; }; }; }; - case "Bikes": { if (_isArmed && !_isTransport) then { _armedcars pushBackUnique _className; } else { if (_isTransport) then { _trucks pushBackUnique _className; } else { _unarmedcars pushBackUnique _className; }; }; }; - case "MRAP": { if (_isArmed && !_isTransport) then { _armedcars pushBackUnique _className; } else { if (_isTransport) then { _trucks pushBackUnique _className; } else { _unarmedcars pushBackUnique _className; }; }; }; - case "Truck": { if (_isArmed && !_isTransport) then { _armedcars pushBackUnique _className; } else { if (_isTransport) then { _trucks pushBackUnique _className; } else { _unarmedcars pushBackUnique _className; }; }; }; - case "Trucks": { if (_isArmed && !_isTransport) then { _armedcars pushBackUnique _className; } else { if (_isTransport) then { _trucks pushBackUnique _className; } else { _unarmedcars pushBackUnique _className; }; }; }; - default { }; - }; - }; - }; - }; + _x params ["_vehClassName", "_vehType"]; + switch (_vehType) do { + case "UnarmedCars": { _unarmedcars pushBackUnique _vehClassName; }; + case "ArmedCars": { _armedcars pushBackUnique _vehClassName; }; + case "Mortars": { _mortars pushBackUnique _vehClassName; }; + case "Turrets": { _turrets pushBackUnique _vehClassName; }; + case "Boats": { _boats pushBackUnique _vehClassName; }; + case "Artillery": { _artillery pushBackUnique _vehClassName; }; + case "AntiAir": { _antiair pushBackUnique _vehClassName; }; + case "Planes": { _planes pushBackUnique _vehClassName; }; + case "APCs": { _apcs pushBackUnique _vehClassName; }; + case "Tanks": { _tanks pushBackUnique _vehClassName; }; + case "ArmedHelos": { _armedhelicopters pushBackUnique _vehClassName; }; + case "UnarmedHelos": { _unarmedhelicopters pushBackUnique _vehClassName; }; + default { _unarmedcars pushBackUnique _vehClassName; }; }; } forEach _vehData; + private _combinedWheeled = _unarmedcars + _armedcars + _trucks; if (_unarmedcars isEqualTo [] && count _combinedWheeled > 0) then { _unarmedcars = _combinedWheeled; @@ -148,93 +118,3 @@ if (_mortars isEqualTo [] && count _combinedArty > 0) then { private _vehArray = [_unarmedcars, _armedcars, _trucks, _apcs, _tanks, _artillery, _antiair, _turrets, _unarmedhelicopters, _armedhelicopters, _planes, _boats, _mortars]; _vehArray; -/* -Example output for CSAT: -[ - ["O_Truck_02_box_F","O_Truck_02_Ammo_F","O_Truck_02_fuel_F","O_Truck_03_repair_F","O_Truck_03_ammo_F","O_Truck_03_fuel_F","O_Truck_03_device_F","O_LSV_02_unarmed_F"], - ["O_MRAP_02_hmg_F","O_LSV_02_armed_F","O_LSV_02_AT_F"], - ["O_MRAP_02_F","O_Truck_02_covered_F","O_Truck_02_transport_F","O_Truck_02_medical_F","O_Truck_03_transport_F","O_Truck_03_covered_F","O_Truck_03_medical_F"], - ["O_APC_Tracked_02_cannon_F","O_APC_Wheeled_02_rcws_v2_F"], - ["O_MBT_02_cannon_F","O_MBT_04_cannon_F","O_MBT_04_command_F"], - ["O_MBT_02_arty_F"], - ["O_APC_Tracked_02_AA_F"], - ["O_HMG_01_F","O_HMG_01_high_F","O_HMG_01_A_F","O_Mortar_01_F","O_static_AA_F","O_static_AT_F"], - ["O_Heli_Light_02_unarmed_F","O_Heli_Transport_04_F","O_Heli_Transport_04_ammo_F","O_Heli_Transport_04_bench_F","O_Heli_Transport_04_box_F","O_Heli_Transport_04_covered_F","O_Heli_Transport_04_fuel_F","O_Heli_Transport_04_medevac_F","O_Heli_Transport_04_repair_F"], - ["O_Heli_Light_02_dynamicLoadout_F","O_Heli_Attack_02_dynamicLoadout_F"], - ["O_Plane_CAS_02_dynamicLoadout_F","O_Plane_Fighter_02_F","O_Plane_Fighter_02_Stealth_F"], - ["O_Boat_Armed_01_hmg_F","O_Boat_Transport_01_F","O_Lifeboat"] -] -*/ - -/* -Example output for FIA: -[ - ["O_G_Offroad_01_repair_F","O_G_Offroad_01_F","O_G_Offroad_01_AT_F","O_G_Van_01_transport_F","O_G_Van_01_fuel_F","O_G_Van_02_vehicle_F"], - ["O_G_Offroad_01_armed_F"], - ["O_G_Van_02_transport_F"], - [], - [], - [], - [], - ["O_G_HMG_02_F","O_G_HMG_02_high_F","O_G_Mortar_01_F"], - [], - [], - [], - ["O_G_Boat_Transport_01_F"] -] -*/ - -/* -Example output for MSV: -[ - ["rhs_gaz66_flat_msv","rhs_gaz66o_flat_msv","rhs_gaz66_r142_msv","rhs_gaz66_repair_msv","rhs_gaz66_ap2_msv","rhs_gaz66_ammo_msv","rhs_zil131_flatbed_msv","rhs_zil131_flatbed_cover_msv","RHS_UAZ_MSV_01","rhs_uaz_open_MSV_01","RHS_Ural_Flat_MSV_01","RHS_Ural_Open_Flat_MSV_01","RHS_Ural_Fuel_MSV_01","RHS_Ural_Repair_MSV_01","rhs_tigr_msv","rhs_tigr_3camo_msv","rhs_tigr_m_msv","rhs_tigr_m_3camo_msv","rhs_kamaz5350_flatbed_msv","rhs_kamaz5350_flatbed_cover_msv","rhs_kraz255b1_flatbed_msv","rhs_kraz255b1_fuel_msv","rhs_kraz255b1_pmp_msv","rhs_kraz255b1_bmkt_msv"], - ["rhs_gaz66_zu23_msv","RHS_Ural_Zu23_MSV_01","rhs_tigr_sts_msv","rhs_tigr_sts_3camo_msv","rhsgref_BRDM2_msv","rhsgref_BRDM2_ATGM_msv","rhsgref_BRDM2UM_msv","rhsgref_BRDM2_HQ_msv"], - ["rhs_gaz66_msv","rhs_gaz66o_msv","rhs_zil131_msv","rhs_zil131_open_msv","RHS_Ural_MSV_01","RHS_Ural_Open_MSV_01","rhs_kamaz5350_msv","rhs_kamaz5350_open_msv","rhs_kraz255b1_cargo_open_msv"], - ["rhs_bmp3_msv","rhs_bmp3_late_msv","rhs_bmp3m_msv","rhs_bmp3mera_msv","rhs_bmp1_msv","rhs_bmp1p_msv","rhs_bmp1k_msv","rhs_bmp1d_msv","rhs_prp3_msv","rhs_bmp2e_msv","rhs_bmp2_msv","rhs_bmp2k_msv","rhs_bmp2d_msv","rhs_Ob_681_2","rhs_brm1k_msv","rhs_btr70_msv","rhs_btr80_msv","rhs_btr80a_msv","rhs_btr60_msv"], - [], - ["rhs_2b14_82mm_msv","rhs_D30_msv","rhs_D30_at_msv","RHS_BM21_MSV_01"], - [], - ["RHS_ZU23_MSV","RHS_NSV_TriPod_MSV","rhs_KORD_MSV","rhs_KORD_high_MSV","RHS_AGS30_TriPod_MSV","rhs_SPG9M_MSV","rhs_Igla_AA_pod_msv","rhs_Metis_9k115_2_msv","rhs_Kornet_9M133_2_msv"], - [], - [], - [], - [] -] -*/ - -/* -Example output for VDV: -[ - ["rhs_gaz66_flat_vdv","rhs_gaz66o_flat_vdv","rhs_gaz66_r142_vdv","rhs_gaz66_repair_vdv","rhs_gaz66_ap2_vdv","rhs_gaz66_ammo_vdv","rhs_zil131_flatbed_vdv","rhs_zil131_flatbed_cover_vdv","rhs_uaz_vdv","rhs_uaz_open_vdv","RHS_Ural_Flat_VDV_01","RHS_Ural_Open_Flat_VDV_01","RHS_Ural_Fuel_VDV_01","RHS_Ural_Repair_VDV_01","rhs_typhoon_vdv","rhs_tigr_vdv","rhs_tigr_3camo_vdv","rhs_tigr_m_vdv","rhs_tigr_m_3camo_vdv","rhs_kamaz5350_flatbed_vdv","rhs_kamaz5350_flatbed_cover_vdv","rhs_kraz255b1_flatbed_vdv","rhs_kraz255b1_fuel_vdv","rhs_kraz255b1_pmp_vdv","rhs_kraz255b1_bmkt_vdv"], - ["rhs_gaz66_zu23_vdv","RHS_Ural_Zu23_VDV_01","rhs_tigr_sts_vdv","rhs_tigr_sts_3camo_vdv","rhsgref_BRDM2_vdv","rhsgref_BRDM2_ATGM_vdv","rhsgref_BRDM2UM_vdv","rhsgref_BRDM2_HQ_vdv"], - ["rhs_gaz66_vdv","rhs_gaz66o_vdv","rhs_zil131_vdv","rhs_zil131_open_vdv","RHS_Ural_VDV_01","RHS_Ural_Open_VDV_01","rhs_kamaz5350_vdv","rhs_kamaz5350_open_vdv","rhs_kraz255b1_cargo_open_vdv"], - ["rhs_bmd1","rhs_bmd1k","rhs_bmd1p","rhs_bmd1pk","rhs_bmd1r","rhs_bmd2","rhs_bmd2m","rhs_bmd2k","rhs_bmp1_vdv","rhs_bmp1p_vdv","rhs_bmp1k_vdv","rhs_bmp1d_vdv","rhs_prp3_vdv","rhs_bmp2e_vdv","rhs_bmp2_vdv","rhs_bmp2k_vdv","rhs_bmp2d_vdv","rhs_brm1k_vdv","rhs_btr70_vdv","rhs_btr80_vdv","rhs_btr80a_vdv","rhs_bmd4_vdv","rhs_bmd4m_vdv","rhs_bmd4ma_vdv","rhs_btr60_vdv"], - ["rhs_sprut_vdv"], - ["rhs_2b14_82mm_vdv","rhs_D30_vdv","rhs_D30_at_vdv","RHS_BM21_VDV_01"], - [], - ["RHS_ZU23_VDV","RHS_NSV_TriPod_VDV","rhs_KORD_VDV","rhs_KORD_high_VDV","RHS_AGS30_TriPod_VDV","rhs_SPG9M_VDV","rhs_Igla_AA_pod_vdv","rhs_Metis_9k115_2_vdv","rhs_Kornet_9M133_2_vdv"], - [], - ["RHS_Mi24P_vdv","RHS_Mi24V_vdv","RHS_Mi8mt_vdv","RHS_Mi8mt_Cargo_vdv","RHS_Mi8MTV3_vdv","RHS_Mi8mtv3_Cargo_vdv","RHS_Mi8MTV3_heavy_vdv","RHS_Mi8T_vdv","RHS_Mi8AMT_vdv"], - [], - [] -] -*/ - -/* -Example output for West Germany: -[ - ["gm_gc_army_p601","gm_gc_army_ural375d_refuel","gm_gc_army_ural375d_medic","gm_gc_army_ural375d_cargo","gm_gc_army_ural4320_repair","gm_gc_army_ural4320_cargo","gm_gc_army_ural4320_reammo","gm_gc_army_ural44202","gm_gc_army_uaz469_cargo","gm_gc_army_uaz469_spg9","gm_gc_army_uaz469_dshkm"], - ["gm_gc_army_p601","gm_gc_army_ural375d_refuel","gm_gc_army_ural375d_medic","gm_gc_army_ural375d_cargo","gm_gc_army_ural4320_repair","gm_gc_army_ural4320_cargo","gm_gc_army_ural4320_reammo","gm_gc_army_ural44202","gm_gc_army_uaz469_cargo","gm_gc_army_uaz469_spg9","gm_gc_army_uaz469_dshkm"], - ["gm_gc_army_p601","gm_gc_army_ural375d_refuel","gm_gc_army_ural375d_medic","gm_gc_army_ural375d_cargo","gm_gc_army_ural4320_repair","gm_gc_army_ural4320_cargo","gm_gc_army_ural4320_reammo","gm_gc_army_ural44202","gm_gc_army_uaz469_cargo","gm_gc_army_uaz469_spg9","gm_gc_army_uaz469_dshkm"], - ["gm_gc_army_bmp1sp2","gm_gc_army_brdm2","gm_gc_army_brdm2um","gm_gc_army_btr60pa","gm_gc_army_btr60pb","gm_gc_army_btr60pu12"], - ["gm_gc_army_pt76b","gm_gc_army_t55","gm_gc_army_t55a","gm_gc_army_t55ak","gm_gc_army_t55am2","gm_gc_army_t55am2b"], - [], - ["gm_gc_army_zsu234v1"], - ["gm_gc_army_fagot_launcher_tripod","gm_gc_army_spg9_tripod","gm_gc_army_dshkm_aatripod"], - ["gm_gc_airforce_mi2p","gm_gc_airforce_mi2sr"], - ["gm_gc_airforce_mi2t","gm_gc_airforce_mi2us","gm_gc_airforce_mi2urn"], - ["gm_gc_airforce_l410t","gm_gc_airforce_l410s_salon"], - ["B_G_Boat_Transport_01_F"], - [] -] -*/ \ No newline at end of file diff --git a/RandFramework/Global/factions/fn_getVehicleData.sqf b/RandFramework/Global/factions/fn_getVehicleData.sqf new file mode 100644 index 00000000..56431ff8 --- /dev/null +++ b/RandFramework/Global/factions/fn_getVehicleData.sqf @@ -0,0 +1,32 @@ +// private _fnc_scriptName = "TRGM_GLOBAL_fnc_getVehicleData"; +params [["_configOrNameOrObject", configNull, [configNull, "", objNull]]]; + +private _configPath = []; + +switch (typeName _configOrNameOrObject) do { + case "STRING": { + _configPath = configFile >> "CfgVehicles" >> _configOrNameOrObject; + }; + case "OBJECT": { + _configPath = configFile >> "CfgVehicles" >> (typeOf _configOrNameOrObject); + }; + case "CONFIG": { + _configPath = _configOrNameOrObject; + }; + default {}; +}; + +if (isNil "_configPath" || {isNull _configPath || {!(isClass _configPath)}}) exitWith {}; + +[ + (configname _configPath), + getText(_configPath >> "displayName"), + getTextRaw(_configPath >> "displayName"), + getText(_configPath >> "textSingular"), + getTextRaw(_configPath >> "textSingular"), + getText(_configPath >> "editorSubcategory"), + getText(configfile >> "CfgEditorSubcategories" >> getText(_configPath >> "editorSubcategory") >> "displayName"), + getTextRaw(configfile >> "CfgEditorSubcategories" >> getText(_configPath >> "editorSubcategory") >> "displayName"), + (configname _configPath) call TRGM_GLOBAL_fnc_isTransport, + (configname _configPath) call TRGM_GLOBAL_fnc_isArmed +]; diff --git a/RandFramework/Global/factions/fn_getVehicleDataByFaction.sqf b/RandFramework/Global/factions/fn_getVehicleDataByFaction.sqf index cc174432..c0b71d22 100644 --- a/RandFramework/Global/factions/fn_getVehicleDataByFaction.sqf +++ b/RandFramework/Global/factions/fn_getVehicleDataByFaction.sqf @@ -24,60 +24,4 @@ for "_i" from 0 to (count _configPath - 1) do { }; }; -private _vehs = []; -{ - if (getText(_x >> "vehicleClass") != "Training" && {!((getText(configfile >> "CfgEditorSubcategories" >> getText(_x >> "editorSubcategory") >> "displayName")) in ["Storage", "Submersibles", "Drones"])}) then { - _vehs pushBack [(configname _x), getText(_x >> "displayName"), getText(_x >> "textSingular"), getText(configfile >> "CfgEditorSubcategories" >> getText(_x >> "editorSubcategory") >> "displayName"), (configname _x) call TRGM_GLOBAL_fnc_isTransport, (configname _x) call TRGM_GLOBAL_fnc_isArmed]; - }; -} forEach _vehConfigPaths; - -_vehs; - - -/* CSAT -[ - ["O_HMG_01_F","Mk30 HMG .50","Turrets"], - ["O_Heli_Light_02_dynamicLoadout_F","PO-30 Orca","Helicopters"], - ["O_APC_Tracked_02_cannon_F","BTR-K Kamysh","APCs"], - ["O_APC_Tracked_02_AA_F","ZSU-39 Tigris","Anti-Air"], - ["O_MBT_02_cannon_F","T-100 Varsuk","Tanks"], - ["O_MBT_02_arty_F","2S9 Sochor","Artillery"], - ["O_Boat_Armed_01_hmg_F","Speedboat HMG","Boats"], - ["O_MRAP_02_F","Abda FMV","Cars"], - ["O_Plane_CAS_02_dynamicLoadout_F","To-199 Neophron (CAS)","Planes"], -] -*/ - -/* RHS MSV -[ - ["RHS_ZU23_MSV","ZU-23-2","Turrets"], - ["rhs_2b14_82mm_msv","2B14-1 'Podnos'","Artillery"], - ["rhs_gaz66_msv","GAZ-66","Truck"], - ["RHS_UAZ_MSV_01","UAZ-3151","Car"], - ["rhs_bmp3_msv","BMP-3 (early)","IFV"], - ["rhs_btr70_msv","BTR-70","APC"], - ["rhsgref_BRDM2_msv","BRDM-2","MRAP"] -] -*/ - -/* FIA -[ - ["O_G_HMG_02_F","M2 HMG .50","Turrets"], - ["O_G_Boat_Transport_01_F","Assault Boat","Boats"], - ["O_G_Offroad_01_repair_F","Offroad (Repair)","Cars"] -] -*/ - -/* RHS VDV -[ - ["RHS_ZU23_VDV","ZU-23-2","Turrets"], - ["rhs_2b14_82mm_vdv","2B14-1 'Podnos'","Artillery"], - ["rhs_gaz66_vdv","GAZ-66","Truck"], - ["RHS_Mi24P_vdv","Mi-24P","Helicopter"], - ["rhs_uaz_vdv","UAZ-3151","Car"], - ["rhs_bmd1","BMD-1","IFV"], - ["rhs_btr70_vdv","BTR-70","APC"], - ["rhs_sprut_vdv","2S25","Tank"], - ["rhsgref_BRDM2_vdv","BRDM-2","MRAP"] -] -*/ \ No newline at end of file +(_vehConfigPaths select {!([_x] call TRGM_GLOBAL_fnc_ignoreVehicle)}) apply {[configName _x, ([configName _x] call TRGM_GLOBAL_fnc_getVehicleType)]}; diff --git a/RandFramework/Global/factions/fn_ignoreUnit.sqf b/RandFramework/Global/factions/fn_ignoreUnit.sqf index bbdf1e4d..50024098 100644 --- a/RandFramework/Global/factions/fn_ignoreUnit.sqf +++ b/RandFramework/Global/factions/fn_ignoreUnit.sqf @@ -1,5 +1,20 @@ // private _fnc_scriptName = "TRGM_GLOBAL_fnc_ignoreUnit"; -params [["_configPath", configNull, [configNull]]]; +params [["_configOrNameOrObject", configNull, [configNull, "", objNull]]]; + +private _configPath = []; + +switch (typeName _configOrNameOrObject) do { + case "STRING": { + _configPath = configFile >> "CfgVehicles" >> _configOrNameOrObject; + }; + case "OBJECT": { + _configPath = configFile >> "CfgVehicles" >> (typeOf _configOrNameOrObject); + }; + case "CONFIG": { + _configPath = _configOrNameOrObject; + }; + default {}; +}; if (isNil "_configPath" || {isNull _configPath}) exitWith { true; }; diff --git a/RandFramework/Global/factions/fn_ignoreVehicle.sqf b/RandFramework/Global/factions/fn_ignoreVehicle.sqf new file mode 100644 index 00000000..64f98747 --- /dev/null +++ b/RandFramework/Global/factions/fn_ignoreVehicle.sqf @@ -0,0 +1,36 @@ +// private _fnc_scriptName = "TRGM_GLOBAL_fnc_ignoreVehicle"; +params [["_configOrNameOrObject", configNull, [configNull, "", objNull]]]; + +private _configPath = []; + +switch (typeName _configOrNameOrObject) do { + case "STRING": { + _configPath = configFile >> "CfgVehicles" >> _configOrNameOrObject; + }; + case "OBJECT": { + _configPath = configFile >> "CfgVehicles" >> (typeOf _configOrNameOrObject); + }; + case "CONFIG": { + _configPath = _configOrNameOrObject; + }; + default {}; +}; + +if (isNil "_configPath" || {isNull _configPath}) exitWith { true; }; + +private _badNames = ["designator", "sam_system"]; +private _configName = configName _configPath; +private _rawDispName = call { getTextRaw(_configPath >> "displayName") }; // Sqflint doesn't understand getTextRaw yet, so this is a work around +private _fnc_dispNameOkay = { {[_x, _rawDispName] call BIS_fnc_inString || [_x, _configName] call BIS_fnc_inString} count _badNames isEqualTo 0 }; + +private _badCalloutNames = ["unknown", "_gl"]; +private _rawCalloutName = call { getTextRaw(_configPath >> "textSingular") }; // Sqflint doesn't understand getTextRaw yet, so this is a work around +private _fnc_calloutNameOkay = { {[_x, _rawCalloutName] call BIS_fnc_inString} count _badCalloutNames isEqualTo 0 }; + +private _badCategories = ["drone", "storage", "submersibles"]; +private _rawCategory = call { getTextRaw(configfile >> "CfgEditorSubcategories" >> getText(_configPath >> "editorSubcategory") >> "displayName") }; // Sqflint doesn't understand getTextRaw yet, so this is a work around +private _fnc_categoryOkay = { {[_x, _rawCategory] call BIS_fnc_inString} count _badCategories isEqualTo 0 }; + +if (getText(_configPath >> "vehicleClass") != "Training" && {call _fnc_dispNameOkay && {call _fnc_calloutNameOkay && {call _fnc_categoryOkay}}}) exitWith { false; }; + +true; diff --git a/RandFramework/Global/init/fn_initGlobalVars.sqf b/RandFramework/Global/init/fn_initGlobalVars.sqf index e39bfe6c..57daa8bd 100644 --- a/RandFramework/Global/init/fn_initGlobalVars.sqf +++ b/RandFramework/Global/init/fn_initGlobalVars.sqf @@ -36,7 +36,7 @@ if (TRGM_Var_iTimeMultiplier isEqualTo 50) then { publicVariable "TRGM_VAR_iTimeMultiplier"; if (isNil "TRGM_VAR_SaveDataVersion") then { TRGM_VAR_SaveDataVersion = 3; publicVariable "TRGM_VAR_SaveDataVersion"; }; -if (isNil "TRGM_VAR_FactionVersion") then { TRGM_VAR_FactionVersion = 7; publicVariable "TRGM_VAR_FactionVersion"; }; +if (isNil "TRGM_VAR_FactionVersion") then { TRGM_VAR_FactionVersion = 8; publicVariable "TRGM_VAR_FactionVersion"; }; if (isNil "TRGM_VAR_LocationVersion") then { TRGM_VAR_LocationVersion = 3; publicVariable "TRGM_VAR_LocationVersion"; }; //// These must be declared BEFORE either initUnitVars or CUSTOM_MISSION_fnc_SetDefaultMissionSetupVars!!! diff --git a/RandFramework/cfgFunctions.hpp b/RandFramework/cfgFunctions.hpp index 4c980dc2..e641add5 100644 --- a/RandFramework/cfgFunctions.hpp +++ b/RandFramework/cfgFunctions.hpp @@ -128,6 +128,7 @@ class TRGM_GLOBAL { class fireAOFlares {}; class fireIllumFlares {}; class getUnitType {}; + class getVehicleType {}; class getRealPos {}; class hideTerrainObjects {}; class initAmmoBox {}; @@ -159,8 +160,10 @@ class TRGM_GLOBAL { class getUnitData {}; class getUnitDataByFaction {}; class getVehicleArraysFromVehData {}; + class getVehicleData {}; class getVehicleDataByFaction {}; class ignoreUnit {}; + class ignoreVehicle {}; class isAmmo {}; class isArmed {}; class isFuel {}; diff --git a/Tools/sqflint.py b/Tools/sqflint.py index 9a9436b6..06f0fcf8 100644 --- a/Tools/sqflint.py +++ b/Tools/sqflint.py @@ -50,6 +50,8 @@ def string_not_in_exclusions_list(string): return False if "" in string: return False + if "" in string: + return False if re.match(r'.+?Variable "_[^"]+" not used', string) is not None: return False return True