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 @@
-
+
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": {