Jump to content

Search the Community

Showing results for tags 'development'.



More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • BOHEMIA INTERACTIVE
    • BOHEMIA INTERACTIVE - NEWS
    • BOHEMIA INTERACTIVE - JOBS
    • BOHEMIA INTERACTIVE - GENERAL
  • FEATURED GAMES
    • ARMA 3
    • DAYZ
    • TAKE ON MARS
    • ARMA 2
    • ARGO
    • YLANDS
  • MOBILE GAMES
    • ARMA MOBILE OPS
    • MINIDAYZ
    • ARMA TACTICS
    • ARMA 2 FIRING RANGE
  • BI MILITARY GAMES FORUMS
  • BOHEMIA INCUBATOR
    • PROJECT LUCIE
  • OTHER BOHEMIA GAMES
    • TAKE ON HELICOPTERS
    • CARRIER COMMAND: GAEA MISSION
    • ARMA: ARMED ASSAULT / COMBAT OPERATIONS
    • ARMA: COLD WAR ASSAULT / OPERATION FLASHPOINT
    • IRON FRONT: LIBERATION 1944
    • BACK CATALOGUE
  • OFFTOPIC
    • OFFTOPIC
  • ArmA Toolmakers's Releases
  • ArmA Toolmakers's General
  • Die Hard OFP Lovers' Club's Topics
  • Japan in Arma's Topics

XBOX Live


PlayStation PSN


Origin


PlayFire


SoundCloud


Pinterest


Reddit


Twitch.Tv


Ustream.Tv


Duxter


Instagram


Location


Interests


Interests


Occupation

Found 26 results

  1. Sometimes it's useful to discuss updates to the Steam Development branch in one centralized place. Let's use this thread for that. The changelog thread can stay clean and do its thing. It mainly serves for our team to rapidly see if a daily update is very broken or very epic :ph34r: Actual issue reporting should still happen via the Feedback Tracker of course. Thank you!
  2. In this thread we'll try to describe updates happening in the Development branch of Arma 3. This changelog is not complete, nor confirmed to be working as advertised. Again, Development branch does not pass internal QA before publication. Stick with main branch if you do not want to deal with the (big) potential issues and frequent data transfers. Feel free to discuss the updates to this branch in the relevant thread. 12-03-2013 Cross-joining default and Development branch disabled in MP Ifrit config class names changed to O_Ifrit_F and similar Various artwork fixes and tweaks in materials, textures and passenger animations Active Development branch is now indicated in the main menu Showcase: Helicopters - little optimization and conversation timings Various other showcase fixes Multiple crash opportunities fixed First tests of shadow improvements
  3. Hi, there When it's possible/useful, we will try to post brief descriptions of recent AI changes done on the development branch. We hope this will help demonstrate the tweaks that we're making and generate useful feedback to help us validate and polish our work. For now, the first batch of notes to kick things off: It wasn't supposed to fix rotation speed of AI soldiers, but is letting them use "aiming deadzone" as specified in the unit config (minGunTurnAI, maxGunTurnAI) which is typically 60 degrees cone. Therefore currently AI should be able to follow targets better without moving whole body. RPG and NLAW are supposed to be unguided, but AI was still able to use them as guided weapons. This was corrected. Quite big change, now AI is able to calculate and predict accurate ballistic of bullet, therefore is able to aim and engage targets on all ranges, both static and moving. Also, this improves AI ability to hit moving targets by more precise time of leading calculation. Good way to check this change is try to fight AI sniper on 1km+ range. Of course it still depends on his skill. AI was considering animals as friendly, therefore denied to shot in theirs direction. Example: put yours character, enemy soldier and snake animal between you. After this fix AI won't bother with friendly fire against animals.
  4. Next to already revealed an known https://community.bistudio.com/wiki/Category:Arma_3:_New_Scripting_Commands_List There are more script commands now :) + fixed http://feedback.arma3.com/view.php?id=12324 + only discussion related to new or changed Arma 3 Beta/Dev Scripting allowed
  5. THERE IS ONLY WAR A Warhammer 40,000 mod for Arma 3. Warhammer 40,000 is a thrilling fantasy universe, one filled with deep stories, enormous conflicts, supremely evil characters, and an eternity of unending, soul-crushing war. It deserves a proper, massive, frontline experience that only a certain game can provide, and that game is Arma 3. "There is Only War" is a mod whose goal is a true representation of 40k in Arma. There will be a no-nonsense approach to creating this ultimate experience - Boltguns will blow targets away, Necrons will be nigh indestructible, Space Marines will stand heads taller than mortals, and one day, Battle Titans may stride over warzones, crushing and annihilating whole companies of troops with one volley of fire. This project will be true to the universe, and lore will be followed as closely as possible, confined only by game limitations, and in extreme cases, common sense. Now, this mod is not affiliated with the Warhammer 40k mod already on the Steam Workshop. While most of the devs on this team came from that project, and quite a few assets were given to us by that mod, we are not working with them, we are a separate mod. It is also important to state that we are not and will not be using any stolen assets, or assets from 40k video games, content will be made the old-fashioned way. "There is Only War" is currently in early development, and we have under a dozen developers at this time. We don't have a first release date yet, but it is certainly within a few months, and afterwards, we plan on monthly updates and patches! This mod is a very ambitious one, scores of animations must be done, hundreds of models completed and textured, and uncountable hitboxes and configs made, and we are looking for more developers to aid us in our endeavor, if you love this universe you'll find yourself at home with us. It's a tough job, but this task is not impossible to complete. Here is a short gallery of assets currently being worked on : There are many more assets in production, but all will be posted in time. Lastly, we do not own Warhammer 40k, all credit goes to the respective owners!
  6. ArmA.Studio Open-Source Community made IDE for ArmA (best works with profiling build) !PLEASE DISABLE BATTLE EYE DURING DEBUGGING SESSIONS! Downloads ArmA.Studio 0.1.6290.31151 setup.exe 0.1.6293.24366 setup.exe 0.2.6331.26237 setup.exe 0.2.6333.12157 setup.exe 0.2.6402.7223 setup.exe ArmaDebugEngine BIDebugEngine.dll build 28 x86 BIDebugEngine.dll build 28 x64 BIDebugEngine.dll build 34 x64 BIDebugEngine.dll build 45 x86 BIDebugEngine.dll build 45 x64 Installation Please refer to this wiki article https://github.com/ArmA-Studio/ArmA.Studio/wiki/Install-and-use-ArmA.Studio Links ArmA.Studio at GitHub ArmaDebugEngine at GitHub Discord Invite Important Informations The tool is provided with auto-update and auto-error-report. Both cannot be disabled as of now. We are actively seeking developers in the community! So if you capable of writing C# code, feel free to join this project :) How to test -@myMod --Addons <-- workspace is set here ---Tag_Mod ----$PBOPREFIX$ ----examplescript.sqf <-- set breakpoint in here ----config.cpp Hope you enjoy!
  7. In this thread we'll try to describe updates happening in the Development Branch of Arma 3 Tools. This changelog is not complete, nor confirmed to be working as advertised. Again, Development branch does not pass internal QA before publication. Stick with main branch if you do not want to deal with the (big) potential issues and frequent data transfers. Feel free to discuss the updates to this branch in the relevant thread. The changes are not going to be done daily like the Arma 3 development branch does, but rather in irregular intervals according to needs and additions by our team. 20-06-2014 Fixed: Broken Addon Builder UI Fixed: Copying of files to the target destination in Addon Builder Fixed: "External" feature of Tools Launcher was disabled by error
  8. Visual Studio Code SQF Language v1.0.4 Lastest update: 12.03.2016 Microsoft Visual Studio Code is a new, but already very known Code Editor. Works on Linux, OS X and Windows. Now in the Visual Studio Marketplace -> Report bugs, ask questions or make suggestions <- Supported Products: Operation Flashpoint [OFP], Operation Flashpoint: Resistance ArmA, ArmA 2, ArmA 3 (DLCs & Extensions included) Take On Helicopters [ToH] Community Based Addons [CBA], ACE Easy Installation (Recommended) Download Visual Studio Code. Open the Editor and click on the extension icon to your left ( ) Enter "SQF" and hit enter Select "SQF Language" and click on "Install" Enjoy Manual Installation Only use this guide if the installation over the extension manager and/or marketplace isn't working! Download VS Code Download the latest release from GitHub ( https://github.com/Armitxes/VSCode_SQF/releases ) Install Visual Studio Code Navigate to your VS Code extension Folder. Windows: %USERPROFILE%\.vscode\extensions Mac/Linux: $HOME/.vscode/extensions In the plugins folder, you create a folder called Armitxes.SQF, if you have it already delete all files inside! Inside the Armitxes.SQF folder you then unzip the sources you obtained from GitHub That's it, now simply (re-)start Visual Studio Code (or just "Code") and it's done :) With VS Code, every folder is a project! To open your SQF Project simply go on File->Open Folder and choose your mission/mod folder. Feel free to ask any questions, aswell the Code of the GitHub Project was now simplified several times by me and is open for everyone for contribution! Cheers, Armitxes
  9. We'd like to try using this thread to track clear updates about changes to the AI. But first, some all important disclaimers! Not all the changes made to the AI can be logged as and when they happen Sometimes the changes made by the programmers require other departments to update or pack their data Sometimes that's not always possible right away (i.e. changes to AI Costmaps for terrain, tweaking of new/refined values in configs) Sometimes the changes must be put on hold while we make sure/prevent them from entirely annihilating the rest of the game Sometimes the changes must be reverted because they destroy more than they heal. Sometimes our programmers have to work, rather than talk about working. We hope it helps shine some light on the ongoing refinements/fixes being made to the AI, and can help to frame/promote some useful feedback/discussion/understanding about the current state/future direction and progress. You can discuss the changes across in the AI Dev Branch Discussion thread. Best, RiE First set of notes follows: It wasn't supposed to fix rotation speed of AI soldiers, but is letting them use "aiming deadzone" as specified in the unit config (minGunTurnAI, maxGunTurnAI) which is typically 60 degrees cone. Therefore currently AI should be able to follow targets better without moving whole body. RPG and NLAW are supposed to be unguided, but AI was still able to use them as guided weapons. This was corrected. Quite big change, now AI is able to calculate and predict accurate ballistic of bullet, therefore is able to aim and engage targets on all ranges, both static and moving. Also, this improves AI ability to hit moving targets by more precise time of leading calculation. Good way to check this change is try to fight AI sniper on 1km+ range. Of course it still depends on his skill. AI was considering animals as friendly, therefore denied to shot in theirs direction. Example: put yours character, enemy soldier and snake animal between you. After this fix AI won't bother with friendly fire against animals. N.b. Sometimes I'll quote one one of our Programmer's comments, but reserve the right to make splendid editorial adjustments! :cool:
  10. WORK IN PROGRESS https://www.youtube.com/watch?v=K6LDXK1URr8 I've decided to openly release a very basic version of iBuild for testing. The main reason for this is to test the underlying foundations and iron out any kinks before I start piling new features and content on top. It's very basic and rough, but it has enough content to give you an idea of where it's heading. The mod has evolved from the first conceptual prototype I put together, and I've lost count the amount of times I've started over, so I hope you guys enjoy what I've settled with. I'm still in the process of writing most of the documentation, which I suck at doing, but you can find what has been written so far organised into a drop-down menu under 'iBuild'. More info can be found in the description on Steam. >| Download Pre-Alpha |< About time! ;)
  11. Looking for capable people to help begin setting up a Altis Life server on Arma 3. If you're interested please contact me by commenting below.
  12. ArmSTALKER Online – In development. This is a modification for ARMA III which turns it into S.T.A.L.K.E.R and feels like MMO-project, not just singleplayer. Now project is in development. ================»> Main features: • Full freedom in the opened world of Chernobyl Exclusion Zone. • Up to 7 different clans: the bandits, the free stalkers, the Duty, the Freedom, the Monolith and the Military.; • A lot of monsters, anomalies and artifacts; • Huge amount of real-life weapons and its customization; • EcomiÑ system, auctions and trading. • Realistic world with migrating mutants, traveling stalkers, fighting Clans and Emissions. • And much more: an opportunity to become a legend of The Zone, interesting quests, crafting, different features of artifacts, unique weapons, full realism, PVP and PVE zones and etc. OTHER SCREENSHOTS: MONSTERS: VIDEOS: ArmSTALKER Online - Death Zone TRAILER. ArmSTALKER Online - Opening Scene (soon EN version). ArmSTALKER Online - Main Menu. ArmSTALKER Online - Teaser changes on Arma 3 (First modification based on ArmA2). ArmSTALKER Online - Presentation controller. ArmSTALKER Online - More mutants (with bug sound :( ). ArmSTALKER Online - Tested mutant ArmSTALKER Online - Animation Bloodsucker ArmSTALKER Online - Laboratories We need modelers, programmers, animators and mapmakers. Follow us: FACEBOOK Twitter Vkontakte Mutants models do not already have a lot of bumps and polygons. We are working on it. Our planned map:
  13. First: all credits belong to Snake2200 the author of the big and excellent XAM1.06b-modifikation for ArmA1. you can download the hole addon for ArmA1 here: http://www.armaholic.com/page.php?id=1756 -this mod is not from me, it is only a part of the Xam1.06b-mod from Snake2200 -I have only edited the mod a little bit (logic,sound balancing)that it works with ArmA3. Thanks to kju for pushing me into the right direction and also to (Snake2200 wherever he is)! -This addon gives you: -excellent nature ambient-sounds -churchbells with different distances -different windsounds on hills ..etc. -mornigbirds (excellent for europe) -at night wulfs, owls ..beware ..sometimes scary ! -on the field sparrows, larks, robins..etc. -multiplayer not tested -no bi-signs included and i am not able to create some -first shot error included ! ...and not yet repairable for me Installation: -note: CBA is needed for this. 1.copy "@xam_environment.pbo" to your ArmA3 root directoy 2.edit your shortcut for ArmA3 or use a Launcher you like to start. ps:enjoy it or leave it... for me me its a musthave... at least the file http://www.file-upload.net/download-9091901/Xam.rar.html
  14. For our quickly growing company we are looking for candidates who are not afraid of challenges and can improve all aspects of online services within our company. Ideal candidate should have both managerial experience and technical knowledge. We are looking for candidates who are already successful in their current job. Ensure smooth running of Online Services department Oversee 6 people in Prague offices Setting up and implementation of Online Services strategy Responsibility for technical aspect of smooth running of company e-shop Requirements Proven experience with leading a team of 5 people or more. Proven experience with leading a team developing web/server applications High level knowledge of hardware/databases/networking/ and web/server applications Experience with negotiations with suppliers and users Matured personality with natural respect Analytical thinking English knowledge on communicative level Welcomed Skills 5 or more years of experience as a developer Experience with some database system Experience with some server side language Agile/Scrum experience Driving licence B – experience driver We Offer Chance to develop ”own” international Online Services department Possibility to work on unique project with worldwide scope Possibility of development in a dynamic company Interesting and creative work Competitive salary Benefit package (annual bonus, additional leave) If you would like to join, please send your CV at aneta.gillova@bistudio.com.
  15. Hello, Are you an experienced Character Art Leader willing to work with us in Brno, the capital of game development in central Europe? Then we want you! Your goal will be to lead a team of kick-ass character artists to create cool looking realistic next gen characters in Unreal Engine. We are looking for a mature, experienced, creative, versatile and self-directed individual with a keen eye for quality who has solid experience in creating 3D characters, apparel and accessories. Your portfolios should demonstrate proven ability to create high quality characters for games. RequirementsSpecialized in realistic visual style Proficient experience with MAX/Maya and Zbrush to create character models Skilled in high poly modelling Highly capable of creating 2D textures for models (Photoshop, Substance painter, etc) Good knowledge of human anatomy Familiar with effective polygon use, UV sets and mesh optimization Ability to self-manage and make responsible decisions about time and project priorities Ability to lead and mentor artists - be able to listen and to give feedback Welcomed SkillsExperience with UE4 Knowledge of character art specialties (hair, skin, clothes, etc.) Drawing/painting skills Knowledge of rigging and animating We OfferParticipate in a great project Friendly atmosphere in the mid-size multinational team of passionate developers Work with living Czech gamedev veterans and legends Work for the largest and most mature game development company in the Czech Republic Possibilities for skill-development and growth Competitive salary & benefits (semi-flexible hours, extra vacation, language courses etc.) Please contact us at jobs@bistudio.com.
  16. This project is temporarily on hold. Other projects popped up that take priority. I will return to this at some point this year :) What is Kingdom? Kingdom is an ArmA 3 grand-gamemode that can be played alone (SP), co-operatively (against AI) or player-versus-player with up to 60 players. The map/island is divided into various territories which can be captured and added to a kingdom. There can be up to three kingdoms, each lead by a King and his vassals. A kingdom can be maintained by a steady flow of supplies and wealth, which come from captured territories and trade. Each territory has its’ own pros and cons; it can be large and have lots of oil, but mountainous which makes it difficult to defend. The various Kings can set up alliances, such as trade alliances which will allow supply vehicles from one kingdom travel through the other without being stopped, which boosts the trade. Kings can also rival eachother; capture eachother’s territories and declare war upon eachother, which could cause for some very interesting diplomatic situations (for example: Kings A and B can be at war with eachother, leaving King C with a choice whether to ally himself with one of the other Kings, stay neutral or declare war on both of the other Kings(thus making it a free-for-all). A King can develop his kingdom by building military bases, factories, fortifications, all done using a custom Zeus-like "Hades" interface. Building military bases will increase the amount of (AI) soldiers a Kingdom can have enlisted. Factories will increase the vehicular capabilities of a Kingdom and fortifications aid in the defense of each territory. Unless the gamemode is played with > 30 players, the main fighting force of each kingdom will likely be AI forces. These forces play a huge role in the defense and capture of territories. Each Kingdom has their own vassals, which are players with privileges. For example, they can recruit an AI squad or request vehicle support. Additionally, they can aid the King in leading the territories. But ofcourse, they can also move on their own and fight the enemy. In multiplayer, the King is selected out of one of the vassals, either by random chance or by vote. The King has the ability to abdicate and point a new vassal as King. Within the gamemode, there can be various sub-modes such as: Territory Control - The first kingdom to capture a pre-designated amount of territories, wins. Conquest - The last kingdom (alliance) to stay alive, wins. Regicide - No respawns/abdication/heritance for Kings -> The last King breathing, wins. And more sub-modes can be thought of, later on. Inspiration For my ideas I’ve been somewhat inspired by the RTS ‘Empire Earth 2’, however I think that because this is ArmA, a 1st/3rd person game, it can be a quite new, unique experience. Additionally, some ideas are similar to ArmA 2’s Warfare gamemode. Development Roadmap Q1 2016 - Alpha version, tested internally with my group; Phantom Incorporated Q1-Q2 2016 - Beta version, first RC released to the public, receiving feedback (hopefully) Q2 2016 - Active development with updates dependent on feedback The Release Candidate-version will likely contain instructions for server admins & mission makers to customize the mission to their own preference. You will be able to change the units, vehicles, territories and even the island it’s played upon. Why? I find the development process of this gamemode a lot of fun as I enjoy coding, but also livestreaming and teaching people, so do feel free to hop in and ask some questions. At the time of writing this, I’ve been livestreaming the development for 8 days, you can watch the development & contribute ideas/support on my Twitch channel: phonicgameshd I don’t know what people will think of this gamemode, but even if the gamemode ends up not being popular at all, I'll feel like the development process has been worth it. Media Final words Now, the terms of this gamemode are deliberately based on the 15-16th century. It is part of the charm. However, there will be no swords & bows in this gamemode: instead ArmA 3 vanilla & (optional) modded military-equipment will be used. Any feedback is much appreciated! Have a nice day. Kind regards, Sanchez
  17. Hello all Small and short bugreport; In dev build no. 1.59.135857 some of the single player campaign are missing. there isn't anymore the list/sections with "Survive", "Adapt" and "Win". its finished somewhere in the middle of the 2nd episode. pls fix it, i would like to continue the campaign ;-)
  18. Fellow members, I am working on a tweaked realism version of the beautiful mod GWAR3 made by GossamerSolid. I noticed after patch 1.54 the attachment purchasing is broken. I am still investigating this issue but maybe someone here more experienced can point me to the right direction. Sorry for the long ass code but I want to avoid giving too few info. The attachment part is processed in line 502. Thank you for your time. disableSerialization; _display = _this select 0; //Block UI for network call _netBlockBGCTRL = _display displayCtrl 1110; _netBlockBGCTRL ctrlShow true; _netBlockTextCTRL = _display displayCtrl 1111; _netBlockTextCTRL ctrlShow true; //Vars GW_PUREQUIP_CHANGEDCATEGORY = false; GW_PUREQUIP_PRIMARYLISTCHANGED = false; GW_PUREQUIP_CONTAINERCHANGED = false; GW_PUREQUIP_PURCHASEEQUIPMENT = false; GW_PUREQUIP_REDRAWINV = false; GW_PUREQUIP_RECALC_TOTAL = false; GW_PUREQUIP_RECALC_MASS = false; GW_PUREQUIP_LOADTEMPLATE = false; GW_PUREQUIP_GETTEMPLATES = false; GW_PUREQUIP_UPDATETEMPLATE = false; GW_PUREQUIP_DELETETEMPLATE = false; GW_PUREQUIP_SAVENEWTEMPLATE = false; GW_PUREQUIP_CONTAINERSEL = -1; GW_PUREQUIP_TOTALCOST = 0; GW_PUREQUIP_MAINLIST = []; GW_PUREQUIP_SECONDLIST = []; GW_PUREQUIP_ATTACHLIST = []; GW_PUREQUIP_CURRENTTEMPLATE = []; GW_PUREQUIP_TYPE_ITEM = 131072; GW_PUREQUIP_UNIFORM_CURR = 0; GW_PUREQUIP_UNIFORM_MAX = 0; GW_PUREQUIP_VEST_CURR = 0; GW_PUREQUIP_VEST_MAX = 0; GW_PUREQUIP_BACKPACK_CURR = 0; GW_PUREQUIP_BACKPACK_MAX = 0; //Redraw template inventory fnc_purequip_redrawInventory = { private["_parentDisplay"]; disableSerialization; _parentDisplay = _this select 0; _uniformCTRL = _parentDisplay displayCtrl 1200; _vestCTRL = _parentDisplay displayCtrl 1201; _backpackCTRL = _parentDisplay displayCtrl 1202; _headgearCTRL = _parentDisplay displayCtrl 1203; _faceCTRL = _parentDisplay displayCtrl 1204; _nvgCTRL = _parentDisplay displayCtrl 1205; _binocsCTRL = _parentDisplay displayCtrl 1206; _mapCTRL = _parentDisplay displayCtrl 1222; _gpsCTRL = _parentDisplay displayCtrl 1223; _radioCTRL = _parentDisplay displayCtrl 1224; _compassCTRL = _parentDisplay displayCtrl 1225; _watchCTRL = _parentDisplay displayCtrl 1226; _primaryCTRL = _parentDisplay displayCtrl 1207; _primaryMuzCTRL = _parentDisplay displayCtrl 1210; _primarySideCTRL = _parentDisplay displayCtrl 1211; _primaryTopCTRL = _parentDisplay displayCtrl 1208; _primaryBipodCTRL = _parentDisplay displayCtrl 1209; _secondaryCTRL = _parentDisplay displayCtrl 1212; _secondaryMuzCTRL = _parentDisplay displayCtrl 1213; _secondarySideCTRL = _parentDisplay displayCtrl 1214; _secondaryTopCTRL = _parentDisplay displayCtrl 1215; _secondaryBipodCTRL = _parentDisplay displayCtrl 1216; _handgunCTRL = _parentDisplay displayCtrl 1217; _handgunMuzCTRL = _parentDisplay displayCtrl 1218; _handgunSideCTRL = _parentDisplay displayCtrl 1219; _handgunTopCTRL = _parentDisplay displayCtrl 1220; _handgunBipodCTRL = _parentDisplay displayCtrl 1221; _removeUniformCTRL = _parentDisplay displayCtrl 1606; _removeVestCTRL = _parentDisplay displayCtrl 1607; _removeBackpackCTRL = _parentDisplay displayCtrl 1608; //Uniform _uniformPic = "\A3\ui_f\data\gui\Rsc\RscDisplayGear\ui_gear_uniform_gs.paa"; _uniformTT = "No Uniform"; _uniformClass = (GW_PUREQUIP_CURRENTTEMPLATE select 4) select 0; if (_uniformClass != "") then { _uniformPic = getText (configFile >> "CfgWeapons" >> _uniformClass >> "Picture"); _uniformTT = getText (configFile >> "CfgWeapons" >> _uniformClass >> "DisplayName"); _itemIndex = [_uniformClass, 0, GW_EQUIP_UNIFORMS] Call fnc_shr_arrayGetIndex; if (_itemIndex != -1) then {_uniformTT = _uniformTT + format[" - $%1",(GW_EQUIP_UNIFORMS select _itemIndex) select 1]}; _removeUniformCTRL ctrlShow true; } else {_removeUniformCTRL ctrlShow false}; _uniformCTRL ctrlSetText _uniformPic; _uniformCTRL ctrlSetTooltip _uniformTT; //Vest _vestPic = "\A3\ui_f\data\gui\Rsc\RscDisplayGear\ui_gear_vest_gs.paa"; _vestTT = "No Vest"; _vestClass = (GW_PUREQUIP_CURRENTTEMPLATE select 5) select 0; if (_vestClass != "") then { _vestPic = getText (configFile >> "CfgWeapons" >> _vestClass >> "Picture"); _vestTT = getText (configFile >> "CfgWeapons" >> _vestClass >> "DisplayName"); _itemIndex = [_vestClass, 0, GW_EQUIP_VESTS] Call fnc_shr_arrayGetIndex; if (_itemIndex != -1) then {_vestTT = _vestTT + format[" - $%1",(GW_EQUIP_VESTS select _itemIndex) select 1]}; _removeVestCTRL ctrlShow true; } else {_removeVestCTRL ctrlShow false}; _vestCTRL ctrlSetText _vestPic; _vestCTRL ctrlSetTooltip _vestTT; //Backpack _backpackPic = "\A3\ui_f\data\gui\Rsc\RscDisplayGear\ui_gear_backpack_gs.paa"; _backpackTT = "No Backpack"; _backClass = (GW_PUREQUIP_CURRENTTEMPLATE select 6) select 0; if (_backClass != "") then { _backpackPic = getText (configFile >> "CfgVehicles" >> _backClass >> "Picture"); _backpackTT = getText (configFile >> "CfgVehicles" >> _backClass >> "DisplayName"); _itemIndex = [_backClass, 0, GW_EQUIP_BACKPACKS] Call fnc_shr_arrayGetIndex; if (_itemIndex != -1) then {_backpackTT = _backpackTT + format[" - $%1",(GW_EQUIP_BACKPACKS select _itemIndex) select 1]}; _removeBackpackCTRL ctrlShow true; } else {_removeBackpackCTRL ctrlShow false}; _backpackCTRL ctrlSetText _backpackPic; _backpackCTRL ctrlSetTooltip _backpackTT; //Headgear _headgearPic = "\A3\ui_f\data\gui\Rsc\RscDisplayGear\ui_gear_helmet_gs.paa"; _headgearTT = "No Headgear"; _headClass = GW_PUREQUIP_CURRENTTEMPLATE select 0; if (_headClass != "") then { _headgearPic = getText (configFile >> "CfgWeapons" >> _headClass >> "Picture"); _headgearTT = getText (configFile >> "CfgWeapons" >> _headClass >> "DisplayName"); _itemIndex = [_headClass, 0, GW_EQUIP_HEADGEAR] Call fnc_shr_arrayGetIndex; if (_itemIndex != -1) then {_headgearTT = _headgearTT + format[" - $%1",(GW_EQUIP_HEADGEAR select _itemIndex) select 1]}; }; _headgearCTRL ctrlSetText _headgearPic; _headgearCTRL ctrlSetTooltip _headgearTT; //Facewear _facePic = "\A3\ui_f\data\gui\Rsc\RscDisplayGear\ui_gear_glasses_gs.paa"; _faceTT = "No Facewear"; _faceClass = GW_PUREQUIP_CURRENTTEMPLATE select 1; if (_faceClass != "") then { _facePic = getText (configFile >> "CfgGlasses" >> _faceClass >> "Picture"); _faceTT = getText (configFile >> "CfgGlasses" >> _faceClass >> "DisplayName"); _itemIndex = [_faceClass, 0, GW_EQUIP_FACEWEAR] Call fnc_shr_arrayGetIndex; if (_itemIndex != -1) then {_faceTT = _faceTT + format[" - $%1",(GW_EQUIP_FACEWEAR select _itemIndex) select 1]}; }; _faceCTRL ctrlSetText _facePic; _faceCTRL ctrlSetTooltip _faceTT; //NVG _nvgPic = "\A3\ui_f\data\gui\Rsc\RscDisplayGear\ui_gear_nvg_gs.paa"; _nvgTT = "No Head Mounted Display"; _nvgClass = GW_PUREQUIP_CURRENTTEMPLATE select 3; if (_nvgClass != "") then { _nvgPic = getText (configFile >> "CfgWeapons" >> _nvgClass >> "Picture"); _nvgTT = getText (configFile >> "CfgWeapons" >> _nvgClass >> "DisplayName"); _itemIndex = [_nvgClass, 0, GW_EQUIP_OTHERS] Call fnc_shr_arrayGetIndex; if (_itemIndex != -1) then {_nvgTT = _nvgTT + format[" - $%1",(GW_EQUIP_OTHERS select _itemIndex) select 1]}; }; _nvgCTRL ctrlSetText _nvgPic; _nvgCTRL ctrlSetTooltip _nvgTT; //Binoculars _binocsPic = "\A3\ui_f\data\gui\Rsc\RscDisplayGear\ui_gear_binocular_gs.paa"; _binocsTT = "No Binocular"; _binocClass = GW_PUREQUIP_CURRENTTEMPLATE select 2; if (_binocClass != "") then { _binocsPic = getText (configFile >> "CfgWeapons" >> _binocClass >> "Picture"); _binocsTT = getText (configFile >> "CfgWeapons" >> _binocClass >> "DisplayName"); _itemIndex = [_binocClass, 0, GW_EQUIP_OTHERS] Call fnc_shr_arrayGetIndex; if (_itemIndex != -1) then {_binocsTT = _binocsTT + format[" - $%1",(GW_EQUIP_OTHERS select _itemIndex) select 1]}; }; _binocsCTRL ctrlSetText _binocsPic; _binocsCTRL ctrlSetTooltip _binocsTT; //Map _mapPic = "\A3\ui_f\data\gui\Rsc\RscDisplayGear\ui_gear_map_gs.paa"; _mapTT = "No Map"; _mapClass = (GW_PUREQUIP_CURRENTTEMPLATE select 10) select 2; if (_mapClass != "") then { _mapPic = getText (configFile >> "CfgWeapons" >> _mapClass >> "Picture"); _mapTT = getText (configFile >> "CfgWeapons" >> _mapClass >> "DisplayName"); _itemIndex = [_mapClass, 0, GW_EQUIP_OTHERS] Call fnc_shr_arrayGetIndex; if (_itemIndex != -1) then {_mapTT = _mapTT + format[" - $%1",(GW_EQUIP_OTHERS select _itemIndex) select 1]}; }; _mapCTRL ctrlSetText _mapPic; _mapCTRL ctrlSetTooltip _mapTT; //GPS _gpsPic = "\A3\ui_f\data\gui\Rsc\RscDisplayGear\ui_gear_gps_gs.paa"; _gpsTT = "No GPS"; _gpsClass = (GW_PUREQUIP_CURRENTTEMPLATE select 10) select 1; if (_gpsClass != "") then { _gpsPic = getText (configFile >> "CfgWeapons" >> _gpsClass >> "Picture"); _gpsTT = getText (configFile >> "CfgWeapons" >> _gpsClass >> "DisplayName"); _itemIndex = [_gpsClass, 0, GW_EQUIP_OTHERS] Call fnc_shr_arrayGetIndex; if (_itemIndex != -1) then {_gpsTT = _gpsTT + format[" - $%1",(GW_EQUIP_OTHERS select _itemIndex) select 1]}; }; _gpsCTRL ctrlSetText _gpsPic; _gpsCTRL ctrlSetTooltip _gpsTT; //Radio _radioPic = "\A3\ui_f\data\gui\Rsc\RscDisplayGear\ui_gear_radio_gs.paa"; _radioTT = "No Radio"; _radioClass = (GW_PUREQUIP_CURRENTTEMPLATE select 10) select 3; if (_radioClass != "") then { _radioPic = getText (configFile >> "CfgWeapons" >> _radioClass >> "Picture"); _radioTT = getText (configFile >> "CfgWeapons" >> _radioClass >> "DisplayName"); _itemIndex = [_radioClass, 0, GW_EQUIP_OTHERS] Call fnc_shr_arrayGetIndex; if (_itemIndex != -1) then {_radioTT = _radioTT + format[" - $%1",(GW_EQUIP_OTHERS select _itemIndex) select 1]}; }; _radioCTRL ctrlSetText _radioPic; _radioCTRL ctrlSetTooltip _radioTT; //Compass _compassPic = "\A3\ui_f\data\gui\Rsc\RscDisplayGear\ui_gear_compass_gs.paa"; _compassTT = "No Compass"; _compassClass = (GW_PUREQUIP_CURRENTTEMPLATE select 10) select 0; if (_compassClass != "") then { _compassPic = getText (configFile >> "CfgWeapons" >> _compassClass >> "Picture"); _compassTT = getText (configFile >> "CfgWeapons" >> _compassClass >> "DisplayName"); _itemIndex = [_compassClass, 0, GW_EQUIP_OTHERS] Call fnc_shr_arrayGetIndex; if (_itemIndex != -1) then {_compassTT = _compassTT + format[" - $%1",(GW_EQUIP_OTHERS select _itemIndex) select 1]}; }; _compassCTRL ctrlSetText _compassPic; _compassCTRL ctrlSetTooltip _compassTT; //Watch _watchPic = "\A3\ui_f\data\gui\Rsc\RscDisplayGear\ui_gear_watch_gs.paa"; _watchTT = "No Watch"; _watchClass = (GW_PUREQUIP_CURRENTTEMPLATE select 10) select 4; if (_watchClass != "") then { _watchPic = getText (configFile >> "CfgWeapons" >> _watchClass >> "Picture"); _watchTT = getText (configFile >> "CfgWeapons" >> _watchClass >> "DisplayName"); _itemIndex = [_watchClass, 0, GW_EQUIP_OTHERS] Call fnc_shr_arrayGetIndex; if (_itemIndex != -1) then {_watchTT = _watchTT + format[" - $%1",(GW_EQUIP_OTHERS select _itemIndex) select 1]}; }; _watchCTRL ctrlSetText _watchPic; _watchCTRL ctrlSetTooltip _watchTT; //Primary Weapon _primaryPic = "\A3\ui_f\data\gui\Rsc\RscDisplayGear\ui_gear_primary_gs.paa"; _primaryTT = "No Primary Weapon"; _primaryMuzPic = "\A3\ui_f\data\gui\Rsc\RscDisplayGear\ui_gear_muzzle_gs.paa"; _primaryMuzTT = "No Muzzle Attachment"; _primarySidePic = "\A3\ui_f\data\gui\Rsc\RscDisplayGear\ui_gear_side_gs.paa"; _primarySideTT = "No Side Attachment"; _primaryTopPic = "\A3\ui_f\data\gui\Rsc\RscDisplayGear\ui_gear_top_gs.paa"; _primaryTopTT = "No Optic Attachment"; _primaryBipodPic = "\A3\ui_f\data\gui\Rsc\RscDisplayGear\ui_gear_bipod_gs.paa"; _primaryBipodTT = "No Bipod Attachment"; _primaryClass = (GW_PUREQUIP_CURRENTTEMPLATE select 7) select 0; if (_primaryClass != "") then { _primaryPic = getText (configFile >> "CfgWeapons" >> _primaryClass >> "Picture"); _primaryTT = getText (configFile >> "CfgWeapons" >> _primaryClass >> "DisplayName"); _itemIndex = [_primaryClass, 0, GW_EQUIP_WEAP_PRIMARY] Call fnc_shr_arrayGetIndex; if (_itemIndex != -1) then {_primaryTT = _primaryTT + format[" - $%1",(GW_EQUIP_WEAP_PRIMARY select _itemIndex) select 1]}; _primaryAttach = (GW_PUREQUIP_CURRENTTEMPLATE select 7) select 1; if (_primaryAttach select 0 != "") then { _primaryMuzPic = getText (configFile >> "CfgWeapons" >> (_primaryAttach select 0) >> "Picture"); _primaryMuzTT = getText (configFile >> "CfgWeapons" >> (_primaryAttach select 0) >> "DisplayName"); _itemIndex = [(_primaryAttach select 0), 0, GW_EQUIP_ATTACHMENTS] Call fnc_shr_arrayGetIndex; if (_itemIndex != -1) then {_primaryMuzTT = _primaryMuzTT + format[" - $%1",(GW_EQUIP_ATTACHMENTS select _itemIndex) select 1]}; }; if (_primaryAttach select 1 != "") then { _primarySidePic = getText (configFile >> "CfgWeapons" >> (_primaryAttach select 1) >> "Picture"); _primarySideTT = getText (configFile >> "CfgWeapons" >> (_primaryAttach select 1) >> "DisplayName"); _itemIndex = [(_primaryAttach select 1), 0, GW_EQUIP_ATTACHMENTS] Call fnc_shr_arrayGetIndex; if (_itemIndex != -1) then {_primarySideTT = _primarySideTT + format[" - $%1",(GW_EQUIP_ATTACHMENTS select _itemIndex) select 1]}; }; if (_primaryAttach select 2 != "") then { _primaryTopPic = getText (configFile >> "CfgWeapons" >> (_primaryAttach select 2) >> "Picture"); _primaryTopTT = getText (configFile >> "CfgWeapons" >> (_primaryAttach select 2) >> "DisplayName"); _itemIndex = [(_primaryAttach select 2), 0, GW_EQUIP_ATTACHMENTS] Call fnc_shr_arrayGetIndex; if (_itemIndex != -1) then {_primaryTopTT = _primaryTopTT + format[" - $%1",(GW_EQUIP_ATTACHMENTS select _itemIndex) select 1]}; }; if ((_primaryAttach select 3) != "") then { _primaryBipodPic = getText (configFile >> "CfgWeapons" >> (_primaryAttach select 3) >> "Picture"); _primaryBipodTT = getText (configFile >> "CfgWeapons" >> (_primaryAttach select 3) >> "DisplayName"); _itemIndex = [(_primaryAttach select 3), 0, GW_EQUIP_ATTACHMENTS] Call fnc_shr_arrayGetIndex; if (_itemIndex != -1) then {_primaryBipodTT = _primaryBipodTT + format[" - $%1",(GW_EQUIP_ATTACHMENTS select _itemIndex) select 1]}; }; }; _primaryCTRL ctrlSetText _primaryPic; _primaryCTRL ctrlSetTooltip _primaryTT; _primaryMuzCTRL ctrlSetText _primaryMuzPic; _primaryMuzCTRL ctrlSetTooltip _primaryMuzTT; _primarySideCTRL ctrlSetText _primarySidePic; _primarySideCTRL ctrlSetTooltip _primarySideTT; _primaryTopCTRL ctrlSetText _primaryTopPic; _primaryTopCTRL ctrlSetTooltip _primaryTopTT; _primaryBipodCTRL ctrlSetText _primaryBipodPic; _primaryBipodCTRL ctrlSetTooltip _primaryBipodTT; //Secondary Weapon _secondaryPic = "\A3\ui_f\data\gui\Rsc\RscDisplayGear\ui_gear_secondary_gs.paa"; _secondaryTT = "No Secondary Weapon"; _secondaryMuzPic = "\A3\ui_f\data\gui\Rsc\RscDisplayGear\ui_gear_muzzle_gs.paa"; _secondaryMuzTT = "No Muzzle Attachment"; _secondarySidePic = "\A3\ui_f\data\gui\Rsc\RscDisplayGear\ui_gear_side_gs.paa"; _secondarySideTT = "No Side Attachment"; _secondaryTopPic = "\A3\ui_f\data\gui\Rsc\RscDisplayGear\ui_gear_top_gs.paa"; _secondaryTopTT = "No Optic Attachment"; _secondaryBipodPic = "\A3\ui_f\data\gui\Rsc\RscDisplayGear\ui_gear_bipod_gs.paa"; _secondaryBipodTT = "No Bipod Attachment"; _secondaryClass = (GW_PUREQUIP_CURRENTTEMPLATE select 8) select 0; if (_secondaryClass != "") then { _secondaryPic = getText (configFile >> "CfgWeapons" >> _secondaryClass >> "Picture"); _secondaryTT = getText (configFile >> "CfgWeapons" >> _secondaryClass >> "DisplayName"); _itemIndex = [_secondaryClass, 0, GW_EQUIP_WEAP_SECONDARY] Call fnc_shr_arrayGetIndex; if (_itemIndex != -1) then {_secondaryTT = _secondaryTT + format[" - $%1",(GW_EQUIP_WEAP_SECONDARY select _itemIndex) select 1]}; _secondaryAttach = (GW_PUREQUIP_CURRENTTEMPLATE select 8) select 1; if ((_secondaryAttach select 0) != "") then { _secondaryMuzPic = getText (configFile >> "CfgWeapons" >> (_secondaryAttach select 0) >> "Picture"); _secondaryMuzTT = getText (configFile >> "CfgWeapons" >> (_secondaryAttach select 0) >> "DisplayName"); _itemIndex = [(_secondaryAttach select 0), 0, GW_EQUIP_ATTACHMENTS] Call fnc_shr_arrayGetIndex; if (_itemIndex != -1) then {_secondaryMuzTT = _secondaryMuzTT + format[" - $%1",(GW_EQUIP_ATTACHMENTS select _itemIndex) select 1]}; }; if ((_secondaryAttach select 1) != "") then { _secondarySidePic = getText (configFile >> "CfgWeapons" >> (_secondaryAttach select 1) >> "Picture"); _secondarySideTT = getText (configFile >> "CfgWeapons" >> (_secondaryAttach select 1) >> "DisplayName"); _itemIndex = [(_secondaryAttach select 1), 0, GW_EQUIP_ATTACHMENTS] Call fnc_shr_arrayGetIndex; if (_itemIndex != -1) then {_secondarySideTT = _secondarySideTT + format[" - $%1",(GW_EQUIP_ATTACHMENTS select _itemIndex) select 1]}; }; if ((_secondaryAttach select 2) != "") then { _secondaryTopPic = getText (configFile >> "CfgWeapons" >> (_secondaryAttach select 2) >> "Picture"); _secondaryTopTT = getText (configFile >> "CfgWeapons" >> (_secondaryAttach select 2) >> "DisplayName"); _itemIndex = [(_secondaryAttach select 2), 0, GW_EQUIP_ATTACHMENTS] Call fnc_shr_arrayGetIndex; if (_itemIndex != -1) then {_secondaryTopTT = _secondaryTopTT + format[" - $%1",(GW_EQUIP_ATTACHMENTS select _itemIndex) select 1]}; }; if ((_secondaryAttach select 3) != "") then { _secondaryBipodPic = getText (configFile >> "CfgWeapons" >> (_secondaryAttach select 3) >> "Picture"); _secondaryBipodTT = getText (configFile >> "CfgWeapons" >> (_secondaryAttach select 3) >> "DisplayName"); _itemIndex = [(_secondaryAttach select 3), 0, GW_EQUIP_ATTACHMENTS] Call fnc_shr_arrayGetIndex; if (_itemIndex != -1) then {_secondaryBipodTT = _secondaryBipodTT + format[" - $%1",(GW_EQUIP_ATTACHMENTS select _itemIndex) select 1]}; }; }; _secondaryCTRL ctrlSetText _secondaryPic; _secondaryCTRL ctrlSetTooltip _secondaryTT; _secondaryMuzCTRL ctrlSetText _secondaryMuzPic; _secondaryMuzCTRL ctrlSetTooltip _secondaryMuzTT; _secondarySideCTRL ctrlSetText _secondarySidePic; _secondarySideCTRL ctrlSetTooltip _secondarySideTT; _secondaryTopCTRL ctrlSetText _secondaryTopPic; _secondaryTopCTRL ctrlSetTooltip _secondaryTopTT; _secondaryBipodCTRL ctrlSetText _secondaryBipodPic; _secondaryBipodCTRL ctrlSetTooltip _secondaryBipodTT; //Handgun _handgunPic = "\A3\ui_f\data\gui\Rsc\RscDisplayGear\ui_gear_hgun_gs.paa"; _handgunTT = "No Handgun"; _handgunMuzPic = "\A3\ui_f\data\gui\Rsc\RscDisplayGear\ui_gear_muzzle_gs.paa"; _handgunMuzTT = "No Muzzle Attachment"; _handgunSidePic = "\A3\ui_f\data\gui\Rsc\RscDisplayGear\ui_gear_side_gs.paa"; _handgunSideTT = "No Side Attachment"; _handgunTopPic = "\A3\ui_f\data\gui\Rsc\RscDisplayGear\ui_gear_top_gs.paa"; _handgunTopTT = "No Optic Attachment"; _handgunBipodPic = "\A3\ui_f\data\gui\Rsc\RscDisplayGear\ui_gear_bipod_gs.paa"; _handgunBipodTT = "No Bipod Attachment"; _handgunClass = (GW_PUREQUIP_CURRENTTEMPLATE select 9) select 0; if (_handgunClass != "") then { _handgunPic = getText (configFile >> "CfgWeapons" >> _handgunClass >> "Picture"); _handgunTT = getText (configFile >> "CfgWeapons" >> _handgunClass >> "DisplayName"); _itemIndex = [_handgunClass, 0, GW_EQUIP_WEAP_SIDEARM] Call fnc_shr_arrayGetIndex; if (_itemIndex != -1) then {_handgunTT = _handgunTT + format[" - $%1",(GW_EQUIP_WEAP_SIDEARM select _itemIndex) select 1]}; _handgunAttach = (GW_PUREQUIP_CURRENTTEMPLATE select 9) select 1; if ((_handgunAttach select 0) != "") then { _handgunMuzPic = getText (configFile >> "CfgWeapons" >> (_handgunAttach select 0) >> "Picture"); _handgunMuzTT = getText (configFile >> "CfgWeapons" >> (_handgunAttach select 0) >> "DisplayName"); _itemIndex = [(_handgunAttach select 0), 0, GW_EQUIP_ATTACHMENTS] Call fnc_shr_arrayGetIndex; if (_itemIndex != -1) then {_handgunMuzTT = _handgunMuzTT + format[" - $%1",(GW_EQUIP_ATTACHMENTS select _itemIndex) select 1]}; }; if ((_handgunAttach select 1) != "") then { _handgunSidePic = getText (configFile >> "CfgWeapons" >> (_handgunAttach select 1) >> "Picture"); _handgunSideTT = getText (configFile >> "CfgWeapons" >> (_handgunAttach select 1) >> "DisplayName"); _itemIndex = [(_handgunAttach select 1), 0, GW_EQUIP_ATTACHMENTS] Call fnc_shr_arrayGetIndex; if (_itemIndex != -1) then {_handgunSideTT = _handgunSideTT + format[" - $%1",(GW_EQUIP_ATTACHMENTS select _itemIndex) select 1]}; }; if ((_handgunAttach select 2) != "") then { _handgunTopPic = getText (configFile >> "CfgWeapons" >> (_handgunAttach select 2) >> "Picture"); _handgunTopTT = getText (configFile >> "CfgWeapons" >> (_handgunAttach select 2) >> "DisplayName"); _itemIndex = [(_handgunAttach select 2), 0, GW_EQUIP_ATTACHMENTS] Call fnc_shr_arrayGetIndex; if (_itemIndex != -1) then {_handgunTopTT = _handgunTopTT + format[" - $%1",(GW_EQUIP_ATTACHMENTS select _itemIndex) select 1]}; }; if ((_handgunAttach select 3) != "") then { _handgunBipodPic = getText (configFile >> "CfgWeapons" >> (_handgunAttach select 3) >> "Picture"); _handgunBipodTT = getText (configFile >> "CfgWeapons" >> (_handgunAttach select 3) >> "DisplayName"); _itemIndex = [(_handgunAttach select 3), 0, GW_EQUIP_ATTACHMENTS] Call fnc_shr_arrayGetIndex; if (_itemIndex != -1) then {_handgunBipodTT = _handgunBipodTT + format[" - $%1",(GW_EQUIP_ATTACHMENTS select _itemIndex) select 1]}; }; }; _handgunCTRL ctrlSetText _handgunPic; _handgunCTRL ctrlSetTooltip _handgunTT; _handgunMuzCTRL ctrlSetText _handgunMuzPic; _handgunMuzCTRL ctrlSetTooltip _handgunMuzTT; _handgunSideCTRL ctrlSetText _handgunSidePic; _handgunSideCTRL ctrlSetTooltip _handgunSideTT; _handgunTopCTRL ctrlSetText _handgunTopPic; _handgunTopCTRL ctrlSetTooltip _handgunTopTT; _handgunBipodCTRL ctrlSetText _handgunBipodPic; _handgunBipodCTRL ctrlSetTooltip _handgunBipodTT; }; //Populate list depending on category selected fnc_purequip_populateGearList = { private["_categoryIndex","_parentDisp","_equipPopulateNetCall","_equipPopulateNetCall"]; disableSerialization; _categoryIndex = _this select 0; _parentDisp = _this select 1; //Clear lists lbClear 1500; lbClear 1501; lbClear 1505; GW_PUREQUIP_SECONDLIST = []; GW_PUREQUIP_ATTACHLIST = []; //What array should we work with GW_PUREQUIP_MAINLIST = Call Compile Format["GW_PUREQUIP_%1",lbData[2100, _categoryIndex]]; //Populate the main list { lbAdd [1500, format["$%1 - %2",_x select 1,(getText (configFile >> (_x select 3) >> (_x select 0) >> "DisplayName"))]]; lbSetPicture [1500, _forEachIndex, (getText (configFile >> (_x select 3) >> (_x select 0) >> "Picture"))]; lbSetData [1500, _forEachIndex, (_x select 0)]; } forEach GW_PUREQUIP_MAINLIST; if ((count GW_PUREQUIP_MAINLIST) > 0) then {lbSetCurSel [1500, 0]}; //If a primary entry is selected, attempt to populate related magazines if ((lbCurSel 1500) > -1) then {GW_PUREQUIP_PRIMARYLISTCHANGED = true}; }; //Populate the magazine list depending on what weapon is selected fnc_purequip_populateMagazineList = { private["_currentSelectedPrimary","_weapClassname","_configMagsArray"]; _currentSelectedPrimary = _this select 0; //Clear list lbClear 1501; //Figure out what classname of weapon is selected in the main list _weapClassname = (GW_PUREQUIP_MAINLIST select _currentSelectedPrimary) select 0; //Get a list of magazines the gun can use from the config (Safe to hardcode CfgWeapons) _configMagsArray = GetArray (configFile >> "CfgWeapons" >> _weapClassname >> "magazines"); _allConfigMagsArray = _configMagsArray; //Check for magazines under muzzles _muzzlesCfg = GetArray (configFile >> "CfgWeapons" >> _weapClassname >> "muzzles"); _muzzleMags = []; { if (_x != "this") then { _muzMagList = GetArray (configFile >> "CfgWeapons" >> _weapClassname >> _x >> "magazines"); _allConfigMagsArray = [_allConfigMagsArray, _muzMagList] Call fnc_shr_mergeArrays; }; } forEach _muzzlesCfg; //Parse out magazines list GW_PUREQUIP_SECONDLIST = []; { _cfgMagsClass = _x; { if ((_x select 0) == _cfgMagsClass) exitWith {GW_PUREQUIP_SECONDLIST set [count GW_PUREQUIP_SECONDLIST, _x]}; } forEach GW_PUREQUIP_MAGAZINES; } forEach _allConfigMagsArray; //Populate the second list { lbAdd [1501, format["$%1 - %2",_x select 1,(getText (configFile >> (_x select 3) >> (_x select 0) >> "DisplayName"))]]; lbSetPicture [1501, _forEachIndex, (getText (configFile >> (_x select 3) >> (_x select 0) >> "Picture"))]; lbSetData [1501, _forEachIndex, (_x select 0)]; } forEach GW_PUREQUIP_SECONDLIST; }; //Populate attachments list depending on what weapon is selected fnc_purequip_populateAttachmentList = { private["_currentSelectedPrimary","_weapClassname","_configCows","_configMuzzle","_configPointer","_configAttach"]; _currentSelectedPrimary = _this select 0; //Clear list lbClear 1505; //Figure out what classname of weapon is selected in the main list _weapClassname = (GW_PUREQUIP_MAINLIST select _currentSelectedPrimary) select 0; _configAttach = []; { configProperties [ configFile >> "CfgWeapons" >> _weapClassname >> "WeaponSlotsInfo" >> _x >> "compatibleItems", "_configAttach pushBack (configName _x)", true ]; } forEach ["CowsSlot", "MuzzleSlot", "PointerSlot", "UnderBarrelSlot"]; //Parse out attachments list GW_PUREQUIP_ATTACHLIST = []; { _cfgAttachClass = _x; { if ((_x select 0) == _cfgAttachClass) exitWith {GW_PUREQUIP_ATTACHLIST set [count GW_PUREQUIP_ATTACHLIST, _x]}; } forEach GW_PUREQUIP_ATTACHMENTS; } forEach _configAttach; //Populate the attachment list { lbAdd [1505, format["$%1 - %2",_x select 1,(getText (configFile >> (_x select 3) >> (_x select 0) >> "DisplayName"))]]; lbSetPicture [1505, _forEachIndex, (getText (configFile >> (_x select 3) >> (_x select 0) >> "Picture"))]; lbSetData [1505, _forEachIndex, (_x select 0)]; } forEach GW_PUREQUIP_ATTACHLIST; }; //Populate inventory container list fnc_purequip_populateContainerList = { private["_containerIndex","_containerContents"]; _containerIndex = _this select 0; //Clear list lbClear 1504; _containerContents = (GW_PUREQUIP_CURRENTTEMPLATE select _containerIndex) select 1; { _classname = _x; _cfgClass = _x Call fnc_shr_getEquipCfgClass; //Get the price of the item (we don't know what category it's in, so unfortunately we need to search the entire equipment array) _price = 0; _classNameIndex = [_classname, 0, GW_PUREQUIP_FULLLIST] Call fnc_shr_arrayGetIndex; if (_classNameIndex != -1) then {_price = (GW_PUREQUIP_FULLLIST select _classNameIndex) select 1}; _displayString = format["$%1 - %2",_price,(getText (configFile >> _cfgClass >> _classname >> "DisplayName"))]; lbAdd [1504, _displayString]; lbSetTooltip [1504, _forEachIndex, _displayString]; lbSetPicture [1504, _forEachIndex, (getText (configFile >> _cfgClass >> _classname >> "Picture"))]; } forEach _containerContents; }; //Can an item fit in a specified container fnc_purequip_canFitInContainer = { private["_itemClass","_container","_cfgClass","_canFit","_classType","_allowedSlots"]; _itemClass = _this select 0; _container = _this select 1; _canFit = false; //Make sure the container actually exists in the template if (_container != "") then { if (_container == "Uniform") then {if (((GW_PUREQUIP_CURRENTTEMPLATE select 4) select 0) != "") then {_canFit = true}}; if (_container == "Vest") then {if (((GW_PUREQUIP_CURRENTTEMPLATE select 5) select 0) != "") then {_canFit = true}}; if (_container == "Backpack") then {if (((GW_PUREQUIP_CURRENTTEMPLATE select 6) select 0) != "") then {_canFit = true}}; }; //Check if the item can fit inside the container if (_itemClass != "" && _canFit) then { _cfgClass = _itemClass Call fnc_shr_getEquipCfgClass; if (_cfgClass == "CfgWeapons") then { _classType = getNumber(configFile >> _cfgClass >> _itemClass >> "type"); if (_classType == GW_PUREQUIP_TYPE_ITEM) then { _configsProperties = []; configProperties [configFile >> _cfgClass >> _itemClass >> "ItemInfo", "_configsProperties pushBack (configName _x); true", true]; if ("allowedSlots" in _configsProperties) then { _allowedSlots = getArray(configFile >> _cfgClass >> _itemClass >> "ItemInfo" >> "allowedSlots"); if ((_container == "Uniform") && (801 in _allowedSlots)) then {_canFit = true} else {_canFit = false}; if ((_container == "Vest") && (701 in _allowedSlots)) then {_canFit = true} else {_canFit = false}; if ((_container == "Backpack") && (901 in _allowedSlots)) then {_canFit = true} else {_canFit = false}; } else { _canFit = true; }; } else { _allowedSlots = getArray(configFile >> _cfgClass >> _itemClass >> "WeaponSlotsInfo" >> "allowedSlots"); if ((_container == "Uniform") && (801 in _allowedSlots)) then {_canFit = true} else {_canFit = false}; if ((_container == "Vest") && (701 in _allowedSlots)) then {_canFit = true} else {_canFit = false}; if ((_container == "Backpack") && (901 in _allowedSlots)) then {_canFit = true} else {_canFit = false}; }; }; if (_cfgClass == "CfgGlasses") then {_canFit = true}; if (_cfgClass == "CfgMagazines") then { _allowedSlots = getArray(configFile >> _cfgClass >> _itemClass >> "allowedSlots"); if (count _allowedSlots == 0) then { _canFit = true; } else { if ((_container == "Uniform") && (801 in _allowedSlots)) then {_canFit = true} else {_canFit = false}; if ((_container == "Vest") && (701 in _allowedSlots)) then {_canFit = true} else {_canFit = false}; if ((_container == "Backpack") && (901 in _allowedSlots)) then {_canFit = true} else {_canFit = false}; }; }; }; _canFit }; //Get item's mass fnc_purequip_getItemMass = { private["_mass","_cfgClass","_classType"]; _mass = 0; if (_this != "") then { _cfgClass = _this Call fnc_shr_getEquipCfgClass; if (_cfgClass == "CfgWeapons") then { _classType = getNumber(configFile >> _cfgClass >> _this >> "type"); _mass = if (_classType == GW_PUREQUIP_TYPE_ITEM) then {getNumber(configFile >> _cfgClass >> _this >> "ItemInfo" >> "mass")} else {getNumber(configFile >> _cfgClass >> _this >> "WeaponSlotsInfo" >> "mass")}; } else { _mass = getNumber(configFile >> _cfgClass >> _this >> "mass"); }; }; _mass }; //Get a specific container's current mass fnc_purequip_getContainerCurrentMass = { private["_currentMass","_containerArray","_itemMass"]; _currentMass = 0; _containerArray = []; if (_this == "Uniform" && (((GW_PUREQUIP_CURRENTTEMPLATE select 4) select 0) != "")) then { _containerArray = ((GW_PUREQUIP_CURRENTTEMPLATE select 4) select 1); }; if (_this == "Vest" && (((GW_PUREQUIP_CURRENTTEMPLATE select 5) select 0) != "")) then { _containerArray = ((GW_PUREQUIP_CURRENTTEMPLATE select 5) select 1); }; if (_this == "Backpack" && (((GW_PUREQUIP_CURRENTTEMPLATE select 6) select 0) != "")) then { _containerArray = ((GW_PUREQUIP_CURRENTTEMPLATE select 6) select 1); }; //Go through container's contents { _itemMass = _x Call fnc_purequip_getItemMass; _currentMass = _currentMass + _itemMass; } forEach _containerArray; _currentMass }; //Get a specific container's max mass fnc_purequip_getContainerMaxMass = { private["_maxMass","_cfgClass","_containerClass"]; _maxMass = 0; _containerClassName = ""; if (_this == "Uniform") then {_containerClassName = (GW_PUREQUIP_CURRENTTEMPLATE select 4) select 0}; if (_this == "Vest") then {_containerClassName = (GW_PUREQUIP_CURRENTTEMPLATE select 5) select 0}; if (_this == "Backpack") then {_containerClassName = (GW_PUREQUIP_CURRENTTEMPLATE select 6) select 0}; if (_containerClassName != "") then { _cfgClass = _containerClassName Call fnc_shr_getEquipCfgClass; if (_cfgClass == "CfgVehicles") then { _maxMass = getNumber(configFile >> "CfgVehicles" >> _containerClassName >> "maximumLoad"); }; if (_cfgClass == "CfgWeapons") then { _containerClass = getText(configFile >> "CfgWeapons" >> _containerClassName >> "ItemInfo" >> "containerClass"); _maxMass = getNumber(configFile >> "CfgVehicles" >> _containerClass >> "maximumLoad"); }; }; _maxMass }; //Update all container's masses fnc_purequip_updateMasses = { private["_parentDisp"]; disableSerialization; _parentDisp = _this select 0; GW_PUREQUIP_UNIFORM_CURR = "Uniform" Call fnc_purequip_getContainerCurrentMass; GW_PUREQUIP_UNIFORM_MAX = "Uniform" Call fnc_purequip_getContainerMaxMass; _BGUniformMassCtrl = _parentDisp displayCtrl 1102; _BarUniformMassCtrl = _parentDisp displayCtrl 1105; if (GW_PUREQUIP_UNIFORM_MAX == 0) then { _BGUniformMassCtrl ctrlShow false; _BarUniformMassCtrl ctrlShow false; } else { _BGUniformMassCtrl ctrlShow true; _BarUniformMassCtrl ctrlShow true; _BGUniformMassMaxWidth = (CtrlPosition _BGUniformMassCtrl select 2) - 0.02; _BarUniformMassCurPos = CtrlPosition _BarUniformMassCtrl; _BarUniformMassCurPos set [2, _BGUniformMassMaxWidth * (GW_PUREQUIP_UNIFORM_CURR / GW_PUREQUIP_UNIFORM_MAX)]; _BarUniformMassCtrl CtrlSetPosition _BarUniformMassCurPos; _BarUniformMassCtrl CtrlCommit 0; }; GW_PUREQUIP_VEST_CURR = "Vest" Call fnc_purequip_getContainerCurrentMass; GW_PUREQUIP_VEST_MAX = "Vest" Call fnc_purequip_getContainerMaxMass; _BGVestMassCtrl = _parentDisp displayCtrl 1103; _BarVestMassCtrl = _parentDisp displayCtrl 1106; if (GW_PUREQUIP_VEST_MAX == 0) then { _BGVestMassCtrl ctrlShow false; _BarVestMassCtrl ctrlShow false; } else { _BGVestMassCtrl ctrlShow true; _BarVestMassCtrl ctrlShow true; _BGVestMassMaxWidth = (CtrlPosition _BGVestMassCtrl select 2) - 0.02; _BarVestMassCurPos = CtrlPosition _BarVestMassCtrl; _BarVestMassCurPos set [2, _BGVestMassMaxWidth * (GW_PUREQUIP_VEST_CURR / GW_PUREQUIP_VEST_MAX)]; _BarVestMassCtrl CtrlSetPosition _BarVestMassCurPos; _BarVestMassCtrl CtrlCommit 0; }; GW_PUREQUIP_BACKPACK_CURR = "Backpack" Call fnc_purequip_getContainerCurrentMass; GW_PUREQUIP_BACKPACK_MAX = "Backpack" Call fnc_purequip_getContainerMaxMass; _BGBackpackMassCtrl = _parentDisp displayCtrl 1104; _BarBackpackMassCtrl = _parentDisp displayCtrl 1107; if (GW_PUREQUIP_BACKPACK_MAX == 0) then { _BGBackpackMassCtrl ctrlShow false; _BarBackpackMassCtrl ctrlShow false; } else { _BGBackpackMassCtrl ctrlShow true; _BarBackpackMassCtrl ctrlShow true; _BGBackpackMassMaxWidth = (CtrlPosition _BGBackpackMassCtrl select 2) - 0.02; _BarBackpackMassCurPos = CtrlPosition _BarBackpackMassCtrl; _BarBackpackMassCurPos set [2, _BGBackpackMassMaxWidth * (GW_PUREQUIP_BACKPACK_CURR / GW_PUREQUIP_BACKPACK_MAX)]; _BarBackpackMassCtrl CtrlSetPosition _BarBackpackMassCurPos; _BarBackpackMassCtrl CtrlCommit 0; }; }; //Get the value of the current template fnc_purequip_updateCost = { private["_parentDisp","_totalCost"]; disableSerialization; _parentDisp = _this select 0; _equipArray = _this select 1; _totalCost = 0; //Get the value of the current template _templateCost = GW_PUREQUIP_CURRENTTEMPLATE Call fnc_shr_getEquipmentCost; //Get the value of what's on the player _playerEquip = player Call fnc_shr_getEquipArray; _playerCost = _playerEquip Call fnc_shr_getEquipmentCost; //Difference between them (Can't refund, $0 is minimum) _totalCost = (_templateCost - _playerCost) max 0; _textColor = if (_totalCost <= GW_CVAR_MONEY) then {"#269024"} else {"#c75454"}; if (_totalCost <= GW_CVAR_MONEY) then {ctrlEnable [1604, true]} else {ctrlEnable [1604, true]}; _totalCostCTRL = _parentDisp displayCtrl 1109; _totalCostCTRL ctrlSetStructuredText (parseText format ["Total Cost of Equipment: <t color='%1'>$%2</t>",_textColor, _totalCost]); GW_PUREQUIP_TOTALCOST = _totalCost; }; //Remove item from equipment fnc_purequip_removeItem = { private["_itemSlotArray","_invQuery","_preSaveArray","_innerPreSaveArray"]; _itemSlotArray = _this; _invQuery = ""; //Helmet, Facewear, Binocs, NVGs if (count _itemSlotArray == 1) then { _preSaveArray =+ GW_PUREQUIP_CURRENTTEMPLATE; _preSaveArray set [_itemSlotArray select 0, ""]; GW_PUREQUIP_CURRENTTEMPLATE = _preSaveArray; }; //Primary Weapon, Secondary Weapon, Sidearm or Assigned Items if (count _itemSlotArray == 2) then { _preSaveArray =+ GW_PUREQUIP_CURRENTTEMPLATE select (_itemSlotArray select 0); _preSaveArray set [_itemSlotArray select 1, ""]; //Removed weapon, be sure to remove attachments as well if (((_itemSlotArray select 0) == 7) || ((_itemSlotArray select 0) == 8) || ((_itemSlotArray select 0) == 9)) then { if ((_preSaveArray select 0) == "") then {_preSaveArray set [1, ["","","",""]]}; }; GW_PUREQUIP_CURRENTTEMPLATE set [_itemSlotArray select 0, _preSaveArray]; }; //Weapon Attachments if (count _itemSlotArray == 3) then { _preSaveArray =+ GW_PUREQUIP_CURRENTTEMPLATE select (_itemSlotArray select 0); _innerPreSaveArray = _preSaveArray select (_itemSlotArray select 1); _innerPreSaveArray set [_itemSlotArray select 2, ""]; _preSaveArray set [(_itemSlotArray select 1), _innerPreSaveArray]; GW_PUREQUIP_CURRENTTEMPLATE set [_itemSlotArray select 0, _preSaveArray]; }; //Call for update of inv GW_PUREQUIP_RECALC_TOTAL = true; GW_PUREQUIP_REDRAWINV = true; }; //Remove a given index from the selected container fnc_purequip_removeContainerItem = { private["_itemIndex","_refresh","_preSaveArray","_innerPreSaveArray","_item"]; _itemIndex = _this select 0; _refresh = _this select 1; //Don't do anything if there's no container selected (shouldn't ever happen) if (GW_PUREQUIP_CONTAINERSEL == -1) exitWith {}; //Remove specified item _preSaveArray =+ GW_PUREQUIP_CURRENTTEMPLATE select GW_PUREQUIP_CONTAINERSEL; _innerPreSaveArray = _preSaveArray select 1; _innerPreSaveArray set [_itemIndex, "REMOVE"]; _innerPreSaveArray = _innerPreSaveArray - ["REMOVE"]; _preSaveArray set [1, _innerPreSaveArray]; GW_PUREQUIP_CURRENTTEMPLATE set [GW_PUREQUIP_CONTAINERSEL, _preSaveArray]; //Call for update of inv (Set this to false if emptying entire container, then redraw once at end) if (_refresh) then { GW_PUREQUIP_RECALC_TOTAL = true; GW_PUREQUIP_RECALC_MASS = true; _containerPop = [GW_PUREQUIP_CONTAINERSEL] Spawn fnc_purequip_populateContainerList; waitUntil {scriptDone _containerPop}; }; }; //Remove container fnc_purequip_removeContainer = { private["_containerIndex", "_preSaveArray"]; _containerIndex = _this select 0; _preSaveArray =+ (GW_PUREQUIP_CURRENTTEMPLATE select _containerIndex); if (_preSaveArray select 0 != "") then { //If the container previously selected matches our removed one, update container selected logic if (GW_PUREQUIP_CONTAINERSEL == _containerIndex) then {GW_PUREQUIP_CONTAINERSEL = -1; GW_PUREQUIP_CONTAINERCHANGED = true}; //Update template _preSaveArray set [0, ""]; _preSaveArray set [1, []]; GW_PUREQUIP_CURRENTTEMPLATE set [_containerIndex, _preSaveArray]; //Request redraw GW_PUREQUIP_REDRAWINV = true; GW_PUREQUIP_RECALC_TOTAL = true; GW_PUREQUIP_RECALC_MASS = true; }; }; //Empty container fnc_purequip_emptyContainer = { private["_containerIndex"]; _containerIndex = _this select 0; //Update template _preSaveArray =+ (GW_PUREQUIP_CURRENTTEMPLATE select _containerIndex); _preSaveArray set [1, []]; GW_PUREQUIP_CURRENTTEMPLATE set [_containerIndex, _preSaveArray]; //Request redraw GW_PUREQUIP_RECALC_TOTAL = true; GW_PUREQUIP_RECALC_MASS = true; _containerPop = [GW_PUREQUIP_CONTAINERSEL] Spawn fnc_purequip_populateContainerList; waitUntil {scriptDone _containerPop}; }; //Can an attachment work on the weapon fnc_purequip_attachmentFits = { private["_attachClass","_weaponClass","_configAttach","_newAttachClasses","_oldAttachClasses"]; _attachClass = _this select 0; _weaponClass = _this select 1; _attachmentFits = false; _configAttach = []; { configProperties [ configFile >> "CfgWeapons" >> _weaponClass >> "WeaponSlotsInfo" >> _x >> "compatibleItems", "_configAttach pushBack (configName _x)", true ]; } forEach ["CowsSlot", "MuzzleSlot", "PointerSlot", "UnderBarrelSlot"]; //Search for our attachment { if (_x == _attachClass) exitWith {_attachmentFits = true}; } forEach _configAttach; _attachmentFits }; //Add item to template fnc_purequip_addItem = { private["_ctrl","_clickIndex","_itemIndex","_itemSlotArray","_itemClassName","_itemSlotArray"]; disableSerialization; _ctrl = _this select 0; _clickIndex = _this select 1; _itemIndex = [(lbData[_ctrl, _clickIndex]), 0, GW_PUREQUIP_FULLLIST] Call fnc_shr_arrayGetIndex; if (_itemIndex != -1) then { _itemClassName = (GW_PUREQUIP_FULLLIST select _itemIndex) select 0; _itemSlotArray = (GW_PUREQUIP_FULLLIST select _itemIndex) select 4; //Helmet, Facewear, Binocs, NVGs if ((count _itemSlotArray) == 1) then { _preSaveArray =+ GW_PUREQUIP_CURRENTTEMPLATE; //Equipable item if ((_itemSlotArray select 0) != -1) then { if ((_preSaveArray select (_itemSlotArray select 0)) == "") then { _preSaveArray set [_itemSlotArray select 0, _itemClassName]; GW_PUREQUIP_CURRENTTEMPLATE = _preSaveArray; } else { if (GW_PUREQUIP_CONTAINERSEL != -1) then { _containerName = ""; _containerMassCurrent = 0; _containerMassMax = 0; if (GW_PUREQUIP_CONTAINERSEL == 4) then {_containerName = "Uniform"; _containerMassCurrent = GW_PUREQUIP_UNIFORM_CURR; _containerMassMax = GW_PUREQUIP_UNIFORM_MAX}; if (GW_PUREQUIP_CONTAINERSEL == 5) then {_containerName = "Vest"; _containerMassCurrent = GW_PUREQUIP_VEST_CURR; _containerMassMax = GW_PUREQUIP_VEST_MAX}; if (GW_PUREQUIP_CONTAINERSEL == 6) then {_containerName = "Backpack"; _containerMassCurrent = GW_PUREQUIP_BACKPACK_CURR; _containerMassMax = GW_PUREQUIP_BACKPACK_MAX}; _canFit = [_itemClassName, _containerName] Call fnc_purequip_canFitInContainer; if (_canFit) then { _itemMass = _itemClassName Call fnc_purequip_getItemMass; if ((_containerMassCurrent + _itemMass) <= _containerMassMax) then { _innerPreSaveArray = _preSaveArray select GW_PUREQUIP_CONTAINERSEL; _innerSubPreSaveArray = _innerPreSaveArray select 1; _innerSubPreSaveArray pushBack _itemClassName; _innerPreSaveArray set [1, _innerSubPreSaveArray]; _preSaveArray set [GW_PUREQUIP_CONTAINERSEL, _innerPreSaveArray]; GW_PUREQUIP_CURRENTTEMPLATE = _preSaveArray; GW_PUREQUIP_CONTAINERCHANGED = true; }; }; }; }; } else //Only fits in a container { if (GW_PUREQUIP_CONTAINERSEL != -1) then { _containerName = ""; _containerMassCurrent = 0; _containerMassMax = 0; if (GW_PUREQUIP_CONTAINERSEL == 4) then {_containerName = "Uniform"; _containerMassCurrent = GW_PUREQUIP_UNIFORM_CURR; _containerMassMax = GW_PUREQUIP_UNIFORM_MAX}; if (GW_PUREQUIP_CONTAINERSEL == 5) then {_containerName = "Vest"; _containerMassCurrent = GW_PUREQUIP_VEST_CURR; _containerMassMax = GW_PUREQUIP_VEST_MAX}; if (GW_PUREQUIP_CONTAINERSEL == 6) then {_containerName = "Backpack"; _containerMassCurrent = GW_PUREQUIP_BACKPACK_CURR; _containerMassMax = GW_PUREQUIP_BACKPACK_MAX}; _canFit = [_itemClassName, _containerName] Call fnc_purequip_canFitInContainer; if (_canFit) then { _itemMass = _itemClassName Call fnc_purequip_getItemMass; if ((_containerMassCurrent + _itemMass) <= _containerMassMax) then { _innerPreSaveArray = _preSaveArray select GW_PUREQUIP_CONTAINERSEL; _innerSubPreSaveArray = _innerPreSaveArray select 1; _innerSubPreSaveArray pushBack _itemClassName; _innerPreSaveArray set [1, _innerSubPreSaveArray]; _preSaveArray set [GW_PUREQUIP_CONTAINERSEL, _innerPreSaveArray]; GW_PUREQUIP_CURRENTTEMPLATE = _preSaveArray; GW_PUREQUIP_CONTAINERCHANGED = true; }; }; }; }; }; //Primary Weapon, Secondary Weapon, Sidearm or Assigned Items if ((count _itemSlotArray) == 2) then { _preSaveArray =+ GW_PUREQUIP_CURRENTTEMPLATE select (_itemSlotArray select 0); //No current item if ((_preSaveArray select (_itemSlotArray select 1)) == "") then { _preSaveArray set [(_itemSlotArray select 1), _itemClassName]; GW_PUREQUIP_CURRENTTEMPLATE set [(_itemSlotArray select 0), _preSaveArray]; } else //Current item is already populated, try to put in container { if (GW_PUREQUIP_CONTAINERSEL != -1) then { _containerName = ""; _containerMassCurrent = 0; _containerMassMax = 0; if (GW_PUREQUIP_CONTAINERSEL == 4) then {_containerName = "Uniform"; _containerMassCurrent = GW_PUREQUIP_UNIFORM_CURR; _containerMassMax = GW_PUREQUIP_UNIFORM_MAX}; if (GW_PUREQUIP_CONTAINERSEL == 5) then {_containerName = "Vest"; _containerMassCurrent = GW_PUREQUIP_VEST_CURR; _containerMassMax = GW_PUREQUIP_VEST_MAX}; if (GW_PUREQUIP_CONTAINERSEL == 6) then {_containerName = "Backpack"; _containerMassCurrent = GW_PUREQUIP_BACKPACK_CURR; _containerMassMax = GW_PUREQUIP_BACKPACK_MAX}; _canFit = [_itemClassName, _containerName] Call fnc_purequip_canFitInContainer; if (_canFit) then { _itemMass = _itemClassName Call fnc_purequip_getItemMass; if ((_containerMassCurrent + _itemMass) <= _containerMassMax) then { _preSaveArray =+ GW_PUREQUIP_CURRENTTEMPLATE; _innerPreSaveArray = _preSaveArray select GW_PUREQUIP_CONTAINERSEL; _innerSubPreSaveArray = _innerPreSaveArray select 1; _innerSubPreSaveArray pushBack _itemClassName; _innerPreSaveArray set [1, _innerSubPreSaveArray]; _preSaveArray set [GW_PUREQUIP_CONTAINERSEL, _innerPreSaveArray]; GW_PUREQUIP_CURRENTTEMPLATE = _preSaveArray; GW_PUREQUIP_CONTAINERCHANGED = true; }; }; }; }; }; //Weapon Attachments if (count _itemSlotArray == 3) then { _equipSlot = (_itemSlotArray select 0); _preSaveIndex = -1; if (typeName _equipSlot == "ARRAY") then { _gunIndex = 7; if ((lbCurSel 2100) == 1) then {_gunIndex = 8}; if ((lbCurSel 2100) == 2) then {_gunIndex = 9}; if (_gunIndex in _equipSlot) then { _preSaveIndex = _gunIndex; }; } else { _preSaveIndex = _equipSlot; }; _preSaveArray = []; _gunClass = ""; _attachmentSlot = ""; _attachmentFits = false; //If we found a suitable slot to equip if (_preSaveIndex != -1) then { _preSaveArray =+ GW_PUREQUIP_CURRENTTEMPLATE select _preSaveIndex; //Does it fit on the weapon? _gunClass = (_preSaveArray select 0); _attachmentSlot = ((_preSaveArray select (_itemSlotArray select 1)) select (_itemSlotArray select 2)); _attachmentFits = if (_gunClass != "") then {[_itemClassName, _gunClass] Call fnc_purequip_attachmentFits} else {false}; }; //Has a weapon for the attachment type if (_gunClass != "" && _attachmentSlot == "" && _attachmentFits) then { _innerPreSaveArray = _preSaveArray select (_itemSlotArray select 1); _innerPreSaveArray set [(_itemSlotArray select 2), _itemClassName]; _preSaveArray set [(_itemSlotArray select 1), _innerPreSaveArray]; GW_PUREQUIP_CURRENTTEMPLATE set [_preSaveIndex, _preSaveArray]; } else //Current item is already populated, try to put in container { if (GW_PUREQUIP_CONTAINERSEL != -1) then { _containerName = ""; _containerMassCurrent = 0; _containerMassMax = 0; if (GW_PUREQUIP_CONTAINERSEL == 4) then {_containerName = "Uniform"; _containerMassCurrent = GW_PUREQUIP_UNIFORM_CURR; _containerMassMax = GW_PUREQUIP_UNIFORM_MAX}; if (GW_PUREQUIP_CONTAINERSEL == 5) then {_containerName = "Vest"; _containerMassCurrent = GW_PUREQUIP_VEST_CURR; _containerMassMax = GW_PUREQUIP_VEST_MAX}; if (GW_PUREQUIP_CONTAINERSEL == 6) then {_containerName = "Backpack"; _containerMassCurrent = GW_PUREQUIP_BACKPACK_CURR; _containerMassMax = GW_PUREQUIP_BACKPACK_MAX}; _canFit = [_itemClassName, _containerName] Call fnc_purequip_canFitInContainer; if (_canFit) then { _itemMass = _itemClassName Call fnc_purequip_getItemMass; if ((_containerMassCurrent + _itemMass) <= _containerMassMax) then { _preSaveArray =+ GW_PUREQUIP_CURRENTTEMPLATE; _innerPreSaveArray = _preSaveArray select GW_PUREQUIP_CONTAINERSEL; _innerSubPreSaveArray = _innerPreSaveArray select 1; _innerSubPreSaveArray pushBack _itemClassName; _innerPreSaveArray set [1, _innerSubPreSaveArray]; _preSaveArray set [GW_PUREQUIP_CONTAINERSEL, _innerPreSaveArray]; GW_PUREQUIP_CURRENTTEMPLATE = _preSaveArray; GW_PUREQUIP_CONTAINERCHANGED = true; }; }; }; }; }; //Request redraw GW_PUREQUIP_REDRAWINV = true; GW_PUREQUIP_RECALC_TOTAL = true; GW_PUREQUIP_RECALC_MASS = true; }; }; //Purchase current template of gear fnc_purequip_purchaseGear = { GW_PUREQUIP_BUYNETCALLRETURN = ["GW_NETCALL_WAITING"]; _buyNetCall = ["equipment","buy",[(getPlayerUID player), GW_PUREQUIP_CURRENTTEMPLATE, false, true], "GW_PUREQUIP_BUYNETCALLRETURN"] Spawn fnc_clt_requestServerExec; waitUntil {scriptDone _buyNetCall}; if (!(GW_PUREQUIP_BUYNETCALLRETURN select 0)) then { playSound "UIFail"; systemChat format ["Unable to purchase gear - %1",(GW_PUREQUIP_BUYNETCALLRETURN select 1)]; } else { playSound "UISuccess"; //Update last purchased template GW_CVAR_TEMPLATES set [0, ["Last Purchased", false, GW_PUREQUIP_CURRENTTEMPLATE, true, (GW_PUREQUIP_BUYNETCALLRETURN select 1)]]; //Equip the player _unitEquipScript = [player, GW_PUREQUIP_CURRENTTEMPLATE] spawn fnc_shr_equipUnit; waitUntil{scriptDone _unitEquipScript}; GW_PUREQUIP_RECALC_TOTAL = true; }; }; //Populate Templates List (Don't get array from server) fnc_purequip_populateTemplates = { private["_parentDisp"]; disableSerialization; _parentDisp = _this select 0; //Populate the list lbClear 1502; { lbAdd [1502, format["%1",(_x select 0)]]; if (_x select 1) then {lbSetColor [1502, _forEachIndex, [0,0.7490,1,1]]}; } forEach GW_CVAR_TEMPLATES; }; //Load template fnc_purequip_loadTemplate = { private["_index","_templateSelected"]; _index = lbCurSel 1502; if (_index != -1) then { _templateSelected = GW_CVAR_TEMPLATES select _index; GW_PUREQUIP_CURRENTTEMPLATE =+ _templateSelected select 2; GW_PUREQUIP_REDRAWINV = true; GW_PUREQUIP_RECALC_TOTAL = true; GW_PUREQUIP_RECALC_MASS = true; GW_PUREQUIP_CONTAINERCHANGED = true; }; }; //Save new template fnc_purequip_saveNewTemplate = { private["_parentDisp"]; disableSerialization; _parentDisp = _this select 0; //Get name of template _templateNameCTRL = _parentDisp displayCtrl 1400; _templateName = ctrlText _templateNameCTRL; if (_templateName != "") then { GW_PUREQUIP_TEMPLATE_ADD = ["GW_NETCALL_WAITING"]; _templateNetCall = ["equipment","templatenew",[(getPlayerUID player), _templateName, GW_PUREQUIP_CURRENTTEMPLATE],"GW_PUREQUIP_TEMPLATE_ADD"] Spawn fnc_clt_requestServerExec; waitUntil {scriptDone _templateNetCall}; if (!(GW_PUREQUIP_TEMPLATE_ADD select 0)) then { playSound "UIFail"; systemChat format ["Unable to save new template - %1",(GW_PUREQUIP_TEMPLATE_ADD select 1)]; } else { playSound "UISuccess"; lbAdd [1502, format["%1",_templateName]]; lbSetColor [1502, ((lbSize 1500) - 1), [0,0.7490,1,1]]; GW_CVAR_TEMPLATES pushBack [_templateName, true, GW_PUREQUIP_CURRENTTEMPLATE, true, (GW_PUREQUIP_TEMPLATE_ADD select 1)]; _templateNameCTRL ctrlSetText ""; }; } else { systemChat "Templates must have a unique name"; playSound "UIFail"; }; }; //Update template fnc_purequip_updateTemplate = { private["_parentDisp"]; disableSerialization; _parentDisp = _this select 0; //Get name of template _templateName = if ((lbCurSel 1502) != -1) then {(GW_CVAR_TEMPLATES select (lbCurSel 1502)) select 0} else {""}; _canModify = if ((lbCurSel 1502) != -1) then {(GW_CVAR_TEMPLATES select (lbCurSel 1502)) select 1} else {false}; if (_templateName != "" && _canModify) then { GW_PUREQUIP_TEMPLATE_UPDATE = ["GW_NETCALL_WAITING"]; _templateNetCall = ["equipment","templateupdate",[(getPlayerUID player), _templateName, GW_PUREQUIP_CURRENTTEMPLATE],"GW_PUREQUIP_TEMPLATE_UPDATE"] Spawn fnc_clt_requestServerExec; waitUntil {scriptDone _templateNetCall}; if (!(GW_PUREQUIP_TEMPLATE_UPDATE select 0)) then { playSound "UIFail"; systemChat format ["Unable to update template - %1",(GW_PUREQUIP_TEMPLATE_UPDATE select 1)]; } else { playSound "UISuccess"; GW_CVAR_TEMPLATES set[(lbCurSel 1502), [_templateName, true, GW_PUREQUIP_CURRENTTEMPLATE, true, (GW_PUREQUIP_TEMPLATE_UPDATE select 1)]]; }; } else { if (_templateName == "") then {systemChat "No template selected to delete"}; if (!_canModify) then {systemChat "You can only modify templates you made"}; playSound "UIFail"; }; }; //Delete template fnc_purequip_deleteTemplate = { private["_parentDisp"]; disableSerialization; _parentDisp = _this select 0; //Get name of template _templateName = if ((lbCurSel 1502) != -1) then {(GW_CVAR_TEMPLATES select (lbCurSel 1502)) select 0} else {""}; _canModify = if ((lbCurSel 1502) != -1) then {(GW_CVAR_TEMPLATES select (lbCurSel 1502)) select 1} else {false}; if (_templateName != "" && _canModify) then { GW_PUREQUIP_TEMPLATE_DELETE = ["GW_NETCALL_WAITING"]; _templateNetCall = ["equipment","templatedelete",[(getPlayerUID player), _templateName],"GW_PUREQUIP_TEMPLATE_DELETE"] Spawn fnc_clt_requestServerExec; waitUntil {scriptDone _templateNetCall}; if (!(GW_PUREQUIP_TEMPLATE_DELETE select 0)) then { playSound "UIFail"; systemChat format ["Unable to delete template - %1",(GW_PUREQUIP_TEMPLATE_DELETE select 1)]; } else { playSound "UISuccess"; lbDelete [1502, (lbCurSel 1502)]; GW_CVAR_TEMPLATES deleteAt ((lbCurSel 1502) + 1); }; } else { if (_templateName == "") then {systemChat "No template selected to delete"}; if (!_canModify) then {systemChat "You can only modify templates you made"}; playSound "UIFail"; }; }; //Button should be hidden by default _emptyContainerCTRL = _display displayCtrl 1609; _emptyContainerCTRL ctrlShow false; //Fill the purchase categories combobox with all the categories lbClear 2100; lbAdd [2100, "Primary Weapons"]; lbSetData [2100, 0, "WEAP_PRIMARY"]; lbAdd [2100, "Secondary Weapons"]; lbSetData [2100, 1, "WEAP_SECONDARY"]; lbAdd [2100, "Sidearms"]; lbSetData [2100, 2, "WEAP_SIDEARM"]; lbAdd [2100, "Ammo & Ordnance"]; lbSetData [2100, 3, "MAGAZINES"]; lbAdd [2100, "Attachments"]; lbSetData [2100, 4, "ATTACHMENTS"]; lbAdd [2100, "Headgear"]; lbSetData [2100, 5, "HEADGEAR"]; lbAdd [2100, "Vests"]; lbSetData [2100, 6, "VESTS"]; lbAdd [2100, "Uniforms"]; lbSetData [2100, 7, "UNIFORMS"]; lbAdd [2100, "Backpacks"]; lbSetData [2100, 8, "BACKPACKS"]; lbAdd [2100, "Facewear"]; lbSetData [2100, 9, "FACEWEAR"]; lbAdd [2100, "Other Items"]; lbSetData [2100, 10, "OTHERS"]; //First template shown should be what the player currently has equipped GW_PUREQUIP_CURRENTTEMPLATE = [player, true] Call fnc_shr_getEquipArray; //Select primary weapons by default lbSetCurSel [2100, 0]; GW_PUREQUIP_CHANGEDCATEGORY = true; //Need to draw the inventory _redrawUI = [_display] Spawn fnc_purequip_redrawInventory; _recalcPrice = [_display] Spawn fnc_purequip_updateCost; _recalcMass = [_display] Spawn fnc_purequip_updateMasses; _templatePop = [_display] Spawn fnc_purequip_populateTemplates; //Unblock UI for network call _netBlockBGCTRL = _display displayCtrl 1110; _netBlockBGCTRL ctrlShow false; _netBlockTextCTRL = _display displayCtrl 1111; _netBlockTextCTRL ctrlShow false; //Main Updater while {dialog} do { //If player dies, close dialog if (!alive player) exitWith {closeDialog 60003}; //Disable/Enable purchase button depending on if there are enemies near the player _hostiles = [GW_CVAR_SIDE, (getPosATL player), 100] Call fnc_shr_getHostilesInArea; if (_hostiles == 0) then {(_display displayCtrl 1604) ctrlEnable true} else {(_display displayCtrl 1604) ctrlEnable false}; //User selected to load a template if (GW_PUREQUIP_LOADTEMPLATE) then { GW_PUREQUIP_LOADTEMPLATE = false; _templateLoad = [] Spawn fnc_purequip_loadTemplate; waitUntil {scriptDone _templateLoad}; }; //User selected purchase equipment if (GW_PUREQUIP_PURCHASEEQUIPMENT) then { GW_PUREQUIP_PURCHASEEQUIPMENT = false; _gearPurchase = [] Spawn fnc_purequip_purchaseGear; waitUntil {scriptDone _gearPurchase}; }; //Changed category (Need to halt execution to make sure it's done populating) if (GW_PUREQUIP_CHANGEDCATEGORY) then { GW_PUREQUIP_CHANGEDCATEGORY = false; _gearPopulate = [(lbCurSel 2100), _display] Spawn fnc_purequip_populateGearList; waitUntil {scriptDone _gearPopulate}; }; //Recalc Total of Template if (GW_PUREQUIP_RECALC_TOTAL) then { GW_PUREQUIP_RECALC_TOTAL = false; _recalcPrice = [_display] Spawn fnc_purequip_updateCost; waitUntil {scriptDone _recalcPrice}; }; //Figure out mass of containers if (GW_PUREQUIP_RECALC_MASS) then { GW_PUREQUIP_RECALC_MASS = false; _recalcMass = [_display] Spawn fnc_purequip_updateMasses; waitUntil {scriptDone _recalcMass}; }; //Changed primary selection (Only need to do this if we're on the weapons categories) if (GW_PUREQUIP_PRIMARYLISTCHANGED) then { GW_PUREQUIP_PRIMARYLISTCHANGED = false; _categorySelected = lbCurSel 2100; if (_categorySelected == 0 || _categorySelected == 1 || _categorySelected == 2) then { _currentSelectedPrimary = lbCurSel 1500; if (_currentSelectedPrimary != -1) then { //Make sure our selected index is a valid index within the new category if ((lbSize 1500) > _currentSelectedPrimary) then { _magsPopulate = [_currentSelectedPrimary] Spawn fnc_purequip_populateMagazineList; _attachPopulate = [_currentSelectedPrimary] Spawn fnc_purequip_populateAttachmentList; waitUntil {scriptDone _magsPopulate && scriptDone _attachPopulate}; } else { //If there's at least 1 weapon in there, select that one if ((lbSize 1500) > 0) then { lbSetCurSel [1500, 0]; _magsPopulate = [0] Spawn fnc_purequip_populateMagazineList; _attachPopulate = [0] Spawn fnc_purequip_populateAttachmentList; waitUntil {scriptDone _magsPopulate && scriptDone _attachPopulate}; } } }; }; }; //Container Changed if (GW_PUREQUIP_CONTAINERCHANGED) then { GW_PUREQUIP_CONTAINERCHANGED = false; if (GW_PUREQUIP_CONTAINERSEL != -1) then { _containerClass = (GW_PUREQUIP_CURRENTTEMPLATE select GW_PUREQUIP_CONTAINERSEL) select 0; if (_containerClass != "") then { _containerPop = [GW_PUREQUIP_CONTAINERSEL] Spawn fnc_purequip_populateContainerList; waitUntil {scriptDone _containerPop}; } else { GW_PUREQUIP_CONTAINERSEL = -1; }; }; //Update container text if (GW_PUREQUIP_CONTAINERSEL == -1) then { lbClear 1504; _containerTextCTRL = _display displayCtrl 1108; _containerTextCTRL ctrlSetStructuredText (parseText format ["No Container Selected"]); _emptyContainerCTRL = _display displayCtrl 1609; _emptyContainerCTRL ctrlShow false; } else { _containerText = ""; if (GW_PUREQUIP_CONTAINERSEL == 4) then {_containerText = "Uniform"}; if (GW_PUREQUIP_CONTAINERSEL == 5) then {_containerText = "Vest"}; if (GW_PUREQUIP_CONTAINERSEL == 6) then {_containerText = "Backpack"}; _containerTextCTRL = _display displayCtrl 1108; _containerTextCTRL ctrlSetStructuredText (parseText format ["Contents of %1",_containerText]); _emptyContainerCTRL = _display displayCtrl 1609; _emptyContainerCTRL ctrlShow true; }; }; //Redraw requested if (GW_PUREQUIP_REDRAWINV) then { GW_PUREQUIP_REDRAWINV = false; _redrawUI = [_display] Spawn fnc_purequip_redrawInventory; waitUntil {scriptDone _redrawUI}; }; //Update selected template if (GW_PUREQUIP_UPDATETEMPLATE) then { GW_PUREQUIP_UPDATETEMPLATE = false; _templateUpdate = [_display] Spawn fnc_purequip_updateTemplate; waitUntil {scriptDone _templateUpdate}; }; //Delete selected template if (GW_PUREQUIP_DELETETEMPLATE) then { GW_PUREQUIP_DELETETEMPLATE = false; _templateDelete = [_display] Spawn fnc_purequip_deleteTemplate; waitUntil {scriptDone _templateDelete}; }; //Save new template if (GW_PUREQUIP_SAVENEWTEMPLATE) then { GW_PUREQUIP_SAVENEWTEMPLATE = false; _templateSaveNew = [_display] Spawn fnc_purequip_saveNewTemplate; waitUntil {scriptDone _templateSaveNew}; }; uiSleep 0.1; };
  19. Hi there, in the recent update of development branch you will find the new version of announced (http://dev.arma3.com/sitrep-00030) fatigue mechanics improvement which we prepared for you. As the design of such an important feature is inevitably burdened by many subjective feelings and opinions we decided to inform and discuss it's implementation with you. Therefore I would like to gladly ask you for a valuable, constructive and civilized feedback upon the issue. Hopefully, it will help me a lot to tune that feature according to your sound objections, good suggestions and overall gameplay feelings. So, this update will affects three main issues: 1) Animation slowdown. The more you are fatigued, the more sluggish and cumbersome all your movement becomes. Simple as that. However, not every animation could be slowed down by the same degree without odd side effects. Thus it's quite tricky to set up the values for every respective animation correctly. If you find out some unexpected motion that goes simply "too slow", please, let me know. Also I would like to hear from you if the current overall slowing isn't too much, or if you generally feel that it could be even more severe. As I said, it's very subjective issue and many different opinions will arise for sure. 2) Fatigue gain from inventory load. The more you are loaded, the sooner you get exhausted by doing exhaustive actions. I've made the progress of fatigue gain from inventory load much steeper to force you to consider your carried equipment with greater care. Let me know if it's not too punitive, or, if you feel that it could be even more severe. 3) Weapon sway. Believe it or not, weapon sway behavior is inevitably connected to fatigue. Thus the recent changes will certainly have an impact on it. We wish to improve the sway mechanics even further, so every feedback regarding this issue, regardless if it's just personal opinion or shooting range testing video, will be also much appreciated. Thanks in advance for your feedback and stay tuned.
  20. Hello, I've had search for some forum or topic and did not found any related with this subjects. I hope had founded the right place to do some constructive comments. I think A3 could bring us more realistic experiences of combat if some (hard I know) improvements could be done. Imagine a simulated combat where you can adapt terrain and buildings creating barricaded positions and bringing more dynamics to any warfare where a sniper, a machine gunner, a mortar team or a fire squad could prepare a nest for your purpose and an area or building could be transformed in a real strong or strategic point while fortified. The real war change constantly the battlefield and it's characteristics change the strategy, tactics and weapons employed to eliminate different threats. Even vehicles could make use of buildings protection and camouflage. I see this like a new concept into all combat simulation market and hope you enjoy it to your purposes. I know that have a million of technical difficulties and also want you understand this like idea to a future improvement. I think the lots of modelling and physics troubles will compensate the time and maybe money for your company what made so much for so many milsim communities. Att. A Brazilian corporal.
  21. This thread will serve to keep an update on when new version of the development branch are released, detailing their changes. Version 0.8.0205: 17th September 2013: - Changed Timer Event to support infinite repetitions - Added more rocks and details to Deimos 16th September 2013: - Added list selection/removal of instruments when editing Analyze targes - Added indication of budget increase for science target and mission completion - Added WIP Mission generator 15th September 2013: - Added scenario Asteroid E5651 for the Zero-G Probe in the Asteroid Belt location - Added On Scenario Start type Trigger - Added Reset button for Trigger properties in the Editor - Added Space sky preset - Added 2 more spawn options for objects to the Editor - Completed Gravity Vector Align for Zero-G Probe - Fixed Scenario image not reloading when new image created - Fixed minor issue of scenario menu being open over object spawn menu - Fixed minor issue of Script Event being callable only after reload in Editor - Fixed issue related to thrusters on the Zero-G Probe being inverted after load 14th September 2013: - Added robotic arms to Zero-G Probe - Added 2 presets for the Zero-G Probe - Completed controls for the Zero-G Probe 13th September 2013: - Added asteroid generator script to Asteroid Generator scenario - Added more rocks to Deimos - Improved addons system loading - Fixed serialization of Timer Event 12th September 2013: - Added Scenario properties menu, where date, time, description can be defined - Added button to take current render and save it to the currently opened scenario - Added dynamic asteroids to spawnable Dynamic Objects - Added Unassign Mission to vehicles and the map - Added/Adjusted preview and logout images for vehicles in the map - Added info to mission targets in map (such as zone number, required instruments, etc) 0000208 - Added type to instrument list in vehicle details in map - Added correct preview pictures of each vehicle type (in the map) - Added support for position and angle offsets to vehicles displayed in the Rover Lab - Added restart dialog when an addon has been downloaded and loaded - Allowed re-assigning of vehicles to other missions even if their's is incomplete - Increased max vehicle name length to 22 characters 0000063 - Improved appearance of the Rover Lab - Improved addon packing/unpacking system 11th September 2013: - Added Asteroid Belt location - Added Zero-G Probe WIP controls - Added rocks to Deimos 10th September 2013: - Improved Skip Time duration selection list (now drop-down) 0000032 - Improved gamepad support in Mission Control - Fixed bug where after analyzing the orange frame and visible zone would stay - Fixed bug where the +/- zoom buttons would sometimes show for cameras without zoom 0000295 - Fixed bug where CTR or LOG tabs (if open) were empty upon logging into the vehicle 0000092 - Fixed bug where Arcade style GUI was not persistent with the option setting 0000094 - Fixed bug where using Test Vehicle spawned it beneath the location 0000314 9th September 2013: - Fixed globe zoom issue in the main menu - Fixed shadow issue of Crater models on Deimos - Improved shadowing by sun on Deimos 6th September 2013: - Added the external Workbench editing suite - Added instrument info (power generation, range, etc) - Updated instrument descriptions in the Rover Lab 4th September 2013: - Added instrument descriptions to the Rover Lab (no longer WIP) - Increased resolution scale of Terrain Imager cameras 3rd September 2013: - Added support for custom content via addons, including locations, vehicles and so on - Added night time lighting to the Mars Yard - Removed several obsolete files 2nd September 2013: - Added WIP Deimos location - Added WIP Zero-G Probe 30th August 2013: - Fixed science target in Victoria Crater mission ref. 5540 0000300 - Fixed APXS bounding box in mission Ancient River Bed 0000288 - Adjusted the science target priorities and task order in Kaiser Crater mission ref. 6983 29th August 2013: - Fixed gripping to floor while trying to thrust in Lander - Fixed EAS flashing READY while in use 28th August 2013: - Added Flight Mode activation for Landers, enabling the player to move a landed Lander - Adjusted analyze target in Victoria Crater mission ref. 1967 0000270 26th August 2013: - Added more rocks to Victoria Crater 23rd August 2013: - Fixed analyze target in Victoria Crater mission ref. 5871 0000286 - Adjusted analyze target in Victoria Crater mission ref. 6275 0000285 - Added more rocks to Victoria Crater 22nd August 2013: - Fixed photo target in Kaiser Crater mission ref. 2824 0000281 - Victoria Crater campaign adjusted - New mission added to Victoria Crater campaign - Added more stones on Victoria Crater map 21st August 2013: - Fixed noticeable texture repeating on Kaiser Crater dark dune, adjusted corresponding mission 0000069 20th August 2013: - Added 4 large Tech 9+ side mission to Kaiser Crater campaign 19th August 2013: - Added more stones to Victoria Crater - Added Picture-In-Picture update rate setting to options menu - Increased thruster strength for small lander - Increased max vehicles per location from 32 to 64 - Increased max locations from 128 to 256 - Removed old part failure system - Fixed snap-to-place free-fly cam issue when leaving a vehicle - Fixed Picture-In-Picture camera 1 not disabling when broken - Fixed Picture-In-Picture resolutions not being scaled by camera type - Fixed noise-grain effect related out-of-memory freeze on very low-end systems - Fixed APXS science target in Kaiser Crater side mission 6983 0000225 - Fixed analyze targets in Vicotria Crater mission ref. 7123 0000221 - Fixed floating stones in Victoria Crater 17th August 2013: - Fixed E3 Gale Crater scenario problem where the Sky Crane had no fuel 16th August 2013: - Added limited fuel to landing systems (Lander thrusters, Retro Stage thrusters, Sky Crane thrusters) 0000046 - Added fuel tank level indicators to the landing HUD - Added indication of emergency landing mode to landing HUD - Added hint to Gravon overlay for its menu (P) - Fixed Invert Vertical Axis toggle in options menu 0000172 - Fixed issue where HUD grid showed up in 3rd person view during landing - Fixed APXS and Drill targets in Large rover mission on Victoria Crater 0000227 - Fixed APXS target in mission Group of impact craters on Victoria Crater 0000253 - Fixed APXS target in mission Two impact craters on Victoria Crater 0000018 - Fixed Drill target in mission Three depressions on Gale Crater 0000244 - Fixed photo target in Kaiser Crater mission 3, Dark Dunes 06 0000266 - Changed default thrust button to left shift 15th August 2013: - Added uploading of photos to Steam via the vehicle's photo viewer on the map - Reduced opacity of landing HUD grid - Removed HUD modes from the Radial Menu (to be used for dynamic actions) 14th August 2013: - Added manual landing of vehicles (Landers and Rovers) 0000070 - Added T5 Small rover - Adjusted descent cam rotation by 90 degrees - Adjusted landers thrusters to keep straight while thrusting - Adjusted priorities etc in several Kaiser Crater missions 13th August 2013: - Fixed DAN science target in mission 4681 0000248 - Fixed Floating rocks near Kaiser Crater 0000250 - Fixed floating/clipped rock near ancient river in Kaiser Crater 0000243 - Fixed floating rock in Kaiser Crater map 0000140 12th August 2013: - Added map zoom to cursor instead of center 0000050 - Fixed non-scanable rocks in Kaiser Crater misson 5044 0000213 - Fixed photograph rock bug in Kraiser Crater plateu 0000214 - Fixed photo targets in 2nd mission on Kaiser Crater - Adjusted cameras on T5 Large lander (NAV cam replaced by TELE) - Optimized calling of sky preset change 9th August 2013: - Added WIP landing HUD to Landers, currently not fully functional - Added more rocks to Victoria Crater - Removed noise in 3rd person cam, even if no cams are present - Fixed Gale Crater Impact Crater mission photo targets 0000198 - Fixed issue where turning off GUI elements did not work for landing HUD - Fixed Landers not switching between landing and ground HUD 8th August 2013: - Added versioning/synching of objects such as static objects to allow addition of more objects to locations - Added clearing of duplicate ID objects, such as rocks and static objects - Added more rocks to Victoria Crater - Increased range for APXS slightly, making it easier to reach targets - Reduced random part failure to make landings less error-prone - Fixed an analyze target in Kaiser Crater not being completable - Fixed duplicate IDs on 2 science targets in Kaiser, causing hell - Fixed several side missions where the material was set to STONE, not ATMOSPHERE - Fixed problem with Gravon not being unpacked on the Steam build, causing a crash 0000143 7th August 2013: - Added versioning/synching of Space Program Science Targets to allow addition of more missions to locations - Added more small side missions to Victoria Crater - Fixed the further issues with Gravon - Fixed the issues with the photo targets in Kaiser Crater 0000087 - Fixed several levitating rocks in Victoria Crater - Changed one of the scientists in the lab to be kneeling 6th August 2013: - Added TextListboxWidget functionality to script to edit contents of each column using SetItem() - Added Feedback Tracker ID to issues in the Change Log - Added more people to the Mission Control room - Added scientists in white overalls to the Rover Lab - Added several small side missions to Victoria Crater - Fixed the issue where the variable Hotspot_CurHi could go below 0, causing a crash - Fixed the issue where airbags deflated while still bouncing, damaging the rover 0000138 - Fixed the physics detail issue where small or medium rovers would not land 0000035 - Fixed the issue where switching from Space Program to Editor left you with a static camera 0000009 - Fixed a crash in the CTR tab when pressing SELECT and no items were present 0000016 - Fixed the terrain not meeting up with the rock walls in Gale Crater 0000023 - Fixed several levitating rocks in Gale Crater - Optimized several shaders 5th August 2013: - Added the Change Log viewer to the main menu - Added 'Never freeze on alt+tab' launch parameter to Steam - Fixed an issue with the Night Owl achievement, where an Editor-spawned vehicle could not complete it - Fixed several issues with the Gravon arcade console - Fixed the issue where the low resolution camera effect was carried over to the main menu 0000019 - Fixed an issue with the main and menu renders not filtering on resolution scales of greater than 1x - Fixed levitating rocks in Kaiser Crater 2nd August 2013: - Enabled the Gravon game console in the Mission Control room - Fixed a crash with Index out of range (-4 >= 256) in scripts/Entities/VehicleWidgetHandler.h:108 0000029 - Hid 3 achievements by default 1st August 2013: - EARLY ACCESS RELEASED
  22. setovercast still not working

    Why is setovercast still not working? This is really some kind of joke. Instead of tweaking uniform patches and colors, this seems to be more important...
  23. Hello! In order to complement the release of StalkerGB's British Infantry I'm pleased to release Da12thMonkey's Retexture of the Arma 3 CH-49 to represent a Royal Air Force Merlin HC3a. Download: http://www.mediafire.com/download/09yqd5w9mzsq7cq/SDC_MerlinHC3.zip
  24. I am using the latest arma 2 combined operations beta patch (build 107882) along with these command lines -nosplash -maxMem=2047 -cpuCount=4 -exThreads=7 Just recently got a new SSD. Idk why it stopped me in middle of game. Did a google search and nothing came up for Battleye Corrupted Memory #55 I knew that battleye had a update recently.
  25. i want to set damage of the vehicle that i'm driving to zero how can i do that? for example "player" is the name of the player now what is the name of his vehicle? ---------- Post added at 18:33 ---------- Previous post was at 17:17 ---------- i got my answer:D use this command and it will give you the object of vehicle you drive vehicle player
×