diff --git a/.hemtt/presets/bw.html b/.hemtt/presets/bw.html index f8557c79..cb6501af 100644 --- a/.hemtt/presets/bw.html +++ b/.hemtt/presets/bw.html @@ -1,9 +1,9 @@ - + - + Arma 3 @@ -80,7 +80,7 @@ -

Arma 3 - Preset 07_18_24_BourbonMods

+

Arma 3 - Preset 2024_09_19_BourbonMods

To import this preset, drag this file onto the Launcher window. Or click the MODS tab, then PRESET in the top right, then IMPORT at the bottom, and finally select this file.

@@ -203,7 +203,6 @@

Arma 3 - Preset 07_18_24_BourbonMods

https://steamcommunity.com/sharedfiles/filedetails/?id=1713801249 - Reduced Haze Mod v3.1 @@ -492,15 +491,6 @@

Arma 3 - Preset 07_18_24_BourbonMods

https://steamcommunity.com/sharedfiles/filedetails/?id=1638341685 - - ACE Armor Adjuster - - Steam - - - https://steamcommunity.com/sharedfiles/filedetails/?id=2849354160 - - Breaching Charge @@ -582,15 +572,6 @@

Arma 3 - Preset 07_18_24_BourbonMods

https://steamcommunity.com/sharedfiles/filedetails/?id=2789152015 - - ACE Moaning - - Steam - - - https://steamcommunity.com/sharedfiles/filedetails/?id=3024549278 - - TunCon - More info for unconscious! @@ -726,24 +707,6 @@

Arma 3 - Preset 07_18_24_BourbonMods

https://steamcommunity.com/sharedfiles/filedetails/?id=3237942199 - - VileHUD - - Steam - - - https://steamcommunity.com/sharedfiles/filedetails/?id=1538673636 - - - - Better Inventory - - Steam - - - https://steamcommunity.com/sharedfiles/filedetails/?id=2791403093 - - Novogorsk diff --git a/addons/adminMenu/Interrupt_adminMenu.hpp b/addons/adminMenu/Interrupt_adminMenu.hpp index 70a8bea1..d0a97b16 100644 --- a/addons/adminMenu/Interrupt_adminMenu.hpp +++ b/addons/adminMenu/Interrupt_adminMenu.hpp @@ -190,7 +190,7 @@ class GVAR(adminMenuDialog) { y = QUOTE(0.01 * safezoneH); w = QUOTE(0.27 * safezoneW); h = QUOTE(0.05 * safezoneH); - action = QUOTE(_this call FUNC(uihook_zeusConnectPlayer)); + action = QUOTE([] call FUNC(uihook_zeusConnectPlayer)); }; }; }; @@ -208,7 +208,7 @@ class GVAR(adminMenuDialog) { y = QUOTE(0.01 * safezoneH); w = QUOTE(0.52 * safezoneW); h = QUOTE(0.05 * safezoneH); - action = QUOTE(_this call FUNC(uiHook_openEndMission)); + action = QUOTE([] call FUNC(uiHook_openEndMission)); }; class RscStructuredText_1100: RscStructuredText { idc = 1100; @@ -285,7 +285,7 @@ class GVAR(adminMenuDialog) { y = QUOTE(0.52 * safezoneH); w = QUOTE(0.26 * safezoneW); h = QUOTE(0.05 * safezoneH); - action = QUOTE(_this call FUNC(uihook_supplySpawn)); + action = QUOTE([] call FUNC(uihook_supplySpawn)); }; }; }; @@ -319,7 +319,7 @@ class GVAR(adminMenuDialog) { y = QUOTE(0.52 * safezoneH); w = QUOTE(0.26 * safezoneW); h = QUOTE(0.05 * safezoneH); - action = QUOTE(_this call FUNC(uihook_teleportButton)); + action = QUOTE([] call FUNC(uihook_teleportButton)); }; }; }; @@ -373,7 +373,7 @@ class GVAR(adminMenuDialog) { y = QUOTE(0.08 * safezoneH); w = QUOTE(0.52 * safezoneW); h = QUOTE(0.05 * safezoneH); - action = QUOTE(_this call FUNC(uihook_weaponTest)); + action = QUOTE([] call FUNC(uihook_weaponTest)); }; class RscButton_MissionTesting: RscButton { idc = -1; @@ -450,7 +450,7 @@ class GVAR(adminMenuDialog) { y = QUOTE(0.52 * safezoneH); w = QUOTE(0.125 * safezoneW); h = QUOTE(0.05 * safezoneH); - action = QUOTE(_this call FUNC(uihook_resetGearButton)); + action = QUOTE([] call FUNC(uihook_resetGearButton)); }; class ResetGearList: RscCombo { idc = 2181; @@ -466,7 +466,7 @@ class GVAR(adminMenuDialog) { y = QUOTE(0.42 * safezoneH); w = QUOTE(0.26 * safezoneW); h = QUOTE(0.05 * safezoneH); - action = QUOTE(_this call FUNC(uihook_resetSpectateButton)); + action = QUOTE([] call FUNC(uihook_resetSpectateButton)); }; class ResetMedicalButton: RscButton { idc = -1; @@ -475,7 +475,7 @@ class GVAR(adminMenuDialog) { y = QUOTE(0.22 * safezoneH); w = QUOTE(0.26 * safezoneW); h = QUOTE(0.05 * safezoneH); - action = QUOTE(_this call FUNC(uihook_resetMedicalButton)); + action = QUOTE([] call FUNC(uihook_resetMedicalButton)); }; class ResetMarkersButton: RscButton { idc = -1; @@ -484,7 +484,7 @@ class GVAR(adminMenuDialog) { y = QUOTE(0.32 * safezoneH); w = QUOTE(0.26 * safezoneW); h = QUOTE(0.05 * safezoneH); - action = QUOTE(_this call FUNC(uihook_resetMarkersButton)); + action = QUOTE([] call FUNC(uihook_resetMarkersButton)); }; }; }; @@ -502,7 +502,7 @@ class GVAR(adminMenuDialog) { y = QUOTE(0.01 * safezoneH); w = QUOTE(0.52 * safezoneW); h = QUOTE(0.05 * safezoneH); - action = QUOTE(_this call FUNC(uihook_giveAdminGun)); + action = QUOTE([] call FUNC(uihook_giveAdminGun)); }; }; }; diff --git a/addons/adminMenu/functions/fnc_checkMods.sqf b/addons/adminMenu/functions/fnc_checkMods.sqf index 8f606274..b215397f 100644 --- a/addons/adminMenu/functions/fnc_checkMods.sqf +++ b/addons/adminMenu/functions/fnc_checkMods.sqf @@ -4,9 +4,9 @@ params [["_createOrginalVersionInfo", false]]; TRACE_1("params",_createOrginalVersionInfo); -_getStringFromConfig = { - _cfgPath = _this select 0; - _returnValue = switch (true) do +private _getStringFromConfig = { + private _cfgPath = _this select 0; + private _returnValue = switch (true) do { case (isNumber _cfgPath): {str getNumber _cfgPath}; case (isText _cfgPath): {str getText _cfgPath}; @@ -15,12 +15,12 @@ _getStringFromConfig = { }; (_returnValue) }; -_modsAndVersionsPairs = []; +private _modsAndVersionsPairs = []; { - _name = configName _x; - _path = _x; - _author = [_path >> "author"] call _getStringFromConfig; - _version = [_path >> "version"] call _getStringFromConfig; + private _name = configName _x; + private _path = _x; + private _author = [_path >> "author"] call _getStringFromConfig; + private _version = [_path >> "version"] call _getStringFromConfig; if (_version == "") then { _version = [_path >> "versionStr"] call _getStringFromConfig; if (_version == "") then { @@ -45,13 +45,13 @@ if (_createOrginalVersionInfo) then { waitUntil {sleep 1; systemChat "getting versions from server..."; !isNil QGVAR(pvModVersions)}; - _diaryText = format ["Mod Problems for: %1

", profileName]; + private _diaryText = format ["Mod Problems for: %1

", profileName]; //Mods server has but we don't { - _modName = _x select 0; - _serverVersion = _x select 1; - _problem = ""; + private _modName = _x select 0; + private _serverVersion = _x select 1; + private _problem = ""; { if ((_x select 0) == _modName) exitWith { if (_serverVersion != (_x select 1)) then { //should always be true, right? @@ -68,8 +68,8 @@ if (_createOrginalVersionInfo) then { //mods we have, but server doesn't { - _modName = _x select 0; - _problem = format ["
%1 - Should Not Have", _modName]; + private _modName = _x select 0; + private _problem = format ["
%1 - Should Not Have", _modName]; { if ((_x select 0) == _modName) exitWith { _problem = ""; diff --git a/addons/adminMenu/functions/fnc_endMission.sqf b/addons/adminMenu/functions/fnc_endMission.sqf index b86df747..c83ea43b 100644 --- a/addons/adminMenu/functions/fnc_endMission.sqf +++ b/addons/adminMenu/functions/fnc_endMission.sqf @@ -7,8 +7,8 @@ if (isServer) then { private _missionType = getMissionConfigValue[QEGVAR(missionTesting,missionType), 0]; private _missionTypeStr = ["Other", "COOP", "TvT"] select _missionType; [_winningSide, "Mission ended", _missionTypeStr] call ocap_fnc_exportData; - ["potato_adminMsg", [_debugMsg, profileName, "#ALL"]] call CBA_fnc_globalEvent; private _debugMsg = format ["Saving OCAP recording with winning side %1 and mission type %2", _winningSide, _missionTypeStr]; + ["potato_adminMsg", [_debugMsg, profileName, "#ALL"]] call CBA_fnc_globalEvent; }; if ((!hasInterface) || {EGVAR(core,playerStartingSide) == _winningSide}) then { diff --git a/addons/adminMenu/functions/fnc_uihook_checkMods.sqf b/addons/adminMenu/functions/fnc_uihook_checkMods.sqf index 36a8ebbc..1eca7bc8 100644 --- a/addons/adminMenu/functions/fnc_uihook_checkMods.sqf +++ b/addons/adminMenu/functions/fnc_uihook_checkMods.sqf @@ -2,7 +2,7 @@ TRACE_1("params",_this); -private _debugMsg = format ["Verifying Mods", (profileName)]; +private _debugMsg = format ["Verifying Mods"]; ["potato_adminMsg", [_debugMsg, profileName]] call CBA_fnc_globalEvent; [true] spawn FUNC(checkMods); diff --git a/addons/adminMenu/functions/fnc_uihook_resetGearButton.sqf b/addons/adminMenu/functions/fnc_uihook_resetGearButton.sqf index f7c0d472..ef20a17e 100644 --- a/addons/adminMenu/functions/fnc_uihook_resetGearButton.sqf +++ b/addons/adminMenu/functions/fnc_uihook_resetGearButton.sqf @@ -12,7 +12,7 @@ private _selectedUnit = missionNamespace getVariable [ TRACE_2("",_selectedUnit,_selectedLoadout); -if (isNull _selectedUnit) exitWith { WARNING_1("Bad unit - disconnect?",_selectedUnit); }; +if (isNull _selectedUnit) exitWith { WARNING_1("Bad unit [%1] - disconnect?",_selectedUnit); }; if (_selectedLoadout == "") then { _selectedUnit setVariable ["F_Gear", nil, true]; diff --git a/addons/adminMenu/functions/fnc_uihook_resetMarkersButton.sqf b/addons/adminMenu/functions/fnc_uihook_resetMarkersButton.sqf index 6cc54d06..c14df1fe 100644 --- a/addons/adminMenu/functions/fnc_uihook_resetMarkersButton.sqf +++ b/addons/adminMenu/functions/fnc_uihook_resetMarkersButton.sqf @@ -9,7 +9,7 @@ private _selectedUnit = missionNamespace getVariable [ TRACE_1("Selected unit: ",_selectedUnit); -if (isNull _selectedUnit) exitWith {WARNING_1("Bad unit,disconnect?",_selectedUnit);}; +if (isNull _selectedUnit) exitWith {WARNING_1("Bad unit [%1] disconnect?",_selectedUnit);}; [QGVAR(resetMarkers), [_selectedUnit], [_selectedUnit]] call CBA_fnc_targetEvent; diff --git a/addons/adminMenu/functions/fnc_uihook_resetMedicalButton.sqf b/addons/adminMenu/functions/fnc_uihook_resetMedicalButton.sqf index e6248e8f..407fda83 100644 --- a/addons/adminMenu/functions/fnc_uihook_resetMedicalButton.sqf +++ b/addons/adminMenu/functions/fnc_uihook_resetMedicalButton.sqf @@ -9,7 +9,7 @@ private _selectedUnit = missionNamespace getVariable [ TRACE_1("Selected unit: ",_selectedUnit); -if (isNull _selectedUnit) exitWith {WARNING_1("Bad unit,disconnect?",_selectedUnit);}; +if (isNull _selectedUnit) exitWith {WARNING_1("Bad unit [%1] disconnect?",_selectedUnit);}; if (!alive _selectedUnit) exitWith {hint "No zombies!";}; diff --git a/addons/adminMenu/functions/fnc_uihook_resetSpectateButton.sqf b/addons/adminMenu/functions/fnc_uihook_resetSpectateButton.sqf index f8b99914..7c252298 100644 --- a/addons/adminMenu/functions/fnc_uihook_resetSpectateButton.sqf +++ b/addons/adminMenu/functions/fnc_uihook_resetSpectateButton.sqf @@ -9,7 +9,7 @@ private _selectedUnit = missionNamespace getVariable [ TRACE_1("Selected unit: ",_selectedUnit); -if (isNull _selectedUnit) exitWith {WARNING_1("Bad unit,disconnect?",_selectedUnit);}; +if (isNull _selectedUnit) exitWith {WARNING_1("Bad unit [%1] disconnect?",_selectedUnit);}; [QGVAR(resetSpectator), [_selectedUnit], [_selectedUnit]] call CBA_fnc_targetEvent; diff --git a/addons/adminMenu/functions/fnc_uihook_tabChange.sqf b/addons/adminMenu/functions/fnc_uihook_tabChange.sqf index 91e91386..992af73d 100644 --- a/addons/adminMenu/functions/fnc_uihook_tabChange.sqf +++ b/addons/adminMenu/functions/fnc_uihook_tabChange.sqf @@ -82,7 +82,7 @@ case (1): { } else { getText (configFile >> "CfgVehicles" >> _className >> "displayName"); // use veh name }; - _index = UI_TAB_SUPPLIES_TYPE lbAdd format ["%1", _description]; + private _index = UI_TAB_SUPPLIES_TYPE lbAdd format ["%1", _description]; UI_TAB_SUPPLIES_TYPE lbSetTooltip [_index, _className]; } else { TRACE_2("veh missing from modset",_x,_className); @@ -97,7 +97,7 @@ case (1): { GVAR(groupsArray) pushBack _x; private _grpMembers = ""; {_grpMembers = _grpMembers + format ["%1, ", (name _x)];} forEach (units _x); - _txt = format ["%1 [%2]", _x, _grpMembers]; + private _txt = format ["%1 [%2]", _x, _grpMembers]; private _index = UI_TAB_SUPPLIES_GROUP lbAdd _txt; UI_TAB_SUPPLIES_GROUP lbSetTooltip [_index, _grpMembers]; }; @@ -109,7 +109,7 @@ case (2): { if (GVAR(openEndMission)) then { UI_TAB_END_TEXT ctrlShow true; UI_TAB_END_UNLOCK ctrlShow false; - _txt = format ["Players Alive: %1
", ({(alive _x)&&{isPlayer _x}} count allUnits)]; + private _txt = format ["Players Alive: %1
", ({(alive _x)&&{isPlayer _x}} count allUnits)]; _txt = _txt + format ["
West Alive: %1 [Players: %2]", ({(alive _x)&&{side _x == west}} count allUnits), ({(alive _x)&&(side _x == west)&&(isPlayer _x)} count allUnits)]; _txt = _txt + format ["
East Alive: %1 [Players: %2]", ({(alive _x)&&{side _x == east}} count allUnits), ({(alive _x)&&(side _x == east)&&(isPlayer _x)} count allUnits)]; _txt = _txt + format ["
Indp Alive: %1 [Players: %2]", ({(alive _x)&&{side _x == resistance}} count allUnits), ({(alive _x)&&(side _x == resistance)&&(isPlayer _x)} count allUnits)]; @@ -135,7 +135,7 @@ case (3): { GVAR(groupsArray) pushBack _x; private _grpMembers = ""; {_grpMembers = _grpMembers + format ["%1, ", (name _x)];} forEach (units _x); - _txt = format ["%1 [%2]", _x, _grpMembers]; + private _txt = format ["%1 [%2]", _x, _grpMembers]; private _index = UI_TAB_TELEPORT_GROUP lbAdd _txt; UI_TAB_TELEPORT_GROUP lbSetTooltip [_index, _grpMembers]; }; @@ -215,6 +215,7 @@ case (7): { } forEach _loadouts; _listGear lbSetCurSel 0; + //IGNORE_PRIVATE_WARNING ["_x"]; [ UI_TAB_FIX_UNIT_LIST, { diff --git a/addons/adminMenu/functions/fnc_uihook_teleportButton.sqf b/addons/adminMenu/functions/fnc_uihook_teleportButton.sqf index a58e6507..83507b91 100644 --- a/addons/adminMenu/functions/fnc_uihook_teleportButton.sqf +++ b/addons/adminMenu/functions/fnc_uihook_teleportButton.sqf @@ -9,7 +9,7 @@ private _selectedUnit = missionNamespace getVariable [ TRACE_1("Selected unit: ",_selectedUnit); -if (isNull _selectedUnit) exitWith {WARNING_1("Bad unit,disconnect?",_selectedUnit);}; +if (isNull _selectedUnit) exitWith {WARNING_1("Bad unit [%1] disconnect?",_selectedUnit);}; private _selectedGroupIndex = lbCurSel UI_TAB_TELEPORT_GROUP; if ((_selectedGroupIndex < 0) || (_selectedGroupIndex >= (count GVAR(groupsArray)))) exitWith {}; diff --git a/addons/adminMenu/functions/fnc_uihook_weaponTest.sqf b/addons/adminMenu/functions/fnc_uihook_weaponTest.sqf index 57b5e748..03e378a7 100644 --- a/addons/adminMenu/functions/fnc_uihook_weaponTest.sqf +++ b/addons/adminMenu/functions/fnc_uihook_weaponTest.sqf @@ -21,10 +21,10 @@ private _fncGetWeaponInfo = { if (_weaponClassname == "throw") then { _unitText = _unitText + "[Thrown: "; }; - private _config = configfile >> "CfgWeapons" >> _weaponClassname; + private _config = configFile >> "CfgWeapons" >> _weaponClassname; private _muzzles = getArray (_config >> "muzzles"); { - _muzzleConfig = if (_x == "this") then { + private _muzzleConfig = if (_x == "this") then { _config; } else { _config >> _x @@ -88,9 +88,9 @@ private _fncGetWeaponInfo = { if (!(_classname in _handledClasses)) then { _handledClasses pushBack _classname; - private _displayName = getText (configfile >> "CfgVehicles" >> _classname >> "displayName"); - private _xIcon = gettext (configfile >> "CfgVehicles" >> _classname >> "icon"); - private _image = gettext (configfile >> "CfgVehicleIcons" >> _xIcon); + private _displayName = getText (configFile >> "CfgVehicles" >> _classname >> "displayName"); + private _xIcon = getText (configFile >> "CfgVehicles" >> _classname >> "icon"); + private _image = getText (configFile >> "CfgVehicleIcons" >> _xIcon); private _color = ""; private _sideArray = []; diff --git a/addons/adminMenu/functions/fnc_uihook_zeusConnectPlayer.sqf b/addons/adminMenu/functions/fnc_uihook_zeusConnectPlayer.sqf index c3df8d0e..086b5e00 100644 --- a/addons/adminMenu/functions/fnc_uihook_zeusConnectPlayer.sqf +++ b/addons/adminMenu/functions/fnc_uihook_zeusConnectPlayer.sqf @@ -9,7 +9,7 @@ private _selectedUnit = missionNamespace getVariable [ TRACE_1("Selected unit: ",_selectedUnit); -if (isNull _selectedUnit) exitWith {WARNING_1("Bad unit,disconnect?",_selectedUnit);}; +if (isNull _selectedUnit) exitWith {WARNING_1("Bad unit [%1] disconnect?",_selectedUnit);}; private _giveZeus = isNull getAssignedCuratorLogic _selectedUnit; diff --git a/addons/aiCfgFixes/functions/fnc_generateAmmo.sqf b/addons/aiCfgFixes/functions/fnc_generateAmmo.sqf index 7c594c2d..af75046d 100644 --- a/addons/aiCfgFixes/functions/fnc_generateAmmo.sqf +++ b/addons/aiCfgFixes/functions/fnc_generateAmmo.sqf @@ -68,7 +68,7 @@ private _ammoToGenerateCorrect = []; }; }; _ammoToGenerateCorrect pushBackUnique (_x select 0); -} foreach _ammoToGenerate; +} forEach _ammoToGenerate; //reverse _ammoToGenerateCorrect; _ammoToGenerate = _ammoToGenerateCorrect; diff --git a/addons/aiCfgFixes/functions/fnc_generateWeapons.sqf b/addons/aiCfgFixes/functions/fnc_generateWeapons.sqf index 3a90955f..b3eb7738 100644 --- a/addons/aiCfgFixes/functions/fnc_generateWeapons.sqf +++ b/addons/aiCfgFixes/functions/fnc_generateWeapons.sqf @@ -69,14 +69,14 @@ systemChat "Generating..."; private _weaponTypeSpecific = _weaponType select 1; private _weaponTypeID = -1; { - if (_weaponTypeSpecific in _x) exitwith {_weaponTypeID = _foreachindex}; - } foreach _types; + if (_weaponTypeSpecific in _x) exitWith {_weaponTypeID = _foreachindex}; + } forEach _types; private _weaponDefinedConfig = configProperties[_weaponCfg, "isClass _x", false]; private _allModes = [getArray(_weaponCfg >> "modes")] call _removeDuplicates; private _hasDefinedMode = { if (configName(_x) in _allModes) exitWith {true}; - } foreach _weaponDefinedConfig; + } forEach _weaponDefinedConfig; if (!isNil {_hasDefinedMode} && _weaponTypeCategory != "VehicleWeapon" && _weaponTypeID >= 0) then { private _procStr = "Processing '" + _weapon; @@ -90,7 +90,7 @@ systemChat "Generating..."; while {count _inherited > 0} do { // If the immediate class above this one does not have any modes defined, that means that it is a base of a base class and we can // ignore it - if (getArray(inheritsFrom(_inherited) >> "modes") select 0 == "this" && getArray(_inherited >> "modes") select 0 == "this") exitwith { + if (getArray(inheritsFrom(_inherited) >> "modes") select 0 == "this" && getArray(_inherited >> "modes") select 0 == "this") exitWith { // we flag this as the lowest base class _prevInherited pushBack [LOWEST_BASE_CLASS, _inherited]; true @@ -102,8 +102,8 @@ systemChat "Generating..."; _weaponTypeSpecific = (_weapon call bis_fnc_itemType) select 1; _weaponTypeID = -1; { - if (_weaponTypeSpecific in _x) exitwith {_weaponTypeID = _foreachindex}; - } foreach _types; + if (_weaponTypeSpecific in _x) exitWith {_weaponTypeID = _foreachindex}; + } forEach _types; _prevInherited pushBack [_weaponTypeID, _inherited]; _inherited = inheritsFrom(_inherited); }; @@ -127,7 +127,7 @@ private _alreadyDefined = []; { // _x = {{index, inherited_classname}, ...} private _reversedArray = _x; - private _definedDefault = False; + private _definedDefault = false; reverse _reversedArray; { // _x = {index, inherited_classname} @@ -161,7 +161,7 @@ private _alreadyDefined = []; // narrow-phase checking to ensure that the mode has not already been defined, even if the wrong capitalization private _modeInside = { if (toLower _x == toLower _currentTestModeName) exitWith {true}; - } foreach _allModes; + } forEach _allModes; if (isNil {_modeInside}) then { _allModes pushBack configName(_x); // we pushBack the mode so we don't add it to the mode list in the next loop @@ -172,7 +172,7 @@ private _alreadyDefined = []; diag_log _procStr; }; }; - } foreach configProperties[_weaponCfg, "isClass _x", false]; + } forEach configProperties[_weaponCfg, "isClass _x", false]; { // _x = inherited_classname::modes (string) @@ -194,7 +194,7 @@ private _alreadyDefined = []; // _modeClass = INDENT + INDENT + "class " + _modeName + ": " + configName(_x) + " {" + LINE_BREAK; true }; - } foreach _configClasses; + } forEach _configClasses; }; private _configCheck = 'configName(_x) == "burst" || @@ -228,7 +228,7 @@ private _alreadyDefined = []; _modeDef = _modeDef + CFG_CLASS_DATA(INDENT + configName(_x),str(getText(_x))); }; }; - } foreach configProperties[_weaponCfg >> _x, _configCheck, true]; + } forEach configProperties[_weaponCfg >> _x, _configCheck, true]; private _uniqueIndex = _addedModes pushBackUnique (toLower _x); // "Fix" bug where ACE modes would be duplicated endlessly @@ -248,7 +248,7 @@ private _alreadyDefined = []; _predefinedModes pushBack [_x, configName(inheritsFrom(_weaponCfg >> _x)), (_modeClass + _modeDef + INDENT + INDENT + "};" + LINE_BREAK)]; }; - } foreach _allModes; + } forEach _allModes; // This next bit is to make sure that all the modes are defined in an order that guarentees that // inheritance will work. @@ -291,8 +291,8 @@ private _alreadyDefined = []; }; }; }; - } foreach _reversedArray; -} foreach _allWeapons; + } forEach _reversedArray; +} forEach _allWeapons; private _finalStr = CFG_WEAPONS_HEADER + _baseClasses + _weaponClasses + CFG_FOOTER; diff --git a/addons/armor_modifier_ace/$PBOPREFIX$ b/addons/armor_modifier_ace/$PBOPREFIX$ new file mode 100644 index 00000000..eaf793ab --- /dev/null +++ b/addons/armor_modifier_ace/$PBOPREFIX$ @@ -0,0 +1 @@ +z\potato\addons\armor_modifier_ace diff --git a/addons/armor_modifier_ace/CfgEventHandlers.hpp b/addons/armor_modifier_ace/CfgEventHandlers.hpp new file mode 100644 index 00000000..f6503c24 --- /dev/null +++ b/addons/armor_modifier_ace/CfgEventHandlers.hpp @@ -0,0 +1,17 @@ +class Extended_PreStart_EventHandlers { + class ADDON { + init = QUOTE(call COMPILE_SCRIPT(XEH_preStart)); + }; +}; + +class Extended_PreInit_EventHandlers { + class ADDON { + init = QUOTE(call COMPILE_SCRIPT(XEH_preInit)); + }; +}; + +class Extended_PostInit_EventHandlers { + class ADDON { + init = QUOTE(call COMPILE_SCRIPT(XEH_postInit)); + }; +}; diff --git a/addons/armor_modifier_ace/LICENSE b/addons/armor_modifier_ace/LICENSE new file mode 100644 index 00000000..6f4c47cd --- /dev/null +++ b/addons/armor_modifier_ace/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2023 johnb432 + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE +OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/addons/armor_modifier_ace/LICENSE_FOR_ACE_CODE b/addons/armor_modifier_ace/LICENSE_FOR_ACE_CODE new file mode 100644 index 00000000..50be717e --- /dev/null +++ b/addons/armor_modifier_ace/LICENSE_FOR_ACE_CODE @@ -0,0 +1,379 @@ +This license only applies to the file "fnc_handleDamage.sqf": + +============================================================================ + +Copyright (C) 2015 Felix "KoffeinFlummi" Wiegand + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Additionally to the conditions of the GPL, you are granted the right to +redistribute any combination of the .pbo-files of the finished product +without having to share your source code, as long as you do not modify the +source code of the individual modules. + +When publishing a derivative of this product you may not use a name that +might create the impression that your version is an official release. + +Some folders of this project may contain a separate LICENSE file. Should +that be the case, everything in that folder and all subfolders is subject +to that license instead. + + - ARMA PUBLIC LICENSE (\addons\apl) + - CreativeCommons Attributions 3.0 (\addons\fastroping\data\sounds) + +============================================================================ + Full GNU General Public License Text +============================================================================ + + +GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + {description} + Copyright (C) {year} {fullname} + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + {signature of Ty Coon}, 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. diff --git a/addons/armor_modifier_ace/XEH_PREP.hpp b/addons/armor_modifier_ace/XEH_PREP.hpp new file mode 100644 index 00000000..b2322204 --- /dev/null +++ b/addons/armor_modifier_ace/XEH_PREP.hpp @@ -0,0 +1,4 @@ +PREP(handleDamage); +PREP(resolveHitPoints); +PREP(setClassArmor); +PREP(setUnitArmor); \ No newline at end of file diff --git a/addons/armor_modifier_ace/XEH_postInit.sqf b/addons/armor_modifier_ace/XEH_postInit.sqf new file mode 100644 index 00000000..ad446146 --- /dev/null +++ b/addons/armor_modifier_ace/XEH_postInit.sqf @@ -0,0 +1,38 @@ +#include "script_component.hpp" + +// Call in post init, so that we are sure to overwrite default ACE damage handling and any other mods interfering with ACE medical +["CAManBase", "initPost", { + params ["_unit"]; + + private _ehID = _unit getVariable [QACEGVAR(medical,HandleDamageEHID), -1]; + + // If no EH exists, don't add one + if (_ehID == -1) exitWith {}; + + // Replace existing ace medical damage event handler + _unit removeEventHandler ["HandleDamage", _ehID]; + + _ehID = _unit addEventHandler ["HandleDamage", {[_this] call FUNC(handleDamage)}]; + + _unit setVariable [QACEGVAR(medical,HandleDamageEHID), _ehID]; +}, true, [], true] call CBA_fnc_addClassEventHandler; + +[QGVAR(updateUnitArmor), { + params ["_unit", "_hitPoint", "_armorArray"]; + if (!alive _unit) exitWith {}; + private _newHash = +(_unit getVariable [QGVAR(armorHash), GVAR(defaultArmorHash)]); + {_newHash set [_x, _armorArray]} forEach (_hitPoint call FUNC(resolveHitPoints)); + _unit setVariable [QGVAR(armorHash), _newHash]; +}] call CBA_fnc_addEventHandler; + +[QGVAR(updateClassArmor), { + params ["_class", "_hitPoint", "_armorArray"]; + private _classHashMap = GVAR(classArmorHash) getOrDefaultCall [_class, { + [_class, "init", { + params ["_unit"]; + _unit setVariable [QGVAR(armorHash), GVAR(classArmorHash) getOrDefault [(typeOf _unit), DEFAULT_HASH_SETTINGS]]; + }, false] call CBA_fnc_addClassEventHandler; + +GVAR(defaultArmorHash) + }, true]; + {_classHashMap set [_x, _armorArray]} forEach (_hitPoint call FUNC(resolveHitPoints)); +}] call CBA_fnc_addEventHandler; diff --git a/addons/armor_modifier_ace/XEH_preInit.sqf b/addons/armor_modifier_ace/XEH_preInit.sqf new file mode 100644 index 00000000..a9a106a1 --- /dev/null +++ b/addons/armor_modifier_ace/XEH_preInit.sqf @@ -0,0 +1,12 @@ +#include "script_component.hpp" + +ADDON = false; + +#include "XEH_PREP.hpp" +GVAR(armorValueHash) = createHashMap; +GVAR(classArmorHash) = createHashMap; +GVAR(defaultArmorHash) = DEFAULT_HASH_SETTINGS; +// CBA Settings +#include "initSettings.inc.sqf" + +ADDON = true; diff --git a/addons/armor_modifier_ace/XEH_preStart.sqf b/addons/armor_modifier_ace/XEH_preStart.sqf new file mode 100644 index 00000000..02288857 --- /dev/null +++ b/addons/armor_modifier_ace/XEH_preStart.sqf @@ -0,0 +1,3 @@ +#include "script_component.hpp" + +#include "XEH_PREP.hpp" diff --git a/addons/armor_modifier_ace/config.cpp b/addons/armor_modifier_ace/config.cpp new file mode 100644 index 00000000..d66b108e --- /dev/null +++ b/addons/armor_modifier_ace/config.cpp @@ -0,0 +1,22 @@ +#include "script_component.hpp" + +class CfgPatches { + class ADDON { + units[] = {}; + weapons[] = {}; + requiredVersion = REQUIRED_VERSION; + requiredAddons[] = { + "ace_medical_engine" + }; + author = "johnb43"; + authors[] = { + "johnb43", + "Lambda.Tiger" + }; + skipWhenMissingDependencies = 1; + authorUrl = "https://github.com/BourbonWarfare/POTATO"; + VERSION_CONFIG; + }; +}; + +#include "CfgEventHandlers.hpp" diff --git a/addons/armor_modifier_ace/functions/fnc_handleDamage.sqf b/addons/armor_modifier_ace/functions/fnc_handleDamage.sqf new file mode 100644 index 00000000..980f6578 --- /dev/null +++ b/addons/armor_modifier_ace/functions/fnc_handleDamage.sqf @@ -0,0 +1,253 @@ +#include "..\script_component.hpp" + +/* + * Author: commy2, kymckay, modified by johnb43 & Lambda.Tiger + * Original: + * HandleDamage EH where wound events are raised based on incoming damage. + * Be aware that for each source of damage, the EH can fire multiple times (once for each hitpoint). + * We store these incoming damages and compare them on our final hitpoint: "ace_hdbracket". + * Added: + * Handling of damage to allow armor modifcation. + * + * Arguments: + * Handle damage EH + * + * Return Value: + * Damage to be inflicted + * + * Public: No + */ + +params ["_args", ["_ignoreAllowDamageACE", false]]; +_args params ["_unit", "_selection", "_damage", "_shooter", "_ammo", "_hitPointIndex", "_instigator", "_hitpoint", "_directHit", "_context"]; + +// HD sometimes triggers for remote units - ignore. +if !(local _unit) exitWith {nil}; + +// Get missing meta info +private _oldDamage = 0; +private _structuralDamage = _context == 0; + +if (_hitPoint isEqualTo "") then { + _hitPoint = "#structural"; + _oldDamage = damage _unit; +} else { + _oldDamage = _unit getHitIndex _hitPointIndex; +}; + +// Damage can be disabled with old variable or via sqf command allowDamage +if !(isDamageAllowed _unit && {_unit getVariable ["ace_medical_allowDamage", true] || _ignoreAllowDamageACE}) exitWith {_oldDamage}; + +private _newDamage = _damage - _oldDamage; + +// _newDamage == 0 happens occasionally for vehiclehit events (see line 80 onwards), just exit early to save some frametime +// context 4 is engine "bleeding". For us, it's just a duplicate event for #structural which we can ignore without any issues +if (_context != 2 && {_context == 4 || _newDamage == 0}) exitWith { + TRACE_4("Skipping engine bleeding or zero damage",_ammo,_newDamage,_directHit,_context); + _oldDamage +}; + +// Get scaled armor value of hitpoint and calculate damage before armor +// We scale using passThrough to handle explosive-resistant armor properly (#9063) +// We need realDamage to determine which limb was hit correctly +[_unit, _hitpoint] call ace_medical_engine_fnc_getHitpointArmor params ["_armor", "_armorScaled"]; +private _realDamage = _newDamage * _armor; +if (!_structuralDamage) then { + private _armorCoef = _armor/_armorScaled; + private _damageCoef = linearConversion [0, 1, ace_medical_engine_damagePassThroughEffect, 1, _armorCoef]; + _newDamage = _newDamage * _damageCoef; +}; +TRACE_6("Received hit",_hitpoint,_ammo,_newDamage,_realDamage,_directHit,_context); + +// Drowning doesn't fire the EH for each hitpoint so the "ace_hdbracket" code never runs +// Damage occurs in consistent increments +if ( + _structuralDamage && + {getOxygenRemaining _unit <= 0.5} && + {_damage isEqualTo (_oldDamage + 0.005)} +) exitWith { + TRACE_5("Drowning",_unit,_shooter,_instigator,_damage,_newDamage); + ["ace_medical_woundReceived", [_unit, [[_newDamage, "Body", _newDamage]], _unit, "drowning"]] call CBA_fnc_localEvent; + + 0 +}; + +// Faster than (vehicle _unit), also handles dead units +private _vehicle = objectParent _unit; +private _inVehicle = !isNull _vehicle; +private _environmentDamage = _ammo == ""; + +// Crashing a vehicle doesn't fire the EH for each hitpoint so the "ace_hdbracket" code never runs +// It does fire the EH multiple times, but this seems to scale with the intensity of the crash +if ( + ace_medical_enableVehicleCrashes && + {_environmentDamage && _inVehicle && _structuralDamage} && + {vectorMagnitude (velocity _vehicle) > 5} + // todo: no way to detect if stationary and another vehicle hits you +) exitWith { + TRACE_5("Crash",_unit,_shooter,_instigator,_damage,_newDamage); + ["ace_medical_woundReceived", [_unit, [[_newDamage, _hitPoint, _newDamage]], _unit, "vehiclecrash"]] call CBA_fnc_localEvent; + + 0 +}; + +// Receiving explosive damage inside a vehicle doesn't trigger for each hitpoint +// This is the case for mines, explosives, artillery, and catasthrophic vehicle explosions +if ( + (!_environmentDamage && _inVehicle && _structuralDamage) && + { + private _ammoCfg = configFile >> "CfgAmmo" >> _ammo; + GET_NUMBER(_ammoCfg >> "explosive",0) > 0 || + {GET_NUMBER(_ammoCfg >> "indirectHit",0) > 0} + } +) exitWith { + TRACE_5("Vehicle hit",_unit,_shooter,_instigator,_damage,_newDamage); + + _unit setVariable ["ace_medical_lastDamageSource", _shooter]; + _unit setVariable ["ace_medical_lastInstigator", _instigator]; + + ["ace_medical_woundReceived", [_unit, [[_newDamage, _hitPoint, _newDamage]], _shooter, "vehiclehit"]] call CBA_fnc_localEvent; + + 0 +}; + +// Get setting for particular unit +private _multiplierArray = _unit getVariable [QGVAR(armorHash), + GVAR(armorValueHash) getOrDefault [ + side _unit, + GVAR(defaultArmorHash) + ] +] getOrDefault [_hitPoint, DEFAULT_SETTINGS, true]; + +private _modifiedNewDamage = _newDamage; + +// If default settings, we don't need to change anything, so skip calculcations and let ace handle damage +if (_multiplierArray isNotEqualTo DEFAULT_SETTINGS) then { + _multiplierArray params ["_hitPointTimeser", "_armorMin", "_armorMax"]; + + switch (true) do { + case (_armorMin >= 1 && {_armor < _armorMin}): { + // This will decrease damage + _modifiedNewDamage = _realDamage / _armorMin; + + TRACE_5("Under min armor",_armor,_armorMin,_newDamage,_modifiedNewDamage,_realDamage); + }; + case (_armorMax >= 1 && {_armor > _armorMax}): { + // This will increase damage + _modifiedNewDamage = _realDamage / _armorMax; + + TRACE_5("Over max armor",_armor,_armorMax,_newDamage,_modifiedNewDamage,_realDamage); + }; + }; + + _modifiedNewDamage = _modifiedNewDamage / _hitPointTimeser; + + TRACE_4("Hitpoint damage multiplied",_armor,_newDamage,_modifiedNewDamage,_realDamage); +}; + +// Damages are stored for last iteration of the HandleDamage event (_context == 2) +_unit setVariable [format ["ace_medical_engine_$%1", _hitPoint], [_realDamage, _newDamage, _modifiedNewDamage]]; + +// Ref https://community.bistudio.com/wiki/Arma_3:_Event_Handlers#HandleDamage +// Context 2 means this is the last iteration of HandleDamage, so figure out which hitpoint took the most real damage and send wound event +// Don't exit, as the last iteration can be one of the hitpoints that we need to keep _oldDamage for +if (_context == 2) then { + _unit setVariable ["ace_medical_lastDamageSource", _shooter]; + _unit setVariable ["ace_medical_lastInstigator", _instigator]; + + private _damageStructural = _unit getVariable ["ace_medical_engine_$#structural", [0,0,0]]; + + // --- Head + private _damageHead = [ + _unit getVariable ["ace_medical_engine_$HitFace", [0,0,0]], + _unit getVariable ["ace_medical_engine_$HitNeck", [0,0,0]], + _unit getVariable ["ace_medical_engine_$HitHead", [0,0,0]] + ]; + _damageHead sort false; + _damageHead = _damageHead select 0; + + // --- Body + private _damageBody = [ + _unit getVariable ["ace_medical_engine_$HitPelvis", [0,0,0]], + _unit getVariable ["ace_medical_engine_$HitAbdomen", [0,0,0]], + _unit getVariable ["ace_medical_engine_$HitDiaphragm", [0,0,0]], + _unit getVariable ["ace_medical_engine_$HitChest", [0,0,0]] + // HitBody removed as it's a placeholder hitpoint and the high armor value (1000) throws the calculations off + ]; + _damageBody sort false; + _damageBody = _damageBody select 0; + + // --- Arms and Legs + private _damageLeftArm = _unit getVariable ["ace_medical_engine_$HitLeftArm", [0,0,0]]; + private _damageRightArm = _unit getVariable ["ace_medical_engine_$HitRightArm", [0,0,0]]; + private _damageLeftLeg = _unit getVariable ["ace_medical_engine_$HitLeftLeg", [0,0,0]]; + private _damageRightLeg = _unit getVariable ["ace_medical_engine_$HitRightLeg", [0,0,0]]; + + // Find hit point that received the maxium damage + // Priority used for sorting if incoming damage is equal + private _allDamages = [ + // Real damage, Damage (with armor), Modified damage (with armor) + [_damageHead select 0, PRIORITY_HEAD, _damageHead select 1, "Head", _damageHead param [2, _damageHead select 1]], + [_damageBody select 0, PRIORITY_BODY, _damageBody select 1, "Body", _damageBody param [2, _damageBody select 1]], + [_damageLeftArm select 0, PRIORITY_LEFT_ARM, _damageLeftArm select 1, "LeftArm", _damageLeftArm param [2, _damageLeftArm select 1]], + [_damageRightArm select 0, PRIORITY_RIGHT_ARM, _damageRightArm select 1, "RightArm", _damageRightArm param [2, _damageRightArm select 1]], + [_damageLeftLeg select 0, PRIORITY_LEFT_LEG, _damageLeftLeg select 1, "LeftLeg", _damageLeftLeg param [2, _damageLeftLeg select 1]], + [_damageRightLeg select 0, PRIORITY_RIGHT_LEG, _damageRightLeg select 1, "RightLeg", _damageRightLeg param [2, _damageRightLeg select 1]], + [_damageStructural select 0, PRIORITY_STRUCTURAL, _damageStructural select 1, "#structural", _damageStructural param [2, _damageStructural select 1]] + ]; + TRACE_2("incoming",_allDamages,_damageStructural); + + _allDamages sort false; + // Use modified damages instead of initial ones + _allDamages = _allDamages apply {[_x select 4, _x select 3, _x select 0]}; + + // Environmental damage sources all have empty ammo string + // No explicit source given, we infer from differences between them + if (_environmentDamage) then { + // Any collision with terrain/vehicle/object has a shooter + // Check this first because burning can happen at any velocity + if !(isNull _shooter) then { + /* + If shooter != unit then they hit unit, otherwise it could be: + - Unit hitting anything at speed + - An empty vehicle hitting unit + - A physX object hitting unit + Assume fall damage for downward velocity because it's most common + */ + if (_shooter == _unit && {(velocity _unit select 2) < -2}) then { + _ammo = "falling"; + TRACE_5("Fall",_unit,_shooter,_instigator,_damage,_allDamages); + } else { + _ammo = "collision"; + TRACE_5("Collision",_unit,_shooter,_instigator,_damage,_allDamages); + }; + } else { + // Anything else is almost guaranteed to be fire damage + _ammo = "fire"; + TRACE_5("Fire Damage",_unit,_shooter,_instigator,_damage,_allDamages); + }; + }; + + // No wounds for minor damage + // TODO check if this needs to be changed for burning damage (occurs as lots of small events that we add together) + if ((_allDamages select 0 select 0) > 1E-3) then { + TRACE_1("received",_allDamages); + ["ace_medical_woundReceived", [_unit, _allDamages, _shooter, _ammo]] call CBA_fnc_localEvent; + }; + + // Clear stored damages otherwise they will influence future damage events + // (aka wounds will pile onto the historically most damaged hitpoint) + { + _unit setVariable [_x, nil]; + } forEach [ + "ace_medical_engine_$HitFace","ace_medical_engine_$HitNeck","ace_medical_engine_$HitHead", + "ace_medical_engine_$HitPelvis","ace_medical_engine_$HitAbdomen","ace_medical_engine_$HitDiaphragm","ace_medical_engine_$HitChest","ace_medical_engine_$HitBody", + "ace_medical_engine_$HitLeftArm","ace_medical_engine_$HitRightArm","ace_medical_engine_$HitLeftLeg","ace_medical_engine_$HitRightLeg", + "ace_medical_engine_$#structural" + ]; +}; + +// Engine damage to these hitpoints controls blood visuals, limping, weapon sway +// Handled in fnc_damageBodyPart, persist here +// For all other hitpoints, we store our own damage values, so engine damage is unnecessary +[0, _oldDamage] select (_hitPoint in ["hithead", "hitbody", "hithands", "hitlegs"]) diff --git a/addons/armor_modifier_ace/functions/fnc_resolveHitPoints.sqf b/addons/armor_modifier_ace/functions/fnc_resolveHitPoints.sqf new file mode 100644 index 00000000..cd6ceb21 --- /dev/null +++ b/addons/armor_modifier_ace/functions/fnc_resolveHitPoints.sqf @@ -0,0 +1,37 @@ +#include "../script_component.hpp" +/* + * Author: Lambda.Tiger + * Sets the armor value for a specific class. + * + * Arguments: + * 0: Hit point to resolve to one or more hitpoints + * + * Return Value: + * Array of hitpoints + * + * Public: Yes + */ +params [["_hitPoint", "", [""]]]; + +_hitPoint = toLowerANSI _hitPoint; + +switch (_hitPoint) do { + case "ama_hitbody": { + ["hitabdomen", "hitdiaphragm", "hitchest", "hitpelvis"] + }; + case "ama_hittorso": { + ["hitabdomen", "hitdiaphragm", "hitchest"] + }; + case "ama_hitarms": { + ["hitleftarm", "hitrightarm"] + }; + case "ama_hitlegs": { + ["hitleftleg", "hitrightleg"] + }; + case "ama_hitlimbs": { + ["hitleftarm", "hitrightarm", "hitleftleg", "hitrightleg"] + }; + default { + [_hitPoint] + }; +} diff --git a/addons/armor_modifier_ace/functions/fnc_setClassArmor.sqf b/addons/armor_modifier_ace/functions/fnc_setClassArmor.sqf new file mode 100644 index 00000000..5d60c312 --- /dev/null +++ b/addons/armor_modifier_ace/functions/fnc_setClassArmor.sqf @@ -0,0 +1,39 @@ +#include "..\script_component.hpp" +/* + * Author: Lambda.Tiger + * Sets the armor value for a specific class. This is not retroactive or inherited. + * + * Arguments: + * 0: Unit classname to set hit point armor values + * 1: Hit point to apply armor value to + * 2: Armor array in format [multiplier, minimum, maximum] + * + * Return Value: + * None + * + * Example: + * [typeOf player, "hitFace", [1, 2, 2]] call potato_armor_modifier_ace_fnc_setClassArmor; + * [typeOf player, "ama_hitTorso", [1, 2, 2]] call potato_armor_modifier_ace_fnc_setClassArmor; + * + * Public: Yes + */ +params [ + ["_classname", "", [""]], + ["_hitPoint", "", [""]], + ["_armorArray", [1, 0, 0], [[]], [3]] +]; + +_hitPoint = toLowerANSI _hitPoint; + +if (_classname == "") exitWith { + ["No classname given",2] call ace_common_fnc_displayTextStructured; +}; +if (_hitPoint == "") exitWith { + ["No hitpoint given",2] call ace_common_fnc_displayTextStructured; +}; +if (false in (_armorArray apply {_x isEqualType 0})) exitWith { + [format ["Invalid format for _armorArray: %1", _armorArray],2] call ace_common_fnc_displayTextStructured; +}; + +_this set [1, _hitPoint]; +[QGVAR(updateClassArmor), _this] call CBA_fnc_globalEventJIP; diff --git a/addons/armor_modifier_ace/functions/fnc_setUnitArmor.sqf b/addons/armor_modifier_ace/functions/fnc_setUnitArmor.sqf new file mode 100644 index 00000000..4fd160f6 --- /dev/null +++ b/addons/armor_modifier_ace/functions/fnc_setUnitArmor.sqf @@ -0,0 +1,40 @@ +#include "..\script_component.hpp" +/* + * Author: Lambda.Tiger + * Sets the armor value for a specific unit. + * + * Arguments: + * 0: Unit to set hit point armor values + * 1: Hit point to apply armor value to + * 2: Armor array in format [multiplier, minimum, maximum] + * + * Return Value: + * None + * + * Example: + * [cursorObject, "hitFace", [1, 2, 2]] call potato_armor_modifier_ace_fnc_setUnitArmor; + * [player, "ama_hitTorso", [1, 2, 2]] call potato_armor_modifier_ace_fnc_setUnitArmor; + * + * Public: Yes + */ +params [ + ["_unit", objNull, [objNull]], + ["_hitPoint", "", [""]], + ["_armorArray", [1, 0, 0], [[]], [3]] +]; + +_hitPoint = toLowerANSI _hitPoint; + +if (isNull _unit) exitWith { + ["Null unit given",2] call ace_common_fnc_displayTextStructured; +}; +if (_hitPoint == "") exitWith { + ["No hitpoint given",2] call ace_common_fnc_displayTextStructured; +}; +if (false in (_armorArray apply {_x isEqualType 0})) exitWith { + [format ["Invalid format for _armorArray: %1", _armorArray],2] call ace_common_fnc_displayTextStructured; +}; + +_this set [1, _hitPoint]; +private _jipID = [QGVAR(updateUnitArmor), _this] call CBA_fnc_globalEventJIP; +[_jipID, _unit] call CBA_fnc_removeGlobalEventJIP; diff --git a/addons/armor_modifier_ace/initSettings.inc.sqf b/addons/armor_modifier_ace/initSettings.inc.sqf new file mode 100644 index 00000000..266af424 --- /dev/null +++ b/addons/armor_modifier_ace/initSettings.inc.sqf @@ -0,0 +1,61 @@ +//#pragma hemtt suppress command_case file +#define HITPOINT_SETTINGS_FUNCTION(HITPOINT,SIDE_CMD) {\ + private _newSettings = parseSimpleArray _this;\ + private _parsedSettings = [];\ + \ + {\ + if (_x isEqualType 0) then {\ + _parsedSettings pushBack (_x max (MINIMUM_SETTINGS select _forEachIndex));\ + } else {\ + _parsedSettings pushBack (DEFAULT_SETTINGS select _forEachIndex);\ + };\ + } forEach _newSettings;\ + \ + if (_parsedSettings isNotEqualTo _newSettings) then {\ + [ARR_2("A setting was set too low or otherwise incorrectly, reverting to default setting.",3)] call ace_common_fnc_displayTextStructured;\ + };\ + \ + private _hitPointHashMap = GVAR(armorValueHash) getOrDefault [SIDE_CMD, createHashMap, true];\ + switch (QUOTE(HITPOINT)) do {\ + case QUOTE(torso): {\ + _hitPointHashMap set ["hitabdomen", _parsedSettings];\ + _hitPointHashMap set ["hitdiaphragm", _parsedSettings];\ + _hitPointHashMap set ["hitchest", _parsedSettings];\ + };\ + case QUOTE(arms): {\ + _hitPointHashMap set ["hitleftarm", _parsedSettings];\ + _hitPointHashMap set ["hitrightarm", _parsedSettings];\ + };\ + case QUOTE(legs): {\ + _hitPointHashMap set ["hitleftleg", _parsedSettings];\ + _hitPointHashMap set ["hitrightleg", _parsedSettings];\ + };\ + default {\ + _hitPointHashMap set [FORMAT_1("hit%1",QUOTE(HITPOINT)), _parsedSettings];\ + };\ + };\ +} + +#define HITPOINT_SETTINGS_SIDE(TYPE,SIDE_CMD,HITPOINT,TEXT,DEFAULT_ARRAY)\ +[\ + QGVAR(DOUBLES(TYPE,HITPOINT)),\ + "EDITBOX",\ + [TEXT, "Allows the tuning the effectiveness of groups of armor hitpoints.\n[hitpoint multiplier, minimum armor, maximum armor]\nIf minimum or maximum armor value is below 1, they don't take effect."],\ + [COMPONENT_NAME, FORMAT_1("Armor modifiers - %1",QUOTE(TYPE))],\ + QUOTE(DEFAULT_ARRAY),\ + true,\ + HITPOINT_SETTINGS_FUNCTION(HITPOINT,SIDE_CMD)\ +] call CBA_fnc_addSetting + +#define HITPOINT_CHECK_SETTING_SIDE(OBJECT,SIDE_CMD) HITPOINT_SETTINGS_SIDE(OBJECT,SIDE_CMD,head,FORMAT_1("%1 hitpoint damage reduction - head",QUOTE(OBJECT)),ARR_3([1,0,0]));\ +HITPOINT_SETTINGS_SIDE(OBJECT,SIDE_CMD,face,FORMAT_1("%1 hitpoint damage reduction - face",QUOTE(OBJECT)),ARR_3([1,0,0]));\ +HITPOINT_SETTINGS_SIDE(OBJECT,SIDE_CMD,neck,FORMAT_1("%1 hitpoint damage reduction - neck",QUOTE(OBJECT)),ARR_3([1,0,0]));\ +HITPOINT_SETTINGS_SIDE(OBJECT,SIDE_CMD,torso,FORMAT_1("%1 hitpoint damage reduction - torso",QUOTE(OBJECT)),ARR_3([1,0,0]));\ +HITPOINT_SETTINGS_SIDE(OBJECT,SIDE_CMD,pelvis,FORMAT_1("%1 hitpoint damage reduction - pelvis",QUOTE(OBJECT)),ARR_3([1,0,0]));\ +HITPOINT_SETTINGS_SIDE(OBJECT,SIDE_CMD,arms,FORMAT_1("%1 hitpoint damage reduction - arms",QUOTE(OBJECT)),ARR_3([1,0,0]));\ +HITPOINT_SETTINGS_SIDE(OBJECT,SIDE_CMD,legs,FORMAT_1("%1 hitpoint damage reduction - legs",QUOTE(OBJECT)),ARR_3([1,0,0])) + +HITPOINT_CHECK_SETTING_SIDE(BluFor,blufor); +HITPOINT_CHECK_SETTING_SIDE(OpFor,opfor); +HITPOINT_CHECK_SETTING_SIDE(Independent,independent); +HITPOINT_CHECK_SETTING_SIDE(Civilian,civilian); diff --git a/addons/armor_modifier_ace/script_component.hpp b/addons/armor_modifier_ace/script_component.hpp new file mode 100644 index 00000000..1bece87f --- /dev/null +++ b/addons/armor_modifier_ace/script_component.hpp @@ -0,0 +1,38 @@ +#define COMPONENT armor_modifier_ace +#include "\z\potato\addons\core\script_mod.hpp" + +// #define DEBUG_MODE_FULL +// #define DISABLE_COMPILE_CACHE +// #define DEBUG_SYNCHRONOUS +// #define ENABLE_PERFORMANCE_COUNTERS + +#ifdef DEBUG_ENABLED_ARMOR_MODIFIER_ACE + #define DEBUG_MODE_FULL +#endif + +#ifdef DEBUG_SETTINGS_ARMOR_MODIFIER_ACE + #define DEBUG_SETTINGS DEBUG_SETTINGS_ARMOR_MODIFIER_ACE +#endif + +#include "\z\potato\addons\core\script_macros.hpp" +#define GETMVAR(var1,var2) (missionNamespace getVariable [ARR_2(var1,var2)]) +#define SETMVAR(var1,var2,var3) (missionNamespace setVariable [ARR_3(var1,var2,var3)]) + +#define DEFAULT_SETTINGS [ARR_3(1,0,0)] +#define MINIMUM_SETTINGS [ARR_3(0.001,0,0)] +#define DEFAULT_HASH_SETTINGS createHashMapFromArray [["hithead",[1,0,0]],["hitdiaphragm",[1,0,0]],["hitleftarm",[1,0,0]],["hitleftleg",[1,0,0]],["hitneck",[1,0,0]],["hitpelvis",[1,0,0]],["hitrightleg",[1,0,0]],["hitchest",[1,0,0]],["hitabdomen",[1,0,0]],["hitrightarm",[1,0,0]],["hitface",[1,0,0]]] + +#define DFUNC(var1) TRIPLES(ADDON,fnc,var1) + +// #include "\z\ace\addons\medical_engine\script_component.hpp" +#define PRIORITY_HEAD 3 +#define PRIORITY_BODY 4 +#define PRIORITY_LEFT_ARM (1 + random 1) +#define PRIORITY_RIGHT_ARM (1 + random 1) +#define PRIORITY_LEFT_LEG (1 + random 1) +#define PRIORITY_RIGHT_LEG (1 + random 1) +#define PRIORITY_STRUCTURAL 1 + +#define GET_NUMBER(config,default) (if (isNumber (config)) then {getNumber (config)} else {default}) + +#define COMPONENT_NAME QUOTE(POTATO - Armor Modifier ACE) diff --git a/addons/arsenalExport/XEH_preInit.sqf b/addons/arsenalExport/XEH_preInit.sqf index d821e2c9..1103c4e9 100644 --- a/addons/arsenalExport/XEH_preInit.sqf +++ b/addons/arsenalExport/XEH_preInit.sqf @@ -19,7 +19,7 @@ PREP_RECOMPILE_END; [ - missionnamespace, + missionNamespace, "arsenalOpened", { INFO("BIS arsenalOpened EH"); diff --git a/addons/arsenalExport/functions/fnc_arsenalOpened.sqf b/addons/arsenalExport/functions/fnc_arsenalOpened.sqf index 6e0ec5e9..9ecdda98 100644 --- a/addons/arsenalExport/functions/fnc_arsenalOpened.sqf +++ b/addons/arsenalExport/functions/fnc_arsenalOpened.sqf @@ -13,15 +13,24 @@ if ((count (call BIS_fnc_listPlayers)) > 1) exitWith {INFO_1("hiding export in m private _y = 0; private _ctrlsToUpdate = []; -private _height = (((safezoneW / safezoneH) min 1.2) / 1.2) / 25; -private _xPos = safezoneX + safezoneW - 15 * _height; +private _height = (((safeZoneW / safeZoneH) min 1.2) / 1.2) / 25; +private _xPos = safeZoneX + safeZoneW - 15 * _height; if (_shiftLeft) then { _xPos = _xPos - 93 * GRID_W; }; -private _yPos = (safezoneY + 1.5 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)) + 16 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25); +private _yPos = (safeZoneY + 1.5 * ((((safeZoneW / safeZoneH) min 1.2) / 1.2) / 25)) + 16 * ((((safeZoneW / safeZoneH) min 1.2) / 1.2) / 25); private _ctrlGroup = _display ctrlCreate ["RscControlsGroup", IDC_CTRLGROUP]; +private _fnc_updateInfo = { + params ["_display"]; + private _aceCtrlMenu = _display displayCtrl 10; + private _ctrlGroup = _display displayCtrl IDC_CTRLGROUP; + if (isNull _aceCtrlMenu) exitWith {}; + _ctrlGroup ctrlShow (ctrlShown _aceCtrlMenu); +}; +_display displayAddEventHandler ["MouseMoving", _fnc_updateInfo]; +_display displayAddEventHandler ["MouseHolding", _fnc_updateInfo]; private _fnc_createButton = { params ["_text", "_fncString", "_varsArray"]; diff --git a/addons/arsenalExport/functions/fnc_export.sqf b/addons/arsenalExport/functions/fnc_export.sqf index 189a1edb..a0002a0d 100644 --- a/addons/arsenalExport/functions/fnc_export.sqf +++ b/addons/arsenalExport/functions/fnc_export.sqf @@ -173,9 +173,7 @@ _lines pushBack format ["#define LINKED BASE_LINKED"]; _lines pushBack format ["#define LEADER_LINKED BASE_LEADER_LINKED"]; { - "ace_clipboard" callExtension _x; - "ace_clipboard" callExtension " -"; + "ace" callExtension ["clipboard:append", [_x + endl]]; } forEach _lines; -"ace_clipboard" callExtension "--COMPLETE--"; +"ace" callExtension ["clipboard:complete", []]; systemChat format ["Copied @ %1", CBA_missionTime]; diff --git a/addons/assignGear/XEH_PREP.hpp b/addons/assignGear/XEH_PREP.hpp index 415944ed..5861213e 100644 --- a/addons/assignGear/XEH_PREP.hpp +++ b/addons/assignGear/XEH_PREP.hpp @@ -1,17 +1,22 @@ TRACE_1("",QUOTE(ADDON)); PREP(addItemsToContainer); +PREP(addSupplyBoxActions); PREP(assignGearMan); -PREP(assignGearSupplyBox); PREP(assignGearPotatoBox); +PREP(assignGearSupplyBox); +PREP(assignGearVehicle_asBoxes); PREP(assignGearVehicle); -PREP(cleanPrefix); PREP(changeableOptics_getChildren); PREP(changeableOptics_setOptic); +PREP(cleanPrefix); PREP(getContainerInfo); +PREP(getDisposableInfo); // temp?? for cba change to disposable hash maps PREP(getLinkedIndex); PREP(getLoadoutFromConfig); PREP(getWeaponArray); PREP(isOpticMagnified); PREP(requestPlayerGear); +PREP(setBoxContentsFromConfig); +PREP(setContainerContentsFromConfig); PREP(setWeaponAttachment); diff --git a/addons/assignGear/XEH_clientPostInit.sqf b/addons/assignGear/XEH_clientPostInit.sqf index b1cad131..1c3d0c67 100644 --- a/addons/assignGear/XEH_clientPostInit.sqf +++ b/addons/assignGear/XEH_clientPostInit.sqf @@ -36,4 +36,6 @@ if (GVAR(usePotato) && hasInterface) then { _baseAction, true ] call ACEFUNC(interact_menu,addActionToClass); }; + + [QGVAR(resupplyBoxAddActions), LINKFUNC(addSupplyBoxActions)] call CBA_fnc_addEventHandler; }; diff --git a/addons/assignGear/XEH_preInit.sqf b/addons/assignGear/XEH_preInit.sqf index 1d0e0832..c6b06b68 100644 --- a/addons/assignGear/XEH_preInit.sqf +++ b/addons/assignGear/XEH_preInit.sqf @@ -22,6 +22,7 @@ if (GVAR(usePotato)) then { GVAR(alwaysAddToolkits) = [missionConfigFile >> "CfgLoadouts" >> "alwaysAddToolkits", true] call CFUNC(getBool); GVAR(alwaysAddLandRopes) = [missionConfigFile >> "CfgLoadouts" >> "alwaysAddLandRopes", true] call CFUNC(getBool); GVAR(prefixes) = [missionConfigFile >> "CfgLoadouts" >> "prefixes"] call CFUNC(getArray); + GVAR(resupplyBoxMarkerIndex) = 0; if (isServer) then { if (is3DEN) then { diff --git a/addons/assignGear/functions/fnc_addSupplyBoxActions.sqf b/addons/assignGear/functions/fnc_addSupplyBoxActions.sqf new file mode 100644 index 00000000..356ae018 --- /dev/null +++ b/addons/assignGear/functions/fnc_addSupplyBoxActions.sqf @@ -0,0 +1,95 @@ +#include "script_component.hpp" +/* + * Author: Lambda.Tiger + * Adds actions to allow a client to mark a supply box using smoke, glow sticks + * and or map markers. Smoke and glow sticks are enabled with a marking level + * of 1 or greater, and map markers at level 2 or greater. + * + * Arguments: + * 0: Box + * 1: Marking level + * >=1 allows smoke and chem lights to be added + * >=2 allows for a map marker to be placed/updated + * + * Return Value: + * None + * + * Example: + * [cursorObject, 2] call potato_assignGear_fnc_addSupplyBoxActions.sqf + * + * Public: No + */ +#define LARGE_UNIQUE_MARKER_INDEX 934648 +params ["_theBox", "_markingLevel"]; + +if (_markingLevel < 1 || !hasInterface) exitWith {}; + +private _action = [ + "markBoxBase", + "Mark Box", + "\a3\ui_f\data\igui\cfg\simpletasks\types\move_ca.paa", { + private _marker = _target getVariable [QGVAR(boxMarker), ""]; + if (getMarkerPos _marker isNotEqualTo [0, 0, 0]) then { + _marker setMarkerPos (getPosATL _target); + }; + }, + {true} +] call ACEFUNC(interact_menu,createAction); +[_theBox, 0, ["ACE_MainActions"], _action] call ACEFUNC(interact_menu,addActionToObject); + +//IGNORE_PRIVATE_WARNING ["_player", "_target"]; +_action = [ + "markBoxSmoke", + "Smoke", + "\a3\Modules_F_Curator\Data\portraitSmoke_ca.paa", { + private _smoke = createVehicle ["SmokeShellYellow", ASLToAGL getPosASL _target, [], 0, "CAN_COLLIDE"]; + _smoke attachTo [_target, [0, 0, 0]]; + _target setVariable [QGVAR(smokeAvailable), false]; + }, + {_target getVariable [QGVAR(smokeAvailable), true]} +] call ACEFUNC(interact_menu,createAction); +[_theBox, 0, ["ACE_MainActions","markBoxBase"], _action] call ACEFUNC(interact_menu,addActionToObject); +_action = [ + "markBoxGlowstick", + "Glow Stick", + "\a3\Modules_F_Curator\Data\portraitChemlight_ca.paa", { + private _glowstick = createVehicle ["ACE_G_Chemlight_HiYellow", ASLToAGL getPosASL _target, [], 0, "CAN_COLLIDE"]; + _glowstick attachTo [_target, [0, 0, 0]]; + _target setVariable [QGVAR(glowStickAvailable), false]; + }, + {_target getVariable [QGVAR(glowStickAvailable), true]} +] call ACEFUNC(interact_menu,createAction); +[_theBox, 0, ["ACE_MainActions","markBoxBase"], _action] call ACEFUNC(interact_menu,addActionToObject); + +if (_markingLevel < 2) exitWith {}; +_action = [ + "markBoxMapMarker", + "Map Marker", + "\a3\ui_f\data\igui\cfg\simpletasks\types\rearm_ca.paa", { + private _marker = _target getVariable [QGVAR(boxMarker), ""]; + // when a marker name/values are edit, the marker is re-created so it's possible to lose it (often) + if (getMarkerPos _marker isEqualTo [0, 0, 0]) then { + _marker = createMarkerLocal [ + format ["_USER_DEFINED #%1/%2/%3ResupplyBoxMarker_%4", + clientOwner, + LARGE_UNIQUE_MARKER_INDEX, + 1, + GVAR(resupplyBoxMarkerIndex) + ], + getPosATL _target, + 1, + player + ]; + GVAR(resupplyBoxMarkerIndex) = GVAR(resupplyBoxMarkerIndex) + 1; + _marker setMarkerColorLocal "ColorYellow"; + private _boxName = _target getVariable [QACEGVAR(cargo,customName), "Resupply Box"]; + _marker setMarkerTextLocal _boxName; + _marker setMarkerType "loc_rearm"; + _target setVariable [QGVAR(boxMarker), _marker, true]; + } else { + _marker setMarkerPos (getPosATL _target); + }; + }, + {true} +] call ACEFUNC(interact_menu,createAction); +[_theBox, 0, ["ACE_MainActions","markBoxBase"], _action] call ACEFUNC(interact_menu,addActionToObject); \ No newline at end of file diff --git a/addons/assignGear/functions/fnc_assignGearPotatoBox.sqf b/addons/assignGear/functions/fnc_assignGearPotatoBox.sqf index 304e9c5a..94015650 100644 --- a/addons/assignGear/functions/fnc_assignGearPotatoBox.sqf +++ b/addons/assignGear/functions/fnc_assignGearPotatoBox.sqf @@ -50,7 +50,7 @@ private _boxItems = createHashMapFromArray [ private _launcher = (getArray (_loadout >> "launchers")) param [0, "#"]; private _launcherConfig = configFile >> "CfgWeapons" >> _launcher; if (isNull _launcherConfig) then { continue }; - if (((getNumber (_launcherConfig >> "rhs_disposable")) == 1) || {!isNil {cba_disposable_normalLaunchers getVariable _launcher}}) then { + if (((getNumber (_launcherConfig >> "rhs_disposable")) == 1) || {[cba_disposable_normalLaunchers, _launcher, "in"] call FUNC(getDisposableInfo)}) then { private _count = _boxWeapons getOrDefault [_launcher, 0]; _boxWeapons set [_launcher, _count + _size * 2] }; diff --git a/addons/assignGear/functions/fnc_assignGearSupplyBox.sqf b/addons/assignGear/functions/fnc_assignGearSupplyBox.sqf index dcea4ee1..9e0b4fdd 100644 --- a/addons/assignGear/functions/fnc_assignGearSupplyBox.sqf +++ b/addons/assignGear/functions/fnc_assignGearSupplyBox.sqf @@ -2,6 +2,8 @@ /* * Author: Bailey * Fills supply box with gear for a faction + * Edit by Lambda.tiger + * Supports boxes containing other boxes * * Arguments: * 0: Box @@ -17,12 +19,11 @@ params ["_theBox"]; -private _config = configOf _theBox; -private _faction = getText (_config >> QGVAR(faction)); -private _type = getText (_config >> QGVAR(type)); // 1=squad, 2=platoon - TRACE_1("",GVAR(setSupplyBoxLoadouts)); +if (_theBox getVariable [QGVAR(initialized), false]) exitWith {}; +_theBox setVariable [QGVAR(initialized), true, true]; + //Leave default gear when GVAR(setSupplyBoxLoadouts) is 0 if (GVAR(setSupplyBoxLoadouts) == 0) exitWith {}; @@ -37,49 +38,48 @@ if (GVAR(setSupplyBoxLoadouts) == -1) exitWith { private _path = missionConfigFile >> "CfgLoadouts" >> "SupplyBoxes" >> typeOf _theBox; if (!isClass _path) exitWith { - diag_log text format ["[POTATO-assignGear] - No loadout found for %1 (typeOf %2)", _theBox, typeof _theBox]; + diag_log formatText ["[POTATO-assignGear] - No loadout found for %1 (typeOf %2)", _theBox, typeOf _theBox]; }; -//Clean out starting inventory (even if there is no class) -clearWeaponCargoGlobal _theBox; -clearMagazineCargoGlobal _theBox; -clearItemCargoGlobal _theBox; -clearBackpackCargoGlobal _theBox; - -private _transportMagazines = getArray(_path >> "TransportMagazines"); -private _transportItems = getArray(_path >> "TransportItems"); -private _transportWeapons = getArray(_path >> "TransportWeapons"); -private _transportBackpacks = getArray(_path >> "TransportBackpacks"); - -// transportMagazines -{ - (_x splitString ":") params ["_classname", ["_amount", "1", [""]]]; - _theBox addMagazineCargoGlobal [_classname, parseNumber _amount]; - nil -} count _transportMagazines; // count used here for speed, make sure nil is above this line - -// transportItems -{ - (_x splitString ":") params ["_classname", ["_amount", "1", [""]]]; - _theBox addItemCargoGlobal [_classname, parseNumber _amount]; - nil -} count _transportItems; // count used here for speed, make sure nil is above this line - -// transportWeapons -{ - (_x splitString ":") params ["_classname", ["_amount", "1", [""]]]; - private _disposableName = cba_disposable_LoadedLaunchers getVariable [_classname, ""]; - if (_disposableName != "") then { - TRACE_2("cba_disposable_LoadedLaunchers replace",_classname,_disposableName); - _classname = _disposableName; +private _subBoxes = "true" configClasses _path; +if (_subBoxes isNotEqualTo [] && GVAR(setSupplyBoxLoadouts) == 2) then { + private _boxName = getText (_path >> "boxCustomName"); + if (_boxName isNotEqualTo "") then { + _theBox setVariable [QACEGVAR(cargo,customName), _boxName, true]; }; - _theBox addWeaponCargoGlobal [_classname, parseNumber _amount]; - nil -} count _transportWeapons; // count used here for speed, make sure nil is above this line + clearWeaponCargoGlobal _theBox; + clearMagazineCargoGlobal _theBox; + clearItemCargoGlobal _theBox; + clearBackpackCargoGlobal _theBox; + private _boxSpace = getNumber (_path >> "boxSpace"); + [_theBox, [_boxSpace, 4] select (_boxSpace == 0)] call ACEFUNC(cargo,setSpace); + { + private _subBoxType = configName _x; + private _boxCount = (getNumber (_x >> "boxCount")) max 1; + for "_i" from 1 to _boxCount do { + private _subBox = createVehicle [_subBoxType, [0, 0, 0], [], 0, "CAN_COLLIDE"]; + [_subBox, _x, ["%1", "%1 " + str _i] select (_boxCount > 1)] call FUNC(setBoxContentsFromConfig); + [_subBox, 1] call ACEFUNC(cargo,setSize); + if !([_subBox, _theBox, true] call ACEFUNC(cargo,loadItem)) exitWith { + diag_log formatText [ + "[POTATO-assignGear] - Failed to create %1 %2 supply box(es) for %3 - out of space ", + _subBoxType, + "x" + str (_boxCount - _i + 1), + typeOf _theBox + ]; + deleteVehicle _subBox; + }; + _subBox setVariable [QGVAR(initialized), true]; + }; + } forEach _subBoxes; + [_theBox, 2] call ACEFUNC(cargo,setSize); + [_theBox, true, [0, 1, 1], 0, true, true] call ACEFUNC(dragging,setCarryable); + [_theBox, true, [0, 1.5, 0], 0, true, true] call ACEFUNC(dragging,setDraggable); +} else { + [_theBox, _path] call FUNC(setBoxContentsFromConfig); +}; -// transportBackpacks -{ - (_x splitString ":") params ["_classname", ["_amount", "1", [""]]]; - _theBox addBackpackCargoGlobal [_classname, parseNumber _amount]; - nil -} count _transportBackpacks; // count used here for speed, make sure nil is above this line +private _addMarkingActions = getNumber (_path >> "addMarkingActions"); +if (_addMarkingActions >= 1) then { + [QGVAR(resupplyBoxAddActions), [_theBox, _addMarkingActions]] call CBA_fnc_globalEventJIP; +}; diff --git a/addons/assignGear/functions/fnc_assignGearVehicle.sqf b/addons/assignGear/functions/fnc_assignGearVehicle.sqf index d70bd7e0..747c8985 100644 --- a/addons/assignGear/functions/fnc_assignGearVehicle.sqf +++ b/addons/assignGear/functions/fnc_assignGearVehicle.sqf @@ -2,6 +2,8 @@ /* * Author: PabstMirror * Applies a loadout to a vehicle + * Edited by Bailed to add option 2 + * Edited by Lambda.Tier to add option 3 and move some common code to functions * * Arguments: * 0: Vehicle @@ -15,7 +17,6 @@ * * Public: Yes */ - params ["_theVehicle", "_defaultLoadout"]; TRACE_2("assignGearVehicle",_theVehicle,_defaultLoadout); @@ -28,7 +29,7 @@ TRACE_2("",GVAR(setVehicleLoadouts),_loadout); //Leave default gear when "F_Gear" is "Default" or GVAR(setVehicleLoadouts) is 0 if ((GVAR(setVehicleLoadouts) == 0) || {_loadout == "Default"}) exitWith { if (GVAR(alwaysAddToolkits)) then { _theVehicle addItemCargoGlobal ["Toolkit", 1]; }; - if (GVAR(alwaysAddLandRopes) && {(_theVehicle isKindOf "Car") || {_theVehicle isKindOf "Tank"}}) then { + if (GVAR(alwaysAddLandRopes) && {(_theVehicle isKindOf "Car") || {_theVehicle isKindOf "Tank"}}) then { _theVehicle addItemCargoGlobal ["ACE_rope15", 1]; // note: this rope is probably too short to fastrope with, so don't add to air }; }; @@ -41,7 +42,7 @@ if ((GVAR(setVehicleLoadouts) == -1) || {_loadout == "Empty"}) exitWith { clearBackpackCargoGlobal _theVehicle; //Add a Toolkit if (GVAR(alwaysAddToolkits)) then { _theVehicle addItemCargoGlobal ["Toolkit", 1]; }; - if (GVAR(alwaysAddLandRopes) && {(_theVehicle isKindOf "Car") || {_theVehicle isKindOf "Tank"}}) then { + if (GVAR(alwaysAddLandRopes) && {(_theVehicle isKindOf "Car") || {_theVehicle isKindOf "Tank"}}) then { _theVehicle addItemCargoGlobal ["ACE_rope15", 1]; }; }; @@ -72,54 +73,60 @@ if (!isClass _path) then { }; if (!isClass _path) exitWith { - diag_log text format ["[POTATO-assignGear] - No loadout found for %1 (typeOf %2) (kindOf %3) (defaultLoadout: %4)", _theVehicle, typeof _theVehicle, _loadout, _defaultLoadout]; + diag_log text format ["[POTATO-assignGear] - No loadout found for %1 (typeOf %2) (kindOf %3) (defaultLoadout: %4)", _theVehicle, typeOf _theVehicle, _loadout, _defaultLoadout]; +}; + +switch (GVAR(setVehicleLoadouts)) do { + case 1: { // ammo in vehicle inventory + [_theVehicle, _path] call FUNC(setContainerContentsFromConfig); + }; + case 2: { // ammo in boxes in vehicle + clearWeaponCargoGlobal _theVehicle; + clearMagazineCargoGlobal _theVehicle; + clearItemCargoGlobal _theVehicle; + clearBackpackCargoGlobal _theVehicle; + [_theVehicle, _path, + getArray(_path >> "TransportMagazines"), + getArray(_path >> "TransportItems"), + getArray(_path >> "TransportWeapons"), + getArray(_path >> "TransportBackpacks")] call FUNC(assignGearVehicle_asBoxes); + }; + case 3: { // ammo in boxes in vehicle from config + clearWeaponCargoGlobal _theVehicle; + clearMagazineCargoGlobal _theVehicle; + clearItemCargoGlobal _theVehicle; + clearBackpackCargoGlobal _theVehicle; + private _boxes = "true" configClasses _path; + if (_boxes isEqualTo []) exitWith { + [_theVehicle, _path] call FUNC(setContainerContentsFromConfig); + }; + private _vehicleSpace = getNumber (_path >> "minVehicleBoxSpace"); + if (_vehicleSpace > 0) then { + private _currentVehicleSpace = _theVehicle getVariable [ + QACEGVAR(cargo,hasCargo), + getNumber (configOf _theVehicle >> QACEGVAR(cargo,space)) + ]; + [_theVehicle, _vehicleSpace max _currentVehicleSpace] call ACEFUNC(cargo,setSpace); + }; + { + private _boxType = configName _x; + private _boxCount = (getNumber (_x >> "boxCount")) max 1; + for "_i" from 1 to _boxCount do { + private _box = createVehicle [_boxType, [0, 0, 0], [], 0, "CAN_COLLIDE"]; + [_box, _x, ["%1", "%1 " + str _i] select (_boxCount > 1)] call FUNC(setBoxContentsFromConfig); + [_box, 1] call ACEFUNC(cargo,setSize); + if !([_box, _theVehicle, true] call ACEFUNC(cargo,loadItem)) exitWith { + diag_log text format ["[POTATO-assignGear] - Failed to create %1 supply box(es) for %2 - out of space ", _boxType, typeOf _theVehicle]; + deleteVehicle _box; + }; + _box setVariable [QGVAR(initialized), true]; + }; + } forEach _boxes; + }; }; -//Clean out starting inventory (even if there is no class) -clearWeaponCargoGlobal _theVehicle; -clearMagazineCargoGlobal _theVehicle; -clearItemCargoGlobal _theVehicle; -clearBackpackCargoGlobal _theVehicle; //Add a Toolkit if (GVAR(alwaysAddToolkits)) then { _theVehicle addItemCargoGlobal ["Toolkit", 1]; }; -if (GVAR(alwaysAddLandRopes) && {(_theVehicle isKindOf "Car") || {_theVehicle isKindOf "Tank"}}) then { +if (GVAR(alwaysAddLandRopes) && {(_theVehicle isKindOf "Car") || {_theVehicle isKindOf "Tank"}}) then { _theVehicle addItemCargoGlobal ["ACE_rope15", 1]; }; - -private _transportMagazines = getArray(_path >> "TransportMagazines"); -private _transportItems = getArray(_path >> "TransportItems"); -private _transportWeapons = getArray(_path >> "TransportWeapons"); -private _transportBackpacks = getArray(_path >> "TransportBackpacks"); - -// transportMagazines -{ - (_x splitString ":") params ["_classname", ["_amount", "1", [""]]]; - _theVehicle addMagazineCargoGlobal [_classname, parseNumber _amount]; - nil -} count _transportMagazines; // count used here for speed, make sure nil is above this line - -// transportItems -{ - (_x splitString ":") params ["_classname", ["_amount", "1", [""]]]; - _theVehicle addItemCargoGlobal [_classname, parseNumber _amount]; - nil -} count _transportItems; // count used here for speed, make sure nil is above this line - -// transportWeapons -{ - (_x splitString ":") params ["_classname", ["_amount", "1", [""]]]; - private _disposableName = cba_disposable_LoadedLaunchers getVariable [_classname, ""]; - if (_disposableName != "") then { - TRACE_2("cba_disposable_LoadedLaunchers replace",_classname,_disposableName); - _classname = _disposableName; - }; - _theVehicle addWeaponCargoGlobal [_classname, parseNumber _amount]; - nil -} count _transportWeapons; // count used here for speed, make sure nil is above this line - -// transportBackpacks -{ - (_x splitString ":") params ["_classname", ["_amount", "1", [""]]]; - _theVehicle addBackpackCargoGlobal [_classname, parseNumber _amount]; - nil -} count _transportBackpacks; // count used here for speed, make sure nil is above this line diff --git a/addons/assignGear/functions/fnc_assignGearVehicle_asBoxes.sqf b/addons/assignGear/functions/fnc_assignGearVehicle_asBoxes.sqf new file mode 100644 index 00000000..c480a374 --- /dev/null +++ b/addons/assignGear/functions/fnc_assignGearVehicle_asBoxes.sqf @@ -0,0 +1,214 @@ +#include "script_component.hpp" +/* + * Author: tcvm + * Applies a loadout to a vehicle as loaded ammo-boxes + * + * Arguments: + * 0: Vehicle + * 1: Default loadout type + * + * Return Value: + * Nothing + * + * Example: + * [cursorTarget] call potato_assignGear_fnc_assignGearVehicle_asBoxes; + * + * Public: No + */ + +params ["_theVehicle", "_loadoutPath", "_transportMagazines", "_transportItems", "_transportWeapons", "_transportBackpacks"]; + +#define BAGS_PER_BOX 10 +#define WEAPONS_PER_BOX 5 +#define MAGAZINES_PER_BOX 100 + +private _getMassLbs = { + params ["_config"]; + private _mass = getNumber (_config >> "mass"); + + if (_mass == 0 && {isClass (_config >> "itemInfo")}) then { + _mass = getNumber (_config >> "itemInfo" >> "mass"); + }; + + if (_mass == 0 && {isClass (_config >> "WeaponSlotsInfo")}) then { + _mass = getNumber (_config >> "WeaponSlotsInfo" >> "mass"); + }; + _mass / 10 +}; + +private _getShortName = { + params ["_displayName"]; + (_displayName splitString " ") params ["_f", "_s"]; + private _shortName = format ["%1 %2", _f, _s]; + if (isNil "_s") then { + _shortName = _f; + }; + _shortName +}; + +private _semiGreedyFill = { + params ["_currentWeight", "_maxWeight", "_available", "_loadoutInfo", "_max"]; + scopeName "greedy_pick"; + private _name = []; + private _pickedItems = []; + private _chosen = ""; + private _amounts = [0]; + for "_added" from 0 to _max do { + // check if item of this type remain + if ((_amounts select 0) == 0) then { + _loadoutInfo deleteAt _chosen; + if (_available isEqualTo []) exitWith { + _chosen = ""; + breakTo "greedy_pick"; + }; + _chosen = _available deleteAt 0; + _amounts = _loadoutInfo get _chosen; + _name pushBackUnique ([_amounts select 2] call _getShortName); + }; + + _amounts params ["_count", "_weight"]; + private _toAdd = 1; + if (_weight == 0) then { + _toAdd = _count; + } else { + _toAdd = floor ((_maxWeight - _currentWeight) / _weight); + }; + // always add at least one item, up to the specified bound + _toAdd = 1 max (_toAdd min _count min (_max - _added)); + _added = _added + _toAdd; + + _currentWeight = _currentWeight + _weight * _toAdd; + _amounts set [0, _count - _toAdd]; + _pickedItems pushBack [_chosen, _toAdd]; + + if (_currentWeight >= _maxWeight) exitWith { + breakTo "greedy_pick"; + }; + }; + if (_chosen isNotEqualTo "") then { + // Since, if an item still exists to add we exist here, we need to re-add it + _loadoutInfo set [_chosen, _amounts]; + _available pushBack _chosen; + }; + + [_name, _pickedItems, _currentWeight] +}; + +private _transportBoxClassname = getText (_loadoutPath >> "AmmoBox"); +if (_transportBoxClassname == "") then { + _transportBoxClassname = "Box_NATO_Ammo_F"; +}; +private _transportBoxWeight = getNumber (_loadoutPath >> "AmmoBoxCapacity"); +if (_transportBoxWeight == 0) then { + _transportBoxWeight = 75; +}; + +private _loadoutInfo = createHashMap; +private _availableMagazines = []; +private _availableItems = []; +private _availableWeapons = []; +private _availableBackpacks = []; +// transportMagazines +{ + (_x splitString ":") params ["_classname", ["_amount", "1", [""]]]; + _availableMagazines pushBackUnique _classname; + private _config = configFile >> "CfgMagazines" >> _classname; + (_loadoutInfo getOrDefault [_classname, [0, _config call _getMassLbs, getText (_config >> "displayName")]]) params ["_existingAmount", "_mass", "_name"]; + _loadoutInfo set [_classname, [_existingAmount + parseNumber _amount, _mass, _name]]; + nil +} count _transportMagazines; // count used here for speed, make sure nil is above this line + +// transportItems +{ + (_x splitString ":") params ["_classname", ["_amount", "1", [""]]]; + _availableItems pushBackUnique _classname; + private _config = configFile >> "CfgWeapons" >> _classname; + (_loadoutInfo getOrDefault [_classname, [0, _config call _getMassLbs, getText (_config >> "displayName")]]) params ["_existingAmount", "_mass", "_name"]; + _loadoutInfo set [_classname, [_existingAmount + parseNumber _amount, _mass, _name]]; + nil +} count _transportItems; // count used here for speed, make sure nil is above this line + +// transportWeapons +{ + (_x splitString ":") params ["_classname", ["_amount", "1", [""]]]; + private _disposableName = [cba_disposable_LoadedLaunchers, _classname, "get", ""] call FUNC(getDisposableInfo); + if (_disposableName != "") then { + TRACE_2("cba_disposable_LoadedLaunchers replace",_classname,_disposableName); + _classname = _disposableName; + }; + _availableWeapons pushBackUnique _classname; + private _config = configFile >> "CfgWeapons" >> _classname; + (_loadoutInfo getOrDefault [_classname, [0, _config call _getMassLbs, getText (_config >> "displayName")]]) params ["_existingAmount", "_mass", "_name"]; + _loadoutInfo set [_classname, [_existingAmount + parseNumber _amount, _mass, _name]]; + nil +} count _transportWeapons; // count used here for speed, make sure nil is above this line + +// transportBackpacks +{ + (_x splitString ":") params ["_classname", ["_amount", "1", [""]]]; + _availableBackpacks pushBackUnique _classname; + private _config = configFile >> "CfgBackpacks" >> _classname; + (_loadoutInfo getOrDefault [_classname, [0, _config call _getMassLbs, getText (_config >> "displayName")]]) params ["_existingAmount", "_mass", "_name"]; + _loadoutInfo set [_classname, [_existingAmount + parseNumber _amount, _mass, _name]]; + nil +} count _transportBackpacks; // count used here for speed, make sure nil is above this line + +while { + _availableBackpacks isNotEqualTo [] || + { _availableItems isNotEqualTo [] } || + { _availableWeapons isNotEqualTo [] } || + { _availableMagazines isNotEqualTo [] } +} do { + scopeName "item_select_loop"; + private _currentWeight = 0; + private _box = createVehicle [_transportBoxClassname, [0, 0, 0], [], 0, "NONE"]; + clearWeaponCargoGlobal _box; + clearMagazineCargoGlobal _box; + clearItemCargoGlobal _box; + clearBackpackCargoGlobal _box; + [_box, 0] call ACEFUNC(cargo,setSize); + [_box, _theVehicle, true] call ACEFUNC(cargo,loadItem); + [_box, true, [0, 1.5, 0], 0, true, true] call ACEFUNC(dragging,setDraggable); + [_box, true, [0, 1, 1], 0, true, true] call ACEFUNC(dragging,setCarryable); + + private _name = []; + if (_currentWeight < _transportBoxWeight && _availableBackpacks isNotEqualTo []) then { + private _fillInfo = [_currentWeight, _transportBoxWeight, _availableBackpacks, _loadoutInfo, BAGS_PER_BOX] call _semiGreedyFill; + _fillInfo params ["_newName", "_toAdd", "_newWeight"]; + _currentWeight = _newWeight; + _name = _name + _newName; + { + _box addBackpackCargoGlobal _x; + } forEach _toAdd; + }; + if (_currentWeight < _transportBoxWeight && _availableWeapons isNotEqualTo []) then { + private _fillInfo = [_currentWeight, _transportBoxWeight, _availableWeapons, _loadoutInfo, WEAPONS_PER_BOX] call _semiGreedyFill; + _fillInfo params ["_newName", "_toAdd", "_newWeight"]; + _currentWeight = _newWeight; + _name = _name + _newName; + { + _box addWeaponCargoGlobal _x; + } forEach _toAdd; + }; + if (_currentWeight < _transportBoxWeight && _availableMagazines isNotEqualTo []) then { + private _fillInfo = [_currentWeight, _transportBoxWeight, _availableMagazines, _loadoutInfo, MAGAZINES_PER_BOX] call _semiGreedyFill; + _fillInfo params ["_newName", "_toAdd", "_newWeight"]; + _currentWeight = _newWeight; + _name = _name + _newName; + { + _box addMagazineCargoGlobal _x; + } forEach _toAdd; + }; + if (_currentWeight < _transportBoxWeight && _availableItems isNotEqualTo []) then { + private _fillInfo = [_currentWeight, _transportBoxWeight, _availableItems, _loadoutInfo, MAGAZINES_PER_BOX] call _semiGreedyFill; + _fillInfo params ["_newName", "_toAdd", "_newWeight"]; + _currentWeight = _newWeight; + _name = _name + _newName; + { + _box addItemCargoGlobal _x; + } forEach _toAdd; + }; + _box setVariable [QGVAR(initialized), true, true]; + _box setVariable [QACEGVAR(cargo,customName), _name joinString ",", true]; +}; + diff --git a/addons/assignGear/functions/fnc_changeableOptics_getChildren.sqf b/addons/assignGear/functions/fnc_changeableOptics_getChildren.sqf index e7f51512..0696df0e 100644 --- a/addons/assignGear/functions/fnc_changeableOptics_getChildren.sqf +++ b/addons/assignGear/functions/fnc_changeableOptics_getChildren.sqf @@ -31,7 +31,7 @@ private _path = ( private _possibleAttachments = [primaryWeapon _player] call CBA_fnc_compatibleItems; // in config-case private _opticClassnames = []; { - private _xConfig = configfile >> "CfgWeapons" >> _x; + private _xConfig = configFile >> "CfgWeapons" >> _x; private _xConfigName = configName _xConfig; if ((isNumber (_xConfig >> "ItemInfo" >> "optics")) && {GVAR(allowMagnifiedOptics) || {!([_xConfigName] call FUNC(isOpticMagnified))}} @@ -43,7 +43,7 @@ private _opticClassnames = []; { if (_x != ((primaryWeaponItems _player) param [2, ""])) then { - private _xConfig = configfile >> "CfgWeapons" >> _x; + private _xConfig = configFile >> "CfgWeapons" >> _x; private _picture = QPATHTOF(data\scope.paa); if (isText (_xConfig >> "picture")) then { _picture = getText (_xConfig >> "picture"); }; private _name = _x; diff --git a/addons/assignGear/functions/fnc_getDisposableInfo.sqf b/addons/assignGear/functions/fnc_getDisposableInfo.sqf new file mode 100644 index 00000000..8f6e7300 --- /dev/null +++ b/addons/assignGear/functions/fnc_getDisposableInfo.sqf @@ -0,0 +1,22 @@ +#include "script_component.hpp" + +params ["_hash", "_weapon", "_op", ["_default", nil]]; + +if (_op == "in") exitWith { + if (_hash isEqualType createHashMap) then { + private _weapon = configName (configFile >> "CfgWeapons" >> _weapon); + _weapon in _hash + } else { + !isNil {_hash getVariable _weapon} + }; +}; +if (_op == "get") exitWith { + if (_hash isEqualType createHashMap) then { + private _weapon = configName (configFile >> "CfgWeapons" >> _weapon); + _hash getOrDefault [_weapon, _default] + } else { + _hash getVariable [_weapon, _default] + }; +}; + +ERROR("bad op"); diff --git a/addons/assignGear/functions/fnc_getLinkedIndex.sqf b/addons/assignGear/functions/fnc_getLinkedIndex.sqf index c8f6f7a7..69e0a9c2 100644 --- a/addons/assignGear/functions/fnc_getLinkedIndex.sqf +++ b/addons/assignGear/functions/fnc_getLinkedIndex.sqf @@ -28,6 +28,7 @@ TRACE_1("params",_this); params ["_linkedItem", "_binocularArray", "_configMagazines"]; +//IGNORE_PRIVATE_WARNING ["_x"]; // Maps if (_x isKindOf ["ItemMap", configFile >> "CfgWeapons"]) exitWith { diff --git a/addons/assignGear/functions/fnc_getWeaponArray.sqf b/addons/assignGear/functions/fnc_getWeaponArray.sqf index 6c85f7d6..68c50941 100644 --- a/addons/assignGear/functions/fnc_getWeaponArray.sqf +++ b/addons/assignGear/functions/fnc_getWeaponArray.sqf @@ -73,8 +73,8 @@ if ((_weaponArray select LAW_PRIMARY_MUZZLE_MAG_INDEX) isEqualTo []) then { TRACE_2("adding disposable mag",_weapon,_magazine); }; // ref cba_disposable_fnc_changeDisposableLauncherClass - we have to replace weapon and magazine - if ((!isNil {cba_disposable_normalLaunchers getVariable _weapon})) then { - (cba_disposable_normalLaunchers getVariable _weapon) params ["_newWeapon", "_newMagazine"]; + if ([cba_disposable_normalLaunchers, _weapon, "in"] call FUNC(getDisposableInfo)) then { + ([cba_disposable_normalLaunchers, _weapon, "get"] call FUNC(getDisposableInfo)) params ["_newWeapon", "_newMagazine"]; _weaponArray set [LAW_WEAPON_INDEX, _newWeapon]; if (!isNil "_newMagazine") then { private _count = getNumber (configFile >> "CfgMagazines" >> _newMagazine >> "count"); diff --git a/addons/assignGear/functions/fnc_setBoxContentsFromConfig.sqf b/addons/assignGear/functions/fnc_setBoxContentsFromConfig.sqf new file mode 100644 index 00000000..d02f336b --- /dev/null +++ b/addons/assignGear/functions/fnc_setBoxContentsFromConfig.sqf @@ -0,0 +1,33 @@ +#include "script_component.hpp" +/* + * Author: Lambda.Tiger + * Fills box with gear from a config + * + * Arguments: + * 0: Box + * 1: Config path for the box's loadout + * 2: Optional format string for box name, must contain "%1" + * + * Return Value: + * None + * + * Example: + * [cursorObject, missionConfigFile >> "CfgLoadouts" >> "SupplyBoxes" >> (typeOf cursorObject), missionConfigFile >> "CfgLoadouts" >> "SupplyBox" >> (typeOf cursorObject)] call potato_assignGear_fnc_setBoxContentsFromConfig + * + * Public: No + */ + +params ["_theBox", "_path", ["_nameFormatString", "%1", [""]]]; + +[_theBox, _path] call FUNC(setContainerContentsFromConfig); + +private _boxName = getText (_path >> "boxCustomName"); +if (_boxName isNotEqualTo "") then { + _theBox setVariable [QACEGVAR(cargo,customName), format [_nameFormatString, _boxName], true]; + _theBox setVariable [QACEGVAR(cargo,customName), format [_nameFormatString, _boxName], true]; +}; + +private _overrideCarryWeight = 1 == (getNumber (_path >> "forceAllowCarry")); +private _overrideDragWeight = 1 == (getNumber (_path >> "forceAllowDrag")); +_theBox setVariable [QACEGVAR(cargo,ignoreWeightCarry), _overrideCarryWeight, true]; +_theBox setVariable [QACEGVAR(cargo,ignoreWeightDrag), _overrideCarryWeight || _overrideDragWeight, true]; diff --git a/addons/assignGear/functions/fnc_setContainerContentsFromConfig.sqf b/addons/assignGear/functions/fnc_setContainerContentsFromConfig.sqf new file mode 100644 index 00000000..a3fce4e9 --- /dev/null +++ b/addons/assignGear/functions/fnc_setContainerContentsFromConfig.sqf @@ -0,0 +1,61 @@ +#include "script_component.hpp" +/* + * Author: Pabst + * Fills box with gear from a config + * + * Arguments: + * 0: The container to be filled such as a vehicle or supply box + * 1: Config path for the box's loadout + * + * Return Value: + * None + * + * Example: + * [cursorObject, missionConfigFile >> "CfgLoadouts" >> "SupplyBox" >> (typeOf cursorObject)] call potato_assignGear_fnc_setContainerContentsFromConfig + * + * Public: No + */ + +params ["_theContainer", "_path"]; + +clearWeaponCargoGlobal _theContainer; +clearMagazineCargoGlobal _theContainer; +clearItemCargoGlobal _theContainer; +clearBackpackCargoGlobal _theContainer; + +private _transportMagazines = getArray(_path >> "TransportMagazines"); +private _transportItems = getArray(_path >> "TransportItems"); +private _transportWeapons = getArray(_path >> "TransportWeapons"); +private _transportBackpacks = getArray(_path >> "TransportBackpacks"); + +// transportMagazines +{ + (_x splitString ":") params ["_classname", ["_amount", "1", [""]]]; + _theContainer addMagazineCargoGlobal [_classname, parseNumber _amount]; + nil +} count _transportMagazines; // count used here for speed, make sure nil is above this line + +// transportItems +{ + (_x splitString ":") params ["_classname", ["_amount", "1", [""]]]; + _theContainer addItemCargoGlobal [_classname, parseNumber _amount]; + nil +} count _transportItems; // count used here for speed, make sure nil is above this line + +// transportWeapons +{ + (_x splitString ":") params ["_classname", ["_amount", "1", [""]]]; + private _disposableName = [cba_disposable_LoadedLaunchers, _classname, "get", ""] call FUNC(getDisposableInfo); + if (_disposableName != "") then { + _classname = _disposableName; + }; + _theContainer addWeaponCargoGlobal [_classname, parseNumber _amount]; + nil +} count _transportWeapons; // count used here for speed, make sure nil is above this line + +// transportBackpacks +{ + (_x splitString ":") params ["_classname", ["_amount", "1", [""]]]; + _theContainer addBackpackCargoGlobal [_classname, parseNumber _amount]; + nil +} count _transportBackpacks; // count used here for speed, make sure nil is above this line diff --git a/addons/briefing/XEH_postInit.sqf b/addons/briefing/XEH_postInit.sqf index c0883f1a..bcefc86e 100644 --- a/addons/briefing/XEH_postInit.sqf +++ b/addons/briefing/XEH_postInit.sqf @@ -18,7 +18,7 @@ if (hasInterface) then { [{ INFO("Checking group ids"); { - if ((((units _x) findIf {isPlayer _x}) > -1) && {((groupID _x) find "-") > -1}) then { + if ((((units _x) findIf {isPlayer _x}) > -1) && {((groupId _x) find "-") > -1}) then { private _markerText = _x getVariable [QEGVAR(markers,markerText), ""]; if (_markerText == "") then { _markerText = (leader _x) getVariable [QEGVAR(markers,markerText), ""]; }; WARNING_2("Player Group with vanilla callsign: %1 [Marker: %2]",_x,_markerText); diff --git a/addons/briefing/functions/fnc_addBriefingToUnit.sqf b/addons/briefing/functions/fnc_addBriefingToUnit.sqf index bb03c822..b40d2066 100644 --- a/addons/briefing/functions/fnc_addBriefingToUnit.sqf +++ b/addons/briefing/functions/fnc_addBriefingToUnit.sqf @@ -14,8 +14,8 @@ #include "script_component.hpp" -TRACE_1("params",_newPlayer); params ["_newPlayer"]; +TRACE_1("params",_newPlayer); if (isNull _newPlayer) exitWith {}; if (!alive _newPlayer) exitWith {}; diff --git a/addons/briefing/functions/fnc_addCredits.sqf b/addons/briefing/functions/fnc_addCredits.sqf index 641dc2a4..50a06ab3 100644 --- a/addons/briefing/functions/fnc_addCredits.sqf +++ b/addons/briefing/functions/fnc_addCredits.sqf @@ -13,8 +13,8 @@ #include "script_component.hpp" -TRACE_1("params",_unit); params ["_unit"]; +TRACE_1("params",_unit); private _missionName = getMissionConfigValue ["onLoadName", getMissionConfigValue ["briefingName", "???"]]; private _authorName = getMissionConfigValue ["author", "???"]; diff --git a/addons/briefing/functions/fnc_addOrbat.sqf b/addons/briefing/functions/fnc_addOrbat.sqf index 0a4c2a5c..ba7f7659 100644 --- a/addons/briefing/functions/fnc_addOrbat.sqf +++ b/addons/briefing/functions/fnc_addOrbat.sqf @@ -34,10 +34,10 @@ _this spawn { case (civilian): { "#880099" }; default { "#FFFFFF" }; }; - _diaryBuilder pushBack format ["%2", _color, (groupID _x)]; + _diaryBuilder pushBack format ["%2", _color, (groupId _x)]; { - private _xIcon = gettext (configfile >> "CfgVehicles" >> typeOf (vehicle _x) >> "icon"); - private _image = gettext (configfile >> "CfgVehicleIcons" >> _xIcon); + private _xIcon = getText (configFile >> "CfgVehicles" >> typeOf (vehicle _x) >> "icon"); + private _image = getText (configFile >> "CfgVehicleIcons" >> _xIcon); _diaryBuilder pushBack format ["%2", _image, (name _x)]; } forEach (units _x); }; diff --git a/addons/briefing/functions/fnc_addTreatmentDiary.sqf b/addons/briefing/functions/fnc_addTreatmentDiary.sqf index 40a25a30..c7512e6f 100644 --- a/addons/briefing/functions/fnc_addTreatmentDiary.sqf +++ b/addons/briefing/functions/fnc_addTreatmentDiary.sqf @@ -75,7 +75,7 @@ private _maxEffectiveness = -9999; _treatmentInfo pushBack _treatment; TRACE_2("",_treatment,_woundList); }; -} forEach ("true" configClasses (configfile >> "ACE_Medical_Advanced" >> "Treatment" >> "Bandaging")); +} forEach ("true" configClasses (configFile >> "ACE_Medical_Advanced" >> "Treatment" >> "Bandaging")); TRACE_2("",_woundEffectiveness,_treatmentInfo); @@ -147,7 +147,7 @@ if (_isMedic) then { }; _treatmentsDiaryBuilder pushBack format [" Time in system (seconds): %1", getNumber (_x >> "timeInSystem")]; - } forEach ("true" configClasses (configfile >> "ACE_Medical_Advanced" >> "Treatment" >> "Medication")); + } forEach ("true" configClasses (configFile >> "ACE_Medical_Advanced" >> "Treatment" >> "Medication")); _treatmentsDiaryBuilder pushBack ""; _treatmentsDiaryBuilder pushBack "Fluids:"; diff --git a/addons/core/XEH_postInit.sqf b/addons/core/XEH_postInit.sqf index bb523c3d..923f03ab 100644 --- a/addons/core/XEH_postInit.sqf +++ b/addons/core/XEH_postInit.sqf @@ -28,6 +28,40 @@ if (hasInterface) then { }; }; }, true] call CBA_fnc_addPlayerEventHandler; + + + // Cleanup chat + addMissionEventHandler ["HandleChatMessage", { + if (missionNamespace getVariable [QGVAR(skipChatHandler), false]) exitWith {}; // way to disable system if it causes problem with a mission + params ["_channel", "_owner", "_from", "_text", "_person", "_name", "_strID", "_forcedDisplay", "_isPlayerMessage", "_sentenceType", "_chatMessageType", "_chatComposition"]; + INFO_1("ChatMessage: %1",_this); + private _returnValue = nil; + // Block player messages, not on breifing, who are not spectators + if ((isPlayer _person) && {CBA_missionTime > 0} && {getNumber (configOf _person >> "isPlayableLogic") != 1}) then { + if ((_text select [0,5]) == "force") then { + // _returnValue = _text select [5]; // optionally clean up text + } else { + INFO_2("hiding player chat [%1: %2]",_name,_text); + _returnValue = true; // block + if (_person == player) then { + // Chats from inside the EH don't seem to trigger the EH but they say not to + [{ + systemChat "POTATO [Your message was blocked, to send in channel start with 'force']"; + systemChat "POTATO [Use admin message (hit escape) for help with Problems/JIP]"; + }] call CBA_fnc_execNextFrame; + }; + }; + } else { + if ((_channel == 16) && {GVAR(hideSystemPlayerConnecting)} && {_chatComposition isNotEqualTo []} && { + _chatComposition params ["_stringID"]; + (toLower _stringID) in ["$str_mp_connecting", "$str_mp_connect", "$str_mp_connection_loosing", "$str_mp_disconnect"] + }) then { + INFO_1("hiding connection info [%1]",_chatComposition); + _returnValue = true; + }; + }; + _returnValue // don't use exitWith in eh + }]; }; ["potato_adminMsg", { diff --git a/addons/core/XEH_preStart.sqf b/addons/core/XEH_preStart.sqf index 87b3cb53..eea92f76 100644 --- a/addons/core/XEH_preStart.sqf +++ b/addons/core/XEH_preStart.sqf @@ -2,7 +2,7 @@ #include "XEH_PREP.hpp" -private _notLoaded = configProperties [configfile >> "potato_notLoaded", "isText _x"]; +private _notLoaded = configProperties [configFile >> "potato_notLoaded", "isText _x"]; { WARNING_2("[%1] not loaded because %2",configName _x,getText (_x)); } forEach _notLoaded; diff --git a/addons/core/initSettings.inc.sqf b/addons/core/initSettings.inc.sqf index 3f0b00e6..92ec96e7 100644 --- a/addons/core/initSettings.inc.sqf +++ b/addons/core/initSettings.inc.sqf @@ -5,3 +5,10 @@ ["POTATO - User", "Admin Chat"], true ] call cba_settings_fnc_init; +[ + QGVAR(hideSystemPlayerConnecting), + "CHECKBOX", + ["Hide system player connection messages", "Hides ""Player is losing connection"" type messages"], + ["POTATO - User", "Admin Chat"], + false +] call cba_settings_fnc_init; diff --git a/addons/core/script_macros.hpp b/addons/core/script_macros.hpp index 355225d7..cea3bacd 100644 --- a/addons/core/script_macros.hpp +++ b/addons/core/script_macros.hpp @@ -15,8 +15,8 @@ #define CFUNC(var1) EFUNC(core,var1) -#define AUTHORIZED_USERS ["76561197993419566","76561198041187862","76561197989110885","76561198029918230","76561198045666926","76561198012560026","76561198006659699","76561197987917596","76561198020660065","76561198117355311","76561198055982189"] -#define TECH_USERS ["76561197993419566","76561198041187862","76561198012560026","76561198029918230"] +#define AUTHORIZED_USERS ["76561197993419566","76561198041187862","76561197989110885","76561198029918230","76561198045666926","76561198012560026","76561198006659699","76561197987917596","76561198020660065","76561198117355311","76561198055982189","76561198005304746"] +#define TECH_USERS ["76561197993419566","76561198041187862","76561198012560026","76561198029918230","76561198005304746"] #define MISSION_HINT_SIDES [1, west, east, resistance, civilian, 0] #define MISSION_HINT_RANKS [-99,1,2,3] diff --git a/addons/core/script_mod.hpp b/addons/core/script_mod.hpp index 5a85ceb8..1ea7d759 100644 --- a/addons/core/script_mod.hpp +++ b/addons/core/script_mod.hpp @@ -14,4 +14,4 @@ #define REQUIRED_VERSION 2.10 // Warn if starting **NEW** mission on a BWMF version older than this -#define EXPECTED_BWMF "2024/1/7" +#define EXPECTED_BWMF "2024/8/22" diff --git a/addons/core/script_version.hpp b/addons/core/script_version.hpp index 697900c5..0e0f4c28 100644 --- a/addons/core/script_version.hpp +++ b/addons/core/script_version.hpp @@ -1,4 +1,4 @@ #define MAJOR 1 #define MINOR 3 -#define PATCHLVL 43 +#define PATCHLVL 47 #define BUILD 0 diff --git a/addons/cswCompat/patchGM/ACE_CSW_Groups.hpp b/addons/cswCompat/patchGM/ACE_CSW_Groups.hpp new file mode 100644 index 00000000..2408f9a4 --- /dev/null +++ b/addons/cswCompat/patchGM/ACE_CSW_Groups.hpp @@ -0,0 +1,26 @@ +class ACE_CSW_Groups { + //// MILAN + class gm_1Rnd_milan_heat_dm82_csw { + gm_1Rnd_milan_heat_dm82 = 1; + }; + class gm_1Rnd_milan_heat_dm92_csw { // Same name as the carryable magazine + gm_1Rnd_milan_heat_dm92 = 1; // Vehicle magazine that will be loaded when loading this magazine + }; + + //// Fagot + class gm_1Rnd_fagot_heat_9m111_csw { + gm_1Rnd_fagot_heat_9m111 = 1; + }; + + //// MG3 + class gm_120Rnd_762x51mm_b_t_DM21_mg3_grn { + gm_120Rnd_762x51mm_b_t_DM21_mg3_grn = 1; + }; + class gm_120Rnd_762x51mm_b_t_DM21A1_mg3_grn { + gm_120Rnd_762x51mm_b_t_DM21A1_mg3_grn = 1; + }; + class gm_120Rnd_762x51mm_b_t_DM21A2_mg3_grn { + gm_120Rnd_762x51mm_b_t_DM21A2_mg3_grn = 1; + }; + +}; diff --git a/addons/cswCompat/patchGM/CfgMagazines.hpp b/addons/cswCompat/patchGM/CfgMagazines.hpp new file mode 100644 index 00000000..af59a9a5 --- /dev/null +++ b/addons/cswCompat/patchGM/CfgMagazines.hpp @@ -0,0 +1,50 @@ +class CfgMagazines { + //// MILAN + class gm_1Rnd_milan_heat_dm82; + class gm_1Rnd_milan_heat_dm82_csw: gm_1Rnd_milan_heat_dm82 { + displayName = "[CSW] HEAT DM82 (MILAN 1)"; + scope = 2; + scopeArsenal = 2; + type = 256; + count = 1; + model = "\gm\gm_weapons\gm_launchers\gm_milan\gm_1rnd_milan_heat_dm92.p3d"; + ACE_isBelt = 0; + mass = 159; + }; + + class gm_1Rnd_milan_heat_dm92; + class gm_1Rnd_milan_heat_dm92_csw: gm_1Rnd_milan_heat_dm92 { + displayName = "[CSW] HEAT DM92 (MILAN 2)"; + scope = 2; + scopeArsenal = 2; + type = 256; + count = 1; + model = "\gm\gm_weapons\gm_launchers\gm_milan\gm_1rnd_milan_heat_dm92.p3d"; + ACE_isBelt = 0; + mass = 168; + }; + + //// Fagot + class gm_1Rnd_fagot_heat_9m111; + class gm_1Rnd_fagot_heat_9m111_csw: gm_1Rnd_fagot_heat_9m111 { + displayName = "[CSW] HEAT 9M111 (Fagot)"; + scope = 2; + scopeArsenal = 2; + type = 256; + picture = ACE_CSW_PATH(UI\StaticAT_Icon.paa); + ACE_isBelt = 0; + mass = 276; + }; + + //// MG3 + class gm_120rnd_762x51mm_mg3_grn; + class gm_120Rnd_762x51mm_b_t_DM21_mg3_grn: gm_120rnd_762x51mm_mg3_grn { + ACE_isBelt = 0; + }; + class gm_120Rnd_762x51mm_b_t_DM21A1_mg3_grn: gm_120rnd_762x51mm_mg3_grn { + ACE_isBelt = 0; + }; + class gm_120Rnd_762x51mm_b_t_DM21A2_mg3_grn: gm_120rnd_762x51mm_mg3_grn { + ACE_isBelt = 0; + }; +}; \ No newline at end of file diff --git a/addons/cswCompat/patchGM/CfgVehicles.hpp b/addons/cswCompat/patchGM/CfgVehicles.hpp new file mode 100644 index 00000000..ab2d37d1 --- /dev/null +++ b/addons/cswCompat/patchGM/CfgVehicles.hpp @@ -0,0 +1,264 @@ +class CfgVehicles { + class gm_staticATGM_base; + //// MILAN + class gm_milan_launcher_tripod_base: gm_staticATGM_base { + class ACE_Actions; + class Turrets; + }; + class gm_ge_army_milan_launcher_tripod_base: gm_milan_launcher_tripod_base { + class ACE_Actions: ACE_Actions { + class ACE_MainActions; + }; + class AnimationSources; + class Turrets: Turrets { + class MainTurret; + }; + }; + class gm_ge_army_milan_launcher_tripod: gm_ge_army_milan_launcher_tripod_base { + class ACE_Actions: ACE_Actions { + class ACE_MainActions: ACE_MainActions { + selection = "mainturret_elev"; + }; + }; + class AnimationSources: AnimationSources { + class MainTurret_realodMagazine_source; + class MainTurret_revolving_source; + }; + class assembleInfo; + class Turrets: Turrets { + class MainTurret: MainTurret { + class Components; + class GunClouds; + class GunFire; + class HitPoints; + class MGunClouds; + class Reflectors; + class TurnIn; + class TurnOut; + class Turrets; + class TurretSpec; + class ViewGunner; + class ViewOptics; + }; + }; + }; + class gm_ge_army_milan_launcher_tripod_csw: gm_ge_army_milan_launcher_tripod { + class ACE_Actions: ACE_Actions { + class ACE_MainActions: ACE_MainActions { + class ACE_csw_pickUp { + displayName = "Disassemble"; + condition = "call ace_csw_fnc_canPickupTripod"; + statement = "call ace_csw_fnc_assemble_pickupTripod"; + }; + }; + }; + class ACE_CSW { + enabled = 1; // Enables ACE CSW for this weaponmmo handling interaction point location (custom pos) + ammoLoadTime = 10 ; // How long it takes in + proxyWeapon = ""; // The proxy weapon created above. This can also be a function name that returns a proxy weapon - passed [_vehicle, _turret, _currentWeapon, _needed, _emptyWeapon] + disassembleWeapon = ""; // Carryable weapon created above + disassembleTurret = ""; // Which static tripod will appear when weapon is disassembled + disassembleTo = QGVAR(gm_milan_backpack); // Abuse the tripods + magazineLocation = "[0.204429,0.696469,-0.680236]"; // Aseconds to load ammo into the weapon + ammoUnloadTime = 10; // How long it takes in seconds to unload ammo from the weapon + desiredAmmo = 1; // When the weapon is reloaded it will try and reload to this ammo capacity + }; + class AnimationSources: AnimationSources { + class MainTurret_realodMagazine_source: MainTurret_realodMagazine_source { + source = "reloadmagazine"; + weapon = QGVAR(gm_milan_launcher_proxy); + }; + class MainTurret_revolving_source: MainTurret_revolving_source { + source = "revolving"; + weapon = QGVAR(gm_milan_launcher_proxy); + }; + }; + class assembleInfo: assembleInfo { + dissasembleTo[] = {}; + }; + class Turrets: Turrets { + class MainTurret: MainTurret { + class Components: Components {}; + class GunClouds: GunClouds {}; + class GunFire: GunFire {}; + class HitPoints: HitPoints {}; + class MGunClouds: MGunClouds {}; + class Reflectors: Reflectors {}; + class TurnIn: TurnIn {}; + class TurnOut: TurnOut {}; + class Turrets: Turrets {}; + class TurretSpec: TurretSpec {}; + class ViewGunner: ViewGunner {}; + class ViewOptics: ViewOptics {}; + weapons[] = {QGVAR(gm_milan_launcher_proxy)}; + magazines[] = {}; + }; + }; + displayName = "[CSW] MILAN"; + displayNameShort = "MILAN"; + }; + + //// Fagot + class gm_fagot_launcher_tripod_base: gm_staticATGM_base { + class ACE_Actions; + class Turrets; + }; + class gm_gc_army_fagot_launcher_tripod_base: gm_fagot_launcher_tripod_base { + class ACE_Actions: ACE_Actions { + class ACE_MainActions; + }; + class AnimationSources; + class Turrets: Turrets { + class MainTurret; + }; + }; + class gm_gc_army_fagot_launcher_tripod: gm_gc_army_fagot_launcher_tripod_base { + class ACE_Actions: ACE_Actions { + class ACE_MainActions: ACE_MainActions { + selection = "mainturret_elev"; + }; + }; + class AnimationSources: AnimationSources { + class MainTurret_realodMagazine_source; + class MainTurret_revolving_source; + }; + class assembleInfo; + class Turrets: Turrets { + class MainTurret: MainTurret { + class Components; + class GunClouds; + class GunFire; + class HitPoints; + class MGunClouds; + class Reflectors; + class TurnIn; + class TurnOut; + class Turrets; + class TurretSpec; + class ViewGunner; + class ViewOptics; + }; + }; + }; + class gm_gc_army_fagot_launcher_tripod_csw: gm_gc_army_fagot_launcher_tripod { + class ACE_Actions: ACE_Actions { + class ACE_MainActions: ACE_MainActions { + class ACE_csw_pickUp { + displayName = "Disassemble"; + condition = "call ace_csw_fnc_canPickupTripod"; + statement = "call ace_csw_fnc_assemble_pickupTripod"; + }; + }; + }; + class ACE_CSW { + enabled = 1; // Enables ACE CSW for this weaponmmo handling interaction point location (custom pos) + ammoLoadTime = 10 ; // How long it takes in + proxyWeapon = ""; // The proxy weapon created above. This can also be a function name that returns a proxy weapon - passed [_vehicle, _turret, _currentWeapon, _needed, _emptyWeapon] + disassembleWeapon = ""; // Carryable weapon created above + disassembleTurret = ""; // Which static tripod will appear when weapon is disassembled + disassembleTo = QGVAR(gm_fagot_backpack); // Abuse the tripods + magazineLocation = "[0,0.4,-0.7]"; // Aseconds to load ammo into the weapon + ammoUnloadTime = 10; // How long it takes in seconds to unload ammo from the weapon + desiredAmmo = 1; // When the weapon is reloaded it will try and reload to this ammo capacity + }; + class AnimationSources: AnimationSources { + class MainTurret_realodMagazine_source: MainTurret_realodMagazine_source { + source = "reloadmagazine"; + weapon = QGVAR(gm_fagot_launcher_proxy); + }; + class MainTurret_revolving_source: MainTurret_revolving_source { + source = "revolving"; + weapon = QGVAR(gm_fagot_launcher_proxy); + }; + }; + class assembleInfo: assembleInfo { + dissasembleTo[] = {}; + }; + class Turrets: Turrets { + class MainTurret: MainTurret { + class Components: Components {}; + class GunClouds: GunClouds {}; + class GunFire: GunFire {}; + class HitPoints: HitPoints {}; + class MGunClouds: MGunClouds {}; + class Reflectors: Reflectors {}; + class TurnIn: TurnIn {}; + class TurnOut: TurnOut {}; + class Turrets: Turrets {}; + class TurretSpec: TurretSpec {}; + class ViewGunner: ViewGunner {}; + class ViewOptics: ViewOptics {}; + weapons[] = {QGVAR(gm_fagot_launcher_proxy)}; + magazines[] = {}; + }; + }; + displayName = "[CSW] Fagot"; + displayNameShort = "Fagot"; + }; + + //// MG3 AA + // MG3 Tripod + class StaticWeapon; + class gm_staticWeapon_base: StaticWeapon { + class ACE_Actions; + }; + class gm_staticMG_base: gm_staticWeapon_base { + class ACE_Actions: ACE_Actions { + class ACE_MainActions; + }; + }; + class gm_mg3_aatripod_base: gm_staticMG_base { + class ACE_Actions: ACE_Actions { + class ACE_MainActions: ACE_MainActions { + selection = "machinegunturret_01_elev"; + }; + }; + }; + class gm_ge_army_mg3_aatripod_base: gm_mg3_aatripod_base { + class ACE_Actions: ACE_Actions {}; + }; + class gm_ge_army_mg3_aatripod: gm_ge_army_mg3_aatripod_base { + class ACE_Actions: ACE_Actions {}; + }; + class gm_ge_army_mg3_aatripod_csw: gm_ge_army_mg3_aatripod { + class ACE_Actions: ACE_Actions {}; + class ACE_CSW { + enabled = 1; // Enables ACE CSW for this weaponmmo handling interaction point location (custom pos) + ammoLoadTime = 0.1 ; // How long it takes in + proxyWeapon = ""; // The proxy weapon created above. This can also be a function name that returns a proxy weapon - passed [_vehicle, _turret, _currentWeapon, _needed, _emptyWeapon] + disassembleWeapon = "gm_mg3_blk"; // Carryable weapon created above + disassembleTurret = QGVAR(gm_MG3Tripod); // Which static tripod will appear when weapon is disassembled + magazineLocation = "_target selectionPosition 'machinegunturret_01_magazine'"; // Aseconds to load ammo into the weapon + ammoUnloadTime = 5; // How long it takes in seconds to unload ammo from the weapon + desiredAmmo = 120; // When the weapon is reloaded it will try and reload to this ammo capacity + }; + displayName = "[CSW] MG3 - Anti Air Tripod"; + }; + + // MG3 Tripod + class ThingX; + class ace_csw_baseTripod: ThingX { + class ACE_Actions; + }; + class ace_csw_m3Tripod: ace_csw_baseTripod { + class ACE_Actions: ACE_Actions { + class ACE_MainActions; + }; + }; + class GVAR(gm_MG3Tripod): ace_csw_m3Tripod { + class ACE_Actions: ACE_Actions { + class ACE_MainActions: ACE_MainActions { + selection = "machinegunturret_01_mounthide"; + }; + }; + class ACE_CSW { + disassembleTo = QGVAR(gm_MG3TripodCarry); + }; + displayName = "[CSW] MG3 AA Tripod (GM)"; + editorPreview = "gm\gm_weapons\gm_machineguns\gm_mg3\data\ui\preview_gm_mg3_aatripod_base.jpg"; + icon = "\gm\gm_weapons\gm_machineguns\gm_mg3\data\ui\map_gm_mg3_aatripod_ca"; + model = "\gm\gm_weapons\gm_machineguns\gm_mg3\gm_mg3_aatripod"; + picture = "\gm\gm_weapons\gm_machineguns\gm_mg3\data\ui\picture_gm_mg3_aatripod_ca"; + }; +}; +// spg9 model location selectionName: "mainturret_rear" diff --git a/addons/cswCompat/patchGM/CfgWeapons.hpp b/addons/cswCompat/patchGM/CfgWeapons.hpp new file mode 100644 index 00000000..0c451665 --- /dev/null +++ b/addons/cswCompat/patchGM/CfgWeapons.hpp @@ -0,0 +1,98 @@ +class CfgWeapons { + + //// Carryable weapons + class Launcher; + class Launcher_Base_F: Launcher { + class WeaponSlotsInfo; + }; + + /// Milan + class GVAR(gm_milan_backpack): Launcher_Base_F { + class ACE_CSW { + type = "mount"; + deployTime = 4; + pickupTime = 4; + deploy = "gm_ge_army_milan_launcher_tripod_csw"; + }; + class WeaponSlotsInfo: WeaponSlotsInfo { + class MuzzleSlot { + iconScale = 0.1; + }; + mass = 362; // 16.4 kg + }; + displayName = "[CSW] MILAN (GM)"; + author = "Lambda.Tiger"; + scope = 2; + scopeArsenal = 2; + model = ACE_APL_PATH(ACE_CSW_Bag.p3d); + modes[] = {}; + picture = "\gm\gm_weapons\gm_launchers\gm_milan\data\ui\picture_gm_milan_launcher_weaponBag_ca"; + }; + + /// Fagot + class GVAR(gm_fagot_backpack): Launcher_Base_F { + class ACE_CSW { + type = "mount"; + deployTime = 4; + pickupTime = 4; + deploy = "gm_gc_army_fagot_launcher_tripod_csw"; + }; + class WeaponSlotsInfo: WeaponSlotsInfo { + class MuzzleSlot { + iconScale = 0.1; + }; + mass = 496; // 22.5 kg + }; + displayName = "[CSW] Fagot (GM)"; + author = "Lambda.Tiger"; + scope = 2; + scopeArsenal = 2; + model = ACE_APL_PATH(ACE_CSW_Bag.p3d); + modes[] = {}; + picture = "\gm\gm_weapons\gm_launchers\gm_fagot\data\ui\picture_gm_fagot_launcher_weaponBag_ca"; + }; + + /// MG3 + // Weapon + class gm_mg3_base; + class gm_mg3_blk: gm_mg3_base { + class ACE_CSW { + type = "weapon"; + deployTime = 4; + pickupTime = 4; + class assembleTo { + GVAR(gm_MG3Tripod) = "gm_ge_army_mg3_aatripod_csw"; + }; + }; + }; + + // Tripod + class ace_csw_m3CarryTripod: Launcher_Base_F { + class WeaponSlotsInfo: WeaponSlotsInfo {}; + }; + class GVAR(gm_MG3TripodCarry): ace_csw_m3CarryTripod { + class ACE_CSW { + type = "mount"; + deployTime = 4; + pickupTime = 4; + deploy = QGVAR(gm_MG3Tripod); + }; + class WeaponSlotsInfo: WeaponSlotsInfo { + mass = 256; // fun number + }; + displayName = "[CSW] MG3 AA Tripod"; + icon = "\gm\gm_weapons\gm_machineguns\gm_mg3\data\ui\map_gm_mg3_aatripod_ca"; + picture = "\gm\gm_weapons\gm_machineguns\gm_mg3\data\ui\picture_gm_mg3_aatripod_weaponBag_ca"; + }; + + //// Proxy Weapons + class gm_milan_launcher; + class GVAR(gm_milan_launcher_proxy): gm_milan_launcher { + magazineReloadTime = 0.5; + }; + + class gm_fagot_launcher; + class GVAR(gm_fagot_launcher_proxy): gm_fagot_launcher { + magazineReloadTime = 0.5; + }; +}; diff --git a/addons/cswCompat/patchGM/config.cpp b/addons/cswCompat/patchGM/config.cpp new file mode 100644 index 00000000..cd96916d --- /dev/null +++ b/addons/cswCompat/patchGM/config.cpp @@ -0,0 +1,41 @@ +// "\gm\gm_weapons\gm_launchers\gm_milan\gm_milan_heat_dm92.p3d" +// "\gm\gm_weapons\gm_launchers\gm_fagot\gm_fagot_heat_9m111.p3d" +#include "\z\potato\addons\cswCompatCUP\script_component.hpp" +#undef COMPONENT +#define COMPONENT cswCompatCUP_patchGM + +class CfgPatches { + class ADDON { + units[] = { + "gm_ge_army_milan_launcher_tripod_csw", + "gm_gc_army_fagot_launcher_tripod_csw", + "gm_ge_army_mg3_aatripod_csw", + QGVAR(gm_MG3Tripod) + }; + weapons[] = { + QGVAR(gm_milan_backpack), + QGVAR(gm_fagot_backpack), + QGVAR(gm_MG3TripodCarry), + QGVAR(gm_milan_launcher_proxy), + QGVAR(gm_fagot_launcher_proxy) + }; + requiredVersion = REQUIRED_VERSION; + requiredAddons[] = { + "potato_cswCompatCUP", + "gm_weapons_ammo", + "gm_weapons_launchers_milan", + "gm_weapons_launchers_fagot", + "gm_weapons_machineguns_mg3_gm_ge_army_mg3", + "gm_weapons_launchers_fagot_gm_gc_army_fagot" + }; + skipWhenMissingDependencies = 1; + author = "Bourbon Warfare"; + authorUrl = "https://github.com/BourbonWarfare/POTATO"; + VERSION_CONFIG; + }; +}; + +#include "ACE_CSW_Groups.hpp" +#include "CfgMagazines.hpp" +#include "CfgWeapons.hpp" +#include "CfgVehicles.hpp" diff --git a/addons/extension/XEH_serverPostInit.sqf b/addons/extension/XEH_serverPostInit.sqf index 75968263..959c205e 100644 --- a/addons/extension/XEH_serverPostInit.sqf +++ b/addons/extension/XEH_serverPostInit.sqf @@ -71,7 +71,7 @@ addMissionEventHandler ["Ended", { addMissionEventHandler ["ExtensionCallback", { params ["_name", "_component", "_data"]; - if ((tolower _name) != "potato_extension_log") exitWith {}; + if ((toLower _name) != "potato_extension_log") exitWith {}; (parseSimpleArray _data) params ["_level", "_message"]; TRACE_3("ExtensionCallback",_component,_level,_message); }]; diff --git a/addons/markers/functions/fnc_addGestureColor.sqf b/addons/markers/functions/fnc_addGestureColor.sqf index c9de3250..d3153751 100644 --- a/addons/markers/functions/fnc_addGestureColor.sqf +++ b/addons/markers/functions/fnc_addGestureColor.sqf @@ -22,13 +22,13 @@ params [ ["_colorArray", [], [[]]] ]; -if (isNull _object || count _colorArray != 4) exitWith { WARNING_2("Bad input parameters",_object,_colorArray); }; +if (isNull _object || count _colorArray != 4) exitWith { WARNING_2("Bad input parameters [%1-%2]",_object,_colorArray); }; if (_object isEqualType grpNull && {groupId _object != ""}) then { - [groupId _object, _colorArray, _colorArray] call ACEFUNC(map_gestures,addGroupColorMapping); + [toLower groupId _object, _colorArray, _colorArray] call ACEFUNC(map_gestures,addGroupColorMapping); } else { - private _groupId = groupId (group _object); - if (_groupId != "" && {isNil {ACEGVAR(map_gestures,GroupColorCfgMappingNew) getVariable _groupId}}) then { + private _groupId = toLower groupId (group _object); + if (_groupId != "" && {!(_groupId in ACEGVAR(map_gestures,GroupColorCfgMappingNew))}) then { [_groupId, _colorArray, _colorArray] call ACEFUNC(map_gestures,addGroupColorMapping); }; }; diff --git a/addons/markers/functions/fnc_markerControlLoad.sqf b/addons/markers/functions/fnc_markerControlLoad.sqf index 37f9550b..57a30fc1 100644 --- a/addons/markers/functions/fnc_markerControlLoad.sqf +++ b/addons/markers/functions/fnc_markerControlLoad.sqf @@ -18,7 +18,7 @@ private _ctrlSize = _ctrlGroup controlsGroupCtrl MARKER_SIZE_IDC; private _ctrlColor = _ctrlGroup controlsGroupCtrl MARKER_COLOR_IDC; // register event handlers -_ctrlSet ctrlAddeventHandler ["toolboxselchanged",{_this call FUNC(markerControlSetChange);}]; +_ctrlSet ctrlAddEventHandler ["ToolBoxSelChanged",{_this call FUNC(markerControlSetChange);}]; _ctrlSet lbSetCurSel 0; [_ctrlSet,0] call FUNC(markerControlSetChange); diff --git a/addons/markers/vehicleTags/init.sqf b/addons/markers/vehicleTags/init.sqf index 126689b4..7d95ff65 100644 --- a/addons/markers/vehicleTags/init.sqf +++ b/addons/markers/vehicleTags/init.sqf @@ -3,7 +3,7 @@ if (isServer) then { [QGVAR(serverTag), { params ["_vehicle", "_tag", "_unit"]; - INFO_3("serverTag",_vehicle,_tag,name _unit); + INFO_3("serverTag [%1-%2-%3]",_vehicle,_tag,name _unit); [_vehicle, _tag] call ace_tagging_fnc_stencilVehicle; }] call CBA_fnc_addEventHandler; }; @@ -25,8 +25,9 @@ GVAR(tags) = [ private _fnc_statement = {}; private _fnc_condition = { + //IGNORE_PRIVATE_WARNING ["_player", "_target"]; (missionNamespace getVariable [QEGVAR(safeStart,startTime_PV), -1] != -1) // safe start active - && {(rankID _player) >= 1} + && {(rankId _player) >= 1} && { private _selectionClan = getText (configOf _target >> "selectionClan"); (_selectionClan in selectionNames _target) @@ -43,7 +44,7 @@ private _fnc_children = { [QGVAR(serverTag), [_target, _xTag, _player]] call CBA_fnc_serverEvent; }; - private _groupID = groupID (group _player); + private _groupID = groupId (group _player); { _x params ["_xNames", ["_xTag", ""]]; if ((_xNames findIf {_x in _groupID}) == -1) then { continue }; diff --git a/addons/miscFixes/XEH_preInit.sqf b/addons/miscFixes/XEH_preInit.sqf index d39f2b7d..0e8644d6 100644 --- a/addons/miscFixes/XEH_preInit.sqf +++ b/addons/miscFixes/XEH_preInit.sqf @@ -22,3 +22,46 @@ if (["WBK_ZombieCreatures"] call ACEFUNC(common,isModLoaded)) then { }] call CBA_fnc_addClassEventHandler; } forEach _wbkZombiesBase; }; + +//add EH to fix weapon lowering while walking fix +addUserActionEventHandler ["toggleRaiseWeapon","Activate",{ + private _lAnim = animationState ace_player; + if ("stp" in _lAnim || "non" in _lAnim) exitWith {}; + _lAnim = _lAnim splitString ""; + private _state = [_lAnim #13,_lAnim #14,_lAnim #15] joinString ""; + switch(_state)do{ + case "ras": { + _lAnim set [13,"l"]; + _lAnim set [14,"o"]; + _lAnim set [15,"w"]; + }; + case "low": { + _lAnim set [13,"r"]; + _lAnim set [14,"a"]; + _lAnim set [15,"s"]; + }; + }; + private _nAnim = _lAnim joinString ""; + [{ + params ["_nAnim"]; + if (!alive ace_player) exitWith {}; + private _f = inputAction "MoveForward"; + private _b = inputAction "MoveBack"; + private _l = inputAction "TurnLeft"; + private _r = inputAction "TurnRight"; + private _tot = _f + _b + _l + _r; + if (_tot == 0) then { + private _tAnim = _nAnim splitString "_"; + _nAnim = _tAnim #0 splitString ""; + _nAnim set [9,"s"]; + _nAnim set [10,"t"]; + _nAnim set [11,"p"]; + _nAnim set [21,"n"]; + _nAnim set [22,"o"]; + _nAnim set [23,"n"]; + _nAnim = _nAnim joinString ""; + INFO_2("weapon lowering stopping %1->%2",animationState ace_player,_nAnim); // temp debug logging for problems + [ace_player, _nAnim, 1] call ace_common_fnc_doAnimation; + }; + }, [_nAnim], 0.5] call CBA_fnc_waitAndExecute; +}]; diff --git a/addons/miscFixes/XEH_serverPostInit.sqf b/addons/miscFixes/XEH_serverPostInit.sqf index 4fe08c61..b2787e8a 100644 --- a/addons/miscFixes/XEH_serverPostInit.sqf +++ b/addons/miscFixes/XEH_serverPostInit.sqf @@ -3,7 +3,7 @@ // clean up empty groups { if ((units _x) isEqualTo []) then { - TRACE_2("Deleting Empty Group",_x,groupID _x); + TRACE_2("Deleting Empty Group",_x,groupId _x); deleteGroup _x; }; } forEach allGroups; diff --git a/addons/miscFixes/fauxMG5/CfgWeapons.hpp b/addons/miscFixes/fauxMG5/CfgWeapons.hpp new file mode 100644 index 00000000..9f0e9f4e --- /dev/null +++ b/addons/miscFixes/fauxMG5/CfgWeapons.hpp @@ -0,0 +1,17 @@ +class CfgWeapons { + class MMG_01_tan_F; + class GVAR(MG5): MMG_01_tan_F { + author = "Potato"; + displayName = "H&K MG5"; + descriptionShort = "General Purpose Machine Gun
Caliber: 7.62x51 mm"; + baseWeapon = QGVAR(MG5); + recoil = "CUP_MG3_recoil"; + magazineWell[] = {"CBA_762x51_LINKS"}; + magazines[] = { + "CUP_120Rnd_TE4_LRT4_White_Tracer_762x51_Belt_M", + "CUP_120Rnd_TE4_LRT4_Red_Tracer_762x51_Belt_M", + "CUP_120Rnd_TE4_LRT4_Green_Tracer_762x51_Belt_M", + "CUP_120Rnd_TE4_LRT4_Yellow_Tracer_762x51_Belt_M" + }; + }; +}; \ No newline at end of file diff --git a/addons/miscFixes/fauxMG5/config.cpp b/addons/miscFixes/fauxMG5/config.cpp new file mode 100644 index 00000000..88711711 --- /dev/null +++ b/addons/miscFixes/fauxMG5/config.cpp @@ -0,0 +1,19 @@ +#include "script_component.hpp" + +class CfgPatches { + class ADDON { + weapons[] = { + QGVAR(MG5) + }; + units[] = {}; + requiredVersion = REQUIRED_VERSION; + requiredAddons[] = {"potato_core", "CUP_Weapons_LoadOrder"}; + skipWhenMissingDependencies = 1; + author = "Potato"; + authors[] = {"AChesheireCat"}; + authorUrl = "https://github.com/BourbonWarfare/POTATO"; + VERSION_CONFIG; + }; +}; + +#include "CfgWeapons.hpp" \ No newline at end of file diff --git a/addons/miscFixes/fauxMG5/script_component.hpp b/addons/miscFixes/fauxMG5/script_component.hpp new file mode 100644 index 00000000..e35c5692 --- /dev/null +++ b/addons/miscFixes/fauxMG5/script_component.hpp @@ -0,0 +1,12 @@ +#define COMPONENT fauxMG5 +#include "\z\potato\addons\core\script_mod.hpp" + +// #define DEBUG_MODE_FULL +// #define DISABLE_COMPILE_CACHE +// #define ENABLE_PERFORMANCE_COUNTERS + +#ifdef DEBUG_ENABLED_FAUXMG5 + #define DEBUG_MODE_FULL +#endif + +#include "\z\potato\addons\core\script_macros.hpp" \ No newline at end of file diff --git a/addons/miscFixes/patchCUP/config.cpp b/addons/miscFixes/patchCUP/config.cpp index 714aa73a..8e96bdc0 100644 --- a/addons/miscFixes/patchCUP/config.cpp +++ b/addons/miscFixes/patchCUP/config.cpp @@ -66,6 +66,12 @@ class CfgRecoils { permanent = 0.08; temporary = 0.005; }; + class GVAR(recoil_uk59): recoil_default { + muzzleOuter[] = {0.71,1.22,0.35,0.55}; + kickBack[] = {0.026,0.064}; + permanent = 0.13; + temporary = 0.005; + }; }; class CfgWeapons { @@ -129,4 +135,400 @@ class CfgWeapons { class CUP_smg_MP7: Rifle_Short_Base_F { // Applies the APEX dlc MP5 recoil to the CUP MP7 recoil = "recoil_smg_05"; }; + class CUP_lmg_UK59: Rifle_Long_Base_F { // Tones down the horrific standing recoil to a more manageable state. Still stucks, but less now + recoil = QGVAR(recoil_uk59); + }; +}; + +class SlotInfo; +class CowsSlot: SlotInfo {}; +class CowsSlot_Rail: CowsSlot { + class compatibleItems {}; +}; +class gm_slotOptic_risrail: CowsSlot_Rail { + class compatibleItems { + CUP_optic_SB_3_12x50_PMII = 1; + CUP_optic_SB_3_12x50_PMII_Tan = 1; + CUP_optic_SB_3_12x50_PMII_PIP = 1; + CUP_optic_SB_3_12x50_PMII_Tan_PIP = 1; + CUP_optic_AN_PAS_13c2 = 1; + CUP_optic_AN_PAS_13c1 = 1; + CUP_optic_CWS = 1; + CUP_optic_CWS_NV = 1; + CUP_optic_CWS_NV_RDS = 1; + CUP_optic_AN_PVS_10 = 1; + CUP_optic_AN_PVS_10_black = 1; + CUP_optic_AN_PVS_10_od = 1; + CUP_optic_SUSAT = 1; + CUP_optic_SUSAT_PIP = 1; + CUP_optic_SUSAT_3D = 1; + CUP_optic_HoloBlack = 1; + CUP_optic_HoloWdl = 1; + CUP_optic_HoloDesert = 1; + CUP_optic_Eotech533 = 1; + CUP_optic_Eotech533Grey = 1; + CUP_optic_Eotech553_OD = 1; + CUP_optic_Eotech553_Black = 1; + CUP_optic_Eotech553_Coyote = 1; + CUP_optic_CompM2_Black = 1; + CUP_optic_CompM2_Woodland = 1; + CUP_optic_CompM2_Woodland2 = 1; + CUP_optic_CompM2_Desert = 1; + CUP_optic_CompM2_OD = 1; + CUP_optic_CompM2_Coyote = 1; + CUP_optic_CompM2_low = 1; + CUP_optic_CompM2_low_OD = 1; + CUP_optic_CompM2_low_coyote = 1; + CUP_optic_CompM4 = 1; + CUP_optic_MicroT1 = 1; + CUP_optic_MicroT1_OD = 1; + CUP_optic_MicroT1_coyote = 1; + CUP_optic_MicroT1_low = 1; + CUP_optic_MicroT1_low_OD = 1; + CUP_optic_MicroT1_low_coyote = 1; + CUP_optic_ACOG = 1; + CUP_optic_ACOG_PIP = 1; + CUP_optic_ACOG_3D = 1; + CUP_optic_ACOG_Reflex_Desert = 1; + CUP_optic_ACOG_Reflex_Desert_PIP = 1; + CUP_optic_ACOG_Reflex_Desert_3D = 1; + CUP_optic_ACOG_Reflex_Wood = 1; + CUP_optic_ACOG_Reflex_Wood_PIP = 1; + CUP_optic_ACOG_Reflex_Wood_3D = 1; + CUP_optic_ACOG2 = 1; + CUP_optic_ACOG2_PIP = 1; + CUP_optic_ACOG2_3D = 1; + CUP_optic_ACOG_TA31_KF = 1; + CUP_optic_ACOG_TA31_KF_PIP = 1; + CUP_optic_ACOG_TA31_KF_3D = 1; + CUP_optic_ACOG_TA31_KF_Desert = 1; + CUP_optic_ACOG_TA31_KF_Desert_PIP = 1; + CUP_optic_ACOG_TA31_KF_Desert_3D = 1; + CUP_optic_ACOG_TA31_KF_Wood = 1; + CUP_optic_ACOG_TA31_KF_Wood_PIP = 1; + CUP_optic_ACOG_TA31_KF_Wood_3D = 1; + CUP_optic_RCO = 1; + CUP_optic_ACOG_TA01NSN_Black_PIP = 1; + CUP_optic_ACOG_TA01NSN_Black_3D = 1; + CUP_optic_RCO_desert = 1; + CUP_optic_ACOG_TA01NSN_Coyote_PIP = 1; + CUP_optic_ACOG_TA01NSN_Coyote_3D = 1; + CUP_optic_ACOG_TA01NSN_Tan = 1; + CUP_optic_ACOG_TA01NSN_Tan_PIP = 1; + CUP_optic_ACOG_TA01NSN_Tan_3D = 1; + CUP_optic_ACOG_TA01NSN_OD = 1; + CUP_optic_ACOG_TA01NSN_OD_PIP = 1; + CUP_optic_ACOG_TA01NSN_OD_3D = 1; + CUP_optic_ACOG_TA01NSN_Tropic = 1; + CUP_optic_ACOG_TA01NSN_Tropic_PIP = 1; + CUP_optic_ACOG_TA01NSN_Tropic_3D = 1; + CUP_optic_ACOG_TA01NSN_RMR_Black = 1; + CUP_optic_ACOG_TA01NSN_RMR_Black_PIP = 1; + CUP_optic_ACOG_TA01NSN_RMR_Black_3D = 1; + CUP_optic_ACOG_TA01NSN_RMR_Coyote = 1; + CUP_optic_ACOG_TA01NSN_RMR_Coyote_PIP = 1; + CUP_optic_ACOG_TA01NSN_RMR_Coyote_3D = 1; + CUP_optic_ACOG_TA01NSN_RMR_Tan = 1; + CUP_optic_ACOG_TA01NSN_RMR_Tan_PIP = 1; + CUP_optic_ACOG_TA01NSN_RMR_Tan_3D = 1; + CUP_optic_ACOG_TA01NSN_RMR_OD = 1; + CUP_optic_ACOG_TA01NSN_RMR_OD_PIP = 1; + CUP_optic_ACOG_TA01NSN_RMR_OD_3D = 1; + CUP_optic_ACOG_TA01NSN_RMR_Tropic = 1; + CUP_optic_ACOG_TA01NSN_RMR_Tropic_PIP = 1; + CUP_optic_ACOG_TA01NSN_RMR_Tropic_3D = 1; + CUP_optic_ACOG_TA01B_Black = 1; + CUP_optic_ACOG_TA01B_Black_PIP = 1; + CUP_optic_ACOG_TA01B_Black_3D = 1; + CUP_optic_ACOG_TA01B_Coyote = 1; + CUP_optic_ACOG_TA01B_Coyote_PIP = 1; + CUP_optic_ACOG_TA01B_Coyote_3D = 1; + CUP_optic_ACOG_TA01B_Tan = 1; + CUP_optic_ACOG_TA01B_Tan_PIP = 1; + CUP_optic_ACOG_TA01B_Tan_3D = 1; + CUP_optic_ACOG_TA01B_OD = 1; + CUP_optic_ACOG_TA01B_OD_PIP = 1; + CUP_optic_ACOG_TA01B_OD_3D = 1; + CUP_optic_ACOG_TA01B_Tropic = 1; + CUP_optic_ACOG_TA01B_Tropic_PIP = 1; + CUP_optic_ACOG_TA01B_Tropic_3D = 1; + CUP_optic_ACOG_TA01B_RMR_Black = 1; + CUP_optic_ACOG_TA01B_RMR_Black_PIP = 1; + CUP_optic_ACOG_TA01B_RMR_Black_3D = 1; + CUP_optic_ACOG_TA01B_RMR_Coyote = 1; + CUP_optic_ACOG_TA01B_RMR_Coyote_PIP = 1; + CUP_optic_ACOG_TA01B_RMR_Coyote_3D = 1; + CUP_optic_ACOG_TA01B_RMR_Tan = 1; + CUP_optic_ACOG_TA01B_RMR_Tan_PIP = 1; + CUP_optic_ACOG_TA01B_RMR_Tan_3D = 1; + CUP_optic_ACOG_TA01B_RMR_OD = 1; + CUP_optic_ACOG_TA01B_RMR_OD_PIP = 1; + CUP_optic_ACOG_TA01B_RMR_OD_3D = 1; + CUP_optic_ACOG_TA01B_RMR_Tropic = 1; + CUP_optic_ACOG_TA01B_RMR_Tropic_PIP = 1; + CUP_optic_ACOG_TA01B_RMR_Tropic_3D = 1; + CUP_optic_ACOG_TA648_308_RDS_Black = 1; + CUP_optic_ACOG_TA648_308_RDS_Black_PIP = 1; + CUP_optic_ACOG_TA648_308_Black = 1; + CUP_optic_ACOG_TA648_308_Black_PIP = 1; + CUP_optic_ACOG_TA648_308_RDS_Desert = 1; + CUP_optic_ACOG_TA648_308_RDS_Desert_PIP = 1; + CUP_optic_ACOG_TA648_308_Desert = 1; + CUP_optic_ACOG_TA648_308_Desert_PIP = 1; + CUP_optic_ACOG_TA648_308_RDS_Wdl = 1; + CUP_optic_ACOG_TA648_308_RDS_Wdl_PIP = 1; + CUP_optic_ACOG_TA648_308_Wdl = 1; + CUP_optic_ACOG_TA648_308_Wdl_PIP = 1; + CUP_optic_ACOG_TA648_308_RDS_od = 1; + CUP_optic_ACOG_TA648_308_RDS_od_PIP = 1; + CUP_optic_ACOG_TA648_308_od = 1; + CUP_optic_ACOG_TA648_308_od_PIP = 1; + CUP_optic_ACOG_TA648_308_RDS_coyo = 1; + CUP_optic_ACOG_TA648_308_RDS_coyo_PIP = 1; + CUP_optic_ACOG_TA648_308_coyo = 1; + CUP_optic_ACOG_TA648_308_coyo_PIP = 1; + CUP_optic_LeupoldMk4 = 1; + CUP_optic_LeupoldMk4_pip = 1; + CUP_optic_Leupold_VX3 = 1; + CUP_optic_Leupold_VX3_pip = 1; + CUP_optic_LeupoldM3LR = 1; + CUP_optic_LeupoldM3LR_pip = 1; + CUP_optic_LeupoldMk4_10x40_LRT_Desert = 1; + CUP_optic_LeupoldMk4_10x40_LRT_Woodland = 1; + CUP_optic_LeupoldMk4_10x40_LRT_Desert_pip = 1; + CUP_optic_LeupoldMk4_10x40_LRT_Woodland_pip = 1; + CUP_optic_LeupoldMk4_CQ_T = 1; + CUP_optic_LeupoldMk4_MRT_tan = 1; + CUP_optic_LeupoldMk4_MRT_tan_pip = 1; + CUP_optic_LeupoldMk4_20x40_LRT = 1; + CUP_optic_LeupoldMk4_20x40_LRT_pip = 1; + CUP_optic_LeupoldMk4_25x50_LRT = 1; + CUP_optic_LeupoldMk4_25x50_LRT_pip = 1; + CUP_optic_LeupoldMk4_25x50_LRT_DESERT = 1; + CUP_optic_LeupoldMk4_25x50_LRT_DESERT_pip = 1; + CUP_optic_LeupoldMk4_25x50_LRT_SNOW = 1; + CUP_optic_LeupoldMk4_25x50_LRT_SNOW_pip = 1; + CUP_optic_LeupoldMk4_25x50_LRT_WOODLAND = 1; + CUP_optic_LeupoldMk4_25x50_LRT_WOODLAND_pip = 1; + CUP_optic_SB_11_4x20_PM = 1; + CUP_optic_SB_11_4x20_PM_pip = 1; + CUP_optic_SB_11_4x20_PM_tan = 1; + CUP_optic_SB_11_4x20_PM_tan_pip = 1; + CUP_optic_SB_11_4x20_PM_od = 1; + CUP_optic_SB_11_4x20_PM_od_PIP = 1; + CUP_optic_ZDDot = 1; + CUP_optic_MRad = 1; + CUP_optic_TrijiconRx01_desert = 1; + CUP_optic_TrijiconRx01_black = 1; + CUP_optic_TrijiconRx01_od = 1; + CUP_optic_TrijiconRx01_kf_desert = 1; + CUP_optic_TrijiconRx01_kf_black = 1; + CUP_optic_TrijiconRx01_kf_od = 1; + CUP_optic_AN_PVS_4 = 1; + CUP_optic_AN_PVS_4_M14 = 1; + CUP_optic_AN_PVS_4_M16 = 1; + CUP_optic_Elcan_SpecterDR = 1; + CUP_optic_Elcan_SpecterDR_pip = 1; + CUP_optic_Elcan_SpecterDR_3D = 1; + CUP_optic_Elcan_SpecterDR_KF = 1; + CUP_optic_Elcan_SpecterDR_KF_pip = 1; + CUP_optic_Elcan_SpecterDR_KF_3D = 1; + CUP_optic_Elcan_SpecterDR_RMR = 1; + CUP_optic_Elcan_SpecterDR_RMR_pip = 1; + CUP_optic_Elcan_SpecterDR_RMR_3D = 1; + CUP_optic_Elcan_SpecterDR_KF_RMR = 1; + CUP_optic_Elcan_SpecterDR_KF_RMR_pip = 1; + CUP_optic_Elcan_SpecterDR_KF_RMR_3D = 1; + CUP_optic_Elcan_SpecterDR_black = 1; + CUP_optic_Elcan_SpecterDR_black_PIP = 1; + CUP_optic_Elcan_SpecterDR_black_3D = 1; + CUP_optic_Elcan_SpecterDR_KF_black = 1; + CUP_optic_Elcan_SpecterDR_KF_black_PIP = 1; + CUP_optic_Elcan_SpecterDR_KF_black_3D = 1; + CUP_optic_Elcan_SpecterDR_RMR_black = 1; + CUP_optic_Elcan_SpecterDR_RMR_black_PIP = 1; + CUP_optic_Elcan_SpecterDR_RMR_black_3D = 1; + CUP_optic_Elcan_SpecterDR_KF_RMR_black = 1; + CUP_optic_Elcan_SpecterDR_KF_RMR_black_PIP = 1; + CUP_optic_Elcan_SpecterDR_KF_RMR_black_3D = 1; + CUP_optic_Elcan_SpecterDR_coyote = 1; + CUP_optic_Elcan_SpecterDR_coyote_PIP = 1; + CUP_optic_Elcan_SpecterDR_coyote_3D = 1; + CUP_optic_Elcan_SpecterDR_KF_coyote = 1; + CUP_optic_Elcan_SpecterDR_KF_coyote_PIP = 1; + CUP_optic_Elcan_SpecterDR_KF_coyote_3D = 1; + CUP_optic_Elcan_SpecterDR_RMR_coyote = 1; + CUP_optic_Elcan_SpecterDR_RMR_coyote_PIP = 1; + CUP_optic_Elcan_SpecterDR_RMR_coyote_3D = 1; + CUP_optic_Elcan_SpecterDR_KF_RMR_coyote = 1; + CUP_optic_Elcan_SpecterDR_KF_RMR_coyote_PIP = 1; + CUP_optic_Elcan_SpecterDR_KF_RMR_coyote_3D = 1; + CUP_optic_Elcan_SpecterDR_od = 1; + CUP_optic_Elcan_SpecterDR_od_PIP = 1; + CUP_optic_Elcan_SpecterDR_od_3D = 1; + CUP_optic_Elcan_SpecterDR_KF_od = 1; + CUP_optic_Elcan_SpecterDR_KF_od_PIP = 1; + CUP_optic_Elcan_SpecterDR_KF_od_3D = 1; + CUP_optic_Elcan_SpecterDR_RMR_od = 1; + CUP_optic_Elcan_SpecterDR_RMR_od_PIP = 1; + CUP_optic_Elcan_SpecterDR_RMR_od_3D = 1; + CUP_optic_Elcan_SpecterDR_KF_RMR_od = 1; + CUP_optic_Elcan_SpecterDR_KF_RMR_od_PIP = 1; + CUP_optic_Elcan_SpecterDR_KF_RMR_od_3D = 1; + CUP_optic_Elcan = 1; + CUP_optic_Elcan_pip = 1; + CUP_optic_Elcan_3D = 1; + CUP_optic_Elcan_OD = 1; + CUP_optic_Elcan_OD_pip = 1; + CUP_optic_Elcan_OD_3D = 1; + CUP_optic_Elcan_Coyote = 1; + CUP_optic_Elcan_Coyote_pip = 1; + CUP_optic_Elcan_Coyote_3D = 1; + CUP_optic_Elcan_reflex = 1; + CUP_optic_Elcan_reflex_pip = 1; + CUP_optic_Elcan_reflex_3D = 1; + CUP_optic_Elcan_reflex_OD = 1; + CUP_optic_Elcan_reflex_OD_pip = 1; + CUP_optic_Elcan_reflex_OD_3D = 1; + CUP_optic_Elcan_reflex_Coyote = 1; + CUP_optic_Elcan_reflex_Coyote_pip = 1; + CUP_optic_Elcan_reflex_Coyote_3D = 1; + CUP_optic_ElcanM145 = 1; + CUP_optic_ElcanM145_PIP = 1; + CUP_optic_ElcanM145_3D = 1; + CUP_optic_ZeissZPoint = 1; + CUP_optic_ZeissZPoint_desert = 1; + CUP_optic_ZeissZPoint_wood = 1; + CUP_optic_ZeissZPoint_hex = 1; + CUP_optic_MARS = 1; + CUP_optic_MARS_OD = 1; + CUP_optic_MARS_tan = 1; + CUP_optic_MARS_V = 1; + CUP_optic_MARS_OD_V = 1; + CUP_optic_MARS_tan_V = 1; + CUP_optic_ISM1400A7 = 1; + CUP_optic_ISM1400A7_V = 1; + CUP_optic_ISM1400A7_F = 1; + CUP_optic_ISM1400A7_green = 1; + CUP_optic_ISM1400A7_green_V = 1; + CUP_optic_ISM1400A7_green_F = 1; + CUP_optic_ISM1400A7_OD = 1; + CUP_optic_ISM1400A7_OD_V = 1; + CUP_optic_ISM1400A7_OD_F = 1; + CUP_optic_ISM1400A7_tan = 1; + CUP_optic_ISM1400A7_tan_V = 1; + CUP_optic_ISM1400A7_tan_F = 1; + CUP_optic_MEPRO = 1; + CUP_optic_MEPRO_openx_orange = 1; + CUP_optic_MEPRO_moa_clear = 1; + CUP_optic_MEPRO_tri_clear = 1; + CUP_optic_HensoldtZO = 1; + CUP_optic_HensoldtZO_PIP = 1; + CUP_optic_HensoldtZO_3D = 1; + CUP_optic_HensoldtZO_RDS = 1; + CUP_optic_HensoldtZO_RDS_PIP = 1; + CUP_optic_HensoldtZO_RDS_3D = 1; + CUP_optic_HensoldtZO_desert = 1; + CUP_optic_HensoldtZO_desert_PIP = 1; + CUP_optic_HensoldtZO_desert_3D = 1; + CUP_optic_HensoldtZO_RDS_desert = 1; + CUP_optic_HensoldtZO_RDS_desert_PIP = 1; + CUP_optic_HensoldtZO_RDS_desert_3D = 1; + CUP_optic_HensoldtZO_hex = 1; + CUP_optic_HensoldtZO_hex_PIP = 1; + CUP_optic_HensoldtZO_hex_3D = 1; + CUP_optic_HensoldtZO_RDS_hex = 1; + CUP_optic_HensoldtZO_RDS_hex_PIP = 1; + CUP_optic_HensoldtZO_RDS_hex_3D = 1; + CUP_optic_HensoldtZO_od = 1; + CUP_optic_HensoldtZO_od_PIP = 1; + CUP_optic_HensoldtZO_od_3D = 1; + CUP_optic_HensoldtZO_RDS_od = 1; + CUP_optic_HensoldtZO_RDS_od_PIP = 1; + CUP_optic_HensoldtZO_RDS_od_3D = 1; + CUP_optic_HensoldtZO_coyote = 1; + CUP_optic_HensoldtZO_coyote_PIP = 1; + CUP_optic_HensoldtZO_coyote_3D = 1; + CUP_optic_HensoldtZO_RDS_coyote = 1; + CUP_optic_HensoldtZO_RDS_coyote_PIP = 1; + CUP_optic_HensoldtZO_RDS_coyote_3D = 1; + CUP_optic_HensoldtZO_low = 1; + CUP_optic_HensoldtZO_low_PIP = 1; + CUP_optic_HensoldtZO_low_3D = 1; + CUP_optic_HensoldtZO_low_RDS = 1; + CUP_optic_HensoldtZO_low_RDS_PIP = 1; + CUP_optic_HensoldtZO_low_RDS_3D = 1; + CUP_optic_HensoldtZO_low_desert = 1; + CUP_optic_HensoldtZO_low_desert_PIP = 1; + CUP_optic_HensoldtZO_low_desert_3D = 1; + CUP_optic_HensoldtZO_low_RDS_desert = 1; + CUP_optic_HensoldtZO_low_RDS_desert_PIP = 1; + CUP_optic_HensoldtZO_low_RDS_desert_3D = 1; + CUP_optic_HensoldtZO_low_hex = 1; + CUP_optic_HensoldtZO_low_hex_PIP = 1; + CUP_optic_HensoldtZO_low_hex_3D = 1; + CUP_optic_HensoldtZO_low_RDS_hex = 1; + CUP_optic_HensoldtZO_low_RDS_hex_PIP = 1; + CUP_optic_HensoldtZO_low_RDS_hex_3D = 1; + CUP_optic_HensoldtZO_low_od = 1; + CUP_optic_HensoldtZO_low_od_PIP = 1; + CUP_optic_HensoldtZO_low_od_3D = 1; + CUP_optic_HensoldtZO_low_RDS_od = 1; + CUP_optic_HensoldtZO_low_RDS_od_PIP = 1; + CUP_optic_HensoldtZO_low_RDS_od_3D = 1; + CUP_optic_HensoldtZO_low_coyote = 1; + CUP_optic_HensoldtZO_low_coyote_PIP = 1; + CUP_optic_HensoldtZO_low_coyote_3D = 1; + CUP_optic_HensoldtZO_low_RDS_coyote = 1; + CUP_optic_HensoldtZO_low_RDS_coyote_PIP = 1; + CUP_optic_HensoldtZO_low_RDS_coyote_3D = 1; + CUP_optic_G33_HWS_BLK = 1; + CUP_optic_G33_HWS_BLK_DWN = 1; + CUP_optic_G33_HWS_TAN = 1; + CUP_optic_G33_HWS_TAN_DWN = 1; + CUP_optic_G33_HWS_OD = 1; + CUP_optic_G33_HWS_OD_DWN = 1; + CUP_optic_G33_HWS_COYOTE = 1; + CUP_optic_G33_HWS_COYOTE_DWN = 1; + CUP_optic_AIMM_COMPM4_BLK = 1; + CUP_optic_AIMM_COMPM4_BLK_DWN = 1; + CUP_optic_AIMM_COMPM2_BLK = 1; + CUP_optic_AIMM_COMPM2_BLK_DWN = 1; + CUP_optic_AIMM_COMPM2_TAN = 1; + CUP_optic_AIMM_COMPM2_TAN_DWN = 1; + CUP_optic_AIMM_COMPM2_OD = 1; + CUP_optic_AIMM_COMPM2_OD_DWN = 1; + CUP_optic_AIMM_MICROT1_BLK = 1; + CUP_optic_AIMM_MICROT1_BLK_DWN = 1; + CUP_optic_AIMM_MICROT1_TAN = 1; + CUP_optic_AIMM_MICROT1_TAN_DWN = 1; + CUP_optic_AIMM_MICROT1_OD = 1; + CUP_optic_AIMM_MICROT1_OD_DWN = 1; + CUP_optic_AIMM_ZDDOT_BLK = 1; + CUP_optic_AIMM_ZDDOT_BLK_DWN = 1; + CUP_optic_AIMM_MARS_BLK = 1; + CUP_optic_AIMM_MARS_BLK_DWN = 1; + CUP_optic_AIMM_MARS_TAN = 1; + CUP_optic_AIMM_MARS_TAN_DWN = 1; + CUP_optic_AIMM_MARS_OD = 1; + CUP_optic_AIMM_MARS_OD_DWN = 1; + CUP_optic_AIMM_M68_BLK = 1; + CUP_optic_AIMM_M68_BLK_DWN = 1; + CUP_optic_AIMM_M68_TAN = 1; + CUP_optic_AIMM_M68_TAN_DWN = 1; + CUP_optic_AIMM_M68_OD = 1; + CUP_optic_AIMM_M68_OD_DWN = 1; + CUP_optic_AC11704_Black = 1; + CUP_optic_AC11704_Tan = 1; + CUP_optic_AC11704_Coyote = 1; + CUP_optic_AC11704_OD = 1; + CUP_optic_AC11704_Jungle = 1; + CUP_optic_VortexRazor_UH1_Black = 1; + CUP_optic_VortexRazor_UH1_Coyote = 1; + CUP_optic_VortexRazor_UH1_Khaki = 1; + CUP_optic_VortexRazor_UH1_OD = 1; + CUP_optic_VortexRazor_UH1_Tan = 1; + CUP_optic_Aimpoint_5000 = 1; + CUP_optic_SERedDot = 1; + }; }; diff --git a/addons/miscFixes/patchGM/CfgVehicles.hpp b/addons/miscFixes/patchGM/CfgVehicles.hpp new file mode 100644 index 00000000..f6d5460a --- /dev/null +++ b/addons/miscFixes/patchGM/CfgVehicles.hpp @@ -0,0 +1,183 @@ +class CfgVehicles { + /// Add GM bridges + class gm_structure_euro_80_base; + class GVAR(land_basic_gm_structure_euro_bridge_base): gm_structure_euro_80_base { + _generalMacro = "House_F"; + destrType = "destructBuilding"; + editorSubcategory = "gm_edsubcat_infrastructure_euro_80"; + simulation = "house"; + armor = 6000; + class AttributeValues { + objectIsSimple = 0; + }; + class DestructionEffects { + class DestroyPhase1 { + intensity = 1; + lifeTime = 0; + interval = 1; + position = ""; + simulation = "destroy"; + type = "DelayedDestruction"; + }; + }; + }; + + // Single pier bridges + class land_gm_euro_bridge_02_20_mainroad: GVAR(land_basic_gm_structure_euro_bridge_base) { + displayName = "Two-Lane Bridge"; + model = "\gm\gm_structures\gm_roads_euro_80\gm_euro_bridge_02_20_mainroad.p3d"; + scope = 2; + scopeCurator = 2; + class Destruction { + animations[] = { + {"gm\gm_structures\gm_roads_euro_80\data\anims\bridge_02_destruct_01.rtm", 0.1, 1}, + {"gm\gm_structures\gm_roads_euro_80\data\anims\bridge_02_destruct_02.rtm", 0.1, 1}, + {"gm\gm_structures\gm_roads_euro_80\data\anims\bridge_02_destruct_03.rtm", 0.1, 1}, + {"gm\gm_structures\gm_roads_euro_80\data\anims\bridge_02_destruct_04.rtm", 0.1, 1} + }; + }; + class HitPoints { + class segment_01_hp { + armor = 1; + convexComponent = "segment_01"; + explosionShielding = 12; + material = -1; + minimalHit = 0.11; + name = "segment_01_hp"; + passThrough = 1; + radius = 0.6; + }; + class segment_02_hp: segment_01_hp { + convexComponent = "segment_02"; + name = "segment_02_hp"; + }; + }; + class AnimationSources { + class segment_01_source { + hitpoint = "segment_01_hp"; + raw = 1; + source = "Hit"; + }; + class segment_02_source: segment_01_source { + hitpoint = "segment_02_hp"; + }; + }; + class SimpleObject { + animate[] = {}; + eden = 1; + hide[] = {}; + init = "''"; + verticalOffset = 12.3; + verticalOffsetWorld = 0; + }; + }; + class land_gm_euro_bridge_02_20_mainroad_win: land_gm_euro_bridge_02_20_mainroad { + displayName = "Two-Lane Bridge"; + editorCategory = "gm_edcat_structures_weferlingen_winter"; + model = "\gm\gm_structures\gm_structures_euro_80_winter\roads\gm_euro_bridge_02_20_mainroad_win.p3d"; + }; + class land_gm_euro_bridge_02_20_normalroad: land_gm_euro_bridge_02_20_mainroad { + displayName = "One-Lane Bridge"; + model = "\gm\gm_structures\gm_roads_euro_80\gm_euro_bridge_02_20_normalroad.p3d"; + }; + class land_gm_euro_bridge_02_20_normalroad_win: land_gm_euro_bridge_02_20_normalroad { + displayName = "One-Lane Bridge"; + editorCategory = "gm_edcat_structures_weferlingen_winter"; + model = "\gm\gm_structures\gm_structures_euro_80_winter\roads\gm_euro_bridge_02_20_normalroad_win.p3d"; + }; + class land_gm_euro_bridge_02_20_mainroad_half: land_gm_euro_bridge_02_20_mainroad { + displayName = "Two-Lane Bridge (Single Collapse)"; + model = "\gm\gm_structures\gm_roads_euro_80\gm_euro_bridge_02_20_mainroad_half.p3d"; + }; + class land_gm_euro_bridge_02_20_mainroad_half_win: land_gm_euro_bridge_02_20_mainroad { + displayName = "Two-Lane Bridge (Single Collapse)"; + editorCategory = "gm_edcat_structures_weferlingen_winter"; + model = "\gm\gm_structures\gm_structures_euro_80_winter\roads\gm_euro_bridge_02_20_mainroad_half_win.p3d"; + }; + class land_gm_euro_bridge_02_20_normalroad_half: land_gm_euro_bridge_02_20_mainroad { + displayName = "One-Lane Bridge (Single Collapse)"; + model = "\gm\gm_structures\gm_roads_euro_80\gm_euro_bridge_02_20_normalroad_half.p3d"; + }; + class land_gm_euro_bridge_02_20_normalroad_half_win: land_gm_euro_bridge_02_20_normalroad { + displayName = "One-Lane Bridge (Single Collapse)"; + editorCategory = "gm_edcat_structures_weferlingen_winter"; + model = "\gm\gm_structures\gm_structures_euro_80_winter\roads\gm_euro_bridge_02_20_normalroad_half_win.p3d"; + }; + + // Arch bridges + class land_gm_euro_bridge_01_25_badroad: GVAR(land_basic_gm_structure_euro_bridge_base) { + displayName = "Arch Bridge"; + model = "\gm\gm_structures\gm_roads_euro_80\gm_euro_bridge_01_25_badroad.p3d"; + scope = 2; + scopeCurator = 2; + class Destruction { + animations[] = { + {"gm\gm_structures\gm_roads_euro_80\data\anims\bridge_01_destruct_01.rtm", 0.1, 1} + }; + }; + class SimpleObject { + animate[] = {}; + eden = 1; + hide[] = {}; + init = "''"; + verticalOffset = 10.4; + verticalOffsetWorld = 0; + }; + }; + class land_gm_euro_bridge_01_25_badroad_win: land_gm_euro_bridge_01_25_badroad { + displayName = "Arch Bridge"; + editorCategory = "gm_edcat_structures_weferlingen_winter"; + model = "\gm\gm_structures\gm_structures_euro_80_winter\roads\gm_euro_bridge_01_25_badroad_win.p3d"; + }; + class land_gm_euro_bridge_01_25_patrolPath: land_gm_euro_bridge_01_25_badroad { + displayName = "Patrol Path Bridge"; + model = "\gm\gm_structures\gm_roads_euro_80\gm_euro_bridge_01_25_patrolpath.p3d"; + }; + class land_gm_euro_bridge_01_25_patrolPath_win: land_gm_euro_bridge_01_25_badroad_win { + displayName = "Patrol Path Bridge"; + model = "\gm\gm_structures\gm_structures_euro_80_winter\roads\gm_euro_bridge_01_25_patrolpath_win.p3d"; + }; + class land_gm_euro_bridge_01_25_track: land_gm_euro_bridge_01_25_badroad { + displayName = "Dirt Track Bridge"; + model = "\gm\gm_structures\gm_roads_euro_80\gm_euro_bridge_01_25_track.p3d"; + }; + class land_gm_euro_bridge_01_25_track_win: land_gm_euro_bridge_01_25_badroad_win { + displayName = "Dirt Track Bridge"; + model = "\gm\gm_structures\gm_structures_euro_80_winter\roads\gm_euro_bridge_01_25_track_win.p3d"; + }; + + // Highway bridges + class land_gm_euro_bridge_03_50_highway: GVAR(land_basic_gm_structure_euro_bridge_base) { + displayName = "Highway Bridge"; + model = "\gm\gm_structures\gm_roads_euro_80\gm_euro_bridge_03_50_highway.p3d"; + scope = 2; + scopeCurator = 2; + class Destruction { + animations[] = { + {"gm\gm_structures\gm_roads_euro_80\data\anims\bridge_03_destruct_01.rtm", 0.01, 1} + }; + }; + class SimpleObject { + animate[] = {}; + eden = 1; + hide[] = {}; + init = "''"; + verticalOffset = 2.2; + verticalOffsetWorld = 0; + }; + }; + class land_gm_euro_bridge_03_50_highway_win: land_gm_euro_bridge_03_50_highway { + displayName = "Highway Bridge"; + editorCategory = "gm_edcat_structures_weferlingen_winter"; + model = "\gm\gm_structures\gm_structures_euro_80_winter\roads\gm_euro_bridge_03_50_highway_win.p3d"; + }; + class land_gm_euro_bridge_03_50_highway_half: land_gm_euro_bridge_03_50_highway { + displayName = "Highway Bridge (Single Collapse)"; + model = "\gm\gm_structures\gm_roads_euro_80\gm_euro_bridge_03_50_highway_half.p3d"; + + }; + class land_gm_euro_bridge_03_50_highway_half_win: land_gm_euro_bridge_03_50_highway_win { + displayName = "Highway Bridge (Single Collapse)"; + model = "\gm\gm_structures\gm_structures_euro_80_winter\roads\gm_euro_bridge_03_50_highway_half_win.p3d"; + }; +}; diff --git a/addons/miscFixes/patchGM/config.cpp b/addons/miscFixes/patchGM/config.cpp new file mode 100644 index 00000000..19b6203e --- /dev/null +++ b/addons/miscFixes/patchGM/config.cpp @@ -0,0 +1,40 @@ +#include "\z\potato\addons\miscFixes\script_component.hpp" +#undef COMPONENT +#define COMPONENT miscFixes_patchGM + +class CfgPatches { + class ADDON { + weapons[] = {}; + requiredVersion = REQUIRED_VERSION; + requiredAddons[] = { + "potato_miscFixes", + "gm_structures_euro_80", + "gm_structures_euro_80_winter" + }; + units[] = { + "land_gm_euro_bridge_02_20_mainroad", + "land_gm_euro_bridge_02_20_mainroad_win", + "land_gm_euro_bridge_02_20_normalroad", + "land_gm_euro_bridge_02_20_normalroad_win", + "land_gm_euro_bridge_02_20_mainroad_half", + "land_gm_euro_bridge_02_20_mainroad_half_win", + "land_gm_euro_bridge_02_20_normalroad_half", + "land_gm_euro_bridge_02_20_normalroad_half_win", + "land_gm_euro_bridge_01_25_badroad", + "land_gm_euro_bridge_01_25_badroad_win", + "land_gm_euro_bridge_01_25_patrolPath", + "land_gm_euro_bridge_01_25_patrolPath_win", + "land_gm_euro_bridge_01_25_track", + "land_gm_euro_bridge_01_25_track_win", + "land_gm_euro_bridge_03_50_highway", + "land_gm_euro_bridge_03_50_highway_win", + "land_gm_euro_bridge_03_50_highway_half", + "land_gm_euro_bridge_03_50_highway_half_win" + }; + skipWhenMissingDependencies = 1; + author = "Bourbon Warfare"; + authorUrl = "https://github.com/BourbonWarfare/POTATO"; + VERSION_CONFIG; + }; +}; +#include "CfgVehicles.hpp" diff --git a/addons/miscFixes/patchHLC/config.cpp b/addons/miscFixes/patchHLC/config.cpp index 9ec60b4b..dfe61510 100644 --- a/addons/miscFixes/patchHLC/config.cpp +++ b/addons/miscFixes/patchHLC/config.cpp @@ -23,3 +23,10 @@ class CfgWeapons { discreteDistanceInitIndex = 1; }; }; + +class CfgMagazineWells { + class CBA_556x45_SCAR_EGLM { + NIA_mags[] = {"hlc_30rnd_556x45_EPR","hlc_30rnd_556x45_SOST","hlc_30rnd_556x45_SPR","hlc_30rnd_556x45_S","hlc_30rnd_556x45_M","hlc_30rnd_556x45_t","hlc_30rnd_556x45_MDim","hlc_30rnd_556x45_TDim","hlc_30rnd_556x45_EPR_PMAG","hlc_30rnd_556x45_SOST_PMAG","hlc_30rnd_556x45_SPR_PMAG","hlc_30rnd_556x45_S_PMAG","hlc_30rnd_556x45_M_PMAG","hlc_30rnd_556x45_t_PMAG","hlc_30rnd_556x45_MDim_PMAG","hlc_30rnd_556x45_TDim_PMAG","hlc_30rnd_556x45_EPR_STANAGHD","hlc_30rnd_556x45_SOST_STANAGHD","hlc_30rnd_556x45_SPR_STANAGHD","hlc_30rnd_556x45_S_STANAGHD","hlc_30rnd_556x45_M_STANAGHD","hlc_30rnd_556x45_t_STANAGHD","hlc_30rnd_556x45_MDim_STANAGHD","hlc_30rnd_556x45_TDim_STANAGHD","hlc_30rnd_556x45_EPR_L5","hlc_30rnd_556x45_SOST_L5","hlc_30rnd_556x45_SPR_L5","hlc_30rnd_556x45_S_L5","hlc_30rnd_556x45_M_L5","hlc_30rnd_556x45_t_L5","hlc_30rnd_556x45_MDim_L5","hlc_30rnd_556x45_TDim_L5","hlc_30rnd_556x45_EPR_EMAG","hlc_30rnd_556x45_SOST_EMAG","hlc_30rnd_556x45_SPR_EMAG","hlc_30rnd_556x45_S_EMAG","hlc_30rnd_556x45_M_EMAG","hlc_30rnd_556x45_t_EMAG","hlc_30rnd_556x45_MDim_EMAG","hlc_30rnd_556x45_TDim_EMAG"}; + }; +}; + diff --git a/addons/miscFixes/patchPLA/config.cpp b/addons/miscFixes/patchPLA/config.cpp index 7539e2c2..1e4ead2a 100644 --- a/addons/miscFixes/patchPLA/config.cpp +++ b/addons/miscFixes/patchPLA/config.cpp @@ -194,8 +194,7 @@ class CfgVehicles { }; }; }; - class O_ZBL09_base: ZBL09_base {}; - class O_ZBL09: O_ZBL09_base {}; + class ZTL11_base: Wheeled_APC_F { crewVulnerable = 1; //formerly 0 armor = 480; //formerly 500 -> 270? @@ -291,7 +290,7 @@ class CfgVehicles { class Turrets: Turrets { class CommanderOptics: CommanderOptics { class HitPoints { - class HitTurret { + class HitComTurret { armor = 0.3; passThrough = 0; minimalHit = 0.03; @@ -322,7 +321,7 @@ class CfgVehicles { }; }; }; - class O_ZTL11: ZTL11_base {}; + class ZBD04A_base: Tank_F { damageResistance = 0.02; crewVulnerable = 1; @@ -409,8 +408,7 @@ class CfgVehicles { }; }; }; - class O_ZBD04A_base: ZBD04A_base {}; - class O_ZBD04A: O_ZBD04A_base {}; + class ZBD05_base: Tank_F { damageResistance = 0.02; crewVulnerable = 1; @@ -497,7 +495,7 @@ class CfgVehicles { }; }; }; - class O_ZBD05: ZBD05_base {}; + class ZTD05_base: Tank_F { damageResistance = 0.02; crewVulnerable = 1; @@ -555,13 +553,6 @@ class CfgVehicles { explosionShielding = 1; isTurret = 1; }; - class HitComGun { - armor = 0.04; - passThrough = 0; - minimalHit = 0.1; - explosionShielding = 1; - isGun = 1; - }; }; }; }; diff --git a/addons/miscFixes/patchPSZ/config.cpp b/addons/miscFixes/patchPSZ/config.cpp new file mode 100644 index 00000000..1d0d3052 --- /dev/null +++ b/addons/miscFixes/patchPSZ/config.cpp @@ -0,0 +1,25 @@ +#include "\z\potato\addons\miscFixes\script_component.hpp" +#undef COMPONENT +#define COMPONENT miscFixes_patchPSZ + +class CfgPatches { + class ADDON { + weapons[] = {}; + units[] = {}; + requiredVersion = REQUIRED_VERSION; + requiredAddons[] = { "potato_core", "psz_common", "psz_weapons" }; + skipWhenMissingDependencies = 1; + author = "Potato"; + authorUrl = "https://github.com/BourbonWarfare/POTATO"; + VERSION_CONFIG; + }; +}; + +// fix WARNING: PSZ_VirtualAmmoBox does not support Extended Event Handlers! Addon: 2098564124 +class CBA_Extended_EventHandlers; +class CfgVehicles { + class B_supplyCrate_F; + class PSZ_VirtualAmmoBox: B_supplyCrate_F { + class EventHandlers { class CBA_Extended_EventHandlers: CBA_Extended_EventHandlers {}; }; + }; +}; diff --git a/addons/miscFixes/patchPTV/config.cpp b/addons/miscFixes/patchPTV/config.cpp index 4592a529..472fce21 100644 --- a/addons/miscFixes/patchPTV/config.cpp +++ b/addons/miscFixes/patchPTV/config.cpp @@ -107,7 +107,7 @@ class CfgWeapons { }; }; }; - + class ptv_rk62m2: Rifle_Base_F { bullet1[] = {"\jsrs_soundmod_complete\jsrs_soundmod_soundfiles\weapons\shells\medium\metal_1.ogg",2.0099,1,10}; bullet2[] = {"\jsrs_soundmod_complete\jsrs_soundmod_soundfiles\weapons\shells\medium\metal_2.ogg",2.0099,1,10}; @@ -143,7 +143,7 @@ class CfgWeapons { }; }; }; - + class ptv_hk433: Rifle_Base_F { bullet1[] = {"\jsrs_soundmod_complete\jsrs_soundmod_soundfiles\weapons\shells\medium\metal_1.ogg",2.01,1,10}; bullet2[] = {"\jsrs_soundmod_complete\jsrs_soundmod_soundfiles\weapons\shells\medium\metal_2.ogg",2.01,1,10}; @@ -201,7 +201,7 @@ class CfgWeapons { }; }; }; - + class ptv_AG : Rifle_Base_F { bullet1[] = {"\jsrs_soundmod_complete\jsrs_soundmod_soundfiles\weapons\shells\medium\metal_1.ogg",2.0099,1,10}; bullet2[] = {"\jsrs_soundmod_complete\jsrs_soundmod_soundfiles\weapons\shells\medium\metal_2.ogg",2.0099,1,10}; @@ -838,3 +838,149 @@ class CfgWeapons { }; }; }; + +class SlotInfo; +class CowsSlot: SlotInfo {}; +class CowsSlot_Rail: CowsSlot { + class compatibleItems {}; +}; +class gm_slotOptic_risrail: CowsSlot_Rail { + class compatibleItems { + ptv_rmr = 1; + ptv_rmr_des = 1; + ptv_rmr_wdl = 1; + ptv_compm4s = 1; + ptv_cm4s3xmag = 1; + ptv_cm4s3xmag_f = 1; + ptv_cm4s3xmag_pip = 1; + ptv_cm4s3xmag_pf = 1; + ptv_compm5 = 1; + ptv_compm5s = 1; + ptv_cm53xmag = 1; + ptv_cm53xmag_f = 1; + ptv_cm53xmag_pip = 1; + ptv_cm53xmag_pf = 1; + ptv_cm5s3xmag = 1; + ptv_cm5s3xmag_f = 1; + ptv_cm5s3xmag_pip = 1; + ptv_cm5s3xmag_pf = 1; + ptv_aimcs = 1; + ptv_aimcs2 = 1; + ptv_aim3xmag = 1; + ptv_aim3xmag_f = 1; + ptv_eot552 = 1; + ptv_xps3 = 1; + ptv_xps3_des = 1; + ptv_xps3xmag = 1; + ptv_xps3xmag_f = 1; + ptv_xps3xmag_pip = 1; + ptv_xps3xmag_pf = 1; + ptv_xps3xmag_des = 1; + ptv_xps3xmag_des_f = 1; + ptv_xps3xmag_des_pip = 1; + ptv_xps3xmag_des_pf = 1; + ptv_c79 = 1; + ptv_c79_2D = 1; + ptv_c79_pip = 1; + ptv_m145 = 1; + ptv_m145_2D = 1; + ptv_m145_pip = 1; + ptv_PMII = 1; + ptv_PMII_sunshade = 1; + ptv_PMII_des = 1; + ptv_PMII_des_sunshade = 1; + ptv_PMII_wdl = 1; + ptv_PMII_wdl_sunshade = 1; + ptv_PMII_rmr = 1; + ptv_PMII_rmr_sunshade = 1; + ptv_PMII_rmr_des = 1; + ptv_PMII_rmr_des_sunshade = 1; + ptv_PMII_rmr_wdl = 1; + ptv_PMII_rmr_wdl_sunshade = 1; + ptv_PMII_525 = 1; + ptv_PMII_525_des = 1; + ptv_PMII_525_wdl = 1; + ptv_t1 = 1; + ptv_t1s = 1; + ptv_t13xmag = 1; + ptv_t13xmag_f = 1; + ptv_t1s3xmag = 1; + ptv_t1s3xmag_f = 1; + ptv_t13xmag_pip = 1; + ptv_t13xmag_pf = 1; + ptv_t1s3xmag_pip = 1; + ptv_t1s3xmag_pf = 1; + ptv_ta11 = 1; + ptv_ta11_2D = 1; + ptv_ta11_2Dpip = 1; + ptv_ta11_pip = 1; + ptv_ta11rmr = 1; + ptv_ta11rmr_2D = 1; + ptv_ta11rmr_2Dpip = 1; + ptv_ta11rmr_pip = 1; + ptv_ta02led = 1; + ptv_ta02led_2D = 1; + ptv_ta02led_2Dpip = 1; + ptv_ta02led_pip = 1; + ptv_ta02led_rmr = 1; + ptv_ta02led_rmr_2D = 1; + ptv_ta02led_rmr_2Dpip = 1; + ptv_ta02led_rmr_pip = 1; + ptv_ta648 = 1; + ptv_ta648_pip = 1; + ptv_ta648_rmr = 1; + ptv_zo = 1; + ptv_zo_rmr = 1; + ptv_zos = 1; + ptv_zos_rmr = 1; + ptv_specterdr = 1; + ptv_specterdr_2D = 1; + ptv_specterdr_pip = 1; + ptv_specterdr_des = 1; + ptv_specterdr_des_2D = 1; + ptv_specterdr_des_pip = 1; + ptv_specterdr_rmr = 1; + ptv_specterdr_rmr_2D = 1; + ptv_specterdr_rmr_pip = 1; + ptv_specterdr_rmr_des = 1; + ptv_specterdr_rmr_des_2D = 1; + ptv_specterdr_rmr_des_pip = 1; + ptv_specterdr6 = 1; + ptv_specterdr6_2D = 1; + ptv_specterdr6_pip = 1; + ptv_specterdr6_des = 1; + ptv_specterdr6_des_2D = 1; + ptv_specterdr6_des_pip = 1; + ptv_specterdr6_rmr = 1; + ptv_specterdr6_rmr_2D = 1; + ptv_specterdr6_rmr_pip = 1; + ptv_specterdr6_rmr_des = 1; + ptv_specterdr6_rmr_des_2D = 1; + ptv_specterdr6_rmr_des_pip = 1; + ptv_shortdot = 1; + ptv_shortdot_wdl = 1; + ptv_shortdot_des = 1; + ptv_shortdot_pip = 1; + ptv_shortdot_wdl_pip = 1; + ptv_shortdot_des_pip = 1; + ptv_shortdot_dcc = 1; + ptv_shortdot_dcc_wdl = 1; + ptv_shortdot_dcc_des = 1; + ptv_shortdot_dcc_pip = 1; + ptv_shortdot_dcc_wdl_pip = 1; + ptv_shortdot_dcc_des_pip = 1; + ptv_s3x = 1; + ptv_s3x_des = 1; + ptv_s3x_wdl = 1; + ptv_CWS = 1; + ptv_vipir2 = 1; + ptv_vipir2p = 1; + }; +}; + + +class CfgMagazineWells { + class CBA_556x45_SCAR_EGLM { + PTV_Magazines[] = {"ptv_30Rnd_556x45_Stanag","ptv_30Rnd_556x45_Stanag_g","ptv_30Rnd_556x45_Stanag_t","ptv_30Rnd_556x45_Stanag_pull","ptv_30Rnd_556x45_Stanag_pull_t","ptv_30Rnd_556x45_Stanag_pull_g","ptv_30Rnd_556x45_Stanag_Red","ptv_30Rnd_556x45_Stanag_g_Red","ptv_30Rnd_556x45_Stanag_t_Red","ptv_30Rnd_556x45_Stanag_pull_Red","ptv_30Rnd_556x45_Stanag_pull_t_Red","ptv_30Rnd_556x45_Stanag_pull_g_Red","ptv_40Rnd_556x45_Pmag","ptv_40Rnd_556x45_Pmag_g","ptv_40Rnd_556x45_Pmag_t","ptv_40Rnd_556x45_Pmag_Red","ptv_40Rnd_556x45_Pmag_g_Red","ptv_40Rnd_556x45_Pmag_t_Red","ptv_30Rnd_556x45_Pmag","ptv_30Rnd_556x45_Pmag_g","ptv_30Rnd_556x45_Pmag_t","ptv_30Rnd_556x45_Pmag_Red","ptv_30Rnd_556x45_Pmag_g_Red","ptv_30Rnd_556x45_Pmag_t_Red","ptv_30Rnd_556x45_Pmagw","ptv_30Rnd_556x45_Pmagw_g","ptv_30Rnd_556x45_Pmagw_t","ptv_30Rnd_556x45_Pmagw_Red","ptv_30Rnd_556x45_Pmagw_g_Red","ptv_30Rnd_556x45_Pmagw_t_Red","ptv_30Rnd_556x45_L5awm","ptv_30Rnd_556x45_L5awm_g","ptv_30Rnd_556x45_L5awm_t","ptv_30Rnd_556x45_L5awm_Red","ptv_30Rnd_556x45_L5awm_g_Red","ptv_30Rnd_556x45_L5awm_t_Red","ptv_30Rnd_556x45_L5awmc","ptv_30Rnd_556x45_L5awmc_Red","ptv_30Rnd_556x45_L5awmc_pull","ptv_30Rnd_556x45_L5awmc_pull_Red"}; + }; +}; diff --git a/addons/miscFixes/patchRHSAFRF/config.cpp b/addons/miscFixes/patchRHSAFRF/config.cpp index 16445eb7..d2007e1a 100644 --- a/addons/miscFixes/patchRHSAFRF/config.cpp +++ b/addons/miscFixes/patchRHSAFRF/config.cpp @@ -50,6 +50,305 @@ class CfgWeapons { }; }; }; + class rhs_6b23: Vest_Camo_Base { + descriptionShort = "GOST Armor Level 4"; // was "Armor Level 4" + class ItemInfo: ItemInfo { + class HitpointsProtectionInfo { + class Neck { + HitpointName = "HitNeck"; + armor = 8; + PassThrough = 0.4; + }; + class Chest { + HitpointName = "HitChest"; + armor = 16; // was 22 + PassThrough = 0.3; + }; + class Diaphragm { + HitpointName = "HitDiaphragm"; + armor = 16; // was 22 + PassThrough = 0.3; + }; + class Abdomen { + hitpointName = "HitAbdomen"; + armor = 16; // was 22 + passThrough = 0.3; + }; + class Body { + hitpointName = "HitBody"; + passThrough = 0.3; + }; + }; + }; + }; + class rhs_6b23_6sh92: rhs_6b23 { + class ItemInfo: ItemInfo { + class HitpointsProtectionInfo { + class Neck { + HitpointName = "HitNeck"; + armor = 10; // was 12 + PassThrough = 0.3; + }; + class Chest { + HitpointName = "HitChest"; + armor = 16; // was 22 + PassThrough = 0.3; + }; + class Diaphragm { + HitpointName = "HitDiaphragm"; + armor = 16; // was 22+3 + PassThrough = 0.3; + }; + class Abdomen { + hitpointName = "HitAbdomen"; + armor = 16; // was 22+3 + passThrough = 0.3; + }; + class Body { + hitpointName = "HitBody"; + passThrough = 0.3; + }; + }; + }; + }; + class rhs_6b23_6sh92_radio: rhs_6b23_6sh92 {}; + class rhs_6b23_digi_6sh92_Spetsnaz: rhs_6b23_6sh92_radio { + class ItemInfo: ItemInfo { + class HitpointsProtectionInfo { + class Neck { + HitpointName = "HitNeck"; + armor = 8; + PassThrough = 0.4; + }; + class Chest { + HitpointName = "HitChest"; + armor = 16; // was 22 + PassThrough = 0.3; + }; + class Diaphragm { + HitpointName = "HitDiaphragm"; + armor = 16; // was 22+3 + PassThrough = 0.3; + }; + class Abdomen { + hitpointName = "HitAbdomen"; + armor = 16; // was 22+3 + passThrough = 0.3; + }; + class Body { + hitpointName = "HitBody"; + passThrough = 0.3; + }; + }; + }; + }; + class rhs_6b23_vydra_3m: rhs_6b23_6sh92 { + class ItemInfo: ItemInfo { + class HitpointsProtectionInfo { + class Neck { + HitpointName = "HitNeck"; + armor = 8; + PassThrough = 0.4; + }; + class Chest { + HitpointName = "HitChest"; + armor = 16; // was 22 + PassThrough = 0.3; + }; + class Diaphragm { + HitpointName = "HitDiaphragm"; + armor = 16; // was 22+3 + PassThrough = 0.3; + }; + class Abdomen { + hitpointName = "HitAbdomen"; + armor = 16; // was 22+3 + passThrough = 0.3; + }; + class Body { + hitpointName = "HitBody"; + passThrough = 0.3; + }; + }; + }; + }; + class rhs_6b23_digi: rhs_6b23 {}; + class rhs_6b23_6sh116: rhs_6b23_digi { + class ItemInfo: ItemInfo { + class HitpointsProtectionInfo { + class Neck { + HitpointName = "HitNeck"; + armor = 10; // was 12 + PassThrough = 0.3; + }; + class Chest { + HitpointName = "HitChest"; + armor = 16; // was 22 + PassThrough = 0.3; + }; + class Diaphragm { + HitpointName = "HitDiaphragm"; + armor = 16; // was 22+3 + PassThrough = 0.3; + }; + class Abdomen { + hitpointName = "HitAbdomen"; + armor = 16; // was 22+3 + passThrough = 0.3; + }; + class Body { + hitpointName = "HitBody"; + passThrough = 0.3; + }; + }; + }; + }; + class rhs_6b13: rhs_6b23 { + descriptionShort = "GOST Armor Level 6"; // was"Armor Level 6" + class ItemInfo: ItemInfo { + class HitpointsProtectionInfo { + class Neck { + HitpointName = "HitNeck"; + armor = 12; // was 16 + PassThrough = 0.3; + }; + class Chest { + HitpointName = "HitChest"; + armor = 18; // was 28 + PassThrough = 0.3; // was 0.1 + }; + class Diaphragm { + HitpointName = "HitDiaphragm"; + armor = 18; // was 28 + PassThrough = 0.3; // was 0.1 + }; + class Abdomen { + hitpointName = "HitAbdomen"; + armor = 18; // was 22 + passThrough = 0.3; + }; + class Body { + hitpointName = "HitBody"; + passThrough = 0.3; + }; + }; + }; + }; + class rhs_6b13_6sh92: rhs_6b13 { + descriptionShort = "GOST Armor Level 6"; // was "Armor Level 6" + class ItemInfo: ItemInfo { + class HitpointsProtectionInfo { + class Neck { + HitpointName = "HitNeck"; + armor = 12; // was 16 + PassThrough = 0.3; + }; + class Chest { + HitpointName = "HitChest"; + armor = 18; // was 28+3 + PassThrough = 0.3; // was 0.1 + }; + class Diaphragm { + HitpointName = "HitDiaphragm"; + armor = 18; // was 28+3 + PassThrough = 0.3; // was 0.1 + }; + class Abdomen { + hitpointName = "HitAbdomen"; + armor = 18; // was 22 + passThrough = 0.3; + }; + class Body { + hitpointName = "HitBody"; + passThrough = 0.3; + }; + }; + }; + }; + class rhs_6b2: Vest_Camo_Base { + descriptionShort = "GOST Armor Level 1"; // was "Armor Level 1" + class ItemInfo: ItemInfo { + class HitpointsProtectionInfo { + class Chest { + HitpointName = "HitChest"; + armor = 8; // was 12 + PassThrough = 0.4; + }; + class Diaphragm { + HitpointName = "HitDiaphragm"; + armor = 8; // was 12 + PassThrough = 0.4; + }; + class Abdomen { + hitpointName = "HitAbdomen"; + armor = 8; // was 12 + passThrough = 0.4; + }; + class Body { + hitpointName = "HitBody"; + passThrough = 0.4; + }; + }; + }; + }; + class rhs_6b3: rhs_6b2 { + descriptionShort = "GOST Armor Level 3"; // was "Armor Level 3" + class ItemInfo: ItemInfo { + class HitpointsProtectionInfo { + class Chest { + HitpointName = "HitChest"; + armor = 12; // was 22 + PassThrough = 0.3; + }; + class Diaphragm { + HitpointName = "HitDiaphragm"; + armor = 12; // was 22 + PassThrough = 0.3; + }; + class Abdomen { + hitpointName = "HitAbdomen"; + armor = 12; // was 22 + passThrough = 0.3; + }; + class Body { + hitpointName = "HitBody"; + passThrough = 0.3; + }; + }; + }; + }; + class rhs_6b5: rhs_6b23 { + descriptionShort = "GOST Armor Level 5"; // was "Armor Level 5" + class ItemInfo: ItemInfo { + class HitpointsProtectionInfo { + class Neck { + HitpointName = "HitNeck"; + armor = 8; + PassThrough = 0.5; + }; + class Chest { + HitpointName = "HitChest"; + armor = 16; // was 25 + PassThrough = 0.3; // was 0.2 + }; + class Diaphragm { + HitpointName = "HitDiaphragm"; + armor = 16; // was 25 + PassThrough = 0.3; // was 0.2 + }; + class Abdomen { + hitpointName = "HitAbdomen"; + armor = 16; // was 25 + passThrough = 0.3; // was 0.2 + }; + class Body { + hitpointName = "HitBody"; + armor = 8; + passThrough = 0.5; + }; + }; + }; + }; }; class CfgVehicles { diff --git a/addons/miscFixes/patchW28/config.cpp b/addons/miscFixes/patchW28/config.cpp new file mode 100644 index 00000000..0fcfe906 --- /dev/null +++ b/addons/miscFixes/patchW28/config.cpp @@ -0,0 +1,47 @@ +#include "\z\potato\addons\miscFixes\script_component.hpp" +#undef COMPONENT +#define COMPONENT miscFixes_patchW28 + +class CfgPatches { + class ADDON { + units[] = {}; + weapons[] = {}; + requiredVersion = REQUIRED_VERSION; + requiredAddons[] = { "potato_core", "tweed_uaf_21_cfg" }; + skipWhenMissingDependencies = 1; + author = "Bourbon Warfare"; + authorUrl = "https://github.com/BourbonWarfare/POTATO"; + VERSION_CONFIG; + }; +}; + +class CfgWeapons { + class VestItem; + class Vest_Camo_Base; + // Normalizes W28 vest armor values to be in line with vanilla/CUP armor values + class V_tweed_iotv_mk4_base: Vest_Camo_Base { + class ItemInfo: VestItem { + class HitpointsProtectionInfo { + class Chest { + hitpointName = "HitChest"; + armor = 16; // was 30 + passThrough = 0.3; // was 0.2 + }; + class Diaphragm { + hitpointName = "HitDiaphragm"; + armor = 16; // was 30 + passThrough = 0.3; // was 0.2 + }; + class Abdomen { + hitpointName = "HitAbdomen"; + armor = 16; // was 30 + passThrough = 0.3; // was 0.2 + }; + class Body { + hitpointName = "HitBody"; + passThrough = 0.3; // was 0.2 + }; + }; + }; + }; +}; \ No newline at end of file diff --git a/addons/miscMedical/XEH_postInit.sqf b/addons/miscMedical/XEH_postInit.sqf index 266a260d..523f452e 100644 --- a/addons/miscMedical/XEH_postInit.sqf +++ b/addons/miscMedical/XEH_postInit.sqf @@ -13,7 +13,7 @@ if (isServer) then { /*// Determine if TVT or COOP [{ - private _missionTestingType = GetMissionConfigValue [QEGVAR(missionTesting, missionType),0]; + private _missionTestingType = getMissionConfigValue [QEGVAR(missionTesting, missionType),0]; TRACE_1("_missionTestingType =",missionTestingType); private _isTVT = true; // check mission testing type from missionTesting module before checking with math @@ -291,12 +291,12 @@ GVAR(baseMaterialTable) = createHashMapFromArray [ FUNC(calculateHemisphericalBlastWeight) = { params ["_originalWeight", "_positionASL"]; - private _positionAboveGround = ASLtoAGL _positionASL; + private _positionAboveGround = ASLToAGL _positionASL; private _objectsBelow = lineIntersectsSurfaces [_positionASL, _positionASL vectorAdd [0, 0, -1]]; if (_objectsBelow isNotEqualTo []) then { (_objectsBelow select 0) params ["_surfacePosition"]; - _positionAboveGround = ASLtoAGL _surfacePosition; + _positionAboveGround = ASLToAGL _surfacePosition; }; // if we are in the air, continue with normal calculations @@ -397,6 +397,9 @@ if (isServer) then { // add explosion event handler [QACEGVAR(frag,frag_eh), { params ["_lastPos", "", "_explosive"]; + if (_explosive isEqualType []) then { + _explosive = _this # 1; // frag rewrite uses [_posASL, _ammo, [objNull, _instigator]] + }; private _explosiveConfig = configFile >> "CfgAmmo" >> _explosive; // ACE_frag defines mass as grams, we do as kilograms @@ -413,7 +416,7 @@ if (isServer) then { _mass = [_mass, _lastPos] call FUNC(calculateHemisphericalBlastWeight); - private _objects = (ASLtoAGL _lastPos) nearEntities [["CAManBase"], 50]; + private _objects = (ASLToAGL _lastPos) nearEntities [["CAManBase"], 50]; { [QGVAR(explosion), [_lastPos, _mass, _filler, _x], _x] call CBA_fnc_targetEvent; } forEach _objects; diff --git a/addons/miscMedical/functions/fnc_Naloxone.sqf b/addons/miscMedical/functions/fnc_Naloxone.sqf index fc176226..e105c5a7 100644 --- a/addons/miscMedical/functions/fnc_Naloxone.sqf +++ b/addons/miscMedical/functions/fnc_Naloxone.sqf @@ -18,9 +18,9 @@ params ["_unit","_medicationClassName"]; TRACE_2("Naloxone",_unit,_medicationClassName); -_startMeds = _unit getVariable "ace_medical_medications"; +private _startMeds = _unit getVariable "ace_medical_medications"; { - _medication = _x select 0; + private _medication = _x select 0; if (_medicationClassName == "Naloxone") then { if (_medication == "Morphine" or {_medication == _medicationClassName}) then { _startMeds set [_forEachIndex, ["FakeDrug", 5, 1, 0, 0, 0]]; diff --git a/addons/missileGuidanceCompat/CfgAmmo.hpp b/addons/missileGuidanceCompat/CfgAmmo.hpp index a579cf68..a9c5d89d 100644 --- a/addons/missileGuidanceCompat/CfgAmmo.hpp +++ b/addons/missileGuidanceCompat/CfgAmmo.hpp @@ -1,946 +1,6 @@ class CfgAmmo { - class M_Titan_AA; - class MissileBase; - class M_Titan_AT; - class Bo_GBU12_LGB; - - class CUP_M_9K32_Strela_2_AA: M_Titan_AA { - maneuvrability = 0; - - class ace_missileguidance { - enabled = 1; - - pitchRate = 30; // Minium flap deflection for guidance - yawRate = 30; // Maximum flap deflection for guidance - - canVanillaLock = 1; // Can this default vanilla lock? Only applicable to non-cadet mode - - // Guidance type for munitions - defaultSeekerType = "IR"; - seekerTypes[] = { "IR" }; - - flareDistanceFilter = 100; - flareAngleFilter = 1.6; // can filter out flares that are >= flareAngleFilter to known target velocity - - defaultSeekerLockMode = "LOBL"; - seekerLockModes[] = { "LOBL" }; - - defaultNavigationType = "ProportionalNavigation"; - navigationTypes[] = { "ProportionalNavigation" }; - - seekLastTargetPos = 0; // seek last target position [if seeker loses LOS of target, continue to last known pos] - seekerAngle = 45; // Angle from the shooter's view that can track the missile - seekerAccuracy = 0.6; // seeker accuracy multiplier - - seekerMinRange = 10; - seekerMaxRange = 3700; // Range from the missile which the seeker can visually search - - // Attack profile type selection - defaultAttackProfile = "DIR"; - attackProfiles[] = {"DIR"}; - }; - }; - - class CUP_M_9K38_Igla_AA: M_Titan_AA { - maneuvrability = 0; - - class ace_missileguidance { - enabled = 1; - - pitchRate = 30; // Minium flap deflection for guidance - yawRate = 43; // Maximum flap deflection for guidance - - canVanillaLock = 1; // Can this default vanilla lock? Only applicable to non-cadet mode - - // Guidance type for munitions - defaultSeekerType = "IR"; - seekerTypes[] = { "IR" }; - - flareDistanceFilter = 100; - flareAngleFilter = 1.1; // can filter out flares that are >= flareAngleFilter to known target velocity - - defaultSeekerLockMode = "LOBL"; - seekerLockModes[] = { "LOBL" }; - - defaultNavigationType = "AugmentedProportionalNavigation"; - navigationTypes[] = { "AugmentedProportionalNavigation" }; - - seekLastTargetPos = 0; // seek last target position [if seeker loses LOS of target, continue to last known pos] - seekerAngle = 45; // Angle from the shooter's view that can track the missile - seekerAccuracy = 0.76; // seeker accuracy multiplier - - seekerMinRange = 5; - seekerMaxRange = 5200; // Range from the missile which the seeker can visually search - - // Attack profile type selection - defaultAttackProfile = "DIR"; - attackProfiles[] = {"DIR"}; - }; - }; - - class CUP_M_9M17P_AT2_Falanga_AT: MissileBase { - maneuvrability = 0; - - class ace_missileguidance { - enabled = 1; - - pitchRate = 15; // Minium flap deflection for guidance - yawRate = 15; // Maximum flap deflection for guidance - - canVanillaLock = 0; // Can this default vanilla lock? Only applicable to non-cadet mode - - showTrail = 1; - - // Guidance type for munitions - defaultSeekerType = "MCLOS"; - seekerTypes[] = { "MCLOS" }; - - defaultSeekerLockMode = "LOAL"; - seekerLockModes[] = { "LOAL" }; - - defaultNavigationType = "Line"; - navigationTypes[] = { "Line" }; - - lineGainP = 5; - lineGainD = 0; - - seekLastTargetPos = 0; // seek last target position [if seeker loses LOS of target, continue to last known pos] - seekerAngle = 30; // Angle from the shooter's view that can track the missile - seekerAccuracy = 1; // seeker accuracy multiplier - - seekerMinRange = 0; - seekerMaxRange = 2500; // Range from the missile which the seeker can visually search - - correctionDistance = 0; // distance from center of crosshair where missile slows down - offsetFromCrosshair[] = { 0, 0, 0 }; // where the missile wants to stay in relation to the center of the crosshair. - - // Attack profile type selection - defaultAttackProfile = "WIRE"; - attackProfiles[] = {"WIRE"}; - }; - }; - - class CUP_M_9M17P_AT3_Sagger_AT: MissileBase { - maneuvrability = 0; - - class ace_missileguidance { - enabled = 1; - - pitchRate = 15; // Minium flap deflection for guidance - yawRate = 15; // Maximum flap deflection for guidance - - canVanillaLock = 0; // Can this default vanilla lock? Only applicable to non-cadet mode - - showTrail = 1; - - // Guidance type for munitions - defaultSeekerType = "MCLOS"; - seekerTypes[] = { "MCLOS" }; - - defaultSeekerLockMode = "LOAL"; - seekerLockModes[] = { "LOAL" }; - - defaultNavigationType = "Line"; - navigationTypes[] = { "Line" }; - - lineGainP = 5; - lineGainD = 0; - - seekLastTargetPos = 0; // seek last target position [if seeker loses LOS of target, continue to last known pos] - seekerAngle = 30; // Angle from the shooter's view that can track the missile - seekerAccuracy = 1; // seeker accuracy multiplier - - seekerMinRange = 0; - seekerMaxRange = 3000; // Range from the missile which the seeker can visually search - - correctionDistance = 0; // distance from center of crosshair where missile slows down - offsetFromCrosshair[] = { 0, 0, 0 }; // where the missile wants to stay in relation to the center of the crosshair. - - // Attack profile type selection - defaultAttackProfile = "WIRE"; - attackProfiles[] = {"WIRE"}; - }; - }; - - class CUP_M_9M113_AT5_Spandrel_AT: M_Titan_AT { - maneuvrability = 0; - - class ace_missileguidance { - enabled = 1; - - pitchRate = 45; // Minium flap deflection for guidance - yawRate = 45; // Maximum flap deflection for guidance - - canVanillaLock = 0; // Can this default vanilla lock? Only applicable to non-cadet mode - - showTrail = 1; - - // Guidance type for munitions - defaultSeekerType = "SACLOS"; - seekerTypes[] = { "SACLOS" }; - - defaultSeekerLockMode = "LOAL"; - seekerLockModes[] = { "LOAL", "LOBL" }; - - defaultNavigationType = "Line"; - navigationTypes[] = { "Line" }; - - lineGainP = 10; - lineGainD = 8.5; - - initialPitch = 2; - - seekLastTargetPos = 0; // seek last target position [if seeker loses LOS of target, continue to last known pos] - seekerAngle = 30; // Angle from the shooter's view that can track the missile - seekerAccuracy = 1; // seeker accuracy multiplier - - seekerMinRange = 75; - seekerMaxRange = 4000; // Range from the missile which the seeker can visually search - - offsetFromCrosshair[] = { 0, 0, 0 }; // where the missile wants to stay in relation to the center of the crosshair. - - // Attack profile type selection - defaultAttackProfile = "WIRE"; - attackProfiles[] = {"WIRE"}; - }; - }; - - class CUP_M_Shturm_9M114_AT6_Spiral_AT: MissileBase { - maneuvrability = 0; - - class ace_missileguidance { - enabled = 1; - - pitchRate = 45; // Minium flap deflection for guidance - yawRate = 45; // Maximum flap deflection for guidance - - canVanillaLock = 0; // Can this default vanilla lock? Only applicable to non-cadet mode - - showTrail = 1; - - // Guidance type for munitions - defaultSeekerType = "SACLOS"; - seekerTypes[] = { "SACLOS" }; - - defaultSeekerLockMode = "LOAL"; - seekerLockModes[] = { "LOAL", "LOBL" }; - - defaultNavigationType = "Line"; - navigationTypes[] = { "Line" }; - - lineGainP = 16; - lineGainD = 10.44; - - initialPitch = 2; - - seekLastTargetPos = 0; // seek last target position [if seeker loses LOS of target, continue to last known pos] - seekerAngle = 30; // Angle from the shooter's view that can track the missile - seekerAccuracy = 1; // seeker accuracy multiplier - - seekerMinRange = 75; - seekerMaxRange = 4000; // Range from the missile which the seeker can visually search - - offsetFromCrosshair[] = { 0, 0, 0 }; // where the missile wants to stay in relation to the center of the crosshair. - - // Attack profile type selection - defaultAttackProfile = "BEAM"; - attackProfiles[] = {"BEAM"}; - }; - }; - - class CUP_M_Ataka_V_9M120_AT9_Spiral_2_AT: MissileBase { - maneuvrability = 0; - - class ace_missileguidance { - enabled = 1; - - pitchRate = 45; // Minium flap deflection for guidance - yawRate = 45; // Maximum flap deflection for guidance - - canVanillaLock = 0; // Can this default vanilla lock? Only applicable to non-cadet mode - - showTrail = 1; - - // Guidance type for munitions - defaultSeekerType = "SACLOS"; - seekerTypes[] = { "SACLOS" }; - - defaultSeekerLockMode = "LOAL"; - seekerLockModes[] = { "LOAL", "LOBL" }; - - defaultNavigationType = "Line"; - navigationTypes[] = { "Line" }; - - lineGainP = 16; - lineGainD = 10.44; - - initialPitch = 2; - - seekLastTargetPos = 0; // seek last target position [if seeker loses LOS of target, continue to last known pos] - seekerAngle = 30; // Angle from the shooter's view that can track the missile - seekerAccuracy = 1; // seeker accuracy multiplier - - seekerMinRange = 75; - seekerMaxRange = 6000; // Range from the missile which the seeker can visually search - - offsetFromCrosshair[] = { 0, 0, 0 }; // where the missile wants to stay in relation to the center of the crosshair. - - // Attack profile type selection - defaultAttackProfile = "BEAM"; - attackProfiles[] = {"BEAM"}; - }; - }; - - class CUP_M_9K116_1_Bastion_AT10_Stabber_AT: MissileBase { - maneuvrability = 0; - - class ace_missileguidance { - enabled = 1; - - pitchRate = 45; // Minium flap deflection for guidance - yawRate = 45; // Maximum flap deflection for guidance - - canVanillaLock = 0; // Can this default vanilla lock? Only applicable to non-cadet mode - - showTrail = 1; - - // Guidance type for munitions - defaultSeekerType = "SACLOS"; - seekerTypes[] = { "SACLOS" }; - - defaultSeekerLockMode = "LOAL"; - seekerLockModes[] = { "LOAL", "LOBL" }; - - defaultNavigationType = "Line"; - navigationTypes[] = { "Line" }; - - lineGainP = 16; - lineGainD = 10.44; - - initialPitch = 2; - - seekLastTargetPos = 0; // seek last target position [if seeker loses LOS of target, continue to last known pos] - seekerAngle = 30; // Angle from the shooter's view that can track the missile - seekerAccuracy = 1; // seeker accuracy multiplier - - seekerMinRange = 75; - seekerMaxRange = 4000; // Range from the missile which the seeker can visually search - - correctionDistance = 30; // distance from center of crosshair where missile slows down - offsetFromCrosshair[] = { 0, 0, 0 }; // where the missile wants to stay in relation to the center of the crosshair. - - // Attack profile type selection - defaultAttackProfile = "BEAM"; - attackProfiles[] = {"BEAM"}; - }; - }; - - class CUP_M_9M119M_Refleks_AT11_Sniper_AT: MissileBase { - maneuvrability = 0; - - class ace_missileguidance { - enabled = 1; - - pitchRate = 45; // Minium flap deflection for guidance - yawRate = 45; // Maximum flap deflection for guidance - - canVanillaLock = 0; // Can this default vanilla lock? Only applicable to non-cadet mode - - showTrail = 1; - - // Guidance type for munitions - defaultSeekerType = "SACLOS"; - seekerTypes[] = { "SACLOS" }; - - defaultSeekerLockMode = "LOAL"; - seekerLockModes[] = { "LOAL", "LOBL" }; - - defaultNavigationType = "Line"; - navigationTypes[] = { "Line" }; - - lineGainP = 16; - lineGainD = 10.44; - - initialPitch = 2; - - seekLastTargetPos = 0; // seek last target position [if seeker loses LOS of target, continue to last known pos] - seekerAngle = 30; // Angle from the shooter's view that can track the missile - seekerAccuracy = 1; // seeker accuracy multiplier - - seekerMinRange = 75; - seekerMaxRange = 5000; // Range from the missile which the seeker can visually search - - correctionDistance = 30; // distance from center of crosshair where missile slows down - offsetFromCrosshair[] = { 0, 0, 0 }; // where the missile wants to stay in relation to the center of the crosshair. - - // Attack profile type selection - defaultAttackProfile = "BEAM"; - attackProfiles[] = {"BEAM"}; - }; - }; - - class CUP_M_9K115_2_AT13_Saxhorn_2_AT: MissileBase { - maneuvrability = 0; - - class ace_missileguidance { - enabled = 1; - - pitchRate = 50; // Minium flap deflection for guidance - yawRate = 50; // Maximum flap deflection for guidance - initialPitch = 2; - - canVanillaLock = 0; // Can this default vanilla lock? Only applicable to non-cadet mode - - showTrail = 1; - - // Guidance type for munitions - defaultSeekerType = "SACLOS"; - seekerTypes[] = { "SACLOS" }; - - defaultSeekerLockMode = "LOAL"; - seekerLockModes[] = { "LOAL", "LOBL" }; - - defaultNavigationType = "Line"; - navigationTypes[] = { "Line" }; - - lineGainP = 16; - lineGainD = 10.44; - - seekLastTargetPos = 0; // seek last target position [if seeker loses LOS of target, continue to last known pos] - seekerAngle = 15; // Angle from the shooter's view that can track the missile - seekerAccuracy = 1; // seeker accuracy multiplier - - seekerMinRange = 80; - seekerMaxRange = 2000; // Range from the missile which the seeker can visually search - - correctionDistance = 3; // distance from center of crosshair where missile slows down - offsetFromCrosshair[] = { 0, 0, 0 }; // where the missile wants to stay in relation to the center of the crosshair. - - // Attack profile type selection - defaultAttackProfile = "WIRE"; - attackProfiles[] = {"WIRE"}; - }; - }; - - class CUP_M_9M133_1_AT14_Spriggan_AT: MissileBase { - maneuvrability = 0; - - class ace_missileguidance { - enabled = 1; - - pitchRate = 45; // Minium flap deflection for guidance - yawRate = 45; // Maximum flap deflection for guidance - - canVanillaLock = 0; // Can this default vanilla lock? Only applicable to non-cadet mode - - showTrail = 1; - - // Guidance type for munitions - defaultSeekerType = "SACLOS"; - seekerTypes[] = { "SACLOS" }; - - defaultSeekerLockMode = "LOAL"; - seekerLockModes[] = { "LOAL", "LOBL" }; - - defaultNavigationType = "Line"; - navigationTypes[] = { "Line" }; - - lineGainP = 16; - lineGainD = 10.44; - - initialPitch = 2; - - seekLastTargetPos = 0; // seek last target position [if seeker loses LOS of target, continue to last known pos] - seekerAngle = 30; // Angle from the shooter's view that can track the missile - seekerAccuracy = 1; // seeker accuracy multiplier - - seekerMinRange = 75; - seekerMaxRange = 5000; // Range from the missile which the seeker can visually search - - correctionDistance = 30; // distance from center of crosshair where missile slows down - offsetFromCrosshair[] = { 0, 0, 0 }; // where the missile wants to stay in relation to the center of the crosshair. - - // Attack profile type selection - defaultAttackProfile = "BEAM"; - attackProfiles[] = {"BEAM"}; - }; - }; - - class CUP_M_9M133_1_AT14_Spriggan_HE: CUP_M_9M133_1_AT14_Spriggan_AT { - maneuvrability = 0; - class ace_missileguidance { - enabled = 1; - }; - }; - - class CUP_M_9K121_Vikhr_AT16_Scallion_AT: MissileBase { - maneuvrability = 0; - - class ace_missileguidance { - enabled = 1; - showTrail = 1; - - pitchRate = 60; // Minium flap deflection for guidance - yawRate = 60; // Maximum flap deflection for guidance - - canVanillaLock = 1; // Can this default vanilla lock? Only applicable to non-cadet mode - - // Guidance type for munitions - defaultSeekerType = "SACLOS"; - seekerTypes[] = { "SACLOS" }; - - defaultSeekerLockMode = "LOBL"; - seekerLockModes[] = { "LOBL" }; - - defaultNavigationType = "Line"; - navigationTypes[] = { "Line" }; - - lineGainP = 20; - lineGainD = 16; - correctionDistance = 5; - - seekLastTargetPos = 0; // seek last target position [if seeker loses LOS of target, continue to last known pos] - seekerAngle = 15; // Angle from the shooter's view that can track the missile - seekerAccuracy = 1; // seeker accuracy multiplier - - seekerMinRange = 30; - seekerMaxRange = 12000; // Range from the missile which the seeker can visually search - - // Attack profile type selection - defaultAttackProfile = "BEAM"; - attackProfiles[] = {"BEAM"}; - }; - }; - - class CUP_M_KH29L_AT: MissileBase { - maneuvrability = 0; - class ace_missileguidance { - enabled = 1; - - pitchRate = 20; - yawRate = 20; - - canVanillaLock = 0; - - defaultSeekerType = "SALH"; - seekerTypes[] = {"SALH"}; - - defaultSeekerLockMode = "LOAL"; - seekerLockModes[] = {"LOAL"}; - - defaultNavigationType = "AugmentedProportionalNavigation"; - navigationTypes[] = { "AugmentedProportionalNavigation" }; - - seekLastTargetPos = 1; - seekerAngle = 40; - seekerAccuracy = 1; - - seekerMinRange = 1; - seekerMaxRange = 10000; - - defaultAttackProfile = "maverick"; - attackProfiles[] = {"maverick"}; - }; - }; - - class CUP_M_AGM_114K_Hellfire_II_AT: MissileBase { - maneuvrability = 0; - class ace_missileguidance { - enabled = 1; - - pitchRate = 30; // degrees per second - yawRate = 30; - - canVanillaLock = 0; // Can this default vanilla lock? Only applicable to non-cadet mode - - // Guidance type for munitions - defaultSeekerType = "SALH"; - seekerTypes[] = { "SALH" }; - - defaultSeekerLockMode = "LOAL"; - seekerLockModes[] = { "LOAL", "LOBL" }; - - defaultNavigationType = "Direct"; - navigationTypes[] = { "Direct", "ZeroEffortMiss" }; - - seekLastTargetPos = 1; // seek last target position [if seeker loses LOS of target, continue to last known pos] - seekerAngle = 70; // Angle in front of the missile which can be searched - seekerAccuracy = 1; // seeker accuracy multiplier - - seekerMinRange = 1; - seekerMaxRange = 8000; // Range from the missile which the seeker can visually search - - // Attack profile type selection - defaultAttackProfile = "hellfire"; - attackProfiles[] = {"hellfire", "hellfire_hi", "hellfire_lo"}; - - class navigationStates { - class initial { - transitionCondition = "ace_hellfire_fnc_midCourseTransition"; - navigationType = "Direct"; - }; - class terminal { - transitionCondition = ""; - navigationType = "ZeroEffortMiss"; - }; - // transitions from initial -> termimal - states[] = {"initial", "terminal"}; - }; - }; - }; - - class CUP_M_AGM_114L_Hellfire_II_AT: MissileBase { - class ace_missileguidance { - enabled = 1; - - pitchRate = 30; // degrees per second - yawRate = 30; - - canVanillaLock = 1; // Can this default vanilla lock? Only applicable to non-cadet mode - - // Guidance type for munitions - defaultSeekerType = "MillimeterWaveRadar"; - seekerTypes[] = { "MillimeterWaveRadar" }; - - defaultSeekerLockMode = "LOBL"; - seekerLockModes[] = { "LOBL" }; - - defaultNavigationType = "Direct"; - navigationTypes[] = { "Direct", "ZeroEffortMiss" }; - - seekLastTargetPos = 0; // seek last target position [if seeker loses LOS of target, continue to last known pos] - seekerAngle = 70; // Angle in front of the missile which can be searched - seekerAccuracy = 1; // seeker accuracy multiplier - - seekerMinRange = 1; - activeRadarEngageDistance = 1000; - seekerMaxRange = 2000; // distance that the hellfire internal radar can scan - - // Attack profile type selection - defaultAttackProfile = "hellfire"; - attackProfiles[] = {"hellfire", "hellfire_hi", "hellfire_lo"}; - - class navigationStates { - class initial { - transitionCondition = "ace_hellfire_fnc_midCourseTransition"; - navigationType = "Direct"; - }; - class terminal { - transitionCondition = ""; - navigationType = "ZeroEffortMiss"; - }; - // transitions from initial -> termimal - states[] = {"initial", "terminal"}; - }; - }; - }; - - class CUP_M_AIM_9L_Sidewinder_AA: MissileBase { - maneuvrability = 0; - - class ace_missileguidance { - enabled = 1; - - pitchRate = 25; // Minium flap deflection for guidance - yawRate = 25; // Maximum flap deflection for guidance - - canVanillaLock = 1; // Can this default vanilla lock? Only applicable to non-cadet mode - - // Guidance type for munitions - defaultSeekerType = "IR"; - seekerTypes[] = { "IR" }; - - flareDistanceFilter = 100; - flareAngleFilter = 1.6; // can filter out flares that are >= flareAngleFilter to known target velocity - - defaultSeekerLockMode = "LOBL"; - seekerLockModes[] = { "LOBL" }; - - defaultNavigationType = "AugmentedProportionalNavigation"; - navigationTypes[] = { "AugmentedProportionalNavigation" }; - - seekLastTargetPos = 0; // seek last target position [if seeker loses LOS of target, continue to last known pos] - seekerAngle = 45; // Angle from the shooter's view that can track the missile - seekerAccuracy = 0.8; // seeker accuracy multiplier - - seekerMinRange = 75; - seekerMaxRange = 5000; // Range from the missile which the seeker can visually search - - // Attack profile type selection - defaultAttackProfile = "DIR"; - attackProfiles[] = {"DIR"}; - }; - }; - - class CUP_M_Stinger_AA: MissileBase { - maneuvrability = 0; - - class ace_missileguidance { - enabled = 1; - - pitchRate = 42; // Minium flap deflection for guidance - yawRate = 42; // Maximum flap deflection for guidance - - canVanillaLock = 1; // Can this default vanilla lock? Only applicable to non-cadet mode - - // Guidance type for munitions - defaultSeekerType = "IR"; - seekerTypes[] = { "IR" }; - - flareDistanceFilter = 100; - flareAngleFilter = 1.3; // can filter out flares that are >= flareAngleFilter to known target velocity - - defaultSeekerLockMode = "LOBL"; - seekerLockModes[] = { "LOBL" }; - - defaultNavigationType = "AugmentedProportionalNavigation"; - navigationTypes[] = { "AugmentedProportionalNavigation" }; - - seekLastTargetPos = 0; // seek last target position [if seeker loses LOS of target, continue to last known pos] - seekerAngle = 45; // Angle from the shooter's view that can track the missile - seekerAccuracy = 0.8; // seeker accuracy multiplier - - seekerMinRange = 75; - seekerMaxRange = 5000; // Range from the missile which the seeker can visually search - - // Attack profile type selection - defaultAttackProfile = "DIR"; - attackProfiles[] = {"DIR"}; - }; - }; - - class CUP_M_RBS70_AA: MissileBase { - maneuvrability = 0; - - class ace_missileguidance { - enabled = 1; - - pitchRate = 45; // Minium flap deflection for guidance - yawRate = 45; // Maximum flap deflection for guidance - - canVanillaLock = 0; // Can this default vanilla lock? Only applicable to non-cadet mode - - showTrail = 1; - - // Guidance type for munitions - defaultSeekerType = "SACLOS"; - seekerTypes[] = { "SACLOS" }; - - defaultSeekerLockMode = "LOAL"; - seekerLockModes[] = { "LOAL", "LOBL" }; - - defaultNavigationType = "Line"; - navigationTypes[] = { "Line" }; - - lineGainP = 20; - lineGainD = 16; - - initialPitch = 2; - - seekLastTargetPos = 0; // seek last target position [if seeker loses LOS of target, continue to last known pos] - seekerAngle = 30; // Angle from the shooter's view that can track the missile - seekerAccuracy = 1; // seeker accuracy multiplier - - seekerMinRange = 75; - seekerMaxRange = 5000; // Range from the missile which the seeker can visually search - - correctionDistance = 30; // distance from center of crosshair where missile slows down - offsetFromCrosshair[] = { 0, 0, 0 }; // where the missile wants to stay in relation to the center of the crosshair. - - // Attack profile type selection - defaultAttackProfile = "BEAM"; - attackProfiles[] = {"BEAM"}; - }; - }; - - class CUP_AGM65pod_AT: MissileBase { - maneuvrability = 0; - class ace_missileguidance { - enabled = 1; - - pitchRate = 15; - yawRate = 15; - - canVanillaLock = 1; - - defaultSeekerType = "Optic"; - seekerTypes[] = {"Optic"}; - - defaultSeekerLockMode = "LOBL"; - seekerLockModes[] = {"LOBL"}; - - defaultNavigationType = "AugmentedProportionalNavigation"; - navigationTypes[] = { "AugmentedProportionalNavigation" }; - - seekLastTargetPos = 1; - seekerAngle = 60; - seekerAccuracy = 1; - - seekerMinRange = 1; - seekerMaxRange = 14000; - - defaultAttackProfile = "maverick"; - attackProfiles[] = {"maverick"}; - }; - }; - - class CUP_R_TOW_AT: M_Titan_AT { - maneuvrability = 0; - class ace_missileguidance { - enabled = 1; - - pitchRate = 45; // Minium flap deflection for guidance - yawRate = 45; // Maximum flap deflection for guidance - - canVanillaLock = 0; // Can this default vanilla lock? Only applicable to non-cadet mode - - showTrail = 1; - - // Guidance type for munitions - defaultSeekerType = "SACLOS"; - seekerTypes[] = { "SACLOS" }; - - defaultSeekerLockMode = "LOAL"; - seekerLockModes[] = { "LOAL", "LOBL" }; - - defaultNavigationType = "Line"; - navigationTypes[] = { "Line" }; - - lineGainP = 20; - lineGainD = 7; - - initialPitch = 2; - - seekLastTargetPos = 0; // seek last target position [if seeker loses LOS of target, continue to last known pos] - seekerAngle = 30; // Angle from the shooter's view that can track the missile - seekerAccuracy = 1; // seeker accuracy multiplier - - seekerMinRange = 65; - seekerMaxRange = 3750; // Range from the missile which the seeker can visually search - - correctionDistance = 30; // distance from center of crosshair where missile slows down - offsetFromCrosshair[] = { 0, 0, 0 }; // where the missile wants to stay in relation to the center of the crosshair. - - // Attack profile type selection - defaultAttackProfile = "WIRE"; - attackProfiles[] = {"WIRE"}; - }; - }; - - class CUP_R_TOW2_AT: CUP_R_TOW_AT { - maneuvrability = 0; - class ace_missileguidance: ace_missileguidance { - enabled = 1; - }; - }; - - class CUP_Bo_GBU12_LGB: Bo_GBU12_LGB { - maneuvrability = 0; // no maneuvrability so that default guidance doesnt work - class ace_missileguidance { - enabled = 1; - - pitchRate = 5; - yawRate = 5; - - bangBangGuidance = 1; - stabilityCoefficient = 0.4; // how much this projectile likes to "weathervane" (keep direction toward velocity) - - canVanillaLock = 0; // Can this default vanilla lock? Only applicable to non-cadet mode - - // Guidance type for munitions - defaultSeekerType = "SALH"; - seekerTypes[] = { "SALH" }; - - defaultSeekerLockMode = "LOAL"; - seekerLockModes[] = { "LOAL" }; - - defaultNavigationType = "ProportionalNavigation"; - navigationTypes[] = { "ProportionalNavigation" }; - - seekLastTargetPos = 0; // seek last target position [if seeker loses LOS of target, continue to last known pos] - seekerAngle = 60; // Angle from the shooter's view that can track the missile - seekerAccuracy = 1; // seeker accuracy multiplier - - seekerMinRange = 5; - seekerMaxRange = 4000; // Range from the missile which the seeker can visually search - - // Attack profile type selection - defaultAttackProfile = "DIR"; - attackProfiles[] = {"DIR"}; - }; - }; - - class CUP_Bo_KAB250_LGB: Bo_GBU12_LGB { - maneuvrability = 0; // no maneuvrability so that default guidance doesnt work - class ace_missileguidance { - enabled = 1; - - pitchRate = 8; - yawRate = 8; - - bangBangGuidance = 1; - stabilityCoefficient = 0.4; // how much this projectile likes to "weathervane" (keep direction toward velocity) - - canVanillaLock = 0; // Can this default vanilla lock? Only applicable to non-cadet mode - - // Guidance type for munitions - defaultSeekerType = "SALH"; - seekerTypes[] = { "SALH" }; - - defaultSeekerLockMode = "LOAL"; - seekerLockModes[] = { "LOAL" }; - - defaultNavigationType = "ProportionalNavigation"; - navigationTypes[] = { "ProportionalNavigation" }; - - seekLastTargetPos = 0; // seek last target position [if seeker loses LOS of target, continue to last known pos] - seekerAngle = 60; // Angle from the shooter's view that can track the missile - seekerAccuracy = 1; // seeker accuracy multiplier - - seekerMinRange = 5; - seekerMaxRange = 4000; // Range from the missile which the seeker can visually search - - // Attack profile type selection - defaultAttackProfile = "DIR"; - attackProfiles[] = {"DIR"}; - }; - }; - - class GVAR(redeye): CUP_M_Stinger_AA { - maneuvrability = 0; - - class ace_missileguidance { - enabled = 1; - - pitchRate = 27; // Minium flap deflection for guidance - yawRate = 27; // Maximum flap deflection for guidance - - canVanillaLock = 1; // Can this default vanilla lock? Only applicable to non-cadet mode - - // Guidance type for munitions - defaultSeekerType = "IR"; - seekerTypes[] = { "IR" }; - - flareDistanceFilter = 100; - flareAngleFilter = 2.0; // can filter out flares that are >= flareAngleFilter to known target velocity - - defaultSeekerLockMode = "LOBL"; - seekerLockModes[] = { "LOBL" }; - - defaultNavigationType = "ProportionalNavigation"; - navigationTypes[] = { "ProportionalNavigation" }; - - seekLastTargetPos = 0; // seek last target position [if seeker loses LOS of target, continue to last known pos] - seekerAngle = 45; // Angle from the shooter's view that can track the missile - seekerAccuracy = 0.4; // seeker accuracy multiplier - - seekerMinRange = 75; - seekerMaxRange = 4500; // Range from the missile which the seeker can visually search - - // Attack profile type selection - defaultAttackProfile = "DIR"; - attackProfiles[] = {"DIR"}; - }; + class ShellBase; + class ace_dragon_serviceCharge: ShellBase { + soundSetExplosion[] = {}; // for JSRS }; }; - diff --git a/addons/missileGuidanceCompat/CfgMissileTypesNato.hpp b/addons/missileGuidanceCompat/CfgMissileTypesNato.hpp new file mode 100644 index 00000000..1d1af0ab --- /dev/null +++ b/addons/missileGuidanceCompat/CfgMissileTypesNato.hpp @@ -0,0 +1,20 @@ +class ACEGVAR(missileguidance,type_AMRAAM); +class ACEGVAR(missileguidance,type_ASRAAM); +class ACEGVAR(missileguidance,type_Dagr); +class ACEGVAR(missileguidance,type_Dragon); +class ACEGVAR(missileguidance,type_ESSM); +class ACEGVAR(missileguidance,type_Hellfire); +class ACEGVAR(missileguidance,type_Hot); +class ACEGVAR(missileguidance,type_Javelin); +class ACEGVAR(missileguidance,type_Jdam); +class ACEGVAR(missileguidance,type_Maverick); +class ACEGVAR(missileguidance,type_Milan); +class ACEGVAR(missileguidance,type_Nlaw); +class ACEGVAR(missileguidance,type_Patriot); +class ACEGVAR(missileguidance,type_Paveway); +class ACEGVAR(missileguidance,type_RAM); +class ACEGVAR(missileguidance,type_RBS70); +class ACEGVAR(missileguidance,type_Redeye); +class ACEGVAR(missileguidance,type_Sidewinder); +class ACEGVAR(missileguidance,type_Stinger); +class ACEGVAR(missileguidance,type_TOW); \ No newline at end of file diff --git a/addons/missileGuidanceCompat/CfgMissileTypesWarsaw.hpp b/addons/missileGuidanceCompat/CfgMissileTypesWarsaw.hpp new file mode 100644 index 00000000..b110265e --- /dev/null +++ b/addons/missileGuidanceCompat/CfgMissileTypesWarsaw.hpp @@ -0,0 +1,25 @@ +class ACEGVAR(missileguidance,type_Ataka); +class ACEGVAR(missileguidance,type_Bastion); +class ACEGVAR(missileguidance,type_Drakon); +class ACEGVAR(missileguidance,type_Fagot); +class ACEGVAR(missileguidance,type_Falanga); +class ACEGVAR(missileguidance,type_Fleyta); +class ACEGVAR(missileguidance,type_Igla); +class ACEGVAR(missileguidance,type_KAB); +class ACEGVAR(missileguidance,type_KH25); +class ACEGVAR(missileguidance,type_KH29); +class ACEGVAR(missileguidance,type_Kobra); +class ACEGVAR(missileguidance,type_Konkurs); +class ACEGVAR(missileguidance,type_Kornet); +class ACEGVAR(missileguidance,type_Malyutka); +class ACEGVAR(missileguidance,type_Metis); +class ACEGVAR(missileguidance,type_Molniya); +class ACEGVAR(missileguidance,type_R73); +class ACEGVAR(missileguidance,type_R74); +class ACEGVAR(missileguidance,type_R77); +class ACEGVAR(missileguidance,type_Refleks); +class ACEGVAR(missileguidance,type_S400); +class ACEGVAR(missileguidance,type_Shturm); +class ACEGVAR(missileguidance,type_Strela); +class ACEGVAR(missileguidance,type_Vikhr); +class ACEGVAR(missileguidance,type_Vympel); \ No newline at end of file diff --git a/addons/missileGuidanceCompat/config.cpp b/addons/missileGuidanceCompat/config.cpp index 11e32f58..23b65070 100644 --- a/addons/missileGuidanceCompat/config.cpp +++ b/addons/missileGuidanceCompat/config.cpp @@ -4,7 +4,7 @@ class CfgPatches { class ADDON { units[] = {}; requiredVersion = REQUIRED_VERSION; - requiredAddons[] = {"potato_core", "ace_missileguidance", "CUP_Weapons_LoadOrder"}; + requiredAddons[] = {"potato_core", "ace_missileguidance"}; skipWhenMissingDependencies = 1; author = "Potato"; authors[] = {"Dani (TCVM)"}; @@ -13,4 +13,6 @@ class CfgPatches { }; }; +#include "CfgMissileTypesWarsaw.hpp" +#include "CfgMissileTypesNato.hpp" #include "CfgAmmo.hpp" diff --git a/addons/missileGuidanceCompat/patchCUP/config.cpp b/addons/missileGuidanceCompat/patchCUP/config.cpp new file mode 100644 index 00000000..e0dce54e --- /dev/null +++ b/addons/missileGuidanceCompat/patchCUP/config.cpp @@ -0,0 +1,172 @@ +#include "\z\potato\addons\missileGuidanceCompat\script_component.hpp" +#undef COMPONENT +#define COMPONENT missileGuidanceCompat_patchCUP + +class CfgPatches { + class ADDON { + units[] = {}; + weapons[] = {}; + requiredVersion = REQUIRED_VERSION; + requiredAddons[] = {"potato_missileGuidanceCompat", "CUP_Weapons_LoadOrder"}; + skipWhenMissingDependencies = 1; + author = "Bourbon Warfare"; + authorUrl = "https://github.com/BourbonWarfare/POTATO"; + VERSION_CONFIG; + }; +}; + +#include "../CfgMissileTypesWarsaw.hpp" +#include "../CfgMissileTypesNato.hpp" + +class CfgMagazines { + class CA_LauncherMagazine; + class CUP_Dragon_EP1_M: CA_LauncherMagazine { + ammo = "ace_dragon_super"; + initSpeed = 120; + }; +}; + +class CfgAmmo { + class M_Titan_AA; + class MissileBase; + class M_Titan_AT; + class Bo_GBU12_LGB; + + class CUP_M_9K32_Strela_2_AA: M_Titan_AA { + maneuvrability = 0; + ACE_MISSILE(Strela); + }; + + class CUP_M_9K38_Igla_AA: M_Titan_AA { + maneuvrability = 0; + ACE_MISSILE(Igla); + }; + + class CUP_M_9M17P_AT2_Falanga_AT: MissileBase { + maneuvrability = 0; + ACE_MISSILE(Falanga); + }; + + class CUP_M_9M17P_AT3_Sagger_AT: MissileBase { + maneuvrability = 0; + ACE_MISSILE(Fleyta); + }; + + class CUP_M_9M113_AT5_Spandrel_AT: M_Titan_AT { + maneuvrability = 0; + ACE_MISSILE(Konkurs); + }; + + class CUP_M_Shturm_9M114_AT6_Spiral_AT: MissileBase { + maneuvrability = 0; + ACE_MISSILE(Shturm); + }; + + class CUP_M_Ataka_V_9M120_AT9_Spiral_2_AT: MissileBase { + maneuvrability = 0; + ACE_MISSILE(Ataka); + }; + + class CUP_M_9K116_1_Bastion_AT10_Stabber_AT: MissileBase { + maneuvrability = 0; + ACE_MISSILE(Bastion); + }; + + class CUP_M_9M119M_Refleks_AT11_Sniper_AT: MissileBase { + maneuvrability = 0; + ACE_MISSILE(Refleks); + }; + + class CUP_M_9K115_2_AT13_Saxhorn_2_AT: MissileBase { + maneuvrability = 0; + ACE_MISSILE(Metis); + }; + + class CUP_M_9M133_1_AT14_Spriggan_AT: MissileBase { + maneuvrability = 0; + ACE_MISSILE(Kornet); + }; + + class CUP_M_9M133_1_AT14_Spriggan_HE: CUP_M_9M133_1_AT14_Spriggan_AT { + maneuvrability = 0; + ACE_MISSILE(Kornet); + }; + + class CUP_M_9K121_Vikhr_AT16_Scallion_AT: MissileBase { + maneuvrability = 0; + ACE_MISSILE(Vikhr); + }; + + class CUP_M_KH29L_AT: MissileBase { + maneuvrability = 0; + ACE_MISSILE(KH29); + }; + + class CUP_M_AGM_114K_Hellfire_II_AT: MissileBase { + maneuvrability = 0; + ACE_MISSILE(Hellfire); + }; + + class CUP_M_AGM_114L_Hellfire_II_AT: MissileBase { + class ace_missileguidance: ACEGVAR(missileguidance,type_Hellfire) { + enabled = 1; + // Guidance type for munitions + defaultSeekerType = "MillimeterWaveRadar"; + seekerTypes[] = { "MillimeterWaveRadar" }; + + seekLastTargetPos = 0; // seek last target position [if seeker loses LOS of target, continue to last known pos] + seekerAngle = 70; // Angle in front of the missile which can be searched + seekerAccuracy = 1; // seeker accuracy multiplier + + seekerMinRange = 1; + activeRadarEngageDistance = 1000; + seekerMaxRange = 2000; // distance that the hellfire internal radar can scan + }; + }; + + class CUP_M_AIM_9L_Sidewinder_AA: MissileBase { + maneuvrability = 0; + ACE_MISSILE(Sidewinder); + }; + + class CUP_M_Stinger_AA: MissileBase { + maneuvrability = 0; + ACE_MISSILE(Stinger); + }; + + class EGVAR(missileGuidanceCompat,redeye): CUP_M_Stinger_AA { // BWC naming, used in CWR + maneuvrability = 0; + ACE_MISSILE(Redeye); + }; + + class CUP_M_RBS70_AA: MissileBase { + maneuvrability = 0; + ACE_MISSILE(RBS70); + }; + + class CUP_AGM65pod_AT: MissileBase { + maneuvrability = 0; + ACE_MISSILE(Maverick); + }; + + class CUP_R_TOW_AT: M_Titan_AT { + maneuvrability = 0; + ACE_MISSILE(TOW); + }; + + class CUP_R_TOW2_AT: CUP_R_TOW_AT { + maneuvrability = 0; + ACE_MISSILE(TOW); + }; + + class CUP_Bo_GBU12_LGB: Bo_GBU12_LGB { + maneuvrability = 0; // no maneuvrability so that default guidance doesnt work + ACE_MISSILE(Paveway); + }; + + class CUP_Bo_KAB250_LGB: Bo_GBU12_LGB { + maneuvrability = 0; // no maneuvrability so that default guidance doesnt work + ACE_MISSILE(KAB); + }; +}; + diff --git a/addons/missileGuidanceCompat/patchCWR/config.cpp b/addons/missileGuidanceCompat/patchCWR/config.cpp index 8da7d513..de85b35d 100644 --- a/addons/missileGuidanceCompat/patchCWR/config.cpp +++ b/addons/missileGuidanceCompat/patchCWR/config.cpp @@ -17,8 +17,8 @@ class CfgPatches { class CfgMagazines { - class CA_LauncherMagazine; - class cwr3_redeye_m: CA_LauncherMagazine { - ammo = QEGVAR(missileGuidanceCompat,redeye); - }; + class CA_LauncherMagazine; + class cwr3_redeye_m: CA_LauncherMagazine { + ammo = QEGVAR(missileGuidanceCompat,redeye); + }; }; diff --git a/addons/missileGuidanceCompat/patchGM/config.cpp b/addons/missileGuidanceCompat/patchGM/config.cpp new file mode 100644 index 00000000..f9246f40 --- /dev/null +++ b/addons/missileGuidanceCompat/patchGM/config.cpp @@ -0,0 +1,131 @@ +#include "\z\potato\addons\missileGuidanceCompat\script_component.hpp" +#undef COMPONENT +#define COMPONENT missileGuidanceCompat_patchGM + +class CfgPatches { + class ADDON { + units[] = {}; + weapons[] = {}; + requiredVersion = REQUIRED_VERSION; + requiredAddons[] = { + "potato_missileGuidanceCompat", + "gm_weapons_ammo", + "gm_weapons_launchers_fagot", + "gm_weapons_launchers_hot", + "gm_weapons_launchers_maljutka", + "gm_weapons_launchers_milan" + }; + skipWhenMissingDependencies = 1; + author = "Bourbon Warfare"; + authorUrl = "https://github.com/BourbonWarfare/POTATO"; + VERSION_CONFIG; + }; +}; + +#include "../CfgMissileTypesNato.hpp" +#include "../CfgMissileTypesWarsaw.hpp" + +class CfgAmmo { + class gm_missile_saclos_base; + // Bastion + class gm_missile_bastion_base: gm_missile_saclos_base { + maneuvrability = 0; + ACE_MISSILE(Bastion); + }; + class gm_missile_bastion_heat_9M117: gm_missile_bastion_base { + class ace_missileguidance: ace_missileguidance { + enabled = 1; + pitchRate = 25; + yawRate = 25; + lineGainP = 6; + lineGainD = 5; + showTrail = 0; + }; + }; + class gm_missile_bastion_heat_9M117M: gm_missile_bastion_base { + class ace_missileguidance: ace_missileguidance { + enabled = 1; + pitchRate = 25; + yawRate = 25; + lineGainP = 6; + lineGainD = 5; + showTrail = 0; + }; + }; + // Fagot missile + class gm_missile_fagot_base: gm_missile_saclos_base { + maneuvrability = 0; + ACE_MISSILE(Fagot); + }; + class gm_missile_fagot_heat_9m111: gm_missile_fagot_base { + class ace_missileguidance: ace_missileguidance { + enabled = 1; + showTrail = 0; + pitchRate = 25; + yawRate = 25; + lineGainP = 7; + lineGainD = 4; + }; + }; + // HOT missile + class gm_missile_hot_base: gm_missile_saclos_base { + maneuvrability = 0; + ACE_MISSILE(Hot); + }; + class gm_missile_hot_heat_dm72: gm_missile_hot_base { + class ace_missileguidance: ace_missileguidance { + enabled = 1; + pitchRate = 40; + yawRate = 40; + }; + }; + class gm_missile_hot_heat_dm102: gm_missile_hot_base { + class ace_missileguidance: ace_missileguidance { + enabled = 1; + }; + }; + // Malyutka + class gm_missile_maljutka_base: gm_missile_saclos_base { + maneuvrability = 0; + ACE_MISSILE(Malyutka); + }; + class gm_missile_maljutka_heat_9m14: gm_missile_maljutka_base { + class ace_missileguidance: ace_missileguidance { + enabled = 1; + showTrail = 1; + }; + }; + class gm_missile_maljutka_heat_9m14m: gm_missile_maljutka_base { + class ace_missileguidance: ace_missileguidance { + enabled = 1; + showTrail = 1; + }; + }; + // Milan + class gm_missile_milan_base: gm_missile_saclos_base { + maneuvrability = 0; + ACE_MISSILE(Milan); + }; + class gm_missile_milan_heat_dm82: gm_missile_milan_base { + class ace_missileguidance: ace_missileguidance { + enabled = 1; + initialPitch = 0.4; + }; + }; + class gm_missile_milan_heat_dm92: gm_missile_milan_base { + class ace_missileguidance: ace_missileguidance { + enabled = 1; + initialPitch = 0.4; + }; + }; + // AA Missiles + class gm_rocket_72mm_HE_9m32m_base; + class gm_rocket_72mm_HE_9m32m: gm_rocket_72mm_HE_9m32m_base { + maneuvrability = 0; + ACE_MISSILE(Strela); + }; + class gm_rocket_70mm_HE_m585_base; + class gm_rocket_70mm_HE_m585: gm_rocket_70mm_HE_m585_base { + ACE_MISSILE(Redeye); + }; +}; diff --git a/addons/missileGuidanceCompat/patchMELB/config.cpp b/addons/missileGuidanceCompat/patchMELB/config.cpp index 8d9167d5..8163f217 100644 --- a/addons/missileGuidanceCompat/patchMELB/config.cpp +++ b/addons/missileGuidanceCompat/patchMELB/config.cpp @@ -15,6 +15,7 @@ class CfgPatches { }; }; +class ACEGVAR(missileguidance,type_Hellfire); class CfgAmmo { class Missile_AGM_02_F; @@ -23,47 +24,6 @@ class CfgAmmo { laserLock = 0; manualControl = 0; - class ace_missileguidance { - enabled = 1; - - pitchRate = 30; // degrees per second - yawRate = 30; - - canVanillaLock = 0; // Can this default vanilla lock? Only applicable to non-cadet mode - - // Guidance type for munitions - defaultSeekerType = "SALH"; - seekerTypes[] = { "SALH" }; - - defaultSeekerLockMode = "LOAL"; - seekerLockModes[] = { "LOAL", "LOBL" }; - - defaultNavigationType = "Direct"; - navigationTypes[] = { "Direct", "ZeroEffortMiss" }; - - seekLastTargetPos = 1; // seek last target position [if seeker loses LOS of target, continue to last known pos] - seekerAngle = 70; // Angle in front of the missile which can be searched - seekerAccuracy = 1; // seeker accuracy multiplier - - seekerMinRange = 1; - seekerMaxRange = 8000; // Range from the missile which the seeker can visually search - - // Attack profile type selection - defaultAttackProfile = "hellfire"; - attackProfiles[] = {"hellfire", "hellfire_hi", "hellfire_lo"}; - - class navigationStates { - class initial { - transitionCondition = "ace_hellfire_fnc_midCourseTransition"; - navigationType = "Direct"; - }; - class terminal { - transitionCondition = ""; - navigationType = "ZeroEffortMiss"; - }; - // transitions from initial -> termimal - states[] = {"initial", "terminal"}; - }; - }; + ACE_MISSILE(Hellfire); }; }; diff --git a/addons/missileGuidanceCompat/patchRHSAFRF/config.cpp b/addons/missileGuidanceCompat/patchRHSAFRF/config.cpp new file mode 100644 index 00000000..cf88c0db --- /dev/null +++ b/addons/missileGuidanceCompat/patchRHSAFRF/config.cpp @@ -0,0 +1,396 @@ +#include "\z\potato\addons\missileGuidanceCompat\script_component.hpp" +#undef COMPONENT +#define COMPONENT missileGuidanceCompat_patchRHSAFRF + +class CfgPatches { + class ADDON { + units[] = {}; + weapons[] = {}; + requiredVersion = REQUIRED_VERSION; + requiredAddons[] = {"potato_missileGuidanceCompat", "rhs_c_airweapons", "rhs_c_heavyweapons"}; + skipWhenMissingDependencies = 1; + author = "Bourbon Warfare"; + authorUrl = "https://github.com/BourbonWarfare/POTATO"; + VERSION_CONFIG; + }; +}; + +#include "../CfgMissileTypesWarsaw.hpp" + +class CfgAmmo { + class Missile_AGM_01_F; + class Missile_AGM_02_F; + class Missile_AA_04_F; + class rhs_ammo_r27_base; + class M_Titan_AA; + class MissileBase; + class M_Titan_AT; + class rhs_ammo_atgmCore_base: M_Titan_AT { + class EventHandlers; + }; + class rhs_ammo_atgmBase_base: M_Titan_AT { + class EventHandlers; + }; + class rhs_ammo_9k32: M_Titan_AA { + maneuvrability = 0; + ACE_MISSILE(Strela); + }; + class rhs_ammo_9k38: rhs_ammo_9k32 { + maneuvrability = 0; + ACE_MISSILE(Igla); + }; + class rhs_ammo_9m114: rhs_ammo_atgmBase_base { + maneuvrability = 0; + ACE_MISSILE(Shturm); + class EventHandlers: EventHandlers { + class RHS_Guidance {}; + }; + }; + class rhs_ammo_9m114m: rhs_ammo_9m114 { + class ace_missileguidance: ace_missileguidance { + enabled = 1; + }; + }; + class rhs_ammo_9m114f: rhs_ammo_9m114 { + class ace_missileguidance: ace_missileguidance { + enabled = 1; + }; + }; + class rhs_ammo_9m114m1: rhs_ammo_9m114 { + class ace_missileguidance: ace_missileguidance { + enabled = 1; + maxSeekerRange = 6000; + }; + }; + class rhs_ammo_9m114m2: rhs_ammo_9m114 { + class ace_missileguidance: ace_missileguidance { + enabled = 1; + maxSeekerRange = 7000; + }; + }; + class rhs_ammo_9m120: rhs_ammo_atgmBase_base { + maneuvrability = 0; + ACE_MISSILE(Ataka); + class EventHandlers: EventHandlers { + class RHS_Guidance {}; + }; + }; + class rhs_ammo_9m120m: rhs_ammo_9m120 { + class ace_missileguidance: ace_missileguidance { + enabled = 1; + maxSeekerRange = 8000; + }; + }; + class rhs_ammo_9m120f: rhs_ammo_9m120 { + class ace_missileguidance: ace_missileguidance { + enabled = 1; + }; + }; + class rhs_ammo_9m120o: rhs_ammo_9m120 { + class ace_missileguidance: ace_missileguidance { + enabled = 1; + }; + }; + class rhs_ammo_9m127: rhs_ammo_9m120 { + maneuvrability = 0; + ACE_MISSILE(Vikhr); + class EventHandlers: EventHandlers { + class RHS_Guidance {}; + }; + }; + class rhs_ammo_9m127m: rhs_ammo_9m127 { + class ace_missileguidance: ace_missileguidance { + enabled = 1; + }; + }; + class rhs_ammo_r27t: rhs_ammo_r27_base { + maneuvrability = 0; + ACE_MISSILE(Vympel); + }; + class rhs_ammo_r27et: rhs_ammo_r27t { + class ace_missileguidance: ace_missileguidance { + enabled = 1; + }; + }; + class rhs_ammo_r60_base: Missile_AA_04_F { + maneuvrability = 0; + ACE_MISSILE(Molniya); + }; + class rhs_ammo_r60: rhs_ammo_r60_base { + class ace_missileguidance: ace_missileguidance { + enabled = 1; + }; + }; + class rhs_ammo_r60m: rhs_ammo_r60_base { + class ace_missileguidance: ace_missileguidance { + enabled = 1; + seekerMaxRange = 8000; // Range from the missile which the seeker can visually search + }; + }; + class rhs_ammo_r73: Missile_AA_04_F { + maneuvrability = 0; + ACE_MISSILE(R73); + }; + class rhs_ammo_r73m: rhs_ammo_r73 { + class ace_missileguidance: ace_missileguidance { + enabled = 1; + }; + }; + class rhs_ammo_r74: rhs_ammo_r73m { + class ace_missileguidance: ace_missileguidance { + enabled = 1; + }; + }; + class rhs_ammo_r74m2: rhs_ammo_r74 { + class ace_missileguidance: ace_missileguidance { + enabled = 1; + }; + }; + class rhs_ammo_r77: rhs_ammo_r73 { + maneuvrability = 0; + ACE_MISSILE(R77); + }; + class rhs_ammo_r77m: rhs_ammo_r77 { + class ace_missileguidance: ace_missileguidance { + enabled = 1; + }; + }; + class rhs_ammo_kh25_base: Missile_AGM_01_F { + maneuvrability = 0; + ACE_MISSILE(KH25); + }; + class rhs_ammo_kh25: rhs_ammo_kh25_base { + class ace_missileguidance: ace_missileguidance { + enabled = 1; + seekerMaxRange = 7000; + }; + }; + class rhs_ammo_kh25ml: rhs_ammo_kh25_base { + class ace_missileguidance: ace_missileguidance { + enabled = 1; + }; + }; + class rhs_ammo_kh25ma: rhs_ammo_kh25_base { + class ace_missileguidance: ace_missileguidance { + enabled = 1; + defaultSeekerType = "MillimeterWaveRadar"; + seekerTypes[] = { "MillimeterWaveRadar" }; + activeRadarEngageDistance = 1000; + }; + }; + class rhs_ammo_kh25mtp: rhs_ammo_kh25_base { + class ace_missileguidance: ace_missileguidance { + enabled = 1; + defaultSeekerType = "Optic"; + seekerTypes[] = { "Optic" }; + seekerMaxRange = 9000; + }; + }; + class rhs_ammo_kh29_base: Missile_AGM_02_F { + maneuvrability = 0; + ACE_MISSILE(KH29); + }; + class rhs_ammo_kh29l: rhs_ammo_kh29_base { + class ace_missileguidance: ace_missileguidance { + enabled = 1; + }; + }; + class rhs_ammo_kh29ml: rhs_ammo_kh29_base { + class ace_missileguidance: ace_missileguidance { + enabled = 1; + }; + }; + class rhs_ammo_kh29mp: rhs_ammo_kh29_base { + class ace_missileguidance: ace_missileguidance { + enabled = 1; + defaultSeekerType = "MillimeterWaveRadar"; + seekerTypes[] = { "MillimeterWaveRadar" }; + activeRadarEngageDistance = 1000; + }; + }; + class rhs_ammo_kh29d: rhs_ammo_kh29_base { + class ace_missileguidance: ace_missileguidance { + enabled = 1; + defaultSeekerType = "Optic"; + seekerTypes[] = { "Optic" }; + }; + }; + class rhs_ammo_9m14: rhs_ammo_atgmBase_base { + maneuvrability = 0; + ACE_MISSILE(Malyutka); + class EventHandlers: EventHandlers { + class RHS_Guidance {}; + }; + }; + class rhs_ammo_9m14m: rhs_ammo_9m14 { + class ace_missileguidance: ace_missileguidance { + enabled = 1; + }; + }; + class rhs_ammo_mclos_training: rhs_ammo_9m14m { + class ace_missileguidance: ace_missileguidance { + enabled = 1; + }; + }; + class rhs_ammo_9m17: rhs_ammo_atgmBase_base { + maneuvrability = 0; + ACE_MISSILE(Fleyta); + class EventHandlers: EventHandlers { + class RHS_Guidance {}; + }; + }; + class rhs_ammo_9m17p: rhs_ammo_9m17 { + class ace_missileguidance: ace_missileguidance { + enabled = 1; + defaultSeekerType = "SACLOS"; + seekerTypes[] = { "SACLOS" }; + }; + }; + class rhs_ammo_9m112: rhs_ammo_atgmCore_base { + maneuvrability = 0; + ACE_MISSILE(Refleks); + class EventHandlers: EventHandlers { + class RHS_Guidance {}; + }; + }; + class rhs_ammo_9m112m: rhs_ammo_9m112 { + class ace_missileguidance: ace_missileguidance { + enabled = 1; + }; + }; + class rhs_ammo_9m112m2: rhs_ammo_9m112m { + class ace_missileguidance: ace_missileguidance { + enabled = 1; + }; + }; + class rhs_ammo_9m124: rhs_ammo_9m112m { + class ace_missileguidance: ace_missileguidance { + enabled = 1; + }; + }; + class rhs_ammo_9m128: rhs_ammo_atgmCore_base { + maneuvrability = 0; + ACE_MISSILE(Kobra); + }; + class rhs_ammo_9m111: rhs_ammo_atgmBase_base { + maneuvrability = 0; + ACE_MISSILE(Fagot); + class EventHandlers: EventHandlers { + class RHS_Guidance {}; + }; + }; + class rhs_ammo_9m111m: rhs_ammo_9m111 { + class ace_missileguidance: ace_missileguidance { + enabled = 1; + seekerMaxRange = 2500; + }; + }; + class rhs_ammo_9m113: rhs_ammo_atgmBase_base { + maneuvrability = 0; + ACE_MISSILE(Konkurs); + class EventHandlers: EventHandlers { + class RHS_Guidance {}; + }; + }; + class rhs_ammo_9m113m: rhs_ammo_9m113 { + class ace_missileguidance: ace_missileguidance { + enabled = 1; + }; + }; + class rhs_ammo_9m117: rhs_ammo_atgmCore_base { + maneuvrability = 0; + ACE_MISSILE(Bastion); + class EventHandlers: EventHandlers { + class RHS_Guidance {}; + }; + }; + class rhs_ammo_9m117m: rhs_ammo_9m117 { + class ace_missileguidance: ace_missileguidance { + enabled = 1; + seekerMaxRange = 5500; + }; + }; + class rhs_ammo_9m117m1: rhs_ammo_9m117m { + class ace_missileguidance: ace_missileguidance { + enabled = 1; + seekerMaxRange = 6000; + }; + }; + class rhs_ammo_9m118: rhs_ammo_9m117 { + class ace_missileguidance: ace_missileguidance { + enabled = 1; + }; + }; + class rhs_ammo_9m119: rhs_ammo_atgmCore_base { + maneuvrability = 0; + ACE_MISSILE(Refleks); + class EventHandlers: EventHandlers { + class RHS_Guidance {}; + }; + }; + class rhs_ammo_9m119m: rhs_ammo_9m119 { + class ace_missileguidance: ace_missileguidance { + enabled = 1; + }; + }; + class rhs_ammo_9m119f: rhs_ammo_9m119 { + class ace_missileguidance: ace_missileguidance { + enabled = 1; + }; + }; + class rhs_ammo_9m115: rhs_ammo_9m119 { + maneuvrability = 0; + ACE_MISSILE(Metis); + class EventHandlers: EventHandlers { + class RHS_Guidance {}; + }; + }; + class rhs_ammo_9m131: rhs_ammo_9m115 { + class ace_missileguidance: ace_missileguidance { + enabled = 1; + seekerMaxRange = 1500; + }; + }; + class rhs_ammo_9m131m: rhs_ammo_9m131 { + class ace_missileguidance: ace_missileguidance { + enabled = 1; + seekerMaxRange = 2000; + }; + }; + class rhs_ammo_9m131f: rhs_ammo_9m131m { + class ace_missileguidance: ace_missileguidance { + enabled = 1; + }; + }; + class rhs_ammo_9m133f: rhs_ammo_9m131f { + maneuvrability = 0; + ACE_MISSILE(Konkurs); + class EventHandlers: EventHandlers { + class RHS_Guidance {}; + }; + }; + class rhs_ammo_9m133: rhs_ammo_atgmBase_base { + maneuvrability = 0; + ACE_MISSILE(Konkurs); + class EventHandlers: EventHandlers { + class RHS_Guidance {}; + }; + }; + class rhs_ammo_9m1331: rhs_ammo_9m133 { + class ace_missileguidance: ace_missileguidance { + enabled = 1; + }; + }; + class rhs_ammo_9m133m2: rhs_ammo_9m133 { + class ace_missileguidance: ace_missileguidance { + enabled = 1; + }; + }; + class rhs_ammo_3m7: rhs_ammo_atgmBase_base { + maneuvrability = 0; + ACE_MISSILE(Drakon); + class EventHandlers: EventHandlers { + class RHS_Guidance {}; + }; + }; +}; \ No newline at end of file diff --git a/addons/missileGuidanceCompat/script_component.hpp b/addons/missileGuidanceCompat/script_component.hpp index c9b7f00c..0c7f26ea 100644 --- a/addons/missileGuidanceCompat/script_component.hpp +++ b/addons/missileGuidanceCompat/script_component.hpp @@ -6,4 +6,5 @@ // #define ENABLE_PERFORMANCE_COUNTERS #include "\z\potato\addons\core\script_macros.hpp" +#include "script_macros.hpp" diff --git a/addons/missileGuidanceCompat/script_macros.hpp b/addons/missileGuidanceCompat/script_macros.hpp new file mode 100644 index 00000000..a2b6c703 --- /dev/null +++ b/addons/missileGuidanceCompat/script_macros.hpp @@ -0,0 +1,2 @@ +#define SCORE_2(a,b) a##_##b +#define ACE_MISSILE(missile) class ace_missileguidance: ACEGVAR(missileguidance,SCORE_2(type,missile)) { enabled = 1; } \ No newline at end of file diff --git a/addons/missionMaking/functions/fnc_changeUnitType.sqf b/addons/missionMaking/functions/fnc_changeUnitType.sqf index ffbfeb53..8888b2ba 100644 --- a/addons/missionMaking/functions/fnc_changeUnitType.sqf +++ b/addons/missionMaking/functions/fnc_changeUnitType.sqf @@ -3,8 +3,8 @@ params [["_type", "", [""]]]; if (_type == "") exitWith {}; -private _input = uinamespace getvariable ["bis_fnc_3DENEntityMenu_data",[]]; -private _entity = _input param [1,objnull]; +private _input = uiNamespace getVariable ["bis_fnc_3DENEntityMenu_data",[]]; +private _entity = _input param [1,objNull]; systemChat format ["Change %1 to %2", _entity, _type]; diff --git a/addons/missionMaking/functions/fnc_onMissionSave.sqf b/addons/missionMaking/functions/fnc_onMissionSave.sqf index 3393079c..0360d1f7 100644 --- a/addons/missionMaking/functions/fnc_onMissionSave.sqf +++ b/addons/missionMaking/functions/fnc_onMissionSave.sqf @@ -276,7 +276,7 @@ private _fortifies = (all3DENEntities select 3) select {_x isKindOf "potato_fort } forEach _fortifies; TRACE_1("",_problems); -INFO_2("Finished test with %1 problems in %2 ms:",count _problems,((diag_ticktime - _startTime) * 1000) toFixed 1); +INFO_2("Finished test with %1 problems in %2 ms:",count _problems,((diag_tickTime - _startTime) * 1000) toFixed 1); if (_problems isEqualTo []) then { private _msg = "Saved: No Problems Detected!"; @@ -291,7 +291,7 @@ if (_problems isEqualTo []) then { _x params ["_errorCode", "_errorArray"]; private _errorCount = count _errorArray; if (_errorCount > 5) then { - _errorArray reSize 5; + _errorArray resize 5; _errorArray pushBack format [" + %1 more", _errorCount - 5]; }; private _msg = format ["[%1/%2] %3:%4", (_forEachIndex + 1), count _problems, _errorCode, _errorArray]; diff --git a/addons/missionMaking/functions/fnc_testAllLoadouts.sqf b/addons/missionMaking/functions/fnc_testAllLoadouts.sqf index 64daea0c..89d74748 100644 --- a/addons/missionMaking/functions/fnc_testAllLoadouts.sqf +++ b/addons/missionMaking/functions/fnc_testAllLoadouts.sqf @@ -90,7 +90,7 @@ private _getArrayAndCheck = { private _configLaunchers = ["launchers", [_cfgWeap]] call _getArrayAndCheck; private _configHandguns = ["handguns", [_cfgWeap]] call _getArrayAndCheck; private _configMagazines = ["magazines", [_cfgWeap, _cfgMag]] call _getArrayAndCheck; - private _configItems = ["items", [_cfgWeap]] call _getArrayAndCheck; + private _configItems = ["items", [_cfgWeap, _cfgMag]] call _getArrayAndCheck; private _configLinkedItems = ["linkedItems", [_cfgWeap]] call _getArrayAndCheck; private _configAttachments = ["attachments", [_cfgWeap]] call _getArrayAndCheck; private _configSecondaryAttachments = ["secondaryAttachments", [_cfgWeap]] call _getArrayAndCheck; @@ -113,7 +113,7 @@ private _getArrayAndCheck = { // Check we haves some ammo (besides launchers) if (_checkHaveSomeAmmo && {_weaponIndex != 1} && {_weaponMags isNotEqualTo []} && {(_configMagazines arrayIntersect _weaponMags) isEqualTo []}) then { - [format ["%1 has no magazines %2 from %3", _weapon, _configMagazines]] call _fnc_error; + [format ["%1 has no magazines %2", _weapon, _configMagazines]] call _fnc_error; }; // Check we use potato mags if they exist for the weapon @@ -152,7 +152,7 @@ private _getArrayAndCheck = { // Check core slots have rifle resupply ammo if (_checkResupply && {_weaponIndex == 0} && {(toLower _unitName) in ["rifleman", "ftl", "ar", "lat"]}) then { if ((_weaponMags arrayIntersect _transportMags) isEqualTo []) then { - [format ["%1 has no resupply %2", _x], _transportMags] call _fnc_error; + [format ["%1 has no resupply", _x], _transportMags] call _fnc_error; }; }; diff --git a/addons/missionModules/CfgVehicles.hpp b/addons/missionModules/CfgVehicles.hpp index adbaa94f..780f1297 100644 --- a/addons/missionModules/CfgVehicles.hpp +++ b/addons/missionModules/CfgVehicles.hpp @@ -239,6 +239,12 @@ class CfgVehicles { picture = "\A3\ui_f\data\map\markers\flags\CzechRepublic_ca.paa"; data[] = {"CUP_D_Male01_CZ","CUP_D_Male02_CZ","CUP_D_Male03_CZ","CUP_D_Male04_CZ","CUP_D_Male05_CZ", "CUP_D_Male01_CZ_ACR","CUP_D_Male02_CZ_ACR","CUP_D_Male03_CZ_ACR","CUP_D_Male04_CZ_ACR","CUP_D_Male05_CZ_ACR"}; }; + class gm_language_deu_male { + name = "German [GM]"; + value = "gm_language_deu_male"; + picture = "\A3\Ui_f\data\Map\Markers\Flags\germany_ca.paa"; + data[] = {"gm_voice_male_deu_01","gm_voice_male_deu_02","gm_voice_male_deu_03","gm_voice_male_deu_04","gm_voice_male_deu_05","gm_voice_male_deu_06","gm_voice_male_deu_07","gm_voice_male_deu_08","gm_voice_male_deu_09"}; + }; }; }; }; diff --git a/addons/missionModules/functions/fnc_identity_dev.sqf b/addons/missionModules/functions/fnc_identity_dev.sqf index 25de089c..c8b900d4 100644 --- a/addons/missionModules/functions/fnc_identity_dev.sqf +++ b/addons/missionModules/functions/fnc_identity_dev.sqf @@ -16,7 +16,7 @@ z = z select {private _name = _x; (ignore findIf {_x in toLower _name}) == -1 }; }; } forEach x; - if (match isequalto []) then {continue}; + if (match isEqualTo []) then {continue}; private _first = configFile >> "CfgVoice" >> (match # 0); diff --git a/addons/missionModules/functions/fnc_sideMarker.sqf b/addons/missionModules/functions/fnc_sideMarker.sqf index ca719b25..d351d8fa 100644 --- a/addons/missionModules/functions/fnc_sideMarker.sqf +++ b/addons/missionModules/functions/fnc_sideMarker.sqf @@ -40,7 +40,7 @@ private _icon = _logic getVariable ["icon", "mil_dot_noShadow"]; private _nextIndex = missionNamespace getVariable [QGVAR(nextMarkerIndex), 0]; missionNamespace setVariable [QGVAR(nextMarkerIndex), (_nextIndex + 1)]; - private _markerName = createmarkerLocal [format [QGVAR(%1), _nextIndex], _pos]; + private _markerName = createMarkerLocal [format [QGVAR(%1), _nextIndex], _pos]; TRACE_1("Creating Marker",_markerName); _markerName setMarkerShapeLocal "ICON"; diff --git a/addons/missionModules/functions/fnc_zeusAttributes_missionHint.sqf b/addons/missionModules/functions/fnc_zeusAttributes_missionHint.sqf index d8a01abc..03fd4958 100644 --- a/addons/missionModules/functions/fnc_zeusAttributes_missionHint.sqf +++ b/addons/missionModules/functions/fnc_zeusAttributes_missionHint.sqf @@ -13,9 +13,9 @@ disableSerialization; params ["_control"]; TRACE_1("params",_control); -private _display = ctrlparent _control; -private _ctrlButtonOK = _display displayctrl 1; //IDC_OK -private _logicObject = missionNamespace getVariable ["BIS_fnc_initCuratorAttributes_target", objnull]; +private _display = ctrlParent _control; +private _ctrlButtonOK = _display displayCtrl 1; //IDC_OK +private _logicObject = missionNamespace getVariable ["BIS_fnc_initCuratorAttributes_target", objNull]; TRACE_1("logicObject",_logicObject); _control ctrlRemoveAllEventHandlers "SetFocus"; @@ -51,7 +51,7 @@ private _fnc_onUnload = { params [["_display", displayNull, [displayNull]]]; TRACE_1("_fnc_onUnload params",_display); - private _logicObject = missionnamespace getVariable ["BIS_fnc_initCuratorAttributes_target", objnull]; + private _logicObject = missionNamespace getVariable ["BIS_fnc_initCuratorAttributes_target", objNull]; if (isNull _logicObject) exitWith {}; deleteVehicle _logicObject; @@ -60,10 +60,10 @@ private _fnc_onUnload = { private _fnc_onConfirm = { params [["_ctrlButtonOK", controlNull, [controlNull]]]; TRACE_1("_fnc_onConfirm params",_this); - private _display = ctrlparent _ctrlButtonOK; + private _display = ctrlParent _ctrlButtonOK; if (isNull _display) exitWith {}; - private _logicObject = missionnamespace getvariable ["BIS_fnc_initCuratorAttributes_target", objnull]; + private _logicObject = missionNamespace getVariable ["BIS_fnc_initCuratorAttributes_target", objNull]; if (isNull _logicObject) exitWith {diag_log text format ["[POTATO] - ERROR Logic [%1] is null on confirm", _logicObject];}; private _selectedIndexSide = lbCurSel (_display displayCtrl 23071); @@ -87,5 +87,5 @@ private _fnc_onConfirm = { }; -_display displayaddeventhandler ["unload", _fnc_onUnload]; -_ctrlButtonOK ctrladdeventhandler ["buttonclick", _fnc_onConfirm]; +_display displayAddEventHandler ["Unload", _fnc_onUnload]; +_ctrlButtonOK ctrlAddEventHandler ["ButtonClick", _fnc_onConfirm]; diff --git a/addons/missionModules/functions/fnc_zeus_banziCharge.sqf b/addons/missionModules/functions/fnc_zeus_banziCharge.sqf index d97154f9..51085f54 100644 --- a/addons/missionModules/functions/fnc_zeus_banziCharge.sqf +++ b/addons/missionModules/functions/fnc_zeus_banziCharge.sqf @@ -11,7 +11,7 @@ params ["_logic"]; if (!local _logic) exitWith {}; -private _unit = _logic getVariable ["bis_fnc_curatorAttachObject_object",objnull]; +private _unit = _logic getVariable ["bis_fnc_curatorAttachObject_object",objNull]; TRACE_2("",_logic,_unit); if ((!isNull _unit) || {alive _unit} || {_unit isKindOf "CaManBase"}) then { diff --git a/addons/missionModules/functions/fnc_zeus_bodyBag.sqf b/addons/missionModules/functions/fnc_zeus_bodyBag.sqf index 2532ad45..f4dfd32a 100644 --- a/addons/missionModules/functions/fnc_zeus_bodyBag.sqf +++ b/addons/missionModules/functions/fnc_zeus_bodyBag.sqf @@ -10,7 +10,7 @@ params ["_logic"]; if (!local _logic) exitWith {}; -private _unit = _logic getVariable ["bis_fnc_curatorAttachObject_object",objnull]; +private _unit = _logic getVariable ["bis_fnc_curatorAttachObject_object",objNull]; TRACE_2("",_logic,_unit); if ([nil, _unit] call ACEFUNC(medical_treatment,canPlaceInBodyBag)) then { diff --git a/addons/missionTesting/functions/fnc_displayMenu.sqf b/addons/missionTesting/functions/fnc_displayMenu.sqf index 740e2813..8f3f701f 100644 --- a/addons/missionTesting/functions/fnc_displayMenu.sqf +++ b/addons/missionTesting/functions/fnc_displayMenu.sqf @@ -56,16 +56,16 @@ private _createChecklistSection = { if(_itemApplicable == (getMissionConfigValue QGVAR(missionType)) || _itemApplicable == 0) then { //Create Structure Text and Insert Text. Get hight of text and resize control appropriately. - _ctrlCreateText = DISPLAY_TESTMENU ctrlCreate [QUOTE(RscStructuredText),-1,CONTROL_GROUP_L]; + private _ctrlCreateText = DISPLAY_TESTMENU ctrlCreate [QUOTE(RscStructuredText),-1,CONTROL_GROUP_L]; _ctrlCreateText ctrlSetStructuredText parseText _text; _ctrlCreateText ctrlSetBackgroundColor [1, 1, 1, 0.25]; _ctrlCreateText ctrlSetPosition [0.01,GVAR(yStartCoord),0.77,CONTROL_SIZE_H]; _ctrlCreateText ctrlCommit 0; - _ctrlHeight = ctrlTextHeight _ctrlCreateText; + private _ctrlHeight = ctrlTextHeight _ctrlCreateText; _ctrlCreateText ctrlSetPosition [0.01,GVAR(yStartCoord),0.77,_ctrlHeight + 0.01]; _ctrlCreateText ctrlCommit 0; //Create check box and add eventhandler that updates the Master Array when changed. - _ctrlCreateCB = DISPLAY_TESTMENU ctrlCreate [QUOTE(RscCheckBox),_idc,CONTROL_GROUP_L]; + private _ctrlCreateCB = DISPLAY_TESTMENU ctrlCreate [QUOTE(RscCheckBox),_idc,CONTROL_GROUP_L]; _ctrlCreateCB ctrlSetPosition [0.78,GVAR(yStartCoord),0.05,CONTROL_SIZE_H]; _ctrlCreateCB ctrlCommit 0; _ctrlCreateCB cbSetChecked _checked; @@ -88,7 +88,7 @@ private _createChecklistSection = { private _idcPassFail = IDC_CBITEMS + _forEachIndex; private _ctrlCreateSectionInstruction = DISPLAY_TESTMENU ctrlCreate [QUOTE(RscCombo),_idcPassFail,CONTROL_GROUP_L]; - lbCLear _ctrlCreateSectionInstruction; + lbClear _ctrlCreateSectionInstruction; { _ctrlCreateSectionInstruction lbAdd _x; } forEach A_PASSFAIL; @@ -262,7 +262,7 @@ TRACE_1("Create Control Structure Text Info",_ctrlCreateInfoBlock); _ctrlCreateInfoBlock ctrlSetBackgroundColor [0, 0, 0, 0.5]; _ctrlCreateInfoBlock ctrlSetPosition [0,0,0.5,1]; _ctrlCreateInfoBlock ctrlCommit 0; -_ctrlCreateInfoBlockText = composeText [ +private _ctrlCreateInfoBlockText = composeText [ parseText "MISSION INFORMATION" ,_separator ,parseText "Mission Maker: ",_missionMaker, lineBreak @@ -280,8 +280,8 @@ _ctrlCreateInfoBlockText = composeText [ ,lineBreak ,parseText "MISSION TIMERS" ,_separator - ,parseText "Mission SS Time (mins): ",_missionSSTime, linebreak - ,parseText "Mission Run Time (mins): ",_missionTimeLength, linebreak + ,parseText "Mission SS Time (mins): ",_missionSSTime, lineBreak + ,parseText "Mission Run Time (mins): ",_missionTimeLength, lineBreak ,lineBreak ,parseText "MISSION TAGS" ,_separator @@ -308,7 +308,7 @@ _ctrlCreateInfoBlockMissionMakerNotes ctrlSetBackgroundColor [0, 0, 0, 0.5]; _ctrlCreateInfoBlockMissionMakerNotes ctrlSetPosition [0,_ctrlCreateInfoBlockHeight + 0.1,0.5,1]; _ctrlCreateInfoBlockMissionMakerNotes ctrlCommit 0; _ctrlCreateInfoBlockMissionMakerNotes ctrlSetText _missionNotesForTester; -_ctrlCreateInfoBlockMissionMakerNotesHeight = ctrlTextHeight _ctrlCreateInfoBlockMissionMakerNotes; +private _ctrlCreateInfoBlockMissionMakerNotesHeight = ctrlTextHeight _ctrlCreateInfoBlockMissionMakerNotes; _ctrlCreateInfoBlockMissionMakerNotes ctrlSetPosition [0,_ctrlCreateInfoBlockHeight + 0.01,0.5,_ctrlCreateInfoBlockMissionMakerNotesHeight + 0.01]; _ctrlCreateInfoBlockMissionMakerNotes ctrlCommit 0; diff --git a/addons/missionTesting/functions/fnc_runWeaponsTest.sqf b/addons/missionTesting/functions/fnc_runWeaponsTest.sqf index 7458d65f..eda0aa69 100644 --- a/addons/missionTesting/functions/fnc_runWeaponsTest.sqf +++ b/addons/missionTesting/functions/fnc_runWeaponsTest.sqf @@ -32,10 +32,10 @@ private _fncGetWeaponInfo = { if (_weaponClassname == "throw") then { _unitText = _unitText + "[Thrown: "; }; - private _config = configfile >> "CfgWeapons" >> _weaponClassname; + private _config = configFile >> "CfgWeapons" >> _weaponClassname; private _muzzles = getArray (_config >> "muzzles"); { - _muzzleConfig = if (_x == "this") then { + private _muzzleConfig = if (_x == "this") then { _config; } else { _config >> _x @@ -99,9 +99,9 @@ private _fncGetWeaponInfo = { if (!(_classname in _handledClasses)) then { _handledClasses pushBack _classname; - private _displayName = getText (configfile >> "CfgVehicles" >> _classname >> "displayName"); - private _xIcon = gettext (configfile >> "CfgVehicles" >> _classname >> "icon"); - private _image = gettext (configfile >> "CfgVehicleIcons" >> _xIcon); + private _displayName = getText (configFile >> "CfgVehicles" >> _classname >> "displayName"); + private _xIcon = getText (configFile >> "CfgVehicles" >> _classname >> "icon"); + private _image = getText (configFile >> "CfgVehicleIcons" >> _xIcon); private _color = ""; private _sideArray = []; diff --git a/addons/missionTesting/script_component.hpp b/addons/missionTesting/script_component.hpp index 650c80a2..41ab79e0 100644 --- a/addons/missionTesting/script_component.hpp +++ b/addons/missionTesting/script_component.hpp @@ -44,9 +44,9 @@ // Report Defines #define S_NEWTEXTLINE _textArray pushBack format -#define S_NEWTEXTLINE_FORMATTEXT _textArray pushBack formattext +#define S_NEWTEXTLINE_FORMATTEXT _textArray pushBack formatText #define S_NEWTEXTLINE_SHORT _textArrayShort pushBack format -#define S_NEWTEXTLINE_FORMATTEXT_SHORT _textArrayShort pushBack formattext +#define S_NEWTEXTLINE_FORMATTEXT_SHORT _textArrayShort pushBack formatText #define MISSION_TYPE_APPLIES_BOTH 0 #define MISSION_TYPE_APPLIES_COOP 1 #define MISSION_TYPE_APPLIES_TVT 2 diff --git a/addons/paradrop/XEH_preInit.sqf b/addons/paradrop/XEH_preInit.sqf index 5f86830e..49303457 100644 --- a/addons/paradrop/XEH_preInit.sqf +++ b/addons/paradrop/XEH_preInit.sqf @@ -14,7 +14,7 @@ GVAR(paradropObjects) = createHashMap; params ["_unit", "_vehicle", "_parachute", "_planeVelocity", ["_delay", 2]]; _unit allowDamage false; - _unit disableCollisionWith _v; + _unit disableCollisionWith _vehicle; moveOut _unit; unassignVehicle _unit; [_unit] allowGetIn false; diff --git a/addons/paradrop/functions/fnc_launch.sqf b/addons/paradrop/functions/fnc_launch.sqf index 287aabad..6931068a 100644 --- a/addons/paradrop/functions/fnc_launch.sqf +++ b/addons/paradrop/functions/fnc_launch.sqf @@ -114,7 +114,7 @@ private _flyInHeight = _paradropInfo get "flyInHeight"; private _targetPos = _dropPos vectorAdd (_directionOfTravel vectorMultiply (300 max (_distanceToPlane * 2))); _targetPos set [2, _flyInHeight]; - _targetPos = ASLtoATL _targetPos; + _targetPos = ASLToATL _targetPos; // ARMA doesnt like doMoves in consecutive frames: we want to have some delay to correct, but allow the AI to make movements without confusion private _lastMoveTime = _x getVariable QGVAR(lastMoveTime); @@ -142,7 +142,7 @@ private _flyInHeight = _paradropInfo get "flyInHeight"; private _targetPos = _dropPos vectorAdd (_directionOfTravel vectorMultiply (_distanceToPlane * 2)); _targetPos set [2, _flyInHeight]; - _targetPos = ASLtoATL _targetPos; + _targetPos = ASLToATL _targetPos; _x doMove _targetPos; (driver _x) doMove _targetPos; diff --git a/addons/radios/functions/fnc_acreGlobalSetGVarsFromString.sqf b/addons/radios/functions/fnc_acreGlobalSetGVarsFromString.sqf index fe993747..9fbb75ab 100644 --- a/addons/radios/functions/fnc_acreGlobalSetGVarsFromString.sqf +++ b/addons/radios/functions/fnc_acreGlobalSetGVarsFromString.sqf @@ -31,6 +31,7 @@ private _paramsOutputs = if (count _paramsArray == 8) then { ] }; +//IGNORE_PRIVATE_WARNING ["_enabled", "_addCommonChannelName", "_addCommonChannelNumber", "_addCommonChannelAllMR", "_addCommonChannelAllLR"]; _paramsArray params _paramsOutputs; missionNamespace setVariable [QGVAR(enabled), [_enabled] call CFUNC(parseBool), true]; diff --git a/addons/radios/functions/fnc_acreSideControlBabelChange.sqf b/addons/radios/functions/fnc_acreSideControlBabelChange.sqf index 1bc5428a..edecc3fb 100644 --- a/addons/radios/functions/fnc_acreSideControlBabelChange.sqf +++ b/addons/radios/functions/fnc_acreSideControlBabelChange.sqf @@ -25,7 +25,7 @@ private _languages = []; TRACE_1("selected languages",_languages); if !(_languages isEqualTo []) then { - switch (lbcurSel _ctrlSide) do { + switch (lbCurSel _ctrlSide) do { case (0): { GVAR(westDefaultLanguages) = _languages; }; case (1): { GVAR(eastDefaultLanguages) = _languages; }; case (2): { GVAR(indyDefaultLanguages) = _languages; }; diff --git a/addons/radios/functions/fnc_acreSideControlLoad.sqf b/addons/radios/functions/fnc_acreSideControlLoad.sqf index 45299521..5dfebafe 100644 --- a/addons/radios/functions/fnc_acreSideControlLoad.sqf +++ b/addons/radios/functions/fnc_acreSideControlLoad.sqf @@ -13,7 +13,7 @@ private _ctrlBabel = _ctrlGroup controlsGroupCtrl BABEL_LIST_IDC; // register event handlers _ctrlBabel ctrlAddEventHandler ["LBSelChanged", {_this spawn FUNC(acreSideControlBabelChange);}]; (_ctrlGroup controlsGroupCtrl CFG_S_CHANNEL_IDC) ctrlAddEventHandler ["KeyUp", {_this call FUNC(acreSideControlChannelEditChange);}]; -(_ctrlGroup controlsGroupCtrl CFG_S_SIDE_IDC) ctrlAddeventHandler ["ToolBoxSelChanged", {_this call FUNC(acreSideControlSideChange);}]; +(_ctrlGroup controlsGroupCtrl CFG_S_SIDE_IDC) ctrlAddEventHandler ["ToolBoxSelChanged", {_this call FUNC(acreSideControlSideChange);}]; (_ctrlGroup controlsGroupCtrl RADIO_CHANNEL_IDC) ctrlAddEventHandler ["LBSelChanged", {_this call FUNC(acreSideControlChannelChange);}]; (_ctrlGroup controlsGroupCtrl RADIO_CHOOSE_IDC) ctrlAddEventHandler ["ToolBoxSelChanged", {_this call FUNC(acreSideControlRadioChange);}]; (_ctrlGroup controlsGroupCtrl CFG_S_SHARED_LR) ctrlAddEventHandler ["ToolBoxSelChanged", {[_this, true] call FUNC(acreSideControlSharedChange);}]; diff --git a/addons/radios/functions/fnc_babelControlLoad.sqf b/addons/radios/functions/fnc_babelControlLoad.sqf index af0bbbae..04dd20dc 100644 --- a/addons/radios/functions/fnc_babelControlLoad.sqf +++ b/addons/radios/functions/fnc_babelControlLoad.sqf @@ -45,6 +45,6 @@ private _selectedLanguages = switch (_side) do { [_ctrlBabel, _selectedLanguages] call FUNC(setBabelList); // register event handlers -_ctrlSet ctrlAddeventHandler ["toolboxselchanged", {_this call FUNC(babelControlSetChange);}]; +_ctrlSet ctrlAddEventHandler ["ToolBoxSelChanged", {_this call FUNC(babelControlSetChange);}]; _ctrlSet lbSetCurSel 0; [_ctrlSet, 0] call FUNC(babelControlSetChange); diff --git a/addons/radios/functions/fnc_channelControlLoad.sqf b/addons/radios/functions/fnc_channelControlLoad.sqf index 818cd26f..9483d856 100644 --- a/addons/radios/functions/fnc_channelControlLoad.sqf +++ b/addons/radios/functions/fnc_channelControlLoad.sqf @@ -43,7 +43,7 @@ if (_ctrlGroup getVariable QGVAR(channelsInvalid) || {count _selected <= 0}) exi [_ctrlGroup, _side] call FUNC(setChannelArrays); // register event handlers -_ctrlSet ctrlAddeventHandler ["ToolBoxSelChanged", {_this call FUNC(channelControlSetChange);}]; +_ctrlSet ctrlAddEventHandler ["ToolBoxSelChanged", {_this call FUNC(channelControlSetChange);}]; _ctrlSet lbSetCurSel 0; [_ctrlSet, 0] call FUNC(channelControlSetChange); diff --git a/addons/recruits/functions/fnc_updateRecruitInfo.sqf b/addons/recruits/functions/fnc_updateRecruitInfo.sqf index 2edbc6d6..2e7d0aaf 100644 --- a/addons/recruits/functions/fnc_updateRecruitInfo.sqf +++ b/addons/recruits/functions/fnc_updateRecruitInfo.sqf @@ -48,18 +48,18 @@ if !(isNull MESSAGE_DISPLAY) then { ["thread", "threads"] select (_recruitCount > 1) ]; MESSAGE_CONTROL ctrlSetPosition [ - 0.88 * safezoneW + safezoneX, - 0.15 * safezoneH + safezoneY, - 0.105 * safezoneW, - (2 + _recruitCount) * 0.017 * safezoneH + 0.88 * safeZoneW + safeZoneX, + 0.15 * safeZoneH + safeZoneY, + 0.105 * safeZoneW, + (2 + _recruitCount) * 0.017 * safeZoneH ]; MESSAGE_CONTROL ctrlCommit 0.25; } else { MESSAGE_CONTROL ctrlSetStructuredText parseText ""; MESSAGE_CONTROL ctrlSetPosition [ - 0.88 * safezoneW + safezoneX, - 0.15 * safezoneH + safezoneY, - 0.105 * safezoneW, + 0.88 * safeZoneW + safeZoneX, + 0.15 * safeZoneH + safeZoneY, + 0.105 * safeZoneW, 0 ]; MESSAGE_CONTROL ctrlCommit 0.25; diff --git a/addons/respawn/functions/fnc_deregisterClientForUpdates.sqf b/addons/respawn/functions/fnc_deregisterClientForUpdates.sqf index 0e4f6394..b51cc450 100644 --- a/addons/respawn/functions/fnc_deregisterClientForUpdates.sqf +++ b/addons/respawn/functions/fnc_deregisterClientForUpdates.sqf @@ -29,5 +29,5 @@ private _index = GVAR(registeredClients) find _clientId; if (_index > -1) then { GVAR(registeredClients) deleteAt _clientId; } else { - WARNING_2("Trying to deregister an unregistered clientID",_clientId,GVAR(registeredClients)); + WARNING_2("Trying to deregister an unregistered clientID [%1-%2]",_clientId,GVAR(registeredClients)); }; diff --git a/addons/respawn/functions/fnc_registerClientForUpdates.sqf b/addons/respawn/functions/fnc_registerClientForUpdates.sqf index be10452c..a7fbaa81 100644 --- a/addons/respawn/functions/fnc_registerClientForUpdates.sqf +++ b/addons/respawn/functions/fnc_registerClientForUpdates.sqf @@ -25,7 +25,7 @@ if !(isServer) exitWith { params [["_clientId", 0, [0]]]; // we don't want to do global commands -if (_clientId < 1) exitWith { WARNING_1("Invalid client ID provided",_clientId); }; +if (_clientId < 1) exitWith { WARNING_1("Invalid client ID [%1] provided",_clientId); }; // register client GVAR(registeredClients) pushBack _clientId; diff --git a/addons/respawn/functions/fnc_slotUnitClient.sqf b/addons/respawn/functions/fnc_slotUnitClient.sqf index 3b7658d7..2612b92b 100644 --- a/addons/respawn/functions/fnc_slotUnitClient.sqf +++ b/addons/respawn/functions/fnc_slotUnitClient.sqf @@ -31,9 +31,8 @@ if (isNull _spectator) then { [[_spectator] call EFUNC(spectate,getName), [_spectator] call BIS_fnc_objectVar] } params ["_unitName", "_unitVar"]; -tvSetText [GROUP_TREE_IDC, _slotPath, format ["%1 - %2", _displayName, _unitName]] +tvSetText [GROUP_TREE_IDC, _slotPath, format ["%1 - %2", _displayName, _unitName]]; tvSetTooltip [GROUP_TREE_IDC, _slotPath, _unitName]; -tvSetTooltip [GROUP_TREE_IDC, _slotPath, _unitName]; // hack, one invocation literary doesn't work for some stupid fucking reason tvSetData [GROUP_TREE_IDC, _slotPath, _unitVar]; if !(isNull ADMIN_RESPAWN) then { diff --git a/addons/respawn/functions/fnc_triggerRespawn.sqf b/addons/respawn/functions/fnc_triggerRespawn.sqf index ed08753d..f98c52fc 100644 --- a/addons/respawn/functions/fnc_triggerRespawn.sqf +++ b/addons/respawn/functions/fnc_triggerRespawn.sqf @@ -70,7 +70,7 @@ private _delay = 0; } forEach _configsArray; if (_configArray isEqualTo []) then { - ERROR_1("Could not find a matching configuration for the given classname",_configData); + ERROR_1("Could not find a matching configuration for the given classname %1",_configData); } else { _configArray params [ "", // config name diff --git a/addons/respawn/functions/fnc_ui_handleAddClick.sqf b/addons/respawn/functions/fnc_ui_handleAddClick.sqf index 06fb9521..ba5244fc 100644 --- a/addons/respawn/functions/fnc_ui_handleAddClick.sqf +++ b/addons/respawn/functions/fnc_ui_handleAddClick.sqf @@ -25,7 +25,7 @@ private _configIndex = lbCurSel ADMIN_CONFIG_COMBO_IDC; "_colorString" ]; -_colorArray = []; +private _colorArray = []; { _colorArray pushBack (parseNumber _x); } forEach (_colorString splitString ","); diff --git a/addons/respawn/functions/fnc_ui_handleAdminLoad.sqf b/addons/respawn/functions/fnc_ui_handleAdminLoad.sqf index 202a271e..b1c4c033 100644 --- a/addons/respawn/functions/fnc_ui_handleAdminLoad.sqf +++ b/addons/respawn/functions/fnc_ui_handleAdminLoad.sqf @@ -40,11 +40,11 @@ params ["_display"]; private _ctrlNoMarkerFrame = _display ctrlCreate ["RscText", -1]; private _ctrlNoMarkerCheckBox = _display ctrlCreate ["RscCheckBox", ADMIN_NOMARKERS_IDC]; -_ctrlNoMarkerFrame ctrlSetPosition [0.62 * safezoneW + safezoneX, 0.22 * safezoneH + safezoneY, 0.11 * safezoneW, 0.05 * safezoneH]; +_ctrlNoMarkerFrame ctrlSetPosition [0.62 * safeZoneW + safeZoneX, 0.22 * safeZoneH + safeZoneY, 0.11 * safeZoneW, 0.05 * safeZoneH]; _ctrlNoMarkerFrame ctrlCommit 0; _ctrlNoMarkerFrame ctrlSetText "No Markers"; -_ctrlNoMarkerCheckBox ctrlSetPosition [0.69 * safezoneW + safezoneX, 0.23 * safezoneH + safezoneY, 0.02 * safezoneW, 4/3 * 0.02 * safezoneW]; +_ctrlNoMarkerCheckBox ctrlSetPosition [0.69 * safeZoneW + safeZoneX, 0.23 * safeZoneH + safeZoneY, 0.02 * safeZoneW, 4/3 * 0.02 * safeZoneW]; _ctrlNoMarkerCheckBox ctrlCommit 0; _ctrlNoMarkerCheckBox ctrlSetTooltip "Secret Respawn"; _ctrlNoMarkerCheckBox cbSetChecked (missionNamespace getVariable [QGVAR(noMarkers), false]); @@ -82,8 +82,8 @@ private _allFactions = createHashMap; if (_count > 0) then { _displayName = _displayName + format [" [%1]", _count]; }; private _index = lbAdd [ADMIN_FACTION_COMBO_IDC, _displayName]; - if (isText (configfile >> "CfgFactionClasses" >> _factionClassname >> "icon")) then { - lbSetPicture [ADMIN_FACTION_COMBO_IDC, _index, getText (configfile >> "CfgFactionClasses" >> _factionClassname >> "icon")]; + if (isText (configFile >> "CfgFactionClasses" >> _factionClassname >> "icon")) then { + lbSetPicture [ADMIN_FACTION_COMBO_IDC, _index, getText (configFile >> "CfgFactionClasses" >> _factionClassname >> "icon")]; }; lbSetData [ADMIN_FACTION_COMBO_IDC, _index, _x]; } forEach (allVariables GVAR(factionsToInfo)); diff --git a/addons/safeStart/XEH_postInit.sqf b/addons/safeStart/XEH_postInit.sqf index 4712827d..ab070efa 100644 --- a/addons/safeStart/XEH_postInit.sqf +++ b/addons/safeStart/XEH_postInit.sqf @@ -17,7 +17,7 @@ if (isServer) then { ] call CBA_fnc_waitUntilAndExecute; }; -if (didJip) then { +if (didJIP) then { [ {time > 1}, { diff --git a/addons/safeStart/functions/fnc_missionTimeWarning.sqf b/addons/safeStart/functions/fnc_missionTimeWarning.sqf index 935d34b5..dfc9d8c0 100644 --- a/addons/safeStart/functions/fnc_missionTimeWarning.sqf +++ b/addons/safeStart/functions/fnc_missionTimeWarning.sqf @@ -51,7 +51,7 @@ TRACE_2("",GVAR(missionstartTime),_missionLength); ] call CBA_fnc_globalEvent; { [QGVAR(curatorHint_TimeKeeper_15min),[],getAssignedCuratorUnit _x] call CBA_fnc_targetEvent; - } forEach allcurators; + } forEach allCurators; //End Warning [ { @@ -64,7 +64,7 @@ TRACE_2("",GVAR(missionstartTime),_missionLength); ] call CBA_fnc_globalEvent; { [QGVAR(curatorHint_TimeKeeper_end),[],getAssignedCuratorUnit _x] call CBA_fnc_targetEvent; - } forEach allcurators; + } forEach allCurators; }, [], 900 @@ -78,7 +78,7 @@ TRACE_2("",GVAR(missionstartTime),_missionLength); // Check if mission end map marker already exists. -private _startTime = daytime; +private _startTime = dayTime; private _endTimeDec = _startTime + (_missionLength / 60); private _endTime = [_endTimeDec] call BIS_fnc_timeToString; diff --git a/addons/serverMonitor/RscDisplayCurator.hpp b/addons/serverMonitor/RscDisplayCurator.hpp index bfca1005..fc9a1c52 100644 --- a/addons/serverMonitor/RscDisplayCurator.hpp +++ b/addons/serverMonitor/RscDisplayCurator.hpp @@ -11,7 +11,7 @@ class RscDisplayCurator { h = "12 * pixelH"; sizeEx = "12 * pixelH"; text = "ACRE Spectator"; - action = QUOTE(_this call FUNC(zeus_toggleAcreSepcator)); + action = QUOTE([] call FUNC(zeus_toggleAcreSepcator)); }; class GVAR(unitCount): RscText { idc = 777551; diff --git a/addons/serverMonitor/XEH_postInit.sqf b/addons/serverMonitor/XEH_postInit.sqf index 6b5dfdd1..7376e3e3 100644 --- a/addons/serverMonitor/XEH_postInit.sqf +++ b/addons/serverMonitor/XEH_postInit.sqf @@ -34,16 +34,16 @@ if (isServer) then { if (GVAR(dataIndex) < 0) exitWith {diag_log text format ["[POTATO] Waiting on index"];}; params ["_args"]; _args params ["_lastTime", "_lastFrame", "_lastFSM"]; - _delta = diag_tickTime - _lastTime; - private _fps = (diag_frameno - _lastFrame) / _delta; + private _delta = diag_tickTime - _lastTime; + private _fps = (diag_frameNo - _lastFrame) / _delta; private _cps = (GVAR(fsmNo) - _lastFSM) / _delta; _args set [0, diag_tickTime]; - _args set [1, diag_frameno]; + _args set [1, diag_frameNo]; _args set [2, GVAR(fsmNo)]; private _localUnits = {local _x} count allUnits; TRACE_3("tick",_localUnits,_fps,_cps); - missionNameSpace setVariable [(format [QGVAR(%1), GVAR(dataIndex)]), [_localUnits, _fps, _cps], true]; + missionNamespace setVariable [(format [QGVAR(%1), GVAR(dataIndex)]), [_localUnits, _fps, _cps], true]; }, 10, [0, 0, 0]] call CBA_fnc_addPerFrameHandler; diff --git a/addons/setVehicleAmmo/functions/fnc_attributeLoad.sqf b/addons/setVehicleAmmo/functions/fnc_attributeLoad.sqf index 9d63b2bb..01cb9201 100644 --- a/addons/setVehicleAmmo/functions/fnc_attributeLoad.sqf +++ b/addons/setVehicleAmmo/functions/fnc_attributeLoad.sqf @@ -79,13 +79,13 @@ private _treeSelChangedEH = { private _magCount = 0; { _x params ["_xPath", "_xMag", "_xCount"]; - if ((_xPath isEqualTo GVAR(selectedTurretPath)) && {_xMag == GVAR(selectedMagazine)}) exitwith { + if ((_xPath isEqualTo GVAR(selectedTurretPath)) && {_xMag == GVAR(selectedMagazine)}) exitWith { _magCount = _xCount; }; } forEach GVAR(defaultLoad); { _x params ["_xPath", "_xMag", "_xCount"]; - if ((_xPath isEqualTo GVAR(selectedTurretPath)) && {_xMag == GVAR(selectedMagazine)}) exitwith { + if ((_xPath isEqualTo GVAR(selectedTurretPath)) && {_xMag == GVAR(selectedMagazine)}) exitWith { _magCount = _magCount + _xCount; }; } forEach GVAR(deltaLoad); @@ -113,7 +113,7 @@ private _sliderChangedEH = { private _defaultCount = 0; { _x params ["_xPath", "_xMag", "_xCount"]; - if ((_xPath isEqualTo GVAR(selectedTurretPath)) && {_xMag == GVAR(selectedMagazine)}) exitwith { + if ((_xPath isEqualTo GVAR(selectedTurretPath)) && {_xMag == GVAR(selectedMagazine)}) exitWith { _defaultCount = _xCount; }; } forEach GVAR(defaultLoad); @@ -122,7 +122,7 @@ private _sliderChangedEH = { private _found = false; { _x params ["_xPath", "_xMag", "_xCount"]; - if ((_xPath isEqualTo GVAR(selectedTurretPath)) && {_xMag == GVAR(selectedMagazine)}) exitwith { + if ((_xPath isEqualTo GVAR(selectedTurretPath)) && {_xMag == GVAR(selectedMagazine)}) exitWith { _found = true; _x set [2, _delta]; }; @@ -153,11 +153,11 @@ private _addWeaponSystem = { if (_weapons isEqualTo []) exitWith {}; { - _magToAdd = _x; - _found = false; + private _magToAdd = _x; + private _found = false; { _x params ["_xPath", "_xMag", "_xCount"]; - if ((_xPath isEqualTo _path) && {_xMag == _magToAdd}) exitwith { + if ((_xPath isEqualTo _path) && {_xMag == _magToAdd}) exitWith { _found = true; _x set [2, (_xCount + 1)]; }; @@ -189,17 +189,17 @@ private _addWeaponSystem = { private _tvIndexWeapon = (_control controlsGroupCtrl 101) tvAdd [[_tvIndexTurret], _x]; (_control controlsGroupCtrl 101) tvExpand [_tvIndexTurret, _tvIndexWeapon]; { - _magToAdd = _x; + private _magToAdd = _x; private _magCount = 0; { _x params ["_xPath", "_xMag", "_xCount"]; - if ((_xPath isEqualTo _path) && {_xMag == _magToAdd}) exitwith { + if ((_xPath isEqualTo _path) && {_xMag == _magToAdd}) exitWith { _magCount = _xCount; }; } forEach GVAR(defaultLoad); { _x params ["_xPath", "_xMag", "_xCount"]; - if ((_xPath isEqualTo _path) && {_xMag == _magToAdd}) exitwith { + if ((_xPath isEqualTo _path) && {_xMag == _magToAdd}) exitWith { _magCount = _magCount + _xCount; }; } forEach GVAR(deltaLoad); @@ -214,7 +214,7 @@ private _addWeaponSystem = { [_config, [-1], "Pilot"] call _addWeaponSystem; { - _turretConfig = [_config, _x] call ace_common_fnc_getTurretConfigPath; + private _turretConfig = [_config, _x] call ace_common_fnc_getTurretConfigPath; TRACE_2("",_x,_turretConfig); [_turretConfig, _x, (format ["Turret %1", _x])] call _addWeaponSystem; } forEach _turrets; diff --git a/addons/setVehicleAmmo/functions/fnc_attributeSave.sqf b/addons/setVehicleAmmo/functions/fnc_attributeSave.sqf index d0f52815..1ac8f535 100644 --- a/addons/setVehicleAmmo/functions/fnc_attributeSave.sqf +++ b/addons/setVehicleAmmo/functions/fnc_attributeSave.sqf @@ -3,9 +3,8 @@ params ["_control"]; TRACE_1("params",_control); -_return = ""; - if ((lbCurSel(_control controlsGroupCtrl 100)) == 0) exitWith { + private _return = ""; TRACE_1("lb set to default",_return); _return }; diff --git a/addons/settings/BW_Settings.inc.sqf b/addons/settings/BW_Settings.inc.sqf index 5fd2db86..627f599c 100644 --- a/addons/settings/BW_Settings.inc.sqf +++ b/addons/settings/BW_Settings.inc.sqf @@ -42,14 +42,14 @@ _settings = [ [QACEGVAR(advanced_fatigue,performanceFactor), 1.4], [QACEGVAR(advanced_fatigue,recoveryFactor), 1.6], -[QACEGVAR(cookoff,enable), 1], +[QACEGVAR(advanced_fatigue,terraingradientfactor), 0.4], +[QACEGVAR(advanced_fatigue,loadfactor), 0.5], [QACEGVAR(cookoff,ammoCookoffDuration), 0.15], [QACEGVAR(dragging,weightCoefficient), 0.25], // allows carry/drag 4x the normal weight [QACEGVAR(finger,enabled), true], [QACEGVAR(finger,maxrange), 7], [QACEGVAR(fortify,timeCostCoefficient), 0], [QACEGVAR(fortify,timeMin), 0], -[QACEGVAR(frag,maxTrack), 5], [QACEGVAR(gforces,enabledFor), 0], [QACEGVAR(goggles,effects), 1], // note: user-setting, we don't force [QACEGVAR(hearing,autoAddEarplugsToUnits), 0], @@ -65,6 +65,7 @@ _settings = [ [QACEGVAR(nightvision,aimDownSightsBlur), 0.25, false, true], [QACEGVAR(overheating,enabled), false], [QACEGVAR(refuel,rate), 10], +[QACEGVAR(refuel,progressduration), 1], [QACEGVAR(respawn,removeDeadBodiesDisconnected), false], [QACEGVAR(towing,addRopeToVehicleInventory), false], // added via potato_assignGear - alwaysAddLandRopes [QACEGVAR(ui,ammoCount), false, true], // Forced because it's User settable @@ -124,19 +125,6 @@ if (["diwako_dui_main"] call ACEFUNC(common,isModLoaded)) then { _settings appen ["diwako_dui_nametags_deadrenderdistance", 3.5, true] // User-Setting ];} else { _skip pushBack "diwako_dui_main" }; - -// ACE Armor Adjuster -if (["AAA"] call ACEFUNC(common,isModLoaded)) then { _settings append [ -["AAA_VAR_MOD_ENABLED", false] -];} else { _skip pushBack "AAA" }; - -// Reeveli Uncon Moaning -if (["Rev_ACE_moaning"] call ACEFUNC(common,isModLoaded)) then { _settings append [ -["Rev_moaning_time", 90], -["rev_moaning_speech", false], -["Rev_moaning_probability", 95] -];} else { _skip pushBack "Rev_ACE_moaning" }; - // LAMBS if (["lambs_danger"] call ACEFUNC(common,isModLoaded)) then { _settings append [ ["lambs_danger_disableAIHideFromTanksAndAircraft", true] @@ -153,7 +141,9 @@ if (["tuncon_unconinfo"] call ACEFUNC(common,isModLoaded)) then { _settings appe ["tuncon_unconinfo_enableshowheartrate", false], ["tuncon_unconinfo_enableshowstablevitals", false], ["tuncon_unconinfo_allownearestunit", false], -["tuncon_unconinfo_nofriendliesnearbytext", "You are near death."] +["tuncon_unconinfo_nofriendliesnearbytext", "You are near death."], +["tuncon_unconinfo_enableshowdetailedtreatment", false], +["tuncon_unconinfo_unconinfonearestunitdistance", 10] ];} else { _skip pushBack "tuncon_unconinfo" }; if (["OCAP_main"] call ACEFUNC(common,isModLoaded)) then { _settings append [ diff --git a/addons/settings/XEH_displayGameOptions.sqf b/addons/settings/XEH_displayGameOptions.sqf index 683d9423..20c88b61 100644 --- a/addons/settings/XEH_displayGameOptions.sqf +++ b/addons/settings/XEH_displayGameOptions.sqf @@ -11,7 +11,7 @@ params ["_display"]; TRACE_1("",_display); -if (!is3den) exitWith {}; +if (!is3DEN) exitWith {}; private _infoBar = _display ctrlCreate ["RscText", -1]; _infoBar ctrlSetBackgroundColor [1,0,0,0.25]; diff --git a/addons/settings/XEH_preInit.sqf b/addons/settings/XEH_preInit.sqf index c625bc47..d9c1ffbd 100644 --- a/addons/settings/XEH_preInit.sqf +++ b/addons/settings/XEH_preInit.sqf @@ -36,8 +36,18 @@ if (isServer) then { }; } forEach _settings; + // Warn if old mission had set AAA set via mission settings + private _missionSettingsHash = getMissionConfigValue "cba_settings_hash"; + if ([_missionSettingsHash] call CBA_fnc_isHash) then { + private _aaa = [_missionSettingsHash, "aaa_var_mod_enabled"] call CBA_fnc_hashGet; + if (!isNil "_aaa") then { + private _log = format ["Warning AAA was set to %1", _aaa]; + ["potato_adminMsg", [_log, "Mission"]] call CBA_fnc_globalEvent; + }; + }; + // report specific medical settings - private _log = format ["[AAA=%1] [aDmgPass=%2]", AAA_VAR_MOD_ENABLED, ace_medical_engine_damagePassThroughEffect toFixed 2]; + private _log = format ["[AMA=%1] [aDmgPass=%2]", potato_armor_modifier_ace, ace_medical_engine_damagePassThroughEffect toFixed 2]; ["potato_adminMsg", [_log, "Mission"]] call CBA_fnc_globalEvent; }, [_settings], 4] call CBA_fnc_waitAndExecute; diff --git a/addons/spectate/functions/fnc_toggleUI.sqf b/addons/spectate/functions/fnc_toggleUI.sqf index c729c6c1..98f5fb2c 100644 --- a/addons/spectate/functions/fnc_toggleUI.sqf +++ b/addons/spectate/functions/fnc_toggleUI.sqf @@ -22,21 +22,21 @@ GVAR(uiVisible) = !GVAR(uiVisible); if (GVAR(uiVisible)) then { FOCUS_GROUP ctrlSetFade 0; CAM_GROUP ctrlSetFade 0; - LIST ctrlSetFade 0.8; + LIST_CTR ctrlSetFade 0.8; [GVAR(respawnOpen)] call FUNC(setRespawn); showChat true; - playsound "HintCollapse"; + playSound "HintCollapse"; } else { FOCUS_GROUP ctrlSetFade 1; CAM_GROUP ctrlSetFade 1; - LIST ctrlSetFade 1; + LIST_CTR ctrlSetFade 1; [false] call FUNC(setRespawn); showChat false; - playsound "HintExpand"; + playSound "HintExpand"; }; FOCUS_GROUP ctrlCommit 0.25; CAM_GROUP ctrlCommit 0.25; -LIST ctrlCommit 0.25; +LIST_CTR ctrlCommit 0.25; diff --git a/addons/spectate/functions/fnc_toggleVisionMode.sqf b/addons/spectate/functions/fnc_toggleVisionMode.sqf index 393ca1dc..140b2681 100644 --- a/addons/spectate/functions/fnc_toggleVisionMode.sqf +++ b/addons/spectate/functions/fnc_toggleVisionMode.sqf @@ -23,27 +23,27 @@ if (GVAR(currentCamIndex) != FIRST_PERSON) then { if (GVAR(visionModeIndex) == 0) exitWith { // normal vision camUseNVG false; - false setCamUseTi 0; + false setCamUseTI 0; playSound "RscDisplayCurator_visionMode"; }; if (GVAR(visionModeIndex) == 1) exitWith { // night vision camUseNVG true; - false setCamUseTi 0; + false setCamUseTI 0; playSound "RscDisplayCurator_visionMode"; }; if (GVAR(visionModeIndex) == 2) exitWith { // white hot camUseNVG false; - true setCamUseTi 0; + true setCamUseTI 0; playSound "RscDisplayCurator_visionMode"; }; if (GVAR(visionModeIndex) == 3) exitWith { // black hot camUseNVG false; - true setCamUseTi 1; + true setCamUseTI 1; playSound "RscDisplayCurator_visionMode"; }; if (GVAR(visionModeIndex) == 4) exitWith { // super thermals camUseNVG false; - true setCamUseTi 7; + true setCamUseTI 7; playSound "RscDisplayCurator_visionMode"; }; }; diff --git a/addons/spectate/functions/fnc_transferZeus.sqf b/addons/spectate/functions/fnc_transferZeus.sqf index 6048a098..7ab01590 100644 --- a/addons/spectate/functions/fnc_transferZeus.sqf +++ b/addons/spectate/functions/fnc_transferZeus.sqf @@ -22,7 +22,7 @@ params [ ["_zeusModule", objNull, [objNull]] ]; -if (isNull _newUnit || isNull _zeusModule) exitWith { WARNING_2("Null parameters",_newUnit,_zeusModule); }; +if (isNull _newUnit || isNull _zeusModule) exitWith { WARNING_2("Null parameters [%1-%2]",_newUnit,_zeusModule); }; unassignCurator _zeusModule; waitUntil {isNull (getAssignedCuratorUnit _zeusModule)}; diff --git a/addons/spectate/functions/fnc_ui_changeCamera.sqf b/addons/spectate/functions/fnc_ui_changeCamera.sqf index 1889686e..a16ab838 100644 --- a/addons/spectate/functions/fnc_ui_changeCamera.sqf +++ b/addons/spectate/functions/fnc_ui_changeCamera.sqf @@ -28,7 +28,7 @@ if (!isNull GVAR(camTarget) || _index == FREE_CAMERA) then { // Reset vision mode camUseNVG false; - false setCamUseTi 0; + false setCamUseTI 0; GVAR(visionModeIndex) = 0; [] call FUNC(resetTarget); diff --git a/addons/spectate/functions/fnc_ui_handleKeyDown.sqf b/addons/spectate/functions/fnc_ui_handleKeyDown.sqf index 0682e4ed..68240d7f 100644 --- a/addons/spectate/functions/fnc_ui_handleKeyDown.sqf +++ b/addons/spectate/functions/fnc_ui_handleKeyDown.sqf @@ -93,13 +93,13 @@ if (inputAction "headlights" > 0) exitWith { { deleteVehicle _x; } forEach GVAR(camLights); GVAR(camLights) = []; } else { - private _cameraLight = "#lightpoint" createvehicleLocal getPosASL GVAR(cam); + private _cameraLight = "#lightpoint" createVehicleLocal getPosASL GVAR(cam); _cameraLight setLightBrightness 2; _cameraLight setLightAmbient [1,1,1]; _cameraLight setLightColor [0,0,0]; _cameraLight lightAttachObject [GVAR(cam), [0,0,0]]; - private _pointerLight = "#lightpoint" createvehicleLocal getPosASL GVAR(cam); + private _pointerLight = "#lightpoint" createVehicleLocal getPosASL GVAR(cam); _pointerLight setLightBrightness 1; _pointerLight setLightAmbient [1,1,1]; _pointerLight setLightColor [0,0,0]; diff --git a/addons/spectate/functions/fnc_ui_handleListClick.sqf b/addons/spectate/functions/fnc_ui_handleListClick.sqf index 73c81b40..f65f0c84 100644 --- a/addons/spectate/functions/fnc_ui_handleListClick.sqf +++ b/addons/spectate/functions/fnc_ui_handleListClick.sqf @@ -21,7 +21,7 @@ TRACE_1("Params",_this); params ["_isSingleClick"]; private _handled = false; -private _object = missionNamespace getVariable [LIST tvData (tvCurSel LIST), objNull]; +private _object = missionNamespace getVariable [LIST_CTR tvData (tvCurSel LIST_CTR), objNull]; if !(isNull _object) then { @@ -30,7 +30,7 @@ if !(isNull _object) then { if (_isSingleClick) then { if (_object != GVAR(camTarget)) then { [_object] call FUNC(setFocus); - playsound "ReadoutClick"; + playSound "ReadoutClick"; _handled = true; }; @@ -42,7 +42,7 @@ if !(isNull _object) then { GVAR(cam) setPosASL _pos; [_object] call FUNC(setFocus); - playsound "ReadoutClick"; + playSound "ReadoutClick"; _handled = true; }; diff --git a/addons/spectate/functions/fnc_ui_handleMapClick.sqf b/addons/spectate/functions/fnc_ui_handleMapClick.sqf index 840f7a22..562a3456 100644 --- a/addons/spectate/functions/fnc_ui_handleMapClick.sqf +++ b/addons/spectate/functions/fnc_ui_handleMapClick.sqf @@ -25,7 +25,7 @@ params ["_map", "", "_x", "_y"]; if (isNull GVAR(mapHighlighted)) then { if !(isNull GVAR(camTarget)) then { - playsound "ReadoutHideClick1"; + playSound "ReadoutHideClick1"; }; private _pos = _map ctrlMapScreenToWorld [_x, _y]; @@ -33,7 +33,7 @@ if (isNull GVAR(mapHighlighted)) then { GVAR(cam) setPosASL _pos; } else { - playsound "ReadoutClick"; + playSound "ReadoutClick"; }; [GVAR(mapHighlighted)] call FUNC(setFocus); diff --git a/addons/spectate/functions/fnc_ui_handleMapDraw.sqf b/addons/spectate/functions/fnc_ui_handleMapDraw.sqf index 4b3105f4..faffa4ca 100644 --- a/addons/spectate/functions/fnc_ui_handleMapDraw.sqf +++ b/addons/spectate/functions/fnc_ui_handleMapDraw.sqf @@ -26,7 +26,7 @@ BEGIN_COUNTER(drawMap); params ["_map"]; // piggy back to update timer -TIMER ctrlSetText format ["%1 (+%2)", [daytime * 3600] call CFUNC(getTimeText), [] call CFUNC(getTimeText)]; +TIMER ctrlSetText format ["%1 (+%2)", [dayTime * 3600] call CFUNC(getTimeText), [] call CFUNC(getTimeText)]; // Track nearest unit private _loc = _map ctrlMapScreenToWorld getMousePosition; diff --git a/addons/spectate/functions/fnc_ui_handleMouseDown.sqf b/addons/spectate/functions/fnc_ui_handleMouseDown.sqf index 68fc44a4..08123802 100644 --- a/addons/spectate/functions/fnc_ui_handleMouseDown.sqf +++ b/addons/spectate/functions/fnc_ui_handleMouseDown.sqf @@ -24,10 +24,10 @@ params ["", "_button"]; if (_button == 0) exitWith { if (isNull GVAR(cursorObject)) then { if (!isNull GVAR(camTarget)) then { - playsound "ReadoutHideClick1"; + playSound "ReadoutHideClick1"; }; } else { - playsound "ReadoutClick"; + playSound "ReadoutClick"; setMousePosition [0.5, 0.5]; }; [GVAR(cursorObject)] call FUNC(setFocus); diff --git a/addons/spectate/functions/fnc_ui_showList.sqf b/addons/spectate/functions/fnc_ui_showList.sqf index 03a6aa0d..0dd002ac 100644 --- a/addons/spectate/functions/fnc_ui_showList.sqf +++ b/addons/spectate/functions/fnc_ui_showList.sqf @@ -22,14 +22,14 @@ params ["_showList"]; if (GVAR(uiVisible)) then { if (_showList) then { - LIST ctrlSetBackgroundColor [0,0,0,0.75]; - LIST ctrlSetFade 0.0; - ctrlSetFocus LIST; + LIST_CTR ctrlSetBackgroundColor [0,0,0,0.75]; + LIST_CTR ctrlSetFade 0.0; + ctrlSetFocus LIST_CTR; GVAR(cam) camCommand "manual off"; showChat false; } else { - LIST ctrlSetBackgroundColor [0,0,0,0]; - LIST ctrlSetFade 0.8; + LIST_CTR ctrlSetBackgroundColor [0,0,0,0]; + LIST_CTR ctrlSetFade 0.8; ctrlSetFocus MOUSE; if (GVAR(currentCamIndex) == FREE_CAMERA) then { GVAR(cam) camCommand "manual on"; @@ -37,5 +37,5 @@ if (GVAR(uiVisible)) then { showChat true; }; - LIST ctrlCommit 0.2; + LIST_CTR ctrlCommit 0.2; }; diff --git a/addons/spectate/functions/fnc_updateInfo.sqf b/addons/spectate/functions/fnc_updateInfo.sqf index 12599aaa..d6a4a794 100644 --- a/addons/spectate/functions/fnc_updateInfo.sqf +++ b/addons/spectate/functions/fnc_updateInfo.sqf @@ -19,24 +19,35 @@ TRACE_1("updateInfo",_this); if (GVAR(uiVisible) && GVAR(showInfo)) then { if (isNull GVAR(camTarget)) then { - [player getVariable [QGVAR(oldUnit), player], acex_killTracker_outputText] + private _player = player getVariable [QGVAR(oldUnit), player]; + [_player, acex_killTracker_outputText, [_player] call FUNC(getName)] } else { - [GVAR(camTarget), GVAR(camTarget) getVariable [QACEGVAR(killtracker,output), "None"]] - } params ["_unit", "_killFeed"]; - TRACE_1("Kill Feed",_killFeed); + if (GVAR(camTarget) isKindOf "CaManBase") then { + [GVAR(camTarget), GVAR(camTarget) getVariable [QACEGVAR(killtracker,output), "None"], GVAR(camTarget) call FUNC(getName)] + } else { + private _vicName = getText ((configOf GVAR(camTarget)) >> "displayName"); + private _commander = effectiveCommander GVAR(camTarget); + if (!isNull _commander && {isPlayer _commander}) then { + private _commanderName = [_commander] call FUNC(getName); + _vicName = _vicName + format [" [%1]", _commanderName]; + }; + [GVAR(camTarget), _commander getVariable [QACEGVAR(killtracker,output), "None"], _vicName] + } + } params ["_unit", "_killFeed", "_name"]; + TRACE_3("Kill Feed",typeOf _unit,count _killFeed,_name); if !(ctrlShown FOCUS_GROUP) then { FOCUS_GROUP ctrlShow true; }; - FOCUS_NAME ctrlSetText ([_unit] call FUNC(getName)); - FOCUS_KILL ctrlSetStructuredText parseText format ["%1%2%3", "", _killFeed, ""]; + FOCUS_NAME ctrlSetText _name; + FOCUS_KILL ctrlSetStructuredText parseText format ["%1%2%3", "", _killFeed, ""]; private _killPos = ctrlPosition FOCUS_KILL; _killPos set [3, ctrlTextHeight FOCUS_KILL]; FOCUS_KILL ctrlSetPosition _killPos; FOCUS_KILL ctrlCommit 0; - if (vehicle _unit == _unit) then { + if (_unit isKindOf "CaManBase") then { FOCUS_UNIT ctrlSetText ([_unit] call ACEFUNC(common,getVehicleIcon)); FOCUS_UNIT ctrlShow true; @@ -55,33 +66,19 @@ if (GVAR(uiVisible) && GVAR(showInfo)) then { ]; private _wounds = _unit getVariable [QACEGVAR(medical,openWounds), []]; - - if (_wounds isEqualType []) then { + { + private _selectionIndex = ["head", "body", "leftarm", "rightarm", "leftleg", "rightleg"] find _x; + private _woundsOnPart = _y; { - _x params ["", "_selectionIndex", "_amountOf", "_x4"]; + _x params ["", "_amountOf", "_x4"]; // Find how much this bodypart is bleeding if (_amountOf > 0) then { private _bodySelection = _bodyInfo select _selectionIndex; _bodySelection set [0, true]; _bodySelection set [1, (_bodySelection select 1) + (20 * _x4 * _amountOf)]; }; - } forEach _wounds; - } else { - // hashmaps for ace 3.16.0 - { - private _selectionIndex = ["head", "body", "leftarm", "rightarm", "leftleg", "rightleg"] find _x; - private _woundsOnPart = _y; - { - _x params ["", "_amountOf", "_x4"]; - // Find how much this bodypart is bleeding - if (_amountOf > 0) then { - private _bodySelection = _bodyInfo select _selectionIndex; - _bodySelection set [0, true]; - _bodySelection set [1, (_bodySelection select 1) + (20 * _x4 * _amountOf)]; - }; - } forEach _woundsOnPart; - } forEach _wounds; - }; + } forEach _woundsOnPart; + } forEach _wounds; { _x params ["_damaged", "_bloodLoss", "_idc"]; @@ -97,8 +94,7 @@ if (GVAR(uiVisible) && GVAR(showInfo)) then { } else { (OVERLAY displayCtrl _idc) ctrlSetTextColor [1, 1, 1, 1]; }; - nil - } count _bodyInfo; // count used here for speed, ensure nil above this line + } forEach _bodyInfo; private _bloodVol = _unit getVariable [QACEGVAR(medical,bloodVolume), 6]; private _pain = _unit getVariable [QACEGVAR(medical,pain), 0]; diff --git a/addons/spectate/functions/fnc_updateList.sqf b/addons/spectate/functions/fnc_updateList.sqf index 9a041595..2cb026e0 100644 --- a/addons/spectate/functions/fnc_updateList.sqf +++ b/addons/spectate/functions/fnc_updateList.sqf @@ -64,19 +64,19 @@ TRACE_1("New List:",_newList); if !(GVAR(curList) isEqualTo _newList) then { // Remove groups/units that are no longer there - for "_sideIndex" from (LIST tvCount []) to 1 step -1 do { - for "_groupIndex" from (LIST tvCount [_sideIndex - 1]) to 1 step -1 do { - for "_unitIndex" from (LIST tvCount [_sideIndex - 1, _groupIndex - 1]) to 1 step -1 do { - private _lookup = _newUnits find (LIST tvData [_sideIndex - 1, _groupIndex - 1, _unitIndex - 1]); + for "_sideIndex" from (LIST_CTR tvCount []) to 1 step -1 do { + for "_groupIndex" from (LIST_CTR tvCount [_sideIndex - 1]) to 1 step -1 do { + for "_unitIndex" from (LIST_CTR tvCount [_sideIndex - 1, _groupIndex - 1]) to 1 step -1 do { + private _lookup = _newUnits find (LIST_CTR tvData [_sideIndex - 1, _groupIndex - 1, _unitIndex - 1]); if (_lookup < 0) then { - LIST tvDelete [_sideIndex - 1, _groupIndex - 1, _unitIndex - 1]; + LIST_CTR tvDelete [_sideIndex - 1, _groupIndex - 1, _unitIndex - 1]; } else { _newUnits deleteAt _lookup; }; }; - private _lookup = _newGroups find (LIST tvData [_sideIndex - 1, _groupIndex - 1]); + private _lookup = _newGroups find (LIST_CTR tvData [_sideIndex - 1, _groupIndex - 1]); if (_lookup < 0) then { - LIST tvDelete [_sideIndex - 1, _groupIndex - 1]; + LIST_CTR tvDelete [_sideIndex - 1, _groupIndex - 1]; } else { _newGroups deleteAt _lookup; }; @@ -87,12 +87,12 @@ if !(GVAR(curList) isEqualTo _newList) then { private _groupDataToPathHash = [[], []]; private _unitDataToPathHash = [[], []]; - for "_sideIndex" from 0 to ((LIST tvCount []) - 1) do { - for "_groupIndex" from 0 to ((LIST tvCount [_sideIndex]) - 1) do { - (_groupDataToPathHash select 0) pushBack (LIST tvData [_sideIndex, _groupIndex]); + for "_sideIndex" from 0 to ((LIST_CTR tvCount []) - 1) do { + for "_groupIndex" from 0 to ((LIST_CTR tvCount [_sideIndex]) - 1) do { + (_groupDataToPathHash select 0) pushBack (LIST_CTR tvData [_sideIndex, _groupIndex]); (_groupDataToPathHash select 1) pushBack [_sideIndex, _groupIndex]; - for "_unitIndex" from 0 to ((LIST tvCount [_sideIndex, _groupIndex]) - 1) do { - (_unitDataToPathHash select 0) pushBack (LIST tvData [_sideIndex, _groupIndex, _unitIndex]); + for "_unitIndex" from 0 to ((LIST_CTR tvCount [_sideIndex, _groupIndex]) - 1) do { + (_unitDataToPathHash select 0) pushBack (LIST_CTR tvData [_sideIndex, _groupIndex, _unitIndex]); (_unitDataToPathHash select 1) pushBack [_sideIndex, _groupIndex, _unitIndex]; }; }; @@ -108,12 +108,12 @@ if !(GVAR(curList) isEqualTo _newList) then { [0.7,0.6,0,1] }; - if (LIST tvCount [] == _sideIndex) then { - LIST tvAdd [[], _sideTitle]; - LIST tvSetData [[_sideIndex], _sideStr]; + if (LIST_CTR tvCount [] == _sideIndex) then { + LIST_CTR tvAdd [[], _sideTitle]; + LIST_CTR tvSetData [[_sideIndex], _sideStr]; }; - LIST tvExpand [_sideIndex]; + LIST_CTR tvExpand [_sideIndex]; { _x params ["_groupInfo", "_nestedUnitData"]; @@ -122,43 +122,43 @@ if !(GVAR(curList) isEqualTo _newList) then { private _groupIndex = -1; private _lookup = (_groupDataToPathHash select 0) find _groupStr; if (_lookup < 0) then { - _groupIndex = LIST tvAdd [[_sideIndex], _groupId]; - LIST tvSetData [[_sideIndex, _groupIndex], _groupStr]; - LIST tvSetTooltip [[_sideIndex, _groupIndex], _groupId]; + _groupIndex = LIST_CTR tvAdd [[_sideIndex], _groupId]; + LIST_CTR tvSetData [[_sideIndex, _groupIndex], _groupStr]; + LIST_CTR tvSetTooltip [[_sideIndex, _groupIndex], _groupId]; if (_group getVariable [QEGVAR(markers,addMarker), false]) then { - LIST tvSetPicture [[_sideIndex, _groupIndex], _group getVariable [QEGVAR(markers,markerTexture), ""]]; - LIST tvSetPictureColor [[_sideIndex, _groupIndex], _group getVariable [QEGVAR(markers,markerColor), [0,0,0,0]]]; - LIST tvSetPictureColorSelected [[_sideIndex, _groupIndex], _group getVariable [QEGVAR(markers,markerColor), [0,0,0,0]]]; + LIST_CTR tvSetPicture [[_sideIndex, _groupIndex], _group getVariable [QEGVAR(markers,markerTexture), ""]]; + LIST_CTR tvSetPictureColor [[_sideIndex, _groupIndex], _group getVariable [QEGVAR(markers,markerColor), [0,0,0,0]]]; + LIST_CTR tvSetPictureColorSelected [[_sideIndex, _groupIndex], _group getVariable [QEGVAR(markers,markerColor), [0,0,0,0]]]; } else { private _leader = leader _group; if (_leader getVariable [QEGVAR(markers,addMarker), false]) then { - LIST tvSetPicture [[_sideIndex, _groupIndex], _leader getVariable [QEGVAR(markers,markerTexture), ""]]; - LIST tvSetPictureColor [[_sideIndex, _groupIndex], _leader getVariable [QEGVAR(markers,markerColor), [0,0,0,0]]]; - LIST tvSetPictureColorSelected [[_sideIndex, _groupIndex], _leader getVariable [QEGVAR(markers,markerColor), [0,0,0,0]]]; + LIST_CTR tvSetPicture [[_sideIndex, _groupIndex], _leader getVariable [QEGVAR(markers,markerTexture), ""]]; + LIST_CTR tvSetPictureColor [[_sideIndex, _groupIndex], _leader getVariable [QEGVAR(markers,markerColor), [0,0,0,0]]]; + LIST_CTR tvSetPictureColorSelected [[_sideIndex, _groupIndex], _leader getVariable [QEGVAR(markers,markerColor), [0,0,0,0]]]; }; }; - LIST tvExpand [_sideIndex, _groupIndex]; + LIST_CTR tvExpand [_sideIndex, _groupIndex]; } else { // pop data out of hash to improve later lookups (_groupDataToPathHash select 0) deleteAt _lookup; private _path = (_groupDataToPathHash select 1) deleteAt _lookup; _groupIndex = _path select 1; - LIST tvSetText [_path, _groupId]; - LIST tvSetTooltip [_path, _groupId]; + LIST_CTR tvSetText [_path, _groupId]; + LIST_CTR tvSetTooltip [_path, _groupId]; if (_group getVariable [QEGVAR(markers,addMarker), false]) then { - LIST tvSetPicture [[_sideIndex, _groupIndex], _group getVariable [QEGVAR(markers,markerTexture), ""]]; - LIST tvSetPictureColor [[_sideIndex, _groupIndex], _group getVariable [QEGVAR(markers,markerColor), [0,0,0,0]]]; - LIST tvSetPictureColorSelected [[_sideIndex, _groupIndex], _group getVariable [QEGVAR(markers,markerColor), [0,0,0,0]]]; + LIST_CTR tvSetPicture [[_sideIndex, _groupIndex], _group getVariable [QEGVAR(markers,markerTexture), ""]]; + LIST_CTR tvSetPictureColor [[_sideIndex, _groupIndex], _group getVariable [QEGVAR(markers,markerColor), [0,0,0,0]]]; + LIST_CTR tvSetPictureColorSelected [[_sideIndex, _groupIndex], _group getVariable [QEGVAR(markers,markerColor), [0,0,0,0]]]; } else { private _leader = leader _group; if (_leader getVariable [QEGVAR(markers,addMarker), false]) then { - LIST tvSetPicture [[_sideIndex, _groupIndex], _leader getVariable [QEGVAR(markers,markerTexture), ""]]; - LIST tvSetPictureColor [[_sideIndex, _groupIndex], _leader getVariable [QEGVAR(markers,markerColor), [0,0,0,0]]]; - LIST tvSetPictureColorSelected [[_sideIndex, _groupIndex], _leader getVariable [QEGVAR(markers,markerColor), [0,0,0,0]]]; + LIST_CTR tvSetPicture [[_sideIndex, _groupIndex], _leader getVariable [QEGVAR(markers,markerTexture), ""]]; + LIST_CTR tvSetPictureColor [[_sideIndex, _groupIndex], _leader getVariable [QEGVAR(markers,markerColor), [0,0,0,0]]]; + LIST_CTR tvSetPictureColorSelected [[_sideIndex, _groupIndex], _leader getVariable [QEGVAR(markers,markerColor), [0,0,0,0]]]; }; }; }; @@ -176,19 +176,19 @@ if !(GVAR(curList) isEqualTo _newList) then { private _lookup = (_unitDataToPathHash select 0) find ([_unit] call BIS_fnc_objectVar); if (_lookup < 0) then { - private _unitIndex = LIST tvAdd [[_sideIndex, _groupIndex], _name]; - LIST tvSetData [[_sideIndex, _groupIndex, _unitIndex], [_unit] call BIS_fnc_objectVar]; - LIST tvSetPicture [[_sideIndex, _groupIndex, _unitIndex], _texture]; - LIST tvSetPictureColor [[_sideIndex, _groupIndex, _unitIndex], _unitColor]; - LIST tvSetTooltip [[_sideIndex, _groupIndex, _unitIndex], _tooltip]; + private _unitIndex = LIST_CTR tvAdd [[_sideIndex, _groupIndex], _name]; + LIST_CTR tvSetData [[_sideIndex, _groupIndex, _unitIndex], [_unit] call BIS_fnc_objectVar]; + LIST_CTR tvSetPicture [[_sideIndex, _groupIndex, _unitIndex], _texture]; + LIST_CTR tvSetPictureColor [[_sideIndex, _groupIndex, _unitIndex], _unitColor]; + LIST_CTR tvSetTooltip [[_sideIndex, _groupIndex, _unitIndex], _tooltip]; } else { // pop data out of hash to improve later lookups (_unitDataToPathHash select 0) deleteAt _lookup; private _path = (_unitDataToPathHash select 1) deleteAt _lookup; - LIST tvSetText [_path, _name]; - LIST tvSetPicture [_path, _texture]; - LIST tvSetPictureColor [_path, _unitColor]; - LIST tvSetTooltip [_path, _tooltip]; + LIST_CTR tvSetText [_path, _name]; + LIST_CTR tvSetPicture [_path, _texture]; + LIST_CTR tvSetPictureColor [_path, _unitColor]; + LIST_CTR tvSetTooltip [_path, _tooltip]; }; nil } count _nestedUnitData; // count used for speed, ensure nil above this line diff --git a/addons/spectate/functions/fnc_updateListFocus.sqf b/addons/spectate/functions/fnc_updateListFocus.sqf index 7df143a8..644ed5d3 100644 --- a/addons/spectate/functions/fnc_updateListFocus.sqf +++ b/addons/spectate/functions/fnc_updateListFocus.sqf @@ -18,5 +18,5 @@ TRACE_1("Params",_this); if (GVAR(uiVisible)) then { - LIST tvSetCurSel ([[GVAR(camTarget)] call BIS_fnc_objectVar, LIST_IDC] call FUNC(findPathInList)); + LIST_CTR tvSetCurSel ([[GVAR(camTarget)] call BIS_fnc_objectVar, LIST_IDC] call FUNC(findPathInList)); }; diff --git a/addons/spectate/script_component.hpp b/addons/spectate/script_component.hpp index e28c6822..c3164f36 100644 --- a/addons/spectate/script_component.hpp +++ b/addons/spectate/script_component.hpp @@ -58,7 +58,7 @@ #define MENU (OVERLAY displayCtrl MENU_IDC) #define LIST_IDC 769790 -#define LIST (OVERLAY displayCtrl LIST_IDC) +#define LIST_CTR (OVERLAY displayCtrl LIST_IDC) #define COMPASS_IDC 769795 #define COMPASS (OVERLAY displayCtrl COMPASS_IDC) diff --git a/addons/zeusFactory/functions/fnc_addVehiclesToArray.sqf b/addons/zeusFactory/functions/fnc_addVehiclesToArray.sqf index c36730d5..6e597585 100644 --- a/addons/zeusFactory/functions/fnc_addVehiclesToArray.sqf +++ b/addons/zeusFactory/functions/fnc_addVehiclesToArray.sqf @@ -44,7 +44,7 @@ private _zeusAutoVics = missionNamespace getVariable [QEGVAR(zeusHC,vehicleList) if (_type isKindOf "Helicopter") exitWith { // note: pularality (helicopters/Helicopter)s if (_lookup == "helicopters") then { _storageArray pushBack _type; }; }; - if ((_type isKindOf "Wheeled_APC") || {_type IsKindOf "Wheeled_APC_F"} || {_type IsKindOf "Tank"}) exitWith { + if ((_type isKindOf "Wheeled_APC") || {_type isKindOf "Wheeled_APC_F"} || {_type isKindOf "Tank"}) exitWith { if (_lookup == "apcs") then { _storageArray pushBack _type; }; }; if (_lookup == "cars") then { _storageArray pushBack _type; }; diff --git a/addons/zeusFactory/functions/fnc_ai_vehicleFollow.sqf b/addons/zeusFactory/functions/fnc_ai_vehicleFollow.sqf index 86870e2d..c60072e3 100644 --- a/addons/zeusFactory/functions/fnc_ai_vehicleFollow.sqf +++ b/addons/zeusFactory/functions/fnc_ai_vehicleFollow.sqf @@ -17,14 +17,14 @@ private _dummy = "Sign_Arrow_Large_Cyan_F" createVehicle (getPos _vehicle); while {(alive _vehicle) && {alive _commander} && {(vehicle _commander) == _vehicle} && {!isNull _followGroup}} do { private _leaderPos = getPos leader _followGroup; - if ((_leaderPos distance2d _vehicle) > 50) then { - TRACE_2("moving",_vehicle,_leaderPos distance2d _vehicle); + if ((_leaderPos distance2D _vehicle) > 50) then { + TRACE_2("moving",_vehicle,_leaderPos distance2D _vehicle); private _angle = (leader _followGroup) getDir _vehicle; _commander doMove ((leader _followGroup) getPos [50, _angle]); #ifdef DEBUG_MODE_FULL _dummy setPos ((leader _followGroup) getPos [50, _angle]); } else { - TRACE_2("Holding",_vehicle,_leaderPos distance2d _vehicle); + TRACE_2("Holding",_vehicle,_leaderPos distance2D _vehicle); #endif }; sleep 10; diff --git a/addons/zeusFactory/functions/fnc_createGroup.sqf b/addons/zeusFactory/functions/fnc_createGroup.sqf index 0b748bf7..56a8e32a 100644 --- a/addons/zeusFactory/functions/fnc_createGroup.sqf +++ b/addons/zeusFactory/functions/fnc_createGroup.sqf @@ -50,7 +50,7 @@ if ((isNull _group) || {isNull leader _group}) exitWith { private _factoryID = _factoryLogic getVariable [QGVAR(factoryID), -1]; private _groupCount = _factoryLogic getVariable [QGVAR(groupCount), 0]; _groupCount = _groupCount + 1; -_group setGroupIDGlobal [format ["Factory %1-%2", _factoryID, _groupCount]]; +_group setGroupIdGlobal [format ["Factory %1-%2", _factoryID, _groupCount]]; _factoryLogic setVariable [QGVAR(groupCount), _groupCount]; diff --git a/addons/zeusFactory/functions/fnc_module_place.sqf b/addons/zeusFactory/functions/fnc_module_place.sqf index 063d71f2..7e6c7e90 100644 --- a/addons/zeusFactory/functions/fnc_module_place.sqf +++ b/addons/zeusFactory/functions/fnc_module_place.sqf @@ -37,7 +37,7 @@ if (_factories isEqualTo []) exitWith { { // Basic load balancing: - private _effectiveDistance = (_x distance2d _placeLogic) + 1000 * (count (_x getVariable [QGVAR(dispatchQueue), []])); + private _effectiveDistance = (_x distance2D _placeLogic) + 1000 * (count (_x getVariable [QGVAR(dispatchQueue), []])); if (_effectiveDistance < _closestRange) then { _closestRange = _effectiveDistance; diff --git a/addons/zeusFactory/functions/fnc_zeusAttributes_factory.sqf b/addons/zeusFactory/functions/fnc_zeusAttributes_factory.sqf index 70b82356..9c607ae5 100644 --- a/addons/zeusFactory/functions/fnc_zeusAttributes_factory.sqf +++ b/addons/zeusFactory/functions/fnc_zeusAttributes_factory.sqf @@ -22,11 +22,11 @@ if (isNil QGVAR(lastHeli)) then {GVAR(lastHeli) = (HELI_ARRAY select 0)}; disableSerialization; params ["_control"]; -private _logicObject = missionNamespace getVariable ["BIS_fnc_initCuratorAttributes_target", objnull]; +private _logicObject = missionNamespace getVariable ["BIS_fnc_initCuratorAttributes_target", objNull]; TRACE_2("zeusAttributes_factory",_control,_logicObject); -private _display = ctrlparent _control; -private _ctrlButtonOK = _display displayctrl 1; //IDC_OK +private _display = ctrlParent _control; +private _ctrlButtonOK = _display displayCtrl 1; //IDC_OK _control ctrlRemoveAllEventHandlers "SetFocus"; @@ -66,7 +66,7 @@ private _fnc_onUnload = { params [["_display", displayNull, [displayNull]], ["_exitCode", -1]]; TRACE_1("_fnc_onUnload params",_display); - private _logicObject = missionnamespace getVariable ["BIS_fnc_initCuratorAttributes_target", objnull]; + private _logicObject = missionNamespace getVariable ["BIS_fnc_initCuratorAttributes_target", objNull]; if (isNull _logicObject) exitWith {TRACE_1("null",_logicObject);}; private _set = _logicObject getVariable [QGVAR(set), false]; @@ -80,10 +80,10 @@ private _fnc_onUnload = { private _fnc_onConfirm = { params [["_ctrlButtonOK", controlNull, [controlNull]]]; TRACE_1("_fnc_onConfirm params",_this); - private _display = ctrlparent _ctrlButtonOK; + private _display = ctrlParent _ctrlButtonOK; if (isNull _display) exitWith {}; - private _logicObject = missionnamespace getvariable ["BIS_fnc_initCuratorAttributes_target", objnull]; + private _logicObject = missionNamespace getVariable ["BIS_fnc_initCuratorAttributes_target", objNull]; if (isNull _logicObject) exitWith {ERROR_1("Logic [%1] is null on confirm",_logicObject);}; private _set = _logicObject getVariable [QGVAR(set), false]; @@ -110,5 +110,5 @@ private _fnc_onConfirm = { TRACE_3("setting vehicles",_carType,_apcType,_heliType); }; -_display displayaddeventhandler ["unload", _fnc_onUnload]; -_ctrlButtonOK ctrladdeventhandler ["buttonclick", _fnc_onConfirm]; +_display displayAddEventHandler ["Unload", _fnc_onUnload]; +_ctrlButtonOK ctrlAddEventHandler ["ButtonClick", _fnc_onConfirm]; diff --git a/addons/zeusFactory/functions/fnc_zeusAttributes_place.sqf b/addons/zeusFactory/functions/fnc_zeusAttributes_place.sqf index 11e110c8..c0a7bbaa 100644 --- a/addons/zeusFactory/functions/fnc_zeusAttributes_place.sqf +++ b/addons/zeusFactory/functions/fnc_zeusAttributes_place.sqf @@ -4,11 +4,11 @@ disableSerialization; params ["_control"]; -private _logicObject = missionNamespace getVariable ["BIS_fnc_initCuratorAttributes_target", objnull]; +private _logicObject = missionNamespace getVariable ["BIS_fnc_initCuratorAttributes_target", objNull]; TRACE_2("zeusAttributes_place",_control,_logicObject); -private _display = ctrlparent _control; -private _ctrlButtonOK = _display displayctrl 1; //IDC_OK +private _display = ctrlParent _control; +private _ctrlButtonOK = _display displayCtrl 1; //IDC_OK _control ctrlRemoveAllEventHandlers "SetFocus"; if (isNil QGVAR(lastTransport)) then {GVAR(lastTransport) = 0}; @@ -52,18 +52,18 @@ private _ordersType = _logicObject getVariable [QGVAR(orders), GVAR(lastOrders)] (_display displayCtrl 23072) lbSetCurSel _ordersType; private _radius = _logicObject getVariable [QGVAR(radius), GVAR(lastRadius)]; -(_control controlsgroupctrl 23074) sliderSetRange [10, 2000]; -[_control controlsgroupctrl 23074, _control controlsgroupctrl 23075, "m", _radius] call bis_fnc_initSliderValue; -[_control controlsgroupctrl 23074, _control controlsgroupctrl 23075, "m"] call bis_fnc_initSliderValue; +(_control controlsGroupCtrl 23074) sliderSetRange [10, 2000]; +[_control controlsGroupCtrl 23074, _control controlsGroupCtrl 23075, "m", _radius] call bis_fnc_initSliderValue; +[_control controlsGroupCtrl 23074, _control controlsGroupCtrl 23075, "m"] call bis_fnc_initSliderValue; -(_control controlsgroupctrl 23076) cbSetChecked GVAR(attackTarget); -(_control controlsgroupctrl 23077) cbSetChecked GVAR(useLAMBS); +(_control controlsGroupCtrl 23076) cbSetChecked GVAR(attackTarget); +(_control controlsGroupCtrl 23077) cbSetChecked GVAR(useLAMBS); private _fnc_onUnload = { params [["_display", displayNull, [displayNull]], ["_exitCode", -1]]; TRACE_1("_fnc_onUnload params",_display); - private _logicObject = missionnamespace getVariable ["BIS_fnc_initCuratorAttributes_target", objnull]; + private _logicObject = missionNamespace getVariable ["BIS_fnc_initCuratorAttributes_target", objNull]; if (isNull _logicObject) exitWith {TRACE_1("null",_logicObject);}; private _set = _logicObject getVariable [QGVAR(set), false]; @@ -77,10 +77,10 @@ private _fnc_onUnload = { private _fnc_onConfirm = { params [["_ctrlButtonOK", controlNull, [controlNull]]]; TRACE_1("_fnc_onConfirm params",_this); - private _display = ctrlparent _ctrlButtonOK; + private _display = ctrlParent _ctrlButtonOK; if (isNull _display) exitWith {}; - private _logicObject = missionnamespace getvariable ["BIS_fnc_initCuratorAttributes_target", objnull]; + private _logicObject = missionNamespace getVariable ["BIS_fnc_initCuratorAttributes_target", objNull]; if (isNull _logicObject) exitWith {ERROR_1("Logic [%1] is null on confirm",_logicObject);}; @@ -92,7 +92,7 @@ private _fnc_onConfirm = { GVAR(lastOrders) = _ordersType; _logicObject setVariable [QGVAR(ordersType), _ordersType, true]; - private _radius = sliderposition (_display displayCtrl 23074); + private _radius = sliderPosition (_display displayCtrl 23074); GVAR(lastRadius) = _radius; _logicObject setVariable [QGVAR(radius), _radius, true]; @@ -108,5 +108,5 @@ private _fnc_onConfirm = { TRACE_3("set",_transportType,_ordersType,_radius); }; -_display displayaddeventhandler ["unload", _fnc_onUnload]; -_ctrlButtonOK ctrladdeventhandler ["buttonclick", _fnc_onConfirm]; +_display displayAddEventHandler ["Unload", _fnc_onUnload]; +_ctrlButtonOK ctrlAddEventHandler ["ButtonClick", _fnc_onConfirm]; diff --git a/addons/zeusHC/XEH_preInit.sqf b/addons/zeusHC/XEH_preInit.sqf index 23ae03c9..bd13753b 100644 --- a/addons/zeusHC/XEH_preInit.sqf +++ b/addons/zeusHC/XEH_preInit.sqf @@ -7,7 +7,7 @@ PREP_RECOMPILE_START; PREP_RECOMPILE_END; if (isServer) then { - missionNameSpace setVariable [QGVAR(aiTransfered), false, true]; + missionNamespace setVariable [QGVAR(aiTransfered), false, true]; }; #include "initSettings.inc.sqf" diff --git a/addons/zeusHC/functions/fnc_autoModule_createLocal.sqf b/addons/zeusHC/functions/fnc_autoModule_createLocal.sqf index 5c347542..462599d2 100644 --- a/addons/zeusHC/functions/fnc_autoModule_createLocal.sqf +++ b/addons/zeusHC/functions/fnc_autoModule_createLocal.sqf @@ -10,7 +10,7 @@ params ["_posASL", "_vehType", "_side"]; TRACE_3("autoModule_createLocal",_posASL,_vehType,_side); -private _posATL = aslToAtl _posASL; +private _posATL = ASLToATL _posASL; private _sideUnitConfig = switch (_side) do { case west: { configFile >> "CfgVehicles" >> QGVAR(west_rifleman) }; case east: { configFile >> "CfgVehicles" >> QGVAR(east_rifleman) }; diff --git a/addons/zeusHC/functions/fnc_buildAGroupDialogFactionChange.sqf b/addons/zeusHC/functions/fnc_buildAGroupDialogFactionChange.sqf index d8f13b9b..2fbc4509 100644 --- a/addons/zeusHC/functions/fnc_buildAGroupDialogFactionChange.sqf +++ b/addons/zeusHC/functions/fnc_buildAGroupDialogFactionChange.sqf @@ -29,7 +29,7 @@ if (_factionIndex > -1) then { { _x params ["_classname", "_displayName", "_icon"]; private _unitIndex = lbAdd [BUILD_GROUP_UNITS_IDC, _displayName]; - lbSetPicture [BUILD_GROUP_UNITS_IDC, _unitIndex, getText(configfile >> "CfgVehicleIcons" >> _icon)]; + lbSetPicture [BUILD_GROUP_UNITS_IDC, _unitIndex, getText(configFile >> "CfgVehicleIcons" >> _icon)]; lbSetData [BUILD_GROUP_UNITS_IDC, _unitIndex, _classname]; lbSetTooltip [BUILD_GROUP_UNITS_IDC, _unitIndex, _classname]; nil diff --git a/addons/zeusHC/functions/fnc_buildAGroupDialogLoad.sqf b/addons/zeusHC/functions/fnc_buildAGroupDialogLoad.sqf index 14f670fb..db283216 100644 --- a/addons/zeusHC/functions/fnc_buildAGroupDialogLoad.sqf +++ b/addons/zeusHC/functions/fnc_buildAGroupDialogLoad.sqf @@ -23,9 +23,9 @@ waitUntil {dialog}; // wait until the dialog is fully loaded before we do any po // setup faction dropdown, and populate possible unit list { - private _index = lbAdd [BUILD_GROUP_FACTIONS_IDC, getText (configfile >> "CfgFactionClasses" >> _x >> "displayName")]; + private _index = lbAdd [BUILD_GROUP_FACTIONS_IDC, getText (configFile >> "CfgFactionClasses" >> _x >> "displayName")]; lbSetData [BUILD_GROUP_FACTIONS_IDC, _index, _x]; - lbSetPicture [BUILD_GROUP_FACTIONS_IDC, _index, getText (configfile >> "CfgFactionClasses" >> _x >> "icon")]; + lbSetPicture [BUILD_GROUP_FACTIONS_IDC, _index, getText (configFile >> "CfgFactionClasses" >> _x >> "icon")]; nil } count GVAR(groupFactionWhiteList); diff --git a/addons/zeusHC/functions/fnc_createEntityDismounts.sqf b/addons/zeusHC/functions/fnc_createEntityDismounts.sqf index 6e200e18..764ebe99 100644 --- a/addons/zeusHC/functions/fnc_createEntityDismounts.sqf +++ b/addons/zeusHC/functions/fnc_createEntityDismounts.sqf @@ -57,7 +57,7 @@ _modelOffset = _modelOffset vectorAdd ((vectorNormalized _modelOffset) vectorMul TRACE_2("created unit",_unitType,_unit); if (_attachedVehicle isKindOf "Air") then { //Add velocity and move into parachute - _unit setPosASL (AGLtoASL _posAGL); + _unit setPosASL (AGLToASL _posAGL); _unit setVelocity ((velocity _attachedVehicle) vectorAdd ((vectorNormalized _modelOffset) vectorMultiply (random 10))); [{ diff --git a/addons/zeusHC/functions/fnc_createEntityZeus.sqf b/addons/zeusHC/functions/fnc_createEntityZeus.sqf index f652d047..b91801dd 100644 --- a/addons/zeusHC/functions/fnc_createEntityZeus.sqf +++ b/addons/zeusHC/functions/fnc_createEntityZeus.sqf @@ -12,7 +12,7 @@ if (isNull _logic || !_activated) exitWith {}; private _posATL = getPosATL _logic; private _typeOf = typeOf _logic; -private _attachedVehicle = _logic getVariable ["bis_fnc_curatorAttachObject_object",objnull]; +private _attachedVehicle = _logic getVariable ["bis_fnc_curatorAttachObject_object",objNull]; private _placerOwner = owner _logic; TRACE_4("",_posATL,_typeOf,_attachedVehicle,_placerOwner); diff --git a/addons/zeusHC/functions/fnc_garrisonDialogLoad.sqf b/addons/zeusHC/functions/fnc_garrisonDialogLoad.sqf index e4a4d906..c502b415 100644 --- a/addons/zeusHC/functions/fnc_garrisonDialogLoad.sqf +++ b/addons/zeusHC/functions/fnc_garrisonDialogLoad.sqf @@ -17,9 +17,9 @@ waitUntil {dialog}; // wait until the dialog is fully loaded before we do any po // setup faction dropdown, and populate possible unit list { - private _index = lbAdd [GARRISON_FACTIONS_IDC, getText (configfile >> "CfgFactionClasses" >> _x >> "displayName")]; + private _index = lbAdd [GARRISON_FACTIONS_IDC, getText (configFile >> "CfgFactionClasses" >> _x >> "displayName")]; lbSetData [GARRISON_FACTIONS_IDC, _index, _x]; - lbSetPicture [GARRISON_FACTIONS_IDC, _index, getText (configfile >> "CfgFactionClasses" >> _x >> "icon")]; + lbSetPicture [GARRISON_FACTIONS_IDC, _index, getText (configFile >> "CfgFactionClasses" >> _x >> "icon")]; nil } count (GVAR(garrisonCache) select 0); diff --git a/addons/zeusHC/functions/fnc_garrisonIsFacingWall.sqf b/addons/zeusHC/functions/fnc_garrisonIsFacingWall.sqf index f6e56d24..b175fd66 100644 --- a/addons/zeusHC/functions/fnc_garrisonIsFacingWall.sqf +++ b/addons/zeusHC/functions/fnc_garrisonIsFacingWall.sqf @@ -26,6 +26,6 @@ params [["_unit", objNull, [objNull]], private _positionASL = eyePos _unit; private _relativePosition = _unit getRelPos [_distance, _direction]; -private _intersects = lineIntersectsObjs [_positionASL, ATLTOASL _relativePosition]; +private _intersects = lineIntersectsObjs [_positionASL, ATLToASL _relativePosition]; (({_x isKindOf "house"} count _intersects) > 0) diff --git a/addons/zeusHC/functions/fnc_garrisonSpawn.sqf b/addons/zeusHC/functions/fnc_garrisonSpawn.sqf index 9d10ab75..19ecec08 100644 --- a/addons/zeusHC/functions/fnc_garrisonSpawn.sqf +++ b/addons/zeusHC/functions/fnc_garrisonSpawn.sqf @@ -37,7 +37,7 @@ _occupyRadius = [_occupyRadius, 0, 2000] call EFUNC(core,ensureRange); ([_occupyMinNumber, _occupyMaxNumber, 1, 20] call EFUNC(core,ensureBoundedMinMax)) params ["_occupyMin","_occupyMax"]; -private _side = switch (getNumber (configfile >> "CfgFactionClasses" >> _faction >> "side")) do { case 0: {east}; case 1: {west}; case 2: {resistance}; default {civilian}; }; +private _side = switch (getNumber (configFile >> "CfgFactionClasses" >> _faction >> "side")) do { case 0: {east}; case 1: {west}; case 2: {resistance}; default {civilian}; }; // handle EDEN placed module if (isNil QGVAR(garrisonCache)) then { diff --git a/addons/zeusHC/functions/fnc_spawnAVicDialogFactionChange.sqf b/addons/zeusHC/functions/fnc_spawnAVicDialogFactionChange.sqf index e19c65bd..e54447c0 100644 --- a/addons/zeusHC/functions/fnc_spawnAVicDialogFactionChange.sqf +++ b/addons/zeusHC/functions/fnc_spawnAVicDialogFactionChange.sqf @@ -30,7 +30,7 @@ if (_factionIndex > -1) then { private _unitIndex = lbAdd [SPAWN_VIC_LIST_IDC, _displayName]; lbSetPicture [SPAWN_VIC_LIST_IDC, _unitIndex, _icon]; lbSetData [SPAWN_VIC_LIST_IDC, _unitIndex, _classname]; - lbSetToolTip [SPAWN_VIC_LIST_IDC, _unitIndex, _classname]; + lbSetTooltip [SPAWN_VIC_LIST_IDC, _unitIndex, _classname]; nil } count _unitArray; }; diff --git a/addons/zeusHC/functions/fnc_spawnAVicDialogLoad.sqf b/addons/zeusHC/functions/fnc_spawnAVicDialogLoad.sqf index 86391850..768943e7 100644 --- a/addons/zeusHC/functions/fnc_spawnAVicDialogLoad.sqf +++ b/addons/zeusHC/functions/fnc_spawnAVicDialogLoad.sqf @@ -18,11 +18,11 @@ if (isNil QGVAR(spawnVicCache)) then { waitUntil {dialog}; // wait until the dialog is fully loaded before we do any population { - private _side = switch (getNumber (configfile >> "CfgFactionClasses" >> _x >> "side")) do { case 0: {"OpFor"}; case 1: {"BluFor"}; case 2: {"Indy"}; case 3: {"Civ"}; }; - private _displayName = format ["%1, (%2)", getText (configfile >> "CfgFactionClasses" >> _x >> "displayName"), _side]; + private _side = switch (getNumber (configFile >> "CfgFactionClasses" >> _x >> "side")) do { case 0: {"OpFor"}; case 1: {"BluFor"}; case 2: {"Indy"}; case 3: {"Civ"}; }; + private _displayName = format ["%1, (%2)", getText (configFile >> "CfgFactionClasses" >> _x >> "displayName"), _side]; private _index = lbAdd [SPAWN_VIC_FACTIONS_IDC, _displayName]; lbSetData [SPAWN_VIC_FACTIONS_IDC, _index, _x]; - lbSetPicture [SPAWN_VIC_FACTIONS_IDC, _index, getText (configfile >> "CfgFactionClasses" >> _x >> "icon")]; + lbSetPicture [SPAWN_VIC_FACTIONS_IDC, _index, getText (configFile >> "CfgFactionClasses" >> _x >> "icon")]; nil } count (GVAR(spawnVicCache) select 0); diff --git a/addons/zeusHC/functions/fnc_spawnAVicSpawnLocal.sqf b/addons/zeusHC/functions/fnc_spawnAVicSpawnLocal.sqf index 7c206d6c..047e9504 100644 --- a/addons/zeusHC/functions/fnc_spawnAVicSpawnLocal.sqf +++ b/addons/zeusHC/functions/fnc_spawnAVicSpawnLocal.sqf @@ -24,7 +24,7 @@ TRACE_1("Params",_this); params ["_location","_vehicleToAdd","_side"]; private _simulation = getText(configFile >> "CfgVehicles" >> _vehicleToAdd >> "simulation"); -private _vehicle = switch (tolower _simulation) do { +private _vehicle = switch (toLower _simulation) do { case "airplanex"; case "helicopterrtd"; case "helicopterx": { diff --git a/addons/zeusHC/functions/fnc_transferGroupsToHC.sqf b/addons/zeusHC/functions/fnc_transferGroupsToHC.sqf index a79ce698..cb9086a3 100644 --- a/addons/zeusHC/functions/fnc_transferGroupsToHC.sqf +++ b/addons/zeusHC/functions/fnc_transferGroupsToHC.sqf @@ -24,7 +24,7 @@ waitUntil { time > 0 }; if (!isMultiplayer) exitWith { diag_log text format ["[POTATO] Not in multiplayer, exiting %1",QFUNC(transferGroupsToHC)]; diag_log text format ["[POTATO] Broadcasting aiTransfered var (SKIPPED)"]; - missionNameSpace setVariable [QGVAR(aiTransfered), true, true]; + missionNamespace setVariable [QGVAR(aiTransfered), true, true]; }; if (!isServer) exitWith { ERROR("transferGroupsToHC should only be called on server"); }; @@ -32,7 +32,7 @@ private _allHCs = entities "HeadlessClient_F"; if (_allHCs isEqualTo []) exitWith { diag_log text format ["[POTATO] No headless clients found, exiting %1", QFUNC(transferGroupsToHC)]; diag_log text format ["[POTATO] Broadcasting aiTransfered var (SKIPPED)"]; - missionNameSpace setVariable [QGVAR(aiTransfered), true, true]; + missionNamespace setVariable [QGVAR(aiTransfered), true, true]; }; private _hcIDs = _allHCs apply { owner _x }; @@ -53,5 +53,5 @@ TRACE_1("Time between transfers",_timeBetweenTransfers); diag_log text format ["[POTATO] Broadcasting aiTransfered var (Transfer Done)"]; -missionNameSpace setVariable [QGVAR(aiTransfered), true, true]; +missionNamespace setVariable [QGVAR(aiTransfered), true, true]; diff --git a/include/a3/ui_f_curator/ui/displays/RscDisplayAttributes.sqf b/include/a3/ui_f_curator/ui/displays/RscDisplayAttributes.sqf index b3028465..1da3fc5f 100644 --- a/include/a3/ui_f_curator/ui/displays/RscDisplayAttributes.sqf +++ b/include/a3/ui_f_curator/ui/displays/RscDisplayAttributes.sqf @@ -8,130 +8,130 @@ switch _mode do { case "onLoad": { _display = _params select 0; - _displayConfig = configfile >> _class; - - _ctrlBackground = _display displayctrl IDC_RSCDISPLAYATTRIBUTES_BACKGROUND; - _ctrlTitle = _display displayctrl IDC_RSCDISPLAYATTRIBUTES_TITLE; - _ctrlContent = _display displayctrl IDC_RSCDISPLAYATTRIBUTES_CONTENT; - _ctrlButtonOK = _display displayctrl IDC_OK; - _ctrlButtonCancel = _display displayctrl IDC_CANCEL; - _ctrlButtonCustom = _display displayctrl IDC_RSCDISPLAYATTRIBUTES_BUTTONCUSTOM; - - _ctrlBackgroundPos = ctrlposition _ctrlBackground; - _ctrlTitlePos = ctrlposition _ctrlTitle; - _ctrlContentPos = ctrlposition _ctrlContent; - _ctrlButtonOKPos = ctrlposition _ctrlButtonOK; - _ctrlButtonCancelPos = ctrlposition _ctrlButtonCancel; - _ctrlButtonCustomPos = ctrlposition _ctrlButtonCustom; + _displayConfig = configFile >> _class; + + _ctrlBackground = _display displayCtrl IDC_RSCDISPLAYATTRIBUTES_BACKGROUND; + _ctrlTitle = _display displayCtrl IDC_RSCDISPLAYATTRIBUTES_TITLE; + _ctrlContent = _display displayCtrl IDC_RSCDISPLAYATTRIBUTES_CONTENT; + _ctrlButtonOK = _display displayCtrl IDC_OK; + _ctrlButtonCancel = _display displayCtrl IDC_CANCEL; + _ctrlButtonCustom = _display displayCtrl IDC_RSCDISPLAYATTRIBUTES_BUTTONCUSTOM; + + _ctrlBackgroundPos = ctrlPosition _ctrlBackground; + _ctrlTitlePos = ctrlPosition _ctrlTitle; + _ctrlContentPos = ctrlPosition _ctrlContent; + _ctrlButtonOKPos = ctrlPosition _ctrlButtonOK; + _ctrlButtonCancelPos = ctrlPosition _ctrlButtonCancel; + _ctrlButtonCustomPos = ctrlPosition _ctrlButtonCustom; _ctrlTitleOffsetY = (_ctrlBackgroundPos select 1) - (_ctrlTitlePos select 1) - (_ctrlTitlePos select 3); _ctrlContentOffsetY = (_ctrlContentPos select 1) - (_ctrlBackgroundPos select 1); //--- Show fake map in the background - _ctrlMap = _display displayctrl IDC_RSCDISPLAYCURATOR_MAINMAP; - _ctrlMap ctrlenable false; - if (visiblemap) then { - _ctrlCuratorMap = (finddisplay IDD_RSCDISPLAYCURATOR) displayctrl IDC_RSCDISPLAYCURATOR_MAINMAP; - _ctrlMap ctrlmapanimadd [0,ctrlmapscale _ctrlCuratorMap,_ctrlCuratorMap ctrlmapscreentoworld [0.5,0.5]]; - ctrlmapanimcommit _ctrlMap; + _ctrlMap = _display displayCtrl IDC_RSCDISPLAYCURATOR_MAINMAP; + _ctrlMap ctrlEnable false; + if (visibleMap) then { + _ctrlCuratorMap = (findDisplay IDD_RSCDISPLAYCURATOR) displayCtrl IDC_RSCDISPLAYCURATOR_MAINMAP; + _ctrlMap ctrlMapAnimAdd [0,ctrlMapScale _ctrlCuratorMap,_ctrlCuratorMap ctrlMapScreenToWorld [0.5,0.5]]; + ctrlMapAnimCommit _ctrlMap; } else { - _ctrlMap ctrlshow false; + _ctrlMap ctrlShow false; }; //--- Load default attributes - _attributes = if (getnumber (_displayConfig >> "filterAttributes") > 0) then {missionnamespace getvariable ["BIS_fnc_initCuratorAttributes_attributes",[]]} else {["%ALL"]}; + _attributes = if (getNumber (_displayConfig >> "filterAttributes") > 0) then {missionNamespace getVariable ["BIS_fnc_initCuratorAttributes_attributes",[]]} else {["%ALL"]}; _allAttributes = "%ALL" in _attributes; //--- Initialize attributes _posY = _ctrlContentOffsetY; _contentControls = _displayConfig >> "Controls" >> "Content" >> "Controls"; - _enableDebugConsole = ["DebugConsole",getnumber (missionconfigfile >> "enableDebugConsole")] call bis_fnc_getParamValue; - _enableAdmin = (_enableDebugConsole == 1 && (isserver || serverCommandAvailable "#shutdown")) || _enableDebugConsole == 2; + _enableDebugConsole = ["DebugConsole",getNumber (missionConfigFile >> "enableDebugConsole")] call bis_fnc_getParamValue; + _enableAdmin = (_enableDebugConsole == 1 && (isServer || serverCommandAvailable "#shutdown")) || _enableDebugConsole == 2; for "_i" from 0 to (count _contentControls - 1) do { _cfgControl = _contentControls select _i; - if (isclass _cfgControl) then { - _idc = getnumber (_cfgControl >> "idc"); - _control = _display displayctrl _idc; + if (isClass _cfgControl) then { + _idc = getNumber (_cfgControl >> "idc"); + _control = _display displayCtrl _idc; //--- Admin specific attribute - _show = if (getnumber (_cfgControl >> "adminOnly") > 0) then {_enableAdmin} else {true}; + _show = if (getNumber (_cfgControl >> "adminOnly") > 0) then {_enableAdmin} else {true}; - if ((_allAttributes || {_x == configname _cfgControl} count _attributes > 0) && _show) then { - _controlPos = ctrlposition _control; + if ((_allAttributes || {_x == configName _cfgControl} count _attributes > 0) && _show) then { + _controlPos = ctrlPosition _control; _controlPos set [0,0]; _controlPos set [1,_posY]; - _control ctrlsetposition _controlPos; - _control ctrlcommit 0; + _control ctrlSetPosition _controlPos; + _control ctrlCommit 0; _posY = _posY + (_controlPos select 3) + 0.005; - ctrlsetfocus _control; + ctrlSetFocus _control; } else { - _control ctrlsetposition [0,0,0,0]; - _control ctrlcommit 0; - _control ctrlshow false; + _control ctrlSetPosition [0,0,0,0]; + _control ctrlCommit 0; + _control ctrlShow false; }; }; }; _posH = ((_posY + _ctrlContentOffsetY) min 0.9) * 0.5; - _target = missionnamespace getvariable ["BIS_fnc_initCuratorAttributes_target",objnull]; - _name = switch (typename _target) do { - case (typename objnull): {gettext (configfile >> "cfgvehicles" >> typeof _target >> "displayname")}; - case (typename grpnull): {groupid _target}; - case (typename []): {format ["%1: %3 #%2",groupid (_target select 0),_target select 1,localize "str_a3_cfgmarkers_waypoint_0"]}; - case (typename ""): {markertext _target}; + _target = missionNamespace getVariable ["BIS_fnc_initCuratorAttributes_target",objNull]; + _name = switch (typeName _target) do { + case (typeName objNull): {getText (configFile >> "cfgvehicles" >> typeOf _target >> "displayname")}; + case (typeName grpNull): {groupId _target}; + case (typeName []): {format ["%1: %3 #%2",groupId (_target select 0),_target select 1,localize "str_a3_cfgmarkers_waypoint_0"]}; + case (typeName ""): {markerText _target}; }; - _ctrlTitle ctrlsettext format [ctrltext _ctrlTitle,toupper _name]; + _ctrlTitle ctrlSetText format [ctrlText _ctrlTitle,toUpper _name]; _ctrlTitlePos set [1,(0.5 - _posH) - (_ctrlTitlePos select 3) - _ctrlTitleOffsetY]; - _ctrlTitle ctrlsetposition _ctrlTitlePos; - _ctrlTitle ctrlcommit 0; + _ctrlTitle ctrlSetPosition _ctrlTitlePos; + _ctrlTitle ctrlCommit 0; _ctrlContentPos set [1,0.5 - _posH]; _ctrlContentPos set [3,_posH * 2]; - _ctrlContent ctrlsetposition _ctrlContentPos; - _ctrlContent ctrlcommit 0; + _ctrlContent ctrlSetPosition _ctrlContentPos; + _ctrlContent ctrlCommit 0; _ctrlBackgroundPos set [1,0.5 - _posH]; _ctrlBackgroundPos set [3,_posH * 2]; - _ctrlBackground ctrlsetposition _ctrlBackgroundPos; - _ctrlBackground ctrlcommit 0; + _ctrlBackground ctrlSetPosition _ctrlBackgroundPos; + _ctrlBackground ctrlCommit 0; _ctrlButtonOKPos set [1,0.5 + _posH + _ctrlTitleOffsetY]; - _ctrlButtonOK ctrlsetposition _ctrlButtonOKPos; - _ctrlButtonOK ctrlcommit 0; - ctrlsetfocus _ctrlButtonOK; + _ctrlButtonOK ctrlSetPosition _ctrlButtonOKPos; + _ctrlButtonOK ctrlCommit 0; + ctrlSetFocus _ctrlButtonOK; _ctrlButtonCancelPos set [1,0.5 + _posH + _ctrlTitleOffsetY]; - _ctrlButtonCancel ctrlsetposition _ctrlButtonCancelPos; - _ctrlButtonCancel ctrlcommit 0; + _ctrlButtonCancel ctrlSetPosition _ctrlButtonCancelPos; + _ctrlButtonCancel ctrlCommit 0; _ctrlButtonCustomPos set [1,0.5 + _posH + _ctrlTitleOffsetY]; - _ctrlButtonCustom ctrlsetposition _ctrlButtonCustomPos; - _ctrlButtonCustom ctrlcommit 0; + _ctrlButtonCustom ctrlSetPosition _ctrlButtonCustomPos; + _ctrlButtonCustom ctrlCommit 0; //--- Close the display when entity is altered [_display] spawn { - disableserialization; + disableSerialization; _display = _this select 0; - _target = missionnamespace getvariable ["BIS_fnc_initCuratorAttributes_target",objnull]; - switch (typename _target) do { - case (typename objnull): { + _target = missionNamespace getVariable ["BIS_fnc_initCuratorAttributes_target",objNull]; + switch (typeName _target) do { + case (typeName objNull): { _isAlive = alive _target; - waituntil {isnull _display || (_isAlive && !alive _target)}; + waitUntil {isNull _display || (_isAlive && !alive _target)}; }; - case (typename grpnull): { - waituntil {isnull _display || isnull _target}; + case (typeName grpNull): { + waitUntil {isNull _display || isNull _target}; }; - case (typename []): { + case (typeName []): { _grp = _target select 0; _wpCount = count waypoints _grp; - waituntil {isnull _display || (count waypoints _grp != _wpCount)}; + waitUntil {isNull _display || (count waypoints _grp != _wpCount)}; }; - case (typename ""): { - waituntil {isnull _display || markertype _target == ""}; + case (typeName ""): { + waitUntil {isNull _display || markerType _target == ""}; }; }; - _display closedisplay 2; + _display closeDisplay 2; }; }; case "onUnload": {