Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

♻ KeyCache-Garbage Collector #2186

Merged
merged 7 commits into from Nov 7, 2021
Merged

♻ KeyCache-Garbage Collector #2186

merged 7 commits into from Nov 7, 2021

Conversation

CalebSerafin
Copy link
Member

@CalebSerafin CalebSerafin commented Nov 1, 2021

What type of PR is this.

  • Bug
  • Change
  • Enhancement
  • Library Additions

What have you changed and why?

  • Added Garbage Collection Component of KeyCache.

But What is KeyCache???

  • KeyCache's goal is to reduce data sent over a network.
  • It can achieve this by replacing commonly used identifiers with a shortID.
  • However, this technology can be used to create translation tables for any data.
  • Translations can go stale and expire, this is preferable for a DNS-like implementation where the server holds all translations, and the client only needs to use a translation for a short period.
  • KeyCache is intended to be used as middleware before and after remoteExecution. Therefore, it cannot be directly called from another machine. Only the server can directly update translations on clients.
  • The parent code must handle the propagation of translations.
  • The most critical part of expiring translations is the garbage collector. Therefore, this PR will add that component.

Tell us about this Garbage Collector

  • This garbage collector finds stale translations and deletes them.
  • A concurrent generational garbage collector was implemented.
  • Generational GCs are based on life's tough truth that most objects die young. See https://docs.microsoft.com/en-us/dotnet/standard/garbage-collection/fundamentals#generations for a description.
  • All new items are added to generation 0. If it not stale on this pass, it is promoted to generation 1.
  • Generation 1 checks items at a slower pace. If items survive this pass, they are promoted to generation 2.
  • Generation 2 checks items at an even slower pace. Items are not promoted past this point.

Please verify the following and ensure all checks are completed.

  • Have you loaded the mission in LAN host?
  • Have you loaded the mission on a dedicated server?

Is further testing or are further changes required?

  1. No
  • Yes

What do I need to review?

  • You don't need to review the fields under /Tests/
  • All functions that have content need a review
  • CfgRemoteExec can use a review as well.

How can the changes be tested?

Steps:

/*
Run in order.
Make sure that the previous test finishes before starting next.
If the previous test failed, it's likely that the following will too.
*/

// Recommended
call compileScript ["functions\Utility\KeyCache\Tests\unitTest_garbageCollector_basicPromotion.sqf"];
call compileScript ["functions\Utility\KeyCache\Tests\unitTest_garbageCollector_timedPromotion.sqf"];
call compileScript ["functions\Utility\KeyCache\Tests\unitTest_garbageCollector_basicDeletion.sqf"];
// Will take ≈10 minutes. Game will still run at 60fps.
call compileScript ["functions\Utility\KeyCache\Tests\unitTest_garbageCollector_shortFpsStressTest.sqf"];

@CalebSerafin
Copy link
Member Author

Long Stress Test Data

69 Million items were registered for GC. As they were being added, an equilibrium of ≈300 thousand soon-to-be GCed items formed.

Note: Arrays can't handle more than 10 million, and integers in scalars can't handle more than 16 million.

The GC uses buckets per generation to avoid array overfilling.
Raw data is available to the Offical Dev Team on its Discord.
Imgur

The naive analysis might be that GC caused those lag-dips.
However, the GC is constantly scanning, promoting, and deleting items as noted by the equilibrium.
The total amount of non-deleted objects becomes reduced proportionally to the frame rate.
Therefore, the reduced framerate slowed down the stress-test script.
Therefore, It can be concluded that the GC outperformed the stress-test script.

@CalebSerafin CalebSerafin changed the title KeyCache-Garbage Collector ♻ KeyCache-Garbage Collector Nov 2, 2021
@killerswin2
Copy link

5 empty files? Are they used in later versions, needed for something else, or holdover files?

@killerswin2 killerswin2 added the Change requested A change has been requested, and this can't be merged until it's done. label Nov 3, 2021
Copy link

@killerswin2 killerswin2 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Noice

@killerswin2 killerswin2 added Ready for merge and removed Change requested A change has been requested, and this can't be merged until it's done. Review pending labels Nov 3, 2021
Copy link
Collaborator

@HakonRydland HakonRydland left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

mostly good, dont really like the empty functions, should be added rn or when you actually want to implement the functionality

@CalebSerafin
Copy link
Member Author

The function files have been put there and registered to functions.hpp and CfgRemoteExec.hpp in one swoop. Next change they will be filled.

@Bob-Murphy Bob-Murphy added this to the 2.5.X milestone Nov 7, 2021
@Bob-Murphy Bob-Murphy merged commit ba6f3e7 into unstable Nov 7, 2021
@CalebSerafin CalebSerafin deleted the CS-KeyCache branch November 21, 2021 17:17
Lazejun added a commit to Lazejun/A3-Antistasi that referenced this pull request Feb 1, 2022
commit 0aa2e050c99241ba4d332e372696bcdbaf4c4c73
Author: Bob-Murphy <50651578+Bob-Murphy@users.noreply.github.com>
Date:   Sat Jan 29 19:43:18 2022 +0100

    update version

commit 8e42fd868c729f34fafe5068ea188bfa63a65c67
Merge: d4ad4c4a 092e766b
Author: Bob-Murphy <50651578+Bob-Murphy@users.noreply.github.com>
Date:   Sat Jan 29 19:34:50 2022 +0100

    Merge pull request #2232 from official-antistasi-community/HakonRydland-workshopUpdate_devPatch2

    fix error in checkout action

commit 092e766b3223838f0da85303fe544054637a5214
Author: HakonRydland <61709767+HakonRydland@users.noreply.github.com>
Date:   Sat Jan 29 19:32:23 2022 +0100

    fix error in checkout action

commit d4ad4c4a11c0c06b40610e588ecbdd65f027806f
Merge: b6c882e2 96c3e889
Author: Bob-Murphy <50651578+Bob-Murphy@users.noreply.github.com>
Date:   Sat Jan 29 19:24:32 2022 +0100

    Merge pull request #2231 from official-antistasi-community/HakonRydland-workshopUpdateDev

    added workflow for unstable publishing

commit 96c3e88992e3c7737789b5d4b11b70f50616f5bf
Author: HakonRydland <61709767+HakonRydland@users.noreply.github.com>
Date:   Sat Jan 29 19:18:44 2022 +0100

    added workflow for unstable publishing

    builds and updates unstable on commit

commit b6c882e2cd8c94483251c87379e33fbd8084e67d
Author: HakonRydland <61709767+HakonRydland@users.noreply.github.com>
Date:   Sat Jan 29 19:17:33 2022 +0100

    Antistasi builder (#2230)

    ## What type of PR is this.
    1. [ ] Bug
    2. [x] Change
    3. [ ] Enhancement

    ### What have you changed and why?
    Information:
        Build tool for antistasi mod v1
        includes only base functionality

        arguments are:
        -a3ToolsDir: absoulute path to A3 tools directory
        -debug: currently no effect (for future stuff)
        -sign: relative path to biprivatekey for pbo signing

    ### Please specify which Issue this PR Resolves.
    closes #XXXX

    ### Please verify the following and ensure all checks are completed.

    1. [ ] Have you loaded the mission in LAN host?
    2. [ ] Have you loaded the mission on a dedicated server?

    ### Is further testing or are further changes required?
    1. [x] No
    2. [ ] Yes (Please provide further detail below.)

    ### How can the changes be tested?
    Steps:

    ********************************************************
    Notes:

    * AntistasiBuilder v1.0.0

    * removed dev deploy

    * delete bob nonesense

    * added builder for automated publishing

commit 800c03e4be2e75244afd282a17b9f7a95f492bed
Author: Bob-Murphy <50651578+Bob-Murphy@users.noreply.github.com>
Date:   Wed Jan 26 15:13:55 2022 +0100

    Delete test-nonsense.yml

commit 8612e9aa3cee50d8c14cb8d36589310e5e8080a5
Author: Bob-Murphy <50651578+Bob-Murphy@users.noreply.github.com>
Date:   Sun Jan 23 17:26:40 2022 +0100

    Update test-nonsense.yml

commit b94463ebe2ed9c40f506f16df9853c05aabca01f
Author: Bob-Murphy <50651578+Bob-Murphy@users.noreply.github.com>
Date:   Sun Jan 23 17:25:00 2022 +0100

    Update test-nonsense.yml

commit 6951867c51221b80d4360ce485ce7a51575c53fd
Author: Bob-Murphy <50651578+Bob-Murphy@users.noreply.github.com>
Date:   Sun Jan 23 17:12:27 2022 +0100

    create test action

commit 9632052efd378cd3cd002f8cea30ed265cbccbe8
Author: Bob-Murphy <50651578+Bob-Murphy@users.noreply.github.com>
Date:   Sun Jan 23 15:53:08 2022 +0100

    update build instructions in readme

commit 7f39169b1fbd283511eb44f199a0a51bc7197503
Author: HakonRydland <61709767+HakonRydland@users.noreply.github.com>
Date:   Sun Jan 23 15:42:16 2022 +0100

    fix: added missing compile before preprocessFileLineNumbers (#2220)

    ### What have you changed and why?
    Information: loadAddon forgot to compile the preocessed file before trying to run it, causing crash on game start with any addon loaded

    ### Please specify which Issue this PR Resolves.
    closes #2219

    Notes:
    * fix: added missing compile before preprocessFileLineNumbers
    in loadAddon

    * fix: added missing compile before preprocessFileLineNumbers
    in loadAddon

    * fixed broaken addon loading

    * fixed loading vehicles by class

commit 35d5a47413c4ee7aa63471cb0991f60642aec988
Author: HakonRydland <61709767+HakonRydland@users.noreply.github.com>
Date:   Sun Jan 23 14:25:07 2022 +0100

    fixed wrong state index being passed to update state (#2225)

    * fixed wrong state index being passed to update state

    * made sources public on refuel and load to allow seeing faction fuel

commit 6f450c27720feed6c713bb0956cac1a0ab0bf5bd
Author: HakonRydland <61709767+HakonRydland@users.noreply.github.com>
Date:   Sat Jan 22 22:29:53 2022 +0100

    Change - Antistasi Mod  (#2184)

    ## What type of PR is this.
    1. [ ] Bug
    2. [x] Change
    3. [ ] Enhancement

    ### What have you changed and why?
    Information: Antistasi the mod!!!

    * Paths for UPSMON compilation have been moved over to use QPATHTOFOLDER macro as its no longer mission root relative
    * Templates are now config defined to allow support for 3rd party template and addonsVics extension mods
    * all includes of the `common.inc` file have been switched for the `script_component.hpp` file that is located in the root of each addon
    * folder structure have changed due to needs of being a mod `A3-Antistasi` to `A3A\addons\{addon folders}`
    * needed files added for the configuration of the addons
    * functions are now in config.cpp
    * added all maps as part of the new maps addons
    * stringtable split to where the apply, garage stringtable entries into the stringtable in the garage addons, map specific to maps etc
    * added a skimmed down copy of the BI functions compiler to functions -> Debug for the live editing ability
    * moved all functions that were not already apart of CfgFunctions into there respective category folder and updated all references

    ### Please specify which Issue this PR Resolves.
    closes #XXXX

    ### Please verify the following and ensure all checks are completed.

    1. [x] Have you loaded the mission in LAN host?
    2. [x] Have you loaded the mission on a dedicated server?

    ### Is further testing or are further changes required?
    1. [x] No
    2. [ ] Yes (Please provide further detail below.)

    ### How can the changes be tested?
    Steps:

    # How to build (Mod)
    ## Common setup
    * install Arma 3 Tools in the same steam library that Arma 3 is installed
    ## With Vs code Arma Dev Extension
    ### First time setup
    * Install extension from [markedplace](https://marketplace.visualstudio.com/items?itemName=ole1986.arma-dev)
    * configure the extension from the Antistasi workspace by opening the command pallet <kbd>Ctrl</kbd>/<kbd>⌘</kbd> + <kbd>P</kbd> and running the `Arma 3: configure` command
    * fill in the configuration `.json` file something like this
    ```json
    {
    	"title": "A3 Antistasi",
    	"name": "A3A",
    	"author": "Official Antistasi dev team",
    	"website": "https://antistasi.de/",
    	"version": "2.5.4",
    	"buildPath": "build",
    	"privateKey": "", //add the path to a private bikey for signing when building
    	"serverDirs": [],
    	"serverUse32bit": false,
    	"clientDirs": [ //should list all addons the mod provides
            "A3A/addons/core",
            "A3A/addons/Garage",
            "A3A/addons/JeroenArsenal",
            "A3A/addons/maps"
        ],
    	"clientMods": [],
    	"ftpConnection": {},
        "steamPath": "H:\\SteamLibrary" //arma 3 install steam library, arma 3 tools should be in the same folder
    }
    ```
    * Run the command `Extensions: Open Extension Folder` and navigate to `ole1986.arma-dev-0.0.20 -> out -> helpers -> runArma.js -> ln 54` and add `'-debug'` to the list
    ```js
    let args = [
                    '2', '1', '0', '-exe', 'arma3_x64.exe',
                    '-mod=' + clientMods.join(';'),
                    '-nosplash',
                    '-world empty',
                    '-skipIntro',
                    '-debug'
                ];
    ```
    * now run the `Arma 3: Build` command, this will output into your build folder with packed addons (and signed if you have a key designated)
    * run the `Arma 3: Toggle code live` command this will create symlinked folders in your arma directory for filepatching, allowing "live editing" of code, by editing the source files (dosnt include anything processed by the config.cpp)
    * run the `Arma 3: Run client` or `Arma 3: Run client (with logging)` command
    arma should start with everything ready for you, (the logging alternate will open the rpt thats created on arma launch)

    ## With Arma 3 Tools
    ### Packing
    * open `Addon Builder` from `Arma 3 Tools`
    * click options
      * add to `List of files to copy directly` this line `*.p3d;*.paa;*.hpp;*.sqf`
      * click the tree dots next to `Path to project folder` and navigate to the repository's `A3A` folder
      * optionally add a path to a `.biprivatekey` for signing, this allows you to leave key verification on for dedicated server testing
    * back in the main window, add a source directory, this will be in turn each addon folder in `repository -> A3A -> addons -> {folder to build}`
    * and add a destination folder, this would be for example `repository -> build -> @A3A -> addons`
    * ensure for testing that it dosnt binarize the files
    * now to simply press build and repeat for each folder in the `A3A -> addons`

    ### Running
    * copy the folder in your build directory to your arma 3 directory (or symbolic link it, recommended)
    * in the arma 3 launcher, under the `Mods` tab click `...More` -> `Add watched folder...` -> `Add 'Arma 3' folder`, this will automatically add local mods in yuor arma directory to your mods list for easy loading

    ### Live editing
    * for live editing you need to create this folder structure in your arma 3 directory `x\A3A\addons`, and the create symbolic links from each folder in your repositorys `A3A\addons` folder to the one in your arma directory
    * next you need to go in your arma 3 launchers `Parameters` tab and under `All Parameters` section `Advanced` thick of the parameter `Enable File-Pathcing`, then under the section `Author` thick of the parameter `Debug Mode` (i recommend favoriting these two for ease of use later on)
    * now when you start with the build loaded under the `Mods` tab, it will start in `Dev` mode and allow for recompilation of functions on the go either by reloading the missing or by calling the function `A3A_fnc_prepFunctions`

    TBD -> Testing on dedicated server instructions ( basic mod installation works fine, but a more automated process should be made for ease of testing)

    ********************************************************
    Notes:

    * Add files via upload

    * Delete fn_LootToVehicle.sqf

    * added optional arguments for function

    [object, //required
    WeapTypes, WeapNum,     //opt
    ItemTypes, ItemNum,     //opt
    AmmoTypes, AmmoNum,     //opt
    ExplosiveTypes, ExplosiveNum,   //opt
    AttachmentTypes, AttachmentNum,     //opt
    BackpackTypes, BackpackNum,     //opt
    HelmetTypes, HelmetNum,     //opt
    VestTypes, VestNum,     //opt
    DeviceTypes, DeviceNum  //opt
    ] call A3A_fnc_NATOcrate;

    * fix merge conflict, my side

    * Fixed wrong var in chooseSupport
    Fixed `hasAce` missing the new prefix in new garage

    * disabled ambient noise when in garage (see #1988)

    * added requested settings disable option for ammo fuel and repair services in garage

    * Add 2 Missing Trucks to Coveredvehicles list

    Co-Authored-By: HakonRydland <61709767+HakonRydland@users.noreply.github.com>

    * added locked by and looking at tooltip

    * added customisation preservation

    * fix locked name for the tooltip not updating on server

    * fix null object check not going before cat index is gotten

    * unified vehicle id naming in log lines

    * improved commander unlock log to include owner name

    * decided to leave the compat in

    * ⚙ refactor forEach loops on hashmaps to use the _y magic variable

    * 🔴⛓added disconnect handler for player crashes while in the garage or placing

    * removed log line since placement is done outside of garage, and the block condition was changed to reflect that

    this runs for every player disconnect

    * fixed null selection error

    * Factions now select template from the params

    * 🤖💻 auto picking added

    * 🧾 added  logging when autopicking

    * 🧾 added invalid faction selected error log

    * corrected us marines being marked as factions dependant

    * updated header

    * added fallback category index

    * 🩹 corrected misslabeling in param OccupantsFactionEnum

    * partial move to new template (WIP)

    * move to new template in the code base

    * fixed occ and inv faction not getting broadcast
    fixed typo in rebel groups
    removed the two testing helis in helisLight (USAF template)

    * corrected casing in compileGroups

    * added missing template validation

    * removed case for petros in unitTraits
    (this was wrong anyways as i forgot to retrive the actuall unit data, i just got the name)

    * aperantly some keys in faction was side???

    * fixed missing selectRandom for mortar spawns on createAIOutposts/Airplane

    * roadblocks use low tier units when low tier roadblock

    * Add Static Weapons to staticsToSave

    * Update 3CBFactions_Logistics_Nodes.sqf

    Add RBS70,
    Add High M240,
    Add new Pickup Truck

    * Match variable names, consistency.

    * ⚙🛠 Initial review change request by @jaj22
    - compatibilityLoadFaction: Fixed casing, removed faction broadcast
    - compileGroups: added rifleman to AT & AA AI groups, fixed casing
    - LoadAddon: removed faction broadcast
    - initVarServer: added faction bradcast here so to not spam bradcasting durring template loading, broadcast is now also publicVariabled to be more reliable (have higer priority for JIP)
    doubt this is actually needed but dosnt hurt.

    * removed the doubled rebel "singular units" altered codebase to reflect this
    Notde: im unsure if something may have been missed while making this change, but all uses of rebel groups afaik specifically is with the `FactionGet(reb,"groups")` macro. so i **should** have caught all the cases.

    * fixed a few mistakes from the doubled rebel units removal

    * fixed rebel rifleman being treated as array in initVarServer

    * fixed array being passed to vehAvailable

    * changed grunt to rifleman, was SL on inv before (mistake?)

    * fixed incorrect pricing for garrison add

    * fixed unit type being passed as unit types to garrisonUpdate

    * fixed reinfPlayer treating class type as array

    * fixed incorrect path in include

    * fixed more incorrect include paths

    * fixed all police vehicle not being set as vehiclesPolice
    but Police instead

    * fixed bug in initVehClassToCrew where incorrect pool was given a crew type
    was rebel vehicles, supposed to be AI militia vehicles

    * added template asset validation error logging

    * fixed pring when no invalid entries

    * fixed minefieldAT && APERS being checked as magazines

    * fixed bad check on intel entries

    * whoopsi

    * updated new log line indicator

    * log bad mag type and bullet count in validateWeaponMagazine

    * Match cases on TKA West

    * Include Arid Marines Template

    * moved new templates to right foldr, not in selector yet

    * fixed errors in validation proccess

    * fixed print function and incorrect config change in magazines validation

    * "not_supported" is not supported anymore 😉

    * added missing handling of asset lacking

    * fix milBuildings lacking missing asset safety

    * empty preference return empty string as if nothing was prefered

    * old system wasnt designed for this, reverted some changes to resolve this for now...
    a rework would be welcome in this area

    * fixed incorrect check for no uavs

    * Update Templates, Selector and Params

    Update to new Format of this PR

    * Fix bad Class

    * Update Mines to new Format

    * update check small UAV

    * added empty pool protection to attack HQ

    * fixed old unit from group composition selection

    * error handling improvements

    * fixed missing semicolon

    * removed dupe code block

    * Rangefinder casing consistency

    * Switched variables to camelCases

    * corrected wrong hashmap use in createOutpostsFIA
    fixed casing and old syntax

    * simplified getting surrender create type

    * added missing selectRandom
    removed horrible formating

    * spawnLight addapted to hashmap change

    * removed unnececary doubled groupData

    * resolved bad verification on initialRebelEquipment

    * Added case correction to loadStat -> garrison
    - added loadout name casing lookup table to loadStat garrison case
    - added debug lines for bad entries
    - tabs -> spaces

    * correct toolkit casing (including variable names cause im lazy

    * corrected ace medical casing

    * fixed loadout validation (fuck magwells)

    * corrected wrong param passed to verifyLoadoutsData

    * Fix Casing

    * correct bad class casing in config
    empty class defaults to valid

    * added auxPointerSlot

    * Update 3CB_AI_AAF.sqf

    * "getVariable" -> "get"

    * re added missing rebel group data

    * corrected faulty retrival of assemleTo
    corrected doubled returned cost
    (2 backpacks refounded for the combined price each)

    * corrected reverted typo

    * fixed incorrect garrison definition

    * fixed variouse syntax errors

    * manual revert of loadStat to unstable (bad merger)
    and reaplied needed changes for moveToNewTemplates
    tabs -> spaces

    * Review changes 11.10.2021
    - added a "staticMortars" to A3A_faction_all
    - switched rifleman to marksman for militia snipers
    - corrected wrong indentation in createSDKgarrisonTemp
    - corrected error log argument count
    - fixed order of operation problem in reinforcementsAI
    - simplified/corrected auto pass vehicle check in vehAvailable
    - corrected naming convention violation in wavedCA
    - added police squad composition to groups data
    - corrected getting unarmed loadout name from faction data to groupe data
    - corrected equipRebel array checks to string checks for unit type
    - added missing transport helis to saveLoop asset preservation
    - corrected incorrect plane pool being used in ASF routine
    - simplified target type check for apc with A3A_faction_all in CAS routine
    - removed doubled transport helis in QRF replacement pool

    * Requested changes @jaj22, Review 12.oct 2021

    -VehiclesNormal and VehiclesAir replaced, entry removed from faction data

    - Fixed various casing issues

    - Removed old civ vehicle data for auto_civ

    - Removed redundant log char limit work around in template validation

    - fixed type error and wrong entry check in goUndercover

    * case correcting

    * added missing variable for faction/group data

    * part 1 - moved to mod

    - selector replaced with config base template selection
    - old a3a scripts relying on execVM, preprocessFileLineNumbers etc. now compiled as functions and moved into functions
    - garage and JNL moved to own component, while most other remains as core
    - missions now compiled under component maps
    - temp navgrid path defined in maps\config.cpp
    under class A3A >> NavGrid >> toLower worldName
    - upsmon paths updated

    * moveToNewTemplates functions.hpp changes

    * old include fixed

    * fixed bad macro call in aivehinit

    * fixed bad use of _faction instead of macro OccAndInv

    * changes to functions compilation to allow live editing
    (still needs attributes handling)

    * attributes handling to JIT function compilation

    * added warning to developers and empty a3a class to missionConfigFile

    * removed garage stringtable entries from core (it was copied earlier)

    * removed stringtable entries from maps addon from core (moved previously)

    * removed exces entries from maps stringtable that bellong in core

    * renamed Debugging to Debug

    * added debug recompile for live editing to addons: Garrage, JeroenArsenal

    * fixed bad preproccessor error
    trying to parse macro Debug when it was folder Debug

    * fixed leftover _groupData to _faction

    * fixed include path

    * added a bit of safety to logMacros

    * updated required game version

    * updated compiler to BIS standards

    * Only run pre/postInit funcs when in a A3A mission

    * preInit skip added

    * fixed bad log argument in selector

    * navgrid restructuring per meeting 16 oct 2021

    * removed old navgrid path table

    * block preInit when mission is not A3A

    * removed old auto_civ

    * removed outdated manual

    * fixed bad logi node loading order, could potentialy miss some nodes based on load order

    * added a how to build guide for the mod

    * made it clearer how to run commands in VS code

    * fixed typos

    * corrected bad config path in world defaults selection

    * fixed bad class name of variantOf

    * fixed camo without faction fuckiong up skipping adding template to list

    * second try

    * fixed bad camo from world selection

    * stripped script macros common for depricated macros
    and likely to be unused macros

    * conflict resolutions

    * moved new functions into the new folder structure

    * updated mapinfo dynamic filepath construction, moved map info files into maps addon, renamed to mapInfo.sqf

    * fixed incorrect include paths for mapInfo and buyItem

    * fixed errors with merge conflicts

    * fixed including everything as cities

    * fixed qoutes around var in fuel initZones

    * chnaged default authors to have barb in it #originalAuthor

    Co-authored-by: Lazejun <57111907+Lazejun@users.noreply.github.com>

commit d6d68efa72315ebad5d6a64361fc724795a3b560
Author: HakonRydland <61709767+HakonRydland@users.noreply.github.com>
Date:   Fri Jan 21 12:50:20 2022 +0100

    Projects - Garage improvements (#2214)

    - Added synergy with fuel scarcity with actual fuel consumption on un-garage (vanilla still practically still has unlimited fuel due to vanilla fuel truck configs).
    - Added a long time requested QOL changes #2138 #2006
    - Added alphabetical sorting to the vehicle lists
    - Fixed a type causing an error in capacity check code
    - Added a wrapper around the info panel to aid with extending text OOB

commit d1c54cc3e782d719bda31e86bad15bf856090800
Author: Frederik Madsen <frederik@os-madsen.dk>
Date:   Tue Jan 11 13:35:47 2022 +0100

    Fixed various incorrect usages of defined macros (#2205)

    * Update fn_initServer.sqf to properly invoke Info_2

    Info_2 is defined with 3 parameters, but in this case it is passed (unintentially) 4 arguments, this means that the macro will instead be expanded to nothing.

    * Fixed various incorrect usages of defined macros

commit 8f05132a454859fddccf2e1b0f2b9b3b8634261e
Author: Ellis Nielsen <thecakebecamethelie@yahoo.com>
Date:   Mon Jan 10 15:41:02 2022 -0600

    Fuel part2 (#2207)

    * rename spawnLight, added price to item, add callback

    * removed dev

    * update header

    * changed spawned veh fuel

    * added nodes

    * final touches, changed hints, and nodes

    * changed vehicleFuelSource to array

    * add selling fuel capped to remaining amount

    * removed fuel canister

    * changes for review

    * init work

    * saved fuel

    * review changes

    * error checking

    * review change

    * added correct search

    * added funnies, fixed readability

    * removed space

    * review changes

    * updated save loop and loading

    * added fuel types for supported maps

    * changes to saves

commit 08ee05aee85acfbc8d040e4f405abf7b03ff7491
Author: Ellis Nielsen <thecakebecamethelie@yahoo.com>
Date:   Mon Jan 10 05:26:46 2022 -0600

    Removed bad return value in takistanInfo (#2210)

    * removed bad _disableTownName pass

    * fixed _disableTownName double

    * pass popValue

    * remove bad copy of townnames

    * fixed maldens third return

commit d9ee6f1ca1c8a20eae50615dc37f403c9af8c761
Author: Bob-Murphy <50651578+Bob-Murphy@users.noreply.github.com>
Date:   Mon Jan 10 09:05:49 2022 +0100

    Update takistanInfo.sqf

    deactivates "_disableTownName" as there is no entry and it breaks the mission

commit e428da2ad80672d3d8a0c1099b0c8dec5c623359
Author: Lazejun <57111907+Lazejun@users.noreply.github.com>
Date:   Sat Jan 8 22:35:39 2022 +0100

    Fixed Miscased Toolkit Funnies (#2209)

commit d1be62551f3fbd02fcc8a16c584645ac4dfe9d70
Author: Lazejun <57111907+Lazejun@users.noreply.github.com>
Date:   Fri Jan 7 22:34:39 2022 +0100

    Templates - Add Civ Loadout Creation, Update Reb/Civ Templates, Update Examples. (#2181)

    * Radio and Missing Mags changes
    ACP C2 (M1911) and Vermin (Vector) were missing mags
    Radio adjustment so they are the Same as in RHS Blue
    * Woodland Vanilla
    No DLC needed, Free content of Contact
    * Livonia
    * Woodland check
    Add Check for Woodlandmaps (Livonia, VT7, Chernarus summer)
    * Full Woodland
    * Full Desert
    * Begone Mrap
    Only Availible in Desert
    * Woodland detection
    Maps i know of can add more when i know there are more :)
    * Delete Vanilla_Occ_NATO_Woodland.sqf
    * Rollback just ignore
    * Update RHS_Occ_USAF_Arid.sqf
    * rollback
    * rollback
    * Update (#3)
    * Revert "Fix for acre2 radios not being recognized as a units radio"
    * Disable DES_heli mission as RHS templates lack data for it
    * Stringtable update
    Liberation of Tembelan --> Liberation of Tembelan Island
    Removed french version for that as it was incorrect
    * Mission update for Altis Blufor
    * Anizay mission update
    * Chernarus winter mission update

    * Tembelan Island mission update

    * License update for the Snow Storm Script by aliascartoons

    * Update changelog for 2.2

    * Delete temporary changelog for 2.2

    * Updated CSAT locations for new maps (#595)

    Co-authored-by: Wurzel0701 <31988396+wurzel0701@users.noreply.github.com>

    * Add a check to prevent breaching an empty or teamPlayer vehicle

    * Adds Ace SpareBarrel to ACE itemlist

    * Altis map overhaul

    - changed playable rebel slots to:
    	- 8 officers
    	- 6 riflemen
    	- 6 autoriflemen
    	- 6 grenadiers
    	- 6 combat life savers
    	- 6 engineers
    - Disabled simulation for helipads
    - Disabled simulation for H-barriers
    - Disabled simulation for containers and turned into simple objects

    * Malden map overhaul

    - Disabled simulation for helipads
    - Disabled simulation for H-barriers
    - Disabled simulation for containers and turned into simple objects
    - removed the large tents
    - changed playable rebel slots to:
    	- 8 officers
    	- 6 riflemen
    	- 6 autoriflemen
    	- 6 grenadiers
    	- 6 combat life savers
    	- 6 engineers

    * Altis Blufor map overhaul

    - changed playable rebel slots to:
    	- 8 officers
    	- 6 riflemen
    	- 6 autoriflemen
    	- 6 grenadiers
    	- 6 combat life savers
    	- 6 engineers
    - Disabled simulation for helipads
    - Disabled simulation for H-barriers
    - Disabled simulation for containers and turned into simple objects

    * Tanoa map update

    - changed playable rebel slots to:
    	- 8 officers
    	- 6 riflemen
    	- 6 autoriflemen
    	- 6 grenadiers
    	- 6 combat life savers
    	- 6 engineers
    - Disabled simulation for helipads

    * Livonia map overhaul

    - changed playable rebel slots to:
    	- 8 officers
    	- 6 riflemen
    	- 6 autoriflemen
    	- 6 grenadiers
    	- 6 combat life savers
    	- 6 engineers
    - Disabled simulation for helipads
    - Disabled simulation for Portable Helipad Lights and turned into simple objects
    - Disabled simulation for H-barriers
    - Disabled simulation for containers and turned into simple objects
    - removed the large tents

    * Anizay map overhaul

    - changed playable rebel slots to:
    	- 8 officers
    	- 6 riflemen
    	- 6 autoriflemen
    	- 6 grenadiers
    	- 6 combat life savers
    	- 6 engineers
    - Disabled simulation for helipads
    - Disabled simulation for H-barriers
    - Disabled simulation for containers and turned into simple objects

    * Chernarus summer map overhaul

    - changed playable rebel slots to:
    	- 8 officers
    	- 6 riflemen
    	- 6 autoriflemen
    	- 6 grenadiers
    	- 6 combat life savers
    	- 6 engineers
    - Disabled simulation for helipads

    * Chernarus winter map overhaul

    - changed playable rebel slots to:
    	- 8 officers
    	- 6 riflemen
    	- 6 autoriflemen
    	- 6 grenadiers
    	- 6 combat life savers
    	- 6 engineers
    - Disabled simulation for helipads

    * Kunduz map overhaul

    - changed playable rebel slots to:
    	- 8 officers
    	- 6 riflemen
    	- 6 autoriflemen
    	- 6 grenadiers
    	- 6 combat life savers
    	- 6 engineers
    - Disabled simulation for helipads
    - Disabled simulation for H-barriers
    - Containers turned into simple objects
    - removed the large tents

    * Tembelan Island map overhaul

    - changed playable rebel slots to:
    	- 8 officers
    	- 6 riflemen
    	- 6 autoriflemen
    	- 6 grenadiers
    	- 6 combat life savers
    	- 6 engineers
    - Disabled simulation for helipads
    - Disabled simulation for H-barriers
    - Disabled simulation for containers and turned into simple objects

    * Sparebarrel role back for this branch

    * Add ACE spare barrel

    Please specify which Issue this PR Resolves.
    closes #647

    * Altis/Tanoa PvP Loadout Updates + Fixes (#639)

    * Rework for Tanoa/PVP-Altis
    * Removes Tropical Hunters
    * Adds call for Altis loadouts
    * Adds call for Tanoa
    * Removes Altis call/Loadouts
    * Ace_M84 fix
    * Changes M84 flashbang to 2 M84s, no non-ace replacement

    * Readme update

    * Readme update

    * Version update to 2.2.1

    * version update to 2.2.1

    * roadsDB rename for Tanoa

    the roadsDB for Tanoa was simply called roadsDB.sqf - now is named roadsDBtanoa.sqf

    * mission.sqm overhaul

    Fixes one variable in every mission.sqm to fix the gamemaster module not loading every mod stuff in Zeus

    * Enables unit traits

    nothing more, nothing less

    * D-insertion

    * Enabling hint

    * Changes officers to teamleaders because FUCK ARMA

    * Adds traits for Blufor mission

    * mission.sqm update

    Changes all officer units besides Petros to teamleaders  for unitTraits compatibility

    * Unit type change

    changes the greenfor SL to a TL

    * unitTraits for PvP

    enables the unitTraits for PvP units

    * Show injured marker for ACE Unconsciousness

    Also show markers for vehicles if the driver is not a player (otherwise no markers will show)

    * Sets crate device params to max 1, up to 3 of each

    * Fixes crate item quantities being 1 lower than is correct.

    * Fixes issue with crate item types becoming unspawnable

    Specifically - player scaling could kick in, and reduce the item quantity to always be less than 0.5, meaning it would always round to 0 - making it so items in that category would never spawn in crates.

    * IEDs removed from vanilla starting gear.

    They have now been fucked

    * Unit update

    changes 2 TL to rifleman

    * Cover update

    Updates cover for Altis, Altis Blufor and Tanoa

    * deactivate _ambient_sound_al

    * Fices damn evil typo that breaks nato crates

    * Replaced all fnc_mp with RemoteExec(Call). (#620)

    Replaced all fnc_mp with RemoteExec(Call).

    This also fixes the initVar client spam.

    * Added default variables for all getVariable to avoid null errors (#622)

    * Added default variables for all getVariable to avoid null errors

    * Fixed wrong namespace (credits to John)

    * Clean up + Add New JNL Positions (#675)

    Cleaned up the JNL positions on existing vehicles and added, hopefully, all other vehicles from our
    current integrations.

    * Move radio tower repair to server side, fix bugs (#684)

    * Fix typo in initZones (#696)

    Fixed clear typo added in 2e2d7f7.

    * Make al_trembling quit silently when run on server/HC

    * Tanoa mission update

    * Livonia mission update

    * Flag exchange to FIA

    * milBuildings update

    adds following CUP buildings to the milBuildings:
    Land_Posed
    Land_fortified_nest_small_EP1
    Land_fortified_nest_small
    Fort_Nest
    Fortress1
    Land_GuardShed

    adds following vanilla buildings to the milBuildings:
    Land_BagBunker_Small_F
    Land_BagBunker_01_small_green_F

    Following items get a 50.cal
    Land_fortified_nest_small_EP1
    Land_BagBunker_Small_F
    Land_BagBunker_01_small_green_F
    Land_fortified_nest_small
    Fort_Nest
    Land_Hlaska

    * Altis Airfield Flag adjustment

    * updates mission.sqm of chernarus winter

    finally adds tover, barriers and shit

    * Fix typo

    inconcious --> unconscious

    * Change bogus remoteExecCalls to RemoteExec

    * Fix towed vehicles left with null attached objects

    * Fix some SP bugs (#712)

    Fixed some trivial SP bugs:

        Main UI garage button now redirects to the faction garage rather than blackholing.
        SP difficulty setup code now waits for its server init dependencies.
        SP player now gets the medic and engineer traits, as befor

    * Prevent hardcoded city pop data from overwriting processed data (#713)

    Moved the hardcoded city population data to initZones, which is the only place that it's used. Previously it was being initialized on clients & HCs. Since recent init order changes, it's been overwriting the city data from the server that's stored in the same logic object.

    initZones is a garbage fire, and reusing the same keys for completely different data is nasty, but this will fix problems for the moment.

    Also adjusted initZones to use the hardcoded pop data for Chernarus Winter, matching the behaviour for Chernarus Summer.

    * Fix updateReinfState to no longer have cross reinforcements (#694)

    Information: Fixed updateReinfState to avoid CSAT reinforcing NATO and the other way around

    * Fix updateReinfState to no longer have cross reinforcements

    * Reworked, based on Johns comments

    The script now differs for timed updates  versus marker change updates

    * Fixed a really minor bug that fucked up the whole system

    * Updated comments

    * Create new category for cargo backpacks, use it (#723)

    * Fix several arsenal bugs(#726)

    1. Fixed a bug where the arsenal used 24 rather than Antistasi's minWeaps param as the guest limit.
    2. Fixed a bug where weapon accessories bypassed the guest limit.
    3. Fixed some potential bugs with negative bullet counts and off-by-ones.
    4. Fixed a bug where grenades wouldn't be throwable after loading a loadout.
    5. Fixed a bug where the magazine guest limit was counting in mags rather than bullets.

    4 is arguably an Arma bug. `(vestContainer player) addItemCargo "HandGrenade"` demonstrates the problem, at least in vanilla

    * Malden mission sqm update

    Deletes a floating container

    * Update amount Civs

    Changes civ count from max 40 to max 5 initially

    * Changes fleight hight of helicopter

    40 to 60m to prevents helis crashing on hills

    * PVP Loadout assignment fix

    adds missing variables to playable pvp units on the maps:
    Anizay
    Malden
    Livonia

    * deletes empty lines

    * deletes empty lines

    * Fix case where an airstrike targets an airport with no runway

    * 3CB Fixes (#728)

    * 3CB TKA Traitor Fix

    Previously a Bluefor bodyguard, now a Ind Crewman.
    replaced the Bluefor Survivor with an IND one.
    changed out PVP Vehicles for TKA vehicles instead of BAF ones. (UAZ with DSHKM, Unarmed Hilux and Unarmed Closed Landrover)
    (Asked Meer)

    * Typo in Flagtexture

    * Typo in Flag

    * Updates the shape of the Issues button

    * tembelan island mission update

    Deleted some trees at Besar Airbase

    * New map preparation

    adds information for Virolahti and Kujari
    - roadsDB load info
    - info in initGarrosin
    - navGrids

    * Separate release & recruit actions on surrendered enemies

    * Cut the occupant aggro reduction to safer levels

    * Changes odd surrender dialog

    It seems out of place, given there's no other mention of religion anywhere in Antistasi.

    * Makes start with Long Range a parameter

    * Fix loadout container scrambling (#749)

    Fixed a bug introduced in #726 which caused some items to placed in the wrong uniform/vest/backpack container when loading a saved loadout.

    * Change default of startWithLongRangeRadio

    Set the default of "[TFAR] Start with Long Range Radio?" to yes as rebells have no reliable source for LRs.

    Co-authored-by: Spoffy <4805393+Spoffy@users.noreply.github.com>
    Co-authored-by: jaj22 <jaj22x@gmail.com>
    Co-authored-by: Bob-Murphy <50651578+Bob-Murphy@users.noreply.github.com>
    Co-authored-by: Wurzel0701 <31988396+wurzel0701@users.noreply.github.com>
    Co-authored-by: Jaffa <Jaffa@DeliciousJaffa.co.uk>
    Co-authored-by: SonorousMeerkat <52983798+SonorousMeerkat@users.noreply.github.com>
    Co-authored-by: Caleb Serafin <31820984+CalebSerafin@users.noreply.github.com>

    * Update Fork

    * Revert "Update Fork"

    This reverts commit f19541ebf1b796c4f8f5d675371325af07773fe1.

    * Revert "Update (#3)"

    This reverts commit ff83450226f06e1f9458ccafcfabda28638d94a8.

    * Casing

    * Syntax Error

    * Make Civ Creation Template bound.

    Add Loadout creation in Civ Templates,
    Add Checks for Loadouts instead of Unit Classnames,
    Remove _arrayCivs as its not used anymore.
    Remove redressing in CivInit as its all handled by the Templates now

    * Cleanup Rebell Templates, add DLC Uniforms if enabled. Tabs to Spaces in the files

    * Tabs to Spaces

    * Tabs to Spaces

    * Update Rebell Example with new Structure

    * Update RebelExample.sqf

    * Re add Medical and Misc Items for Ai

    * Update fn_compileGroups.sqf

    Co-authored-by: Spoffy <4805393+Spoffy@users.noreply.github.com>
    Co-authored-by: jaj22 <jaj22x@gmail.com>
    Co-authored-by: Bob-Murphy <50651578+Bob-Murphy@users.noreply.github.com>
    Co-authored-by: Wurzel0701 <31988396+wurzel0701@users.noreply.github.com>
    Co-authored-by: Jaffa <Jaffa@DeliciousJaffa.co.uk>
    Co-authored-by: SonorousMeerkat <52983798+SonorousMeerkat@users.noreply.github.com>
    Co-authored-by: Caleb Serafin <31820984+CalebSerafin@users.noreply.github.com>

commit b11f7aa58f8308adb81294ab33f0a15f0afa9cc3
Author: Ellis Nielsen <thecakebecamethelie@yahoo.com>
Date:   Fri Jan 7 15:30:51 2022 -0600

    Projects - Fuel Part 1 (#2187)

    * rename spawnLight, added price to item, add callback
    * removed dev
    * update header
    * changed spawned veh fuel
    * added nodes
    * final touches, changed hints, and nodes
    * changed vehicleFuelSource to array
    * removed fuel canister
    * changes for review
    * review changes
    * error checking
    * review change

commit 9e842c59ef0812056cacab5eac071870abb8f6c0
Author: Caleb Serafin <calebserafin@outlook.com>
Date:   Fri Jan 7 23:28:46 2022 +0200

    Tools - 👷‍♂️ Fixed data corruption caused by simplifyJunctions. (#2174)

    * ☣ FIlters unknown connections from DB output.
    * ☣ Filter unknown roads in navRoadHM to navGridHM.
    * ‼Assertions for navRoad that achieve 100% coverage
    * 🧲 Extracted methods for navRoad Model.
    * 👷‍♂️Refactored simplify junction to model methods
    * ♻ Option for brute forcing the simplify loop.
    * 🏜 Can open the Street Artist editor empty.
    * 🔲 Menu replaces opening the debug console.
    * 🗜 Added isForced param to navRoad_connect.

commit e5bcdb67c1e31bdba3deebb27e695f324448ebb9
Merge: 2366dbe2 cf809c52
Author: Caleb Serafin <calebserafin@outlook.com>
Date:   Fri Jan 7 23:25:19 2022 +0200

    Removed legacy KeyCache reminants.

    CS-RemoveLegacyKeyCache

commit cf809c521e529123c2733b54f4baa15e4692ab63
Author: Caleb Serafin <calebserafin@outlook.com>
Date:   Thu Jan 6 20:42:04 2022 +0200

    Removed legacy KeyCache reminants.

commit 2366dbe293e142fb968af9a6e2107a3fcbfcf6a6
Author: jaj22 <jaj22x@gmail.com>
Date:   Sat Nov 27 10:04:09 2021 +0000

    Fix leftover bugs from #2047 (#2194)

    ## What type of PR is this.
    1. [X] Bug
    2. [ ] Change
    3. [ ] Enhancement

    ### What have you changed and why?
    So far:
    - Fixed trailing comma in MACV template causing init failures.
    - Fixed array/string mismatch on staticAT causing airfield spawn failures.

    ### Please specify which Issue this PR Resolves.
    closes #XXXX

    ### Please verify the following and ensure all checks are completed.
    1. [ ] Have you loaded the mission in LAN host?
    2. [ ] Have you loaded the mission on a dedicated server?

    ### Is further testing or are further changes required?
    1. [ ] No
    2. [ ] Yes (Please provide further detail below.)

    * Fix trailing comma in MACV template

    * Fix string/array mismatch on airport AT spawning

commit 330b65468c2c61a8a9f99294b0bc8dd9c82db377
Author: Ellis Nielsen <thecakebecamethelie@yahoo.com>
Date:   Sun Nov 7 16:30:25 2021 -0600

    initZones Refactor (#2182)

    ## What type of PR is this.
    1. [ ] Bug
    2. [x] Change
    3. [x] Enhancement

    ### What have you changed and why?
    Information:
    Removed all relevant hardcoded map info, like antenna and population values. Placed them in there own file that is call from the old file. Removed hardcoded outpost garrisons locations, placed them in the same file. And removed search in arrays for arid, temperate, tropic, and etc.... maps. Made them a string that is compared.

    ### Please specify which Issue this PR Resolves.
    closes #1555

    ### Please verify the following and ensure all checks are completed.

    1. [x] Have you loaded the mission in LAN host?
    2. [ ] Have you loaded the mission on a dedicated server?

    ### Is further testing or are further changes required?
    1. [ ] No
    2. [x] Yes (Please provide further detail below.)

    ### How can the changes be tested?
    There are probably edges cases that I missed.

    ********************************************************
    Notes:
    * moved pr

    * changed worldsize

    * Reorder Map specific cases for 3CB Factions

    https://github.com/official-antistasi-community/A3-Antistasi/blob/5c5a53dc9d84a45fdfe4309e8e20d5c7066b95b7/A3-Antistasi/Templates/selector.sqf#L147-L179

    This was lost in Move to Templates

    Co-authored-by: Lazejun <57111907+Lazejun@users.noreply.github.com>

commit ba6f3e715b50852667da21ab44dcef15853a7708
Author: Caleb Serafin <calebserafin@outlook.com>
Date:   Sun Nov 7 16:14:41 2021 +0200

    ♻ KeyCache-Garbage Collector (#2186)

    ## What type of PR is this.
    * Bug
    * Change
    * Enhancement
    * [x] Library Additions

    ### What have you changed and why?
    * Added Garbage Collection Component of KeyCache.

    ### But What is KeyCache???
    * KeyCache's goal is to reduce data sent over a network.
    * It can achieve this by replacing commonly used identifiers with a shortID.
    * However, this technology can be used to create translation tables for any data.
    * Translations can go stale and expire, this is preferable for a DNS-like implementation where the server holds all translations, and the client only needs to use a translation for a short period.
    * KeyCache is intended to be used as middleware before and after remoteExecution. Therefore, it cannot be directly called from another machine. Only the server can directly update translations on clients.
    * The parent code must handle the propagation of translations.
    * The most critical part of expiring translations is the garbage collector. Therefore, this PR will add that component.

    ### Tell us about this Garbage Collector
    * This garbage collector finds stale translations and deletes them.
    * A concurrent generational garbage collector was implemented.
    * Generational GCs are based on life's tough truth that most objects die young. See <https://docs.microsoft.com/en-us/dotnet/standard/garbage-collection/fundamentals#generations> for a description.
    * All new items are added to generation 0. If it not stale on this pass, it is promoted to generation 1.
    * Generation 1 checks items at a slower pace. If items survive this pass, they are promoted to generation 2.
    * Generation 2 checks items at an even slower pace. Items are not promoted past this point.

    ### Please verify the following and ensure all checks are completed.

    * [x] Have you loaded the mission in LAN host?
    * Have you loaded the mission on a dedicated server?

    ### Is further testing or are further changes required?
    1. [x] No
    * Yes

    ### What do I need to review?
    * You don't need to review the fields under `/Tests/`
    * All functions that have content need a review
    * CfgRemoteExec can use a review as well.

    ### How can the changes be tested?
    Steps:
    ```sqf
    /*
    Run in order.
    Make sure that the previous test finishes before starting next.
    If the previous test failed, it's likely that the following will too.
    */

    // Recommended
    call compileScript ["functions\Utility\KeyCache\Tests\unitTest_garbageCollector_basicPromotion.sqf"];
    call compileScript ["functions\Utility\KeyCache\Tests\unitTest_garbageCollector_timedPromotion.sqf"];
    call compileScript ["functions\Utility\KeyCache\Tests\unitTest_garbageCollector_basicDeletion.sqf"];
    // Will take ≈10 minutes. Game will still run at 60fps.
    call compileScript ["functions\Utility\KeyCache\Tests\unitTest_garbageCollector_shortFpsStressTest.sqf"];
    ```

    * 🛃 Blocked all keyCache functions from remoteExec.

    * ♻ Cache-Based Generational Garbage Collectors.

    * 🧪 GC Unit Tests and Stress Tests.

    * 🪓 Split Unit Tests into 5 files.

    * ⚙ keyCache varaibles accessed through config macro

    * 📃 Added header to init.

    * Disabled keyCache unitTestMode

commit 2af29a5a7a8c78f84135c8c59be1e6d2d965cfa0
Merge: 81660fe7 52d92a62
Author: Bob-Murphy <50651578+Bob-Murphy@users.noreply.github.com>
Date:   Sun Nov 7 13:45:04 2021 +0100

    Merge pull request #2183 from official-antistasi-community/killerswin2-patch-1

    Update debug.hpp

commit 81660fe78aa3c826a236432aae9d952d8f8eab93
Merge: ca8c3c03 a3f95b4f
Author: Bob-Murphy <50651578+Bob-Murphy@users.noreply.github.com>
Date:   Sun Nov 7 13:37:58 2021 +0100

    Merge pull request #2188 from Zarickan/unstable

    Fixed script errors in 3CB and #Example templates

    ## What type of PR is this.
    1. [x] Bug
    2. [ ] Change
    3. [ ] Enhancement

    ### What have you changed and why?
    Information: Fixed scripting errors in templates:
    - Templates/Templates/#Examples/Example_Logistics_Nodes.sqf:25 missing delimiter , in array literal
    - Templates/Templates/3CB/3CB_AI_BAF_Arid.sqf:47 missing closing ] in array literal
    - Templates/Templates/3CB/3CB_AI_BAF_Temperate.sqf:47 missing closing ] in array literal

    ### Please specify which Issue this PR Resolves.
    n/a

    ### Please verify the following and ensure all checks are completed.

    1. [ ] Have you loaded the mission in LAN host?
    2. [ ] Have you loaded the mission on a dedicated server?

    ### Is further testing or are further changes required?
    1. [x] No
    2. [ ] Yes (Please provide further detail below.)

    ### How can the changes be tested?
    Steps: n/a

    ********************************************************
    Notes:

commit ca8c3c0336aa381ef430a275dfdc1b2843d0f31f
Author: HakonRydland <61709767+HakonRydland@users.noreply.github.com>
Date:   Sun Nov 7 13:36:51 2021 +0100

    fix incorrectly using mixed pool of occ and inv for AI arport creatio… (#2185)

    …n instead of faction specific

    ## What type of PR is this.
    1. [x] Bug
    2. [ ] Change
    3. [ ] Enhancement

    ### What have you changed and why?
    Information: used both occ and inv vehicle pools for some of the vehicle selection in ai airport creation

    ### Please specify which Issue this PR Resolves.
    closes #XXXX

    ### Please verify the following and ensure all checks are completed.

    1. [ ] Have you loaded the mission in LAN host?
    2. [ ] Have you loaded the mission on a dedicated server?

    ### Is further testing or are further changes required?
    1. [ ] No
    2. [ ] Yes (Please provide further detail below.)

    ### How can the changes be tested?
    Steps:

    ********************************************************
    Notes:
    * fix incorrectly using mixed pool of occ and inv for AI arport creation instead of faction specific

    * removed unneccesary OccAndInv macro in createAIAirplane

commit 7c894d934ea64b117c71440dafa43ac79102c52c
Merge: 9f974567 00d33a04
Author: Bob-Murphy <50651578+Bob-Murphy@users.noreply.github.com>
Date:   Sun Nov 7 13:36:18 2021 +0100

    Merge pull request #2178 from Lazejun/Ace-Food-n-water

    ## What type of PR is this.
    1. [ ] Bug
    2. [ ] Change
    3. [x] Enhancement

    ### What have you changed and why?
    Information:
    Adds Ace Drink Items by Default, as they can be used to Cool your Barrel.

    Food Items are given at the start if the Parameter is enabled, food is only useful if Ace Field Rations is enabled.

    ### Please specify which Issue this PR Resolves.
    closes nothing

    ### Please verify the following and ensure all checks are completed.

    1. [x] Have you loaded the mission in LAN host?
    2. [ ] Have you loaded the mission on a dedicated server?

    ### Is further testing or are further changes required?
    1. [x] No
    2. [ ] Yes (Please provide further detail below.)

    ### How can the changes be tested?
    Steps:
    Start the Mission with and without the Parameter on, Water should always be given, Food only with the Parameter on.
    ********************************************************
    Notes:
    Add Ace Food and Drink Items + Parameter

commit a3f95b4f5e57cf16dcd582f56746b5f86f4c604e
Author: Frederik Munk Madsen <frederik@os-madsen.dk>
Date:   Fri Nov 5 12:12:28 2021 +0100

    Fixed script errors in 3CB and #Example templates

commit 52d92a62ef8f2d40b9e6caf022320508385c5df2
Author: Ellis Nielsen <thecakebecamethelie@yahoo.com>
Date:   Sat Oct 30 13:53:08 2021 -0500

    Update debug.hpp

commit 9f974567ca0dc5ce0fe02a02cad361ce288d9eac
Author: Caleb Serafin <calebserafin@outlook.com>
Date:   Sun Oct 24 19:00:29 2021 +0200

    🆔 Added ShortID. (#2168)

    ## What type of PR is this.
    * Bug
    * Change
    3. [x] Enhancement

    ### What have you changed and why?
    * Added a short ID generator.
    * It is based on client ID and a local counter.
    * This removes the need to create an initialiser for every ID counter needed.
    * It is not persistent, that need will be solved by UUIDs.
    * Although it's waiting on the merge of dependencies, it can still be reviewed.
    * The shortID_init method will be added to the new preJIP init file.

    ### Please verify the following and ensure all checks are completed.
    * [ ] Have you loaded the mission in LAN host?
    * [ ] Have you loaded the mission on a dedicated server?

    ### Is further testing or are further changes required?
    * [x] No
    * Yes

    ### How can the changes be tested?
    1. Run unit & integration Tests.
    ```sqf
    private _tests = [["Init: counter1Modulo.", !isNil {A3A_shortID_counter1Modulo}],["Init: counter2Modulo.", !isNil {A3A_shortID_counter2Modulo}],["Init: counter1.", !isNil {A3A_shortID_counter1}],["Init: counter2.", !isNil {A3A_shortID_counter2}],["Init: clientID.", !isNil {A3A_shortID_clientID}],["Create: Return Amount.", count (call A3A_fnc_shortID_create) == 2],["Create: Return Types.", (call A3A_fnc_shortID_create) isEqualTypeAll 0],["Create: Return Different each time.", (call A3A_fnc_shortID_create) isNotEqualTo (call A3A_fnc_shortID_create)],["Format: Mapping.", [0xaaf000,0xf1a001] call A3A_fnc_shortID_format isEqualTo "aaf000-f1a001"]];private _failedTests = [];private _passedTests = [];{if (isNil {_x#1}) then {_failedTests pushBack (_x#0);continue;};([_failedTests, _passedTests] select (_x#1)) pushBack (_x#0);} forEach _tests;private _results ="## Test Results" + endL +(if (count _failedTests > 0) then {"### Failed" + endL +"* " + (_failedTests joinString (endL + "* ")) + endL}else{""}) +(if (count _passedTests > 0) then {"### Passed" + endL +"* " + (_passedTests joinString (endL + "* ")) + endL}else{""}) + endL +"---" + endL;copyToClipboard _results;text ("Test Results Copied to Clipboard!                                                                                                                                                   " + endL + _results);
    ```

    * 🆔 Added ShortID.

    * ⏮ Intergrated PreJIP.

commit 00d33a04de80f6f849dab41f66b31ec612a7202b
Author: Lazejun <57111907+Lazejun@users.noreply.github.com>
Date:   Thu Oct 21 22:34:36 2021 +0200

    Add Ace Food and Drink Items + Parameter

    Adds Ace Drink Items by Default, as they can be used to Cool your Barrel.

    Food Items are given at the start if the Parameter is enabled.

commit cb540c19d6735ef3343331a549d7eb49344292b8
Author: HakonRydland <61709767+HakonRydland@users.noreply.github.com>
Date:   Sat Oct 23 14:11:47 2021 +0200

    Move to new templates (#2047)

    ## What type of PR is this.
    1. [ ] Bug
    2. [x] Change
    3. [ ] Enhancement

    ### What have you changed and why?
    Information:
        The old pr freaked out and would recognise the new commits to the branch, see #1998

    ```
    Information: The move to the new template system in the code base.

    Removed old template system files
    renamed newTemplates to just templates
    added macros for "ease" of use with the new system
    move compilation of groups and assets lists to the templates processing.
    moved faction data to hashmap from namespace
    re did the arty entry in templates to be like the other vehicles entries, added a magazines entry thats a hashmap matching vehicle to magazines
    added template validation to loadFaction, verifying loadouts and datatype of entries in the template (not all entries have verification yet, and bad templates havent been tested yet, validation fail only screams in the log)
    removed list of assets and groups from initVarServer to two new functions in the faction loading process.
    Added 2 Weapons to 3CB Faction Logistics, Added 1 Vehicle, Added Trucks to Coveredblacklist.
    Added Line to add Static Weapons to StaticsToSave
    prob a lot more.
    ```

    ### Please specify which Issue this PR Resolves.
    closes #XXXX

    ### Please verify the following and ensure all checks are completed.

    1. [x] Have you loaded the mission in LAN host?
    2. [ ] Have you loaded the mission on a dedicated server?

    ### Is further testing or are further changes required?
    1. [x] No
    2. [ ] Yes (Please provide further detail below.)

    ### How can the changes be tested?
    Steps:

    ********************************************************
    Notes:
    * Fixed wrong var in chooseSupport
    Fixed `hasAce` missing the new prefix in new garage

    * disabled ambient noise when in garage (see #1988)

    * added requested settings disable option for ammo fuel and repair services in garage

    * Add 2 Missing Trucks to Coveredvehicles list

    Co-Authored-By: HakonRydland <61709767+HakonRydland@users.noreply.github.com>

    * added locked by and looking at tooltip

    * added customisation preservation

    * fix locked name for the tooltip not updating on server

    * fix null object check not going before cat index is gotten

    * unified vehicle id naming in log lines

    * improved commander unlock log to include owner name

    * decided to leave the compat in

    * ⚙ refactor forEach loops on hashmaps to use the _y magic variable

    * 🔴⛓added disconnect handler for player crashes while in the garage or placing

    * removed log line since placement is done outside of garage, and the block condition was changed to reflect that

    this runs for every player disconnect

    * fixed null selection error

    * Factions now select template from the params

    * 🤖💻 auto picking added

    * 🧾 added  logging when autopicking

    * 🧾 added invalid faction selected error log

    * corrected us marines being marked as factions dependant

    * updated header

    * added fallback category index

    * 🩹 corrected misslabeling in param OccupantsFactionEnum

    * partial move to new template (WIP)

    * move to new template in the code base

    * fixed occ and inv faction not getting broadcast
    fixed typo in rebel groups
    removed the two testing helis in helisLight (USAF template)

    * corrected casing in compileGroups

    * added missing template validation

    * removed case for petros in unitTraits
    (this was wrong anyways as i forgot to retrive the actuall unit data, i just got the name)

    * aperantly some keys in faction was side???

    * fixed missing selectRandom for mortar spawns on createAIOutposts/Airplane

    * roadblocks use low tier units when low tier roadblock

    * Add Static Weapons to staticsToSave

    * Update 3CBFactions_Logistics_Nodes.sqf

    Add RBS70,
    Add High M240,
    Add new Pickup Truck

    * Match variable names, consistency.

    * ⚙🛠 Initial review change request by @jaj22
    - compatibilityLoadFaction: Fixed casing, removed faction broadcast
    - compileGroups: added rifleman to AT & AA AI groups, fixed casing
    - LoadAddon: removed faction broadcast
    - initVarServer: added faction bradcast here so to not spam bradcasting durring template loading, broadcast is now also publicVariabled to be more reliable (have higer priority for JIP)
    doubt this is actually needed but dosnt hurt.

    * removed the doubled rebel "singular units" altered codebase to reflect this
    Notde: im unsure if something may have been missed while making this change, but all uses of rebel groups afaik specifically is with the `FactionGet(reb,"groups")` macro. so i **should** have caught all the cases.

    * fixed a few mistakes from the doubled rebel units removal

    * fixed rebel rifleman being treated as array in initVarServer

    * fixed array being passed to vehAvailable

    * changed grunt to rifleman, was SL on inv before (mistake?)

    * fixed incorrect pricing for garrison add

    * fixed unit type being passed as unit types to garrisonUpdate

    * fixed reinfPlayer treating class type as array

    * fixed incorrect path in include

    * fixed more incorrect include paths

    * fixed all police vehicle not being set as vehiclesPolice
    but Police instead

    * fixed bug in initVehClassToCrew where incorrect pool was given a crew type
    was rebel vehicles, supposed to be AI militia vehicles

    * added template asset validation error logging

    * fixed pring when no invalid entries

    * fixed minefieldAT && APERS being checked as magazines

    * fixed bad check on intel entries

    * whoopsi

    * updated new log line indicator

    * log bad mag type and bullet count in validateWeaponMagazine

    * Match cases on TKA West

    * Include Arid Marines Template

    * moved new templates to right foldr, not in selector yet

    * fixed errors in validation proccess

    * fixed print function and incorrect config change in magazines validation

    * "not_supported" is not supported anymore 😉

    * added missing handling of asset lacking

    * fix milBuildings lacking missing asset safety

    * empty preference return empty string as if nothing was prefered

    * old system wasnt designed for this, reverted some changes to resolve this for now...
    a rework would be welcome in this area

    * fixed incorrect check for no uavs

    * Update Templates, Selector and Params

    Update to new Format of this PR

    * Fix bad Class

    * Update Mines to new Format

    * update check small UAV

    * added empty pool protection to attack HQ

    * fixed old unit from group composition selection

    * error handling improvements

    * fixed missing semicolon

    * removed dupe code block

    * Rangefinder casing consistency

    * Switched variables to camelCases

    * corrected wrong hashmap use in createOutpostsFIA
    fixed casing and old syntax

    * simplified getting surrender create type

    * added missing selectRandom
    removed horrible formating

    * spawnLight addapted to hashmap change

    * removed unnececary doubled groupData

    * resolved bad verification on initialRebelEquipment

    * Added case correction to loadStat -> garrison
    - added loadout name casing lookup table to loadStat garrison case
    - added debug lines for bad entries
    - tabs -> spaces

    * correct toolkit casing (including variable names cause im lazy

    * corrected ace medical casing

    * fixed loadout validation (fuck magwells)

    * corrected wrong param passed to verifyLoadoutsData

    * Fix Casing

    * correct bad class casing in config
    empty class defaults to valid

    * added auxPointerSlot

    * Update 3CB_AI_AAF.sqf

    * "getVariable" -> "get"

    * re added missing rebel group data

    * corrected faulty retrival of assemleTo
    corrected doubled returned cost
    (2 backpacks refounded for the combined price each)

    * corrected reverted typo

    * fixed incorrect garrison definition

    * fixed variouse syntax errors

    * manual revert of loadStat to unstable (bad merger)
    and reaplied needed changes for moveToNewTemplates
    tabs -> spaces

    * Review changes 11.10.2021
    - added a "staticMortars" to A3A_faction_all
    - switched rifleman to marksman for militia snipers
    - corrected wrong indentation in createSDKgarrisonTemp
    - corrected error log argument count
    - fixed order of operation problem in reinforcementsAI
    - simplified/corrected auto pass vehicle check in vehAvailable
    - corrected naming convention violation in wavedCA
    - added police squad composition to groups data
    - corrected getting unarmed loadout name from faction data to groupe data
    - corrected equipRebel array checks to string checks for unit type
    - added missing transport helis to saveLoop asset preservation
    - corrected incorrect plane pool being used in ASF routine
    - simplified target type check for apc with A3A_faction_all in CAS routine
    - removed doubled transport helis in QRF replacement pool

    * Requested changes @jaj22, Review 12.oct 2021

    -VehiclesNormal and VehiclesAir replaced, entry removed from faction data

    - Fixed various casing issues

    - Removed old civ vehicle data for auto_civ

    - Removed redundant log char limit work around in template validation

    - fixed type error and wrong entry check in goUndercover

    * case correcting

    * added missing variable for faction/group data

    * fixed bad macro call in aivehinit

    * fixed bad use of _faction instead of macro OccAndInv

    * Move everything from faction groups hashmap down to faction.
    Units get "unit" prefix, groups get "group".

    Also many bugfixes:
    - Numerous errors with high command squad recruit.
    - Ammo truck and destroy vehicle mission not working.
    - Patrol dog sniper team detection errors in multiple files.
    - Others that I forgot.

    * Fix initGarrisons for template refactor

    * Fix player recruiting for template refactor

    * Fix bomb specialist and MG team recruitment for template rework

    * Fix patrolReinf bug from group->faction refactor

    * Fixes to various vehicle type groupings:
    - staticMortars added to all.
    - Fixed multiple bugs and name order issues with heli grouping names.
    - Sorted out unlimited pool usage for patrolReinf/QRF/singleAttack.
    - Fixed old bug where tanks may ignore the first hit.

    * Fix civ unit type merge bug in invaderPunish

    * Fix typo in getVehiclePoolForAttacks

    * Fix support availability checks and CAS routine bug

    * Change groups*Squad to groups*Squads to reduce plural ambiguity

    * Case Correction

    * Update to new format

    * Replace pre-2.4 garrison troops with random new ones, add nil safety

    Co-authored-by: Lazejun <57111907+Lazejun@users.noreply.github.com>
    Co-authored-by: John Jordan <jaj22x@gmail.com>

commit ce0e7ea329ba3f9bac04066a4a03fe484cc3ea66
Author: Ellis Nielsen <thecakebecamethelie@yahoo.com>
Date:   Tue Oct 12 06:29:19 2021 -0500

    removed random selection for construction (#2094)

    ## What type of PR is this.
    1. [ ] Bug
    2. [x] Change
    3. [x] Enhancement

    ### What have you changed and why?
    Information:
  …
@Bob-Murphy Bob-Murphy added the Added to changelog Added to changelog label Dec 1, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

4 participants