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 Reforger
    • Vigor
    • DAYZ
    • ARMA 3
    • ARMA 2
    • YLANDS
  • MOBILE GAMES
    • ARMA MOBILE OPS
    • MINIDAYZ
    • ARMA TACTICS
    • ARMA 2 FIRING RANGE
  • BI MILITARY GAMES FORUMS
  • BOHEMIA INCUBATOR
    • PROJECT LUCIE
  • OTHER BOHEMIA GAMES
    • ARGO
    • TAKE ON MARS
    • 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
  • Die Hard OFP Lovers' Club's Topics
  • ArmA Toolmakers's Releases
  • ArmA Toolmakers's General
  • Japan in Arma's Topics
  • Arma 3 Photography Club's Discussions
  • The Order Of the Wolfs- Unit's Topics
  • 4th Infantry Brigade's Recruitment
  • 11th Marine Expeditionary Unit OFFICIAL | 11th MEU(SOC)'s 11th MEU(SOC) Recruitment Status - OPEN
  • Legion latina semper fi's New Server Legion latina next wick
  • Legion latina semper fi's https://www.facebook.com/groups/legionlatinasemperfidelis/
  • Legion latina semper fi's Server VPN LEGION LATINA SEMPER FI
  • Team Nederland's Welkom bij ons club
  • Team Nederland's Facebook
  • [H.S.O.] Hellenic Special Operations's Infos
  • BI Forum Ravage Club's Forum Topics
  • Exilemod (Unofficial)'s General Discussion
  • Exilemod (Unofficial)'s Scripts
  • Exilemod (Unofficial)'s Addons
  • Exilemod (Unofficial)'s Problems & Bugs
  • Exilemod (Unofficial)'s Exilemod Tweaks
  • Exilemod (Unofficial)'s Promotion
  • Exilemod (Unofficial)'s Maps - Mission Files
  • TKO's Weferlingen
  • TKO's Green Sea
  • TKO's Rules
  • TKO's Changelog
  • TKO's Help
  • TKO's What we Need
  • TKO's Cam Lao Nam
  • MSOF A3 Wasteland's Server Game Play Features
  • MSOF A3 Wasteland's Problems & Bugs
  • MSOF A3 Wasteland's Maps in Rotation
  • SOS GAMING's Server
  • SOS GAMING's News on Server
  • SOS GAMING's Regeln / Rules
  • SOS GAMING's Ghost-Town-Team
  • SOS GAMING's Steuerung / Keys
  • SOS GAMING's Div. Infos
  • SOS GAMING's Small Talk
  • NAMC's Topics
  • NTC's New Members
  • NTC's Enlisted Members
  • The STATE's Topics
  • CREATEANDGENERATION's Intoduction
  • CREATEANDGENERATION's HAVEN EMPIRE (NEW CREATORS COMMUNITY)
  • HavenEmpire Gaming community's HavenEmpire Gaming community
  • Polska_Rodzina's Polska_Rodzina-ARGO
  • Carrier command tips and tricks's Tips and tricks
  • Carrier command tips and tricks's Talk about carrier command
  • ItzChaos's Community's Socials
  • Photography club of Arma 3's Epic photos
  • Photography club of Arma 3's Team pics
  • Photography club of Arma 3's Vehicle pics
  • Photography club of Arma 3's Other
  • Spartan Gamers DayZ's Baneados del Servidor
  • Warriors Waging War's Vigor
  • Tales of the Republic's Republic News
  • Operazioni Arma Italia's CHI SIAMO
  • [GER] HUSKY-GAMING.CC / Roleplay at its best!'s Starte deine Reise noch heute!
  • empire brotherhood occult +2349082603448's empire money +2349082603448
  • NET88's Twitter
  • DayZ Italia's Lista Server
  • DayZ Italia's Forum Generale

Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


Website URL


Yahoo


Jabber (xmpp)


Skype


Biography


Twitter


Google+


Youtube


Vimeo


Xfire


Steam url id


Raptr


MySpace


Linkedin


Tumblr


Flickr


XBOX Live


PlayStation PSN


Origin


PlayFire


SoundCloud


Pinterest


Reddit


Twitch.Tv


Ustream.Tv


Duxter


Instagram


Location


Interests


Interests


Occupation

Found 43 results

  1. We are a small but growing community looking to fill developer spots on our team. If you have experience, preferably scripting, please reply with your information so I can get in contact with you. Thanks!
  2. Hi there, My name is Caleb and I am the Founder of a take-place Community which is known as "VanquishRP". I am looking for available server developers who would be willing to help around the clock with server maintenance and setup. The server I will need help with is an Altis Life server in which I would like to customize to the community's liking. I would also like to set up a forum for this server which will require a little programming knowledge. Please get back to me ASAP if you are willing to help me out! You can reach me on my email: vanquishrp@gmail.com Personal email: calebjasonallen@hotmail.co.uk Or simply through this forum! Many thanks and hope to see you soon!
  3. Hi! Are you interested in the RP (roleplaying) scene in Armaverse? Make sure to join our active Discord server right away! Are you an RP player? follow the progress of various RP projects to stay updated with the latest news in the RP scene of Armaverse discuss directly with the project developers to give them ideas and feedback to help them develop better gamemodes find other people interested in RP to play with Are you an RP developer? follow the progress of various RP projects to stay updated with the latest news in the RP scene of Armaverse recruit talented people to your team via the dedicated recruitment channel exchange ideas with other developers and the players to make your gamemode even more awesome get a dedicated channel for your project where you can show your shiny latest features and discuss with the community about it Are you an RP framework developer? follow the progress of various RP projects to stay updated with the latest news in the RP scene of Armaverse recruit talented people to your team via the dedicated recruitment channel take part in collaborative technical discussions with experienced developers to help you deliver framework featuring the latest innovations in the scene get a dedicated channel for your framework where you can show your latest shiny features and discuss with the community about it The community has just been founded but we already have tens of members, several RP projects and we're growing every day. Most importantly, the community and the discussion are already pretty active and people are genuinely helping each other, helping everyone to have even more awesome roleplaying experience in Arma! Join us today! Join us via the link below! https://discord.gg/hBzT2v7 Regards, Ezcoo
  4. 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:
  5. Hi! I'm Ezcoo, founder of Task Force Northern Wind. Task Force Northern Wind is intended to be a small group of developers specialized in developing multiplayer gamemodes and the required content for them in agile manner in Arma 3. The group name and logo describe the group's vision: just like the icy-cold northern wind hitting you in the face when you step out of the door in Nordics, our goal is to create immersive experiences that make players concretely feel, whether it's excitement, fear or passion. The group will be shaped by its members, which means that every member – including you – has a good chance to affect the direction we'll be taking in our future projects. I decided to found the group because I've been in the Arma modding (mostly mission editing) scene for years, but haven't accomplished much. I started as a complete noob back in 2012, having no idea of anything, but got constantly better at my niché, game design, with the right mixture of inspiration and perspiration. I consider myself pretty skilled in it nowadays. I've been part of several ambitious projects that didn't take off for some reasons: either they turned out to be too large projects for the team or – most importantly – the chosen development method was suboptimal considering the ambitiousness of the projects. Regarding the latter reason, it took me a while to understand why I was failing to deliver despite of having the honor to work with such amazing teams of developers I actually was working with. Eventually I figured it out. The reason is that I'm strongly the type of developer that utilizes agile methods with very short feedback loop and iteration interval. I've been working with and in teams that have had developers from all around the world, which lead to a single iteration lasting for a day or even several days, which, in turn, lead to difficulties in managing and designing the project on my part. That's why I decided to found Task Force Northern Wind – a developer group deploying a set of practices that utilize agile development and tight cooperation between developers, ultimately leading to better results. Task Force Northern Wind is looking for you, if you're able and willing to take part in development of multiplayer gamemodes during European noons, meaning approximately the time between 09:00 and 19:00 GMT. We're seeking people with a friendly and cooperative mindset; in addition, while tolerance to the consistently present bad humor is not required, it just will make your life a lot easier! If you're a scripter/programmer, we'd love to hear from you if: you master full stack development from database setup and integration to user interfaces in Arma, especially considering the multiplayer environment; OR you master some of the skills required in multiplayer mission development and you're available to work with other developers when they need you approximately during the above-mentioned time window. If you have other skills that you think we might be interested in, make sure to contact me on Steam or join our Discord and poke us! See you on the battlefield!
  6. 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.
  7. 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:
  8. 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
  9. 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
  10. 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 ;-)
  11. 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; };
  12. 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.
  13. 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
  14. roguetrooper

    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...
  15. 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
  16. 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.
  17. 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
  18. Hi, I am trying to reinstall Iron Front from scratch but I am having problems locating the correct patches - the ones I had backed up are reporting as corrupted. Is there a full list of patches from the original along with download links anywhere? I have the version from the BI Store. I have the DLC but it refuses to work unless the game is patched! Regards Jedra
×