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);
* Clean original values transmitted with CardView.originalObject
* Move RateCard to mage.Common, support cardView as argument.
* Clean PermanentView constructor for TestCardRenderDialog
* The draft session waits for 5 seconds before making the pick for the timed out player
* Formatting
* Renamed constant
* Tweak
* If the draft pick's timeout value would increase the client's pick's timer, don't set it (might happen if the client or server is lagging)
* Lowered BOOSTER_LOADING_INTERVAL and AUTOPICK_BUFFER
---------
Co-authored-by: sprangg <a@b.c>
* Fix error in draft pick logger that was failing on chaos drafts with fewer than 3 sets
* Implement Remixed Booster Draft
* Add debug test
* minor cleanup
* Cleanup unnecessary checks
* Fix elimination tournament type
* Add note for future improvement
* Don't purge cards-by-rarity cache between tournaments
* Move DOM and WAR specific checks out of base ExpansionSet class
* Move Battlebond specific methods out of base ExpansionSet class
* Refactor ExpansionSet and subclasses
* Zendikar boosters also only have full-art basic lands
* Fix Eldritch Moon (#8171)
* added additional and improved timing options for pick timeouts (x1.0, x1.5, x2.0, see #8033);
* added pick timing info in tables list (info column);
* fixed that booster draft starts with wrong pick timeout (#8036);
* removed and renamed SubTypeList
* updated subtype test
* refactored Changeling to be an ability that actually does something
* moved isAllCreatureTypes into SubTypes class
* renamed copyTo method to copyFrom
* added removeAllCreatureTypes where usable
* replaced some subtype methods
* replaced some more subtype methods
* replaced subtype mass add/remove methods
* updated more subtype methods
* fixed some errors
* made common shared creature type predicate
* refactored another card involving subtypes
* Added usage of object attribute in subTypes's write operations;
* Refactor: use same param styles in subtype methods
* Refactor: simplified usage of copy appliers;
* Refactor: fixed code usage in CopyApplier
Co-authored-by: Oleg Agafonov <jaydi85@gmail.com>
two draft quality of life improvements for situations when real players
quit or go afk.
1. made the draftbot lean on rarity for card ratings. this helps make
the draftbots behave and not just pass bombs to the human players.
2. changed the draft autopick that happens when the timer runs out and
the player hasn't selected anything. I changed it to pick the last card
in the pack, which should be the rarest, so basically it raredrafts.
again making it so AFK players aren't just feeding real live human
players the best cards.
"b" + "r" now changed to 'b' + 'w'. It's more straight-forward, and may cause perfomance improvements - character primitives allocation is faster and less expensive than string creation.