diff --git a/CurrentChangelog.txt b/CurrentChangelog.txt
index fc0e085cc..b6b1e5fae 100644
--- a/CurrentChangelog.txt
+++ b/CurrentChangelog.txt
@@ -1,7 +1,10 @@
4.15
- Fixed: Player did not get extra points for helping solving the sidemission (score was added on the client not on the server; available in ranked mode and when SQL database is available)
-- Changed: All cluster/subammo type magazines removed from mission pylon loadout dialog (including 3rd party mods). Causing much too much lag!!!
+- Changed: All cluster/subammo type magazines removed from mission pylon loadout dialog (including 3rd party mods). Causes much too much lag!!!
- Changed: Added more score messages to the new UI score message system
+- Fixed: Global Mobilization versions both had two accidentally placed blufor units
+- Fixed: Global Mobilization player artillery had no crew at all so artillery called by players did not fire
+- Fixed: Sniper teams were missing from all 3rd party mods/dlcs (d_sniper_x); Vanilla units got spawned instead of the correct mod/dlc ones
- Added: Chinese translation by 小新
-- Updated: Russian translation
+- Updated: Russian translation
\ No newline at end of file
diff --git a/co30_Domination.Altis/cfgfunctions.hpp b/co30_Domination.Altis/cfgfunctions.hpp
index 78cd999a4..2dfc7e387 100644
--- a/co30_Domination.Altis/cfgfunctions.hpp
+++ b/co30_Domination.Altis/cfgfunctions.hpp
@@ -181,6 +181,7 @@ class cfgFunctions {
addc(initplname);
addc(scoreadded);
addc(scoreaddqeue);
+// addc(arsenalfilter);
};
class Dom_UI {
file = "clientui";
diff --git a/co30_Domination.Altis/changelog.txt b/co30_Domination.Altis/changelog.txt
index fc0e085cc..77cc50393 100644
--- a/co30_Domination.Altis/changelog.txt
+++ b/co30_Domination.Altis/changelog.txt
@@ -1,7 +1,10 @@
4.15
- Fixed: Player did not get extra points for helping solving the sidemission (score was added on the client not on the server; available in ranked mode and when SQL database is available)
-- Changed: All cluster/subammo type magazines removed from mission pylon loadout dialog (including 3rd party mods). Causing much too much lag!!!
+- Changed: All cluster/subammo type magazines removed from mission pylon loadout dialog (including 3rd party mods). Causes much too much lag!!!
- Changed: Added more score messages to the new UI score message system
+- Fixed: Global Mobilization versions both had two accidentally placed blufor units
+- Fixed: Global Mobilization player artillery had no crew at all so artillery called by players did not fire
+- Fixed: Sniper teams were missing from all 3rd party mods/dlcs (d_sniper_x); Vanilla units got spawned instead of the correct mod/dlc ones
- Added: Chinese translation by 小新
- Updated: Russian translation
diff --git a/co30_Domination.Altis/client/fn_arsenalfilter.sqf b/co30_Domination.Altis/client/fn_arsenalfilter.sqf
new file mode 100644
index 000000000..92abbdd01
--- /dev/null
+++ b/co30_Domination.Altis/client/fn_arsenalfilter.sqf
@@ -0,0 +1,358 @@
+// by Xeno
+#define THIS_FILE "fn_arsenalfilter.sqf"
+#include "..\x_setup.sqf"
+
+// TODO
+// Das ganze eigene Einlesen der Waffen ist gar nicht notwendig.
+// Die Klassen sind doch alle in bis_fnc_arsenal_data
+
+// scopes with optics
+//"getNumer (_x>>'scope') == 2 && {isClass (_x>>'ItemInfo') && {inheritsFrom (_x>>'ItemInfo') == configFile>>'CfgWeapons'>>'InventoryOpticsItem_Base_F')}}" configClasses (configFile >> "CfgWeapons")
+
+//private _weaponsar = "getNumber (_x>>'scope') == 2 && {getNumber (_x>>'ballisticsComputer') == 0}" configClasses (configFile >> "CfgWeapons");
+
+private _cfgw = configFile>>"CfgWeapons";
+
+private _weaponsar = "getNumber (_x>>'scope') == 2 &&
+{!(configName _x isEqualTo 'Zasleh2') &&
+{!isClass (_x>>'LinkedItems') &&
+{!isClass (_x>>'LinkedItemsMuzzle') &&
+{!isClass (_x>>'LinkedItemsAcc') &&
+{configName _x isKindOf ['RifleCore', configFile >> 'CfgWeapons'] ||
+{configName _x isKindOf ['PistolCore', configFile >> 'CfgWeapons'] ||
+{configName _x isKindOf ['DetectorCore', configFile >> 'CfgWeapons'] ||
+{configName _x isKindOf ['Binocular', configFile >> 'CfgWeapons'] ||
+{configName _x isKindOf ['Launcher', configFile >> 'CfgWeapons'] ||
+{configName _x isKindOf ['ItemCore', configFile >> 'CfgWeapons'] ||
+{configName _x isKindOf ['InventoryItem_Base_F', configFile >> 'CfgWeapons']
+}}}}}}}}}}}" configClasses _cfgw;
+
+private _glassesar = "getNumber (_x>>'scope') == 2 &&" configClasses (configFile>>"CfgGlasses");
+
+diag_log "configClasses done...";
+
+_glassesar = _glassesar apply {configName _x};
+
+diag_log "##################################";
+diag_log "Glasses";
+{
+ diag_log _x;
+} forEach _glassesar;
+
+diag_log "##################################";
+
+private _gogglesar = [];
+private _binoar = [];
+private _launcherar = [];
+private _uniformsar = [];
+private _vestsar = [];
+private _itemsar = [];
+private _helemtsar = [];
+private _opticsar = [];
+private _bipodsar = [];
+private _muzzlesar = [];
+private _flashlightar = [];
+private _uavterminalar = [];
+private _pistolar = [];
+private _riflear = [];
+private _minedetectorar = [];
+private _mapsar = [];
+private _compassar = [];
+private _radioar = [];
+private _watchar = [];
+
+{
+ private _n = configName _x;
+ private _cfgo = _x;
+ __TRACE_1("","_n")
+ call {
+ if (_n isKindOf ["RifleCore", _cfgw]) exitWith {
+ _riflear pushBack _n;
+ private _cu = getText(_cfgo>>"cursor"),
+ if (_cu == "arifle") then {
+ // assault rifle
+ __TRACE_1("is assault rifle","_n")
+
+ private _muzzles = getArray (_cfgo>>"muzzles");
+ if (_muzzles findIf {_cfgo>>_x>>"cursorAim" == "gl"}) then {
+ //has grenade launcher
+ __TRACE_1("has underbarrel grenade launcher","_n")
+ } else {
+ _muzzles = _muzzles apply {toLowerANSI _x}
+ if ("secondary" in _muzzles) then {
+ // has secondary rifle like arifle_ARX_base_F
+ };
+ };
+ } else {
+ if (_cu == "srifle") then {
+ // sniper rifle
+ } else {
+ if (_cu == "mg") then {
+ // mg
+ } else {
+ if (_cu == "hgun") then {
+ // handgun
+ } else {
+ if (_cu == "smg") then {
+ // submachinegun
+ } else {
+ if (_cu == "gl") then {
+ // grenade launcher
+ };
+ };
+ };
+ };
+ };
+ };
+ };
+ if (_n isKindOf ["Launcher", _cfgw]) exitWith {
+ _launcherar pushBack _n;
+ };
+ if (_n isKindOf ["PistolCore", _cfgw]) exitWith {
+ _pistolar pushBack _n;
+ };
+ if (_n isKindOf ["NVGoggles", _cfgw]) exitWith {
+ _gogglesar pushBack _n;
+ };
+ if (_n isKindOf ["Binocular", _cfgw]) exitWith {
+ _binoar pushBack _n;
+ };
+ if (_n isKindOf ["Uniform_Base", _cfgw]) exitWith {
+ _uniformsar pushBack _n;
+ };
+ if (_n isKindOf ["Vest_Camo_Base", _cfgw] || {_n isKindOf ["Vest_NoCamo_Base", _cfgw]}) exitWith {
+ _vestsar pushBack _n;
+ };
+ if (isClass (_cfgo>>"ItemInfo">>"HitpointsProtectionInfo">>"Head")) exitWith {
+ _helemtsar pushBack _n;
+ };
+ if (isClass (_cfgo>>"ItemInfo">>"OpticsModes")) exitWith {
+ _opticsar pushBack _n;
+ };
+ if (isClass (_cfgo>>"ItemInfo">>"MuzzleCoef")) exitWith {
+ _muzzlesar pushBack _n;
+ };
+ if (isClass (_cfgo>>"ItemInfo">>"FlashLight")) exitWith {
+ _flashlightar pushBack _n;
+ };
+ if (getNumber (_cfgo>>"ItemInfo">>"hasBipod") == 1) exitWith {
+ _bipodsar pushBack _n;
+ };
+ if (_n isKindOf ["UavTerminal_base", _cfgw] || {getText (_cfgo>>"simulation") == "ItemCompass"}) exitWith {
+ _uavterminalar pushBack _n;
+ };
+ if (_n isKindOf ["DetectorCore", _cfgw]) exitWith {
+ _minedetectorar pushBack _n;
+ };
+ if (getText (_cfgo>>"simulation") == "ItemMap") exitWith {
+ _mapsar pushBack _n;
+ };
+ if (getText (_cfgo>>"simulation") == "ItemCompass") exitWith {
+ _compassar pushBack _n;
+ };
+ if (getText (_cfgo>>"simulation") == "ItemRadio") exitWith {
+ _radioar pushBack _n;
+ };
+ if (getText (_cfgo>>"simulation") == "ItemWatch") exitWith {
+ _watchar pushBack _n;
+ };
+ if (_n isKindOf ["ItemCore", _cfgw]) exitWith {
+ _itemsar pushBack _n;
+ };
+ };
+} forEach _weaponsar;
+
+diag_log "forEach _weaponsar done...";
+
+diag_log "##################################";
+diag_log "Rifles...";
+{
+ diag_log _x;
+} forEach _riflear;
+diag_log "##################################";
+diag_log "Pistols...";
+{
+ diag_log _x;
+} forEach _pistolar;
+diag_log "##################################";
+diag_log "Goggles...";
+{
+ diag_log _x;
+} forEach _gogglesar;
+diag_log "##################################";
+diag_log "Binoculars...";
+{
+ diag_log _x;
+} forEach _binoar;
+diag_log "##################################";
+diag_log "Launchers...";
+{
+ diag_log _x;
+} forEach _launcherar;
+diag_log "##################################";
+diag_log "Optics...";
+{
+ diag_log _x;
+} forEach _opticsar;
+diag_log "##################################";
+diag_log "Uniforms...";
+{
+ diag_log _x;
+} forEach _uniformsar;
+diag_log "##################################";
+diag_log "Vests...";
+{
+ diag_log _x;
+} forEach _vestsar;
+diag_log "##################################";
+diag_log "Helmets...";
+{
+ diag_log _x;
+} forEach _helemtsar;
+diag_log "##################################";
+diag_log "Bipods...";
+{
+ diag_log _x;
+} forEach _bipodsar;
+diag_log "##################################";
+diag_log "Muzzles...";
+{
+ diag_log _x;
+} forEach _muzzlesar;
+diag_log "##################################";
+diag_log "Flashlights...";
+{
+ diag_log _x;
+} forEach _flashlightar;
+diag_log "##################################";
+diag_log "UAV Terminals...";
+{
+ diag_log _x;
+} forEach _uavterminalar;
+diag_log "##################################";
+diag_log "Mine Detectors...";
+{
+ diag_log _x;
+} forEach _minedetectorar;
+diag_log "##################################";
+diag_log "Maps...";
+{
+ diag_log _x;
+} forEach _mapsar;
+diag_log "##################################";
+diag_log "Compass...";
+{
+ diag_log _x;
+} forEach _compassar;
+diag_log "##################################";
+diag_log "Radios...";
+{
+ diag_log _x;
+} forEach _radioar;
+diag_log "##################################";
+diag_log "Watches...";
+{
+ diag_log _x;
+} forEach _watchar;
+diag_log "##################################";
+diag_log "Items...";
+{
+ diag_log _x;
+} forEach _itemsar;
+
+
+diag_log "##################################";
+diag_log ["Count _weaponsar", count _weaponsar];
+diag_log ["Count other arrays", (count _gogglesar) + (count _binoar) + (count _launcherar) + (count _opticsar) + (count _uniformsar) + (count _vestsar) + (count _helemtsar) + (count _itemsar) + (count _bipodsar) + (count _muzzlesar) + (count _flashlightar) + (count _uavterminalar) + (count _pistolar) + (count _riflear) + (count _minedetectorar) + (count _mapsar) + (count _compassar) + (count _radioar) + (count _watchar)];
+
+_weaponsar = _weaponsar apply {configName _x};
+
+_weaponsar = _weaponsar - _gogglesar - _binoar - _launcherar - _uniformsar - _vestsar - _itemsar - _helemtsar - _opticsar - _bipodsar - _muzzlesar - _flashlightar - _uavterminalar - _pistolar - _riflear - _minedetectorar - _mapsar - _compassar - _radioar - _watchar;
+
+diag_log ["Rest:", _weaponsar];
+
+
+/*d_remove_from_arsenal = [
+ [], // rifles
+ [], // launchers
+ [], // handguns
+ [], // uniforms
+ [], // vests
+ [], // backpacks
+ [], // headgear
+ [], // glasses
+ [], // goggles
+ [], // binoculars
+ [], // ItemMap
+ [], // ItemGPS, UAV Terminal
+ [], // ItemRadio
+ [], // ItemCompass
+ [], // ItemWatch
+ [], // Heads
+ [], // Language?
+ [], // signs
+ [],
+ [],
+ [],
+ [],
+ [], // Grenades
+ ["APERSMineDispenser_Mag"], // Charges
+ [], // MineDector, FirstAidkit, MediKit
+ [],
+ [] // magazines
+ ];*/
+
+/*// >> "type"
+#define WeaponNoSlot 0 // dummy weapons
+#define WeaponSlotPrimary 1 // primary weapons
+#define WeaponSlotSecondary 4 // secondary weapons
+#define WeaponSlotHandGun 2 // HandGun
+#define WeaponSlotHandGunItem 16 // HandGun magazines
+#define WeaponSlotItem 256 // items
+#define WeaponSlotBinocular 4096 // binocular
+#define WeaponHardMounted 65536 //vehicle weapons
+#define WeaponSlotInventory 131072 // inventory items
+
+// >> "itemInfo" >> "type"
+#define DEFAULT_SLOT 0
+#define MUZZLE_SLOT 101
+#define OPTICS_SLOT 201
+#define FLASHLIGHT_SLOT 301
+#define BIPOD_SLOT 302
+#define FIRSTAIDKIT_SLOT 401
+#define FINS_SLOT 501
+#define BREATHINGBOMB_SLOT 601
+#define NVG_SLOT 602
+#define GOGGLE_SLOT 603
+#define SCUBA_SLOT 604
+#define HEADGEAR_SLOT 605
+#define FACTOR_SLOT 607
+#define RADIO_SLOT 611
+#define HMD_SLOT 616
+#define BINOCULAR_SLOT 617
+#define MEDIKIT_SLOT 619
+#define TOOLKIT_SLOT 620
+#define VEST_SLOT 701
+#define UNIFORM_SLOT 801
+#define BACKPACK_SLOT 901
+
+Then also for weapons you can filter them by cursor or cursorAim.
+
+//Stolen from BIS_fnc_itemType
+
+case "arifle": {"AssaultRifle"};
+case "bomb": {"BombLauncher"};
+case "cannon": {"Cannon"};
+case "gl": {"GrenadeLauncher"};
+case "laserdesignator": {"LaserDesignator"};
+case "mg": {"MachineGun"};
+case "missile": {"MissileLauncher"};
+case "mortar": {"Mortar"};
+case "rocket": {"RocketLauncher"};
+case "sgun": {"Shotgun"};
+case "throw": {"Throw"};
+case "smg": {"SubmachineGun"};
+case "srifle": {"SniperRifle"};
+
+As well as BIS_fnc_itemType another good place to look at is BIS_fnc_loadInventory for some ideas on filtering.
+/*)
\ No newline at end of file
diff --git a/co30_Domination.Altis/client/x_setupplayer.sqf b/co30_Domination.Altis/client/x_setupplayer.sqf
index b05c11db4..c783f55e2 100644
--- a/co30_Domination.Altis/client/x_setupplayer.sqf
+++ b/co30_Domination.Altis/client/x_setupplayer.sqf
@@ -1035,6 +1035,8 @@ for "_i" from 0 to (count d_remove_from_arsenal - 1) do {
};
};
+//call d_fnc_arsenalfilter;
+
if (d_with_ranked) then {
0 spawn d_fnc_weaponcargo_ranked;
};
diff --git a/co30_Domination.Altis/init/fn_preinit.sqf b/co30_Domination.Altis/init/fn_preinit.sqf
index ecacdad19..82a0e6f61 100644
--- a/co30_Domination.Altis/init/fn_preinit.sqf
+++ b/co30_Domination.Altis/init/fn_preinit.sqf
@@ -826,9 +826,7 @@ if (!d_tt_tanoa) then {
#ifdef __MALDEN__
#include "d_specops_O_default.sqf"
#endif
- ];
-
- d_sniper_E = [["East","OPF_F","Infantry","OI_SniperTeam"] call d_fnc_GetConfigGroup];
+ ];
d_specops_W = call {
if (d_rhs) exitWith {
@@ -840,7 +838,15 @@ if (!d_tt_tanoa) then {
[["West","BLU_F","Infantry","BUS_ReconTeam"] call d_fnc_GetConfigGroup]
};
- d_sniper_W = [["West","BLU_F","Infantry","BUS_SniperTeam"] call d_fnc_GetConfigGroup];
+ if (d_tanoa || {d_livonia}) then {
+ d_sniper_E = [["East","OPF_T_F","Infantry","O_T_SniperTeam"] call d_fnc_GetConfigGroup];
+ d_sniper_W = [["West","BLU_T_F","Infantry","B_T_SniperTeam"] call d_fnc_GetConfigGroup];
+ d_sniper_I = [["Indep","IND_F","Infantry","HAF_SniperTeam"] call d_fnc_GetConfigGroup];
+ } else {
+ d_sniper_E = [["East","OPF_F","Infantry","OI_SniperTeam"] call d_fnc_GetConfigGroup];
+ d_sniper_W = [["West","BLU_F","Infantry","BUS_SniperTeam"] call d_fnc_GetConfigGroup];
+ d_sniper_I = [["Indep","IND_F","Infantry","HAF_SniperTeam"] call d_fnc_GetConfigGroup];
+ };
#ifdef __RHS__
d_specops_E = [
@@ -867,6 +873,35 @@ if (!d_tt_tanoa) then {
d_sabotage_E = [[["gm_gc_army_demolition_mpiaks74n_80_str"], ["gm_gc_army_demolition_mpiaks74n_80_win"]] select d_gmcwgwinter];
d_sabotage_W = [["gm_ge_army_demolition_g3a4_80_ols"]];
d_sabotage_G = [["CUP_I_GUE_Saboteur"]];
+
+ d_sniper_E = [[["gm_gc_army_squadleader_mpiak74n_80_str", "gm_gc_army_rifleman_mpiak74n_80_str"], ["gm_gc_army_squadleader_mpiak74n_80_win", "gm_gc_army_rifleman_mpiak74n_80_win"]] select d_gmcwgwinter];
+ d_sniper_W = [[["gm_ge_army_squadleader_g3a3_p2a1_80_ols", "gm_ge_army_rifleman_g3a3_80_ols"], ["gm_ge_army_squadleader_g3a3_p2a1_parka_80_win", "gm_ge_army_rifleman_g3a3_parka_80_win"]] select d_gmcwgwinter];
+#endif
+
+#ifdef __CUP_CHERNARUS__
+ d_sniper_E = [["East","CUP_O_RU","Infantry","CUP_O_RU_SniperTeam_VDV_M_EMR"] call d_fnc_GetConfigGroup];
+ d_sniper_W = [["West","CUP_B_USMC","Infantry","CUP_B_USMC_SniperTeam"] call d_fnc_GetConfigGroup];
+ d_sniper_I = [["Indep","CUP_I_NAPA","Infantry","CUP_I_NAPA_GrpInf_TeamSniper"] call d_fnc_GetConfigGroup];
+#endif
+#ifdef __CUP_TAKISTAN__
+ d_sniper_E = [["East","CUP_O_TK","Infantry","CUP_O_TK_SniperTeam"] call d_fnc_GetConfigGroup];
+ d_sniper_W = [["West","CUP_B_US_Army","Infantry","CUP_B_US_Army_SniperTeam"] call d_fnc_GetConfigGroup];
+ d_sniper_I = [["Indep","CUP_I_TK_GUE","Infantry","CUP_I_TK_GUE_SniperTeam"] call d_fnc_GetConfigGroup];
+#endif
+#ifdef __CUP_SARA__
+ d_sniper_E = [["East","CUP_O_SLA","Infantry","CUP_O_SLA_SniperTeam"] call d_fnc_GetConfigGroup];
+ d_sniper_W = [["West","CUP_B_US_Army","Infantry","CUP_B_US_Army_SniperTeam"] call d_fnc_GetConfigGroup];
+ d_sniper_I = [["Indep","CUP_I_RACS","Infantry","CUP_I_RACS_SniperTeam"] call d_fnc_GetConfigGroup];
+#endif
+#ifdef __IFA3LITE__
+ d_sniper_E = [["East","LIB_RKKA","Infantry","LIB_SOV_sniper_team"] call d_fnc_GetConfigGroup];
+ d_sniper_W = [["West","LIB_WEHRMACHT","Infantry","LIB_GER_sniper_team"] call d_fnc_GetConfigGroup];
+ d_sniper_I = [["Indep","LIB_US_ARMY","Infantry","LIB_US_Sniper_Team"] call d_fnc_GetConfigGroup];
+#endif
+#ifdef __RHS__
+ d_sniper_E = [["East","rhs_faction_vmf","rhs_group_rus_vmf_infantry_recon","rhs_group_rus_vmf_infantry_recon_squad_sniper"] call d_fnc_GetConfigGroup];
+ d_sniper_W = [["West","rhs_faction_usarmy_d","rhs_group_nato_usarmy_d_infantry","rhs_group_nato_usarmy_d_infantry_squad_sniper"] call d_fnc_GetConfigGroup];
+ d_sniper_G = [["Indep","rhssaf_faction_army","rhssaf_group_army_m10_digital_infantry","rhssaf_group_army_m10_digital_infantry_squad_sniper"] call d_fnc_GetConfigGroup];
#endif
d_veh_a_E = [
diff --git a/co30_Domination.Altis/stringtable.xml b/co30_Domination.Altis/stringtable.xml
index c0c546f8f..c168b5746 100644
--- a/co30_Domination.Altis/stringtable.xml
+++ b/co30_Domination.Altis/stringtable.xml
@@ -11448,7 +11448,7 @@ Chinese>砲擊取消了
points for reviving another player
points for reviving another player
points for reviving another player
-points for reviving another player
+очки за оживление другого игрока
points for reviving another player
@@ -11500,6 +11500,7 @@ Chinese>砲擊取消了
points for resolving the main target mission
очки за выполнение основной задачи
points for resolving the main target mission
+points for resolving the main target mission
points for clearing the main target!
@@ -11508,7 +11509,7 @@ Chinese>砲擊取消了
points for clearing the main target!
points for clearing the main target!
points for clearing the main target!
-points for clearing the main target!
+очки за выполнение основного задания!
points for clearing the main target!
points for clearing the main target!
@@ -11519,7 +11520,7 @@ Chinese>砲擊取消了
points for helping solving the sidemission!
points for helping solving the sidemission!
points for helping solving the sidemission!
-points for helping solving the sidemission!
+очки за помощь в вполнении дополнительного задания (сайд миссии)!
points for helping solving the sidemission!
points for helping solving the sidemission!
diff --git a/mission_sqm/mission_blufor_weferlingen_summer.sqm b/mission_sqm/mission_blufor_weferlingen_summer.sqm
index 957eb32fe..801844602 100644
Binary files a/mission_sqm/mission_blufor_weferlingen_summer.sqm and b/mission_sqm/mission_blufor_weferlingen_summer.sqm differ
diff --git a/mission_sqm/mission_blufor_weferlingen_winter.sqm b/mission_sqm/mission_blufor_weferlingen_winter.sqm
index 805542ecf..7c1caf011 100644
Binary files a/mission_sqm/mission_blufor_weferlingen_winter.sqm and b/mission_sqm/mission_blufor_weferlingen_winter.sqm differ