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);
* server: fixed that a critical errors ignored in user commands threads (now it will be added to the logs);
* network: fixed frozen user responses in some use cases;
* network: fixed accidental and incorrect user responses (only latest response will be used now);
* network: improved freeze logs, added problem method name and code's line number;
* cheats: removed outdated deck and card load logic (only init.txt commands supports now);
* cheats: fixed wrong priority after add card dialog (closes#11437);
* cheats: improved stability and random errors on cheat executes (related to #11437);
* docs: added details on network and thread logic, human feedback life cycle, etc (see HumanPlayer, ThreadExecutorImpl);
- fixed broken cards with once per turn choose (example: Galadriel, Light of Valinor, closes#11362);
- fixed cheat to skip required mode by cancel button (example: Black Market Connections, closes#11149, closes#10611);
- fixed empty modes list if nothing available to choose;
- improved compatibility with max modes and other modification effects;
- fixed that non-valid modes can be selected in some use cases;
* Lynde trigger references objects
* Changed triggered ability auto-order to care about targets
* Copy card test
* When a copy effect comes in as a copy of an aura,
it checks if it's already attached before asking player to attach
* add comments and null check per review
---------
Co-authored-by: xenohedron <xenohedron@users.noreply.github.com>
* fixed code coverage data lost on failed tests;
* fixed code coverage report duplication and improved performance;
* fixed that sonar analyser can't see code coverage for some modules;
* added new aggregation module: Mage.Reports (used for code coverage report generation);
* reorganized pom and added additional instructions for jacoco and sonar usage;
* Rework AsThoughEffect
* some cleanup of MageIdentifer
* refactor ActivationStatus
* fix bolas's citadel
* fix a couple of the Alternative Cost being applied too broadly.
* fix Risen Executioneer
* allow cancellation of AsThough choice.
* fix One with the Multiverse
* cleanup cards needing their own MageIdentifier
* last couple of fixes
* apply reviews for cleaner code.
* some more cleanup
* 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
* add types and subtypes
* add startingDefense attribute
* [MOM] Implement Invasion of Ravnica / Guildpact Paragon
* fix two small errors
* refactor various instances of "any target"
* fully implement defense counters
* battles can now be attacked
* [MOM] Implement Invasion of Dominaria / Serra Faithkeeper
* [MOM] Implement Invasion of Innistrad / Deluge of the Dead
* [MOM] Implement Invasion of Kaladesh / Aetherwing, Golden-Scale Flagship
* [MOM] Implement Invasion of Kamigawa / Rooftop Saboteurs
* [MOM] Implement Invasion of Karsus / Refraction Elemental
* [MOM] Implement Invasion of Tolvada / The Broken Sky
* simplify battle info ability
* fix verify failure
* some more fixes for attacking battles
* [MOM] Implement Invasion of Kaldheim / Pyre of the World Tree
* [MOM] Implement Invasion of Lorwyn / Winnowing Forces
* [MOM] Implement Invasion of Moag / Bloomwielder Dryads
* [MOM] Implement Invasion of Shandalar / Leyline Surge
* [MOM] Implement Invasion of Belenon / Belenon War Anthem
* [MOM] Implement Invasion of Pyrulea / Gargantuan Slabhorn
* [MOM] Implement Invasion of Vryn / Overloaded Mage-Ring
* [MOM] Implement Marshal of Zhalfir
* [MOM] Implement Sunfall
* implement protectors for sieges
* partially implement siege defeated trigger
* fix verify failure
* some updates to blocking
* [MOM] Implement Invasion of Mercadia / Kyren Flamewright
* [MOM] Implement Invasion of Theros / Ephara, Ever-Sheltering
* [MOM] Implement Invasion of Ulgrotha / Grandmother Ravi Sengir
* [MOM] Implement Invasion of Xerex / Vertex Paladin
* add initial battle test
* fix verify failure
* [MOM] Implement Invasion of Amonkhet / Lazotep Convert
* [MOM] update spoiler
* update how protectors are chosen
* update text
* battles can't block
* add control change test
* rename battle test for duel
* add multiplayer test
* [MOM] Implement Invasion of Alara / Awaken the Maelstrom
* [MOM] Implement Invasion of Eldraine
* [MOM] Implement Invasion of Ergamon / Truga Cliffhanger
* [MOM] Implement Invasion of Ixalan / Belligerent Regisaur
* battles now cast transformed (this is super hacky but we need to refactor TDFCs anyway)
* add TODO
* add ignore for randomly failing test
* a few small fixes
* add defense to MtgJsonCard (unused like loyalty)
* implement ProtectorIdPredicate
* small fixes
* replaced blocking/blocked by predicates
* added test for knight of dusk (currently fails)
* added source parameter to filters and everything else that needs it
* some changes to various predicates
* test fix
* small changes to filter code
* merge fix
* fixed a test failure
* small change to Karn, Scion of Urza
* removed sourceId from filter methods and other similar places
* added new getobject method to fix some test failures
* a few more fixes
* fixed merge conflicts
* merge fix
* added function for casting spells with specific attributes from a selection of cards
* updated cascade to use new method
* refactored various cards to use new methods
* added TestPlayer method
* fixed a small error
* text fix
* broke out some repeated code
* added missing notTarget setting
* add additional retain zone check
* some more cards refactored
* more refactoring
* added interface for split/modal cards
* reworked spell casting methods
* reworked multiple cast to prevent unnecessary dialogs
* fixed test failures due to change in functionality
* add AI code
* small nonfunctional change
* reworked Kaya, the Inexorable
* added currently failing test
* added more tests
* updated Geode Golem implementation
* fixed adventure/cascade interaction, added/updated tests
* some nonfunctional refactoring
* added interface for subcards
* [AFC] Implemented Fevered Suspicion
* [AFC] Implemented Extract Brain
* [AFC] updated Arcane Endeavor implementation
* [C17] reworked implementation of Izzet Chemister
* [ZEN] reworked implemented of Chandra Ablaze
* additional merge fix
* [SLD] updated Eleven, the Mage
* [NEO] Implemented Discover the Impossible
* [NEO] Implemented The Dragon-Kami Reborn / Dragon-Kami's Egg
* [NEO] Implemented Invoke Calamity
* [AFR] Implemented Rod of Absorption
* [VOC] Implemented Spectral Arcanist
* [VOC] added additional printings
* [NEO] added all variants
* [SLD] updated implementation of Ken, Burning Brawler
* changing goad to designation, refactored goad effects to be continuous
* [AFC] Implemented Vengeful Ancestor
* reworked effects which goad an attached creature
* updated goading implementation
* updated combat with new goad logic
* some more changes, added a test
* another fix
* update to test, still fails
* added more failing tests
* more failing tests
* added additional goad check
* small fix to two tests (still failing
* added a regular combat test (passes and fails randomly)
* fixed bug in computer player random selection
* some changes to how TargetDefender is handled
* removed unnecessary class
* more combat fixes, tests pass now
* removed tests which no longer work due to combat changes
* small merge fix
* [NEC] Implemented Komainu Battle Armor
* [NEC] Implemented Kaima, the Fractured Calm
* [NEC] added all variants
* added transform button to permanents on battlefield to view another card side;
* fixed wrong popup hints in some use cases (example: alternative side view by mouse wheel down, #8433);