#arma3_gui
1 messages Β· Page 7 of 1
oh ok, i understand now.
What are you trying to anyway?
im trying to make a UI that's similar of layout to dynamic recon ops basically, it's like a "main menu" type of UI to configure the settings of the scenario and such.
and it's going to fill the whole page. so i'd like the UI to stay consistent in size regardless of monitor settings.
Whole page? You mean whole screen?
well, the UI is gonna be using the whole screen, technically, so yeah.
it will have side bars, top, bottom, all TBD.
x = SafeZoneX;
y = SafeZoneY;
w = SafeZoneW;
h = SafeZoneH;
``` this will cover entire screen
x = SafeZoneXAbs;
y = SafeZoneY;
w = SafeZoneWAbs;
h = SafeZoneH;
``` this will cover all screen on multi monitor setup
SafeZoneX is most left border of the game window/screen
yeah, i do know this, but how does combining pixelGrid work? safeZone works per the resolution from what I know and pixelGrid is based on pixels, how does it work exactly?
pixel stuff is bound to pixels, normal ui coordinates are absolute, regardless of monitor, resolution and even window size
Pixelgrid stuff typically uses the nearest multiple of 4 or 8 pixels as a unit. It's a compromise between having things roughly the same size on screen and text/lines rendering in a non-ugly manner.
so combining safeZone values and pixelGrid is the way to go then.
Usually, yes.
and pixelGrid will manually adjust itself to be perfect in every resolution or must i worry about some "n" factor that I must use to ensure that the UI stays consistent
Well, pixelGrid does not give you the same number of units on every resolution.
1080p tends to be the odd one out.
So if you're using it for a UI that covers the whole screen, then you need to consider that.
i see, how can i go around this then?
for example, if the whole screen is just
x = SafeZoneX;
y = SafeZoneY;
w = SafeZoneW;
h = SafeZoneH;
then I want to make a box inside.
x = 0.1;
y = 0.1 + pixelH * 1;
w = pixelW * 2;
h = pixelH * 1;
there must be some "n" value to keep the box consistent in size, correct?
i would have to multiply all values by pixelGrid, right?
What does "consistent in size" mean exactly?
i mean the size of the box stays the same across all resolution sizes and aspect ratios, it doesn't misalign or change it's shape.
You mean relative to the screen height then?
yeah, technically, because i wouldn't want a box to be more stretched or squashed because of monitor settings.
it would look the same across all settings
The reason this isn't normally done is that it wouldn't necessarily even give you a round number of pixels.
But you can calculate using the information provided. safeZone gives you the screen size in the same units as pixelW/H give you the pixel size.
oh ok, then they would correlate with each other to make sure controls scale correctly with resolution and aspect ratio. I would just have to use pixelGrid, pixelGridBase, etc, to make sure it stays consistent, right?
class RscText
{
x = 0.5 - pixelW * pixelGrid * 6;
y = 0.5 - pixelH * pixelGrid * 6;
w = pixelW * pixelGrid * 12;
h = pixelH * pixelGrid * 6;
};
That looks plausible, yes.
use the GRID_W and GRID_H macros from eden
@tranquil iron Just checking remote content for CT_WebBrowser didn't make it in to 2.20? the current Wiki page on it suggests its available and can work but i haven't been able to get it to show anything yet
Correct, its disabled in stable
its enabled on profiling branch though
I forgot to adjust the wiki
a shame, i really wanted to be able to send players random memes i find as admin mid mission, i guess i can just do a check if they are on profiling and send it if they are instead XD
π
You can still do it with sandbox, but a bit more complicated
you can convert images into data url's https://base64.guru/converter/encode/image/webp and send these through in-game
Its just a string, that you then display in the sandboxed browser
oh wonderful, i can shitpost directly to players, perfect :)
I didn't understand, web browser is available in version 2.20, how important is it in patchnote or not?
the web browser is in 2.20, but it can only display local files or raw HTML and can't connect to the internet atm
Just what you need. Is it possible to somehow process a button click in sqf?
Hello everyone,
I just saw the latest SPOTREP and CT_WEBBROWSER.
I'm currently trying it out and it seems pretty cool, but I don't understand everything.
Can we interact with the HTML page we loaded from ExecJS?
If so, is there something to do beforehand?
I created a simple HTML HUD and I'm trying to interact with it in JS but it's impossible.
show example code
html :
<script>
function updateLife(value) {
document.querySelector('.life-fill').style.width = value + '%';
}
SQF init :
_ctrl ctrlAddEventHandler ["JSDialog", {
params ["_control", "_isConfirmDialog", "_message"];
_lifeValue = 80;
_hungerValue = 50;
_thirstValue = 30;
_control ctrlWebBrowserAction [
"ExecJS",
format [
"console.log('Updating life to %1%%');" +
"document.querySelector('.life-fill').style.width = '%1%%';",
_lifeValue
]
];
true;
}];
Of course, I also tested %1
I try this :
_control ctrlWebBrowserAction [
"ExecJS",
"document.querySelector('.life-fill').style.width = '50%';"
];
but doesn't work π’
Yep, the sample work
Send me youir things in a mission file, and I can take a look tomorrow, just DM me the stuff
I do that now π
Internet access is disabled on engine level. There is no way to enable it.
Profiling branch has it, with a safety prompt (I hope that works). I do not consider it to be ready/safe enough for general use
You can implemented limited web access. You can send files from the game script into the browser.
if you can get internet files into the game script (for example with extensions) you could load internet content.
But thats complicated and not intended at the moment
I've this error in the webConsole:
That might be a bogus error
For people who search the same things.
We need to use the EventHandler "PageLoaded".
("MyHudLayer" call BIS_fnc_rscLayer) cutRsc ["HudOverlayUI", "PLAIN"]; // Add our Display to the HUD
private _ctrl = ((GHUDOverlay#0) displayCtrl 1337);
//_ctrl ctrlWebBrowserAction ["OpenDataAsURL", loadFile "hudOverlay.html"];
_ctrl ctrlAddEventHandler ["PageLoaded", {
params ["_control"];
_control ctrlWebBrowserAction [
"ExecJS",
format ["updateLife(%1);updateHunger(%1);updateThirst(%1);",100,25,35]
];
}];
My description.ext:
class RscText;
class RscWebBrowser
{
idd = 13371337;
fadein = 0;
fadeout = 0;
duration = 1e+011;
class Controls
{
class WebControl: RscText
{
type = 106;
idc = 1337;
x = 0;
y = 0;
w = 1;
h = 1;
url = "file://test.html";
};
};
};
I call this code:
disableSerialization;
private _display = (findDisplay 46) createDisplay "RscDisplayEmpty";
private _browser = _display ctrlCreate ["RscWebBrowser", 9999];
_browser ctrlCommit 0;
But I get the error: No entity [path] RscWebBrowser.type
What am I doing wrong and how can I fix it?
Here mine for example:
import RscText;
class RscTitles
{
class HudOverlayUI
{
idd = 13371337;
fadein = 0; // Required parameters for RscTitles
fadeout = 0;
duration = 1e+011;
onLoad = "GHUDOverlay = _this"; // Store our Display in a variable so we can access it from script
class controls
{
class Texture: RscText
{
type = 106; // CT_WEBBROWSER
idc = 1337;
x = safeZoneX; // Full screen from corner to corner
y = safeZoneY;
w = safeZoneW;
h = safeZoneH;
url = "file://hudOverlay.html"; // Reference to a file inside our mission
};
};
};
};
Should I specify HudOverlayUI or RscTitles for rendering?
I tried your example:
disableSerialization;
private _display = (findDisplay 46) createDisplay "RscDisplayEmpty";
private _browser = _display ctrlCreate ["RscTitles", 9999];
_browser ctrlCommit 0;
If RscTitles, you need to use cutRsc π
Ohh... Is there any way I can just open the browser using my code?
disableSerialization;
private _display = (findDisplay 46) createDisplay "RscDisplayEmpty";
private _browser = _display ctrlCreate ["RscTitles", 9999];
_browser ctrlCommit 0;
Use CreateDialog maybe ?
Not working
I try createDialog & this working.
Show how do you do ?
first try:
import RscText;
class RscTitles
{
class HudOverlayUI
{
idd = 13371337;
fadein = 0; // Required parameters for RscTitles
fadeout = 0;
duration = 1e+011;
onLoad = "GHUDOverlay = _this"; // Store our Display in a variable so we can access it from script
class controls
{
class Texture: RscText
{
type = 106; // CT_WEBBROWSER
idc = 1337;
x = safeZoneX; // Full screen from corner to corner
y = safeZoneY;
w = safeZoneW;
h = safeZoneH;
url = "file://hudOverlay.html"; // Reference to a file inside our mission
};
};
};
};
two try:
import RscText;
class HudOverlayUI
{
idd = 13371337;
fadein = 0; // Required parameters for RscTitles
fadeout = 0;
duration = 1e+011;
onLoad = "GHUDOverlay = _this"; // Store our Display in a variable so we can access it from script
class controls
{
class Texture: RscText
{
type = 106; // CT_WEBBROWSER
idc = 1337;
x = safeZoneX; // Full screen from corner to corner
y = safeZoneY;
w = safeZoneW;
h = safeZoneH;
url = "file://hudOverlay.html"; // Reference to a file inside our mission
};
};
};
createDialog "HudOverlayUI" / createDialog "RscTitles"
try using shorter idd
The second might be workfull. I do the same
This is work with dialog create
I can show more one web browser on 46 display?
Hey does anyone have an idea on a way to create a portrait of a killed enemy to display after killing them? I was thinking something along the lines of the Arma 2 head spin, but I cannot find it. Outside of creating a custom paa for each individual target, I can't think of any other way.
Portrait as in, their "past" or dead face? Latter is pretty easy as you can just use camera and r2t'd it, so a texture control can show the face. Former, it requires a ton of workaround
Dead face would work
Sweet, the livecam work, thank you!
In the JSDialog system, can we interact on a HTML-JS button to send SQF ?
Yes. WebBrowser is just a control like the others, like a textbox, you can have multiple.
Yes, but you need to receive and handle the message yourself. I have a sample somewhere..
Hoo if you find it i'm interrested by π
Thx a lot for you help π
https://github.com/WolfCorps/CytechPCSystem
This is a computer system based on WebBrowser UI.
The computer display is shown on a billboard, for all players to see, and the currently open page's state is synchronized in multiplayer so all players see the same.
Player can go to laptop to interact with it, and press buttons which trigger things in-game
When you press a button
https://github.com/WolfCorps/CytechPCSystem/blob/master/CytechUI/mainsystems.html#L125
InternalModifyState({sys3: !(GCurrentState.sys3??false)})
The change goes to
https://github.com/WolfCorps/CytechPCSystem/blob/master/CytechUI/index.html#L66
Which, applies the change to the global state, and sends the whole state to Arma (line 71)
That comes back in a JSDialog
https://github.com/WolfCorps/CytechPCSystem/blob/master/init.sqf#L42
Which sends the state update via remoteExec (so all players receive it)
https://github.com/WolfCorps/CytechPCSystem/blob/master/init.sqf#L147
And when every player receives the state, they apply it to the webbrowser if it already is open
https://github.com/WolfCorps/CytechPCSystem/blob/master/init.sqf#L128
And fire the state eventhandlers.
And tadaa, Player1 pressing a button in the webUI. Switches the texture of an object on Player2's machine
https://github.com/WolfCorps/CytechPCSystem/blob/master/init.sqf#L236
Its quite complex example.
It shows MP synchronization, and how to load (zlib compressed) css files and other html sub-pages from mission folder, and how to display it via a UI2Texture in-game on a billboard and also handle that texture loading at different times for different players (because it only loads once in view).
Basically you just send something via JSDialog.
You can send a full json payload, and just use fromJSON to parse it out.
wOOH I try that, incredible & complex at the time π
not on my level for HTML & JS but why not try something easier
How hard is it to create and use browsers? For example, if I create 10 browsers, how much will it affect performance?
Since it uses the steam browser and I think the steam browser is pretty slow, I would think it would take a pretty big hit.
But do it and report back
he uses chromeum, not steam browser?
We use the steam browser. Performance is same as steam overlay.
Opening 10 tabs in steam overlay is probably fine, so it'll be fine in game too. But I recommend keeping the number low
I would never have thought that RscWebBrowser is a steam overlay
CT_WEBBROWSER not available in RscDisplayStart? (to replace a3 logo with html)
Please don't replace the Arma logo
I will not replace the arma 3 logo, it's just an example. I want to decorate the startup loading screen.
Replace logo arma3 in arma4 ))))
Greetings, I'm trying to figure out the text size but I can't get it right, maybe you can help.
I have a button, earlier I clearly specified the font size, but here is the problem, it is worth to change the scale of the interface and half of the text is not visible, it goes outside the rectangle or on the contrary too small. I want the text to always be the same size in relation to the rectangle, at any scale or resolution configuration.
I found a formula and it seems to do what I need, but it does it unevenly (the text seems to fit and be readable, but it's still different sizes in relation to the rectangle), help me please
sizeEx = 2.9 * (1 / (getResolution select 3)) * pixelGridNoUIScale * 0.5;
pixelGridNoUIScale change to pixelGrid
Hey do you know if we can interact with SQL database with javascript into ct_webrowser ?
It should be blocked in the sandbox
https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/iframe#sandbox
allow-scripts is set, nothing else
local storage/indexedDB would require allow-same-origin
I use the Toolbox to switch lists in the listbox. And I noticed that it is impossible to add any new image elements to the toolbox if the style is picture (inheritance of ctrlToolboxPictureKeepAspect). I tried the lb and lnb commands, but none of them returned a result.
Is it also possible to change the number of columns and rows in toolbox without using the config class?
Need to call extDB so π
If remoteContent is possible one day, that might be awesome !
I create GUI:
class RscBrowser
{
idd = 20000;
class Controls
{
class Texture: RscText
{
type = 106;
idc = 20001;
x = safeZoneX;
y = safeZoneY;
w = safeZoneW;
h = safeZoneH;
url = "file://html\test.html";
};
};
};
And i try show:
findDisplay 46 createDisplay "RscBrowser";
I don't get any errors.
In single player, everything works, but not in multiplayer.
I call it manually when the 46 display is already working.
It seems to be created - the cursor appears, but nothing is displayed.
Add another control to see if that works. If it does then its about new browser control
im new and a little lost could you show me the ropes of amra?
I think I've figured out what my mistake is.
15:39:22 Could not load 'html\page1.html'. Extension not listed in allowedHTMLloadExtensions
Although I have indicated
class CfgCommands {
allowedHTMLLoadURIs[] = {
"html\*"
};
};
Do I need to specify every file now? Can't I just put an asterisk?
allowedHTMLloadExtensions is not allowedHTMLLoadURIs
You do not need to allow the URI, that is only for web URL's.
Extensions is for loading files out of PBO
Oh, I wasn't paying attention at all.
Mh the only reference to allowedHTMLloadExtensions I can find is server.cfg?
Ah right you are testing in multiplayer
It doesn't work like that, on very small I can't see the text (it's too small), on very large it's exactly as I want it. I need that if let's say to the right of the edge 3 pixels, then no matter what scale there will always be 3 pixels conditionally.
Make sure that your button control uses the same grid as the font size
Then they scale evenly.-
And as long as you stay within an acceptable size it will also be ledigable on all ui sizes
Did anyone try ExecJS in PageLoaded EventHandler for CT_WEBBROWSER? Docs say "Once PageLoaded is triggered, it is safe to execute javascript on the page", but for me window is not yet defined in this case (debug console shows contentWindow of iframe is undefined) and sometimes ExecJS gets dropped. sleep 1; in sqf before ExecJS makes it work, but is not really how i would like to solve this.
if somebody needs it: i now send A3API.SendAlert('app:mounted'); in App.vue onMounted and from SQF _control ctrlWebBrowserAction ["ExecJS", "window.router.push('/link');"];
How do you use VueJS if paths can only be specified using the :arma:path syntax?
I'm trying to open a page.
The display is created, but nothing is displayed.
private _display = findDisplay 46 createDisplay "RscBrowser";
private _browser = _display displayCtrl 20001;
_browser ctrlWebBrowserAction ["OpenDataAsURL", loadFile "html\help.html"];
I found out that loadFile returns me an empty string.
I fix it.
This is work:
_browser ctrlWebBrowserAction ["LoadFile", "html\help.html"]
In my "simple" html+js page, I run initialization in PageLoaded and it works
Would anyone know why this does not update the control text:
_ctrl ctrlSetStructuredText parseText format [
"Some text [<t color='%2'>%1</t>]",
["OFF", "ON"] select _bool,
["#FFB6C1", "#90EE90"] select _bool
];
Yet doing this works with no issue:
hint parseText format [
"Some text [<t color='%2'>%1</t>]",
["OFF", "ON"] select _bool,
["#FFB6C1", "#90EE90"] select _bool
];
I have verified that the _ctrl is the proper control as ctrlEnable affects it. I have also verified that _bool is not nil. Honestly pretty stumped, have ran into this before but have no idea what I am doing wrong. The control I am attempting to set this on is a standard button.
Hmmm perhaps this is my problem #arma3_scripting message. Ugh.
Yep appears that's it 
i use vite bundler with vite-plugin-singlefile, so everything gets bundled into index.html including images or css. Router works with createMemoryHistory. In dialog only url = "file://ui/index.html"; and _control ctrlWebBrowserAction ["ExecJS", "window.router.push('/dynmarket');"]; to show specific view.
So, Im not familiar with anything when it comes to development of GUI stuff - how hard would it be to mess with the attribute window in the editor to add in new ranks that are selectable (such as adding in specific LT ranks and additional NCO ranks for mission makers to use)?
the specific thing you need to inherit and modify is in:
configFile >> "Cfg3DEN" >> "Attributes" >> "Rank" >> "Controls" >> "Value" >> "strings"
It will just stack them in automatically with no extra work on my part?
And follow-on: Will this effect the ranks players see in game automatically, or do I need to add classnames to another cfg?
a little more in depth, i don't think the control automatically resizes itself or turn into a horizonal scroll bar
so you probably have a lot of work on yoru part to do
Gotcha, thank you
now you can modify CfgRanks
which you can then set ranks via script, but it won't show up in GUI unless you do some modifications of the above class
You could change it to a combo box if needed. Or make a custom attribute just for your ranks. The latter might be easier and generally better
I also have a Webpack sample that packs into single html
https://github.com/dedmen/ArmaWebBrowserTests/tree/master/JavascriptWebpack
Its also possible to load JS modules from game, but you need to use the async module loading syntax.
Here I'm patching a multiple-modules thing, to load the modules from game
https://github.com/dedmen/ArmaWebBrowserTests/blob/master/C%23_BlazorWebassembly/wwwroot/indexArma.html#L80
After 2.20 update, our gui interface button hyperlinks stopped working. What has changed and how to make it work in 2.20?
Button config example:
class Button_Help: RscStructuredText { idc = 1230; style = 48; text = "<a href='https://discord.gg/gekeuht'><img size='3.72' image='\SW_ui\inventory\button_link_active.paa'/></a>"; x = 0.578376 * safezoneW + safezoneX; y = 0.7024 * safezoneH + safezoneY; w = 0.0309375 * safezoneW; h = 0.088 * safezoneH; color[] = { 1, 1, 1, 1 }; colorActive[] = { 0.7, 0.7, 0.7, 1 }; onMouseEnter = "(_this select 0) ctrlSetStructuredText parseText ""<a href='https://discord.gg/gekeuht'><img size='3.72' image='\SW_ui\inventory\button_link_inactive.paa'/></a>"""; onMouseExit = "(_this select 0) ctrlSetStructuredText parseText ""<a href='https://discord.gg/gekeuht'><img size='3.72' image='\SW_ui\inventory\button_link_active.paa'/></a>"""; };
You need to whitelist them in CfgCommands.
I had that issue as well see #dev_rc_branch message
Ohh, didn't pay attention to rc channel lately. Thank you! π
CT_WEBBROWSER has been created for a long time. If I create a dialog, the content is displayed after 3 to 7 seconds. Is there a way to somehow caching it and display it instantly or at least in the shortest time after creating the dialog?
Make the page small and fast to load
It's already small. There's literally one paragraph - hello world
Well I never had any issues with slow opening.
But because its Steam doing the opening, its possible that it can be slow doing that. If thats the case then nothing we can do
Hi guys, I'm not sure if this is right topic, but, we got "brightness" in splendid camera, I would LOVE to use this feature ingame, does anyone knows the command for this feature ? It seems its using Aperture command too π€ Scene looks fantastic with it.
setAperture/setApertureNew
I know, but its not the only parameter it is using I think.. maybe some combination, not sure. Thanks anyway π
anyone know the display where all the main GUI controls are kept?
As in config or allDisplays etc?
basically allDisplays but havent yet figured if its one of those. probably has to be
https://community.bistudio.com/wiki/allDisplays
Check the notes
hmm i checked those but the chat messages which im looking for must be under some other display
Chat messages? What is your purpose?
hide the chat messages temporarily
ok thats weird it wont work , i still see my messages
"Your" messages?
i am actually using that but it cant hide existing messages can it?
It doesn't, but it can cancel it from sending
i know
clearRadio seems to work, but is not ideal, i still want to keep the old messages
ok this "hack" works ```sqf
addMissionEventHandler ["EachFrame",
{
showChat false;
}];
this also seems to work (from console) ```sqf
[] spawn
{
sleep 0.5;
showChat false;
};
thx POLPOX for the showChat
How can i create buttons with CT_WEBBROWSER in Arma.
I wanted to create a simple keypad with WEB
So i have this so far:
Html:
https://pastebin.com/2D8SKhLk
Css:
https://pastebin.com/QAwp4We3
JavaScript:
https://pastebin.com/qNL5pbiu
Description:
import RscText;
class RscTitles
{
class HudOverlayUI
{
idd = 13371337;
fadein = 0; // Required parameters for RscTitles
fadeout = 0;
duration = 1e+011;
onLoad = "GHUDOverlay = _this"; // Store our Display in a variable so we can access it from script
class controls
{
class Texture: RscText
{
type = 106; // CT_WEBBROWSER
idc = 1337;
x = safeZoneX; // Full screen from corner to corner
y = safeZoneY;
w = safeZoneW;
h = safeZoneH;
url = "file://Index.html"; // Reference to a file inside our mission
};
};
};
};
Also this is new teritory for me with Web stuff so sorry if i dont get anything but now i just get the picture of buttons in arma how would i make them functional ?
Pastebin.com is the number one paste tool since 2002. Pastebin is a website where you can store text online for a set period of time.
Pastebin.com is the number one paste tool since 2002. Pastebin is a website where you can store text online for a set period of time.
Pastebin.com is the number one paste tool since 2002. Pastebin is a website where you can store text online for a set period of time.
Make your onLoad script, a function thats being called.
use ctrlAddEventHandler on your idc 1337
To add a https://community.bistudio.com/wiki/CT_WEBBROWSER#JSDialog handler
For now probably just add diag_log _this into it so you can see whats going on.
In your javascript, after line 11 add
A3API.SendAlert("keypadContent: " + display.value)
And tadaa, you will see the keycode you're entering, in SQF
Then you can do in SQF whatever you want with it
how do you run code in main menu?
Via preInit function
oh you must mean prestart. that works, thx!
Ah yesπ
im trying to use BIS_fnc_guiMessage there but it is nil. anyway to get message box like that in the main menu?
You could always call the script file that points to the function
ok i will try
well the message box isnt showing up. maybe it needs the main menu as parent. but alldisplays returns empty array.
Probably too soon
yeah
Prestart is too soon.
with CBA you could use XEH for display load of the main menu
I tend to stick things into onLoad of some main menu control
is RscMainMenu the main menu?
Sounds like it
yeah
i think its RscDisplayMain. and I "overloaded" the OnLoad but alldisplays is still empty there and _this is empty array too
ok i got the display now but the BIS_fnc_guiMessage needs to suspend so it wont work there. and cant use spawn because that gets cancelled.
Where do you edit or create GUI ? I use the standard editor in the editor, but I can't create a controlGroup in another similar class, which makes it inconvenient and doesn't save anything created there.
By hand. Handwritten config is the only reliable and efficient way
Or scripting.
GUI: RscText
Is there a way to put a scrollbar on a CT_Static like RscText when the ST_MULTI multiline text has more lines then can fit the textbox?
Put it in a controls group, and resize the CT_STATIC to fit the text.
Hi ! i'm trying to rotate an image on the right button. The class of the button is a RscShortcutButton. I know of the ShortCutPos because I use it to scale the button's image to the right size, but I can't find a way to change the angle, I've tried angle, but to no avail.
There is my small code :
class ButtonSelectionRight : RscShortcutButton
{
x = X_COORD(0.66510417);
y = Y_COORD(0.45833334);
w = W_COORD(0.02083334);
h = H_COORD(0.04166667);
class ShortCutPos{
w = W_COORD(0.02083334);
h = H_COORD(0.04166667);
};
textureNoShortcut = "\A3\ui_f\data\GUI\Cfg\Slider\arrowEmpty_ca.paa";
};
I don't think you can
alright thank you ^^ So I guess i'll just make another image that is just rotated 180Β°. Seems like the simplest solution.
And working solution that BI uses
or just use text < >
Well < > is smart. But i'll go with the images right now (mostly because i already did them xD)
The thing I try to do now is to get the effect on the button when you press and just over the mouse on top of it. The problem I have now is that all of the anim are "behind" the image like a layer under it.
Nvm i find the problem I have to modify directly the anim Images and not the TextureNoShortcut
Hi folks. First timer here. Sorry for asking the obvious, but is there a linky anywhere to a starting guide on tweaking the arsenal UI? Is there an API wiki somewhere I blatantly could not find? Not sure where to get started.
found this π https://community.bistudio.com/wiki/Arma_3:_Arsenal
but thats more like using arsenal, not recreating it
Thank you so much. My google-fu has abysmally failed me. :)
There is some API under "modding", might be enough to start.
Not the UI though... Is there any available source code for the game itself?
Gotcha. I'll dig around. Thanks so much!
When I have an image assigned to a button and _controlVar ctrlEnable false it dims the icon on the control. Is there a way that I can undim it? I tried to ctrlSetTextColor and change it's alpha to no success.
You can disable dimming by setting one of the colors
Checks what color values it has, probably will be something like colorDisabled
Cheers thanks π
Does anyone have any ideas off the top of their head why valign wouldn't have an effect but align would in ctrlSetStructuredText with an image? I am able to set it center on my X but not middle on my Y.
As a hacky work around I tried to set size much smaller then break to see if I could incrementally lower the icon without it going down too far like this <br/><t size='0.01'> and still even then seemingly no difference.
Ah
Yep
Okay after reading ctrlSetStructuredText Wiki again looks like   might be the solution
Hahaha
Suprise, a decade long issue
Was definitely pulling out hair a little bit 
when debugging with config merge, how can I make sure that defines are updated? because that is what I use to change the sizes of stuff
right now, the only way defines are updated is if I reload the game... maybe disable binarize on hemtt for the ui addon?
edit: this was the answer
Sometimes in respawn menu I see a yellow exclamation mark near the spawnpoint. As I understand, it warns the player about enemy present near that position.
What are exact conditions for it?
I'm blocking the respawn on some points too, and wanted to synchronize the conditions.
You need to read the code
Mmm... Do I? π
Most likely there is a predefined radius for searching enemies, an I just wanted to know what is it. I don't think I need to read the code for it, the radius can be retrieved experimentally.
And as it is a part of GUI, there should be some explanations from devs, isn't it?
Just read the code and you get all that info. I doubt anyone knows the exact condition.
So you're implying that there's an active game element that no one knows about, not even the developers, and you need to look into the code? Even if we temporarily imagine that this is the case, how do you suggest I do it? Or is it a joke?
Use the functions viewer
Not every detail of a game is remembered by someone at every given moment, that's wild to think
There's probably someone who tested the radius at some point in time sure, but you can also just go look at it.
Reading code is such a basic requirement and would have been much faster
Is it possible to change the alignment of a CT_LISTNBOX picture within its column?
Unfortunately that doesn't help with what I wanted (centre aligning images within their column to make it less obvious that they have different horizontal padding). Oh well
Yeah its all super limited with listboxes
Personally I solved it with two listboxes on top of another
One listbox with center alignment for columns that need it, another with normal left alignment for other columns
This is not an option for selectable lists, only static ones
Might be better to just simulate your own list with any controls you want
Actually, maybe having two lists could work if you disable one and constantly ctrlSetScrollValues it to match another, but I haven't tried it
Emulating with ControlsGroup is much easier than you'd expect, IME.
Yeah, controls group is the most flexible solution
I'm suspecting the answer is no, but is there a way to have an ST_PICTURE image scale to fit the control's largest dimension while retaining aspect ratio?
In basic ST_PICTURE, the image stretches to fill the control but doesn't mantain aspect ratio.
With ST_KEEP_ASPECT_RATIO, the image keeps its aspect ratio but only scales to the control's smallest dimension, leaving blank space on the larger dimension.
I'm looking for the third option: scale the image to the largest dimension, without stretching, and crop anything that exceeds the smaller dimension. I haven't been able to find anything with searching, so it's probably impossible, but...can't hurt to ask.
Not. Unfortunately that's not possible.
GIB ST_KEEP_ASPECT_RATIO_WIDE
Just a proper picture canvas control
Hey, is there a trick to make a controlsGroup movable? Like maybe a custom controlsGroup class or something? Because in my dialog, Iβve got movingEnable set to true, same for my controlsBackground (moving true), and it works fine. But as soon as I add a controlsGroup inside controls, itβs not draggable anymore 
Only certain control types allow dragging usually CT_STATIC
Usually one would have a titlebar made out of a static control that allows the user to drag the display.
an example with 21 different images, called each frame
// Get the proper icon
private _frameIndex = 0;
private _siloIcon = _iconData get sideUnknown get _siloNumber;
if (_side in [west, east]) then {
_frameIndex = round (((_countdownTime - _currentCountdown) / (_countdownTime / 21)) max 1 min 21);
_siloIcon = _iconData get _side get _siloNumber get _frameIndex;
};
if (isNil "_siloIcon") then { continue };
_ctrl drawIcon [
_siloIcon,
[1,1,1,1],
getPosATL _x,
32,
32,
0
];
Sweet, cheers! Hadn't thought of doing it this way
i personally load all of the file paths into a large hashmap at start for easier code readability
Haven't made a GUI in a minute. The following code does not work. All the controls do not show when envoking this w/ createDialog
All that happens is a blank screen.
import RscPicture;
import RscShortcutButton;
import RscEdit;
class rscLoudspeaker {
idd = 91554;
movingEnable = true;
controlsBackground[] = {};
controls[] = {"confirm_button", "freq", "anprc_background"};
////////////////////////////////////////////////////////
// GUI EDITOR OUTPUT START (by Crowmedic, v1.063, #Dynasu)
////////////////////////////////////////////////////////
class anprc_background: RscPicture
{
idc = 1200;
text = "res\anprc_210.paa";
x = 5.5 * GUI_GRID_W + GUI_GRID_X;
y = 4 * GUI_GRID_H + GUI_GRID_Y;
w = 28.5 * GUI_GRID_W;
h = 12 * GUI_GRID_H;
};
class confirm_button: RscShortcutButton
{
idc = 1600;
x = 28 * GUI_GRID_W + GUI_GRID_X;
y = 12.5 * GUI_GRID_H + GUI_GRID_Y;
w = 4 * GUI_GRID_W;
h = 2.5 * GUI_GRID_H;
tooltip = "Set listening frequency"; //--- ToDo: Localize;
animTexturePressed = "res\anprc_switch_on.paa";
animTextureNormal = "res\anprc_switch_off.paa";
};
class freq: RscEdit
{
idc = 1400;
x = 14.5 * GUI_GRID_W + GUI_GRID_X;
y = 6 * GUI_GRID_H + GUI_GRID_Y;
w = 9 * GUI_GRID_W;
h = 2.5 * GUI_GRID_H;
};
////////////////////////////////////////////////////////
// GUI EDITOR OUTPUT END
////////////////////////////////////////////////////////
};```
have you defined the macros?
yes. I confirmed when checking the missionconfig in the config viewer that they are infact defined
all texture paths are correct too, no error are thrown of (file).paa not found
Figured it out I think. Man the GUI editor sucks. Those coordinates I believe must be way off screen. I changed them to using the safezone type coordinates and now they are showing up
hey guys so im playing around with some GUI and just realized that while in GUI config you can change many different things for button colors. But not in SQF? Theres only 4 commands that deal with background color, forground color etc. Is there no command for setting the colorBackgroundActive[] or colorFocused[] and colorFocused[]?
//when enabled - GUI Config
colorBackground[] = {0.38,0.38,0.38,1};
colorActive[] = {0.41,0.41,0.41,1};
colorBackgroundActive[] = {0.41,0.41,0.41,1};
colorFocused[] = {0.41,0.41,0.41,1};
colorFocused2[] = {0.41,0.41,0.41,1};
//when disabled - GUI Config
colorDisabled[] = {0,0,0,1};
colorBackgroundDisabled[] = {0.8,0,0,1};
//Sqf commands
//_button ctrlSetBackgroundColor [0,0,1,1];
//_button ctrlSetActiveColor [0,0,1,1];
//_button ctrlSetForegroundColor [0,0,1,1];
//_button ctrlSetDisabledColor [0,0,1,1];
Yes, not all config values are available in sqf, but also not all config values in the config viewer do something.
dam, I knew that was the case I was just hoping there would be a undocumented one im missing. Because changing the whole colour set is kind of important for using colour to show states.
The horrible work around is multiple buttons with different configs set and just show and hide the right one needed
Depdning on what you wanna do you can also use event handlers and change the button color
e.g when hovering hover it with the mouse you just fake the "active" color
Also whether this is viable or not will vary on what you're doing and how but I think I kinda got around that by using ctrlCreate to create controls of different classes based on what I was doing. Could still use commands for the rest but just allowed me to hack flexibility on that
ah the problem I found with this though is you can only change the background color (which is the color of the background when its not focused or hovered on) you cant change the focused color of a control that was my problem π
yes exaclty this, either dynamically creating them or having a few predefined with the same onclick handler and then just hide all but one, swapping to the colours you need. Horrible but it works
But you can change the background colour when the control is focused. I think there is an event for that.
Oh? I dident find a command for that just changing the non focused background colour.
I'll have to check events but if there is an EH for it there should be a way to change it... Just not that I've found
Never mind. This won't work as config focused colour will overwrite the background colour in that case.
You could try to make the button invisible and just have a CT static control in the background and change it's colour
does anyone know why controlsGroupCtrl will sometimes return as No Control? control and IDC are valid, it will just sometimes show No Control
Try
_this spawn {
call yourFunctionAgain
}
I have the same issue that Ctrls doesn't return Ctrls, and if no controls, spawn, and Ctrls are there. Do not know why.
Was this an issue that you shared on scripting?
On all files or just one GUI that doesn't return correctly Ctrls?
same issue as the one in scripting, it only happens for some IDCs, and only through a specific route
Eg, ace medical menu is fine, but doing it through interactions it fails
OnLoad fires before the controls are created. Normal Arma things.
ACE interaction menu is an entirely separate bucket of shit.
IIRC the problem there is something like the interactions not being set up for a class until you create an instance of that class.
We had to workaround that with some filthy hacks.
the rest of the stuff on the interaction work fine though, which is what confuses me
On the onLoad thing, the spawn works because the controls are created immediately after the OnLoad fires, so the minimum half-frame delay on spawn always works.
Trouble there is that you can't guarantee that it won't delay for another frame or longer.
A better way of handling the issue might be to put the onLoad on a "load order" control.
Because there's an order that the controls are created and you can probably guarantee that the onLoad will then fire after all the controls are created.
The onLoad is just a setVariable though, the actual creation of the body image is done via scripting and a CT_CONTROLS_GROUP
Plus im doubting its an issue with load order, as some bodyparts are fine
Well, it's either a load order issue or your code is wrong :P
There's too much UI out there for it to be randomly losing controls.
well im doubting the code is wrong, as medical menu works fine
Its just some limbs just dont show on peek,
There was a tool I used about a year ago that lets you edit and create UI for a3 in a seperate program but it was not the one from Bohemia in the game
I cant remember what it was called does anyone know what Im referring to?
I remember it. Arma dialog something. It's broken on its calculations.
It's better to do it by hand tbh. But it might help you a bit to get the basics, if you have no clue at all.
I'm trying to make a launcher with a custom optic view and I'm using the vanilla Titan launcher's as a base. Looking at RscOptics_titan, I see that several of the controls have idc values that correspond to defines in defineResIncl.inc. An example being the CA_OpticsZoom control in RscOptics_titan having an idc of 180 that matches IDC_IGUI_WEAPON_OPTICS_ZOOM in defineResIncl.inc.
By using the same idc in my own custom control it replicates the functionality found in CA_OpticsZoom, such as dynamically changing the control's text value and only showing the control when ADSing. Assuming this functionality is tied to a script instead of being engine-level, I'd like to find this script (along with others tied to IDC_IGUI_WEAPON_XX defines) so that I can see how it works and create my own, however I have not had any luck finding them. Am I correct in assuming this functionality is handled via script, and if so where can I find these scripts?
Likely engine-driven
Thanks!!! and yes I agree
I use the browser to display my HUD, but I get this error.
It appears when I try to upload an image in the browser.
if (primaryWeapon player != "") then {
private _weapon = configFile >> "CfgWeapons" >> primaryWeapon player;
private _weaponName = getText (_weapon >> "displayName");
private _weaponPicture = getText (_weapon >> "picture");
private _weaponAmmo = player ammo primaryWeapon player;
private _weaponMagazines = count primaryWeaponMagazine player;
_weaponPicture = [_weaponPicture, "\", "\\"] call CBA_fnc_replace;
_control ctrlWebBrowserAction ["ExecJS",
format [
"window.ArmaBridge.weapon.setWeapon(1, '%1', '%2', %3, %4)",
_weaponName,
_weaponPicture,
_weaponAmmo,
_weaponMagazines
]
];
};
On the browser side, I make composable to work with A3API, here is my method:
const requestTexture = async (texturePath: string, maxSize: number = 512): Promise<string | null> => {
try {
return await window.A3API.RequestTexture(texturePath, maxSize);
} catch {
return null;
}
};
And use:
const imageData = await requestTexture(imagePath);
if (imageData) {
weaponImages.value.set(slot, imageData);
}
It was necessary to remove the first two slashes...
But I ran into another problem.
How do I transfer Cyrillic alphabet to the browser?
If I pass Latin characters, everything works.
But if I pass the Cyrillic alphabet, it will be displayed as plain text with bit encoding.
I tried using ToBase64, but when decoding base64 strings, I get the same broken text.
I couldn't think of anything better than to convert everything to unicode...
UtilsSting_fnc_EncodeUnicode = {
params ["_string"];
private _result = "";
private _chars = toArray _string;
{
private _charCode = _x;
if (_charCode > 127) then {
private _hex = [];
private _temp = _charCode;
while {_temp > 0} do {
private _digit = _temp % 16;
_temp = floor (_temp / 16);
private _char = if (_digit < 10) then {
str _digit
} else {
switch (_digit) do {
case 10: {"a"};
case 11: {"b"};
case 12: {"c"};
case 13: {"d"};
case 14: {"e"};
case 15: {"f"};
default {""};
};
};
_hex pushBack _char;
};
while {count _hex < 4} do {
_hex pushBack "0";
};
reverse _hex;
_result = _result + "\\u" + (_hex joinString "");
} else {
_result = _result + toString [_charCode];
};
} forEach _chars;
_result;
};
You need to use a special method to decode base64 unicode. You can't just use atob
https://github.com/dedmen/ArmaWebBrowserTests/blob/master/JavascriptWebpack/src/Radar.ts#L9
Here. This works.
It takes the content AFTER it was atob'd by the browser API. So from its "corrupted" form, and fixes it up
This was ealier? or same stuff?
#dev_rc_branch message
aa, its same.
Yeah that was when I wrote that Radar code
I've tried using atob, but it doesn't work with Cyrillic. I also tried using ToBase64 in ctrlWebBrowserAction - it works for Latin characters, but it doesn't work with Cyrillic.
Please read again what I wrote
I got the impression that only ASCII characters are transmitted to the browser.
That's incorrect.
I couldn't think of anything better than
Anyone around to explain something to me? I'm working on a Zeus module to spawn a filtered arsenal where the filter depends on what option is selected and the function is executing perfectly but when I drop the module the selection menu isn't popping up, it just executes immediately with the default value (being a full arsenal).
I'm not sure what I'm doing wrong, am I supposed to create a GUI in Eden or is that supposed to be generated by the Arguments class?
Yes for Zeus modules you have to make a gui
Zeus i mean
It's one reason why I've been putting off moving modules enhanced to support Zeus.
Pain 
Do you just need a basic list of options?
Yea, a dropdown to select one of 7 options.
You can probably just use one of the vanilla ones as base
OK, I think I found it. I'll give it a go once I've woken up. Thanks 
Hey
Whats the best action to show ai recived damage by player shoot for the shooter player?
Like a fade in and out text style
I think this is subjective, but a sound would be cooler than a text showing off
Question. I'm having a problem by putting idc = -1 in some controls. When I open the GUI, a random control gets missing (not showing off, no error). But when I just make a new idc number for those controls, it works (all controls shows normally).
Does anyone else have this problem?
There are some known cases where controls must or must not have specific IDCs. Apart from these cases, using -1 for IDCs you don't care about is convention.
Is it really a random control that disappears or is it always the same one?
it depends on what control I put -1, not precise information, but I think the second control, after the control with -1, gets missing
class FrameLnB01: SuppliesMenu_Frame_Base
{
idc = -1;
style = ST_FRAME;
x = 0.237593 * safezoneW + safezoneX;
y = 0.359969 * safezoneH + safezoneY;
w = 0.216486 * safezoneW;
h = 0.290061 * safezoneH;
};
class Suplies_ListBox_items: SuppliesMenu_ListNBox_Base
{
idc = 89150;
x = 0.237593 * safezoneW + safezoneX;
y = 0.359969 * safezoneH + safezoneY;
w = 0.216486 * safezoneW;
h = 0.280062 * safezoneH;
};
class Supplies_Text_MagItems: SuppliesMenu_Text_Base
{
idc = 89102;
text = "Item";
x = 0.237593 * safezoneW + safezoneX;
y = 0.317959 * safezoneH + safezoneY;
w = 0.104963 * safezoneW;
h = 0.0280062 * safezoneH;
colorBackground[] = {0.2,0.23,0.18,1};
};
^ Item control gets missing/hidden/not showing
oooh you're right, I didn't read those details in the listNbox base class

Also #arma3_scripting
*but thanks brother β€οΈ *
I've been trying to figure out how the main BI menus load to a scenario or what functions they invoke for that (I.E. where you select a scenario and start it from the main menu). I've found the UI functions that handle those menus, for a more specific example the Host Multiplayer scenario browser, but I cant find anything that attaches actions to the actual buttons. There's plenty of code to change the other stuff on the Rsc like changing the mission summary / chat tabs but there's no actions on the buttons in config or in the UI scripts, either to switch displays or start the mission. I'm not seeing another code path here, am I missing something with how the main menu resources are set up?
What is your goal
Goal is to have a custom display/rsc on the main menu that has its own buttons to load into a scenario. I'm trying to figure out where the actions used on the main menu to switch between displays / enter game are defined so I can work from those.
Think I finally tracked down playMission, hostMission, createMissionDisplay, and createMPCampaignDisplay. Still don't know where most of the buttons are defined, but those are defined on the main menu gamemode dropdowns so that makes sense.
Well, the Apex Protocol button has it defined at least. The other quickplay / server browser buttons have their actions somewhere else
An easy thing to do is put a short video with play link the spotlight menu which is that center changing square
I'm getting Bad conversion: scalar in rpt file while my custom GUI is open. I'm gonna investigate this issue, but if anyone knows what kind of error is this I'll be thankful.
Bad type in config maybe?
I'm thinking the same, gonna double check that
strange
You're probably feeding number into something that expects string
Could be drawIcon command
just gotta add a lot of logging to isolate those.
and I'm only using Basic mods like cba, ace, zeus enhanced, adt
yeah
-debug doesn't show context for them.
but no clue, it just throws that error like randomly
It doesn't. You've just asked it to do something incorrect somewhere.
I mean random in a sense that I couldn't find precisely what is causing it, I thought it was causing by opening the custom gui, but by just making the character walk the rpt file fills up with that error
tomorrow I'm gonna test it out in other scenario and report back
Oops sorry
Huh. They are error messages, they go through the context reporting
Found the issue, not related to gui, going to move this discussion to another channel
I am not sure if this is the right place to ask, or if it should be in scripting? I know how to make decent dialogs, so far. I am going to make a simple one that displays server rules, with a next button, another page, etc. and a close button. I know how to script it so such a menu opens with a player command, but I need to know how to make it display automatically at spawn?
you can open the UI via initPlayerLocal.sqf
Many thanks.
Is there any simple mod that draws a 3d marker on the terrain to point where you are ordering AI squad soldiers to move? Like the Brothers in arms command ring. I found c2 command mod but itβs too complex
You can make this. Moderate knowledge level. Using draw3d.
Yes Iβve made it actually by spawning a per frame 3d object. Works good so far, thanks!
Hello! I'm trying to dabble in UI modding for the first time. What I've got going on is this:
class ListBackground: RscText {
idc = -1;
style = QUOTE(ST_CENTER);
x = QUOTE(0.139062 * safezoneW + safezoneX);
y = QUOTE(0.929 * safezoneH + safezoneY);
w = QUOTE(0.108281 * safezoneW);
h = QUOTE(GVAR(CBA_Setting_Pingbox_Size) / 3 * 0.066 * safezoneH);
colorText[] = {1, 1, 1, 0.5};
colorBackground[] = {0, 0, 0, 0.5};
};
Of note is this line:
h = QUOTE(GVAR(CBA_Setting_Pingbox_Size) / 3 * 0.066 * safezoneH);
Before my changes it used to look like this:
h = QUOTE(0.066 * safezoneH);
When I try to use this UI it seems like GVAR(CBA_Setting_Pingbox_Size) returns zero and the gui element collapses as its height is zero. I gather it means I can not use CBA settings like that.
What would be the best practice for basing the ui element size on a CBA setting?
Use a script in the display's onLoad event and resize it based on the setting
You can't use strings in style btw, its a number there.
ST_CENTER is 0x02
Does anyone know what kind of tech the Roles section on the multiplayer setup screen is using? I'm trying to automatically select a player into a slot and join them to the game with a script, but lbSetCurSel only highlights the role entry, as seen, while I still need to click to register my player as part of the slot. Clicking normally seems to both select and put the player in the slot, and clicking a slot again removes the player. No other keys seem to put the player in the slot while it's selected; it seems to be mouse only that triggers it.
The main issue here is that the functions that actually make and generate the listbox and other parts of the UI are hidden or stored somewhere else: there is an exposed onLoad script it runs at RscDisplayMultiplayerSetup.sqf, but that only configured the player's name and mission name and stuff; the code to actually make these other parts is hidden somewhere so I cant see if its a mouse action or if I need a different command for a different control or what variables I might need to manipulate.
Description.ext
class RscDisplayMultiplayerSetup
{
onLoad = "_this spawn compile preprocessFileLineNumbers 'autoSlot.sqf'";
};
Script may not be working but I believe this is the method @drowsy nacelle
Can you find RscDisplayMultiplayerSetup in config viewer?
I believe here it'll say type 12 / CT_Tree
But I wouldn't use the script as its no good but simply to show how I'd call the function without mission playing etc script may have issue for sure , not tested at all ^ ...
Yeah sure, makes sense. I did look at the config viewer and I'm pretty sure I verified everything was a listbox. I'll double check
yeah no, the ones I have are definitely type 5 and 102 (listbox and listnbox). Is this maybe part of another mod that edits that display?
Yes you are right it'll be an edited RscDisplay from the framework.. perhaps you have the open slot selected automatic, you can ctrlClick to select slot
I've got a button I added to my main menu that, when I did something like this years ago, worked:
{
idc = 57501;
color[] = {1,1,1,0};
colorActive[] = {1,1,1,1};
text = "tag_menu\images\ts3_ovr.paa";
x="0.425 - (1.5 * 10) * (pixelW * pixelGridNoUIScale * 2) - (2 * pixelW)";
y="0.9 - ( 10 / 2) * (pixelH * pixelGridNoUIScale * 2)";
w="10 * (pixelW * pixelGridNoUIScale * 2)";
h="10 * (pixelH * pixelGridNoUIScale * 2)";
url="ts3server://<teamspeak IP removed>:<port>";
style=48;
overlayMode=0;
};```
It doesn't work unfortunately. I removed the IP and port but I know the URL contents are good because when opened in browser, it properly asks to launch TS3.
Actually I tried this with an old menu I made a while back that DID have a working teamspeak button and that no longer works. Was there an engine-level change in any of the past few updates that could have changed the ability for url to open stuff? Happening to me on profiling and stable, and when I shared my PBO to someone to test it happened to him to. I tried changing the url to just google and no dice there either.
Yes
You need to whitelist URLs. That should have been always the case but was broken.
Is there an easy way to make UI icons for the arsenal, similar to the vanilla ones?
Doing some funky muck-arounds rn and remember hearing somewhere there might have been an easier way
No, you need to make the icons yourself if the ones ingame don't fit
I mean more like getting images of the items, like how they're just the helmet or uniform, without the guy wearing it
#arma3_config Is probably more fitting as these guys do this more often.
Maybe even #arma3_model
Thank you. This is partially it... now you cannot whitelist ts3server:// protocols or open them anymore π What a tragic fix. Worked when I whitelisted an http website so I guess that's it then.
Actually I guess if you had your own website, you could just load the url https://myunitswebsite.com/ts3 and then the page it loads is just html with <meta http-equiv="refresh" content="0;url=ts3server://<ts3 server ip>:<port>">. Just dropping that here so I don't forget and in case any future searchers come back this far.
ts3server:// is not a valid URL protocol.
Valid protocols are http(s)/ftp/gopher.
You could run your own webserver that does a redirect. So you can use http in-game, but the webserver will redirect to the ts3server.
Ah I'm replying before I finish reading all messages π
Fair, I can understand that, I'm just wondering if it could maybe be brought back given how prolific ACRE and TFAR are. Though I guess it's still a niche case to customize the main menu with this kind of thing. Would it only work if whitelisting was reverted to its broken state I guess? Only reason is I & the community I set the menu up for don't want to host or pay for hosting a web server just to redirect off it anyway
I can whitelist the ts3server protocol.
But... don't think its worth it
And there's no way it could be made compatible with CfgMissions whitelisting? i.e. don't universally whitelist ts3server but if it exists in cfgmissions then it would work? Sorry to take up time on this I'm just very wishful thinking right now haha
What would make it not worth it?
Apply the opposite thinking, what would make it worth it
Plenty of groups already add stuff to the main menu to quickly join their server, TS would just be an easy extension to it. It also seems like it was something that did work and was then removed
Agreeing with Dart that it used to work and would be very nice to keep working as previously expected, just a handy QoL feature
#arma3_scripting message @valid monolith are you making your own version of that display?
no, i'm using default version of display
the main problem is that I'm experiencing performance losses due to cba event handlers.
now i fixed it by overriding the cba class
class Extended_DisplayLoad_EventHandlers {
class RscDisplayMultiplayerSetup {
cba_ui = "";
};
};
a question, how can i make a custom hud with a food and thirst bar?
You mean same kind that ace has?
https://github.com/acemod/ACE3/blob/master/addons/field_rations/RscTitles.hpp
is how ace does fieldrations for food and thirst
yes, but also with a custom inventory menu
i want to use as few mods as possible to avoid errors
thats why i want to know how i can make one?
So you want to create your own "field ration" system.
Well that might be "big" progress, but you could follow how ace has done that.
You can do it without mods or like ace , use CBA , so you don't have "many" mods on thdt
the thing is, i dont know how to do it, i dont know anything about code but i would like to learn so i can make a hud like the one in dayz
Too big of scope for a newbie. Start smaller.
Try just, making a box that displays a text, put it in different positions, then expand on that.
well, thanks, i also tried to make a loot spawn script and lets just say it didnt turn out very well, it has a base, but thats all
but im stuck and i dont know how to fix it
Ok so that's a start. Forget the gui for now and stay on the script side. Start with figuring out how to just spawn a weapon in a ground weapon holder. Just a single one. Go back up to #arma3_scripting and we can start there
Does anyone have a formula for changing the text and icon size for the DrawIcon3D command relative to the distance from the player? When using
offsetX: Number - (Optional, default 0) X offset for the icon text
offsetY: Number - (Optional, default 0) Y offset for the icon text
If I move away from the object, the text moves very far from the expected position. This is also necessary so that when using multiple DrawIcon3D commands, the text doesn't overlap with other text. I also use different selection positions for different player information, so I have about six DrawIcon3D commands. I could, of course, use a single position and scatter the text using offsetX and offsetY, but that wouldn't work because there are multiple icons that are also positioned relative to the text.
Would it be better to detect the center position of the object on the player's screen and then use that position to calculate an offset relative to the resulting screen position and then convert those screen coordinates to world coordinates?
I assume this would be similar to the 2D screen position for drawicon3d. But I still need to do something with the sizes...
This is how I get a multiplier for the text size and set minimum and maximum values ββso that the text doesn't disappear completely or become huge next to another player.
((0.04 * _k) min (0.04)) max 0.021```
I hope someone has ideas on how to improve this so that the text on 6+ drawicon3d commands adapts to the distance and doesn't overlap.
you can use linearConversion
I know linearConversion but I still don't understand how to nicely wrap all 6 drawicon3d in 2D position... I guess I really will have to use posScreenToWorld and posWorldToScreen
DrawLine3D works in such a way that the line disappears behind the texture of another intersecting object. Is there a command that creates a line on the screen so that it can be seen even through objects?
The advanced dev tools mod has a 2D line, but I still don't understand how it works. I also noticed that it continues to render even when another display is open.
I figured out how to create a 2D line. It's actually ctrlCreate "rscLine" in the mod...
anyone know where i can fin the GunParticles config to make a new one ?
for example the signal pistol's gunparticles :
{
class Effect1
{
effectName="StarterPistolCloud1";
positionName="usti hlavne";
directionName="konec hlavne";
};
class Effect2
{
effectName="StarterPistolCloud2";
positionName="konec hlavne";
directionName="usti hlavne";
};
};```
That's not gui related, #arma3_config
But it's just CfgCloudlets iirc. Maybe complex effects which are just defined in the config root
My bad missclicked the channel i guess
i checked the weapon root config and the config in weapon_f but can't find anything :/
Just look at the in-game config viewer, not the actual pbo files
Im not sure whether to ask here or #arma3_config but:
I want to make a button in MainMenu to take me to the Editor, but when I checked the already existing Editor buttons they dont really have anything onButtonClick, so my question is, how do I open Editor through script?
Edit:
setting idc to 142 works kinda, but is not a nice solution and breakes some stuff as well
What's the menu for double clicking on an object in Zeus where you can change the health / fuel / whatever?
I want to add some more stuff to it for a specific object of mine
I believe its idd 315 ( "Display3DENEditAttributes" )
oh wait thats 3den. one sec
I'm thinking it might be Control #10312 (under display 312 which is curator)
the config dump commands are not working well on linux dev, so I can't test atm
Do you know the class for it?
I was looking for it but couldn't find it before I left for work
I don't. I was doing current display dumps and comparing them to find the difference between when its on vs when its off. On the zeus display, the only thing different between when the menu was there or not was Control #10312.
Interesting
Will probably just do a search for that idc then
Still at work but I remembered ace cargo adding a button to unload cargo to it so I went digging there.
I think it's this
https://github.com/acemod/ACE3/blob/c897d5fd7fd7a30b193dfba61448777000de40b4/addons/zeus/ui/RscAttributes.hpp#L474
Zeus Enhanced is probably a good resource too
Is there something preventing RscVideoKeepAspect from playing in main menu? I did something like this, but it doesnt seem to work:
-# aa_loading.pbo\config.cpp (vid.ogv is placed in same location, so directly in the pbo)
class RscVideoKeepAspect;
class RscDisplayMain: RscStandardDisplay {
...
class ControlsBackground {
...
class BackgroundVideo: RscVideoKeepAspect {
x = safeZoneXAbs;
y = safeZoneY;
h = safeZoneH;
w = safeZoneWAbs;
text = "\aa_loading\vid.ogv";
};
...
Indeed it is, im using for all my units and structures custom attributes 3DEN and ZEN, its a bit effort to make it happen but if you got it once its mostly a copy and paste for other stuff you want to add to ZEN π
Zeus Enhanced replaces the vanilla one entirely, and I don't want to force people to use Zen
Indeed i know but ZEN is anyway a better alternative to regular ZEUS + its not a big dependency. Lot people use it also
And there are lots of people who don't Β―_(γ)_/Β―
Why menuSetShortcut no work in 3den? Or command need only for visible text?
Shift+T and Shift+G no work...
I must add EH keydown for display 3den?
How is your config?
No config... command menuSetShortcut
in file init3DEN.sqf
Then post your script
private _indexUncheckable_0_1 = _ctrlMenuStrip menuAdd [[_indexMain2], "ΠΠ·ΡΡΡ ID ΠΌΠ°ΡΠΊΠ΅ΡΠ°"];
_ctrlMenuStrip menuSetShortcut [[_indexMain2,_indexUncheckable_0_1], 1024 + 20];
Hi ! I'm currently trying to make a menu with a camera at mission start. The problem it seems is that it execute when the players are in the map menu before the mission is really started. I tried with the didJIP param from initPlayerServer.sqf, but it doesn't seems to change anything. and even after the map the camera is created and set for the player however spawns at [0,0,0].
Iirc you need to do it via config or add an event handler to eden editor that handles the shortcut.
bruh menuSetShortcut non functional... only visible 
I think so.
I don't remember exactly, but before executing the code in a mission (not in a briefing), it is enough to check that display 46 is not empty. With waituntil
!isnull finddisplay 46
Thanks I'll look into it.
It worked ! But now my unit spawn into [0,0,0] but if I disable my function that load the camera I spawn where I placed my Unit originally.
a3\ui_f\hpp\defineResincl.inc has
// unit info (to preserve order) - new A3
#define IDC_IGUI_AMMOCOUNT 184
#define IDC_IGUI_MAGCOUNT 185
do they work for weapon scopes?, I tried them but no luck, but maybe I did something wrong
looking for it in the discord, someone had asked before but looks like no answer #arma3_config message
Good day. I'm struggling with most of my custom GUI interfaces blocking the VoN communication. Is that a known issue? Where would you suggest to start digging?
UPD: I've found out that the only UI that is not blocking the VoN is the one that gets opened a) from the custom button in Inventory UI and b) Inventory UI is still in the background. By switching the calling function from one module to another I now have another window that is no longer blocks VoN 
Again, the question is, is it a known issue and what do I do?
I saw your message the other day (#arma3_scripting message), but I have no answers for you.
The topmost dialog seems to get input focus (mostly) ... The player can't move or shoot, but in multiplayer (or MP preview in Editor) chat channels can still be cycled, opened and used without closing the custom dialogs. I didn't test with VoN / TFAR / ACRE. I can only guess π€·ββοΈ
- Maybe you are using an
onKeyDownUI EH that returnstrueto override something? - Maybe your PTT key collides with a dialog-specific keybinding (e.g.
Tabautomatically moves focus from one control to the next)? - Maybe it's engine behavior?
b) Inventory UI is still in the background
Interesting. Is the inventory the parent display of your own display or do you just add controls to the inventory display?
Nah, I create completely new display with createDialog that is naturally drawn on top of Inventory UI hiding it
I mash the same buttons in both cases, I swear π
The first time this interface is called with a hotkey, second time from Inventory UI
Maybe it depends on the parent display π€·ββοΈ You could play around with createDisplay instead of createDialog ...
Can you open chat when you open it with your hotkey?
π€ Yes, I can
That actually makes a lot of sense - Inventory UI is a display, not dialogue 
Yep. Thank you, changing createDialogue -> createDisplay solved the issue (while adding a bunch of new ones, but that's another topic).
In retrospective, it now seems obvious and not GUI related, so sorry for offtop here 
No I think this is very GUI-related and relevant!
I am trying to create a RscVideo in the arma 3 main menu that automatically plays and loops infinitely. I am intentionally avoiding the mission cutscene way, since I have annoyances in how it works and want to avoid it. Currently I just tested making a rsc, but I come up with an issue: when I use a video path used by Spotlight3 in vanilla, it works somewhat, but in a weird way where when i hover over Spotlight3 the video will play once, despite being unrelated other than having the same .ogv path. However if I use any video that I place in the pbo, even if its the same exact ogv from Spotlight3 extracted to the pbo, the video does not play at all. Im attaching my config.cpp and a video showing what happens. Can someone explain to me why this happens or how to fix this and just have a RscVideo that works?
#include "define.hpp"
class CfgPatches {
class ADDON {
name = QPRETTY;
author = "Puotek";
requiredVersion = 2.18;
requiredAddons[] = {"ace_common"};
units[] = {};
weapons[] = {};
};
};
class RscVideo;
class RscStandardDisplay;
class RscDisplayMain: RscStandardDisplay {
class ControlsBackground {
delete Picture;
class puo_MyVideo: RscVideo {
//text = "\aa_loading_video\spotlight3.ogv";
text = "\a3\Ui_f\Video\spotlight3.ogv";
x = "safeZoneX";
y = "safeZoneY";
h = "safeZoneH";
w = "safeZoneW";
autoplay = 1;
loops = 1;
};
};
class Controls {
delete BackgroundSpotlightRight;
delete BackgroundSpotlightLeft;
delete BackgroundSpotlight;
delete Spotlight2;
delete Spotlight1;
delete SpotlightNext;
delete SpotlightPrev;
delete LogoApex;
delete Logo;
delete Footer;
};
};
anyone got a good gui tutorial for starting out?
I am trying to make something very close to the gui in the picture (taken from zeus enhanced ambient flyby module)
is it complicated? been trying to understand some of the code from the zeus enhanced github but it's wrapped in many functions that load everything into one another
There is a GUI tutorial on the Wiki (https://community.bistudio.com/wiki/GUI_Tutorial), maybe that can get you started. For me, the go-to resource when working on GUIs is https://community.bistudio.com/wiki/Arma:_GUI_Configuration.
Zeus Module uis Work a bit differently though. There is a function handling some of the positioning
Check out the UI code from Zeus enhanced and start from there.
As for complicated: Arma 3 GUIs are rather limited. Making GUIs is a lot of work and requires a lot of fiddling around. You can build some things with the available building blocks and APIs, you can build some more things with some workarounds, but there are certainly limits. Sometimes these limits come as a surprise and sometimes they are not documented π
yeah as I mentioned it's a lot and I had a problem trying to figure out how stuff are called and from where. but it absolutly seems like a great implementation
I am trying to use the onLoad attribute but it won't call my function..
class isrtg_RscDisplay : zen_common_RscDisplay {
onLoad = "call isrtg_fnc_initDisplay";
function = "";
checkLogic = 0;
};
do I need to use some namespace stuff?
No.
Check if isrtg_fnc_initDisplay is initialized + add some logging in the function.
Is there a script command setter for line spacing? Seems to be just lineSpacing property in the control config
If there is a command, I cannot find it on the wiki at all
Made a ticket
https://feedback.bistudio.com/T196100
@tranquil iron when are UI on Textures deleted?
Making name badges on backpacks and wondering if I should explicitly handle cleanup on dead units myself or just let normal body cleanup take care of it.
The display is also still there (findDisplay "..." returns "Display #-1") even if I swap backpacks, so it doesn't seem to be deleted then. Also, how do I "close' a UI on Tex manually? Doesn't seem like closeDisplay works.
when VRAM runs low
How can I manually close one, or can I not do that?
closeDisplay works but it has tricky timing..
set -debug and you'll see "UI2Tex display is closing, destroying."
Problem is. That closing check is only done when its rendering.
And when its still rendering one frame after closing it, it will re-open
How should I close it then?
Doing:
private _display = findDisplay "...";
_display closeDisplay 1;
[{ _this closeDisplay 1 }, _display] call CBA_fnc_execNextFrame;
Doesn't log the message you mentioned (yes I have -debug on)
Last rpt message about it was just it being created
Oh does it need a displayUpdate after closing?
Yes it does
Though I don't seem to be running into the re-open thing you mentioned. Just the closeDisplay and displayUpdate seems to be doing the trick (without the execNextFrame)
Someone should probably put that in the wiki.

I can't delete the border of an edit input, how to ?
idc = 38201;
x = 0.400995 * safezoneW + safezoneX;
y = 0.3416 * safezoneH + safezoneY;
h = 0.0272222 * safezoneH;
w = 0.132917 * safezoneW;
text = "";
colorBackground[] = {0,0,0,0};
colorDisabled[] = {0,0,0,0};
colorActive[] = {0,0,0,0};
colorText[] = {0,0,0,1};
style = 0;
shadow = 0;
borderSize = 0;
sizeEx = 0.025;
font = "EtelkaMonospaceProBold";
};```
There is a style for it.
ST_NO_RECT
Tried it beforehand but did nothing, can this be caused by the inherited class?
If you define style again, it will override your inheritance.
So you should able to define
style="0x0200+0x00"
Funny that in GUI https://community.bistudio.com/wiki/Arma:_GUI_Configuration#Control_Styles
Is 0 = 0x00 ,
Plain single line box without a border
Thanks for the link! I'll try that
shouldn't it be style=0x0200+0x00; tho ? without the "
Just did like in examples
#include "\a3\ui_f\hpp\definecommongrids.inc"
class RscTitles
{
class RscInfoText
{
idd = 3100;
fadein = 0;
fadeout = 0;
duration = 1e+011;
onLoad = "uinamespace setVariable ['BIS_InfoText',_this select 0]";
onUnLoad = "uinamespace setVariable ['BIS_InfoText', nil]";
class Controls
{
class InfoText
{
idc = 3101;
style = "0x01 + 0x10 + 0x200 + 0x100";
font = "RobotoCondensedBold";
x = "(profileNamespace getVariable [""IGUI_GRID_MISSION_X"", (safezoneX + safezoneW - 21 * (GUI_GRID_WAbs / 40))])";
y = "(profileNamespace getVariable [""IGUI_GRID_MISSION_Y"", (safezoneY + safezoneH - 10.5 * (GUI_GRID_HAbs / 25))])";
w = "20 * (GUI_GRID_WAbs / 40)";
h = "5 * ((GUI_GRID_WAbs / 1.2) / 25)";
colorText[] = {1,1,1,1};
colorBackground[] = {0,0,0,0};
text = "";
lineSpacing = 1;
sizeEx = 0.045;
fixedWidth = 1;
deletable = 0;
fade = 0;
access = 0;
type = 0;
shadow = 1;
colorShadow[] = {0,0,0,0.5};
tooltipColorText[] = {1,1,1,1};
tooltipColorBox[] = {1,1,1,1};
tooltipColorShade[] = {0,0,0,0.65};
};
};
};
};
Great thanks!
Is Cyrillic keyboard input broken in CT_WEBBROWSER?
When I type "ΠΏΡΠΈΠ²Π΅Ρ" using the Russian layout, I get "?@825B" instead.
keyboard input (not script)
I shall remember to check this tomorrow next week
I use CT_WEBBROWSER and when I try to enter Cyrillic alphabet in the input field, it is broken.
I tried to normalize it using a function that was already thrown in this chat, but nothing changed.
I don't believe that you can't enter Cyrillic characters in CT_WEBBROWSER.
I see I'm not the only one)
I found out that this is a regular 1024 shift.
For example, here:
And here is the same input in Arma 3
What do you think we can do about it?
This returns ASCII, you can block input in html and send the symbol via ExecJS
It's just terrible...
It seems like the best way at the moment.
@tranquil iron
I did a little investigation into this issue and this is what I managed to find out:
The essence of the problem:
When entering Russian characters through text fields in CEF, Arma transmits only the low-order bytes of the UTF-16 representation, permanently losing the high-order bytes.
Technical Details:
- Russian "ΠΏ" (U+043F = bytes [04, 3F]) comes as byte 63 (lowercase 3F only)
- Russian "Ρ" (U+0440 = bytes [04, 40]) comes as byte 64 (lowercase 40 only)
And so on for all Cyrillic characters
Why English characters work:
English characters "work" randomly because their Unicode code points match ASCII codes:
- 'a' = U+0061 = bytes [00, 61] β remains 61 = 'a'
- 'b' = U+0062 = bytes [00, 62] β remains 62 = 'b'
The problem appears only for characters outside the ASCII range (U+007F and higher).
The problem lies somewhere at the junction of CEF and the Arma engine, where this transformation takes place. This seriously limits the possibilities of creating interfaces with text input.
If very roughly, when can we expect fixes in production?
And how should deletion, insertion, and other things be handled?
My knowledge of HTML/js isn't great, but it seems to work.
sqf:
createDialog 'testpage';
(uiNamespace getVariable 'testweb') ctrlWebBrowserAction ["OpenDevConsole", ""];
(uiNamespace getVariable 'testweb') ctrlAddEventHandler ["Char", {
params ["_displayOrControl", "_charCode"];
(uiNamespace getVariable 'testweb') ctrlWebBrowserAction ["ExecJS", format["insertChar(%1)", [_charCode]]];
}];
js:
<script>
const input = document.getElementById('i');
input.addEventListener('beforeinput', e => {
if (e.inputType === 'insertText' ||
e.inputType === 'insertCompositionText') {
e.preventDefault();
}
});
function insertChar(text) {
text = unicodeArrayToString(text);
const start = input.selectionStart;
const end = input.selectionEnd;
input.value = input.value.slice(0, start) + text + input.value.slice(end);
const newPos = start + text.length;
input.selectionStart = input.selectionEnd = newPos;
input.focus();
}
function unicodeArrayToString(unicodeArray) {
return unicodeArray ? String.fromCharCode(...unicodeArray) : "";
}
</script>
Of course, still need to check the focus and maybe a few other things, but overall it works
Inserting text will break your scheme.
But right now it's the best solution possible.
I hope this problem will be fixed soon(
Even if base64 is received during input, it's better than losing 1 out of two bytes.
why?
Indeed, inserting text does not suffer from this problem.
raw_bytes:208,191,209,128,208,184,208,178,208,181,209,130
raw: ΠΏΡΠΈΠ²Π΅Ρ
@marsh pine I don't know if this will help solve the problem faster or not, but I started a bug report with my investigation of this problem.
Hey! Is someone out there who was able to make an extension to use custom browser instead of the inbuild steam browser ?
@rose wadi You mean with CT_WEBBROWSER?
I meant bringing in another browser like chromium for example because webbrowser has its issues and is basically only streaming the steam browser
Accessing https://www.whatbrowseramiusing.co/ in the Steam Overlay Browser tells me that it is Chrome 126.0.6478.183 (that version was released in July 2024). It seems that the Steam Overlay relies on the Chromium Embedded Framework.
I have no idea what Dedmen had to do to embed the embedded Chromium browser from the Steam Overlay into an A3 GUI control ... but it probably wasn't easy π
I think its this dll which is getting used https://github.com/arma3/RVExtensionImGui/blob/main/dllmain.cpp#L38
Ah nvm its for ExtensionUi
But I guess if we wanna use a own browser we have to use ExtensionUI
Or I guess access the render directly with RVExtensionGData ?
Π‘ΠΏΠ°ΡΠΈΠ±o, fixed
No. Extension UI, exactly like how I did the browser example.
Just swap in your own CEF if you don't want to use Steams that is alot of effort tho
do you know if there is a way to add a custom font to the web ui ? I guess only possible with internet access
In advanced debug console. There is GUI editor for graphical dialog creation. Is there a way I can edit dialogs I created before? I thought I'm supposed copy dialog's code and paste into the GUI editor, but this doesn't work for me.
You can use data URL's in css file's font thing. I have a sample..
@rose wadi
Quite a chore to create.
I think there might be a webpack tool that can automate it
https://github.com/dedmen/ArmaWebBrowserTests/blob/master/JavascriptWebpack/src/KillTracker.scss
I did this in a webpack thing.
That will embed the font file (still had to download it manually first) as a data url when packed. I think its webpack "HTMLInlineCSSWebpackPlugin" doing that
Thank you! I will try it out
If it's the Avanced Developer Tools by Leopard20 the GUI creation implemented in there is actually just a quick shortcut to what exists in base Arma. In the case of that CTRL + I or CTRL + O will be your friend 
https://community.bistudio.com/wiki/Arma_3:_User_Interface_Editor#Controls
Been a while since I've used the editor but I feel like I remember exporting as GUI editor format CTRL + S and importing with CTRL + O being less of a pain because I could keep my classes if I was adjusting them and using preprocessors
I thought it's from vanilla, but wasn't sure, so I just called it ADT thing π
A was trying to paste it using Ctrl + V, I guess that's what was wrong. Will try Ctrl + O
People like to talk a lot of smack on the UI editor but honestly I kinda like it for initial architecture. It's pretty cool for creating all of the initial controls and positions if you've got a plan for it.
Pro tip though I would advise exporting as both (GUI Editor Format and Config) as GUI Editor Format is easier able to be reimported if you've made changes to the base classes manually (which always happens at some point) π
Can't count how many times I've exported as config, made changes with preprocessors and such then had to rework to get it to go back in the editor 

Pressing Ctrl + O causes screen to blink, but it never imports anything. All it does is wiping all elements in GUI editor
You have to have the GUI editor format copied to clipboard iirc. It might also generate comments you have to have copied as well I think
Yeah
I just found out
I was copying entire comment
Isn't there a way how to do it only by coding? I mean without a mission restart, like using execVM to open dialog and quickly see the changes?
If it's by class I don't believe so. If you're using commands like ctrlCreate you can spawn pretty much whatever UI you want in debug console which allows you to make changes super quick and easily.
Although I tend do a mix of config / ctrlCreate when testing ctrlCreate is definitely way easier. I like for my main UI to be a config and will occasionally use the UI editor for initial architecture. Then use ctrlCreate to dynamically create buttons per whatever array or data I might wanna build off of.
Only draw side to ctrlCreate is you don't get near as much ability to customize controls. There are a lot of GUI commands which allow you to do quite a lot ctrlSetText, ctrlSetTextColor, ctrlSetTooltip, etc. Every once in a while tho you'll run into something that doesn't have a command like maxChars. A solution around this is creating a base class for your control with those attributes then using ctrlCreate so you get the best of both worlds.
Anyway a whole bunch of yap outside of what you asked but in case it helps 
Absolutely
Does anyone know if there is a method of getting whether the player has confirmed external URLs for CT_WEBBROWSER? I imagine a lot of that is engine to avoid people from setting a variable to say they've confirmed when they haven't haha
Essentially just looking to add a loading screen of sorts while that prompt is up
I am unsure where to ask so I want to completely DISABLE the BIS_fnc_cinemaBorder function when I play missions or campaigns, to disable the black borders during cutscenes. I noticed this is enabled when subtitles are on or off, so it must be a visual mode. How do I disable this globally when the script or mod is running?
You can replace the function using your own config, FYI
I tried "BIS_fnc_cinemaBorder = {}" in init.sqf and it kinda worked but the cinemaborders would reoccur. I am replaying the CWR Campaigns right now and it is outdated with modern resolutions and aspect ratios.
That's not how it works
Example you can see the blackbars overlay.
They probably use other methods. It can be
Should I open the campaign PBO's and do a search for the black bar cinema functions? then replace it with {}?
Rather not mod the campaigns.
No, that's not what I've suggested. Replace the function file is
I found it. The campaign is using showCinemaBorder true; it is in multiple sqf files per mission, such as intro.sqf or outro1 or outro2.sqf. How can I disable it via an external script?
You can't unless you showCinemaBorder false everyframe and call it a day
OK, so I basically need to notepad++ global search and replace and repack the pbo for my own play?
Let me review scripting then and come back... I understand what you are saying! π
But you can yes
I have an issue with link not working in main menu
I have
class SAS_BigButton_1_Overlay: RscActivePicture
{
idc=-1;
color[]={1,1,1,0};
colorActive[]={1,1,1,1};
text="sas_menu\data\ts3_ovr.paa";
tooltip="Connect to Teamspeak";
x="0.5 - (1.5 * 10) * (pixelW * pixelGridNoUIScale * 2) - (2 * pixelW)";
y="0.95 - ( 10 / 2) * (pixelH * pixelGridNoUIScale * 2)";
w="10 * (pixelW * pixelGridNoUIScale * 2)";
h="10 * (pixelH * pixelGridNoUIScale * 2)";
url="ts3connect://secret_serveraddress?port=10000&channel=Briefing%20Room%20(Rubber%20Room)";
style=48;
};
and
class CfgCommands {
allowedHTMLLoadURIs[] += {
"https://discord.gg/*",
"ts3connect://secret_serveraddress?port=10000&channel=Briefing%20Room%20(Rubber%20Room)"
};
};
I also tried with "ts3connect://*" in allowedHTMLLoadURIs
neither works/gets approved
when replaced with discord link it works
any ideas?
Is allowedHTMLLoadExtensions[] = available in CfgCommands, I tried with it as well but it did not help
is ts3connect supported?
Its a custom registry entry that I made, since ts3server is borked
It works outside of arma
I guessed so but some confirmation would be nice
or maybe we could get support for other extensions
nothing in .rpt file?
well they should add some login :/
Can anyone tell me why drawicon3d has a problem with the rotation angle? My camera rotation is set to 0, which means the icon rotation should be correct for all orientations. But at some angles, the rotation breaks.
I found how to fix this.
Need this
360 - getdirvisual _x
Isn't it just sqf getDirVisual _x?
Without "360 -" the rotation is incorrect for some reason, just like in the first video.
I use getDirVisual because getDir starts to twitch at a large distance.
I also added a check to see if there is some object above the enemies, and only then will the icon be displayed.
I wrote this code in 2020. It's like a satellite camera on a tablet. And today I completely optimized it and got rid of a huge amount of useless code. When I looked at this code, I thought I'd chop off my own hands if I sent myself back in time. Back then, I was creating one EH Keydown for each individual action. And these are the least of the terrible things I did back then.
Ah I mean sqf -getDirVisual _x
For unknown reasons, URL's length is limited to 255 characters.
-# https://community.bistudio.com/wiki/htmlLoad
does this affecturl=in GUI?
I over ridden both RscBackgroundStripeTop RscBackgroundStripeBottom so the colorBackground[] = {0, 0, 0, 0}; and it cleared it!
Now what are the classnames for those two black boxes on the left and right classes called so I can overwrite it as well? Thank you for the advice.
class RscDisplayMain : RscStandardDisplay {
class ControlsBackground {
delete Picture;
class PuoGroup : RscControlsGroupNoScrollbars {
idc = 213702;
x = "safeZoneX";
y = "safeZoneY";
h = "safeZoneH";
w = "safeZoneW";
class Controls {
class Picture : RscPictureKeepAspect {
idc = 1023;
text = QPATH(background.jpg);
x = "safeZoneX";
y = "safeZoneY";
h = "safeZoneH";
w = "safeZoneW";
};
};
};
};
class Controls {
delete BackgroundSpotlightRight;
delete BackgroundSpotlightLeft;
delete BackgroundSpotlight;
delete Spotlight3;
delete Spotlight2;
delete Spotlight1;
delete SpotlightNext;
delete SpotlightPrev;
delete Spotlight;
delete LogoApex;
delete Logo;
delete Footer;
};
};
I have something like this, but despite using safeZone stuff, my PuoGroup >> Picture control is in the top left corner kinda, why?
thanks, that fixed it
Is there a way to adjust volume of a RscVideo?
on related note. Setting 3840 X 1080 (32:9) CREATES THE LEFT AND RIGHT Boxes. But 3840 x1200 (24:6) stretches the hud so the Left and Right boxes are not there, but the bottom UI strip is no longer centered and stretched to the ends of the screen.
Is this an FOV settings issue and not a screen or GUI background setting?
Have you manually changed the fov value?
Default settings. I tried to force non stretch but it still keeps the pillar boxes. Only 3640 x 1200 would remove it, but then the ingame gui elements would push the indicators to the edge of the screen. I think it has something to do with the triplehead setting and the gui safe space mixing up.
Yeah. I think these resolutions and ratios are not officially supported
I did fruther testing with triplehead=1 and 0 and that was the setting creating the pillar boxes and stretches, or centers the ingame UI. It's either with pillar boxes and centered (set to 1) or stretched and no pillar boxes (set to 0).
DayZ's UI rendering shows no pillar boxes at nonstandard resolutions and keeps the UI indicators centered properly.
Hopefully this might be addressed in a future beta update.
Edit - I forgot we can manually set the indicator elements in ARMA 3 under GAME OPTIONS. Maybe DayZ just has presets for it hence I never noticed.
Edit - I solved the GUI Indicator Issue. In the screenshot, goto GAMES, then LAYOUT, click on the team menu from the left and slide it to the middle in yellow as shown. It will pull all the LEFT and RIGHT elements TOWARDS the center of whatever widescreen resolution you have. Leave the triplehead settings to 0 (zero) to not have pillar boxes.
Working on an addon to integrate with Simplex Support Services and AI Decelerates, not climbs. In addition to trying to solve the problem of AI flight in Arma 3 that these two mods tackle, my plan is to create synchronized flight plans, to allow coordinated CAS, Transport, and Logistics of multiple air assets with go codes, Zulu Clock conditions, to allow for advanced coordinated Flight Planning for those that love to get the most out of the AI, and focus more on just being a grunt. Its a big WIP but I'm enjoying the Flight Planner so far.
UI looks pretty nice, I like the vibe
Definitely nail the color schema
Did another pass.
so this is the UI designer that my gf told me not to worry about
Another little sneak peak.
Toggleable Waypoint Info.
Really nice. Do you have a real life reference?
does anyone have recommendations on how to create guis without having to restart arma every time I want to make a change?
(I am making an addon)
Either build most of it in a mission first, or use diag_mergeConfigFile with the diagnostic exe.
Some good info in the conversation here #arma3_gui message
This sounds cool! Any plans to include carrier based planes with taxi, launch, and landing integrated?
what is the the path to this delete icon
Check in display3den. The path is in the button control.
https://gist.github.com/HallyG/fa7a6cda10abcb630b1dc325f0523553
Very handy script to browse all icons etc.
Just place a unit, hit play, and exec the script in the debug console.
That is the hope. I donβt know if Iβll do like a full taxi but at the very least the intent is to get carrier based flights working.
thanks, I found it
"a3\3den\data\displays\display3den\panelleft\entitylist_delete_ca.paa"
after much pain and suffering
This lets you save and load objects to their absolute position (something that normal comps don't do) which means you can edit one part at a time and not have all the objects in the mission while editing. Good if your mission has over 10k objects
quick question, is there a way to change the size of a picture inside of a ctrlToolboxPictureKeepAspect?
I tried using sizeEx and looking around in the biki but haven't found a solution..
No. You need to increase the size of the control, or reduce the column or row count to increase the space each picture has.
If you want the picture to fill the area of the cell it's in you need to adjust the texture size to fit the cell size.
I am redesigning the UI right now and I can't seem to get this text to work properly, the other text are just placeholders right now
https://github.com/PiG13BR/PIG-CAS_Menu
Not near as good as yours, but here I have some functions to work with the carrier
I semi fixed it, but now the search button wont show
because main menu is a compatibility nightmare
(two mods edit same menu, shit falls apart)
I am deleting the menus and making completely custom ones
Hey, thank you for sharing this, will take a glance when I make it home from the Holidays! Cheers!
does someone have suggestions or code example of how would you make a tooltip with an image and some text? specifically inside a listnbox
the goal is to have something like when u hover the vehicles in zeus tree and you see the preview picture, and if possible add some text the bottom / top
Make sure to read the note on lbSetToolTip setting the tooltip for the whole column by default, you can change that though
don't think you get what I meant.
I want there to be text in the column, but when hovering I want a "tooltip" that will be a picture and some text.
I know that lnbSetPicture is used to change the picture inside the column and not in the tooltip.
also iirc lnbSetTooltip is just for text
just like in zeus unit tree..
Ah, then no. You can't have an image in the tooltip
Hm actually you could try structured text
is there a mouse over event? anything like that?
I think this will work if I can manage to calculate the position of the mouse and check if it correlates to a certain row.
thank you!
I think you're correct about structured text. @gleaming crater if you go for it tho might be worth taking a look at this #arma3_gui message as otherwise you'll be losing sanity on why Y doesn't work properly 
It is the correct way. Sadly there is now event that return the selected path as it does for tree view.
thank you, but how would I use it if it's operating on the control and not the tooltip?
ctrlSetStructuredText π
but wouldn't it change the text inside the listnbox row?
Unfortunately yes if you already have text assigned to that control
Both can exist though if you're wanting it side by something
yeah I do, but then how do I know when the mouse is hovering over it?
it will only be set to the image and not the text
Are you wanting the image in the tooltip or the list box?
in the tooltip. see zeus hover inside the tree of vehicles for reference, that's exactly what I want only in the listnbox
like this
How to shoot 9k11 on bmp1 rhs mod cuz when i shoot the atgm it just go straight to the sky and not follow my guide at all
Literally just go straight forward
Sorry I am still confused. Are you wanting something to pop up when you hover over the picture in the tooltip or something?
If you set the picture with ctrlSetStructuredText it'll all still be apart of the same control
I want to it be like in the picture I sent, when I hover over an item in the listnbox, a picture would show up containing in image (and if possible also some text).
The picture will be seperate (i.e like a tooltip, which is seperate from the text inside the actual row) and will appear / disappear when hovering (just like in zeus)
imagine if a tooltip could contain an image and not just plain text..
If I am understanding correctly then (which I may not since it is late my time) then ctrlSetStructuredText should work for that as the tooltip should just be a control. Take for example:
_ctrl ctrlSetStructuredText parseText (format ["<t size='2.5' valign='middle' align='center'><img image='images\icon.paa'/></t>"]);
If you need to have text you should be able to add it in the format along with it although it can be a little finicky.
I will try, thank you for the help!
oh my tooltip is not a separate control.. it's just the tooltip added with lnbSetTooltip so that wouldn't work..
I think I with try it will onMouseMoving
Oddly enough I am trying onMouseMoving now to see if I could get you a more specific use example and appears it doesn't even wanna work for me. Currently running:
(findDisplay 49) displayAddEventHandler ["onMouseMoving", {
hintSilent str _this;
}];
Which throws:
2:35:55 Error in expression <(findDisplay 46) displayAddEventHandler ["onMouseMoving",>
2:35:55 Error position: <displayAddEventHandler ["onMouseMoving",>
2:35:55 Error Foreign error: Unknown enum value: "onMouseMoving"
Not quite sure what I am doing wrong here. Unknown enum would lead me to believe I am using the wrong command and that I should be swapping displayAddEventHandler with something else but not sure what that would be.
Remove on
Hahaha thank you!!
I felt like I was losing my mind
Just to verify before I toss it to #community_wiki- this here is wrong right and not intended for something else?
https://community.bistudio.com/wiki/User_Interface_Event_Handlers#onMouseMoving
I am trying it now and I can get pretty accurate I think
Oh good lord
That's on me, noob mistake
Oh bro
Hahahaha it's pinned at the bottom of the page as you scroll too
@distant axle do you know by any chance what is _mouseOver in onMouseMoving?
What?
in https://community.bistudio.com/wiki/User_Interface_Event_Handlers#onMouseMoving there is a param passed called _mouseOver, do you know that it represents?
It is true when the mouse is on the control, false when the mouse just left the control
oh so it's like onTreeMouseExit if I understand correctly?
Well... maybe yes. I don't really understand what do you actually think or talk about
You can anyways check what are these return values by using something like systemChat str _this in the EH
yeah of course just didn't know that the true is referring to π
just trying to figure out a way to know when the mouse is leaving the control, but now I see that it isn't firing on exit so it's never false..
@young patio if you're curious, I managed to calculate which row is hovered on the listnbox
GVAR(cargoHoveredRow) = 0;
_ctrlList ctrlAddEventHandler ["MouseMoving", {
params ["_ctrlList", "_xPos", "_yPos", "_mouseOver"];
private _ctrlConfig = configFile >> ctrlClassName _ctrlList;
private _ctrlOffset = getNumber(_ctrlConfig >> "y");
private _rowHeight = getNumber(_ctrlConfig >> "rowHeight");
private _ctrlMaxDisplayedRows = getNumber(_ctrlConfig >> "h") / POS_H(1);
private _selectedRow = ceil ((_yPos - _ctrlOffset) / _rowHeight);
GVAR(cargoHoveredRow) = _selectedRow min _ctrlMaxDisplayedRows;
}];
GVAR(cargoRowOffset) = 0;
_ctrlList ctrlAddEventHandler ["MouseZChanged", {
params ["_ctrlList", "_scroll"];
GVAR(cargoRowOffset) = (GVAR(cargoRowOffset) - (_scroll / 1.2) + 1) max 0;
}];
is there a way to get the position of a scrollbar? or know when it changes?
I tried to use sliderPosition and onSliderPosChanged but they aren't working for me..
I've used sliderPosition before and it's worked for me, are you sure you're using the correct control? Are you sure it is a CT_SLIDER or CT_XSLIDER?
What is the path to this image? I can't find it in data_f
nvm i find this
a3\data_f\images\mod_base_logo_ca.paa
class MiniFlag: RscPicture
{
idc = 5108;
style = 48;
fade = 0;
colorBackground[] = {1, 1, 1, 1};
text = "flag_round.paa";
x = safezoneX + safezoneW * 0.262;
y = safezoneY + safezoneH * 0.162;
w = safezoneW * 0.5;
h = safezoneH * 0.5;
};
Im trying to put a a picture in however it always comes out as faded/almost transparent regardless of the actual .paa present
played around with multiple different parameters and no change, includng different .paa textures
- In Public Branch, cached files will not be reloaded automatically whenever you change the file. Try
FLUSHorSUPERFLUSHcheat code to force refresh - Which resolution the PAA has
- A PAA should have
_COor_CAor any other acceptable suffix before you convert to PAA
its 128x128 and no change with suffix
im not sure if you can make out the faint american flag circle but for the last 2 hours i thought it wasn't working until i made it super large
Read and do 1
No change
Then restart game
No change still
Then you sure you can use an existed PAA in vanilla PBO in that context
Don't you want colorText rather than colorBackground for the control?
ours has:
colorBackground[] = {0,0,0,0};
colorText[] = {1,1,1,1};
No change regardless of what settings i have. I will try a vanilla .paa and see what happens
well vanilla works... i guess source .paa must be the issue then?
Yes
When using CT_WEBBROWSER does anyone know if there is a way I can have it as a cutRsc and still allow users keys like up and down arrow to interact with the page?
You need to script it with key event handlers
Here's one I wrote (old code) for a list box
https://github.com/DartsArmaMods/ChatWheelRedux/blob/rewrite/addons/chatwheel/functions/fnc_handleScroll.sqf
Cheers thank you- I'll check this out π
Hello, please help. Some time ago, I added a button with a URL parameter that opened a link in the system browser, but recently I was informed that the buttons are not working. I cannot understand what has changed.
i maybe wrong but isnt url whitelisting a newish thing? https://community.bistudio.com/wiki/Description.ext#CfgCommands
Yes, it's a new feature, I added it, but nothing has changed, clicking on it doesn't open anything.
remember to reload your changes, test with simple urls
I just don't understand why it's not enough to simply add "youtube.com" to open YouTube videos. (This is just an example; I understand that YouTube has different domains.)
note that the case matters (i think)
There is the same server option: https://community.bistudio.com/wiki/Arma_3:_Server_Config_File#Server_Options
Plus, there is a dedicated command for YT: https://community.bistudio.com/wiki/openYoutubeVideo
That was an example. I have links to various websites, including YouTube.
Here's what I enter into the mod config.
class CfgCommands
{
allowedHTMLLoadURIs[] +=
{
"docs.google.com",
"drive.google.com",
"www.youtube.com",
"youtube.com",
"youtu.be",
"discord.com",
"discordapp.com"
};
};
It dosent really work for me, the custom font is not showing ingame but when I open the html in a browser it seems to work
the console is not showing any error
#arma3_gui message for me to get back to where I left of
I suppose that second file is the html? If not then full example please, I'll check in 50 minutas
But you having the font files separately sounds wrong, they should be embedded. But maybe you're loading with JavaScript. I'll find out when I see it
Yea it's the HTML file, I guess I have to embed it then
url('crayonhandregular2016demo.woff2')
Yeah no it cannot load URL's like that. And is also not at all like I showed how to do in my working sample.
Only way to load files is via the Javascript API.
Which you can do
You can read it via Javascript, and then later inject the style tag into the header.
Everyone: "Nooo I don't want to do UI, its so cumbersome and annoying"
Vagrant: "Hold my Tea"
π€―
Don't think I've ever seen such a complex UI
(something that normal comps don't do)
They do tho, there is a modifier key you can hold while placing a composition, that puts it at the exact position it was saved from
Please do not remove the Arma 3 logo or copyright disclaimer at the bottom.
Mods have been banned from the workshop in the past for doing that, we don't allow that. You can just put both onto the bottom right onto your bar there and it'll be fine
Which key, I can't seem to find it in controlls
This was just testing, realised it was going to be too much work
CTRL, ALT, SHIFT
One of the 3, or some combo. But probably not a combo
One of them you will notice the preview will move far away from your mouse cursor, thats the one.
There is another one that only changes something about height
It's the two toggleable buttons in eden editor
Snap to surface, align with terrain.
thats not what we are talking about
I tried, but none of them did that
I'm looking it up..
Paste to original position?
yes
I know in Zeus its a modifier key. Maybe in Eden its different.
The Composition is just a exported copy-paste. And that contains the original position of everything
When copy pasting an object thats already placed then yeah
I see..no I am not aware that eden editor can do that for compositions
Zeus can do it with Eden compositions though 
Why would Eden not do that
Makes sense for Zeus to fill predefined positions on the fly.
Give us a command to read composition data file into eden editor and I add it π
In zeus its the same key as the one that makes the moving things up/down.
Also create3DENComposition script command cannot do it either? It errors when you don't give position.
Also that can only paste mod compositions, not steam or local ones? 
Yeah it's messy.
I remember I did something recently to make something creatable in Eden, I think comments?
But I thought there was more also related to compositions
Animals iirc
I guess its not a thing then.
create3DENComposition is also hard to do because, I don't think you can get a list of possible compositions, besides trying to read the listbox from the UI?
Right.
Zeus composition placement is better than in Eden, that seems ridiculous.
One would think eden editor would use the same code
Ugh I hate this.
Can i get a FT ticket feature request?
I'd think a modifier key like in Zeus would be useful, probably ALT, for alternative placement? π
And I need to do something with create3DENComposition command to let you create local compositions too. Probably for now just let you parse the treeview, its all in the data there I think.
Are you sure it's in the tree view data? I remember some entries have data there but I don't remember compositions do
The "value" in the item is an enum. And is 2 for steam composition. 1 for local.
The "data" is a string of the composition folder name
It decides between steam or local, and usees the foldername to decide which it is. I probably did something hacky for the foldername in steam.
But there is nothing blocking from just passing the foldername (and probably whether its steam or local) to create3DENComposition.
And then make the pos optional and read it from the composition like zeus does
I just don't have time to do it this week, or next.
And we can safely put this on prof branch whenever
Right. That makes sense.
So you need a ticket for changing create3dencompososition command now? Anything else?
The shortcut, right?
shortcut can be in same ticket yes
https://feedback.bistudio.com/T196904 @tranquil iron
works now, ty!
did it via bun now and b64.ts to get the base64 and then embed it into the font
bun run b64.ts fontName.woff2
You can also have multiple missions, and later merge them together with the "merge" feature.
But I assume that is just much more annoying to use so you'd prefer compositions instead?
yeah, since I use deformer
I had multiple missions, but that wasn't super easy to keep track of
You can make multiple folders in your mission list.
Does deformer work fine when in compositions? Never tried that. Its just a module so I guess..
I don't know, I use my own mod for storing and getting the data https://steamcommunity.com/sharedfiles/filedetails/?id=3631759496 so its all custom
my mod also converts the objects to simple objects so it can be put in an sqf file
It also saves the scale of the objects which is something I use a lot
Really trying to find a setting or mod that removes the "box" that is behind the soldier icon here.
Not sure if there is ready solution but you can make it yourself really easily, its a separate control in RscStanceInfo display
Some systems that I'm working on that are powered by AI integrations.
Hiii everyone , Does anyone know how to have this Flight Path Marker in the HUD while controlling a fixed wing drone ( like MQ-4A ) in the game?
Config wise or script wise?
Config wise
class MFD
{
class B_Plane_Fighter_01_static_HUD
{
class Draw
{
class PlaneMovementCrosshair
{
type = "line";
width = 3.0;
points[] = {{"Velocity",{0,-0.02},1},{"Velocity",{0.01,-0.01732},1},{"Velocity",{0.01732,-0.01},1},{"Velocity",{0.02,0},1},{"Velocity",{0.01732,0.01},1},{"Velocity",{0.01,0.01732},1},{"Velocity",{0,0.02},1},{"Velocity",{-0.01,0.01732},1},{"Velocity",{-0.01732,0.01},1},{"Velocity",{-0.02,0},1},{"Velocity",{-0.01732,-0.01},1},{"Velocity",{-0.01,-0.01732},1},{"Velocity",{0,-0.02},1},{},{"Velocity",{0.04,0},1},{"Velocity",{0.02,0},1},{},{"Velocity",{-0.04,0},1},{"Velocity",{-0.02,0},1},{},{"Velocity",{0,-0.04},1},{"Velocity",{0,-0.02},1}};
};
};
};
};```Something like this in Black Wasp II config
There must be a way to freakin make html acknowledge arma video in order to apply css to it. Im trying to do blur
Hi there, I've been here before and must've left during a Discord clean-up.
I've looked into GUI editing over the years and have never really experienced that moment where it's all "clicked" so it's always felt like I'm hacking things together rather than competently designing a UI. Back in 2022 I was using GUI_GRID with a GUI that didn't really scale well at different aspect ratios. I'm using 21:10 while most people I play with are on 16:9
I know there are several tutorials and introductory documents on the BI wiki that explain the different coordinate systems, though many of these assume prior knowledge. At the moment I'm looking to create a simple layout consisting of two panels on the left and right sides of the screen. These should scale based on aspect ratio. The tutorials on the BI wiki all focus on the center of the screen
Are there any more comprehensive tutorials out there that people have used when starting with GUI editing? More importantly, how do people keep track of their GUIs for making future changes to? The GUI Editor seems a bit clunky for things like this.
here's link to guide page: https://community.bistudio.com/wiki/Arma_3:_User_Interface_Editor i use personally the editor and it isnt perfect and tricky to get started with but it works ok once you figure it out
Yeah that's one of the pages I've found as part of the wider set of tutorial pages
Why pages like that and the GUI editor are a bit rough around the edges is because of quotes like
The Grid
The position of your UI is determined by screen coordinates. The default grid that is selected in the GUI Editor does not work...
I'm not sure I understand the point of defaulting to a grid that doesn't work, unless that's simply a poorly phrased quote.
When I was creating a GUI back on 2022 I simply ignored the white grid zone and moved the controls outside of that. Even doing that now and setting the controls to safezone, they seem to scale. Is the white grid just for a preview then?
You can only use that editor if you understand the different grids
Otherwise it won't work correctly.
I'd recommend eden editor grid. E.g. grid_w and grid_h. Make sure to attach X and y properties to the border of the screen e.g. safeZoneX/Y
The white grid is for UI_GRID. All controls within that area will always be visible on most aspect ratios, UI scales and resolutions.
the grids you see are just there to help you position your GUI
Since you have a basic idea for your UI layout. I'd just start with that, we can help you later implementing the GRIDs and safeZones.
Just don't use the UI Editor please.
If you need some UI examples to work off from feel free to copy these https://github.com/R3voA3/3den-Enhanced/tree/master/addons/main/GUI
Thanks for that, I'll reference those for examples.
I'm assuming the Eden grid is the newer pixel grid?
exactly
Some of it is starting to come back to me. Pixel grid is certainly much easier to work with once it's anchored - that was the part I was missing some years back.
In terms of the designer experience, do you simply go through a case of trial and error with UI changes until you've implemented your specification?
Yeah it's quite a bit of trial an error.
As good a reason as any to load up on coffee. Thanks for the guidance both, I appreciate it.
To provide an answer for anybody else that stumbles across these messages, I've pulled the following example which is very straightforward: https://community.bistudio.com/wiki/Arma_3:_GUI_Coordinates#Examples
Given my requirements are very basic, that example is good enough for creating some panels on the left and right
@tranquil iron Idk if I'm doing the right thing by pinging you, but you added it so I guess you are the one who knows if it's possible. I want to apply CSS to the A3 render in order to make a glassy UI with HTML, problem is html won't acknowledge my A3, so CSS doesnt actually work in cases like blur / svg filters
Idk if its possible to make html acknowledge the game render, I guess it is but it will take a lot of performance right?
You mean you also want to make the Arma area visible behind it, blurry?
Yeah no the HTML cannot see whats behind it
Yeah
Damn, I wanted to make a cool glassmorphism UI
Theres no plausible way of adding it without sacrificing performance right?
I guess it could be some kind of present hook but I dont really want to have extensions on client anymore
Thanks for the assistance earlier. I've more or less implemented a rough draft of the UI now with pixel grid anchored to safezones with some helper macros that help set relative offsets between each control
Sounds great π
Is there a way to force the expansion direction of a combo box control (up/down)?
Nope
Unfortunate
Time to write your own solutionπ
How in the world do I get started with modding the GUI in game? Looked stuff up but still very lost.
I'd want to make changes to stance indicator.
Depends, like, depends
What exactly are you trying to achieve
That is not where usual modders took a look and make change
Box as in, the gradient?
Yeah
I have a custom layout where that gradient looks really bad, and I'd like to remove it.
I found where RscStanceInfo.sqf is, but not sure how I would go about removing the gradient background.
Thanks. I'll read through this.
Learning to Mod Arma 3 is quite archaic compared to reforger, so thanks for the info.
lol could you just say older: lol π
Is it possible to add a background to an RscControlsGroup by adding an RscText control to the RscControlsGroup->controls class?
I can display RscCombo and RscListNBox within the RscControlsGroup but RscText will only appear if it's outside of the group. The reason why I'm trying to put everything in one group is because I plan to create animations to show/hide the group
The following has some macros in use but should hopefully show that relative positioning is being used on the children controls
class LeftPanel : RscControlsGroup
{
idc = BUILD_PANEL_LEFT;
x = PANEL_X;
y = HEADER_Y + HEADER_HEIGHT;
w = PANEL_W;
h = PANEL_H - HEADER_HEIGHT;
class controls {
class Background : RscText
{
x = 0;
y = 0;
w = PANEL_W;
h = PANEL_H - HEADER_HEIGHT;
colorBackground[] = {0,0,0,0.4};
};
// class BuildMenuType : RscCombo
// {
// idc = BUILD_CATEGORY_IDC;
// x = 0;
// y = 0;
// w = PANEL_W;
// h = COMBO_HEIGHT;
// };
// class BuildItemsList : RscListNBox
// {
// idc = BUILD_LIST_IDC;
// y = BUILD_LIST_Y;
// w = PANEL_W;
// h = BUILD_LIST_H;
// columns[] = {0, 0.65, 0.75, 0.85};
// };
}
};
RscText just works in CCs like any other control
That's interesting, thanks for confirming. I'll approach it with a fresh pair of eyes today as I suspect my positioning is off
Rather confusingly, I've pinpointed the issue down to an RscListNBox in a separate panel which I have yet to find a workaround for.
In my UI I have two panels that are represented by RscControlsGroupNoScrollbars, one for the left side of the screen and another on the right. Neither control group overlaps.
Both panels have RscText that span the width and height of the parent control group, both with relative X/Y values of 0 and both have a colorBackground of {1, 0, 0, 0.4}. Both control groups also have RscListNBox components that span the width and height of the parent control group - relative X/Y being 0.
The RscText background appears in the right panel but not the left. If I comment out the RscListNBox component from the right panel, but leave existing the RscListNBox in the left panel, the RscText background then appears in both panels.
Could be an issue with IDCs. Sometimes things break when two controls have the same IDC (e.g. -1), and for some controls, certain IDCs are special.
In fact, https://community.bistudio.com/wiki/CT_LISTNBOX warns:
CT_LISTNBOX controls frequently cause unexpected issues with other controls if
idcLeftandidcRightare set to -1. Use other values foridcLeftandidcRightto avoid these issues.
I thought idcLeft and idcRight were for controls contained within the same ListNBox, specially in the first and last columns of each row. I have now tried defining some values for both properties but it seems that the ListNBox in the right most panel draws over RscText controls defined in the left panel
Ah there was something else ... #arma3_gui message
That sounds about right. Good to hear I'm not going crazy with positional maths
The only difference I've found is that ListNBox draws over controls defined before or after the ListNBox.
I also moved the backgrounds to controlsBackground but am trying to find a way around the issue nonetheless as it also causes problems for any other controls that I may wish to add
It might be a case where I swap the right-most ListNBox out for another design
Ah, I see what's happening now.
If the value of idcLeft matches the IDC of another control to the left then it hides that control, even if it's outside of the ListNBox and control group. Seems like a bug with ListNBox
The solution then is exactly as you and R3vo previously described. I've set idcLeft and idcRight to 999 and all is well now. Thanks both
That issue again. You are not the first victim and won't be the last.
I'm certainly not going to win any designer awards and this is almost identical to the Zeus Curator dialog with both panels being collapsible. Pretty much there now with this dialog. It was a nice little experience playing around with Arma 3's newer pixelGrid system. Macros make things much easier as everything begins to behave more relative to the previous control
The last thing I need to do is pin the width of the items to the safeZone system so it scales proportionally with aspect ratios.
Pixelgrid has an issue where it sometimes incorrectly distributes the screen width and height based on the game window size because it uses the monitor size rather than the game window size. Most of the times, players have noticed the interface extending beyond the game window. This issue only occurs on monitors larger than a standard Full HD display. I've asked players to set the game window resolution to 1920x1080, and their interface has been fixed with pixelgrid. Alternatively, try testing the interface in windowed mode with non-standard resolutions smaller than 1920x1080. I've never encountered such issues with Safezone.
That's a misunderstanding. pixelGrid doesn't replace safezone and you should use safezone to anchor it.
I've anchored the X and Y to safeZone with pixel grid used for height and width. My main display is a 21:10 ultrawide but I've also tested the UI on my MacBook. The only issue I've experienced on smaller displays is that the panel widths are larger because I'm not scaling the width correctly yet.
Otherwise, I've not experienced that same issue at all where controls extend over the screen space
That's not true
Use the grid macros from eden editor and combine them with safeZones and you are 90% there
pixelgrid just picks a value which is a multiple of 4 and splits the screen into very roughly 64 units vertically. In some resolutions there are more pixel grids within the safezone than others.
Mine is pushed to GitHub now so I can share a link here for a reference of a relatively straight forward UI that's anchored to safeZone for positioning and size https://github.com/ColinM9991/KP-Liberation/blob/feature/build-system/Missionframework/scripts/client/build/ui/menu.hpp
That's scaled well for me across 16:9 and 21:10 aspect ratios in that the UI stays on the screen
Hopefully that helps with an example on how to address that issue
Yeah. Good example..also.limiting the total height which is important
Exactly. When I last did UIs a few years ago I used the β¨GUI_GRIDβ© system with absolute sizes. That worked fine for me with my aspect ratio but it didn't scale well at all for anybody else
The thing is that I only used Pixelgrid relative to the center of the screen from the loaded editor macros
What's funny is that I realized this after I'd designed over 10 interfaces with a huge number of controls. Ultimately, I had to abandon the idea of ββfiguring out how to properly assign positions and sizes so that the interface would look consistent for all players. (Also, I sometimes used pixelgridnouiscale.)
You can anchor it to the center..but you need to be aware that the number of available grids can change. You can calculate the available grids first and then make sure to never exceed that.
for ctrlSetScrollValues, with vertical scrollbars, is 1 all the way up or all the way down?
Should be all the way down.
Hi, can someone tell me how to use and display your images in CT_WEBBROWSER? I tried using RscPicture, A3API.RequestTexture, but it turns out to display only images that are already in Arma, but I would like to have my own
but I would like to have my own
What does that mean?
Put your own image into Arma then?
My images are in the mission, I want to use them in CT_WEBBROWSER, but it turns out only those that are already in the game itself (in various PBOs)
No it'll also load images from the mission
You might need getMissionPath script command to get full path, but afaik even that isn't needed
With getMissionPath, the problem occurs when non-Latin characters appear in the user's path.
And as I understand it, CT_WEBBROWSER does not work at all with non-Latin letters, for example, the input form does not support Cyrillic.
Just actually in case, is it about forceUnicode SQF?
It does.
Cyrillic keyboard input was broken but was fixed.
Unicode via Javascript works fine, if you decode it correctly on the receiving end.
You should be able to load by just literally the filename in the mission folder
If you can give me a repro mission I can check what the problem is
Hoping to be able to show this off soon. Custom Flight System based on interpolation bezier curves and with time and smoothing filters based on model data for cruise speeds, banking, pitch angles, a lot of shit to try and model realistic flight from bezier per frame updates... What this means is, 1. Helicopters will fly the exact path you see on the Flight Planner, (it uses the same bezier logic to draw the 2D flight path. You will be able to click drag waypoints to adjust the waypoints and see exactly where your aircraft will go. It will also automatically create flight paths for wingmen, based on formation settings per waypoints. I've got a working test on our trail formation and will hopefully have a video done soon, but I'm pretty proud of how the UI is coming along. Basically I told myself, if I wanted to recreate the Maduro Raid, in single player, I want to be able to do that - and the Flight Planner system is my way of coordinating multiple squadrons, AI flight pathing, in a way that the base vanilla physics based system just doesn't do or have the capability to do. Anyway, hopefully my up since 1AM brain made that make sense.
Looks awesome. Messing with bezier curves is kinda fun. I wrote some stuff for it a while ago.
Thank you, will hopefully have a video of what this looks like when executed up in the next few days.
In the squad commands menu there is a command for a unit to get into a specific vehicle.
It there a way to dynamically change the name of those vehicles showed in that menu?
I'm trying to make an effect where a full-screen image appears. When using rscpicture, the picture is translucent and not visible. How can I make a similar effect and what should I use to position my image so that it retains its color and transparency?
Hey guys.
So I have an RscMapControl that constantly keeps crashing the game despite my best efforts to adhere to the "specialness" of said control.
It lives in the top level hierarchy of the dialog, isn't embedded into any controls group and once for debugging purposes is even positioned well outside the dialog.
It will reliably crash the game, though, if it loses focus. I can move the map around, zoom it and give it orders via ctrlMapAnimAdd. When I click outside the map control, game stays alive when focus is caught by another control (e.g. a CT_BUTTON); clicking an empty area, however, kills the game with
Exception code: C0000094 INT_DIVIDE_BY_ZERO at 8732CE77
cpu: AMD Ryzen 7 7700X 8-Core Processor
graphics: D3D11, Device: NVIDIA GeForce RTX 4070
resolution: 3840x2160x32< lots of base64 >
Mods: 463939057;450814997;3020755032;1779063631;.hemttout/dev;rf;aow;enoch;tank;tacops;orange;argo;jets;expansion;mark;heli;kart;curator;A3
Version 2.20.152984
Fault time: 2026/02/11 10:35:24
Fault address: 8732CE77 01:0142BE77ll G:\SteamLibrary\steamapps\common\Arma 3\arma3_x64.exe
file: a3uspcm
world: malden
Prev. code bytes: 48 8B 06 48 8B CE 8B 9E B8 03 00 00 FF 50 58 99
Fault code bytes: F7 FB 3B E8 0F 8D 07 03 00 00 44 8B 86 B8 03 00
Dialog config here: https://gitlab.perfect-co.de/arma3/a3uspcm/-/blob/feature/aafc-granular-roe/addons/aafc/RscDialog.hpp?ref_type=heads
Interestingly enough - but something that'd need fixing after the main concern - I can't seem to give it another idc, either. If I stick to the base class' idc = 51, I get a result from displayCtrl. If I use my numbering, or even - in the config above - reassign idc to 51, displayCtrl returns controlNull...
In any case it shouldn't crash. Have you uploaded the crash via the crash reporter?
Not sure what memory dumps contain or if it captures any PII but could also send it directly to Dedmen too along with the info here. R3vo is right that it shouldn't crash.
I'll say INT_DIVIDE_BY_ZERO is interesting- never seen that before. Assuming it's just as it says but 
I can message Dedmen directly?
π₯Ί
π π
Yeah for stuff like that he leaves his DMs open- he's helped us before when we've been in hot water with bad crashes π
No idea if there's anything personally identifying in memory dumps but definitely would era towards sending it to him directly then channel to be safe. He's usually got a backlog of people tho so may take a bit to get a response 
It only opens when you are on profiling branch, are you?
Version 2.20.152984
You are not
Probably already been fixed
if there's anything personally identifying in memory dumps
The windows username is
Is there some way to get the specific object (i.e. backpack) from the inventory listbox? lbText seems to just return the classname as opposed to the actual object/container?
Not from the UI no
if you know where it is, you might be able to find it with the other inventory commands
Ah I see, unfortunately the goal was to change the name of the backpack during play depending on a variable assigned to the backpack itself.
But doesn't sound like that is possible(?) then... Unfortunate, thank you anyways, Dedmen, appreciated.
Hey guys, so I've done UI in Arma before but I'm looking for the best way to place UI elements for a HUD, that wont break/have miss alignment when changing screen size or resolutions, any ideas?
Currently ive been using safezone, below is an example, this is inside a ctrlGroup
class AmmoCountBar : RscProgress
{
idc = IDC_WeaponInfo_AmmoCountBar;
x = 0.03665 * (safeZoneX + safeZoneW);
y = 0.044 * (safeZoneY + safeZoneH);
w = 0.008 * safeZoneW;
h = 0.063 * safeZoneH;
style = 1;
colorBar[] = {1,1,1,1};
//text = "#(argb,8,8,3)color(1,1,1,1)";
};
try these macros:
#define RSC_POS_X(N) (safeZoneX + safeZoneW * ((N) * 0.01))
#define RSC_POS_Y(N) (safeZoneY + safeZoneH * ((N) * 0.01))
#define RSC_POS_W(N) ((((safeZoneW / safeZoneH) * safeZoneH) * ((N) * 0.01)) + 0.00015)
#define RSC_POS_H(N) ((((safeZoneH / safeZoneW) * safeZoneW) * ((N) * 0.01)) + 0.00015)
#define RSC_POS_H_SQUARE(N) (((((safeZoneH / safeZoneW) * safeZoneW) * (safeZoneW / safeZoneH) * safeZoneW / safeZoneH) * ((N) * 0.01)) + 0.00015)
I put these together having the same frustrations as you - these are normalized from 0 to 100; 100 being bottom/right, 0 being top/left - works with different resolutions
so just imagine a 0-100 grid on your screen
(that jank 0.00015 at the end was due to single-pixel issues caused by certain aspect ratios, incase you make something that's 100 100 size to cover the whole screen, dont question it lol)
RSC_POS_H_SQUARE wont care for aspect ratio btw, so if you want a control not to be stretched you can use that
perfect thank you! This is similar to what I was looking at building but I was reviewing how everyone else does it first.
The reason was I had a UI built on my laptop screen. Changed to a monitor and it moved a few things slightly. Changed back to the laptop screen and they were still miss aligned! I have no idea why as I dident update the UI. Ill try these out thanks!
these technically derive from vanilla macros that did the same thing (or maybe it was ace i cant recall) but i just made them normalized and made the width/height easier to control
yeah i tested with 16:9 and 4:3 and some odd ones; should be fine for any case
so for this one I put the H value in like RSC_POS_H_SQUARE(50) for half the height and that returns the width value needed to make it square?
exactly
you sir are a legend!
Thank you, UI has always been my downside with coding π (mainly UI scaling so this is so useful)
well, ok to be exact; this is what you use for height; it should match the value you put into width, but on aspect ratios like 16:9 that'll be stretched - so if you do RSC_POS_W(50) and RSC_POS_H(50) - that'll be stretched; if you do RSC_POS_W(50) and RSC_POS_H_SQUARE(50) - that'll be a square regardless of aspect ratio
ah yup I understand thanks!
this brings me back when i was so annoyed that the safezones appear so arbitrary in arma
defining 0 as top left and 100 as bottom right seems so simple yet... apparently not
yeah really. I always used to use GRID for that reason but realizing now that GRID scales on UI scaling. And well for something that must be fullscreen always that wont work. So I opted for scaling everything off of safeZoneW
but as you said the numbers are so ugh. So normalizing them like this is perfect
yeah personally, I would do 0,0 bottom left and top right 100,100. It seems more legically that numbers go up the screen to me but Armas arma, π€·ββοΈ
top-left for 0 is actually the way most programs do it, so that's where the convention came from (plus makes sense for "reading" something top to bottom/left to right but yeah everyone has preferences)
ah I see, yeah ive only ever done UI work in arma 3. I code in a lot of other languages but never been a UI person
also, here's a reverse formula (err... i admit i havent tested it properly yet since i didnt need it) incase you need to grab the normalized transforms from an existing transforms
oh sweet! so I can just feed this current safezone co-ords and it will return the normalized one from yours awsome ill give it a test.
arma does also have a gui editor in the menu (which i found out before i made this) - but too late now lol
yeah; at least in theory, i didnt test the formula so it might be off, but i know the macros work
yeah ive used that a long time ago. But it dosnt work when using ctrlGroups π
ah, fair
ctrlGroups X and Y co-ord is now 0,0 for any UI elements inside of it.
so it cant just be made and copied into a ctrlGroup either
i suppose you just have to imagine the edges are the corners of the control group instead of the screen but true it's a little annoying
well thanks for all your help ill give that function a go as ive got 1000 lines of UI to convert lol
yeah maybe! thats not a bad idea to be honest.
Ive just been doing it by running the UI in eden editor and making changes. With how the wiki suggests for debugging UI in editor not in game
yeah; test it with one element just to get the idea first before changing everything ( granted its a simple concept but going away from the traditional way arma's UI is set up might be throwing off) π
ofc thanks
cheers!
@silk lodge also just a forewarning i dont know how this will act with control groups... i'd actually appreciate it if you got back to me about that incase there are issues (technically the W and H shouldn't care but still)
the ui stuff i did was orphan controls so
will do, to be honest shouldnt be an issue because for controls groups you still use safezone to scale it all
you base it all off the ratios etc you normally do. its just in a box that limits it if it goes out the set bounds.
but ill let you know how it goes after changing all my code around. Found an issue in the conversion script so once ive finished testing it ill send it back to you with a fix or two
ah, okay fair; i thought it added extra math on top like scaling also being relative to the scale of the control group or some insane crap lol
nah its the same just limits the area that can be seen
ah, that's great, thanks π
Modified, ive tested it a bit but could use some more. I haven't converted my UI over yet.
Two fixes were just to the calculation of the H output for square or not square. Ofc if its square it ignores the H input because it needs to use the W input to find the squre like your original defines π
Thanks for the help again. The modifications to the function has only been tested on 16:9 currently.
To be honest im not sure what happening with my UI but its all still pretty much aligned just a few elements have moved like all of 5 pixels to the left lol. After resetting there position the current way im doing it and then testing on my two screens nothing moves anymore so im not sure what it was sadly π
Playing around with this more it doesn't work for my use case sadly. I am making a HUD for helmet where all UI elements need to stay at the edge of the screen to not block the vision of the user. And because safezone scales with Interface size, on smaller/larger UI scales it will move the positons around too much.
I looked into aces arsenal positioning and they do some clever stuff where they mix safezone and absolute grids to make sure it stays at the edge of the screen.
Example, buttons across the bottom of the arsenal :
(Small extract)
class menuBar: RscControlsGroupNoScrollbars {
idc = IDC_menuBar;
x = QUOTE(0.5 - WIDTH_TOTAL / 2);
y = QUOTE(safeZoneH + safeZoneY - 9 * GRID_H);
w = QUOTE(WIDTH_TOTAL);
h = QUOTE(7 * GRID_H);
class controls {
class buttonHide: ctrlButton {
idc = IDC_buttonHide;
colorBackground[] = {0,0,0,0.8};
x = QUOTE(1 * WIDTH_GAP + 0 * WIDTH_SINGLE);
y = QUOTE(0);
w = QUOTE(WIDTH_SINGLE);
h = QUOTE(7 * GRID_H);
text = CSTRING(buttonHideText);
sizeEx = QUOTE(5 * GRID_H);
tooltip = CSTRING(buttonHideTooltip);
onMouseEnter = QUOTE(ctrlSetFocus (_this select 0));
onButtonClick = QUOTE([ctrlParent (_this select 0)] call FUNC(buttonHide));
};
//etc other buttons
};
Also here are the defines that it uses to understand it.
#define pixelScale 0.25
#define GRID_W (pixelW * pixelGridNoUIScale * pixelScale)
#define GRID_H (pixelH * pixelGridNoUIScale * pixelScale)
#define WIDTH_TOTAL (safeZoneW - 2 * (93 * GRID_W))
#define WIDTH_GAP (WIDTH_TOTAL / 100)
#define WIDTH_SINGLE ((WIDTH_TOTAL - 7 * WIDTH_GAP) / 6)
For the MenuBar Y co-ord they get the botom of the screen with safezone and the take off enough space using absolute grid values to make it stick to the bottom. If they used a percentage of safeZoneW it would scale and move to the middle which was my problem.
example screenshots of large UI and the arsenal showing how it stays a at a good scale and stick the bottom.
@silk lodge been busy the entire day - i might've misunderstood your problem there then, i was under the impression you needed the scaling to generally remain the same between aspect ratios and not clip off screen and whatnot
my bad then π
but thanks for getting back to me on it (and the fixed script)
myscript.sqf:
#include "\a3\ui_f\hpp\defineResinclDesign.inc"
params ["_display"];
if (arma3mainMenuLoaded) exitWith {};
private _profileBtn = _display displayCtrl 109; // Profile: Personaje
if (!isNull _profileBtn) then {
_profileBtn ctrlEnable true;
_profileBtn ctrlShow true;
_profileBtn ctrlSetFade 0;
_profileBtn ctrlCommit 0.1;
};
if (!isNull _profileBtn) then {
ctrlActivate _profileBtn; //CRASH
};
//I AM USING CBA class Extended_DisplayLoad_EventHandlers on class RscDisplayMain
This crash dont happen on profiling but it does on stable, why?
You already asked this, and got an answer #arma3_scripting message
Shit, I guess I have sooo much self-doubt that I end up asking anyways in case it's coding error
I've had issues with spawn and sleep, not too informed about whether you could spawn code or do sleep in that context. Searched on google and couldn't find info
Quick question
I've got some structured text, but I don't want the text size to scale with interface scale
Is there any way to stop it scaling?
In the config of the control you can set the text size to an absolute value, or use https://community.bohemia.net/wiki/pixelGridNoUIScale
anyone have experience with Arma Dialog Creator?
what do I do if I want to add an image? (RscPicture?)
it isnt "supported"
I just add a static dummy and edit it manually later?
also, its correct to use safezones for everything, right?
how do I make something a square?
Use pixelgrid and anchor it so safeZones.
how do I do that?
what do i put in here instead of SafeZoneX + float?
also, is progress bar a real control?
i cant find anything about it on the wiki
Don't use it
