Jump to content

riouken

Member
  • Content Count

    570
  • Joined

  • Last visited

  • Medals

Posts posted by riouken


  1. Wow! Just incredible. It's modder's like yourselves that make ArmA the greatest game of all time. Thank you for your time and effert on this one, I am greatly looking forward to this mod. I'm proud to be part of the Armaverse.

    Ps. Every day feels like Christmas since the game was released.

    Thanks :o

    Since everyone is in the Christmas mood, a little gift for everyone , a small progress update:

    I am into a closed beta now, and I am polishing up the GUI and fixing any bugs that arise in beta. The only major thing Im waiting on for a public release is the vehicle interface, as soon as thats done I will see about getting the first version out to everyone.

    Update - v1.0.0.2

    Changelog:

    -Polished up the tablet gui.

    -Added quick access keys on tablet, F1,F2,F3

    -Cleaned up the Helmet Cam and UAV Gui and made it look more realistic. (Let me know what you think)

    -Polished up the navigation of menu's in the Tablet

    -fixed helmet cam offset issues, helmet cam pip now shows the correct view no matter the animation the unit is in.

    -Tablet interface is 98% done.

    Media:

    qjd2.th.jpg

    t5g2.th.jpg

    o3jh.th.jpg


  2. Yes , as many people (On one Side) as you want to give the tablet to can have access at the same time. It works in MP, someone else can be piloting the drone while you view the video. It was designed with this specifically in mind, as the 15th has uav operators and I made this so the commander can link in and have a look at what that UAV operator is seeing. We are just now starting the closed beta with large scale MP testing , but I have not run into many problems with the mod on that front.


  3. Thanks for everyones feed back. MacScottie is right, What I am planning right now is to have a configurable option to which side you could use this with, it will default to use with Nato, but you can set it up at the beginning of a mission to use it with Redfor. After setting this Redfor would be treated as blueflor by the tablet.So it will be one side or the other can use the tablet. I hope to have this in at or just after I release. Hopefully Im explaining that well...

    Also I have had a few questions about the display text for each icon. It shows the groupID of the unit(s) and you can change that at mission start on the fly to anything you want with setGroupId .


  4. I have some updates for everyone.

    I have been working hard to get things completed, keep in mind this is Still WIP and some things may change slightly with the mod, it still needs some polish.

    Changes:

    Features ingame now:

    -Commander's tablet

    -Working FBCB2, Bluforce Tracker system

    -User placed makers

    -Android Based BFT

    -Commanders Tablet can view live UAV streams

    -Commanders Tablet can view live helmet cam streams

    Features planned/coming soon:

    -Vehicle mounted FBCB2, Blue Force Tracking

    -Direct Text Messages

    ir43.th.jpg

    h2je.th.jpg

    jdzc.th.jpg

    irne.th.jpg

    gdjr.th.jpg


  5. I don't really agree with this, I think the community in general does a great job of promoting and pushing the great mods to the top. Most people create addons because its their way of being creative, and most dont get paid for this. To imose limits and have some one else tell others how and when to be creative doesn't sound like a very appealing hobby to me.

    I like Sttosin's idea, I think the addon/mod threads that are user reviewed/rated highly should be designated in a better way, maybe special markers or a separate section in the forums.


  6. [WIP] cTab - Commander's Tablet - FBCB2, Bluforce Tracker

    Here is my latest addon that I would like to share a preview with everyone.

    Thanks to:

    SpectreRSG - Graphic Design

    Capt Drumheller / Jester814 - Technical advisor / Ideas / Media

    LCpl C. Johnston - Technical advisor

    LCpl Schwanke - Technical advisor

    Everyone else in the 15th MEU SOC for help with support and testing.

    Features ingame now:

    • Commander's tablet
    • Working FBCB2, Bluforce Tracker system
    • User placed makers
    • Tracks all crewed Bluefor vehicles
    • Tracks any dismounted troops with the proper equipment.
    • User placed markers / Salute reports etc...
    • Android Based BFT Interface
    • Commanders Tablet can view live UAV streams
    • Commanders Tablet can view live helmet cam streams

    Features planned/coming soon:

    • Vehicle mounted Interface FBCB2, Blue Force Tracking
    • Direct Text Messages

    Possible future features:

    • Free Drawing in FBCB2 system
    • User defined names/naming in the GUI
    • Mission Planning elements in the FBCB2 screen

    Media:

    UGx7zCjSkjv1g

    ir43.th.jpg

    h2je.th.jpg

    jdzc.th.jpg

    irne.th.jpg

    gdjr.th.jpg


  7. I have a Dialog that worked in arma 2 with multi column listboxes, I was working to convert it to A3 and I have hit a roadblock, it does not seem to be working.

    Base configs:

    ///////////////////////////////////////////////////////////////////////////
    /// Styles
    ///////////////////////////////////////////////////////////////////////////
    
    
    // Control types
    #define CT_STATIC           0
    #define CT_BUTTON           1
    #define CT_EDIT             2
    #define CT_SLIDER           3
    #define CT_COMBO            4
    #define CT_LISTBOX          5
    #define CT_TOOLBOX          6
    #define CT_CHECKBOXES       7
    #define CT_PROGRESS         8
    #define CT_HTML             9
    #define CT_STATIC_SKEW      10
    #define CT_ACTIVETEXT       11
    #define CT_TREE             12
    #define CT_STRUCTURED_TEXT  13
    #define CT_CONTEXT_MENU     14
    #define CT_CONTROLS_GROUP   15
    #define CT_SHORTCUTBUTTON   16
    #define CT_XKEYDESC         40
    #define CT_XBUTTON          41
    #define CT_XLISTBOX         42
    #define CT_XSLIDER          43
    #define CT_XCOMBO           44
    #define CT_ANIMATED_TEXTURE 45
    #define CT_OBJECT           80
    #define CT_OBJECT_ZOOM      81
    #define CT_OBJECT_CONTAINER 82
    #define CT_OBJECT_CONT_ANIM 83
    #define CT_LINEBREAK        98
    #define CT_USER             99
    #define CT_MAP              100
    #define CT_MAP_MAIN         101
    #define CT_LISTNBOX         102
    
    
    // Static styles
    #define ST_POS            0x0F
    #define ST_HPOS           0x03
    #define ST_VPOS           0x0C
    #define ST_LEFT           0x00
    #define ST_RIGHT          0x01
    #define ST_CENTER         0x02
    #define ST_DOWN           0x04
    #define ST_UP             0x08
    #define ST_VCENTER        0x0C
    
    
    #define ST_TYPE           0xF0
    #define ST_SINGLE         0x00
    #define ST_MULTI          0x10
    #define ST_TITLE_BAR      0x20
    #define ST_PICTURE        0x30
    #define ST_FRAME          0x40
    #define ST_BACKGROUND     0x50
    #define ST_GROUP_BOX      0x60
    #define ST_GROUP_BOX2     0x70
    #define ST_HUD_BACKGROUND 0x80
    #define ST_TILE_PICTURE   0x90
    #define ST_WITH_RECT      0xA0
    #define ST_LINE           0xB0
    
    
    #define ST_SHADOW         0x100
    #define ST_NO_RECT        0x200
    #define ST_KEEP_ASPECT_RATIO  0x800
    
    
    #define ST_TITLE          ST_TITLE_BAR + ST_CENTER
    
    
    // Slider styles
    #define SL_DIR            0x400
    #define SL_VERT           0
    #define SL_HORZ           0x400
    
    
    #define SL_TEXTURES       0x10
    
    
    // progress bar 
    #define ST_VERTICAL       0x01
    #define ST_HORIZONTAL     0
    
    
    // Listbox styles
    #define LB_TEXTURES       0x10
    #define LB_MULTI          0x20
    
    
    // Tree styles
    #define TR_SHOWROOT       1
    #define TR_AUTOCOLLAPSE   2
    
    
    // MessageBox styles
    #define MB_BUTTON_OK      1
    #define MB_BUTTON_CANCEL  2
    #define MB_BUTTON_USER    4
    
    
    
    
    ///////////////////////////////////////////////////////////////////////////
    /// Base Classes
    ///////////////////////////////////////////////////////////////////////////
    class RscText
    {
       access = 0;
       type = 0;
       idc = -1;
       colorBackground[] = 
       {
           0,
           0,
           0,
           0
       };
       colorText[] = 
       {
           1,
           1,
           1,
           1
       };
       text = "";
       fixedWidth = 0;
       x = 0;
       y = 0;
       h = 0.037;
       w = 0.3;
       style = 0;
       shadow = 1;
       colorShadow[] = 
       {
           0,
           0,
           0,
           0.5
       };
       font = "PuristaMedium";
       SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)";
       linespacing = 1;
    };
    class RscStructuredText
    {
       access = 0;
       type = 13;
       idc = -1;
       style = 0;
       colorText[] = 
       {
           1,
           1,
           1,
           1
       };
       class Attributes
       {
           font = "PuristaMedium";
           color = "#ffffff";
           align = "left";
           shadow = 1;
       };
       x = 0;
       y = 0;
       h = 0.035;
       w = 0.1;
       text = "";
       size = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)";
       shadow = 1;
    };
    class RscPicture
    {
       access = 0;
       type = 0;
       idc = -1;
       style = 48;
       colorBackground[] = 
       {
           0,
           0,
           0,
           0
       };
       colorText[] = 
       {
           1,
           1,
           1,
           1
       };
       font = "TahomaB";
       sizeEx = 0;
       lineSpacing = 0;
       text = "";
       fixedWidth = 0;
       shadow = 0;
       x = 0;
       y = 0;
       w = 0.2;
       h = 0.15;
    };
    class RscEdit
    {
       access = 0;
       type = 2;
       x = 0;
       y = 0;
       h = 0.04;
       w = 0.2;
       colorBackground[] = 
       {
           0,
           0,
           0,
           1
       };
       colorText[] = 
       {
           0.95,
           0.95,
           0.95,
           1
       };
       colorDisabled[] = 
       {
           1,
           1,
           1,
           0.25
       };
       colorSelection[] = 
       {
           "(profilenamespace getvariable ['GUI_BCG_RGB_R',0.69])",
           "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.75])",
           "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.5])",
           1
       };
       autocomplete = "";
       text = "";
       size = 0.2;
       style = "0x00 + 0x40";
       font = "PuristaMedium";
       shadow = 2;
       sizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)";
       canModify = 1;
    };
    class RscCombo
    {
       access = 0;
       type = 4;
       colorSelect[] = 
       {
           0,
           0,
           0,
           1
       };
       colorText[] = 
       {
           0.95,
           0.95,
           0.95,
           1
       };
       colorBackground[] = 
       {
           0,
           0,
           0,
           1
       };
       colorScrollbar[] = 
       {
           1,
           0,
           0,
           1
       };
       soundSelect[] = 
       {
           "\A3\ui_f\data\sound\RscCombo\soundSelect",
           0.1,
           1
       };
       soundExpand[] = 
       {
           "\A3\ui_f\data\sound\RscCombo\soundExpand",
           0.1,
           1
       };
       soundCollapse[] = 
       {
           "\A3\ui_f\data\sound\RscCombo\soundCollapse",
           0.1,
           1
       };
       maxHistoryDelay = 1;
       class ScrollBar
       {
           color[] = 
           {
               1,
               1,
               1,
               0.6
           };
           colorActive[] = 
           {
               1,
               1,
               1,
               1
           };
           colorDisabled[] = 
           {
               1,
               1,
               1,
               0.3
           };
           shadow = 0;
           thumb = "\A3\ui_f\data\gui\cfg\scrollbar\thumb_ca.paa";
           arrowFull = "\A3\ui_f\data\gui\cfg\scrollbar\arrowFull_ca.paa";
           arrowEmpty = "\A3\ui_f\data\gui\cfg\scrollbar\arrowEmpty_ca.paa";
           border = "\A3\ui_f\data\gui\cfg\scrollbar\border_ca.paa";
       };
       style = 16;
       x = 0;
       y = 0;
       w = 0.12;
       h = 0.035;
       shadow = 0;
       colorSelectBackground[] = 
       {
           1,
           1,
           1,
           0.7
       };
       arrowEmpty = "\A3\ui_f\data\GUI\RscCommon\rsccombo\arrow_combo_ca.paa";
       arrowFull = "\A3\ui_f\data\GUI\RscCommon\rsccombo\arrow_combo_active_ca.paa";
       wholeHeight = 0.45;
       color[] = 
       {
           1,
           1,
           1,
           1
       };
       colorActive[] = 
       {
           1,
           0,
           0,
           1
       };
       colorDisabled[] = 
       {
           1,
           1,
           1,
           0.25
       };
       font = "PuristaMedium";
       sizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)";
    };
    class RscListBox
    {
       access = 0;
       type = 5;
       w = 0.4;
       h = 0.4;
       rowHeight = 0;
       colorText[] = 
       {
           1,
           1,
           1,
           1
       };
       colorDisabled[] = 
       {
           1,
           1,
           1,
           0.25
       };
       colorScrollbar[] = 
       {
           1,
           0,
           0,
           0
       };
       colorSelect[] = 
       {
           0,
           0,
           0,
           1
       };
       colorSelect2[] = 
       {
           0,
           0,
           0,
           1
       };
       colorSelectBackground[] = 
       {
           0.95,
           0.95,
           0.95,
           1
       };
       colorSelectBackground2[] = 
       {
           1,
           1,
           1,
           0.5
       };
       colorBackground[] = 
       {
           0,
           0,
           0,
           0.3
       };
       soundSelect[] = 
       {
           "\A3\ui_f\data\sound\RscListbox\soundSelect",
           0.09,
           1
       };
       arrowEmpty = "#(argb,8,8,3)color(1,1,1,1)";
       arrowFull = "#(argb,8,8,3)color(1,1,1,1)";
       class ScrollBar
       {
           color[] = 
           {
               1,
               1,
               1,
               0.6
           };
           colorActive[] = 
           {
               1,
               1,
               1,
               1
           };
           colorDisabled[] = 
           {
               1,
               1,
               1,
               0.3
           };
           shadow = 0;
           thumb = "\A3\ui_f\data\gui\cfg\scrollbar\thumb_ca.paa";
           arrowFull = "\A3\ui_f\data\gui\cfg\scrollbar\arrowFull_ca.paa";
           arrowEmpty = "\A3\ui_f\data\gui\cfg\scrollbar\arrowEmpty_ca.paa";
           border = "\A3\ui_f\data\gui\cfg\scrollbar\border_ca.paa";
       };
       style = 16;
       font = "PuristaMedium";
       sizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)";
       shadow = 0;
       colorShadow[] = 
       {
           0,
           0,
           0,
           0.5
       };
       color[] = 
       {
           1,
           1,
           1,
           1
       };
       period = 1.2;
       maxHistoryDelay = 1;
       autoScrollSpeed = -1;
       autoScrollDelay = 5;
       autoScrollRewind = 0;
    };
    class RscButton
    {
       access = 0;
       type = 1;
       text = "";
       colorText[] = 
       {
           1,
           1,
           1,
           1
       };
       colorDisabled[] = 
       {
           0.4,
           0.4,
           0.4,
           1
       };
       colorBackground[] = 
       {
           "(profilenamespace getvariable ['GUI_BCG_RGB_R',0.69])",
           "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.75])",
           "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.5])",
           0.7
       };
       colorBackgroundDisabled[] = 
       {
           0.95,
           0.95,
           0.95,
           1
       };
       colorBackgroundActive[] = 
       {
           "(profilenamespace getvariable ['GUI_BCG_RGB_R',0.69])",
           "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.75])",
           "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.5])",
           1
       };
       colorFocused[] = 
       {
           "(profilenamespace getvariable ['GUI_BCG_RGB_R',0.69])",
           "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.75])",
           "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.5])",
           1
       };
       colorShadow[] = 
       {
           0,
           0,
           0,
           1
       };
       colorBorder[] = 
       {
           0,
           0,
           0,
           1
       };
       soundEnter[] = 
       {
           "\A3\ui_f\data\sound\RscButton\soundEnter",
           0.09,
           1
       };
       soundPush[] = 
       {
           "\A3\ui_f\data\sound\RscButton\soundPush",
           0.09,
           1
       };
       soundClick[] = 
       {
           "\A3\ui_f\data\sound\RscButton\soundClick",
           0.09,
           1
       };
       soundEscape[] = 
       {
           "\A3\ui_f\data\sound\RscButton\soundEscape",
           0.09,
           1
       };
       style = 2;
       x = 0;
       y = 0;
       w = 0.095589;
       h = 0.039216;
       shadow = 2;
       font = "PuristaMedium";
       sizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)";
       offsetX = 0.003;
       offsetY = 0.003;
       offsetPressedX = 0.002;
       offsetPressedY = 0.002;
       borderSize = 0;
    };
    class RscShortcutButton
    {
       type = 16;
       x = 0.1;
       y = 0.1;
       class HitZone
       {
           left = 0;
           top = 0;
           right = 0;
           bottom = 0;
       };
       class ShortcutPos
       {
           left = 0;
           top = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 20) - (((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)) / 2";
           w = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1) * (3/4)";
           h = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)";
       };
       class TextPos
       {
           left = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1) * (3/4)";
           top = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 20) - (((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)) / 2";
           right = 0.005;
           bottom = 0;
       };
       shortcuts[] = 
       {
       };
       textureNoShortcut = "#(argb,8,8,3)color(0,0,0,0)";
       color[] = 
       {
           1,
           1,
           1,
           1
       };
       color2[] = 
       {
           0.95,
           0.95,
           0.95,
           1
       };
       colorDisabled[] = 
       {
           1,
           1,
           1,
           0.25
       };
       colorBackground[] = 
       {
           "(profilenamespace getvariable ['GUI_BCG_RGB_R',0.69])",
           "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.75])",
           "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.5])",
           1
       };
       colorBackground2[] = 
       {
           1,
           1,
           1,
           1
       };
       soundEnter[] = 
       {
           "\A3\ui_f\data\sound\RscButton\soundEnter",
           0.09,
           1
       };
       soundPush[] = 
       {
           "\A3\ui_f\data\sound\RscButton\soundPush",
           0.09,
           1
       };
       soundClick[] = 
       {
           "\A3\ui_f\data\sound\RscButton\soundClick",
           0.09,
           1
       };
       soundEscape[] = 
       {
           "\A3\ui_f\data\sound\RscButton\soundEscape",
           0.09,
           1
       };
       class Attributes
       {
           font = "PuristaMedium";
           color = "#E5E5E5";
           align = "left";
           shadow = "true";
       };
       idc = -1;
       style = 0;
       default = 0;
       shadow = 1;
       w = 0.183825;
       h = "((((safezoneW / safezoneH) min 1.2) / 1.2) / 20)";
       animTextureDefault = "\A3\ui_f\data\GUI\RscCommon\RscShortcutButton\normal_ca.paa";
       animTextureNormal = "\A3\ui_f\data\GUI\RscCommon\RscShortcutButton\normal_ca.paa";
       animTextureDisabled = "\A3\ui_f\data\GUI\RscCommon\RscShortcutButton\normal_ca.paa";
       animTextureOver = "\A3\ui_f\data\GUI\RscCommon\RscShortcutButton\over_ca.paa";
       animTextureFocused = "\A3\ui_f\data\GUI\RscCommon\RscShortcutButton\focus_ca.paa";
       animTexturePressed = "\A3\ui_f\data\GUI\RscCommon\RscShortcutButton\down_ca.paa";
       periodFocus = 1.2;
       periodOver = 0.8;
       period = 0.4;
       font = "PuristaMedium";
       size = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)";
       sizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)";
       text = "";
       action = "";
       class AttributesImage
       {
           font = "PuristaMedium";
           color = "#E5E5E5";
           align = "left";
       };
    };
    class RscShortcutButtonMain
    {
       idc = -1;
       style = 0;
       default = 0;
       w = 0.313726;
       h = 0.104575;
       color[] = 
       {
           1,
           1,
           1,
           1
       };
       colorDisabled[] = 
       {
           1,
           1,
           1,
           0.25
       };
       class HitZone
       {
           left = 0;
           top = 0;
           right = 0;
           bottom = 0;
       };
       class ShortcutPos
       {
           left = 0.0145;
           top = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 20) - (((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1.2)) / 2";
           w = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1.2) * (3/4)";
           h = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1.2)";
       };
       class TextPos
       {
           left = "(((safezoneW / safezoneH) min 1.2) / 32) * 1.5";
           top = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 20)*2 - (((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1.2)) / 2";
           right = 0.005;
           bottom = 0;
       };
       animTextureNormal = "\A3\ui_f\data\GUI\RscCommon\RscShortcutButtonMain\normal_ca.paa";
       animTextureDisabled = "\A3\ui_f\data\GUI\RscCommon\RscShortcutButtonMain\disabled_ca.paa";
       animTextureOver = "\A3\ui_f\data\GUI\RscCommon\RscShortcutButtonMain\over_ca.paa";
       animTextureFocused = "\A3\ui_f\data\GUI\RscCommon\RscShortcutButtonMain\focus_ca.paa";
       animTexturePressed = "\A3\ui_f\data\GUI\RscCommon\RscShortcutButtonMain\down_ca.paa";
       animTextureDefault = "\A3\ui_f\data\GUI\RscCommon\RscShortcutButtonMain\normal_ca.paa";
       period = 0.5;
       font = "PuristaMedium";
       size = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1.2)";
       sizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1.2)";
       text = "";
       action = "";
       class Attributes
       {
           font = "PuristaMedium";
           color = "#E5E5E5";
           align = "left";
           shadow = "false";
       };
       class AttributesImage
       {
           font = "PuristaMedium";
           color = "#E5E5E5";
           align = "false";
       };
    };
    class RscFrame
    {
       type = 0;
       idc = -1;
       style = 64;
       shadow = 2;
       colorBackground[] = 
       {
           0,
           0,
           0,
           0
       };
       colorText[] = 
       {
           1,
           1,
           1,
           1
       };
       font = "PuristaMedium";
       sizeEx = 0.02;
       text = "";
    };
    class RscSlider
    {
       access = 0;
       type = 3;
       style = 1024;
       w = 0.3;
       color[] = 
       {
           1,
           1,
           1,
           0.8
       };
       colorActive[] = 
       {
           1,
           1,
           1,
           1
       };
       shadow = 0;
       h = 0.025;
    };
    class IGUIBack
    {
       type = 0;
       idc = 124;
       style = 128;
       text = "";
       colorText[] = 
       {
           0,
           0,
           0,
           0
       };
       font = "PuristaMedium";
       sizeEx = 0;
       shadow = 0;
       x = 0.1;
       y = 0.1;
       w = 0.1;
       h = 0.1;
       colorbackground[] = 
       {
           "(profilenamespace getvariable ['IGUI_BCG_RGB_R',0])",
           "(profilenamespace getvariable ['IGUI_BCG_RGB_G',1])",
           "(profilenamespace getvariable ['IGUI_BCG_RGB_B',1])",
           "(profilenamespace getvariable ['IGUI_BCG_RGB_A',0.8])"
       };
    };
    class RscCheckbox
    {
       idc = -1;
       type = 7;
       style = 0;
       x = "LINE_X(XVAL)";
       y = "LINE_Y";
       w = "LINE_W(WVAL)";
       h = 0.029412;
       colorText[] = 
       {
           1,
           0,
           0,
           1
       };
       color[] = 
       {
           0,
           0,
           0,
           0
       };
       colorBackground[] = 
       {
           0,
           0,
           1,
           1
       };
       colorTextSelect[] = 
       {
           0,
           0.8,
           0,
           1
       };
       colorSelectedBg[] = 
       {
           "(profilenamespace getvariable ['GUI_BCG_RGB_R',0.69])",
           "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.75])",
           "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.5])",
           1
       };
       colorSelect[] = 
       {
           0,
           0,
           0,
           1
       };
       colorTextDisable[] = 
       {
           0.4,
           0.4,
           0.4,
           1
       };
       colorDisable[] = 
       {
           0.4,
           0.4,
           0.4,
           1
       };
       font = "PuristaMedium";
       sizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 0.8)";
       rows = 1;
       columns = 1;
       strings[] = 
       {
           "UNCHECKED"
       };
       checked_strings[] = 
       {
           "CHECKED"
       };
    };
    class RscButtonMenu
    {
       idc = -1;
       type = 16;
       style = "0x02 + 0xC0";
       default = 0;
       shadow = 0;
       x = 0;
       y = 0;
       w = 0.095589;
       h = 0.039216;
       animTextureNormal = "#(argb,8,8,3)color(1,1,1,1)";
       animTextureDisabled = "#(argb,8,8,3)color(1,1,1,1)";
       animTextureOver = "#(argb,8,8,3)color(1,1,1,0.5)";
       animTextureFocused = "#(argb,8,8,3)color(1,1,1,1)";
       animTexturePressed = "#(argb,8,8,3)color(1,1,1,1)";
       animTextureDefault = "#(argb,8,8,3)color(1,1,1,1)";
       textureNoShortcut = "#(argb,8,8,3)color(0,0,0,0)";
       colorBackground[] = 
       {
           0,
           0,
           0,
           0.8
       };
       colorBackground2[] = 
       {
           1,
           1,
           1,
           0.5
       };
       color[] = 
       {
           1,
           1,
           1,
           1
       };
       color2[] = 
       {
           1,
           1,
           1,
           1
       };
       colorText[] = 
       {
           1,
           1,
           1,
           1
       };
       colorDisabled[] = 
       {
           1,
           1,
           1,
           0.25
       };
    
       class HitZone
       {
           left = 0.004;
           top = 0.029;
           right = 0.004;
           bottom = 0.029;
       };
    
       period = 1.2;
       periodFocus = 1.2;
       periodOver = 1.2;
       size = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)";
       sizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)";
       class TextPos
       {
           left = "0.25 * (((safezoneW / safezoneH) min 1.2) / 40)";
           top = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) - (((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)) / 2";
           right = 0.005;
           bottom = 0;
       };
       class Attributes
       {
           font = "PuristaLight";
           color = "#E5E5E5";
           align = "left";
           shadow = "false";
       };
       class ShortcutPos
       {
           left = "(6.25 * (((safezoneW / safezoneH) min 1.2) / 40)) - 0.0225 - 0.005";
           top = 0.005;
           w = 0.0225;
           h = 0.03;
       };
       soundEnter[] = 
       {
           "\A3\ui_f\data\sound\RscButtonMenu\soundEnter",
           0.09,
           1
       };
       soundPush[] = 
       {
           "\A3\ui_f\data\sound\RscButtonMenu\soundPush",
           0.09,
           1
       };
       soundClick[] = 
       {
           "\A3\ui_f\data\sound\RscButtonMenu\soundClick",
           0.09,
           1
       };
       soundEscape[] = 
       {
           "\A3\ui_f\data\sound\RscButtonMenu\soundEscape",
           0.09,
           1
       };
    };
    class RscButtonMenuOK
    {
       idc = 1;
       shortcuts[] = 
       {
           "0x00050000 + 0",
           28,
           57,
           156
       };
       default = 1;
       text = "OK";
       soundPush[] = 
       {
           "\A3\ui_f\data\sound\RscButtonMenuOK\soundPush",
           0.09,
           1
       };
    };
    class RscButtonMenuCancel
    {
       idc = 2;
       shortcuts[] = 
       {
           "0x00050000 + 1"
       };
       text = "Cancel";
    };
    class RscControlsGroup
    {
       class VScrollbar
       {
           color[] = 
           {
               1,
               1,
               1,
               1
           };
           width = 0.021;
           autoScrollSpeed = -1;
           autoScrollDelay = 5;
           autoScrollRewind = 0;
           shadow = 0;
       };
       class HScrollbar
       {
           color[] = 
           {
               1,
               1,
               1,
               1
           };
           height = 0.028;
           shadow = 0;
       };
       class ScrollBar
       {
           color[] = 
           {
               1,
               1,
               1,
               0.6
           };
           colorActive[] = 
           {
               1,
               1,
               1,
               1
           };
           colorDisabled[] = 
           {
               1,
               1,
               1,
               0.3
           };
           shadow = 0;
           thumb = "\A3\ui_f\data\gui\cfg\scrollbar\thumb_ca.paa";
           arrowFull = "\A3\ui_f\data\gui\cfg\scrollbar\arrowFull_ca.paa";
           arrowEmpty = "\A3\ui_f\data\gui\cfg\scrollbar\arrowEmpty_ca.paa";
           border = "\A3\ui_f\data\gui\cfg\scrollbar\border_ca.paa";
       };
       class Controls
       {
       };
       type = 15;
       idc = -1;
       x = 0;
       y = 0;
       w = 1;
       h = 1;
       shadow = 0;
       style = 16;
    };
    
    
    class WF_RscFrame
    {
       type = 0;
       idc = -1;
       style = 64;
       shadow = 2;
       colorBackground[] = {0,0,0,0.518};
       colorText[] = {1,1,1,1};
       font = "Zeppelin32";
       sizeEx = 0.02;
       text = "";
    };
    class WF_RscSlider
    {
       access = 0;
       type = 3;
       style = 1024;
       w = 0.3;
       color[] = {1,1,1,0.8};
       colorActive[] = {1,1,1,1};
       shadow = 0;
       h = 0.025;
    };
    class WF_RscMapControl
    {
     access = 0;
     idc = -1;
     type = CT_MAP_MAIN;
     style = ST_PICTURE;
    
    
     x = 0.10;
     y = 0.10;
     w = 0.80;
     h = 0.60;
    
       moveOnEdges = 1;
       shadow = 0;
       ptsPerSquareSea = 5;
       ptsPerSquareTxt = 3;
       ptsPerSquareCLn = 10;
       ptsPerSquareExp = 10;
       ptsPerSquareCost = 10;
       ptsPerSquareFor = 9;
       ptsPerSquareForEdge = 9;
       ptsPerSquareRoad = 6;
       ptsPerSquareObj = 9;
       showCountourInterval = 0;
       scaleMin = 0.001;
       scaleMax = 1.0;
       scaleDefault = 0.16;
       maxSatelliteAlpha = 0.85;
       alphaFadeStartScale = 0.35;
       alphaFadeEndScale = 0.4;
       colorBackground[] = {0.969,0.957,0.949,1.0};
       colorSea[] = {0.467,0.631,0.851,0.5};
       colorForest[] = {0.624,0.78,0.388,0.5};
       colorForestBorder[] = {0.0,0.0,0.0,0.0};
       colorRocks[] = {0.0,0.0,0.0,0.3};
       colorRocksBorder[] = {0.0,0.0,0.0,0.0};
       colorLevels[] = {0.286,0.177,0.094,0.5};
       colorMainCountlines[] = {0.572,0.354,0.188,0.5};
       colorCountlines[] = {0.572,0.354,0.188,0.25};
       colorMainCountlinesWater[] = {0.491,0.577,0.702,0.6};
       colorCountlinesWater[] = {0.491,0.577,0.702,0.3};
       colorPowerLines[] = {0.1,0.1,0.1,1.0};
       colorRailWay[] = {0.8,0.2,0.0,1.0};
       colorNames[] = {0.1,0.1,0.1,0.9};
       colorInactive[] = {1.0,1.0,1.0,0.5};
       colorOutside[] = {0.0,0.0,0.0,1.0};
       colorTracks[] = {0.84,0.76,0.65,0.15};
       colorTracksFill[] = {0.84,0.76,0.65,1.0};
       colorRoads[] = {0.7,0.7,0.7,1.0};
       colorRoadsFill[] = {1.0,1.0,1.0,1.0};
       colorMainRoads[] = {0.9,0.5,0.3,1.0};
       colorMainRoadsFill[] = {1.0,0.6,0.4,1.0};
       colorGrid[] = {0.1,0.1,0.1,0.6};
       colorGridMap[] = {0.1,0.1,0.1,0.6};
       fontLabel = "PuristaMedium";
       sizeExLabel = "(            (            (            ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 0.8)";
       fontGrid = "TahomaB";
       sizeExGrid = 0.02;
       fontUnits = "TahomaB";
       sizeExUnits = "(            (            (            ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 0.8)";
       fontNames = "PuristaMedium";
       sizeExNames = "(            (            (            ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 0.8) * 2";
       fontInfo = "PuristaMedium";
       sizeExInfo = "(            (            (            ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 0.8)";
       fontLevel = "TahomaB";
       sizeExLevel = 0.02;
    
       colorText[] = {1,1,1,1.0};
       font = "PuristaMedium";
       text = "#(argb,8,8,3)color(1,1,1,1)";
       SizeEx = "(            (            (            ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)";
       //size = "(            (            (            ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)";
    
       class Legend
       {
           x = "SafeZoneX +                     (            ((safezoneW / safezoneH) min 1.2) / 40)";
           y = "SafeZoneY + safezoneH - 4.5 *                     (            (            ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
           w = "10 *                     (            ((safezoneW / safezoneH) min 1.2) / 40)";
           h = "3.5 *                     (            (            ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
           font = "PuristaMedium";
           sizeEx = "(            (            (            ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 0.8)";
           colorBackground[] = {1,1,1,0.5};
           color[] = {0,0,0,1};
       };
       class Task
       {
           icon = "\A3\ui_f\data\map\mapcontrol\taskIcon_CA.paa";
           iconCreated = "\A3\ui_f\data\map\mapcontrol\taskIconCreated_CA.paa";
           iconCanceled = "\A3\ui_f\data\map\mapcontrol\taskIconCanceled_CA.paa";
           iconDone = "\A3\ui_f\data\map\mapcontrol\taskIconDone_CA.paa";
           iconFailed = "\A3\ui_f\data\map\mapcontrol\taskIconFailed_CA.paa";
           color[] = {"(profilenamespace getvariable ['IGUI_TEXT_RGB_R',0])","(profilenamespace getvariable ['IGUI_TEXT_RGB_G',1])","(profilenamespace getvariable ['IGUI_TEXT_RGB_B',1])","(profilenamespace getvariable ['IGUI_TEXT_RGB_A',0.8])"};
           colorCreated[] = {1,1,1,1};
           colorCanceled[] = {0.7,0.7,0.7,1};
           colorDone[] = {0.7,1,0.3,1};
           colorFailed[] = {1,0.3,0.2,1};
           size = 27;
           importance = 1;
           coefMin = 1;
           coefMax = 1;
       };
       class Waypoint
       {
           icon = "\A3\ui_f\data\map\mapcontrol\waypoint_ca.paa";
           color[] = {0,0,0,1};
           size = 27;
           importance = 1;
           coefMin = 1;
           coefMax = 1;
       };
       class WaypointCompleted
       {
           icon = "\A3\ui_f\data\map\mapcontrol\waypointCompleted_ca.paa";
           color[] = {0,0,0,1};
           size = 27;
           importance = 1;
           coefMin = 1;
           coefMax = 1;
       };
       class CustomMark
       {
           icon = "\A3\ui_f\data\map\mapcontrol\custommark_ca.paa";
           size = 24;
           importance = 1;
           coefMin = 1;
           coefMax = 1;
           color[] = {0,0,0,1};
       };
       class Command
       {
           icon = "\A3\ui_f\data\map\mapcontrol\waypoint_ca.paa";
           size = 18;
           importance = 1;
           coefMin = 1;
           coefMax = 1;
           color[] = {1,1,1,1};
       };
       class Bush
       {
           icon = "\A3\ui_f\data\map\mapcontrol\bush_ca.paa";
           color[] = {0.45,0.64,0.33,0.4};
           size = "14/2";
           importance = "0.2 * 14 * 0.05 * 0.05";
           coefMin = 0.25;
           coefMax = 4;
       };
       class Rock
       {
           icon = "\A3\ui_f\data\map\mapcontrol\rock_ca.paa";
           color[] = {0.1,0.1,0.1,0.8};
           size = 12;
           importance = "0.5 * 12 * 0.05";
           coefMin = 0.25;
           coefMax = 4;
       };
       class SmallTree
       {
           icon = "\A3\ui_f\data\map\mapcontrol\bush_ca.paa";
           color[] = {0.45,0.64,0.33,0.4};
           size = 12;
           importance = "0.6 * 12 * 0.05";
           coefMin = 0.25;
           coefMax = 4;
       };
       class Tree
       {
           icon = "\A3\ui_f\data\map\mapcontrol\bush_ca.paa";
           color[] = {0.45,0.64,0.33,0.4};
           size = 12;
           importance = "0.9 * 16 * 0.05";
           coefMin = 0.25;
           coefMax = 4;
       };
       class busstop
       {
           icon = "\A3\ui_f\data\map\mapcontrol\busstop_CA.paa";
           size = 24;
           importance = 1;
           coefMin = 0.85;
           coefMax = 1.0;
           color[] = {1,1,1,1};
       };
       class fuelstation
       {
           icon = "\A3\ui_f\data\map\mapcontrol\fuelstation_CA.paa";
           size = 24;
           importance = 1;
           coefMin = 0.85;
           coefMax = 1.0;
           color[] = {1,1,1,1};
       };
       class hospital
       {
           icon = "\A3\ui_f\data\map\mapcontrol\hospital_CA.paa";
           size = 24;
           importance = 1;
           coefMin = 0.85;
           coefMax = 1.0;
           color[] = {1,1,1,1};
       };
       class church
       {
           icon = "\A3\ui_f\data\map\mapcontrol\church_CA.paa";
           size = 24;
           importance = 1;
           coefMin = 0.85;
           coefMax = 1.0;
           color[] = {1,1,1,1};
       };
       class lighthouse
       {
           icon = "\A3\ui_f\data\map\mapcontrol\lighthouse_CA.paa";
           size = 24;
           importance = 1;
           coefMin = 0.85;
           coefMax = 1.0;
           color[] = {1,1,1,1};
       };
       class power
       {
           icon = "\A3\ui_f\data\map\mapcontrol\power_CA.paa";
           size = 24;
           importance = 1;
           coefMin = 0.85;
           coefMax = 1.0;
           color[] = {1,1,1,1};
       };
       class powersolar
       {
           icon = "\A3\ui_f\data\map\mapcontrol\powersolar_CA.paa";
           size = 24;
           importance = 1;
           coefMin = 0.85;
           coefMax = 1.0;
           color[] = {1,1,1,1};
       };
       class powerwave
       {
           icon = "\A3\ui_f\data\map\mapcontrol\powerwave_CA.paa";
           size = 24;
           importance = 1;
           coefMin = 0.85;
           coefMax = 1.0;
           color[] = {1,1,1,1};
       };
       class powerwind
       {
           icon = "\A3\ui_f\data\map\mapcontrol\powerwind_CA.paa";
           size = 24;
           importance = 1;
           coefMin = 0.85;
           coefMax = 1.0;
           color[] = {1,1,1,1};
       };
       class quay
       {
           icon = "\A3\ui_f\data\map\mapcontrol\quay_CA.paa";
           size = 24;
           importance = 1;
           coefMin = 0.85;
           coefMax = 1.0;
           color[] = {1,1,1,1};
       };
       class shipwreck
       {
           icon = "\A3\ui_f\data\map\mapcontrol\shipwreck_CA.paa";
           size = 24;
           importance = 1;
           coefMin = 0.85;
           coefMax = 1.0;
           color[] = {1,1,1,1};
       };
       class transmitter
       {
           icon = "\A3\ui_f\data\map\mapcontrol\transmitter_CA.paa";
           size = 24;
           importance = 1;
           coefMin = 0.85;
           coefMax = 1.0;
           color[] = {1,1,1,1};
       };
       class watertower
       {
           icon = "\A3\ui_f\data\map\mapcontrol\watertower_CA.paa";
           size = 24;
           importance = 1;
           coefMin = 0.85;
           coefMax = 1.0;
           color[] = {1,1,1,1};
       };
       class Cross
       {
           icon = "\A3\ui_f\data\map\mapcontrol\Cross_CA.paa";
           size = 24;
           importance = 1;
           coefMin = 0.85;
           coefMax = 1.0;
           color[] = {0,0,0,1};
       };
       class Chapel
       {
           icon = "\A3\ui_f\data\map\mapcontrol\Chapel_CA.paa";
           size = 24;
           importance = 1;
           coefMin = 0.85;
           coefMax = 1.0;
           color[] = {0,0,0,1};
       };
       class Bunker
       {
           icon = "\A3\ui_f\data\map\mapcontrol\bunker_ca.paa";
           size = 14;
           importance = "1.5 * 14 * 0.05";
           coefMin = 0.25;
           coefMax = 4;
           color[] = {0,0,0,1};
       };
       class Fortress
       {
           icon = "\A3\ui_f\data\map\mapcontrol\bunker_ca.paa";
           size = 16;
           importance = "2 * 16 * 0.05";
           coefMin = 0.25;
           coefMax = 4;
           color[] = {0,0,0,1};
       };
       class Fountain
       {
           icon = "\A3\ui_f\data\map\mapcontrol\fountain_ca.paa";
           size = 11;
           importance = "1 * 12 * 0.05";
           coefMin = 0.25;
           coefMax = 4;
           color[] = {0,0,0,1};
       };
       class Ruin
       {
           icon = "\A3\ui_f\data\map\mapcontrol\ruin_ca.paa";
           size = 16;
           importance = "1.2 * 16 * 0.05";
           coefMin = 1;
           coefMax = 4;
           color[] = {0,0,0,1};
       };
       class Stack
       {
           icon = "\A3\ui_f\data\map\mapcontrol\stack_ca.paa";
           size = 20;
           importance = "2 * 16 * 0.05";
           coefMin = 0.9;
           coefMax = 4;
           color[] = {0,0,0,1};
       };
       class Tourism
       {
           icon = "\A3\ui_f\data\map\mapcontrol\tourism_ca.paa";
           size = 16;
           importance = "1 * 16 * 0.05";
           coefMin = 0.7;
           coefMax = 4;
           color[] = {0,0,0,1};
       };
       class ViewTower
       {
           icon = "\A3\ui_f\data\map\mapcontrol\viewtower_ca.paa";
           size = 16;
           importance = "2.5 * 16 * 0.05";
           coefMin = 0.5;
           coefMax = 4;
           color[] = {0,0,0,1};
       };  
    
    
       class ActiveMarker
       {
           //icon = "\A3\ui_f\data\map\mapcontrol\custommark_ca.paa";
           size = 24;
           importance = 1;
           coefMin = 1;
           coefMax = 1;
           color[] = {0,0,0,1};
       };    
    
    
    
    };
    

    Dialog config:

    //--- Warfront
    #define IDC_WARFRONT_WF_CARGOTXT    1018
    #define IDC_WARFRONT_WF_ITEMIMG    1200
    #define IDC_WARFRONT_WF_CARGOLIST    1500
    #define IDC_WARFRONT_WF_BACKGROUND    2200
    #define IDC_WARFRONT_WF_UNLOADBTN    2400
    #define IDC_WARFRONT_WF_CANCELBTN    2401
    
    
    
    
    class WF_supply_dlg {
       idd = 1734;
       movingEnable = true;
       onLoad = "uiNamespace setVariable ['WF_supply_dlg', (_this select 0)];execVM 'client\gui\wf_supply_setup.sqf';"; 
       objects[] = {};
       class controlsBackground {};
       class controls {
    
    
    
    
    
    
               class WF_background: IGUIBack
               {
                   idc = IDC_WARFRONT_WF_BACKGROUND;
                   x = 0.309687 * safezoneW + safezoneX;
                   y = 0.29 * safezoneH + safezoneY;
                   w = 0.387187 * safezoneW;
                   h = 0.406 * safezoneH;
               };
               class WF_cargotxt: RscText
               {
                   idc = IDC_WARFRONT_WF_CARGOTXT;
                   text = "Warfront Cargo"; //--- ToDo: Localize;
                   x = 0.269271 * safezoneW + safezoneX;
                   y = 0.191074 * safezoneH + safezoneY;
                   w = 0.1575 * safezoneW;
                   h = 0.056 * safezoneH;
               };
               class WF_Cargolist: RscListbox
               {
                   idc = IDC_WARFRONT_WF_CARGOLIST;
                   style = LB_MULTI;
                   columns[] = {0.003,0.1,0.8};
                   drawSideArrows = 0;
                   idcLeft = -1; 
                    idcRight = -1;
                   maxHistoryDelay = 1;
                   rowHeight = 0;
                   x = 0.319794 * safezoneW + safezoneX;
                   y = 0.3404 * safezoneH + safezoneY;
                   w = 0.216562 * safezoneW;
                   h = 0.294 * safezoneH;
               };
               class WF_itemimg: RscPicture
               {
                   idc = IDC_WARFRONT_WF_ITEMIMG;
                   text = "#(argb,8,8,3)color(1,1,1,1)";
                   x = 0.572187 * safezoneW + safezoneX;
                   y = 0.346 * safezoneH + safezoneY;
                   w = 0.091875 * safezoneW;
                   h = 0.14 * safezoneH;
               };
               class WF_unloadbtn: RscShortcutButton
               {
                   idc = IDC_WARFRONT_WF_UNLOADBTN;
                   text = "Unload"; //--- ToDo: Localize;
                   x = 0.569687 * safezoneW + safezoneX;
                   y = 0.533444 * safezoneH + safezoneY;
                   w = 0.0984375 * safezoneW;
                   h = 0.042 * safezoneH;
                   action = "execVM 'client\gui\wf_supply_unload.sqf';";
               };
               class WF_cancelbtn: RscShortcutButton
               {
                   idc = IDC_WARFRONT_WF_CANCELBTN;
                   text = "Cancel"; //--- ToDo: Localize;
                   x = 0.592662 * safezoneW + safezoneX;
                   y = 0.64364 * safezoneH + safezoneY;
                   w = 0.0984375 * safezoneW;
                   h = 0.042 * safezoneH;
                   action = "closeDialog 0";
               };
    
    
    
    
    
    
    
    
    
       };
    
    
    };
    

    Adding items:

    //// Warfront
    // 
    // Created by: Riouken 
    //
    
    
    disableSerialization;
    
    
    _display = (uiNamespace getVariable "WF_supply_dlg");
    _lb = _display displayCtrl 1500;
    
    
    lbClear _lb;
    
    
    _supplies = wf_fob_supplies;
    
    
    {
    
    
       _classname = _x select 0;
       _text = _x select 1;
       _count = _x select 2;
       _pic = getText (configFile >> "cfgVehicles" >> _classname >> "icon");
    
    
       _index = _lb lnbAddRow ["",_text,(str _count)];
       lnbSetPicture [1500,[_index,0],_pic];
    
    
    
    
    } forEach _supplies;
    
    
    
    
    _lb lbSetCurSel 0;
    

    This all works in A2 but when I updated it for A3 I cant seem to get the multi - column's to work. I even searched the A3 ui_f config looking for any refrence to multi column listboxes in A3 but could not find any. I get no errors in the .rpt or script errors.

    Anyone see a mistake I have made or maybe a Dev could shed some light on this?

    I know the Dialog is working as I can add items normally and pictures:

    _index = _lb lbAdd _text;
    
    _lb lbSetPicture [_index, _pic];
    


  8. Am I right in thinking this is more of an event driven scripting language?

    SQF files are not objects they are functions that may or may not return something?

    Always use the server to store state unless absolutely sure that its not possible?

    Is there a place to get a list of events that you can add functions to be run from?

    This is becoming a great resource of information for arma 3 beginners but have previous object orientated experience. God I cant wait for the arma 3 java api.

    1. Its a lot like procedural programing

    2. SQF files are code. Not all are functions. Functions are saved to a variable and used at some point.

    3. Yes in general when dealing with Multi Player you want to run as much of the code on the server as you can, and just localize the code that needs to run on the clients.

    4. http://community.bistudio.com/wiki/ArmA:_Event_Handlers

    http://community.bistudio.com/wiki/addEventHandler

    5. Dont get your hopes up to far about Java, if or when it does arrive, the overhead from the system may not provide enough of a reason to use it over sqf except in explicit cases.

    ---------- Post added at 07:28 AM ---------- Previous post was at 07:21 AM ----------

    The big idea behind functions is this: if your only going to need a peice of code once then just leave it in the .sqf and the call it with execVM. But if you will be using it more than once, its better for performance if you just compile it once and save it to a variable and then just call it from memory when you need it.


  9. So wf_fnc_distance_to holds a reference to that script. Correct? So as long as you have that variable, you can call the function?

    Yes that is correct.

    Parameters are passed to the function via an array, and then select 0, and select 1 are accessing those parameters. Correct?

    Yes

    I see what you're doing there, where a function is in a single sqf file. Is there a way to have multiple functions in a single file and then call one or the other?

    Yes there is, you can build and compile them all in one file and then reference them later:

    This is a client function file from Domination, its a bit more advanced, he is using prepocessor commands and macros to compile and save them but yes it can be done.

    #define THIS_FILE "x_playerfuncs.sqf"
    #include "x_setup.sqf"
    
    
    if ((GVAR(string_player) in GVAR(is_engineer)) || GVAR(with_ai) || GVAR(with_ai_features) == 0) then {
    #ifndef __ACE__
    FUNC(sfunc) = {
    	private "_objs";
    	if (vehicle player == player) then {
    		_objs = nearestObjects [player, ["LandVehicle","Air"], 7];
    		if (count _objs > 0) then {
    			GVAR(objectID2) = _objs select 0;
    			if (alive GVAR(objectID2)) then {
    				(damage GVAR(objectID2) > 0.05 || fuel GVAR(objectID2) < 1)
    			} else {
    				false
    			}
    		}
    	} else {
    		false
    	}
    };
    #else
    FUNC(sfunc) = {
    	private "_objs";
    	if (vehicle player == player && (player call ace_sys_ruck_fnc_hasRuck)) then {
    		_objs = nearestObjects [player, ["LandVehicle","Air"], 7];
    		if (count _objs > 0) then {
    			GVAR(objectID2) = _objs select 0;
    			if (alive GVAR(objectID2)) then {
    				(damage GVAR(objectID2) > 0.05 || fuel GVAR(objectID2) < 1)
    			} else {
    				false
    			}
    		}
    	} else {
    		false
    	}
    };
    #endif
    FUNC(ffunc) = {
    	private ["_l","_vUp","_winkel"];
    	if (vehicle player == player) then {
    		GVAR(objectID1) = position player nearestObject "LandVehicle";
    		if (!alive GVAR(objectID1) || player distance GVAR(objectID1) > 8) then {
    			false
    		} else {
    			_vUp = vectorUp GVAR(objectID1);
    			if ((_vUp select 2) < 0 && player distance (position player nearestObject GVAR(rep_truck)) < 20) then {
    				true
    			} else {
    				_l=sqrt((_vUp select 0)^2+(_vUp select 1)^2);
    				if (_l != 0) then {
    					_winkel = (_vUp select 2) atan2 _l;
    					(_winkel < 30 && player distance (position player nearestObject GVAR(rep_truck)) < 20)
    				}
    			}
    		}
    	} else {
    		false
    	}
    };
    };
    
    
    FUNC(PlacedObjAn) = {
    if (GVAR(string_player) == _this) then {
    	if (GVAR(player_is_medic)) then {
    		_m_name = "Mash " + _this;
    		[QGVAR(w_ma),_m_name] call FUNC(NetCallEvent);
    		__pSetVar [QGVAR(medtent), []];
    		_medic_tent = __pGetVar(medic_tent);
    		if (!isNil "_medic_tent") then {if (!isNull _medic_tent) then {deleteVehicle _medic_tent}};
    		__pSetVar ["medic_tent", objNull];
    		"Your mash was destroyed !!!" call FUNC(GlobalChat);
    	};
    	if (GVAR(player_can_build_mgnest)) then {
    		_m_name = "MG Nest " + _this;
    		[QGVAR(w_ma),_m_name] call FUNC(NetCallEvent);
    		__pSetVar [QGVAR(mgnest_pos), []];
    		_mg_nest = __pGetVar(mg_nest);
    		if (!isNil "_mg_nest") then {if (!isNull _mg_nest) then {deleteVehicle _mg_nest}};
    		__pSetVar ["mg_nest", objNull];
    		"Your MG nest was destroyed !!!" call FUNC(GlobalChat);
    	};
    	if (GVAR(eng_can_repfuel)) then {
    		_m_name = "FARP " + _this;
    		[QGVAR(w_ma),_m_name] call FUNC(NetCallEvent);
    		__pSetVar [QGVAR(farp_pos), []];
    		_farp = __pGetVar(GVAR(farp_obj));
    		if (!isNil "_farp") then {if (!isNull _farp) then {deleteVehicle _farp}};
    		__pSetVar [QGVAR(farp_obj), objNull];
    		"Your FARP was destroyed !!!" call FUNC(GlobalChat);
    	};
    };
    };
    #ifndef __TT__
    FUNC(RecapturedUpdate) = {
    private ["_index","_target_array", "_target_name", "_targetName","_state"];
    PARAMS_2(_index,_state);
    _target_array = GVAR(target_names) select _index;
    _target_name = _target_array select 1;
    switch (_state) do {
    	case 0: {
    		_target_name setMarkerColorLocal "ColorRed";
    		_target_name setMarkerBrushLocal "FDiagonal";
    		hint composeText[
    			parseText("<t color='#f0ff0000' size='2'>" + "Attention:" + "</t>"), lineBreak,
    			parseText("<t size='1'>" + format ["Enemy mobile forces have recaptured %1!!!", _target_name] + "</t>")
    		];
    		format ["Attention!!! Enemy mobile forces have recaptured %1!!!", _target_name] call FUNC(HQChat);
    	};
    	case 1: {
    		_target_name setMarkerColorLocal "ColorGreen";
    		_target_name setMarkerBrushLocal "Solid";
    		hint composeText[
    			parseText("<t color='#f00000ff' size='2'>" + "Good work!" + "</t>"), lineBreak,
    			parseText("<t size='1'>" + format ["You have captured %1 again!!!", _target_name] + "</t>")
    		];
    	};
    };
    };
    #endif
    FUNC(PlayerRank) = {
    private ["_score","_d_player_old_score","_d_player_old_rank"];
    _score = score player;
    _d_player_old_score = __pGetVar(GVAR(player_old_score));
    if (isNil "_d_player_old_score") then {_d_player_old_score = 0};
    _d_player_old_rank = __pGetVar(GVAR(player_old_rank));
    if (isNil "_d_player_old_rank") then {_d_player_old_rank = "PRIVATE"};
    if (_score < (GVAR(points_needed) select 0) && _d_player_old_rank != "PRIVATE") exitWith {
    	if (_d_player_old_score >= (GVAR(points_needed) select 0)) then {(format ["You were degraded from %1 to Private !!!",_d_player_old_rank]) call FUNC(HQChat)};
    	_d_player_old_rank = "PRIVATE";
    	player setRank _d_player_old_rank;
    	__pSetVar [QGVAR(player_old_rank), _d_player_old_rank];
    	__pSetVar [QGVAR(player_old_score), _score];
    };
    if (_score < (GVAR(points_needed) select 1) && _score >= (GVAR(points_needed) select 0) && _d_player_old_rank != "CORPORAL") exitWith {
    	if (_d_player_old_score < (GVAR(points_needed) select 1)) then {
    		"You were promoted to Corporal, congratulations !!!" call FUNC(HQChat);
    		playSound "fanfare";
    	} else {
    		(format ["You were degraded from %1 to Corporal !!!",_d_player_old_rank]) call FUNC(HQChat);
    	};
    	_d_player_old_rank = "CORPORAL";
    	player setRank _d_player_old_rank;
    	__pSetVar [QGVAR(player_old_score), _score];
    	__pSetVar [QGVAR(player_old_rank), _d_player_old_rank];
    };
    if (_score < (GVAR(points_needed) select 2) && _score >= (GVAR(points_needed) select 1) && _d_player_old_rank != "SERGEANT") exitWith {
    	if (_d_player_old_score < (GVAR(points_needed) select 2)) then {
    		"You were promoted to Sergeant, congratulations !!!" call FUNC(HQChat);
    		playSound "fanfare";
    	} else {
    		(format ["You were degraded from %1 to Sergeant !!!",_d_player_old_rank]) call FUNC(HQChat);
    	};
    	_d_player_old_rank = "SERGEANT";
    	player setRank _d_player_old_rank;
    	__pSetVar [QGVAR(player_old_score), _score];
    	__pSetVar [QGVAR(player_old_rank), _d_player_old_rank];
    };
    if (_score < (GVAR(points_needed) select 3) && _score >= (GVAR(points_needed) select 2) && _d_player_old_rank != "LIEUTENANT") exitWith {
    	if (_d_player_old_score < (GVAR(points_needed) select 3)) then {
    		"You were promoted to Lieutenant, congratulations !!!" call FUNC(HQChat);
    		playSound "fanfare";
    	} else {
    		(format ["You were degraded from %1 to Lieutenant !!!",_d_player_old_rank]) call FUNC(HQChat);
    	};
    	_d_player_old_rank = "LIEUTENANT";
    	player setRank _d_player_old_rank;
    	__pSetVar [QGVAR(player_old_score), _score];
    	__pSetVar [QGVAR(player_old_rank), _d_player_old_rank];
    };
    if (_score < (GVAR(points_needed) select 4) && _score >= (GVAR(points_needed) select 3) && _d_player_old_rank != "CAPTAIN") exitWith {
    	if (_d_player_old_score < (GVAR(points_needed) select 4)) then {
    		"You were promoted to Captain, congratulations !!!" call FUNC(HQChat);
    		playSound "fanfare";
    	} else {
    		(format ["You were degraded from %1 to Captain !!!",_d_player_old_rank]) call FUNC(HQChat);
    	};
    	_d_player_old_rank = "CAPTAIN";
    	player setRank _d_player_old_rank;
    	__pSetVar [QGVAR(player_old_score), _score];
    	__pSetVar [QGVAR(player_old_rank), _d_player_old_rank];
    };
    if (_score < (GVAR(points_needed) select 5) && _score >= (GVAR(points_needed) select 4) && _d_player_old_rank != "MAJOR") exitWith {		
    	if (_d_player_old_score < (GVAR(points_needed) select 4)) then {
    		"You were promoted to Major, congratulations !!!" call FUNC(HQChat);
    		playSound "fanfare";
    	} else {
    		(format ["You were degraded from %1 to Major !!!",_d_player_old_rank]) call FUNC(HQChat);
    	};
    	_d_player_old_rank = "MAJOR";
    	player setRank _d_player_old_rank;
    	__pSetVar [QGVAR(player_old_score), _score];
    	__pSetVar [QGVAR(player_old_rank), _d_player_old_rank];
    };
    if (_score >= (GVAR(points_needed) select 5) && _d_player_old_rank != "COLONEL") exitWith {
    	_d_player_old_rank = "COLONEL";
    	player setRank _d_player_old_rank;
    	"You were promoted to Colonel, congratulations !!!" call FUNC(HQChat);
    	playSound "fanfare";
    	__pSetVar [QGVAR(player_old_score), _score];
    	__pSetVar [QGVAR(player_old_rank), _d_player_old_rank];
    };
    };
    
    
    FUNC(GetRankIndex) = {["PRIVATE","CORPORAL","SERGEANT","LIEUTENANT","CAPTAIN","MAJOR","COLONEL"] find (toUpper (_this))};
    
    
    FUNC(GetRankString) = {
    switch (toUpper(_this)) do {
    	case "PRIVATE": {"Private"};
    	case "CORPORAL": {"Corporal"};
    	case "SERGEANT": {"Sergeant"};
    	case "LIEUTENANT": {"Lieutenant"};
    	case "CAPTAIN": {"Captain"};
    	case "MAJOR": {"Major"};
    	case "COLONEL": {"Colonel"};
    }
    };
    
    
    FUNC(GetRankFromScore) = {
    if (_this < (GVAR(points_needed) select 0)) exitWith {"Private"};
    if (_this < (GVAR(points_needed) select 1)) exitWith {"Corporal"};
    if (_this < (GVAR(points_needed) select 2)) exitWith {"Sergeant"};
    if (_this < (GVAR(points_needed) select 3)) exitWith {"Lieutenant"};
    if (_this < (GVAR(points_needed) select 4)) exitWith {"Captain"};
    if (_this < (GVAR(points_needed) select 5)) then {"Major"} else {"Colonel"}
    };
    
    
    FUNC(GetRankPic) = {
    switch (toUpper(_this)) do {
    	case "PRIVATE": {"\CA\warfare2\Images\rank_private.paa"};
    	case "CORPORAL": {"\CA\warfare2\Images\rank_corporal.paa"};
    	case "SERGEANT": {"\CA\warfare2\Images\rank_sergeant.paa"};
    	case "LIEUTENANT": {"\CA\warfare2\Images\rank_lieutenant.paa"};
    	case "CAPTAIN": {"\CA\warfare2\Images\rank_captain.paa"};
    	case "MAJOR": {"\CA\warfare2\Images\rank_major.paa"};
    	case "COLONEL": {"\CA\warfare2\Images\rank_colonel.paa"};
    }
    };
    
    
    #ifndef __TT__
    if (isNil "d_with_carrier") then {
    FUNC(BaseEnemies) = {
    	private "_status";
    	_status = _this select 0;
    	switch (_status) do {
    		case 0: {
    			hint composeText[
    				parseText("<t color='#f0ff0000' size='2'>" + "DANGER:" + "</t>"), lineBreak,
    				parseText("<t size='1'>" + "Enemy troops in your base." + "</t>")
    			];
    		};
    		case 1: {
    			hint composeText[
    				parseText("<t color='#f00000ff' size='2'>" + "CLEAR:" + "</t>"), lineBreak,
    				parseText("<t size='1'>" + "No more enemies in your base." + "</t>")
    			];
    		};
    	};
    };
    
    FUNC(XFacAction) = {
    	private ["_num","_thefac","_element","_posf","_facid","_exit_it"];
    	PARAMS_1(_num);
    	_thefac = switch (_num) do {
    		case 0: {QGVAR(jet_serviceH)};
    		case 1: {QGVAR(chopper_serviceH)};
    		case 2: {QGVAR(wreck_repairH)};
    	};
    	waitUntil {(sleep 0.521 + (random 0.3));(X_JIPH getVariable _thefac)};
    	_element = GVAR(aircraft_facs) select _num;
    	_posf = _element select 0;
    	sleep 0.543;
    	_facid = -1;
    	_exit_it = false;
    	while {!_exit_it} do {
    		sleep 0.432;
    		switch (_num) do {
    			case 0: {if (__XJIPGetVar(GVAR(jet_s_reb))) then {_exit_it = true}};
    			case 1: {if (__XJIPGetVar(GVAR(chopper_s_reb))) then {_exit_it = true}};
    			case 2: {if (__XJIPGetVar(GVAR(wreck_s_reb))) then {_exit_it = true}};
    		};
    		if (!_exit_it) then {
    			if (player distance _posf < 14 && (X_JIPH getVariable _thefac) && _facid == -1) then {
    				if (alive player) then {
    					_facid = player addAction ["Rebuild Support Building" call FUNC(RedText),"x_client\x_rebuildsupport.sqf",_num];
    				};
    			} else {
    				if (_facid != -1) then {
    					if (player distance _posf > 13 || !(X_JIPH getVariable _thefac)) then {
    						player removeAction _facid;
    						_facid = -1;
    					};
    				};
    			};
    		} else {
    			if (_facid != -1) then {player removeAction _facid};
    		};
    	};
    };
    };
    #endif
    
    
    FUNC(ProgBarCall) = {
    private ["_captime", "_wf", "_curcaptime", "_disp", "_control", "_backgroundControl", "_maxWidth", "_position", "_newval"];
    PARAMS_1(_wf);
    disableSerialization;
    _captime = _wf getVariable QGVAR(CAPTIME);
    _curcaptime = _wf getVariable QGVAR(CURCAPTIME);
    _curside = _wf getVariable QGVAR(SIDE);
    _disp = __uiGetVar(DPROGBAR);
    _control = _disp displayCtrl 3800;
    _backgroundControl = _disp displayCtrl 3600;
    _maxWidth = (ctrlPosition _backgroundControl select 2) - 0.01;
    _position = ctrlPosition _control;
    _newval = if (_curside != GVAR(own_side_trigger)) then {(_maxWidth * _curcaptime / _captime) max 0.02} else {_maxWidth};
    _position set [2, _newval];
    _r = 1 - (_newval * 2.777777);
    _g = _newval * 2.777777;
    _control ctrlSetPosition _position;
    //_control ctrlSetBackgroundColor (if !(_wf getVariable QGVAR(STALL)) then {[0.543, 0.5742, 0.4102, 0.8]} else {[1, 1, 0, 0.8]});
    _control ctrlSetBackgroundColor (if !(_wf getVariable QGVAR(STALL)) then {[_r, _g, 0, 0.8]} else {[1, 1, 0, 0.8]});
    _control ctrlCommit 3;
    };
    
    
    FUNC(ArtyShellTrail) = {
    private ["_shpos", "_trails", "_ns", "_sh", "_trail"];
    PARAMS_3(_shpos,_trails,_ns);
    if (_trails != "") then {
    	_sh = _ns createVehicleLocal [_shpos select 0, _shpos select 1, 150];
    	_sh setPosASL _shpos;
    	_sh setVelocity [0,0,-150];
    	_trail = [_sh] call compile preprocessFile _trails;
    	waitUntil {isNull _sh};
    	sleep 1;
    	deleteVehicle _trail;
    };
    };
    
    
    FUNC(ParaExploitHandler) = {
    if (animationState player == "halofreefall_non") then {
    	if ((_this select 4) isKindOf "TimeBombCore") then {
    		deleteVehicle (_this select 6);
    		player addMagazine (_this select 5);
    	};
    };
    };
    
    
    #ifdef __ACE__
    FUNC(DHaha) = {
    private ["_endtime", "_oldident"];
    _endtime = __pGetVar(GVAR(HAHA_END));
    if (isNil "_endtime") then {_endtime = -1};
    if (time < _endtime) exitWith {
    	_endtime = _endtime + 600;
    	__pSetVar [QGVAR(HAHA_END), _endtime];
    };
    _endtime = time + 600;
    __pSetVar [QGVAR(HAHA_END), _endtime];
    _oldident = __pGetVar(ACE_Identity);
    ["ace_sys_goggles_setident2", [player, "ACE_GlassesHaHa"]] call CBA_fnc_globalEvent;
    [_oldident] spawn {
    	private ["_oldident", "_curident"];
    	PARAMS_1(_oldident);
    	while {time < __pGetVar(GVAR(HAHA_END))} do {
    		if (alive player) then {
    			_curident = __pGetVar(ACE_Identity);
    			if (_curident != "ACE_GlassesHaHa") then {
    				["ace_sys_goggles_setident2", [player, "ACE_GlassesHaHa"]] call CBA_fnc_globalEvent;
    			};
    		};
    		sleep 1;
    	};
    	["ace_sys_goggles_setident2", [player, _oldident]] call CBA_fnc_globalEvent;
    };
    };
    #endif
    
    
    FUNC(LightObj) = {
    private "_light";
    _light = "#lightpoint" createVehicleLocal [0,0,0];
    _light setLightBrightness 1;
    _light setLightAmbient[0.2, 0.2, 0.2];
    _light setLightColor[0.01, 0.01, 0.01];
    _light lightAttachObject [_this, [0,0,0]];
    };
    

    Consider this simple Java class (Note this is taken from an actual project, so don't worry too much about what's going on inside the methods):

    Do we see any construct like this in SQF? Or does each .sqf file run from top to bottom and that's it, and there's no way to call a specific part of the code?

    Nope, SQF is not OO. each file will run based on its code and with the exceptions that we talked about earlier in the thread, ie saving data into variables or passing it to something else, once the sqf runs thats it.

    I have to post this here, it would not let me post otherwise lol.


  10. Here is a function for checking the sea level distance from airborne objects to a pos on the ground.

    // wf_fnc_distance_to.sqf
    // By Riouken
    
    
    _obj1 = _this select 0;
    _obj2 = _this select 1;
    
    
    
    
    _pos_obj1 = [_obj1 select 0,_obj1 select 1];
    _pos_obj2 = [_obj2 select 0,_obj2 select 1];
    
    
    _result = _pos_obj1 distance _pos_obj2;
    
    
    _result
    
    

    I create it in a "init" file that I only run on the server(that way it is available anywhere on the server machine)

    wf_fnc_distance_to = compile preprocessFileLineNumbers "server\fnc\wf_fnc_distance_to.sqf";
    

    Now I can call it from any script on the server machine like this:

    Here is a script(actually this is another function that I call it from) that I call it in:

    _loc = _this select 0;
    _cargo = _this select 1;
    
    
    _spwnpos = [(getMarkerPos "air_spawn") select 0, (getMarkerPos "air_spawn") select 1,600];
    
    
    _dir = [_spwnpos, _loc] call BIS_fnc_dirTo;
    
    
    _c130array = [_spwnpos, _dir, "C130J_US_EP1", WEST] call bis_fnc_spawnvehicle;
    _c130 = _c130array select 0;
    _c130 allowDamage false;
    
    
    _transgrp = group _c130;
    
    _wp = _transgrp addWaypoint [_loc, 0];
    [_transgrp, 0] setWaypointType "MOVE";
    _c130 flyinHeight 400;
    
    
    _dropcargo = false;
    while {! _dropcargo} do
       {
           [color=#ff0000]_dist = [getPosAsl _c130,_loc] call wf_fnc_distance_to;[/color]
    
           if (_dist < 300) then 
               {
                   _dropcargo = true;
               };
       sleep 1;
       };
    
    
    waitUntil {_dropcargo};
    
    
    if (_cargo == "Land_Misc_Cargo1E_EP1") then
       {
           _dropcargo = [_c130,_cargo] spawn wf_fnc_supply_drop;
           sleep .07;
           _dropcargo = [_c130,_cargo] spawn wf_fnc_supply_drop;
       }else
       {
    
           _dropcargo = [_c130,_cargo] spawn wf_fnc_supply_drop;
    };
    
    
    sleep 3;
    _wp = _transgrp addWaypoint [_spwnpos, 1];
    [_transgrp, 1] setWaypointType "MOVE";
    
    
    _backtobase = false;
    while {! _backtobase} do
       {
           _dist = [getPosAsl _c130,_spwnpos] call wf_fnc_distance_to;
    
           if (_dist < 500) then 
               {
                   deleteVehicle _c130;
               };
       sleep 5;
       };
    

    ---------- Post added at 07:35 PM ---------- Previous post was at 07:22 PM ----------

    Here is a silly example of a very limited scope for a function.

    while {time > 10} do {
    
    
       _starttime = time;
    
       // This function will only be availble in this loop that we created it in.
       _howLongHasItBeen = {
    
    
               _newtime = (_this select 0) - _starttime;
               _newtime
    
    
           };
    
    
    
    
       While {true} do {
    
    
    
    
           _newtime = [time] call _howLongHasItBeen;
    
    
           hint str _newtime;
       sleep 1;
       };
    sleep 1;
    };
    
    
    
    
    
    
    // _howLongHasItBeen would not work out side the loop above.
    


  11. if(isClient)
    {
      run script
      // My client functions/scripts....stuff etc.
      myfunction = do some stuff...
    }
    else
    {
    // What ever we ran above would not be availibel in this case unless we sent the data to this scope, like we talked about before.
    // You can do stuff here for what ever is not a client... ie the server.
    }
    
    

    If you create the function on only one machine then only it will know about it. If you create it on everyone's machine you can execute it everywhere.


  12. They can't communicate. The only two ways to get data in or out is to pass data to the thread:

    _null =[this,stuff gets passed to the thread] execVM "my script.sqf";

    And saving variables to a global namespace and then checking those in another thread. Scope matters a lot when coding like this.

    ---------- Post added at 03:16 PM ---------- Previous post was at 03:10 PM ----------

    A lot of scripting in arma revolves around functions. You pass data to them and either wait for a return or they go off on their own to do a task while your other script finishes up.


  13. To hopefully get this back on topic... There are some conversion mods out there but it does not work the same as some other engine's like "source" etc... In arma you do not have as much access to the engine. Almost every thing is done with the API. So almost everything is done either mission/script based or Mod based.

    For some good examples of conversion mods and how they are done here are some you can download and open up to see how it works.

    http://dayzmod.com/

    http://www.invasion-1944.com/download-i44/

    http://www.cityliferpg.com/

×