From a0f98b2e11fc9c1c50e8be8dcee9c000c9c5c3d7 Mon Sep 17 00:00:00 2001 From: Thomas Kooi Date: Mon, 12 Jan 2015 23:27:57 +0100 Subject: [PATCH] Added cse_sys_groups source --- TO_MERGE/cse/sys_groups/CfgAddons.h | 7 + TO_MERGE/cse/sys_groups/CfgFunctions.h | 15 ++ TO_MERGE/cse/sys_groups/CfgVehicles.h | 41 +++ .../cse/sys_groups/Combat_Space_Enhancement.h | 27 ++ TO_MERGE/cse/sys_groups/config.cpp | 19 ++ .../cse/sys_groups/data/icons/icon_column.paa | Bin 0 -> 5625 bytes .../sys_groups/data/icons/icon_diamond.paa | Bin 0 -> 5625 bytes .../cse/sys_groups/data/icons/icon_ech_l.paa | Bin 0 -> 5625 bytes .../cse/sys_groups/data/icons/icon_ech_r.paa | Bin 0 -> 5625 bytes .../cse/sys_groups/data/icons/icon_group.paa | Bin 0 -> 5625 bytes .../cse/sys_groups/data/icons/icon_line.paa | Bin 0 -> 5625 bytes .../data/icons/icon_stag_column.paa | Bin 0 -> 5625 bytes .../cse/sys_groups/data/icons/icon_vee.paa | Bin 0 -> 5625 bytes .../cse/sys_groups/data/icons/icon_wedge.paa | Bin 0 -> 5625 bytes .../functions/fn_canTapShoulder_GRP.sqf | 21 ++ .../functions/fn_setGroupFormation_GRP.sqf | 21 ++ .../functions/fn_setUnitGroupLeader_GRP.sqf | 28 ++ .../functions/fn_tapShoulder_GRP.sqf | 27 ++ .../fn_unitCanJoinTargetGroup_GRP.sqf | 27 ++ .../functions/fn_unitJoinGroup_GRP.sqf | 27 ++ .../functions/fn_unitLeaveGroup_GRP.sqf | 21 ++ .../functions/fn_unitsInGroupLeft_GRP.sqf | 17 ++ TO_MERGE/cse/sys_groups/init_sys_groups.sqf | 80 ++++++ TO_MERGE/cse/sys_groups/stringtable.xml | 251 ++++++++++++++++++ 24 files changed, 629 insertions(+) create mode 100644 TO_MERGE/cse/sys_groups/CfgAddons.h create mode 100644 TO_MERGE/cse/sys_groups/CfgFunctions.h create mode 100644 TO_MERGE/cse/sys_groups/CfgVehicles.h create mode 100644 TO_MERGE/cse/sys_groups/Combat_Space_Enhancement.h create mode 100644 TO_MERGE/cse/sys_groups/config.cpp create mode 100644 TO_MERGE/cse/sys_groups/data/icons/icon_column.paa create mode 100644 TO_MERGE/cse/sys_groups/data/icons/icon_diamond.paa create mode 100644 TO_MERGE/cse/sys_groups/data/icons/icon_ech_l.paa create mode 100644 TO_MERGE/cse/sys_groups/data/icons/icon_ech_r.paa create mode 100644 TO_MERGE/cse/sys_groups/data/icons/icon_group.paa create mode 100644 TO_MERGE/cse/sys_groups/data/icons/icon_line.paa create mode 100644 TO_MERGE/cse/sys_groups/data/icons/icon_stag_column.paa create mode 100644 TO_MERGE/cse/sys_groups/data/icons/icon_vee.paa create mode 100644 TO_MERGE/cse/sys_groups/data/icons/icon_wedge.paa create mode 100644 TO_MERGE/cse/sys_groups/functions/fn_canTapShoulder_GRP.sqf create mode 100644 TO_MERGE/cse/sys_groups/functions/fn_setGroupFormation_GRP.sqf create mode 100644 TO_MERGE/cse/sys_groups/functions/fn_setUnitGroupLeader_GRP.sqf create mode 100644 TO_MERGE/cse/sys_groups/functions/fn_tapShoulder_GRP.sqf create mode 100644 TO_MERGE/cse/sys_groups/functions/fn_unitCanJoinTargetGroup_GRP.sqf create mode 100644 TO_MERGE/cse/sys_groups/functions/fn_unitJoinGroup_GRP.sqf create mode 100644 TO_MERGE/cse/sys_groups/functions/fn_unitLeaveGroup_GRP.sqf create mode 100644 TO_MERGE/cse/sys_groups/functions/fn_unitsInGroupLeft_GRP.sqf create mode 100644 TO_MERGE/cse/sys_groups/init_sys_groups.sqf create mode 100644 TO_MERGE/cse/sys_groups/stringtable.xml diff --git a/TO_MERGE/cse/sys_groups/CfgAddons.h b/TO_MERGE/cse/sys_groups/CfgAddons.h new file mode 100644 index 0000000000..ecd27aa132 --- /dev/null +++ b/TO_MERGE/cse/sys_groups/CfgAddons.h @@ -0,0 +1,7 @@ +class CfgAddons { + class PreloadAddons { + class cse_sys_groups { + list[] = {"cse_sys_groups"}; + }; + }; +}; diff --git a/TO_MERGE/cse/sys_groups/CfgFunctions.h b/TO_MERGE/cse/sys_groups/CfgFunctions.h new file mode 100644 index 0000000000..df6e4cf65e --- /dev/null +++ b/TO_MERGE/cse/sys_groups/CfgFunctions.h @@ -0,0 +1,15 @@ +class CfgFunctions { + class CSE { + class Groups { + file = "cse\cse_sys_groups\functions"; + class unitJoinGroup_GRP { recompile = 1; }; + class unitLeaveGroup_GRP { recompile = 1; }; + class unitsInGroupLeft_GRP { recompile = 1; }; + class unitCanJoinTargetGroup_GRP { recompile = 1; }; + class setGroupFormation_GRP { recompile = 1; }; + class setUnitGroupLeader_GRP { recompile = 1; }; + class canTapShoulder_GRP; + class tapShoulder_GRP; + }; + }; +}; \ No newline at end of file diff --git a/TO_MERGE/cse/sys_groups/CfgVehicles.h b/TO_MERGE/cse/sys_groups/CfgVehicles.h new file mode 100644 index 0000000000..d4b5f957f2 --- /dev/null +++ b/TO_MERGE/cse/sys_groups/CfgVehicles.h @@ -0,0 +1,41 @@ +class CfgVehicles { + class Logic; + class Module_F: Logic { + class ArgumentsBaseUnits { + }; + }; + class cse_sys_groups: Module_F { + scope = 2; + displayName = "Groups [CSE]"; + icon = "\cse\cse_main\data\cse_groups_module.paa"; + category = "cseModules"; + function = "cse_fnc_initalizeModule_F"; + functionPriority = 1; + isGlobal = 1; + isTriggerActivated = 0; + class Arguments { + class allowGroupSwitch { + displayName = "Group switch"; + description = "Allow players to join and leave groups"; + typeName = "BOOL"; + defaultValue = true; + }; + class allowFormationSwitch { + displayName = "Formation actions"; + description = "Group leaders can order formation changes through the action menu"; + typeName = "BOOL"; + defaultValue = true; + }; + class allowShoulderTap { + displayName = "Shoulder Tap"; + description = "Allow usage of shoulder taps"; + typeName = "BOOL"; + defaultValue = false; + }; + }; + class ModuleDescription { + description = "Provides players a serie of actions to join or leave their group, as well as formation changes"; + sync[] = {}; + }; + }; +}; \ No newline at end of file diff --git a/TO_MERGE/cse/sys_groups/Combat_Space_Enhancement.h b/TO_MERGE/cse/sys_groups/Combat_Space_Enhancement.h new file mode 100644 index 0000000000..4b342b3cad --- /dev/null +++ b/TO_MERGE/cse/sys_groups/Combat_Space_Enhancement.h @@ -0,0 +1,27 @@ +#define MENU_KEYBINDING 1 +#define ACTION_KEYBINDING 2 +#define CLIENT_SETTING 3 + +class Combat_Space_Enhancement { + class cfgModules { + class cse_sys_groups { + init = "call compile preprocessFile 'cse\cse_sys_groups\init_sys_groups.sqf';"; + name = "Groups"; + + class Configurations { + class actionTapShoulder_GRP { + type = ACTION_KEYBINDING; + title = $STR_CSE_SHOULDER_TAP_TITLE; + description = $STR_CS_SHOULDER_TAP_DESC; + value[] = {0,0,0,0}; + onPressed = "if ([player, cursorTarget] call cse_fnc_canTapShoulder_GRP) then {[player, cursorTarget] call cse_fnc_tapShoulder_GRP;};"; + }; + }; + }; + }; + + class CustomEventHandlers { + class shoulderTapped {}; // [_caller, _target] + class groupJoined {}; // [_unit, _targetUnit] + }; +}; diff --git a/TO_MERGE/cse/sys_groups/config.cpp b/TO_MERGE/cse/sys_groups/config.cpp new file mode 100644 index 0000000000..35c338f631 --- /dev/null +++ b/TO_MERGE/cse/sys_groups/config.cpp @@ -0,0 +1,19 @@ +#define _ARMA_ +class CfgPatches +{ + class cse_sys_groups + { + units[] = {}; + weapons[] = {}; + requiredVersion = 0.1; + requiredAddons[] = {"cse_f_eh","cse_main"}; + version = "0.10.0_rc"; + author[] = {"Combat Space Enhancement"}; + authorUrl = "http://csemod.com"; + }; +}; + +#include "CfgAddOns.h" +#include "CfgFunctions.h" +#include "CfgVehicles.h" +#include "Combat_Space_Enhancement.h" diff --git a/TO_MERGE/cse/sys_groups/data/icons/icon_column.paa b/TO_MERGE/cse/sys_groups/data/icons/icon_column.paa new file mode 100644 index 0000000000000000000000000000000000000000..e10bf80cd19bbd6b7b19ca06558dac8342c7f0c4 GIT binary patch literal 5625 zcmeHL&1+Lx6hAL*zz~8(5;qc>(smYsF6~Ca8Q<=>b>@1FS>< zUg3XxO@IJE3y0LC1Tam%vSwq7y55KoJsw}Ra+Tx~K^GtW*vq(ayo=GkU_=Qbe<}Bc z$4`zwQ>B@3qzOL`qZOak_a7e0T9L#y|JC>M-5I&n%XmNi)^dQfU@7OvOuKK|duqnl z-vM9t%KVP6ewcZUCE#NDZcW3D<2%OyDZ$$9=Y#nB4VN&-%N9Gu@hXzFa<5t6!8>b= zKi7V1eaeSm@t)qU=ZIe|V6WndSF!%|*ss5d&2SsnZ#kgM5DYb#r=UYvQzrs(<9a)q8YWVdm_Wf7iZU55mP>=li>T%5}VohhL3m*U3k`N{8Q;!r%IQV7)(- zcm%lor96X20ON0+|JTb8FPVn%1@?bD{OU&ltE{kKN}y){jc44asN-HTiy?CYaY}C?tgi_|ETj0_rGZ!a}6B+{G(-UzS&Q! zp7=*h(`31mUH3xRX?&f3|Fl29NO)I$r!_vz>!3Y(_iOs~e6+n@y!`$_zN(%nzR%%% z(7fyQ1m+s7aVK)*0JEry+5+NU?@GkY*l7o!ZI zIx6N~Cju8j@O56|GX z(a*ZU`9JWpD%!-qlXmte<;0?3fW7T+GP7%$1PmWCbQ;@l#KH1hUe4w3usm2U?o^87 z2k_q*4?tEF3XS&n!)6Wl(BZ2p|2DqWEdP!E4hNgHxqQF2jhnS%bX~*y#ot;E;PV+; zy)}8^_ zw(pEDTw+ZAvKiMN`|F{f0u@VGc!SISWXR~-wyvMDuAh)HT%tMY+kP6YJPo0na4E|+ zvA4%xnHBtsWRc z%HwELeVj<;|H1#rCUnxo_@^#g*DgEuAkeq{c&PGZ2=&Q6WZ5IdFJ`ZpN8kv}%@mCO zRv!KJ?mw9QP#58!{vG)7&jG@-YqtFN?$P__2m^Elrr`YTfeVjpIl$U%H}0sI&mZ9L RV=-fSNXo7I2>|?~_6Y#SoKXM( literal 0 HcmV?d00001 diff --git a/TO_MERGE/cse/sys_groups/data/icons/icon_diamond.paa b/TO_MERGE/cse/sys_groups/data/icons/icon_diamond.paa new file mode 100644 index 0000000000000000000000000000000000000000..2e897357a1c11af7d70414a3779ea74cfb7b5493 GIT binary patch literal 5625 zcmd5=PiPZa82={ebS))VmS!#@4%l9DS(aUM3izU!T2MA+lM+NEi9i`?Y)oFa8wJFlsqY^nKXVxzdr5b|=O@QrTBMn9_)y~; zJU^*@`AMffH7y6ltA1ATdgTisIY2&$T~*wG`>$6o|AsB6d`JoDC=Bu@99G2!_AB04 z!^~F`_lVv;4{UsN_XNk>E&nkCo`qW@{b!v8Xg!^BruUOq?e@(t?$ zp!2nQw6Jrdu+8J)S>sr%FBPA!v??5X*^AVoh3$6>q;BtzPQFNOsa1L068ZDu^INW! zZWR7Ae-QqZ>gf3StiW1nrC53BuD6#zk=kCq+Q+?oky?LzUiOA9*Ggvo)%$e}%2`>& ztxfCgX^w~Ok82MvnTq23`LETR>(=fHg=^QhR=0LeTg?+3yZ-RXcSa6h4!{`Od;Y6o z>3-*reXW!zRHgGyD;>Qq<6*|1Os2Zt5AEoOP!Ge57Z+TtH@DlZr})F^behYZYVd!5 zxb_CEKVot(e8iTL;^B6B?Yrc|_x-~C^WOiY$wWPqzsUjO<#v1R?bTBE)r(X=wuYed zj;B+frZR~SAqFT2Kk-2a9e{peaGH*t>{@J_UhAjF+G3OeY|w?Z-DF)F+K&M)8Es|k z9KKAJkLdUy&#~oe)6&<_+_Jcncjyv_JhwMIx6DYf-E4dF8F4I7d}B&LMA(i0O3Tcj zl&*bW#YkX@xf6To4fy>9Y z%!^NM?!M&Mi{DG0D?eQbN?%)}<#MPR&53JoZp*w{eb{==?Tv5UyzoTQ_u_Zu0D*ua z)!V`O7%jhB*pB8z{G;W^t;((5ubHwv!(dsCsUFnnHL%bQH*(Bp;i0x4Dyzzy_Z$>(bbMOrypn`cIAKXEQFJZjV{k1pO2!qJ-ib z-1etJV!*N{H^iFQQzkdE*z;!VUtVM!lfHtR=-VI7Yaebu_=~$0{OM7#s{R|}Sk`9- zN95)th8R%b_3!voXMhR)*U59B=m&&J`UZn`BY%|8DUnu(4@3xUoaOqzHgHWAFQ<>d z5n7wCbM(@A?TeR~txyo)o9l@GxLYB-xCw9u?%W^2_g=yP!O&M{emhQ=I0tWLNAN_& We8yn*Oa0mE)IW`#U*Z7xN9}*%vS0N8 literal 0 HcmV?d00001 diff --git a/TO_MERGE/cse/sys_groups/data/icons/icon_ech_l.paa b/TO_MERGE/cse/sys_groups/data/icons/icon_ech_l.paa new file mode 100644 index 0000000000000000000000000000000000000000..c2dea17c6caf1933c50683ad9922e3545f0e9a8e GIT binary patch literal 5625 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 literal 0 HcmV?d00001 diff --git a/TO_MERGE/cse/sys_groups/data/icons/icon_stag_column.paa b/TO_MERGE/cse/sys_groups/data/icons/icon_stag_column.paa new file mode 100644 index 0000000000000000000000000000000000000000..cff3cb9b3e30e8ec0daa8021401470e1993e3089 GIT binary patch literal 5625 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 NQO9|BE$2$;??19TsW|`u literal 0 HcmV?d00001 diff --git a/TO_MERGE/cse/sys_groups/functions/fn_canTapShoulder_GRP.sqf b/TO_MERGE/cse/sys_groups/functions/fn_canTapShoulder_GRP.sqf new file mode 100644 index 0000000000..2b819ef863 --- /dev/null +++ b/TO_MERGE/cse/sys_groups/functions/fn_canTapShoulder_GRP.sqf @@ -0,0 +1,21 @@ +/** + * fn_canTapShoulder_GRP.sqf + * @Descr: Check if caller can tap targets shoulder. + * @Author: Glowbal + * + * @Arguments: [caller OBJECT, target OBJECT] + * @Return: BOOL true if caller can tab target shoulder + * @PublicAPI: true + */ + + +private ["_caller", "_target"]; +_caller = _this select 0; +_target = _this select 1; + +if (isnil "CSE_SYS_GROUPS_ALLOW_SHOULDER_TAPS_GRP") then { + CSE_SYS_GROUPS_ALLOW_SHOULDER_TAPS_GRP = false; +}; +if !(CSE_SYS_GROUPS_ALLOW_SHOULDER_TAPS_GRP) exitwith { false }; + +(_target isKindOf "CAManBase" && {[_target] call cse_fnc_isAwake} && {[_caller] call cse_fnc_canInteract} && {_caller distance _target < 3} && {_caller != _target}) \ No newline at end of file diff --git a/TO_MERGE/cse/sys_groups/functions/fn_setGroupFormation_GRP.sqf b/TO_MERGE/cse/sys_groups/functions/fn_setGroupFormation_GRP.sqf new file mode 100644 index 0000000000..7ac9f37882 --- /dev/null +++ b/TO_MERGE/cse/sys_groups/functions/fn_setGroupFormation_GRP.sqf @@ -0,0 +1,21 @@ +/** + * fn_setGroupFormation_GRP.sqf + * @Descr: N/A + * @Author: Glowbal + * + * @Arguments: [] + * @Return: + * @PublicAPI: false + */ + +private ["_unit", "_formation", "_groupUnits"]; +_unit = [_this, 0, objNull, [objNull]] call BIS_fnc_Param; +_formation = [_this, 1, "", [""]] call BIS_fnc_Param; + + +if (([_unit] call cse_fnc_canInteract) && (formationLeader _unit == _unit)) then { + (group _unit) setFormation _formation; + [format["Setting formation of group %1 to %2",group _unit, _formation]] call cse_fnc_debug; +} else { + [format["cant set formation of group %1 to %2 because: %3 %4",group _unit, _formation, ([_unit] call cse_fnc_canInteract), (formationLeader _unit == _unit)]] call cse_fnc_debug; +}; \ No newline at end of file diff --git a/TO_MERGE/cse/sys_groups/functions/fn_setUnitGroupLeader_GRP.sqf b/TO_MERGE/cse/sys_groups/functions/fn_setUnitGroupLeader_GRP.sqf new file mode 100644 index 0000000000..436bc6b5c9 --- /dev/null +++ b/TO_MERGE/cse/sys_groups/functions/fn_setUnitGroupLeader_GRP.sqf @@ -0,0 +1,28 @@ +/** + * fn_setUnitGroupLeader_GRP.sqf + * @Descr: Sets unit as the leader of units group. + * @Author: Glowbal + * + * @Arguments: [unit OBJECT] + * @Return: void + * @PublicAPI: true + */ + +private ["_unit","_groupMembers"]; +_unit = _this select 0; +if !(_unit isKindOf "CAManBase") exitwith {}; + +_groupMembers = units group _unit; +{ + if (_x != _unit) then { + [_x] call cse_fnc_unitLeaveGroup_GRP; + }; +}foreach _groupMembers; + +{ + if (_x != _unit) then { + [_x, _unit] call cse_fnc_unitJoinGroup_GRP; + }; +}foreach _groupMembers; + +true; \ No newline at end of file diff --git a/TO_MERGE/cse/sys_groups/functions/fn_tapShoulder_GRP.sqf b/TO_MERGE/cse/sys_groups/functions/fn_tapShoulder_GRP.sqf new file mode 100644 index 0000000000..02a3a58bf6 --- /dev/null +++ b/TO_MERGE/cse/sys_groups/functions/fn_tapShoulder_GRP.sqf @@ -0,0 +1,27 @@ +/** + * fn_tapShoulder_GRP.sqf + * @Descr: Tap units shoulder. + * @Author: Glowbal + * + * @Arguments: [caller OBJECT, target OBJECT (Unit that will be tapped)] + * @Return: void + * @PublicAPI: true + */ + +private ["_caller", "_target"]; +_caller = _this select 0; +_target = _this select 1; + +// If the target isn't local, we need to execute this function on the targets locality. +if (!local _target) exitwith { + [[_caller, _target], "cse_fnc_tapShoulder_GRP", _target] call BIS_fnc_MP; +}; +[[_caller, _target],"shoulderTapped"] call cse_fnc_customEventHandler_F; + +// No need to execute this for non player units. We exit here for non player units, because we do want to execute the custom eventhandler. +if (!isPlayer _target) exitwith {}; + +// Display information for player to indicate that players should was tapped. +// This is done through a camShake and a display Message on the screen. +addCamShake [4, 0.5, 4]; +[_target,localize "STR_CS_SHOULDER_TAP_GRP",format[localize "STR_CSE_SHOULDER_TAPPED_GRP", [_caller] call cse_fnc_getName]] call cse_fnc_sendDisplayMessageTo; \ No newline at end of file diff --git a/TO_MERGE/cse/sys_groups/functions/fn_unitCanJoinTargetGroup_GRP.sqf b/TO_MERGE/cse/sys_groups/functions/fn_unitCanJoinTargetGroup_GRP.sqf new file mode 100644 index 0000000000..133da4f797 --- /dev/null +++ b/TO_MERGE/cse/sys_groups/functions/fn_unitCanJoinTargetGroup_GRP.sqf @@ -0,0 +1,27 @@ +/** + * fn_unitCanJoinTargetGroup_GRP.sqf + * @Descr: Check if a unit can join the target group + * @Author: Glowbal + * + * @Arguments: [unit OBJECT, target OBJECT] + * @Return: BOOL True if unit can join the targets group + * @PublicAPI: true + */ + +private ["_unit", "_targetUnit", "_currentGroup", "_targetGroup", "_return"]; +_unit = [_this, 0, objNull, [objNull]] call BIS_fnc_Param; +_targetUnit = [_this, 1, objNull, [objNull]] call BIS_fnc_Param; + +_return = false; +if (_unit != _targetUnit) then { + if (_unit iskindof "CaManBase" && (_targetUnit isKindOf "CAManBase")) then { + if (side _unit == side _targetUnit) then { + _currentGroup = group _unit; + _targetGroup = group _targetUnit; + if (_currentGroup != _targetGroup) then { + _return = true + }; + }; + }; +}; +_return \ No newline at end of file diff --git a/TO_MERGE/cse/sys_groups/functions/fn_unitJoinGroup_GRP.sqf b/TO_MERGE/cse/sys_groups/functions/fn_unitJoinGroup_GRP.sqf new file mode 100644 index 0000000000..9e34fdd808 --- /dev/null +++ b/TO_MERGE/cse/sys_groups/functions/fn_unitJoinGroup_GRP.sqf @@ -0,0 +1,27 @@ +/** + * fn_unitJoinGroup_GRP.sqf + * @Descr: unit joins target group and removes old group if no members are left. + * @Author: Glowbal + * + * @Arguments: [unit OBJECT, target OBJECT] + * @Return: void + * @PublicAPI: true + */ + +private ["_unit", "_targetUnit", "_currentGroup", "_targetGroup"]; +_unit = [_this, 0, objNull, [objNull]] call BIS_fnc_Param; +_targetUnit = [_this, 1, objNull, [objNull]] call BIS_fnc_Param; + +if ([_unit, _targetUnit] call cse_fnc_unitCanJoinTargetGroup_GRP) then { + _currentGroup = group _unit; + _targetGroup = group _targetUnit; + + if (_currentGroup != _targetGroup) then { + [_unit] joinSilent _targetGroup; + if (count (units _currentGroup) == 0) then { + deleteGroup _currentGroup; + }; + + [[_unit, _targetUnit],"groupJoined"] call cse_fnc_customEventHandler_F; + }; +}; \ No newline at end of file diff --git a/TO_MERGE/cse/sys_groups/functions/fn_unitLeaveGroup_GRP.sqf b/TO_MERGE/cse/sys_groups/functions/fn_unitLeaveGroup_GRP.sqf new file mode 100644 index 0000000000..71bc13cdf1 --- /dev/null +++ b/TO_MERGE/cse/sys_groups/functions/fn_unitLeaveGroup_GRP.sqf @@ -0,0 +1,21 @@ +/** + * fn_unitLeaveGroup_GRP.sqf + * @Descr: unit leaves current group and joins an empty group. + * @Author: Glowbal + * + * @Arguments: [unit OBJECT] + * @Return: void + * @PublicAPI: true + */ + +private ["_unit", "_currentGroup", "_newgroup"]; +_unit = [_this, 0, objNull, [objNull]] call BIS_fnc_Param; +if (_unit iskindof "CaManBase" && [_unit] call cse_fnc_canInteract) then { + _currentGroup = group _unit; + _newgroup = createGroup (side _unit); + [_unit] joinSilent _newgroup; + + if (count (units _currentGroup) == 0) then { + deleteGroup _currentGroup; + }; +}; \ No newline at end of file diff --git a/TO_MERGE/cse/sys_groups/functions/fn_unitsInGroupLeft_GRP.sqf b/TO_MERGE/cse/sys_groups/functions/fn_unitsInGroupLeft_GRP.sqf new file mode 100644 index 0000000000..c8553495c4 --- /dev/null +++ b/TO_MERGE/cse/sys_groups/functions/fn_unitsInGroupLeft_GRP.sqf @@ -0,0 +1,17 @@ +/** + * fn_unitsInGroupLeft_GRP.sqf + * @Descr: Check if the group has more as one member + * @Author: Glowbal + * + * @Arguments: [unit OBJECT] + * @Return: BOOL Returns true if group of unit contains more units as 1 + * @PublicAPI: true + */ + +private ["_unit", "_currentGroup", "_newgroup"]; +_unit = [_this, 0, objNull, [objNull]] call BIS_fnc_Param; +if (_unit iskindof "CaManBase") then { + (count (units (group _unit)) > 1) +} else { + false; +}; \ No newline at end of file diff --git a/TO_MERGE/cse/sys_groups/init_sys_groups.sqf b/TO_MERGE/cse/sys_groups/init_sys_groups.sqf new file mode 100644 index 0000000000..201d9867b8 --- /dev/null +++ b/TO_MERGE/cse/sys_groups/init_sys_groups.sqf @@ -0,0 +1,80 @@ + +private ["_args", "_entries"]; +_args = _this; +if (!hasInterface) exitwith {}; +CSE_SYS_GROUPS_ALLOW_GROUPSWITCH_GRP = false; +CSE_SYS_GROUPS_ALLOW_FORMATIONSWITCH_GRP = false; +CSE_SYS_GROUPS_ALLOW_SHOULDER_TAPS_GRP = false; + +{ + if (_x select 0 == "allowGroupSwitch") then { + CSE_SYS_GROUPS_ALLOW_GROUPSWITCH_GRP = (_x select 1); + }; + if (_x select 0 == "allowFormationSwitch") then { + CSE_SYS_GROUPS_ALLOW_FORMATIONSWITCH_GRP = (_x select 1); + }; + if (_x select 0 == "allowShoulderTap") then { + CSE_SYS_GROUPS_ALLOW_SHOULDER_TAPS_GRP = (_x select 1); + }; +}foreach _args; +waituntil {!isnil "cse_gui"}; + +if (CSE_SYS_GROUPS_ALLOW_GROUPSWITCH_GRP) then { + _entries = [ + [localize "STR_CSE_GROUP_LEAVEGRP_SHORT", {([player] call cse_fnc_unitsInGroupLeft_GRP)}, "cse\cse_sys_groups\data\icons\icon_group.paa", {closeDialog 0; [player] call cse_fnc_unitLeaveGroup_GRP}, localize "STR_CSE_GROUP_LEAVEGRP_TOOLTIP"], + + [localize "STR_CSE_GROUP_REQUESTJOINGRP_SHORT", {(([_this select 0, _this select 1] call cse_fnc_unitCanJoinTargetGroup_GRP))}, "cse\cse_sys_groups\data\icons\icon_group.paa", { + closeDialog 0; + [player, _this select 1, "cse_sys_Groups_requestJoinGrp", "STR_CSE_GROUP_REQUESTJOINGRP_MESSAGE", "if !(_this select 2) exitwith {}; [player, _this select 1] call cse_fnc_unitJoinGroup_GRP;"] call cse_fnc_sendRequest_f; + }, localize "STR_CSE_GROUP_REQUESTJOINGRP_TOOLTIP"] + ]; + ["ActionMenu","group_actions", _entries ] call cse_fnc_addMultipleEntriesToRadialCategory_F; +}; + +if (CSE_SYS_GROUPS_ALLOW_GROUPSWITCH_GRP) then { + cse_displaygroupActions_switchFormationMenu_GRP = { + [ _this select 3, + [ + [localize "STR_CSE_GROUP_FORM_COLUMN_SHORT", "cse\cse_sys_groups\data\icons\icon_column.paa", {closeDialog 0; [player, "COLUMN"] call CSE_fnc_setGroupFormation_GRP}, true, localize "STR_CSE_GROUP_FORM_COLUMN_TOOLTIP"], + [localize "STR_CSE_GROUP_FORM_STAG_SHORT","cse\cse_sys_groups\data\icons\icon_stag_column.paa", {closeDialog 0; [player, "STAG COLUMN"] call CSE_fnc_setGroupFormation_GRP}, true, localize "STR_CSE_GROUP_FORM_STAG_TOOLTIP"], + [localize "STR_CSE_GROUP_FORM_WEDGE_SHORT", "cse\cse_sys_groups\data\icons\icon_wedge.paa", {closeDialog 0; [player, "WEDGE"] call CSE_fnc_setGroupFormation_GRP}, true, localize "STR_CSE_GROUP_FORM_WEDGE_TOOLTIP"], + [localize "STR_CSE_GROUP_FORM_ECHL_SHORT", "cse\cse_sys_groups\data\icons\icon_ech_l.paa", {closeDialog 0; [player, "ECH LEFT"] call CSE_fnc_setGroupFormation_GRP}, true, localize "STR_CSE_GROUP_FORM_ECHL_TOOLTIP"], + [localize "STR_CSE_GROUP_FORM_ECHR_SHORT", "cse\cse_sys_groups\data\icons\icon_ech_r.paa", {closeDialog 0; [player, "ECH RIGHT"] call CSE_fnc_setGroupFormation_GRP}, true, localize "STR_CSE_GROUP_FORM_ECHR_TOOLTIP"], + [localize "STR_CSE_GROUP_FORM_VEE_SHORT", "cse\cse_sys_groups\data\icons\icon_vee.paa", {closeDialog 0; [player, "VEE"] call CSE_fnc_setGroupFormation_GRP}, true, localize "STR_CSE_GROUP_FORM_VEE_TOOLTIP"], + [localize "STR_CSE_GROUP_FORM_LINE_SHORT", "cse\cse_sys_groups\data\icons\icon_line.paa", {closeDialog 0; [player, "LINE"] call CSE_fnc_setGroupFormation_GRP}, true, localize "STR_CSE_GROUP_FORM_LINE_TOOLTIP"], + [localize "STR_CSE_GROUP_FORM_FILE_SHORT", "cse\cse_sys_groups\data\icons\icon_column.paa", {closeDialog 0; [player, "FILE"] call CSE_fnc_setGroupFormation_GRP}, true, localize "STR_CSE_GROUP_FORM_FILE_TOOLTIP"], + [localize "STR_CSE_GROUP_FORM_DIAMOND_SHORT", "cse\cse_sys_groups\data\icons\icon_diamond.paa", {closeDialog 0; [player, "DIAMOND"] call CSE_fnc_setGroupFormation_GRP}, true, localize "STR_CSE_GROUP_FORM_DIAMOND_TOOLTIP"] + ], + _this select 1, CSE_SELECTED_RADIAL_OPTION_N_GUI, true + ] call cse_fnc_openRadialSecondRing_GUI; + }; + + _entries = [ + [localize "STR_CSE_GROUP_SWITCHFORMATION_SHORT", {(([player] call cse_fnc_canInteract) && (formationLeader player == player))}, "cse\cse_sys_groups\data\icons\icon_group.paa", cse_displaygroupActions_switchFormationMenu_GRP, localize "STR_CSE_GROUP_SWITCHFORMATION_TOOLTIP"] + ]; + + ["ActionMenu","group_actions", _entries ] call cse_fnc_addMultipleEntriesToRadialCategory_F; + + + _requestGroupLeader = { + closeDialog 0; + [player, leader (group player), "cse_sys_Groups_requestLeader", "STR_CSE_GROUP_REQUESTLEADER_MESSAGE", "if !(_this select 2) exitwith {}; + [player] call cse_fnc_setUnitGroupLeader_GRP; + "] call cse_fnc_sendRequest_f; + }; + + _entries = [ + [localize "STR_CSE_GROUP_REQUESTLEADER_SHORT", {(([player] call cse_fnc_canInteract) && (leader (group player) != player))}, "cse\cse_sys_groups\data\icons\icon_group.paa", _requestGroupLeader, localize "STR_CSE_GROUP_REQUESTLEADER_TOOLTIP"] + ]; + + ["ActionMenu","group_actions", _entries ] call cse_fnc_addMultipleEntriesToRadialCategory_F; +}; + +if (CSE_SYS_GROUPS_ALLOW_SHOULDER_TAPS_GRP) then { + + _entries = [ + [localize "STR_CSE_SHOULDER_TAP_TITLE", {(([player, _this select 1] call cse_fnc_canTapShoulder_GRP) && (isPlayer (_this select 1)))}, CSE_ICON_PATH + "icon_interact.paa", {closeDialog 0; [player, _this select 1] call cse_fnc_tapShoulder_GRP;}, localize "STR_CSE_SHOULDER_TAP_TITLE"] + ]; + + ["ActionMenu","interaction", _entries ] call cse_fnc_addMultipleEntriesToRadialCategory_F; +}; \ No newline at end of file diff --git a/TO_MERGE/cse/sys_groups/stringtable.xml b/TO_MERGE/cse/sys_groups/stringtable.xml new file mode 100644 index 0000000000..cc4bc03ee8 --- /dev/null +++ b/TO_MERGE/cse/sys_groups/stringtable.xml @@ -0,0 +1,251 @@ + + + + + + Column + Column + Kolonne + Kolumna + Columna + + + Stag Column + Stag Column + Gest.Kolonne + Kolumna rozpr. + Columna Esc. + + + + Wedge + Wedge + Keil + Klin + Cuña + + + + Echelon L + Echelon L + Staffel L + Eszelon L + Escalón Izq. + + + + Echelon R + Echelon R + Staffel R + Eszelon P + Escalon Der. + + + + Vee + Vee + V-Form. + Formacja V + Formación V + + + + Line + Line + Linie + Tyraliera + Línea + + + + File + File + Komp.Kolonne + Plik + Hilera + + + Diamond + Diamond + Raute + Diament + Diamante + + + + Column + Column + Kolonnenformation + Formacja kolumna/Polish> + Columna + + + Staggered Column + Staggered Column + Gestaffelte Kolonne + Formacja rozproszona kolumna + Columna Escalonada + + + + Wedge formation + Wedge formation + Keilformation + Formacja klin + Formación Cuña + + + + Echelon Left + Echelon Left + Staffel Links + Formacja eszelon lewy + Escalón Izquierda + + + + Echelon Right + Echelon Right + Staffel Rechts + Formacja eszelon prawy + Escalón Derecha + + + + Vee formation + Vee formation + V-Formation + Formacja w kształcie litery 'V' + Formación V + + + + Line formation + Line formation + Linienformation + Formacja linia + Formación Línea + + + + File formation + File formation + Kompakte Kolonnenformation + Formacja kompaktowa kolumna + Formación Hilera + + + Diamond formation + Diamond formation + Rautenformation + Formacja obrona okrężna + Formación Diamante + + + + + Formations + Formations + Formationen + Formacje + Formaciones + + + Order Formation + Order Formation + Formationsbefehl + Zmień formację + Ordenar Formaciones + + + + + + Lead Group + Lead Group + Gruppe anführen + Przejmij dowodzenie + Grupo de cabeza + + + Request group leader to take over group leader + Request group leader to take over group leader + Gruppenführerschaft anfordern + Poproś aktualnego dowódcę o przejęcie roli dowodzenia + Requerir un lider para que tome el control del grupo + + + %1 requests to be leader of this group + %1 requests to be leader of this group + %1 bittet um Gruppenführerschaft + %1 prosi o przejęcie dowodzenia nad tą grupą + %1 pide liderazgo de grupo + + + + + + Your shoulder was tapped! + Your shoulder was tapped! + Jemand hat dich angestupst! + Zostałeś klepnięty w ramię! + Te han tocado el hombro¡ + + + Shoulder Tap + Shoulder Tap + Schultergriff + Klepnij w ramię + Toque en el hombro + + + + + + Shoulder Tap + Shoulder Tap + Schultergriff + Klepanie w ramię + Toque en el hombro + + + When pressed, you tap the shoulder of the unit in front of you. This depends on the Shoulder Tap settings from the Groups Module. + When pressed, you tap the shoulder of the unit in front of you. This depends on the Shoulder Tap settings from the Groups Module. + Stupst die Einheit vor dir an der Schulter an. Dies hängt von den Schulter-Check Einstellungen im Gruppenmodul ab. + Przy użyciu klepniesz w ramię osobę przed tobą. Ta opcja zależna jest od ustawień klepania w ramię w module grupy. + Cuando se selecciona, tocas el hombro de la unidad que tengas en frente. Depende de la configuración del Módulo Grupos. + + + + + + Join Group + Dołącz do grupy + Unirse al Grupo + + + Join target Group + Dołączasz do wybranej grupy + Unirse al Grupo + + + %1 requests to join your group + %1 pragnie dołączyć do twojej grupy + %1 pide unirse a su grupo + + + + + Leave Group + Opuść grupę + Salir del Grupo + + + Leave Current Group + Opuszczasz aktualną grupę + Salir del Grupo + + + + +