Changelog:
* AssetManager: prevent removal of Player assets
* systems: fix error in weaponstracking
* groupmenu: fix crash caused under specific circumstances
* scratchpad: fix latent bug after system rework
* tests: add test for building-only template with no tpldata
* template: adjust validation order for tpldata (Closes: #136)
* systems: fix a colon vs. dot usage in weapons tracking
* loadouts: use substring after last period of weapon typeName (Closes: #193)
* theater: fix detection of farp objects
* template: fix setting of mission description in .dct file
* airbase: allow designer to list slots for an airbase (Closes: #148)
* enum: add logistics type to initialize list
* stub: add missing Group.Category table
* AssetManager: fix traceback on doOneObject
* theater: fixup land/takeoff events
* hooks: fix require of enum (Closes: #189)
* theater: ignore irrelevant events from DCS
* systems: blast effects (Closes: #122)
* systems: add weapons tracking (Closes: #121)
* dct events: add impact event
* dcsstubs: fix spelling error
* template: route names do not always exist
* loadouts: reference weapon type name
* theater: version state files
* player: refactor handleLand function
* readme: add discord link
* luacheck: enforce 80 character line limit
* Fix timeout display and other time-related issues (Closes: #165,#180)
* tests: test timeout affected by rolex and delayed check
* tests: adjust expected results for new timer stubs
* tests: implement timer.scheduleFunction stub
* mission: ensure TOT is between mission creation and minimum timeout
* utils: add Syria map timezone (EEST/GMT+3)
* tests: adjust timer stubs for consistency with scripting API
* assets: remove need to pass region object
* assets: asset class declare asset types handled (Closes: #162)
* goals: fix scenery in damage goal
* ui: remove os.date timezone conversions for mission time
* ui: fix mission timeout display using model time
* ui: remove check-in/out enteries
* actions: move action definition to ai directory
* ai: implement mission FSM (Closes: #27)
* action: add a KillTarget action
* tests: remove test entry ids
* assets: StaticAsset update periodically (Closes: #163)
* template: support custom codenames (Closes: #146)
* timer: change to greater than or equal to
* player: add timeout for empty slots (Closes: #152)
* template: set .dct as priority over .stm (Closes: #166)
* Fix spelling of Caucasus in timezone table
* iads: remove unneeded log messages
* iads: fix unbounded command queue additions
* hooks: add kick reason codes (Closes: #153)
* systems: while restoring state ignore scenery events (Closes: #149)
* theater: ignore base_capture events (Closes: #128)
* libs: implement a generic timer class
* github: create dev builds foreach pull-request
* scratchpad: make it easier to edit
* theater: change error message so it understandable
* tickets: determine winner when tickets less than or equal zero
* systems: rework how systems register with theater
* cmds: add map marker for player when joining a mission
* goals: fix scenery
* template: fix spawned statics colliding w/ other unit ids
* enum: create initialize asset list
* Fix harrier coord type
* template: get scenery object positions (Closes: #134)
* utils: add clamp function
* hooks: kick all slots associated with a group
* hooks: stop checking enable flag each frame
* hooks: move local functions to top of file
* hooks: remove old comments
* iads: run as part of the commander
* player: change how enabled flag is set
* vector: fix distance calculation
* vector: dot product
* tests: add another centroid test to verify operation
* assets: move when slots associated with airbase
* asset manager: check if assets are dead
* asset manager: do not add/marshal dead assets
* region: allow templates to be at the same level as the definition
* asset: don't assert when static asset has no death goal (Closes: #133)
* assets: fix location for a few asset types (Closes: #131)