Network upgrade and new reconnection mode:
* users can disconnect or close app without game progress loose now;
* disconnect dialog will show active tables stats and additional options;
* all active tables will be restored on reconnect (tables, tourneys, games, drafts, sideboarding, constructing);
* user must use same server and username on next connection;
* there are few minutes for reconnect until server kick off a disconnected player from all player's tables (concede/loose);
* now you can safety reconnect after IP change (after proxy/vpn/wifi/router restart);
Other improvements and fixes:
* gui: main menu - improved switch panel button, added stats about current tables/panels;
* gui: improved data sync and updates (fixes many use cases with empty battlefield, not started games/drafts/tourneys, not updatable drafts, etc);
* gui: improved stability on game updates (fixes some random errors related to wrong threads);
* server: fixed miss messages about player's disconnection problems for other players in the chat;
* refactor: simplified and improved connection and network related code, deleted outdated code, added docs;
* tests: improved load test to support lands only set for more stable performance/network testing (set TEST_AI_RANDOM_DECK_SETS = PELP and run test_TwoAIPlayGame_Multiple);
Prototype is a SpellAbilityType, for which alternate costs are permitted. It has a continuous effect that applies on the battlefield as well as a method to modify the spell on the stack. Permanents have an isPrototyped flag that copy effects can check explicitly (same brittle method as transformed permanents use; reworking copy effects to streamline them is a separate scope).
Many test cases have been added to confirm functionality (thanks to Zerris for additional test suggestions).
---------
Co-authored-by: Susucre <34709007+Susucre@users.noreply.github.com>
Co-authored-by: Evan Kranzler <theelk801@gmail.com>
Co-authored-by: xenohedron <xenohedron@users.noreply.github.com>
* Combine casting Transformed into a shared SpellAbility, apply transform effect before spell is cast
* Minor cleanup
* Use effect.apply() rather than game.applyEffects()
* Add test with Maskwood Nexus
* UI Changes
* Add new buffer time options
* Main functionality
* Final implementation
Also added player UI for when they are using their buffer time (timer turns green)
* Added Goldberry
* Slight optimizaztion
* Happy Path Test
* More unhappy tests
* Sanity check for Goldberry's counter choices
* Updated player.getMultiAmount to support individual constraints
* Some cleanup
Also modified ResourcefulDefense to use new multi amount api
* Updated logging
* Added hint for number of counters
* Fixed issue with Resourceful Defense
* Improvements to defaults
Default list will properly make sure to stay within individual maximums
If a player is asked for a choice that isn't actually a choice because each choice's min and max are equal, instead the default response is immediately returned. This helps with situations like moving a counter off of Goldberry when she only has one counter on her.
* -1/-1 Counter test
* Fixed issue with -1/-1 counters
* Adjusted dialog to properly enforce constraints