mad_cheese 593 Posted September 30, 2016 Is it possible to return the position and "page" of the command bar? I would like to try and make overlay buttons* for C2's radial menu that could select AI-units by mouseclick. I would prefer this over making a whole new set of buttons when there's already a customizable element in the HUD for that But for that to work I would need to know where the command bar is located on the screen, since it can be changed Also, if the player's squad counts +10 units, is there a way to return/set the current command bar page? I could not find any command or function except showing/hiding the commandbar and a scriptcommand to switch to High Command. Thank you *for the lack of a better word Share this post Link to post Share on other sites
ceeeb 147 Posted September 30, 2016 You can return the screen location and size of the command bar using these commands: _barX = profilenamespace getvariable 'IGUI_GRID_BAR_X'; _barY = profilenamespace getvariable 'IGUI_GRID_BAR_Y'; _barW = profilenamespace getvariable 'IGUI_GRID_BAR_W'; _barH = profilenamespace getvariable 'IGUI_GRID_BAR_H'; But I don't know any way to return what units displayed on the command bar (eg, units 1-10, or 11-20). Maybe you could infer the bar contents by capturing keypress of F11, F12 (but the keys can be changed too, potentially the keys could have multiple functions bound to them, but that's unlikely). If desperate, you can force reset the bar to units 1-10 by using teamswitch, probably by playing with group/leadership too. 1 Share this post Link to post Share on other sites
marceldev89 89 Posted September 30, 2016 Your best bet would be to get the configs for the command bar from an AllInOne config dump and work from there. Check visibility of GUI objects (e.g. the 11th box, highlighted boxes) to determine the state of the command bar. EDIT: Seems like the command bar has a template defined in config (http://pastebin.com/SuScG9WN) CfgInGameUI >> CommandBarand is handled further by the engine. :( Perhaps it's possible to find the controls with allDisplays and allControls. 1 Share this post Link to post Share on other sites
mad_cheese 593 Posted September 30, 2016 thanks so much guys! that's really insightful. I need to dig into these controls. If I could return the unit's number with ctrlText somehow! if the first button would have the number 11 that would mean it's page 2. Haha that's quite the haystack to dig through. But maybe I can just use the position to create a Controls Group that completely covers the original. Or maybe it's even best to temporarily hide the original commandbar and just create the buttons :| Share this post Link to post Share on other sites
mad_cheese 593 Posted October 1, 2016 sorry to bother again, I couldn't quite let this one go yet. Digging through the BIS ui-Pbo's, all I found was this (taken from config.cpp in ui_f): class CfgInGameUI { imageCornerElement = "\A3\ui_f\data\igui\cfg\imageCornerElement_ca.paa"; xboxStyle = 0; colorBackground[] = {"(profilenamespace getvariable ['IGUI_BCG_RGB_R',0])", "(profilenamespace getvariable ['IGUI_BCG_RGB_G',1])", "(profilenamespace getvariable ['IGUI_BCG_RGB_B',1])", "(profilenamespace getvariable ['IGUI_BCG_RGB_A',0.8])"}; colorBackgroundCommand[] = {1, 1, 1, 1}; colorBackgroundHelp[] = {1, 1, 1, 1}; colorText[] = {"(profilenamespace getvariable ['IGUI_TEXT_RGB_R',0])", "(profilenamespace getvariable ['IGUI_TEXT_RGB_G',1])", "(profilenamespace getvariable ['IGUI_TEXT_RGB_B',1])", "(profilenamespace getvariable ['IGUI_TEXT_RGB_A',0.8])"}; //-- [...] I got rid of other entries class CommandBar { left = "(profilenamespace getvariable [""IGUI_GRID_BAR_X"", (safezoneX + 1 * ( ((safezoneW / safezoneH) min 1.2) / 40))])"; top = "(profilenamespace getvariable [""IGUI_GRID_BAR_Y"", (safezoneY + safezoneH - 4.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25))])"; width = "(36 * ( ((safezoneW / safezoneH) min 1.2) / 40))"; height = "(4 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25))"; imageDefaultWeapons = "A3\ui_f\data\igui\cfg\commandbar\imageDefaultWeapons_ca.paa"; imageNoWeapons = "A3\ui_f\data\igui\cfg\commandbar\imageNoWeapons_ca.paa"; imageCommander = "A3\ui_f\data\igui\cfg\commandbar\imageCommander_ca.paa"; imageDriver = "A3\ui_f\data\igui\cfg\commandbar\imageDriver_ca.paa"; imageGunner = "A3\ui_f\data\igui\cfg\commandbar\imageGunner_ca.paa"; imageCargo = "A3\ui_f\data\igui\cfg\commandbar\imageCargo_ca.paa"; dimm = 0.3; colorRedTeam[] = {1.0, 0, 0, 1.0}; colorBlueTeam[] = {0, 0, 1.0, 1.0}; colorGreenTeam[] = {0.259, 0.463, 0.149, 1}; colorYellowTeam[] = {0.8, 0.8, 0, 1.0}; colorWhiteTeam[] = {0.95, 0.95, 0.95, 1}; class prevPage { x = "0 * ( ((safezoneW / safezoneH) min 1.2) / 40)"; y = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; w = "0.5 * ( ((safezoneW / safezoneH) min 1.2) / 40)"; h = "2 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; color[] = {0.259, 0.463, 0.149, 1}; texture = "A3\ui_f\data\igui\cfg\commandbar\prevPage_ca.paa"; }; class nextPage { x = "0 * ( ((safezoneW / safezoneH) min 1.2) / 40)"; y = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; w = "0.5 * ( ((safezoneW / safezoneH) min 1.2) / 40)"; h = "2 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; color[] = {0.259, 0.463, 0.149, 1}; texture = "A3\ui_f\data\igui\cfg\commandbar\nextPage_ca.paa"; }; class UnitInfo { font = "FontMono"; class VehicleNumberBackground { texture = "\a3\Ui_f\data\IGUI\Cfg\CommandBar\vehicleNumberBackground_ca.paa"; color[] = {"(profilenamespace getvariable ['IGUI_BCG_RGB_R',0])", "(profilenamespace getvariable ['IGUI_BCG_RGB_G',1])", "(profilenamespace getvariable ['IGUI_BCG_RGB_B',1])", "(profilenamespace getvariable ['IGUI_BCG_RGB_A',0.8])"}; x = "0 * ( ((safezoneW / safezoneH) min 1.2) / 40)"; y = "0 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; w = "3 * ( ((safezoneW / safezoneH) min 1.2) / 40)"; h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; }; class UnitNumberBackground { texture = "\a3\Ui_f\data\IGUI\Cfg\CommandBar\unitNumberBackground_ca.paa"; color[] = {"(profilenamespace getvariable ['IGUI_BCG_RGB_R',0])", "(profilenamespace getvariable ['IGUI_BCG_RGB_G',1])", "(profilenamespace getvariable ['IGUI_BCG_RGB_B',1])", "(profilenamespace getvariable ['IGUI_BCG_RGB_A',0.8])"}; x = "0 * ( ((safezoneW / safezoneH) min 1.2) / 40)"; y = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; w = "3 * ( ((safezoneW / safezoneH) min 1.2) / 40)"; h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; }; class UnitNameBackground { textureNormal = "\a3\Ui_f\data\IGUI\Cfg\CommandBar\unitNameBackground_normal_ca.paa"; texturePlayer = "\a3\Ui_f\data\IGUI\Cfg\CommandBar\unitNameBackground_normal_ca.paa"; textureSelected = "\a3\Ui_f\data\IGUI\Cfg\CommandBar\unitNameBackground_selected_ca.paa"; textureFocus = "\a3\Ui_f\data\IGUI\Cfg\CommandBar\unitNameBackground_selected_ca.paa"; colorNormal[] = {"(profilenamespace getvariable ['IGUI_BCG_RGB_R',0])", "(profilenamespace getvariable ['IGUI_BCG_RGB_G',1])", "(profilenamespace getvariable ['IGUI_BCG_RGB_B',1])", 0.8}; colorPlayer[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.77])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.51])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.08])", 0.4}; colorFocus[] = {"(profilenamespace getvariable ['IGUI_BCG_RGB_R',0])", "(profilenamespace getvariable ['IGUI_BCG_RGB_G',1])", "(profilenamespace getvariable ['IGUI_BCG_RGB_B',1])", 0.8}; colorSelected[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.77])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.51])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.08])", 0.8}; x = "0 * ( ((safezoneW / safezoneH) min 1.2) / 40)"; y = "2 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; w = "3 * ( ((safezoneW / safezoneH) min 1.2) / 40)"; h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; colorText[] = {1, 1, 1, 0.3}; }; class CommandBackground { texture = "\a3\Ui_f\data\IGUI\Cfg\CommandBar\commandBackground_ca.paa"; color[] = {"(profilenamespace getvariable ['IGUI_BCG_RGB_R',0])", "(profilenamespace getvariable ['IGUI_BCG_RGB_G',1])", "(profilenamespace getvariable ['IGUI_BCG_RGB_B',1])", "(profilenamespace getvariable ['IGUI_BCG_RGB_A',0.8])"}; x = "0 * ( ((safezoneW / safezoneH) min 1.2) / 40)"; y = "3 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; w = "3 * ( ((safezoneW / safezoneH) min 1.2) / 40)"; h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; }; class VehicleStatus { color[] = {0, 0, 0, 0}; colorDamaged[] = {"(profilenamespace getvariable ['IGUI_ERROR_RGB_R',0.8])", "(profilenamespace getvariable ['IGUI_ERROR_RGB_G',0.0])", "(profilenamespace getvariable ['IGUI_ERROR_RGB_B',0.0])", 0.8}; colorNoAmmo[] = {"(profilenamespace getvariable ['IGUI_WARNING_RGB_R',0.8])", "(profilenamespace getvariable ['IGUI_WARNING_RGB_G',0.5])", "(profilenamespace getvariable ['IGUI_WARNING_RGB_B',0.0])", 0.6}; colorNoFuel[] = {"(profilenamespace getvariable ['IGUI_WARNING_RGB_R',0.8])", "(profilenamespace getvariable ['IGUI_WARNING_RGB_G',0.5])", "(profilenamespace getvariable ['IGUI_WARNING_RGB_B',0.0])", 0.6}; texture = "#(argb,8,8,3)color(1,1,1,1)"; x = "0 * ( ((safezoneW / safezoneH) min 1.2) / 40)"; y = "0 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; w = "3 * ( ((safezoneW / safezoneH) min 1.2) / 40)"; h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; }; class UnitStatus { color[] = {0, 0, 0, 0}; colorWounded[] = {"(profilenamespace getvariable ['IGUI_ERROR_RGB_R',0.8])", "(profilenamespace getvariable ['IGUI_ERROR_RGB_G',0.0])", "(profilenamespace getvariable ['IGUI_ERROR_RGB_B',0.0])", 0.8}; colorWoundedFade[] = {"(profilenamespace getvariable ['IGUI_ERROR_RGB_R',0.8])", "(profilenamespace getvariable ['IGUI_ERROR_RGB_G',0.0])", "(profilenamespace getvariable ['IGUI_ERROR_RGB_B',0.0])", 1}; colorNoAmmo[] = {"(profilenamespace getvariable ['IGUI_WARNING_RGB_R',0.8])", "(profilenamespace getvariable ['IGUI_WARNING_RGB_G',0.5])", "(profilenamespace getvariable ['IGUI_WARNING_RGB_B',0.0])", 0.8}; texture = "#(argb,8,8,3)color(1,1,1,1)"; x = "0 * ( ((safezoneW / safezoneH) min 1.2) / 40)"; y = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; w = "1 * ( ((safezoneW / safezoneH) min 1.2) / 40)"; h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; }; class UnitCombatMode { colorBlue[] = {1, 0, 0, 0.5}; colorGreen[] = {1, 0, 0, 0.7}; colorWhite[] = {1, 0, 0, 0.7}; colorYellow[] = {0, 0, 0, 0}; colorRed[] = {0, 0, 0, 0}; textureBlue = "\a3\Ui_f\data\IGUI\Cfg\CommandBar\unitCombatMode_ca.paa"; textureGreen = "\a3\Ui_f\data\IGUI\Cfg\CommandBar\unitCombatMode_ca.paa"; textureWhite = "\a3\Ui_f\data\IGUI\Cfg\CommandBar\unitCombatMode_ca.paa"; textureYellow = "\a3\Ui_f\data\IGUI\Cfg\CommandBar\unitCombatMode_ca.paa"; textureRed = "\a3\Ui_f\data\IGUI\Cfg\CommandBar\unitCombatMode_ca.paa"; text = "\a3\Ui_f\data\IGUI\Cfg\CommandBar\unitCombatMode_ca.paa"; x = "1 * ( ((safezoneW / safezoneH) min 1.2) / 40)"; y = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; w = "1 * ( ((safezoneW / safezoneH) min 1.2) / 40)"; h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; colorText[] = {1, 0, 0, 1}; }; class UnitBehavior { colorCareless[] = {0, 0, 0, 0}; colorSafe[] = {0, 0, 0, 0}; colorAware[] = {0, 0, 0, 0}; colorCombat[] = {1, 0.25, 0, 0.7}; colorStealth[] = {0, 0.8, 1, 0.7}; textureMCareless = "\a3\Ui_f\data\IGUI\Cfg\CommandBar\unitBehavior_ca.paa"; textureMSafe = "\a3\Ui_f\data\IGUI\Cfg\CommandBar\unitBehavior_ca.paa"; textureMCombat = "\a3\Ui_f\data\IGUI\Cfg\CommandBar\unitBehavior_ca.paa"; textureMYellow = "\a3\Ui_f\data\IGUI\Cfg\CommandBar\unitBehavior_ca.paa"; textureMStealth = "\a3\Ui_f\data\IGUI\Cfg\CommandBar\unitBehavior_ca.paa"; text = "\a3\Ui_f\data\IGUI\Cfg\CommandBar\unitBehavior_ca.paa"; x = "2 * ( ((safezoneW / safezoneH) min 1.2) / 40)"; y = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; w = "1 * ( ((safezoneW / safezoneH) min 1.2) / 40)"; h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; }; class GroupIcon { color[] = {1, 1, 1, 1}; x = "1 * ( ((safezoneW / safezoneH) min 1.2) / 40)"; y = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; w = "1 * ( ((safezoneW / safezoneH) min 1.2) / 40)"; h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; }; class VehicleRole { color[] = {0, 0, 0, 0.5}; shadow = false; x = "0 * ( ((safezoneW / safezoneH) min 1.2) / 40)"; y = "0 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; w = "1 * ( ((safezoneW / safezoneH) min 1.2) / 40)"; h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; }; class VehicleIcon { color[] = {1, 1, 1, 1}; shadow = 2; x = "1.2 * ( ((safezoneW / safezoneH) min 1.2) / 40)"; y = "0.1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; w = "1.6 * ( ((safezoneW / safezoneH) min 1.2) / 40)"; h = "0.8 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; }; class UnitRank { color[] = {0, 0, 0, 0.5}; shadow = false; x = "0.1 * ( ((safezoneW / safezoneH) min 1.2) / 40)"; y = "1.1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; w = "0.8 * ( ((safezoneW / safezoneH) min 1.2) / 40)"; h = "0.8 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; }; class UnitRole { color[] = {1, 1, 1, 1}; shadow = 2; x = "1 * ( ((safezoneW / safezoneH) min 1.2) / 40)"; y = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; w = "1 * ( ((safezoneW / safezoneH) min 1.2) / 40)"; h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; }; class UnitSpecialRole { color[] = {1, 1, 1, 1}; shadow = 2; x = "2 * ( ((safezoneW / safezoneH) min 1.2) / 40)"; y = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; w = "1 * ( ((safezoneW / safezoneH) min 1.2) / 40)"; h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; }; class VehicleNumberText { font = "RobotoCondensed"; shadow = 2; x = "0 * ( ((safezoneW / safezoneH) min 1.2) / 40)"; y = "0 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; w = "1 * ( ((safezoneW / safezoneH) min 1.2) / 40)"; h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; colorText[] = {1, 1, 1, 1}; sizeEx = "0.8 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; }; class UnitNumberText { font = "RobotoCondensed"; shadow = 2; x = "0 * ( ((safezoneW / safezoneH) min 1.2) / 40)"; y = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; w = "1 * ( ((safezoneW / safezoneH) min 1.2) / 40)"; h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; colorText[] = {1, 1, 1, 1}; sizeEx = "0.8 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; }; class UnitName { font = "RobotoCondensed"; shadow = true; x = "0 * ( ((safezoneW / safezoneH) min 1.2) / 40)"; y = "2 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; w = "3 * ( ((safezoneW / safezoneH) min 1.2) / 40)"; h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; colorText[] = {1, 1, 1, 1}; sizeEx = "0.8 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; }; class CommandText { font = "RobotoCondensed"; shadow = true; x = "0 * ( ((safezoneW / safezoneH) min 1.2) / 40)"; y = "3 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; w = "3 * ( ((safezoneW / safezoneH) min 1.2) / 40)"; h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; colorText[] = {1, 1, 1, 1}; sizeEx = "0.8 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; }; }; }; //-- [...] I got rid of other entries }; Share this post Link to post Share on other sites
Guest Posted October 1, 2016 allDisplay and allControls would be the easier method to return the defined ids to get the elements. Like { diag_log format ["TYPE : %1 | TEXT : %2 | CLASSNAME : %3 | VISIBLE : %4 | POS : %5 | PARENT : %6 | ID : %7", ctrlType _x, crtlText _x, ctrlClassName _x, ctrlVisible _x, ctrlPosition _x, ctrlParent _x, ctrlIDC _x]; } forEach (allControls findDisplay 46); Then check the logs :) Share this post Link to post Share on other sites
marceldev89 89 Posted October 2, 2016 Did some poking around in game today and it seems that the command bar is handled entirely in engine.. Doesn't seem to be open to modding.. :( 1 Share this post Link to post Share on other sites
mad_cheese 593 Posted October 3, 2016 hey, really thanks for the input. A well presented "NO" can save so much time. I did go through those controls and albeit a few teases (like the word unitnumber), there's nothing in there :( Thank you for the answers, I learned something from that! Share this post Link to post Share on other sites
Guest Posted October 3, 2016 hey, really thanks for the input. A well presented "NO" can save so much time. I did go through those controls and albeit a few teases (like the word unitnumber), there's nothing in there :( Thank you for the answers, I learned something from that! Can you tell me how you did the radial menu ? Just basic explaination I want to do it all by myself. Because you can create rounded / That way shaped ui elements so you are using texture am I correct ? I thought the events would take the entire RscPicture frame and not only the texture itself. I really didn't really got into it but as I want to do one myself some help could be appreciated. Btw, i will look for the commander menu when I'm back home. I am sure you can get these. Share this post Link to post Share on other sites
mad_cheese 593 Posted October 3, 2016 Can you tell me how you did the radial menu ? Just basic explaination I want to do it all by myself. Because you can create rounded / That way shaped ui elements so you are using texture am I correct ? I thought the events would take the entire RscPicture frame and not only the texture itself. I really didn't really got into it but as I want to do one myself some help could be appreciated. Btw, i will look for the commander menu when I'm back home. I am sure you can get these. Since I have zero 'real' experience, all I ever do is trial and error - there's probably a much better way but what i did was using 5 layers for the menu. They all have the same dimensions (square). Looking back, in my case 2 layers would have been perfectly fine. All layers have the same rectangular dimensions, only the images are round. I created those in Adobe Illustrator, a friend uses it for work and let me use it for 2h :) I know that CSE had a very similar radial menu, no idea how they made it. It's different, because they changed the colors of the first 'ring' depending on if they were selected or not. Hey if you find anything about the commandbar after all please SCREAM! Share this post Link to post Share on other sites
Larrow 2828 Posted October 3, 2016 If you want to select units via buttons then i think your best bet is to use invisible buttons over the current UI. Rip the current setup out of A3 config to get a rough layout and then as ceeb has shown you can get the position. You can monitor inputAction "groupPageNext"/"groupPagePrev" for if command bar pagination has changed. If you need to know what units are currently selected you can use groupSelectedUnits _leader and to set them _leader groupSelectUnit [ _unit, _selected ]; 1 Share this post Link to post Share on other sites
mad_cheese 593 Posted October 3, 2016 If you want to select units via buttons then i think your best bet is to use invisible buttons over the current UI. Rip the current setup out of A3 config to get a rough layout and then as ceeb has shown you can get the position. You can monitor inputAction "groupPageNext"/"groupPagePrev" for if command bar pagination has changed. If you need to know what units are currently selected you can use groupSelectedUnits _leader and to set them _leader groupSelectUnit [ _unit, _selected ]; DUDE. Monitoring inputAction is IT! Where did you even find those actions? They are not listed on the page but they do work! Now I just need to count the units within my group, make the invisible ctrlsGroup and align it with the commandbar. pouf! THANKS EVERYBODY <3 EDIT: one thing I forgot in my excitement was that I still need to be able to flip those pages with buttons over those page arrows... I hope there's a way to do that Share this post Link to post Share on other sites