Jump to content

xeenenta

Member
  • Content Count

    3
  • Joined

  • Last visited

  • Medals

Community Reputation

10 Good

About xeenenta

  • Rank
    Rookie
  1. Hi Everyone, I'm looking for some help regarding a zeus module that I am creating. To give some background, the module (when placed) should prompt the user to use sliders to configure a radius and number of AI with which to garrison buildings within said defined radius. I think I'm running into an issue with execution locality, as this works perfectly in the editor. Expected behavior: User selects the module in zeus and places it somewhere on the map Dialog box appears to ask them to configure radius and number of AI User hits OK and it calls another function to start placing AI relative to the module location In singleplayer this works as above (I imagine this is due to the server and client both being local) In multiplayer, the function to create the dialog is executed on the server (evidenced by debug output to the console), but a dialog does not appear for Zeus My module is defined as follows: class xeen_module_base: Module_F { icon = "\xeen_modules\insignia.paa"; category = "xeen_modules"; isGlobal = 0; isTriggerActivated = 1; isDisposable = 1; is3DEN = 0; curatorCanAttach = 1; scope = 1; scopeCurator = 1; }; class xeen_moduleGarrison: xeen_module_base { displayName = "Garrison Area"; function = "xeen_fnc_garrisonModuleDialog"; functionPriority = 10; scope = 2; scopeCurator = 2; class Attributes: AttributesBase { class GarrisonSpread: Edit { property = "xeen_moduleGarrison_GarrisonSpread"; displayName = "Unit Spread (m)"; tooltip = "The distance of buildings to be garrisoned"; typeName = "NUMBER"; defaultValue = "50"; }; class MaxPerBuilding: Edit { property = "xeen_moduleGarrison_MaxPerBuilding"; displayName = "Max units per building"; tooltip = "Max units per building"; typeName = "NUMBER"; defaultValue = "5"; }; //class ModuleDescription: ModuleDescription{}; // Module description should be shown last }; #include "description.hpp" }; and it calls the following function: /* * Author: Xeenenta * Opens the dialog menu for the garrison module * * Arguments: * 0: Logic <LOGIC> * * Return Value: * None * * Example: * [_logic] call xeen_garrison_fnc_garrisonModuleDialog * * Public: No */ // Parameters params ["_logic"]; _logicLocation = getPos _logic; diag_log format ["Spawning display with logic %1", _logicLocation]; // Create display createDialog "garrisonModuleDialog"; _display = findDisplay 99; // Set Variable _display setVariable ["_logicLocation", _logicLocation]; diag_log "Finished spawning display"; and my dialog is defined here: class garrisonModuleDialog { idd = 99; access = 0; movingEnable = false; enableSimulation = false; class ControlsBackground { class IGUIBack_2200: IGUIBack { idc = 2200; x = 0; y = 0.4; w = 1; h = 0.6; }; class RscStructuredText_1100: RscStructuredText { idc = 1100; text = "AI per building:"; //--- ToDo: Localize; x = 0.025; y = 0.68; w = 0.17; h = 0.05; }; class RscStructuredText_1101: RscStructuredText { idc = 1101; text = "Garrison Radius:"; //--- ToDo: Localize; x = 0.025; y = 0.44; w = 0.17; h = 0.05; }; class RscStructuredText_1102: RscStructuredText { idc = 1102; text = "0"; //--- ToDo: Localize; x = 0.1625; y = 0.68; w = 0.06; h = 0.05; }; class RscStructuredText_1103: RscStructuredText { idc = 1103; text = "0m"; //--- ToDo: Localize; x = 0.2; y = 0.44; w = 0.06; h = 0.05; }; }; class Controls { class RscButtonMenuOK_2600: RscButtonMenuOK { idc = 1234; x = 0.875; y = 0.88; w = 0.1; h = 0.1; onButtonClick = "[(findDisplay 99) getVariable ['_logicLocation', objNull], sliderPosition 1901, sliderPosition 1900] call xeen_fnc_garrisonModuleInit; (findDisplay 99) closeDisplay 1;" }; class RscButtonMenuCancel_2700: RscButtonMenuCancel { x = 0.75; y = 0.88; w = 0.1; h = 0.1; }; class RscSlider_1900: RscSlider { idc = 1900; x = 0.025; y = 0.74; w = 0.95; h = 0.1; type = 43; arrowEmpty = "\A3\ui_f\data\gui\cfg\slider\arrowEmpty_ca.paa"; arrowFull = "\A3\ui_f\data\gui\cfg\slider\arrowFull_ca.paa"; border = "\A3\ui_f\data\gui\cfg\slider\border_ca.paa"; thumb = "\A3\ui_f\data\gui\cfg\slider\thumb_ca.paa"; color[] = {1,1,1,0.5}; coloractive[] = {1,1,1,1}; sliderPosition = 0; sliderRange[] = {0,10}; sliderStep = 1; lineSize = 1; onSliderPosChanged="((findDisplay 99) displayCtrl 1102) ctrlSetStructuredText parseText str(sliderPosition 1900)" }; class RscSlider_1901: RscSlider { idc = 1901; x = 0.025; y = 0.5; w = 0.95; h = 0.1; type = 43; arrowEmpty = "\A3\ui_f\data\gui\cfg\slider\arrowEmpty_ca.paa"; arrowFull = "\A3\ui_f\data\gui\cfg\slider\arrowFull_ca.paa"; border = "\A3\ui_f\data\gui\cfg\slider\border_ca.paa"; thumb = "\A3\ui_f\data\gui\cfg\slider\thumb_ca.paa"; color[] = {1,1,1,0.5}; coloractive[] = {1,1,1,1}; sliderPosition = 5; sliderRange[] = {0,100}; sliderStep = 10; lineSize = 1; onSliderPosChanged="((findDisplay 99) displayCtrl 1103) ctrlSetStructuredText parseText str(sliderPosition 1901)" }; }; class Objects { }; }; Any thoughts? Full source code can be found at: https://github.com/Xeenenta/xeenenta-enhanced-battlefield if anyone wanted to go digging around.
  2. Reaper Crew are soon to embark on a new campaign called Operation Sabertooth: Campaign Overview Operation Sabertooth is an offensive counter insurgency campaign that is seeking to tackle an insurgent threat in northern Clafghan. Recent years have seen an escalation in conflict with a religious movement called the ‘Free Takistan Guerrillas’ by the Clafghan Armed Forces. The group has been using the mountainous areas as a staging post to launch attacks against the countries of Israel and Clafghan. You can find out more at: https://reapercrew.co.uk/operations-and-campaigns/operation-sabertooth/ Additionally, we have also released footage from one of our operations called Operation Sovereign where we were playing as Ukrainian Special Forces trying to halt a Russian offensive. You can see the footage below:
  3. Mission Statement Reaper crew is a professional ArmA 3 unit looking to balance quality gameplay with military style realism and tactics. A great deal of ArmA 3 units are based around a specific military organisations and, coupled with the desire for realism often comes with the added encumbrance of less than exceptional gameplay and tedious training sessions. Here at Reaper Crew, we aim to embody our mentality of 'prevail through professionalism', providing our members with a level of serious, professional and immersive gameplay without detracting from a simple fact. We're all here to have fun. We are based in the UK. Operations and Events Our regular main weekly event is every Saturday at 20:00 UK Time (GMT) Core Principles As a unit, we aspire to embody some core priciples that are the basis for our community: Be professional - At the core of everything we do is professionalism. We strive to create an environment that everyone can be proud of. Quality over quantity - We are far from the largest unit, and with this comes a requirement to perform at our maximum ability. Put the work in, and the experience is greatly enhanced for all Your input matters - Everyone's opinions are important. If you have something you feel you want to say. Say it! Give & take - We aim to be as accepting as possible of real life, plans change, emergencies happen. We don't seek to discipline or criticse those who cannot turn up every now and again. We encourage this give and take attitude to go both ways. Can't make the weekly event? No worries! Perhaps host something during the week for your fellow community members as a way of giving back! What are we looking for? If you would like to get involved, you must have meet the below criteria with no exceptions: Be aged 16+ Speak English to a good level Be willing to commit to regular events All new members will go through a very basic training course to ensure that the base level of tactics and procedures are understood, any additional training is usually acquired 'on the job'. How do I apply? Simply go to: https://reapercrew.co.uk/application-form/ and join the discord link provided!
×