That's a lot of dead survivors!
And, speaking of milestones, release 2.3.206 of the Manager adds support for the final, outstanding bits of expansion content, the Green Knight Armor and Slenderman expansions, and I am happy to (finally!) be able to say that http://kdm-manager.com now supports all published expansion content for Monster!
Given the relatively small amount of content included in and changes required for GKA and Slenderman support, I do not expect too many issues, but, as usual, if you see something, say something: please use the in-app tool to contact me directly, or use GitHub to report any issues with support for either expansion, etc.
Finally, in terms of what's next, the current plan is to continue to whittle away at the Campaign Summary refactor milestone, improving application usability according to the goals/guidelines set out in the Anniversary Release, while continuing to improve the API and work towards the Alpha release of The Watcher.
Thanks again for using the Manager!
Corrections and Fixes
- Fixed the "how many users have managed campaigns in the last 30 days query" to go by user activity time stamps, rather than session ones (because sessions can be removed). The number is more accurate now.
- Addressed an issue where some of the alternate campaigns mandatory expansion requirements did not fire on settlement creation (sorry Bloom People!).
- Cleaned up the wording on the 'Four "First Story" Survivors' new campaign option so it makes sense according to the standard rules for English grammar.
- Addressed a JS order of operations bug in settlementSheet.js where adding certain innovations/locations after using certain other controls could prevent the page from refreshing after saving changes back to the legacy app.
- Added some graceful failure type error handling intended to prevent session-ending crashes when survivor and settlement data from expansions is present on Survivor and Settlement sheets where that expansion content is no longer enabled. -Jonahdel
- Fixed a bug where the Watcher could show up in the list of selectable nemeses.
- Addressed a (kind of hilarious) presentation issue where the level controls for innovations with levels (e.g. "Sacred Pool") showed up all the way on the right edge of the screen at wide resolution.
- Added some form validation and some graceful failure stuff on the back-end of the legacy app for sabotage attempts by users who add custom A&I items without providing a description. -aspot22
- Addressed an issue in assets.Settlement.rm_game_asset() where the legacy app would throw a big traceback if a reload request (for instance) attempted to remove an item that wasn't there. -jpoon
- The Spidicules Innovation "Choreia" no longer adds the "Crimson Candy" survivor buff.
- Fixed an issue where selecting a "Target monster" failed to make the settlement eligible to appear in the World "Latest Hunt" stat game.
- Fixed the white part of the "Saved" pop-up so that it doesn't go down past the bottom of the block at wide resolution (was that driving anyone else nuts?).
- Added support for Green Knight Armor Expansion content:
- Keyed in seven items
- Created expansion definition in the API
- Created legacy application assets for the expansion and gear location
- Created a new campaign called "The Green Knight" that enables all required expansions by default upon settlement creation (otherwise, it's just a clone of PotLantern).
- The "New Settlement" view now supports subtitles for campaigns.
- Creating new settlements uses the new /campaign route of the API (see below for details) to determine starting assets for new campaigns!
- Campaign Summary survivor search now shows if the survivor has used their once per lifetime SotF reroll (completes issue #185).
- Added support for Slenderman Expansion content:
- Keyed in gear and strange resources
- Keyed in events
- Added "Forgettable" A&I
- Added some Slenderman-specific epithets (with flair)
- Added the Light-Forging location
- Added the Dark Water Research innovation to the legacy app as well as the API
- Keyed in fighting arts and disorders
- Deprecated the assets.Settlement.get_quarries(), assets.Settlement.get_settlement_notes() and assets.Settlement.get_nemeses() methods.
- Deprecated all monster assets from game_assets.py and removed all quarry/nemesis/defeated monster methods from models.py.
- Replaced the legacy application method for adding innovations with a call to the new API route /settlement/add_innovation/<settlement_id>
- Added innovation level controls to the Settlement Sheet (e.g. for "Dark Water Research" and other future innovations with levels).
- Deprecated the assets.Settlement.update_current_quarry() method in favor of the API-side method for doing the same thing.
- Fixed a bug where removing settlement content could cause a traceback/render failure if expansion timeline events had been manually removed.
- The models.monsters and models.campaigns modules now create asset collection objects that initialize Models.AssetCollection as their base class (rather than just using it as a method reference).
- Removed the request_response() method from models.monsters.py, abstracted it and re-implemented it as a method of Models.AssetCollection (i.e. the base class for all game asset collections).
- Models. now also includes a serialize() method, which will allow all game asset collection objects to rapidly serialize themselves (in case we need them as JSON, etc.).
- Created a new route called /campaign that accepts POST requests of JSON and returns campaign dictionaries.
- Deprecated the utils.asset_object_to_json() method (since asset object self-serialization makes it redundant/superseded).
- Update the documentation to show how to use the /campaign route.
- Created a new, unique nemesis monster called "The Dragon King" (not to be confused with regular "Dragon King" quarries) that is selectable in PotStars campaigns as a special showdown/defeated/target monster
- Added support for the new "rm_nemesis_monsters" expansion asset attribute to models.settlements.py
- GET requests for user assets (settlements, survivors) no longer try to initialize request params from request JSON (because we're taking a stance against posting JSON in a GET request because that seems to be against good practices for RESTful API development).
- Renamed Models.get_json() to Models.return_json(), in order to help disambiguate between that method and the method of flask.request.get_json().
- Refactored Models.get_request_params() to a.) throw a warning when a GET request somehow causes it to be called and b.) catch and log bad POST and OPTIONS requests, but make less noise overall, without failing silently or swallowing exceptions, etc.
- Created support for the (POST) /settlement/add_innovation/<settlement_id> route to the API; replaced the legacy application innovation adding method (as noted above).
- Added models.settlements.add_innovation() method and built out business logic re: adding innovations.
- Added a (POST) route for setting innovation levels: /settlement/set_innovation_level/<settlement_id> that is called by the new Settlement Sheet location level controls in the legacy app (see above).
- Ported innovations from legacy app game_assets.py to the API (assets/innovations.py). Converted "endeavors" attribs to JSON (lists of dicts) in preparation for the Campaign Summary update that will remove the crazy hacks from the "available endeavors" tool.
- Wrote an informative __repr__() method for Models.GameAsset objects, including name, handle and type (which should clean up the logging a bit).
- Added support for the "event_type" kwarg to Models.UserAsset.log_event() method.
- Removed support for the /settlement/set/<s_id> route. Until someone can convince me that it doesn't open the door to all kinds of sub rosa operations that break the biz logic or the data model.
- Added models.settlement.set_current_quarry() method for API-side current quarry setting.