Add MTGA Assistant: native Linux deck and game tracker
PySide6 app that follows MTG Arena's Player.log under Steam/Proton and shows my remaining library with draw odds, my zones, and everything revealed about the opponent (board, graveyard, exile, known hand/library, seen this match). - Auto-detects the Steam library, Proton prefix log and MTGA install - Card names/costs/types from MTGA's local SQLite card database - Tracks card identity across zone changes, shuffles and Bo3 games - Scryfall card images with a lazy, size-capped LRU disk cache - Live log following with restart detection, plus --replay mode - Flags log gaps where MTGA omits oversized game-state messages Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
734336168c
commit
7dc2ce0da8
21 files changed
+2736
No files matched your search
Vendored
+601
@@ -0,0 +1,601 @@
|
||||
{"MatchesV3":[]}
|
||||
[UnityCrossThreadLogger]==> EventJoin {"id":"53b1b1d2-ef72-461f-a4c6-93218bbffe0c","request":"{\"EventName\":\"Traditional_Historic_Play\",\"EntryCurrencyType\":\"None\",\"EntryCurrencyPaid\":0,\"CustomTokenId\":null,\"EventChoice\":\"\",\"DebugIgnoreEntryLimits\":false}"}
|
||||
[UnityCrossThreadLogger]10/16/2026 12:34:31 AM
|
||||
<== EventJoin(53b1b1d2-ef72-461f-a4c6-93218bbffe0c)
|
||||
{"Course":{"CourseId":"9f838f46-df35-409e-919c-50298839beb1","InternalEventName":"Traditional_Historic_Play","CurrentModule":"DeckSelect","ModulePayload":"","CourseDeckSummary":{"Attributes":[],"PreferredCosmetics":{"Avatar":"","Sleeve":"","Pet":"","Title":"","Emotes":[]}},"CardPool":[],"CardStyles":[]},"InventoryInfo":{"SeqId":4,"Changes":[],"Gems":2800,"Gold":4395,"TotalVaultProgress":965,"wcTrackPosition":7,"WildCardCommons":173,"WildCardUnCommons":153,"WildCardRares":5,"CustomTokens":{"HotPocketsProgressiveRewards":1,"PlayInToken":5,"DraftToken":5,"Token_JumpIn":2,"StarterBundle_Gate_1":1,"SealedToken":2,"BonusPackProgress":7},"Boosters":[],"VouchersV2":{},"PrizeWallsUnlocked":[],"Cosmetics":{"ArtStyles":[{"Type":"ArtStyle","Id":"416780.DA","ArtId":416780,"Variant":"DA","ExplicitGrpIds":[]},{"Type":"ArtStyle","Id":"415990.DA","ArtId":415990,"Variant":"DA","ExplicitGrpIds":[]},{"Type":"ArtStyle","Id":"406523.SG","ArtId":406523,"Variant":"SG","ExplicitGrpIds":[],"AcquisitionFlags":"CodeRedemption"},{"Type":"ArtStyle","Id":"404135.DA","ArtId":404135,"Variant":"DA","ExplicitGrpIds":[],"AcquisitionFlags":"CodeRedemption"},{"Type":"ArtStyle","Id":"406559.SG","ArtId":406559,"Variant":"SG","ExplicitGrpIds":[],"AcquisitionFlags":"CodeRedemption"},{"Type":"ArtStyle","Id":"406626.SG","ArtId":406626,"Variant":"SG","ExplicitGrpIds":[],"AcquisitionFlags":"CodeRedemption"},{"Type":"ArtStyle","Id":"404488.DA","ArtId":404488,"Variant":"DA","ExplicitGrpIds":[],"AcquisitionFlags":"CodeRedemption"},{"Type":"ArtStyle","Id":"409514.SG","ArtId":409514,"Variant":"SG","ExplicitGrpIds":[],"AcquisitionFlags":"CodeRedemption"},{"Type":"ArtStyle","Id":"402959.DA","ArtId":402959,"Variant":"DA","ExplicitGrpIds":[],"AcquisitionFlags":"CodeRedemption"},{"Type":"ArtStyle","Id":"400332.DA","ArtId":400332,"Variant":"DA","ExplicitGrpIds":[],"AcquisitionFlags":"CodeRedemption"},{"Type":"ArtStyle","Id":"402057.DA","ArtId":402057,"Variant":"DA","ExplicitGrpIds":[],"AcquisitionFlags":"CodeRedemption"},{"Type":"ArtStyle","Id":"406664.SG","ArtId":406664,"Variant":"SG","ExplicitGrpIds":[],"AcquisitionFlags":"CodeRedemption"},{"Type":"ArtStyle","Id":"413908.MP","ArtId":413908,"Variant":"MP","ExplicitGrpIds":[]},{"Type":"ArtStyle","Id":"416644.SH","ArtId":416644,"Variant":"SH","ExplicitGrpIds":[]},{"Type":"ArtStyle","Id":"416688.DA","ArtId":416688,"Variant":"DA","ExplicitGrpIds":[]},{"Type":"ArtStyle","Id":"419665.DA","ArtId":419665,"Variant":"DA","ExplicitGrpIds":[]},{"Type":"ArtStyle","Id":"411692.DA","ArtId":411692,"Variant":"DA","ExplicitGrpIds":[]},{"Type":"ArtStyle","Id":"416781.DA","ArtId":416781,"Variant":"DA","ExplicitGrpIds":[]},{"Type":"ArtStyle","Id":"419492.DA","ArtId":419492,"Variant":"DA","ExplicitGrpIds":[]},{"Type":"ArtStyle","Id":"410632.DA","ArtId":410632,"Variant":"DA","ExplicitGrpIds":[]},{"Type":"ArtStyle","Id":"410641.DA","ArtId":410641,"Variant":"DA","ExplicitGrpIds":[]},{"Type":"ArtStyle","Id":"410635.DA","ArtId":410635,"Variant":"DA","ExplicitGrpIds":[]},{"Type":"ArtStyle","Id":"419672.DA","ArtId":419672,"Variant":"DA","ExplicitGrpIds":[]},{"Type":"ArtStyle","Id":"416724.DA","ArtId":416724,"Variant":"DA","ExplicitGrpIds":[]},{"Type":"ArtStyle","Id":"416568.DA","ArtId":416568,"Variant":"DA","ExplicitGrpIds":[]},{"Type":"ArtStyle","Id":"419467.DA","ArtId":419467,"Variant":"DA","ExplicitGrpIds":[],"AcquisitionFlags":"SeasonReward"},{"Type":"ArtStyle","Id":"419630.DA","ArtId":419630,"Variant":"DA","ExplicitGrpIds":[],"AcquisitionFlags":"SeasonReward"},{"Type":"ArtStyle","Id":"419514.DA","ArtId":419514,"Variant":"DA","ExplicitGrpIds":[]},{"Type":"ArtStyle","Id":"421172.DA","ArtId":421172,"Variant":"DA","ExplicitGrpIds":[]},{"Type":"ArtStyle","Id":"417870.JP","ArtId":417870,"Variant":"JP","ExplicitGrpIds":[]},{"Type":"ArtStyle","Id":"421184.DA","ArtId":421184,"Variant":"DA","ExplicitGrpIds":[]},{"Type":"ArtStyle","Id":"421370.FF","ArtId":421370,"Variant":"FF","ExplicitGrpIds":[]},{"Type":"ArtStyle","Id":"421371.FF","ArtId":421371,"Variant":"FF","ExplicitGrpIds":[]},{"Type":"ArtStyle","Id":"421372.FF","ArtId":421372,"Variant":"FF","ExplicitGrpIds":[]},{"Type":"ArtStyle","Id":"421373.FF","ArtId":421373,"Variant":"FF","ExplicitGrpIds":[]},{"Type":"ArtStyle","Id":"421374.FF","ArtId":421374,"Variant":"FF","ExplicitGrpIds":[]},{"Type":"ArtStyle","Id":"419511.DA","ArtId":419511,"Variant":"DA","ExplicitGrpIds":[],"AcquisitionFlags":"SeasonReward"},{"Type":"ArtStyle","Id":"419475.DA","ArtId":419475,"Variant":"DA","ExplicitGrpIds":[],"AcquisitionFlags":"SeasonReward"},{"Type":"ArtStyle","Id":"421185.DA","ArtId":421185,"Variant":"DA","ExplicitGrpIds":[]},{"Type":"ArtStyle","Id":"421198.DA","ArtId":421198,"Variant":"DA","ExplicitGrpIds":[]},{"Type":"ArtStyle","Id":"421180.DA","ArtId":421180,"Variant":"DA","ExplicitGrpIds":[],"AcquisitionFlags":"SeasonReward"},{"Type":"ArtStyle","Id":"421284.DA","ArtId":421284,"Variant":"DA","ExplicitGrpIds":[],"AcquisitionFlags":"SeasonReward"},{"Type":"ArtStyle","Id":"417357.DA","ArtId":417357,"Variant":"Line truncated
|
||||
[UnityCrossThreadLogger]==> DeckUpsertDeckV3 {"id":"7668648d-95b7-4564-8077-91d1e069f937","request":"{\"Summary\":{\"DeckId\":\"ad644e5b-5720-44ab-8d98-022c13d54788\",\"Mana\":\"\",\"Name\":\"Cruel Tutelage\",\"Attributes\":[{\"name\":\"Version\",\"value\":\"11\"},{\"name\":\"TileID\",\"value\":\"71860\"},{\"name\":\"LastPlayed\",\"value\":\"\\\"2026-10-16T00:34:31.4451208+00:00\\\"\"},{\"name\":\"LastUpdated\",\"value\":\"\\\"2026-10-14T15:39:44.5372957+00:00\\\"\"},{\"name\":\"IsFavorite\",\"value\":\"false\"},{\"name\":\"Format\",\"value\":\"TraditionalHistoric\"}],\"Description\":\"\",\"DeckTileId\":71860,\"DeckArtId\":0,\"IsCompanionValid\":false,\"PreferredCosmetics\":{\"Avatar\":\"\",\"Sleeve\":\"\",\"Pet\":\"\",\"Title\":\"\",\"Emotes\":[]},\"NetDeckFolderId\":null,\"IsNetDeck\":false,\"checkInbox\":false},\"Deck\":{\"MainDeck\":[{\"cardId\":71860,\"quantity\":4},{\"cardId\":97170,\"quantity\":1},{\"cardId\":93986,\"quantity\":4},{\"cardId\":77498,\"quantity\":4},{\"cardId\":94278,\"quantity\":4},{\"cardId\":73266,\"quantity\":4},{\"cardId\":102507,\"quantity\":4},{\"cardId\":75662,\"quantity\":4},{\"cardId\":97169,\"quantity\":6},{\"cardId\":95614,\"quantity\":2},{\"cardId\":91788,\"quantity\":4},{\"cardId\":83950,\"quantity\":4},{\"cardId\":68740,\"quantity\":4},{\"cardId\":94351,\"quantity\":1},{\"cardId\":87448,\"quantity\":1},{\"cardId\":73474,\"quantity\":1},{\"cardId\":106251,\"quantity\":4},{\"cardId\":70335,\"quantity\":4}],\"Sideboard\":[{\"cardId\":95614,\"quantity\":1},{\"cardId\":82853,\"quantity\":3},{\"cardId\":75118,\"quantity\":1},{\"cardId\":102775,\"quantity\":1},{\"cardId\":70205,\"quantity\":2},{\"cardId\":90718,\"quantity\":1},{\"cardId\":94877,\"quantity\":2},{\"cardId\":92204,\"quantity\":2},{\"cardId\":92407,\"quantity\":1},{\"cardId\":88998,\"quantity\":1}],\"CommandZone\":[],\"Companions\":[],\"CardSkins\":[]},\"ActionType\":\"Updated\"}"}
|
||||
[UnityCrossThreadLogger]==> EventSetDeckV3 {"id":"ddbd8dd5-7f9f-4156-9a57-f8337cc06ae5","request":"{\"EventName\":\"Traditional_Historic_Play\",\"Summary\":{\"DeckId\":\"ad644e5b-5720-44ab-8d98-022c13d54788\",\"Mana\":\"\",\"Name\":\"Cruel Tutelage\",\"Attributes\":[{\"name\":\"Version\",\"value\":\"11\"},{\"name\":\"TileID\",\"value\":\"71860\"},{\"name\":\"LastPlayed\",\"value\":\"\\\"2026-10-16T00:34:31.4451208+00:00\\\"\"},{\"name\":\"LastUpdated\",\"value\":\"\\\"2026-10-14T15:39:44.5372957+00:00\\\"\"},{\"name\":\"IsFavorite\",\"value\":\"false\"},{\"name\":\"Format\",\"value\":\"TraditionalHistoric\"}],\"Description\":\"\",\"DeckTileId\":71860,\"DeckArtId\":0,\"IsCompanionValid\":false,\"PreferredCosmetics\":{\"Avatar\":\"\",\"Sleeve\":\"\",\"Pet\":\"\",\"Title\":\"\",\"Emotes\":[]},\"NetDeckFolderId\":null,\"IsNetDeck\":false,\"checkInbox\":false},\"Deck\":{\"MainDeck\":[{\"cardId\":71860,\"quantity\":4},{\"cardId\":97170,\"quantity\":1},{\"cardId\":93986,\"quantity\":4},{\"cardId\":77498,\"quantity\":4},{\"cardId\":94278,\"quantity\":4},{\"cardId\":73266,\"quantity\":4},{\"cardId\":102507,\"quantity\":4},{\"cardId\":75662,\"quantity\":4},{\"cardId\":97169,\"quantity\":6},{\"cardId\":95614,\"quantity\":2},{\"cardId\":91788,\"quantity\":4},{\"cardId\":83950,\"quantity\":4},{\"cardId\":68740,\"quantity\":4},{\"cardId\":94351,\"quantity\":1},{\"cardId\":87448,\"quantity\":1},{\"cardId\":73474,\"quantity\":1},{\"cardId\":106251,\"quantity\":4},{\"cardId\":70335,\"quantity\":4}],\"Sideboard\":[{\"cardId\":95614,\"quantity\":1},{\"cardId\":82853,\"quantity\":3},{\"cardId\":75118,\"quantity\":1},{\"cardId\":102775,\"quantity\":1},{\"cardId\":70205,\"quantity\":2},{\"cardId\":90718,\"quantity\":1},{\"cardId\":94877,\"quantity\":2},{\"cardId\":92204,\"quantity\":2},{\"cardId\":92407,\"quantity\":1},{\"cardId\":88998,\"quantity\":1}],\"CommandZone\":[],\"Companions\":[],\"CardSkins\":[]}}"}
|
||||
[UnityCrossThreadLogger]10/16/2026 12:34:31 AM
|
||||
<== DeckUpsertDeckV3(7668648d-95b7-4564-8077-91d1e069f937)
|
||||
{"DeckId":"ad644e5b-5720-44ab-8d98-022c13d54788","Name":"Cruel Tutelage","Attributes":[{"name":"Version","value":"11"},{"name":"TileID","value":"71860"},{"name":"LastPlayed","value":"\"2026-10-16T00:34:31.4451208+00:00\""},{"name":"LastUpdated","value":"\"2026-10-14T15:39:44.5372957+00:00\""},{"name":"IsFavorite","value":"false"},{"name":"Format","value":"TraditionalHistoric"}],"Description":"","DeckTileId":71860,"DeckArtId":0,"PreferredCosmetics":{"Avatar":"","Sleeve":"","Pet":"","Title":"","Emotes":[]}}
|
||||
[UnityCrossThreadLogger]10/16/2026 12:34:31 AM
|
||||
<== EventSetDeckV3(ddbd8dd5-7f9f-4156-9a57-f8337cc06ae5)
|
||||
{"CourseId":"9f838f46-df35-409e-919c-50298839beb1","InternalEventName":"Traditional_Historic_Play","CurrentModule":"CreateMatch","ModulePayload":"","CourseDeckSummary":{"DeckId":"ad644e5b-5720-44ab-8d98-022c13d54788","Name":"Cruel Tutelage","Attributes":[{"name":"Version","value":"11"},{"name":"TileID","value":"71860"},{"name":"LastPlayed","value":"\"2026-10-16T00:34:31.4451208+00:00\""},{"name":"LastUpdated","value":"\"2026-10-14T15:39:44.5372957+00:00\""},{"name":"IsFavorite","value":"false"},{"name":"Format","value":"TraditionalHistoric"}],"Description":"","DeckTileId":71860,"DeckArtId":0,"PreferredCosmetics":{"Avatar":"","Sleeve":"","Pet":"","Title":"","Emotes":[]}},"CourseDeck":{"MainDeck":[{"cardId":71860,"quantity":4},{"cardId":97170,"quantity":1},{"cardId":93986,"quantity":4},{"cardId":77498,"quantity":4},{"cardId":94278,"quantity":4},{"cardId":73266,"quantity":4},{"cardId":102507,"quantity":4},{"cardId":75662,"quantity":4},{"cardId":97169,"quantity":6},{"cardId":95614,"quantity":2},{"cardId":91788,"quantity":4},{"cardId":83950,"quantity":4},{"cardId":68740,"quantity":4},{"cardId":94351,"quantity":1},{"cardId":87448,"quantity":1},{"cardId":73474,"quantity":1},{"cardId":106251,"quantity":4},{"cardId":70335,"quantity":4}],"Sideboard":[{"cardId":95614,"quantity":1},{"cardId":82853,"quantity":3},{"cardId":75118,"quantity":1},{"cardId":102775,"quantity":1},{"cardId":70205,"quantity":2},{"cardId":90718,"quantity":1},{"cardId":94877,"quantity":2},{"cardId":92204,"quantity":2},{"cardId":92407,"quantity":1},{"cardId":88998,"quantity":1}],"CommandZone":[],"Companions":[],"CardSkins":[]},"CardPool":[],"CardStyles":[]}
|
||||
[UnityCrossThreadLogger]==> EventEnterPairing {"id":"180f5e47-4e44-4798-9a30-df046b1d285c","request":"{\"EventName\":\"Traditional_Historic_Play\",\"EventCode\":null}"}
|
||||
[UnityCrossThreadLogger]10/16/2026 12:34:31 AM
|
||||
<== EventEnterPairing(180f5e47-4e44-4798-9a30-df046b1d285c)
|
||||
{"CurrentModule":"CreateMatch","Payload":"Success"}
|
||||
Unloading 4 Unused Serialized files (Serialized files now loaded: 299)
|
||||
Unloading 11767 unused Assets to reduce memory usage. Loaded Objects now: 26584.
|
||||
Total: 61.613200 ms (FindLiveObjects: 1.378800 ms CreateObjectMapping: 1.154200 ms MarkObjects: 54.909400 ms DeleteObjects: 4.170200 ms)
|
||||
|
||||
OnSceneLoaded for MatchScene
|
||||
There can be only one active Event System.
|
||||
OnSceneLoaded for PreGameScene
|
||||
OnSceneUnloaded for NavBar
|
||||
cannot find async scene unload for NavBar
|
||||
OnSceneUnloaded for MainNavigation
|
||||
cannot find async scene unload for MainNavigation
|
||||
Caches cleared
|
||||
Unloading 1 Unused Serialized files (Serialized files now loaded: 255)
|
||||
Unloading 10110 unused Assets to reduce memory usage. Loaded Objects now: 12270.
|
||||
Total: 71.226500 ms (FindLiveObjects: 0.839700 ms CreateObjectMapping: 0.876100 ms MarkObjects: 65.183800 ms DeleteObjects: 4.326200 ms)
|
||||
|
||||
Reference Assets/Core/Art/Meta/Cosmetics/Pets/Images/Icon_Pet_AFR_Dragon_U.png named AFR_DragonSkin3 not cleaned up properly.
|
||||
Reference Assets/Core/Art/Meta/Cosmetics/Pets/Images/Icon_Pet_AFR_Dragon_U.png named AFR_DragonSkin3 not cleaned up properly.
|
||||
Reference Assets/Core/Art/Meta/Cosmetics/Pets/Images/Icon_Pet_AFR_Dragon_U.png named AFR_DragonSkin3 not cleaned up properly.
|
||||
Reference Assets/Core/Art/Meta/Cosmetics/Pets/Images/Icon_Pet_AFR_Dragon_U.png named AFR_DragonSkin3 not cleaned up properly.
|
||||
[UnityCrossThreadLogger]10/16/2026 12:34:51 AM: Match to LOCALPLAYERID0000000000000: AuthenticateResponse
|
||||
{ "transactionId": "c63e3b86-1930-44bd-bcf5-a7662be2fb42", "requestId": 1, "timestamp": "639277076914576915", "authenticateResponse": { "clientId": "LOCALPLAYERID0000000000000", "sessionId": "00000000-0000-0000-0000-000000000000", "screenName":"Local Player" } }
|
||||
[UnityCrossThreadLogger]STATE CHANGED {"old":"None","new":"ConnectedToMatchDoor"}
|
||||
[UnityCrossThreadLogger]Connecting to matchId c0a18506-9d87-4d0c-a2d3-e10bef8659d3
|
||||
[UnityCrossThreadLogger]STATE CHANGED {"old":"ConnectedToMatchDoor","new":"ConnectedToMatchDoor_ConnectingToGRE"}
|
||||
[UnityCrossThreadLogger]10/16/2026 12:34:51 AM: Match to LOCALPLAYERID0000000000000: MatchGameRoomStateChangedEvent
|
||||
{ "transactionId": "2f0123f2-3c0b-417a-a5c4-2258f3d25569", "requestId": 2, "timestamp": "1792110891750", "matchGameRoomStateChangedEvent": { "gameRoomInfo": { "gameRoomConfig": { "reservedPlayers": [ { "userId": "LOCALPLAYERID0000000000000", "playerName":"Local Player", "systemSeatId": 1, "teamId": 1, "courseId": "Avatar_Basic_BilboRiddles_HOB", "sessionId": "00000000-0000-0000-0000-000000000000", "platformId": "SteamWindows", "eventId": "Traditional_Historic_Play" }, { "userId": "OPPONENTID000000", "playerName":"Opponent Player", "systemSeatId": 2, "teamId": 2, "courseId": "Avatar_Basic_Adventurer", "sessionId": "00000000-0000-0000-0000-000000000000", "platformId": "Windows", "eventId": "Traditional_Historic_Play" } ], "matchId": "c0a18506-9d87-4d0c-a2d3-e10bef8659d3" }, "stateType": "MatchGameRoomStateType_Playing", "players": [ { "userId": "LOCALPLAYERID0000000000000", "playerName":"Local Player", "systemSeatId": 1, "teamId": 1 }, { "userId": "OPPONENTID000000", "playerName":"Opponent Player", "systemSeatId": 2, "teamId": 2 } ] } } }
|
||||
[UnityCrossThreadLogger]STATE CHANGED {"old":"ConnectedToMatchDoor_ConnectingToGRE","new":"Playing"}
|
||||
[UnityCrossThreadLogger]10/16/2026 12:34:51 AM: Match to LOCALPLAYERID0000000000000: GreToClientEvent
|
||||
{ "transactionId": "2f0123f2-3c0b-417a-a5c4-2258f3d25569", "requestId": 2, "timestamp": "1792110891791", "greToClientEvent": { "greToClientMessages": [ { "type": "GREMessageType_ConnectResp", "systemSeatIds": [ 1 ], "msgId": 2, "connectResp": { "status": "ConnectionStatus_Success", "protoVer": "ProtoVersion_PersistentAnnotations", "settings": { "stops": [ { "stopType": "StopType_UpkeepStep", "appliesTo": "SettingScope_Team", "status": "SettingStatus_Clear" }, { "stopType": "StopType_UpkeepStep", "appliesTo": "SettingScope_Opponents", "status": "SettingStatus_Clear" }, { "stopType": "StopType_DrawStep", "appliesTo": "SettingScope_Team", "status": "SettingStatus_Clear" }, { "stopType": "StopType_DrawStep", "appliesTo": "SettingScope_Opponents", "status": "SettingStatus_Clear" }, { "stopType": "StopType_PrecombatMainPhase", "appliesTo": "SettingScope_Team", "status": "SettingStatus_Set" }, { "stopType": "StopType_PrecombatMainPhase", "appliesTo": "SettingScope_Opponents", "status": "SettingStatus_Clear" }, { "stopType": "StopType_BeginCombatStep", "appliesTo": "SettingScope_Team", "status": "SettingStatus_Set" }, { "stopType": "StopType_BeginCombatStep", "appliesTo": "SettingScope_Opponents", "status": "SettingStatus_Set" }, { "stopType": "StopType_DeclareAttackersStep", "appliesTo": "SettingScope_Team", "status": "SettingStatus_Set" }, { "stopType": "StopType_DeclareAttackersStep", "appliesTo": "SettingScope_Opponents", "status": "SettingStatus_Set" }, { "stopType": "StopType_DeclareBlockersStep", "appliesTo": "SettingScope_Team", "status": "SettingStatus_Set" }, { "stopType": "StopType_DeclareBlockersStep", "appliesTo": "SettingScope_Opponents", "status": "SettingStatus_Set" }, { "stopType": "StopType_CombatDamageStep", "appliesTo": "SettingScope_Team", "status": "SettingStatus_Clear" }, { "stopType": "StopType_CombatDamageStep", "appliesTo": "SettingScope_Opponents", "status": "SettingStatus_Clear" }, { "stopType": "StopType_EndCombatStep", "appliesTo": "SettingScope_Team", "status": "SettingStatus_Clear" }, { "stopType": "StopType_EndCombatStep", "appliesTo": "SettingScope_Opponents", "status": "SettingStatus_Clear" }, { "stopType": "StopType_PostcombatMainPhase", "appliesTo": "SettingScope_Team", "status": "SettingStatus_Set" }, { "stopType": "StopType_PostcombatMainPhase", "appliesTo": "SettingScope_Opponents", "status": "SettingStatus_Clear" }, { "stopType": "StopType_EndStep", "appliesTo": "SettingScope_Team", "status": "SettingStatus_Clear" }, { "stopType": "StopType_EndStep", "appliesTo": "SettingScope_Opponents", "status": "SettingStatus_Set" }, { "stopType": "StopType_FirstStrikeDamageStep", "appliesTo": "SettingScope_Team", "status": "SettingStatus_Set" }, { "stopType": "StopType_FirstStrikeDamageStep", "appliesTo": "SettingScope_Opponents", "status": "SettingStatus_Set" } ], "autoPassOption": "AutoPassOption_ResolveMyStackEffects", "graveyardOrder": "OrderingType_OrderArbitraryAlways", "manaSelectionType": "ManaSelectionType_Auto", "defaultAutoPassOption": "AutoPassOption_ResolveMyStackEffects", "smartStopsSetting": "SmartStopsSetting_Enable", "autoTapStopsSetting": "AutoTapStopsSetting_Enable", "autoOptionalPaymentCancellationSetting": "Setting_Enable", "transientStops": [ { "stopType": "StopType_UpkeepStep", "appliesTo": "SettingScope_Team", "status": "SettingStatus_Clear" }, { "stopType": "StopType_UpkeepStep", "appliesTo": "SettingScope_Opponents", "status": "SettingStatus_Clear" }, { "stopType": "StopType_DrawStep", "appliesTo": "SettingScope_Team", "status": "SettingStatus_Clear" }, { "stopType": "StopType_DrawStep", "appliesTo": "SettingScope_Opponents", "status": "SettingStatus_Clear" }, { "stopType": "StopType_PrecombatMainPhase", "appliesTo": "SettingScope_Team", "status": "SettingStatus_Clear" }, { "stopType": "StopType_PrecombatMainPhase", "appliesTo": "SettingScope_Opponents", "status": "SettingStatus_Clear" }, { "stopType": "StopType_BeginCombatStep", "appliesTo": "SettingScope_Team", "status": "SettingStatus_Clear" }, { "stopType": "StopType_BeginCombatStep", "appliesTo": "SettingScope_Opponents", "status": "SettingStatus_Clear" }, { "stopType": "StopType_DeclareAttackersStep", "appliesTo": "SettingScope_Team", "status": "SettingStatus_Clear" }, { "stopType": "StopType_DeclareAttackersStep", "appliesTo": "SettingScope_Opponents", "status": "SettingStatus_Clear" }, { "stopType": "StopType_DeclareBlockersStep", "appliesTo": "SettingScope_Team", "status": "SettingStatus_Clear" }, { "stopType": "StopType_DeclareBlockersStep", "appliesTo": "SettingScope_Opponents", "status": "SettingStatus_Clear" }, { "stopType": "StopType_CombatDamageStep", "appliesTo": "SettingScope_Team", "status": "SettingStatus_Clear" }, { "stopType": "StopType_CombatDamageStep", "appliesTo": "SettingScope_Opponents", "status": "SettingStatus_Clear" }, { "stopType": "StopType_EndCombatStep", "appliesTo": "SettingScope_Team", "status": "SettingStatus_Clear" }, { "stopType": "StopType_EndCombatStep", "appliesTo": "SLine truncated
|
||||
OnSceneLoaded for Battlefield_VOW
|
||||
OnSceneLoaded for DuelScene
|
||||
[UnityCrossThreadLogger]10/16/2026 12:34:53 AM: LOCALPLAYERID0000000000000 to Match: ClientToGremessage
|
||||
{
|
||||
"requestId": 3,
|
||||
"clientToMatchServiceMessageType": "ClientToMatchServiceMessageType_ClientToGREMessage",
|
||||
"timestamp": "639277076930443443",
|
||||
"transactionId": "547bd1dd-afcd-4073-bc42-5564a1f55936",
|
||||
"payload": {
|
||||
"type": "ClientMessageType_SetSettingsReq",
|
||||
"setSettingsReq": {
|
||||
"settings": {
|
||||
"autoPassOption": "AutoPassOption_ResolveMyStackEffects",
|
||||
"manaSelectionType": "ManaSelectionType_Auto",
|
||||
"defaultAutoPassOption": "AutoPassOption_ResolveMyStackEffects",
|
||||
"autoSelectReplacementSetting": "Setting_Enable"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
[UnityCrossThreadLogger]10/16/2026 12:34:53 AM: Match to LOCALPLAYERID0000000000000: GreToClientEvent
|
||||
{ "transactionId": "547bd1dd-afcd-4073-bc42-5564a1f55936", "requestId": 3, "timestamp": "1792110893078", "greToClientEvent": { "greToClientMessages": [ { "type": "GREMessageType_SetSettingsResp", "systemSeatIds": [ 1 ], "msgId": 7, "gameStateId": 1, "setSettingsResp": { "settings": { "stops": [ { "stopType": "StopType_UpkeepStep", "appliesTo": "SettingScope_Team", "status": "SettingStatus_Clear" }, { "stopType": "StopType_UpkeepStep", "appliesTo": "SettingScope_Opponents", "status": "SettingStatus_Clear" }, { "stopType": "StopType_DrawStep", "appliesTo": "SettingScope_Team", "status": "SettingStatus_Clear" }, { "stopType": "StopType_DrawStep", "appliesTo": "SettingScope_Opponents", "status": "SettingStatus_Clear" }, { "stopType": "StopType_PrecombatMainPhase", "appliesTo": "SettingScope_Team", "status": "SettingStatus_Set" }, { "stopType": "StopType_PrecombatMainPhase", "appliesTo": "SettingScope_Opponents", "status": "SettingStatus_Clear" }, { "stopType": "StopType_BeginCombatStep", "appliesTo": "SettingScope_Team", "status": "SettingStatus_Set" }, { "stopType": "StopType_BeginCombatStep", "appliesTo": "SettingScope_Opponents", "status": "SettingStatus_Set" }, { "stopType": "StopType_DeclareAttackersStep", "appliesTo": "SettingScope_Team", "status": "SettingStatus_Set" }, { "stopType": "StopType_DeclareAttackersStep", "appliesTo": "SettingScope_Opponents", "status": "SettingStatus_Set" }, { "stopType": "StopType_DeclareBlockersStep", "appliesTo": "SettingScope_Team", "status": "SettingStatus_Set" }, { "stopType": "StopType_DeclareBlockersStep", "appliesTo": "SettingScope_Opponents", "status": "SettingStatus_Set" }, { "stopType": "StopType_CombatDamageStep", "appliesTo": "SettingScope_Team", "status": "SettingStatus_Clear" }, { "stopType": "StopType_CombatDamageStep", "appliesTo": "SettingScope_Opponents", "status": "SettingStatus_Clear" }, { "stopType": "StopType_EndCombatStep", "appliesTo": "SettingScope_Team", "status": "SettingStatus_Clear" }, { "stopType": "StopType_EndCombatStep", "appliesTo": "SettingScope_Opponents", "status": "SettingStatus_Clear" }, { "stopType": "StopType_PostcombatMainPhase", "appliesTo": "SettingScope_Team", "status": "SettingStatus_Set" }, { "stopType": "StopType_PostcombatMainPhase", "appliesTo": "SettingScope_Opponents", "status": "SettingStatus_Clear" }, { "stopType": "StopType_EndStep", "appliesTo": "SettingScope_Team", "status": "SettingStatus_Clear" }, { "stopType": "StopType_EndStep", "appliesTo": "SettingScope_Opponents", "status": "SettingStatus_Set" }, { "stopType": "StopType_FirstStrikeDamageStep", "appliesTo": "SettingScope_Team", "status": "SettingStatus_Set" }, { "stopType": "StopType_FirstStrikeDamageStep", "appliesTo": "SettingScope_Opponents", "status": "SettingStatus_Set" } ], "autoPassOption": "AutoPassOption_ResolveMyStackEffects", "graveyardOrder": "OrderingType_OrderArbitraryAlways", "manaSelectionType": "ManaSelectionType_Auto", "defaultAutoPassOption": "AutoPassOption_ResolveMyStackEffects", "smartStopsSetting": "SmartStopsSetting_Enable", "autoTapStopsSetting": "AutoTapStopsSetting_Enable", "autoOptionalPaymentCancellationSetting": "Setting_Enable", "transientStops": [ { "stopType": "StopType_UpkeepStep", "appliesTo": "SettingScope_Team", "status": "SettingStatus_Clear" }, { "stopType": "StopType_UpkeepStep", "appliesTo": "SettingScope_Opponents", "status": "SettingStatus_Clear" }, { "stopType": "StopType_DrawStep", "appliesTo": "SettingScope_Team", "status": "SettingStatus_Clear" }, { "stopType": "StopType_DrawStep", "appliesTo": "SettingScope_Opponents", "status": "SettingStatus_Clear" }, { "stopType": "StopType_PrecombatMainPhase", "appliesTo": "SettingScope_Team", "status": "SettingStatus_Clear" }, { "stopType": "StopType_PrecombatMainPhase", "appliesTo": "SettingScope_Opponents", "status": "SettingStatus_Clear" }, { "stopType": "StopType_BeginCombatStep", "appliesTo": "SettingScope_Team", "status": "SettingStatus_Clear" }, { "stopType": "StopType_BeginCombatStep", "appliesTo": "SettingScope_Opponents", "status": "SettingStatus_Clear" }, { "stopType": "StopType_DeclareAttackersStep", "appliesTo": "SettingScope_Team", "status": "SettingStatus_Clear" }, { "stopType": "StopType_DeclareAttackersStep", "appliesTo": "SettingScope_Opponents", "status": "SettingStatus_Clear" }, { "stopType": "StopType_DeclareBlockersStep", "appliesTo": "SettingScope_Team", "status": "SettingStatus_Clear" }, { "stopType": "StopType_DeclareBlockersStep", "appliesTo": "SettingScope_Opponents", "status": "SettingStatus_Clear" }, { "stopType": "StopType_CombatDamageStep", "appliesTo": "SettingScope_Team", "status": "SettingStatus_Clear" }, { "stopType": "StopType_CombatDamageStep", "appliesTo": "SettingScope_Opponents", "status": "SettingStatus_Clear" }, { "stopType": "StopType_EndCombatStep", "appliesTo": "SettingScope_Team", "status": "SettingStatus_Clear" }, { "stopType": "StopType_EndCombatStep", "appliesTo": "SettingScope_Opponents", "status": "SettingStatus_Clear" }, { "Line truncated
|
||||
OnSceneUnloaded for PreGameScene
|
||||
[UnityCrossThreadLogger]10/16/2026 12:35:02 AM: LOCALPLAYERID0000000000000 to Match: ClientToGremessage
|
||||
{
|
||||
"requestId": 4,
|
||||
"clientToMatchServiceMessageType": "ClientToMatchServiceMessageType_ClientToGREMessage",
|
||||
"timestamp": "639277077020272410",
|
||||
"transactionId": "70cf4fe7-eed6-46b4-a124-e5e7836a4f3b",
|
||||
"payload": {
|
||||
"type": "ClientMessageType_ChooseStartingPlayerResp",
|
||||
"gameStateId": 1,
|
||||
"respId": 5,
|
||||
"chooseStartingPlayerResp": {
|
||||
"teamType": "TeamType_Individual",
|
||||
"systemSeatId": 1,
|
||||
"teamId": 1
|
||||
}
|
||||
}
|
||||
}
|
||||
[UnityCrossThreadLogger]10/16/2026 12:35:02 AM: Match to LOCALPLAYERID0000000000000: GreToClientEvent
|
||||
{ "transactionId": "70cf4fe7-eed6-46b4-a124-e5e7836a4f3b", "requestId": 4, "timestamp": "1792110902076", "greToClientEvent": { "greToClientMessages": [ { "type": "GREMessageType_GameStateMessage", "systemSeatIds": [ 1 ], "msgId": 8, "gameStateId": 2, "gameStateMessage": { "type": "GameStateType_Diff", "gameStateId": 2, "players": [ { "lifeTotal": 20, "systemSeatNumber": 1, "status": "PlayerStatus_InGame", "maxHandSize": 7, "teamId": 1, "timerIds": [ 1, 2, 3, 4, 5, 6, 7 ], "controllerSeatId": 1, "controllerType": "ControllerType_Player", "pendingMessageType": "ClientMessageType_MulliganResp", "startingLifeTotal": 20 }, { "lifeTotal": 20, "systemSeatNumber": 2, "status": "PlayerStatus_InGame", "maxHandSize": 7, "teamId": 2, "timerIds": [ 8, 9, 10, 11, 12, 13, 14 ], "controllerSeatId": 2, "controllerType": "ControllerType_Player", "pendingMessageType": "ClientMessageType_MulliganResp", "startingLifeTotal": 20 } ], "turnInfo": { "activePlayer": 1, "decisionPlayer": 1 }, "zones": [ { "zoneId": 31, "type": "ZoneType_Hand", "visibility": "Visibility_Private", "ownerSeatId": 1, "objectInstanceIds": [ 170, 169, 168, 167, 166, 165, 164 ], "viewers": [ 1 ] }, { "zoneId": 32, "type": "ZoneType_Library", "visibility": "Visibility_Hidden", "ownerSeatId": 1, "objectInstanceIds": [ 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223 ] }, { "zoneId": 35, "type": "ZoneType_Hand", "visibility": "Visibility_Private", "ownerSeatId": 2, "objectInstanceIds": [ 230, 229, 228, 227, 226, 225, 224 ], "viewers": [ 2 ] }, { "zoneId": 36, "type": "ZoneType_Library", "visibility": "Visibility_Hidden", "ownerSeatId": 2, "objectInstanceIds": [ 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283 ] } ], "gameObjects": [ { "instanceId": 164, "grpId": 97169, "type": "GameObjectType_Card", "zoneId": 31, "visibility": "Visibility_Private", "ownerSeatId": 1, "controllerSeatId": 1, "superTypes": [ "SuperType_Basic" ], "cardTypes": [ "CardType_Land" ], "subtypes": [ "SubType_Island" ], "viewers": [ 1 ], "name": 652, "overlayGrpId": 97169, "uniqueAbilities": [ { "id": 54, "grpId": 1002 } ] }, { "instanceId": 165, "grpId": 94278, "type": "GameObjectType_Card", "zoneId": 31, "visibility": "Visibility_Private", "ownerSeatId": 1, "controllerSeatId": 1, "cardTypes": [ "CardType_Instant" ], "color": [ "CardColor_Blue" ], "viewers": [ 1 ], "name": 529845, "overlayGrpId": 94278, "uniqueAbilities": [ { "id": 29, "grpId": 269 }, { "id": 30, "grpId": 25848 } ] }, { "instanceId": 166, "grpId": 71860, "type": "GameObjectType_Card", "zoneId": 31, "visibility": "Visibility_Private", "ownerSeatId": 1, "controllerSeatId": 1, "cardTypes": [ "CardType_Enchantment" ], "color": [ "CardColor_Blue" ], "viewers": [ 1 ], "name": 433755, "overlayGrpId": 71860, "uniqueAbilities": [ { "id": 6, "grpId": 92280 }, { "id": 7, "grpId": 137881 } ] }, { "instanceId": 167, "grpId": 91788, "type": "GameObjectType_Card", "zoneId": 31, "visibility": "Visibility_Private", "ownerSeatId": 1, "controllerSeatId": 1, "cardTypes": [ "CardType_Land" ], "viewers": [ 1 ], "name": 414451, "overlayGrpId": 91788, "uniqueAbilities": [ { "id": 60, "grpId": 136225 } ] }, { "instanceId": 168, "grpId": 87448, "type": "GameObjectType_Card", "zoneId": 31, "visibility": "Visibility_Private", "ownerSeatId": 1, "controllerSeatId": 1, "cardTypes": [ "CardType_Land" ], "viewers": [ 1 ], "name": 738112, "overlayGrpId": 87448, "uniqueAbilities": [ { "id": 82, "grpId": 180111 }, { "id": 83, "grpId": 1167 }, { "id": 84, "grpId": 169785 }, { "id": 85, "grpId": 169786 } ] }, { "instanceId": 169, "grpId": 73266, "type": "GameObjectType_Card", "zoneId": 31, "visibility": "Visibility_Private", "ownerSeatId": 1, "controllerSeatId": 1, "cardTypes": [ "CardType_Creature" ], "subtypes": [ "SubType_Crab" ], "color": [ "CardColor_Blue" ], "power": { }, "toughness": { "value": 3 }, "viewers": [ 1 ], "name": 437203, "overlayGrpId": 73266, "uniqueAbilities": [ { "id": 40, "grpId": 138408 } ] }, { "instanceId": 170, "grpId": 68740, "type": "GameObjectType_Card", "zoneId": 31, "visibility": "Visibility_Private", "ownerSeatId": 1, "controllerSeatId": 1, "cardTypes": [ "CardType_Land" ], "subtypes": [ "SubType_Island", "SubType_Swamp" ], "viewers": [ 1 ], "name": 30133, "overlayGrpId": 68740, "uniqueAbilities": [ { "id": 78, "grpId": 1003 }, { "id": 79, "grpId": 1002 }, { "id": 80, "grpId": 90846 } ] } ], "annotations": [ { "id": 76, "affectorId": 1, "affectedIds": [ 1 ], "type": [ "AnnotationType_NewTurnStarted" ] } ], "pendingMessageCount": 1, "prevGameStateId": 1, "timers": [ { "timerId": 1, "type": "TimerType_ProLine truncated
|
||||
[UnityCrossThreadLogger]10/16/2026 12:35:04 AM: LOCALPLAYERID0000000000000 to Match: ClientToGreuimessage
|
||||
{
|
||||
"requestId": 5,
|
||||
"clientToMatchServiceMessageType": "ClientToMatchServiceMessageType_ClientToGREUIMessage",
|
||||
"timestamp": "639277077041146547",
|
||||
"transactionId": "211ff842-4b99-4b40-9500-eeda87188dd5",
|
||||
"payload": {
|
||||
"type": "ClientMessageType_UIMessage",
|
||||
"systemSeatId": 1,
|
||||
"uiMessage": {
|
||||
"seatIds": [
|
||||
2
|
||||
],
|
||||
"onHover": {}
|
||||
}
|
||||
}
|
||||
}
|
||||
[UnityCrossThreadLogger]10/16/2026 12:35:04 AM: LOCALPLAYERID0000000000000 to Match: ClientToGreuimessage
|
||||
{
|
||||
"requestId": 6,
|
||||
"clientToMatchServiceMessageType": "ClientToMatchServiceMessageType_ClientToGREUIMessage",
|
||||
"timestamp": "639277077044826475",
|
||||
"transactionId": "2612646a-cad1-45e0-9bd1-e8ea6b7861f4",
|
||||
"payload": {
|
||||
"type": "ClientMessageType_UIMessage",
|
||||
"systemSeatId": 1,
|
||||
"uiMessage": {
|
||||
"seatIds": [
|
||||
2
|
||||
],
|
||||
"onHover": {}
|
||||
}
|
||||
}
|
||||
}
|
||||
[UnityCrossThreadLogger]10/16/2026 12:35:05 AM: LOCALPLAYERID0000000000000 to Match: ClientToGremessage
|
||||
{
|
||||
"requestId": 7,
|
||||
"clientToMatchServiceMessageType": "ClientToMatchServiceMessageType_ClientToGREMessage",
|
||||
"timestamp": "639277077056599346",
|
||||
"transactionId": "964f666c-3a18-401f-a657-2ba3d42a4d04",
|
||||
"payload": {
|
||||
"type": "ClientMessageType_MulliganResp",
|
||||
"gameStateId": 2,
|
||||
"respId": 9,
|
||||
"mulliganResp": {
|
||||
"decision": "MulliganOption_AcceptHand"
|
||||
}
|
||||
}
|
||||
}
|
||||
[UnityCrossThreadLogger]10/16/2026 12:35:05 AM: Match to LOCALPLAYERID0000000000000: GreToClientEvent
|
||||
{ "transactionId": "964f666c-3a18-401f-a657-2ba3d42a4d04", "requestId": 7, "timestamp": "1792110905707", "greToClientEvent": { "greToClientMessages": [ { "type": "GREMessageType_GameStateMessage", "systemSeatIds": [ 1 ], "msgId": 10, "gameStateId": 3, "gameStateMessage": { "type": "GameStateType_Diff", "gameStateId": 3, "players": [ { "lifeTotal": 20, "systemSeatNumber": 1, "status": "PlayerStatus_InGame", "maxHandSize": 7, "teamId": 1, "timerIds": [ 1, 2, 3, 4, 5, 6, 7 ], "controllerSeatId": 1, "controllerType": "ControllerType_Player", "startingLifeTotal": 20 } ], "turnInfo": { "activePlayer": 1, "decisionPlayer": 2 }, "pendingMessageCount": 1, "prevGameStateId": 2, "timers": [ { "timerId": 1, "type": "TimerType_Prologue", "durationSec": 120, "elapsedSec": 13, "behavior": "TimerBehavior_TakeControl", "warningThresholdSec": 30, "elapsedMs": 13914 }, { "timerId": 6, "type": "TimerType_Inactivity", "durationSec": 150, "behavior": "TimerBehavior_Timeout", "warningThresholdSec": 30 }, { "timerId": 7, "type": "TimerType_MatchClock", "durationSec": 1800, "elapsedSec": 13, "behavior": "TimerBehavior_Timeout", "warningThresholdSec": 30, "elapsedMs": 13914 }, { "timerId": 8, "type": "TimerType_Prologue", "durationSec": 120, "running": true, "behavior": "TimerBehavior_TakeControl", "warningThresholdSec": 30, "elapsedMs": 1 }, { "timerId": 13, "type": "TimerType_Inactivity", "durationSec": 150, "running": true, "behavior": "TimerBehavior_Timeout", "warningThresholdSec": 30, "elapsedMs": 1 }, { "timerId": 14, "type": "TimerType_MatchClock", "durationSec": 1800, "running": true, "behavior": "TimerBehavior_Timeout", "warningThresholdSec": 30, "elapsedMs": 1 } ], "update": "GameStateUpdate_SendAndRecord", "actions": [ { "seatId": 1, "action": { "actionType": "ActionType_Cast", "instanceId": 166, "manaCost": [ { "color": [ "ManaColor_Generic" ], "count": 2 }, { "color": [ "ManaColor_Blue" ], "count": 1 } ] } }, { "seatId": 1, "action": { "actionType": "ActionType_Cast", "instanceId": 165, "manaCost": [ { "color": [ "ManaColor_Blue" ], "count": 1 } ] } }, { "seatId": 1, "action": { "actionType": "ActionType_Cast", "instanceId": 169, "manaCost": [ { "color": [ "ManaColor_Blue" ], "count": 1 } ] } }, { "seatId": 1, "action": { "actionType": "ActionType_Play", "instanceId": 164 } }, { "seatId": 1, "action": { "actionType": "ActionType_Play", "instanceId": 167 } }, { "seatId": 1, "action": { "actionType": "ActionType_Play", "instanceId": 170 } }, { "seatId": 1, "action": { "actionType": "ActionType_Play", "instanceId": 168 } } ] } }, { "type": "GREMessageType_PromptReq", "systemSeatIds": [ 1, 2 ], "msgId": 11, "gameStateId": 3, "prompt": { "promptId": 37, "parameters": [ { "parameterName": "PlayerId", "type": "ParameterType_Reference", "reference": { "type": "ReferenceType_PlayerSeatId", "id": 1 } } ] } } ] } }
|
||||
[UnityCrossThreadLogger]10/16/2026 12:35:06 AM: LOCALPLAYERID0000000000000 to Match: ClientToGreuimessage
|
||||
{
|
||||
"requestId": 8,
|
||||
"clientToMatchServiceMessageType": "ClientToMatchServiceMessageType_ClientToGREUIMessage",
|
||||
"timestamp": "639277077061142090",
|
||||
"transactionId": "d1aa0e84-c106-44be-b840-acd3b97f4c84",
|
||||
"payload": {
|
||||
"type": "ClientMessageType_UIMessage",
|
||||
"systemSeatId": 1,
|
||||
"uiMessage": {
|
||||
"seatIds": [
|
||||
2
|
||||
],
|
||||
"onHover": {
|
||||
"objectId": 165
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
[UnityCrossThreadLogger]10/16/2026 12:35:06 AM: LOCALPLAYERID0000000000000 to Match: ClientToGreuimessage
|
||||
{
|
||||
"requestId": 9,
|
||||
"clientToMatchServiceMessageType": "ClientToMatchServiceMessageType_ClientToGREUIMessage",
|
||||
"timestamp": "639277077061315553",
|
||||
"transactionId": "06c95a02-f598-42a4-bc78-a217e3abe6d7",
|
||||
"payload": {
|
||||
"type": "ClientMessageType_UIMessage",
|
||||
"systemSeatId": 1,
|
||||
"uiMessage": {
|
||||
"seatIds": [
|
||||
2
|
||||
],
|
||||
"onHover": {}
|
||||
}
|
||||
}
|
||||
}
|
||||
[UnityCrossThreadLogger]10/16/2026 12:35:06 AM: LOCALPLAYERID0000000000000 to Match: ClientToGreuimessage
|
||||
{
|
||||
"requestId": 10,
|
||||
"clientToMatchServiceMessageType": "ClientToMatchServiceMessageType_ClientToGREUIMessage",
|
||||
"timestamp": "639277077061404856",
|
||||
"transactionId": "4eeb8bf7-e5f4-4b60-b8b5-647447d12006",
|
||||
"payload": {
|
||||
"type": "ClientMessageType_UIMessage",
|
||||
"systemSeatId": 1,
|
||||
"uiMessage": {
|
||||
"seatIds": [
|
||||
2
|
||||
],
|
||||
"onHover": {
|
||||
"objectId": 170
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
[UnityCrossThreadLogger]10/16/2026 12:35:06 AM: Match to LOCALPLAYERID0000000000000: GreToClientEvent
|
||||
{ "transactionId": "06085585-8ac8-4c74-9db9-08ee6bdba377", "requestId": 4, "timestamp": "1792110906631", "greToClientEvent": { "greToClientMessages": [ { "type": "GREMessageType_UIMessage", "systemSeatIds": [ 1 ], "uiMessage": { "seatIds": [ 2 ], "onHover": { } } } ] } }
|
||||
[UnityCrossThreadLogger]10/16/2026 12:35:06 AM: Match to LOCALPLAYERID0000000000000: GreToClientEvent
|
||||
{ "transactionId": "8ac8d6d3-a810-4e92-afb9-2cb4f37fdc26", "requestId": 5, "timestamp": "1792110906823", "greToClientEvent": { "greToClientMessages": [ { "type": "GREMessageType_UIMessage", "systemSeatIds": [ 1 ], "uiMessage": { "seatIds": [ 2 ], "onHover": { } } } ] } }
|
||||
[UnityCrossThreadLogger]10/16/2026 12:35:07 AM: Match to LOCALPLAYERID0000000000000: GreToClientEvent
|
||||
{ "transactionId": "c4344ffc-4182-471b-aeba-50567f8adc6c", "requestId": 6, "timestamp": "1792110907812", "greToClientEvent": { "greToClientMessages": [ { "type": "GREMessageType_UIMessage", "systemSeatIds": [ 1 ], "uiMessage": { "seatIds": [ 2 ], "onHover": { } } } ] } }
|
||||
[UnityCrossThreadLogger]10/16/2026 12:35:08 AM: LOCALPLAYERID0000000000000 to Match: ClientToGreuimessage
|
||||
{
|
||||
"requestId": 11,
|
||||
"clientToMatchServiceMessageType": "ClientToMatchServiceMessageType_ClientToGREUIMessage",
|
||||
"timestamp": "639277077082945543",
|
||||
"transactionId": "dd785371-e392-4e8f-a513-eada3c52a626",
|
||||
"payload": {
|
||||
"type": "ClientMessageType_UIMessage",
|
||||
"systemSeatId": 1,
|
||||
"uiMessage": {
|
||||
"seatIds": [
|
||||
2
|
||||
],
|
||||
"onHover": {
|
||||
"objectId": 164
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
[UnityCrossThreadLogger]10/16/2026 12:35:09 AM: Match to LOCALPLAYERID0000000000000: GreToClientEvent
|
||||
{ "transactionId": "f10f5093-bdfd-4b61-9eb5-3df8d014fc77", "requestId": 7, "timestamp": "1792110909129", "greToClientEvent": { "greToClientMessages": [ { "type": "GREMessageType_SetSettingsResp", "systemSeatIds": [ 1 ], "msgId": 14, "gameStateId": 3, "setSettingsResp": { "settings": { "stops": [ { "stopType": "StopType_UpkeepStep", "appliesTo": "SettingScope_Team", "status": "SettingStatus_Clear" }, { "stopType": "StopType_UpkeepStep", "appliesTo": "SettingScope_Opponents", "status": "SettingStatus_Clear" }, { "stopType": "StopType_DrawStep", "appliesTo": "SettingScope_Team", "status": "SettingStatus_Clear" }, { "stopType": "StopType_DrawStep", "appliesTo": "SettingScope_Opponents", "status": "SettingStatus_Clear" }, { "stopType": "StopType_PrecombatMainPhase", "appliesTo": "SettingScope_Team", "status": "SettingStatus_Set" }, { "stopType": "StopType_PrecombatMainPhase", "appliesTo": "SettingScope_Opponents", "status": "SettingStatus_Clear" }, { "stopType": "StopType_BeginCombatStep", "appliesTo": "SettingScope_Team", "status": "SettingStatus_Set" }, { "stopType": "StopType_BeginCombatStep", "appliesTo": "SettingScope_Opponents", "status": "SettingStatus_Set" }, { "stopType": "StopType_DeclareAttackersStep", "appliesTo": "SettingScope_Team", "status": "SettingStatus_Set" }, { "stopType": "StopType_DeclareAttackersStep", "appliesTo": "SettingScope_Opponents", "status": "SettingStatus_Set" }, { "stopType": "StopType_DeclareBlockersStep", "appliesTo": "SettingScope_Team", "status": "SettingStatus_Set" }, { "stopType": "StopType_DeclareBlockersStep", "appliesTo": "SettingScope_Opponents", "status": "SettingStatus_Set" }, { "stopType": "StopType_CombatDamageStep", "appliesTo": "SettingScope_Team", "status": "SettingStatus_Clear" }, { "stopType": "StopType_CombatDamageStep", "appliesTo": "SettingScope_Opponents", "status": "SettingStatus_Clear" }, { "stopType": "StopType_EndCombatStep", "appliesTo": "SettingScope_Team", "status": "SettingStatus_Clear" }, { "stopType": "StopType_EndCombatStep", "appliesTo": "SettingScope_Opponents", "status": "SettingStatus_Clear" }, { "stopType": "StopType_PostcombatMainPhase", "appliesTo": "SettingScope_Team", "status": "SettingStatus_Set" }, { "stopType": "StopType_PostcombatMainPhase", "appliesTo": "SettingScope_Opponents", "status": "SettingStatus_Clear" }, { "stopType": "StopType_EndStep", "appliesTo": "SettingScope_Team", "status": "SettingStatus_Clear" }, { "stopType": "StopType_EndStep", "appliesTo": "SettingScope_Opponents", "status": "SettingStatus_Set" }, { "stopType": "StopType_FirstStrikeDamageStep", "appliesTo": "SettingScope_Team", "status": "SettingStatus_Set" }, { "stopType": "StopType_FirstStrikeDamageStep", "appliesTo": "SettingScope_Opponents", "status": "SettingStatus_Set" } ], "autoPassOption": "AutoPassOption_Clear", "graveyardOrder": "OrderingType_OrderArbitraryAlways", "manaSelectionType": "ManaSelectionType_Auto", "defaultAutoPassOption": "AutoPassOption_ResolveMyStackEffects", "smartStopsSetting": "SmartStopsSetting_Enable", "autoTapStopsSetting": "AutoTapStopsSetting_Enable", "autoOptionalPaymentCancellationSetting": "Setting_Enable", "transientStops": [ { "stopType": "StopType_UpkeepStep", "appliesTo": "SettingScope_Team", "status": "SettingStatus_Clear" }, { "stopType": "StopType_UpkeepStep", "appliesTo": "SettingScope_Opponents", "status": "SettingStatus_Clear" }, { "stopType": "StopType_DrawStep", "appliesTo": "SettingScope_Team", "status": "SettingStatus_Clear" }, { "stopType": "StopType_DrawStep", "appliesTo": "SettingScope_Opponents", "status": "SettingStatus_Clear" }, { "stopType": "StopType_PrecombatMainPhase", "appliesTo": "SettingScope_Team", "status": "SettingStatus_Clear" }, { "stopType": "StopType_PrecombatMainPhase", "appliesTo": "SettingScope_Opponents", "status": "SettingStatus_Clear" }, { "stopType": "StopType_BeginCombatStep", "appliesTo": "SettingScope_Team", "status": "SettingStatus_Clear" }, { "stopType": "StopType_BeginCombatStep", "appliesTo": "SettingScope_Opponents", "status": "SettingStatus_Clear" }, { "stopType": "StopType_DeclareAttackersStep", "appliesTo": "SettingScope_Team", "status": "SettingStatus_Clear" }, { "stopType": "StopType_DeclareAttackersStep", "appliesTo": "SettingScope_Opponents", "status": "SettingStatus_Clear" }, { "stopType": "StopType_DeclareBlockersStep", "appliesTo": "SettingScope_Team", "status": "SettingStatus_Clear" }, { "stopType": "StopType_DeclareBlockersStep", "appliesTo": "SettingScope_Opponents", "status": "SettingStatus_Clear" }, { "stopType": "StopType_CombatDamageStep", "appliesTo": "SettingScope_Team", "status": "SettingStatus_Clear" }, { "stopType": "StopType_CombatDamageStep", "appliesTo": "SettingScope_Opponents", "status": "SettingStatus_Clear" }, { "stopType": "StopType_EndCombatStep", "appliesTo": "SettingScope_Team", "status": "SettingStatus_Clear" }, { "stopType": "StopType_EndCombatStep", "appliesTo": "SettingScope_Opponents", "status": "SettingStatus_Clear" }, { "stopType": "StoLine truncated
|
||||
[UnityCrossThreadLogger]10/16/2026 12:35:09 AM: LOCALPLAYERID0000000000000 to Match: ClientToGremessage
|
||||
{
|
||||
"requestId": 12,
|
||||
"clientToMatchServiceMessageType": "ClientToMatchServiceMessageType_ClientToGREMessage",
|
||||
"timestamp": "639277077097327477",
|
||||
"transactionId": "7b4a270a-d961-444d-afd7-493b93362c08",
|
||||
"payload": {
|
||||
"type": "ClientMessageType_PerformActionResp",
|
||||
"gameStateId": 6,
|
||||
"respId": 19,
|
||||
"performActionResp": {
|
||||
"actions": [
|
||||
{
|
||||
"actionType": "ActionType_Play",
|
||||
"grpId": 97169,
|
||||
"instanceId": 164,
|
||||
"facetId": 164,
|
||||
"shouldStop": true
|
||||
}
|
||||
],
|
||||
"autoPassPriority": "AutoPassPriority_Yes"
|
||||
}
|
||||
}
|
||||
}
|
||||
[UnityCrossThreadLogger]10/16/2026 12:35:09 AM: LOCALPLAYERID0000000000000 to Match: ClientToGreuimessage
|
||||
{
|
||||
"requestId": 13,
|
||||
"clientToMatchServiceMessageType": "ClientToMatchServiceMessageType_ClientToGREUIMessage",
|
||||
"timestamp": "639277077098083989",
|
||||
"transactionId": "a3f6d8ca-9dfc-4ea8-a29d-6d0bab8a43d5",
|
||||
"payload": {
|
||||
"type": "ClientMessageType_UIMessage",
|
||||
"systemSeatId": 1,
|
||||
"uiMessage": {
|
||||
"seatIds": [
|
||||
2
|
||||
],
|
||||
"onHover": {}
|
||||
}
|
||||
}
|
||||
}
|
||||
[UnityCrossThreadLogger]10/16/2026 12:35:09 AM: Match to LOCALPLAYERID0000000000000: GreToClientEvent
|
||||
{ "transactionId": "7b4a270a-d961-444d-afd7-493b93362c08", "requestId": 12, "timestamp": "1792110909786", "greToClientEvent": { "greToClientMessages": [ { "type": "GREMessageType_GameStateMessage", "systemSeatIds": [ 1 ], "msgId": 20, "gameStateId": 7, "gameStateMessage": { "type": "GameStateType_Diff", "gameStateId": 7, "zones": [ { "zoneId": 28, "type": "ZoneType_Battlefield", "visibility": "Visibility_Public", "objectInstanceIds": [ 284 ] }, { "zoneId": 30, "type": "ZoneType_Limbo", "visibility": "Visibility_Public", "objectInstanceIds": [ 164 ] }, { "zoneId": 31, "type": "ZoneType_Hand", "visibility": "Visibility_Private", "ownerSeatId": 1, "objectInstanceIds": [ 170, 169, 168, 167, 166, 165 ], "viewers": [ 1 ] } ], "gameObjects": [ { "instanceId": 164, "grpId": 97169, "type": "GameObjectType_Card", "zoneId": 30, "visibility": "Visibility_Private", "ownerSeatId": 1, "controllerSeatId": 1, "superTypes": [ "SuperType_Basic" ], "cardTypes": [ "CardType_Land" ], "subtypes": [ "SubType_Island" ], "viewers": [ 1 ], "name": 652, "overlayGrpId": 97169, "uniqueAbilities": [ { "id": 54, "grpId": 1002 } ] }, { "instanceId": 284, "grpId": 97169, "type": "GameObjectType_Card", "zoneId": 28, "visibility": "Visibility_Public", "ownerSeatId": 1, "controllerSeatId": 1, "superTypes": [ "SuperType_Basic" ], "cardTypes": [ "CardType_Land" ], "subtypes": [ "SubType_Island" ], "name": 652, "overlayGrpId": 97169, "uniqueAbilities": [ { "id": 235, "grpId": 1002 } ] } ], "annotations": [ { "id": 80, "affectedIds": [ 164 ], "type": [ "AnnotationType_ObjectIdChanged" ], "details": [ { "key": "orig_id", "type": "KeyValuePairValueType_int32", "valueInt32": [ 164 ] }, { "key": "new_id", "type": "KeyValuePairValueType_int32", "valueInt32": [ 284 ] } ] }, { "id": 81, "affectedIds": [ 284 ], "type": [ "AnnotationType_ZoneTransfer" ], "details": [ { "key": "zone_src", "type": "KeyValuePairValueType_int32", "valueInt32": [ 31 ] }, { "key": "zone_dest", "type": "KeyValuePairValueType_int32", "valueInt32": [ 28 ] }, { "key": "category", "type": "KeyValuePairValueType_string", "valueString": [ "PlayLand" ] } ] }, { "id": 82, "affectorId": 1, "affectedIds": [ 284 ], "type": [ "AnnotationType_UserActionTaken" ], "details": [ { "key": "actionType", "type": "KeyValuePairValueType_int32", "valueInt32": [ 3 ] }, { "key": "abilityGrpId", "type": "KeyValuePairValueType_int32", "valueInt32": [ 0 ] } ] } ], "pendingMessageCount": 1, "prevGameStateId": 6, "timers": [ { "timerId": 3, "type": "TimerType_ActivePlayer", "durationSec": 68, "behavior": "TimerBehavior_TakeControl", "warningThresholdSec": 30 }, { "timerId": 5, "type": "TimerType_Delay", "durationSec": 2, "running": true, "behavior": "TimerBehavior_StartDelayedTimer", "elapsedMs": 649 }, { "timerId": 7, "type": "TimerType_MatchClock", "durationSec": 1800, "elapsedSec": 14, "running": true, "behavior": "TimerBehavior_Timeout", "warningThresholdSec": 30, "elapsedMs": 14564 } ], "update": "GameStateUpdate_SendAndRecord", "actions": [ { "seatId": 1, "action": { "actionType": "ActionType_Cast", "instanceId": 166, "manaCost": [ { "color": [ "ManaColor_Generic" ], "count": 2 }, { "color": [ "ManaColor_Blue" ], "count": 1 } ] } }, { "seatId": 1, "action": { "actionType": "ActionType_Cast", "instanceId": 165, "manaCost": [ { "color": [ "ManaColor_Blue" ], "count": 1 } ] } }, { "seatId": 1, "action": { "actionType": "ActionType_Cast", "instanceId": 169, "manaCost": [ { "color": [ "ManaColor_Blue" ], "count": 1 } ] } }, { "seatId": 1, "action": { "actionType": "ActionType_Play", "instanceId": 167 } }, { "seatId": 1, "action": { "actionType": "ActionType_Play", "instanceId": 170 } }, { "seatId": 1, "action": { "actionType": "ActionType_Play", "instanceId": 168 } }, { "seatId": 1, "action": { "actionType": "ActionType_Activate_Mana", "instanceId": 284, "abilityGrpId": 1002 } } ], "persistentAnnotations": [ { "id": 5, "affectorId": 28, "affectedIds": [ 284 ], "type": [ "AnnotationType_EnteredZoneThisTurn" ] }, { "id": 84, "affectorId": 284, "affectedIds": [ 284 ], "type": [ "AnnotationType_ColorProduction" ], "details": [ { "key": "colors", "type": "KeyValuePairValueType_int32", "valueInt32": [ 2 ] } ] } ] } }, { "type": "GREMessageType_ActionsAvailableReq", "systemSeatIds": [ 1 ], "msgId": 21, "gameStateId": 7, "prompt": { "promptId": 2 }, "actionsAvailableReq": { "actions": [ { "actionType": "ActionType_Cast", "grpId": 94278, "instanceId": 165, "facetId": 165, "manaCost": [ { "color": [ "ManaColor_Blue" ], "count": 1 } ], "shouldStop": true, "autoTapSolution": { "autoTapActions": [ { "instanceId": 284, "abilityGrpId": 1002, "manaPaymentOption": { "mana": [ { "manaId": 1, "color": "ManaColor_Blue", "srcInstanceId": 284, "specs": [ { "type": "ManaSpecType_Predictive" } ], "abilityGrpId": 1002, "count": 1 } ] } } ] } }, { "actionType": "ActionType_Cast", "grpId": 71860, "instanceId": 166, "facetId": 166, "manaCost": [ { "color": [ "ManaColor_Generic" ], "count": 2 }, { "color": [ "ManaColor_Blue" ], "count"Line truncated
|
||||
[UnityCrossThreadLogger]10/16/2026 12:35:09 AM: LOCALPLAYERID0000000000000 to Match: ClientToGreuimessage
|
||||
{
|
||||
"requestId": 14,
|
||||
"clientToMatchServiceMessageType": "ClientToMatchServiceMessageType_ClientToGREUIMessage",
|
||||
"timestamp": "639277077099127670",
|
||||
"transactionId": "50fdb5af-7c78-4d45-8d62-e04f26ed0d7a",
|
||||
"payload": {
|
||||
"type": "ClientMessageType_UIMessage",
|
||||
"systemSeatId": 1,
|
||||
"uiMessage": {
|
||||
"seatIds": [
|
||||
2
|
||||
],
|
||||
"onHover": {
|
||||
"objectId": 169
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
[UnityCrossThreadLogger]10/16/2026 12:35:10 AM: LOCALPLAYERID0000000000000 to Match: ClientToGremessage
|
||||
{
|
||||
"requestId": 15,
|
||||
"clientToMatchServiceMessageType": "ClientToMatchServiceMessageType_ClientToGREMessage",
|
||||
"timestamp": "639277077102439495",
|
||||
"transactionId": "a3633719-ff1a-4b3d-9f45-48580a4285ba",
|
||||
"payload": {
|
||||
"type": "ClientMessageType_PerformActionResp",
|
||||
"gameStateId": 7,
|
||||
"respId": 21,
|
||||
"performActionResp": {
|
||||
"actions": [
|
||||
{
|
||||
"actionType": "ActionType_Cast",
|
||||
"grpId": 73266,
|
||||
"instanceId": 169,
|
||||
"facetId": 169,
|
||||
"manaCost": [
|
||||
{
|
||||
"color": [
|
||||
"ManaColor_Blue"
|
||||
],
|
||||
"count": 1
|
||||
}
|
||||
],
|
||||
"shouldStop": true,
|
||||
"autoTapSolution": {
|
||||
"autoTapActions": [
|
||||
{
|
||||
"instanceId": 284,
|
||||
"abilityGrpId": 1002,
|
||||
"manaPaymentOption": {
|
||||
"mana": [
|
||||
{
|
||||
"manaId": 1,
|
||||
"color": "ManaColor_Blue",
|
||||
"srcInstanceId": 284,
|
||||
"specs": [
|
||||
{
|
||||
"type": "ManaSpecType_Predictive"
|
||||
}
|
||||
],
|
||||
"abilityGrpId": 1002,
|
||||
"count": 1
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
],
|
||||
"autoPassPriority": "AutoPassPriority_Yes"
|
||||
}
|
||||
}
|
||||
}
|
||||
[UnityCrossThreadLogger]10/16/2026 12:35:10 AM: LOCALPLAYERID0000000000000 to Match: ClientToGreuimessage
|
||||
{
|
||||
"requestId": 16,
|
||||
"clientToMatchServiceMessageType": "ClientToMatchServiceMessageType_ClientToGREUIMessage",
|
||||
"timestamp": "639277077103568649",
|
||||
"transactionId": "30282bac-1512-42ea-874f-0cd320e6f609",
|
||||
"payload": {
|
||||
"type": "ClientMessageType_UIMessage",
|
||||
"systemSeatId": 1,
|
||||
"uiMessage": {
|
||||
"seatIds": [
|
||||
2
|
||||
],
|
||||
"onHover": {}
|
||||
}
|
||||
}
|
||||
}
|
||||
[UnityCrossThreadLogger]10/16/2026 12:35:10 AM: Match to LOCALPLAYERID0000000000000: GreToClientEvent
|
||||
{ "transactionId": "a3633719-ff1a-4b3d-9f45-48580a4285ba", "requestId": 15, "timestamp": "1792110910338", "greToClientEvent": { "greToClientMessages": [ { "type": "GREMessageType_GameStateMessage", "systemSeatIds": [ 1 ], "msgId": 22, "gameStateId": 8, "gameStateMessage": { "type": "GameStateType_Diff", "gameStateId": 8, "zones": [ { "zoneId": 27, "type": "ZoneType_Stack", "visibility": "Visibility_Public", "objectInstanceIds": [ 285 ] }, { "zoneId": 30, "type": "ZoneType_Limbo", "visibility": "Visibility_Public", "objectInstanceIds": [ 169, 164 ] }, { "zoneId": 31, "type": "ZoneType_Hand", "visibility": "Visibility_Private", "ownerSeatId": 1, "objectInstanceIds": [ 170, 168, 167, 166, 165 ], "viewers": [ 1 ] } ], "gameObjects": [ { "instanceId": 169, "grpId": 73266, "type": "GameObjectType_Card", "zoneId": 30, "visibility": "Visibility_Private", "ownerSeatId": 1, "controllerSeatId": 1, "cardTypes": [ "CardType_Creature" ], "subtypes": [ "SubType_Crab" ], "color": [ "CardColor_Blue" ], "power": { }, "toughness": { "value": 3 }, "viewers": [ 1 ], "name": 437203, "overlayGrpId": 73266, "uniqueAbilities": [ { "id": 40, "grpId": 138408 } ] }, { "instanceId": 284, "grpId": 97169, "type": "GameObjectType_Card", "zoneId": 28, "visibility": "Visibility_Public", "ownerSeatId": 1, "controllerSeatId": 1, "superTypes": [ "SuperType_Basic" ], "cardTypes": [ "CardType_Land" ], "subtypes": [ "SubType_Island" ], "isTapped": true, "name": 652, "overlayGrpId": 97169, "uniqueAbilities": [ { "id": 235, "grpId": 1002 } ] }, { "instanceId": 285, "grpId": 73266, "type": "GameObjectType_Card", "zoneId": 27, "visibility": "Visibility_Public", "ownerSeatId": 1, "controllerSeatId": 1, "cardTypes": [ "CardType_Creature" ], "subtypes": [ "SubType_Crab" ], "color": [ "CardColor_Blue" ], "power": { }, "toughness": { "value": 3 }, "name": 437203, "overlayGrpId": 73266, "uniqueAbilities": [ { "id": 236, "grpId": 138408 } ] } ], "annotations": [ { "id": 85, "affectedIds": [ 169 ], "type": [ "AnnotationType_ObjectIdChanged" ], "details": [ { "key": "orig_id", "type": "KeyValuePairValueType_int32", "valueInt32": [ 169 ] }, { "key": "new_id", "type": "KeyValuePairValueType_int32", "valueInt32": [ 285 ] } ] }, { "id": 86, "affectedIds": [ 285 ], "type": [ "AnnotationType_ZoneTransfer" ], "details": [ { "key": "zone_src", "type": "KeyValuePairValueType_int32", "valueInt32": [ 31 ] }, { "key": "zone_dest", "type": "KeyValuePairValueType_int32", "valueInt32": [ 27 ] }, { "key": "category", "type": "KeyValuePairValueType_string", "valueString": [ "CastSpell" ] } ] }, { "id": 87, "affectorId": 284, "affectedIds": [ 286 ], "type": [ "AnnotationType_AbilityInstanceCreated" ], "details": [ { "key": "source_zone", "type": "KeyValuePairValueType_int32", "valueInt32": [ 28 ] } ] }, { "id": 88, "affectorId": 286, "affectedIds": [ 284 ], "type": [ "AnnotationType_TappedUntappedPermanent" ], "details": [ { "key": "tapped", "type": "KeyValuePairValueType_int32", "valueInt32": [ 1 ] } ] }, { "id": 89, "affectorId": 1, "affectedIds": [ 286 ], "type": [ "AnnotationType_UserActionTaken" ], "details": [ { "key": "actionType", "type": "KeyValuePairValueType_int32", "valueInt32": [ 4 ] }, { "key": "abilityGrpId", "type": "KeyValuePairValueType_int32", "valueInt32": [ 1002 ] } ] }, { "id": 90, "affectorId": 284, "affectedIds": [ 285 ], "type": [ "AnnotationType_ManaPaid" ], "details": [ { "key": "id", "type": "KeyValuePairValueType_int32", "valueInt32": [ 3 ] }, { "key": "color", "type": "KeyValuePairValueType_int32", "valueInt32": [ 2 ] } ] }, { "id": 91, "affectorId": 284, "affectedIds": [ 286 ], "type": [ "AnnotationType_AbilityInstanceDeleted" ] }, { "id": 92, "affectorId": 1, "affectedIds": [ 285 ], "type": [ "AnnotationType_UserActionTaken" ], "details": [ { "key": "actionType", "type": "KeyValuePairValueType_int32", "valueInt32": [ 1 ] }, { "key": "abilityGrpId", "type": "KeyValuePairValueType_int32", "valueInt32": [ 0 ] } ] } ], "diffDeletedInstanceIds": [ 286 ], "prevGameStateId": 7, "timers": [ { "timerId": 3, "type": "TimerType_ActivePlayer", "durationSec": 75, "behavior": "TimerBehavior_TakeControl", "warningThresholdSec": 30 }, { "timerId": 5, "type": "TimerType_Delay", "durationSec": 2, "elapsedSec": 1, "behavior": "TimerBehavior_StartDelayedTimer", "elapsedMs": 1155 }, { "timerId": 7, "type": "TimerType_MatchClock", "durationSec": 1800, "elapsedSec": 15, "behavior": "TimerBehavior_Timeout", "warningThresholdSec": 30, "elapsedMs": 15069 } ], "update": "GameStateUpdate_SendHiFi", "actions": [ { "seatId": 1, "action": { "actionType": "ActionType_Cast", "instanceId": 166, "manaCost": [ { "color": [ "ManaColor_Generic" ], "count": 2 }, { "color": [ "ManaColor_Blue" ], "count": 1 } ] } }, { "seatId": 1, "action": { "actionType": "ActionType_Cast", "instanceId": 165, "manaCost": [ { "color": [ "ManaColor_Blue" ], "count": 1 } ] } }, { "seatId": 1, "action": { "actionType": "ActionType_Cast", "instanceId": 169, "manaCost": [ { "color": [ "ManaColor_Blue" ], "Line truncated
|
||||
[UnityCrossThreadLogger]10/16/2026 12:35:11 AM: Match to LOCALPLAYERID0000000000000: GreToClientEvent
|
||||
{ "transactionId": "6a6cc617-24ab-4d80-ad8b-de6ebdde78b2", "requestId": 8, "timestamp": "1792110911594", "greToClientEvent": { "greToClientMessages": [ { "type": "GREMessageType_UIMessage", "systemSeatIds": [ 1 ], "uiMessage": { "seatIds": [ 2 ], "onChat": { "text": "Phrase_Basic_Hello" } } } ] } }
|
||||
[UnityCrossThreadLogger]10/16/2026 12:35:12 AM: LOCALPLAYERID0000000000000 to Match: ClientToGreuimessage
|
||||
{
|
||||
"requestId": 17,
|
||||
"clientToMatchServiceMessageType": "ClientToMatchServiceMessageType_ClientToGREUIMessage",
|
||||
"timestamp": "639277077121691790",
|
||||
"transactionId": "a056a52c-9892-4aeb-8a19-2695cc8cfe64",
|
||||
"payload": {
|
||||
"type": "ClientMessageType_UIMessage",
|
||||
"systemSeatId": 1,
|
||||
"uiMessage": {
|
||||
"seatIds": [
|
||||
2
|
||||
],
|
||||
"onHover": {
|
||||
"objectId": 285
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
[UnityCrossThreadLogger]10/16/2026 12:35:12 AM: LOCALPLAYERID0000000000000 to Match: ClientToGreuimessage
|
||||
{
|
||||
"requestId": 18,
|
||||
"clientToMatchServiceMessageType": "ClientToMatchServiceMessageType_ClientToGREUIMessage",
|
||||
"timestamp": "639277077121764773",
|
||||
"transactionId": "c4e289e4-ec09-47e9-afd9-f6e84f11d0f9",
|
||||
"payload": {
|
||||
"type": "ClientMessageType_UIMessage",
|
||||
"systemSeatId": 1,
|
||||
"uiMessage": {
|
||||
"seatIds": [
|
||||
2
|
||||
],
|
||||
"onHover": {}
|
||||
}
|
||||
}
|
||||
}
|
||||
[UnityCrossThreadLogger]10/16/2026 12:35:12 AM: Match to LOCALPLAYERID0000000000000: GreToClientEvent
|
||||
{ "timestamp": "1792110912338", "greToClientEvent": { "greToClientMessages": [ { "type": "GREMessageType_TimerStateMessage", "systemSeatIds": [ 1, 2 ], "msgId": 42, "gameStateId": 26, "timerStateMessage": { "seatId": 2, "timers": [ { "timerId": 8, "type": "TimerType_Prologue", "durationSec": 120, "behavior": "TimerBehavior_TakeControl", "warningThresholdSec": 30 }, { "timerId": 9, "type": "TimerType_Epilogue", "durationSec": 145, "behavior": "TimerBehavior_TakeControl", "warningThresholdSec": 30 }, { "timerId": 10, "type": "TimerType_ActivePlayer", "durationSec": 61, "running": true, "behavior": "TimerBehavior_TakeControl", "warningThresholdSec": 30 }, { "timerId": 11, "type": "TimerType_NonActivePlayer", "durationSec": 45, "behavior": "TimerBehavior_TakeControl", "warningThresholdSec": 30 }, { "timerId": 12, "type": "TimerType_Delay", "durationSec": 2, "behavior": "TimerBehavior_StartDelayedTimer" }, { "timerId": 13, "type": "TimerType_Inactivity", "durationSec": 150, "running": true, "behavior": "TimerBehavior_Timeout", "warningThresholdSec": 30 }, { "timerId": 14, "type": "TimerType_MatchClock", "durationSec": 1800, "elapsedSec": 5, "running": true, "behavior": "TimerBehavior_Timeout", "warningThresholdSec": 30, "elapsedMs": 5417 } ] } } ] } }
|
||||
[UnityCrossThreadLogger]10/16/2026 12:35:12 AM: LOCALPLAYERID0000000000000 to Match: ClientToGreuimessage
|
||||
{
|
||||
"requestId": 19,
|
||||
"clientToMatchServiceMessageType": "ClientToMatchServiceMessageType_ClientToGREUIMessage",
|
||||
"timestamp": "639277077125998520",
|
||||
"transactionId": "f0daff02-794f-4a27-8709-76fa68cbfa9e",
|
||||
"payload": {
|
||||
"type": "ClientMessageType_UIMessage",
|
||||
"systemSeatId": 1,
|
||||
"uiMessage": {
|
||||
"seatIds": [
|
||||
2
|
||||
],
|
||||
"onHover": {
|
||||
"objectId": 285
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
[UnityCrossThreadLogger]10/16/2026 12:35:12 AM: LOCALPLAYERID0000000000000 to Match: ClientToGreuimessage
|
||||
{
|
||||
"requestId": 20,
|
||||
"clientToMatchServiceMessageType": "ClientToMatchServiceMessageType_ClientToGREUIMessage",
|
||||
"timestamp": "639277077126278570",
|
||||
"transactionId": "864a802d-e833-4b8e-b714-993f9ebc61de",
|
||||
"payload": {
|
||||
"type": "ClientMessageType_UIMessage",
|
||||
"systemSeatId": 1,
|
||||
"uiMessage": {
|
||||
"seatIds": [
|
||||
2
|
||||
],
|
||||
"onHover": {}
|
||||
}
|
||||
}
|
||||
}
|
||||
[UnityCrossThreadLogger]10/16/2026 12:35:14 AM: LOCALPLAYERID0000000000000 to Match: ClientToGreuimessage
|
||||
{
|
||||
"requestId": 21,
|
||||
"clientToMatchServiceMessageType": "ClientToMatchServiceMessageType_ClientToGREUIMessage",
|
||||
"timestamp": "639277077140142120",
|
||||
"transactionId": "943a2900-e1de-4961-9e09-9002e36d7728",
|
||||
"payload": {
|
||||
"type": "ClientMessageType_UIMessage",
|
||||
"systemSeatId": 1,
|
||||
"uiMessage": {
|
||||
"seatIds": [
|
||||
2
|
||||
],
|
||||
"onChat": {
|
||||
"text": "Phrase_OTJ_Howdy"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
[UnityCrossThreadLogger]10/16/2026 12:35:15 AM: Match to LOCALPLAYERID0000000000000: GreToClientEvent
|
||||
{ "transactionId": "e6f344f9-5e8f-4d56-92a9-9b2a83d750f6", "requestId": 9, "timestamp": "1792110915443", "greToClientEvent": { "greToClientMessages": [ { "type": "GREMessageType_GameStateMessage", "systemSeatIds": [ 1 ], "msgId": 43, "gameStateId": 27, "gameStateMessage": { "type": "GameStateType_Diff", "gameStateId": 27, "gameInfo": { "matchID": "c0a18506-9d87-4d0c-a2d3-e10bef8659d3", "gameNumber": 1, "stage": "GameStage_GameOver", "type": "GameType_Duel", "variant": "GameVariant_Normal", "matchState": "MatchState_GameComplete", "matchWinCondition": "MatchWinCondition_Best2of3", "maxTimeoutCount": 4, "maxPipCount": 3, "timeoutDurationSec": 30, "results": [ { "scope": "MatchScope_Game", "result": "ResultType_WinLoss", "winningTeamId": 1, "reason": "ResultReason_Concede" } ], "superFormat": "SuperFormat_Constructed", "mulliganType": "MulliganType_London", "deckConstraintInfo": { "minDeckSize": 60, "maxDeckSize": 250, "maxSideboardSize": 15 } }, "teams": [ { "id": 2, "playerIds": [ 2 ], "status": "TeamStatus_PendingLoss" } ], "players": [ { "lifeTotal": 20, "systemSeatNumber": 1, "status": "PlayerStatus_InGame", "maxHandSize": 7, "turnNumber": 1, "teamId": 1, "timerIds": [ 1, 2, 3, 4, 5, 6, 7 ], "controllerSeatId": 1, "controllerType": "ControllerType_Player", "startingLifeTotal": 20 }, { "lifeTotal": 20, "systemSeatNumber": 2, "status": "PlayerStatus_PendingLoss", "maxHandSize": 7, "turnNumber": 1, "teamId": 2, "timerIds": [ 8, 9, 10, 11, 12, 13, 14 ], "controllerSeatId": 2, "controllerType": "ControllerType_Player", "startingLifeTotal": 20 } ], "prevGameStateId": 26, "timers": [ { "timerId": 10, "type": "TimerType_ActivePlayer", "durationSec": 61, "behavior": "TimerBehavior_TakeControl", "warningThresholdSec": 30 }, { "timerId": 13, "type": "TimerType_Inactivity", "durationSec": 150, "elapsedSec": 3, "running": true, "behavior": "TimerBehavior_Timeout", "warningThresholdSec": 30, "elapsedMs": 3103 }, { "timerId": 14, "type": "TimerType_MatchClock", "durationSec": 1800, "elapsedSec": 8, "behavior": "TimerBehavior_Timeout", "warningThresholdSec": 30, "elapsedMs": 8519 } ], "update": "GameStateUpdate_SendAndRecord", "actions": [ { "seatId": 1, "action": { "actionType": "ActionType_Cast", "instanceId": 166, "manaCost": [ { "color": [ "ManaColor_Generic" ], "count": 2 }, { "color": [ "ManaColor_Blue" ], "count": 1 } ] } }, { "seatId": 1, "action": { "actionType": "ActionType_Cast", "instanceId": 165, "manaCost": [ { "color": [ "ManaColor_Blue" ], "count": 1 } ] } }, { "seatId": 1, "action": { "actionType": "ActionType_Play", "instanceId": 167 } }, { "seatId": 1, "action": { "actionType": "ActionType_Play", "instanceId": 170 } }, { "seatId": 1, "action": { "actionType": "ActionType_Play", "instanceId": 168 } }, { "seatId": 1, "action": { "actionType": "ActionType_Activate_Mana", "instanceId": 284, "abilityGrpId": 1002 } } ] } }, { "type": "GREMessageType_GameStateMessage", "systemSeatIds": [ 1 ], "msgId": 44, "gameStateId": 28, "gameStateMessage": { "type": "GameStateType_Diff", "gameStateId": 28, "players": [ { "lifeTotal": 20, "systemSeatNumber": 1, "status": "PlayerStatus_InGame", "maxHandSize": 7, "turnNumber": 1, "teamId": 1, "timerIds": [ 1, 2, 3, 4, 5, 6, 7 ], "controllerSeatId": 1, "controllerType": "ControllerType_Player", "pendingMessageType": "ClientMessageType_EnterSideboardingReq", "startingLifeTotal": 20 }, { "lifeTotal": 20, "systemSeatNumber": 2, "status": "PlayerStatus_PendingLoss", "maxHandSize": 7, "turnNumber": 1, "teamId": 2, "timerIds": [ 8, 9, 10, 11, 12, 13, 14 ], "controllerSeatId": 2, "controllerType": "ControllerType_Player", "pendingMessageType": "ClientMessageType_EnterSideboardingReq", "startingLifeTotal": 20 } ], "pendingMessageCount": 1, "prevGameStateId": 27, "timers": [ { "timerId": 2, "type": "TimerType_Epilogue", "durationSec": 145, "running": true, "behavior": "TimerBehavior_TakeControl", "warningThresholdSec": 30, "elapsedMs": 1 }, { "timerId": 6, "type": "TimerType_Inactivity", "durationSec": 150, "running": true, "behavior": "TimerBehavior_Timeout", "warningThresholdSec": 30, "elapsedMs": 1 }, { "timerId": 9, "type": "TimerType_Epilogue", "durationSec": 145, "running": true, "behavior": "TimerBehavior_TakeControl", "warningThresholdSec": 30, "elapsedMs": 1 }, { "timerId": 13, "type": "TimerType_Inactivity", "durationSec": 150, "elapsedSec": 3, "running": true, "behavior": "TimerBehavior_Timeout", "warningThresholdSec": 30, "elapsedMs": 3105 } ], "update": "GameStateUpdate_SendAndRecord", "actions": [ { "seatId": 1, "action": { "actionType": "ActionType_Cast", "instanceId": 166, "manaCost": [ { "color": [ "ManaColor_Generic" ], "count": 2 }, { "color": [ "ManaColor_Blue" ], "count": 1 } ] } }, { "seatId": 1, "action": { "actionType": "ActionType_Cast", "instanceId": 165, "manaCost": [ { "color": [ "ManaColor_Blue" ], "count": 1 } ] } }, { "seatId": 1, "action": { "actionType": "ActionType_Play", "instanceId": 167 } }, { "seatId": 1, "action": { "actionType": "ActionType_PlaLine truncated
|
||||
[UnityCrossThreadLogger]10/16/2026 12:35:18 AM: LOCALPLAYERID0000000000000 to Match: ClientToGremessage
|
||||
{
|
||||
"requestId": 22,
|
||||
"clientToMatchServiceMessageType": "ClientToMatchServiceMessageType_ClientToGREMessage",
|
||||
"timestamp": "639277077180236913",
|
||||
"transactionId": "8505a700-0acd-406d-9835-99e061658467",
|
||||
"payload": {
|
||||
"type": "ClientMessageType_EnterSideboardingReq",
|
||||
"gameStateId": 28,
|
||||
"respId": 45
|
||||
}
|
||||
}
|
||||
[UnityCrossThreadLogger]10/16/2026 12:35:18 AM: Match to LOCALPLAYERID0000000000000: GreToClientEvent
|
||||
{ "transactionId": "8505a700-0acd-406d-9835-99e061658467", "requestId": 22, "timestamp": "1792110918060", "greToClientEvent": { "greToClientMessages": [ { "type": "GREMessageType_GameStateMessage", "systemSeatIds": [ 1 ], "msgId": 47, "gameStateId": 29, "gameStateMessage": { "type": "GameStateType_Diff", "gameStateId": 29, "players": [ { "lifeTotal": 20, "systemSeatNumber": 1, "status": "PlayerStatus_InGame", "maxHandSize": 7, "turnNumber": 1, "teamId": 1, "timerIds": [ 1, 2, 3, 4, 5, 6, 7 ], "controllerSeatId": 1, "controllerType": "ControllerType_Player", "pendingMessageType": "ClientMessageType_SubmitDeckResp", "startingLifeTotal": 20 } ], "turnInfo": { "phase": "Phase_Main1", "turnNumber": 2, "activePlayer": 2, "priorityPlayer": 2, "decisionPlayer": 1, "nextPhase": "Phase_Combat", "nextStep": "Step_BeginCombat" }, "pendingMessageCount": 1, "prevGameStateId": 28, "timers": [ { "timerId": 2, "type": "TimerType_Epilogue", "durationSec": 145, "elapsedSec": 2, "running": true, "behavior": "TimerBehavior_TakeControl", "warningThresholdSec": 30, "elapsedMs": 2618 }, { "timerId": 9, "type": "TimerType_Epilogue", "durationSec": 145, "elapsedSec": 2, "running": true, "behavior": "TimerBehavior_TakeControl", "warningThresholdSec": 30, "elapsedMs": 2618 }, { "timerId": 13, "type": "TimerType_Inactivity", "durationSec": 150, "elapsedSec": 5, "running": true, "behavior": "TimerBehavior_Timeout", "warningThresholdSec": 30, "elapsedMs": 5722 } ], "update": "GameStateUpdate_SendAndRecord", "actions": [ { "seatId": 1, "action": { "actionType": "ActionType_Cast", "instanceId": 166, "manaCost": [ { "color": [ "ManaColor_Generic" ], "count": 2 }, { "color": [ "ManaColor_Blue" ], "count": 1 } ] } }, { "seatId": 1, "action": { "actionType": "ActionType_Cast", "instanceId": 165, "manaCost": [ { "color": [ "ManaColor_Blue" ], "count": 1 } ] } }, { "seatId": 1, "action": { "actionType": "ActionType_Play", "instanceId": 167 } }, { "seatId": 1, "action": { "actionType": "ActionType_Play", "instanceId": 170 } }, { "seatId": 1, "action": { "actionType": "ActionType_Play", "instanceId": 168 } }, { "seatId": 1, "action": { "actionType": "ActionType_Activate_Mana", "instanceId": 284, "abilityGrpId": 1002 } } ] } }, { "type": "GREMessageType_SubmitDeckReq", "systemSeatIds": [ 1 ], "msgId": 48, "gameStateId": 29, "submitDeckReq": { "deck": { "deckCards": [ 71860, 71860, 71860, 71860, 97170, 93986, 93986, 93986, 93986, 77498, 77498, 77498, 77498, 94278, 94278, 94278, 94278, 73266, 73266, 73266, 73266, 102507, 102507, 102507, 102507, 75662, 75662, 75662, 75662, 97169, 97169, 97169, 97169, 97169, 97169, 95614, 95614, 91788, 91788, 91788, 91788, 83950, 83950, 83950, 83950, 68740, 68740, 68740, 68740, 94351, 87448, 73474, 106251, 106251, 106251, 106251, 70335, 70335, 70335, 70335 ], "sideboardCards": [ 95614, 82853, 82853, 82853, 75118, 102775, 70205, 70205, 90718, 94877, 94877, 92204, 92204, 92407, 88998 ] } } } ] } }
|
||||
[UnityCrossThreadLogger]10/16/2026 12:35:19 AM: Match to LOCALPLAYERID0000000000000: GreToClientEvent
|
||||
{ "transactionId": "44b53100-71b3-4ebd-8d05-ac474a01b6cb", "requestId": 10, "timestamp": "1792110918164", "greToClientEvent": { "greToClientMessages": [ { "type": "GREMessageType_GameStateMessage", "systemSeatIds": [ 1 ], "msgId": 49, "gameStateId": 30, "gameStateMessage": { "type": "GameStateType_Diff", "gameStateId": 30, "players": [ { "lifeTotal": 20, "systemSeatNumber": 2, "status": "PlayerStatus_PendingLoss", "maxHandSize": 7, "turnNumber": 1, "teamId": 2, "timerIds": [ 8, 9, 10, 11, 12, 13, 14 ], "controllerSeatId": 2, "controllerType": "ControllerType_Player", "pendingMessageType": "ClientMessageType_SubmitDeckResp", "startingLifeTotal": 20 } ], "turnInfo": { "phase": "Phase_Main1", "turnNumber": 2, "activePlayer": 2, "priorityPlayer": 2, "decisionPlayer": 2, "nextPhase": "Phase_Combat", "nextStep": "Step_BeginCombat" }, "prevGameStateId": 29, "timers": [ { "timerId": 2, "type": "TimerType_Epilogue", "durationSec": 145, "elapsedSec": 2, "running": true, "behavior": "TimerBehavior_TakeControl", "warningThresholdSec": 30, "elapsedMs": 2722 }, { "timerId": 6, "type": "TimerType_Inactivity", "durationSec": 150, "running": true, "behavior": "TimerBehavior_Timeout", "warningThresholdSec": 30, "elapsedMs": 105 }, { "timerId": 9, "type": "TimerType_Epilogue", "durationSec": 145, "elapsedSec": 2, "running": true, "behavior": "TimerBehavior_TakeControl", "warningThresholdSec": 30, "elapsedMs": 2722 }, { "timerId": 13, "type": "TimerType_Inactivity", "durationSec": 150, "running": true, "behavior": "TimerBehavior_Timeout", "warningThresholdSec": 30, "elapsedMs": 1 } ], "update": "GameStateUpdate_SendAndRecord", "actions": [ { "seatId": 1, "action": { "actionType": "ActionType_Cast", "instanceId": 166, "manaCost": [ { "color": [ "ManaColor_Generic" ], "count": 2 }, { "color": [ "ManaColor_Blue" ], "count": 1 } ] } }, { "seatId": 1, "action": { "actionType": "ActionType_Cast", "instanceId": 165, "manaCost": [ { "color": [ "ManaColor_Blue" ], "count": 1 } ] } }, { "seatId": 1, "action": { "actionType": "ActionType_Play", "instanceId": 167 } }, { "seatId": 1, "action": { "actionType": "ActionType_Play", "instanceId": 170 } }, { "seatId": 1, "action": { "actionType": "ActionType_Play", "instanceId": 168 } }, { "seatId": 1, "action": { "actionType": "ActionType_Activate_Mana", "instanceId": 284, "abilityGrpId": 1002 } } ] } } ] } }
|
||||
[UnityCrossThreadLogger]10/16/2026 12:35:24 AM: LOCALPLAYERID0000000000000 to Match: ClientToGremessage
|
||||
{
|
||||
"requestId": 23,
|
||||
"clientToMatchServiceMessageType": "ClientToMatchServiceMessageType_ClientToGREMessage",
|
||||
"timestamp": "639277077242110190",
|
||||
"transactionId": "b27f4de8-4b27-4a59-b324-482531ceef70",
|
||||
"payload": {
|
||||
"type": "ClientMessageType_SubmitDeckResp",
|
||||
"gameStateId": 29,
|
||||
"respId": 48,
|
||||
"submitDeckResp": {
|
||||
"deck": {
|
||||
"deckCards": [
|
||||
71860,
|
||||
71860,
|
||||
71860,
|
||||
71860,
|
||||
97170,
|
||||
93986,
|
||||
93986,
|
||||
93986,
|
||||
93986,
|
||||
77498,
|
||||
77498,
|
||||
77498,
|
||||
77498,
|
||||
94278,
|
||||
94278,
|
||||
94278,
|
||||
94278,
|
||||
73266,
|
||||
73266,
|
||||
73266,
|
||||
73266,
|
||||
102507,
|
||||
102507,
|
||||
102507,
|
||||
102507,
|
||||
75662,
|
||||
75662,
|
||||
75662,
|
||||
75662,
|
||||
97169,
|
||||
97169,
|
||||
97169,
|
||||
97169,
|
||||
97169,
|
||||
97169,
|
||||
95614,
|
||||
95614,
|
||||
91788,
|
||||
91788,
|
||||
91788,
|
||||
91788,
|
||||
83950,
|
||||
83950,
|
||||
83950,
|
||||
83950,
|
||||
68740,
|
||||
68740,
|
||||
68740,
|
||||
68740,
|
||||
94351,
|
||||
87448,
|
||||
73474,
|
||||
106251,
|
||||
106251,
|
||||
106251,
|
||||
106251,
|
||||
70335,
|
||||
70335,
|
||||
70335,
|
||||
70335
|
||||
],
|
||||
"sideboardCards": [
|
||||
95614,
|
||||
82853,
|
||||
82853,
|
||||
82853,
|
||||
75118,
|
||||
102775,
|
||||
70205,
|
||||
70205,
|
||||
90718,
|
||||
94877,
|
||||
94877,
|
||||
92204,
|
||||
92204,
|
||||
92407,
|
||||
88998
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
[UnityCrossThreadLogger]10/16/2026 12:35:24 AM: Match to LOCALPLAYERID0000000000000: GreToClientEvent
|
||||
{ "transactionId": "b27f4de8-4b27-4a59-b324-482531ceef70", "requestId": 23, "timestamp": "1792110924266", "greToClientEvent": { "greToClientMessages": [ { "type": "GREMessageType_SubmitDeckConfirmation", "systemSeatIds": [ 1 ], "msgId": 52, "gameStateId": 30 }, { "type": "GREMessageType_GameStateMessage", "systemSeatIds": [ 1 ], "msgId": 1, "gameStateId": 1, "gameStateMessage": { "type": "GameStateType_Full", "gameStateId": 1, "gameInfo": { "matchID": "c0a18506-9d87-4d0c-a2d3-e10bef8659d3", "gameNumber": 2, "stage": "GameStage_Start", "type": "GameType_Duel", "variant": "GameVariant_Normal", "matchState": "MatchState_GameInProgress", "matchWinCondition": "MatchWinCondition_Best2of3", "maxTimeoutCount": 4, "maxPipCount": 3, "timeoutDurationSec": 30, "results": [ { "scope": "MatchScope_Game", "result": "ResultType_WinLoss", "winningTeamId": 1, "reason": "ResultReason_Concede" } ], "superFormat": "SuperFormat_Constructed", "mulliganType": "MulliganType_London", "deckConstraintInfo": { "minDeckSize": 60, "maxDeckSize": 250, "maxSideboardSize": 15 } }, "teams": [ { "id": 1, "playerIds": [ 1 ], "status": "TeamStatus_InGame" }, { "id": 2, "playerIds": [ 2 ], "status": "TeamStatus_InGame" } ], "players": [ { "lifeTotal": 20, "systemSeatNumber": 1, "status": "PlayerStatus_InGame", "maxHandSize": 7, "teamId": 1, "timerIds": [ 1, 2, 3, 4, 5, 6, 7 ], "controllerSeatId": 1, "controllerType": "ControllerType_Player", "startingLifeTotal": 20 }, { "lifeTotal": 20, "systemSeatNumber": 2, "status": "PlayerStatus_InGame", "maxHandSize": 7, "teamId": 2, "timerIds": [ 8, 9, 10, 11, 12, 13, 14 ], "controllerSeatId": 2, "controllerType": "ControllerType_Player", "pendingMessageType": "ClientMessageType_ChooseStartingPlayerResp", "startingLifeTotal": 20 } ], "turnInfo": { "decisionPlayer": 2 }, "zones": [ { "zoneId": 18, "type": "ZoneType_Revealed", "visibility": "Visibility_Public", "ownerSeatId": 1 }, { "zoneId": 19, "type": "ZoneType_Revealed", "visibility": "Visibility_Public", "ownerSeatId": 2 }, { "zoneId": 24, "type": "ZoneType_Suppressed", "visibility": "Visibility_Public" }, { "zoneId": 25, "type": "ZoneType_Pending", "visibility": "Visibility_Public" }, { "zoneId": 26, "type": "ZoneType_Command", "visibility": "Visibility_Public" }, { "zoneId": 27, "type": "ZoneType_Stack", "visibility": "Visibility_Public" }, { "zoneId": 28, "type": "ZoneType_Battlefield", "visibility": "Visibility_Public" }, { "zoneId": 29, "type": "ZoneType_Exile", "visibility": "Visibility_Public" }, { "zoneId": 30, "type": "ZoneType_Limbo", "visibility": "Visibility_Public" }, { "zoneId": 31, "type": "ZoneType_Hand", "visibility": "Visibility_Private", "ownerSeatId": 1, "viewers": [ 1 ] }, { "zoneId": 32, "type": "ZoneType_Library", "visibility": "Visibility_Hidden", "ownerSeatId": 1, "objectInstanceIds": [ 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223 ] }, { "zoneId": 33, "type": "ZoneType_Graveyard", "visibility": "Visibility_Public", "ownerSeatId": 1 }, { "zoneId": 34, "type": "ZoneType_Sideboard", "visibility": "Visibility_Private", "ownerSeatId": 1, "viewers": [ 1 ] }, { "zoneId": 35, "type": "ZoneType_Hand", "visibility": "Visibility_Private", "ownerSeatId": 2, "viewers": [ 2 ] }, { "zoneId": 36, "type": "ZoneType_Library", "visibility": "Visibility_Hidden", "ownerSeatId": 2, "objectInstanceIds": [ 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283 ] }, { "zoneId": 37, "type": "ZoneType_Graveyard", "visibility": "Visibility_Public", "ownerSeatId": 2 }, { "zoneId": 38, "type": "ZoneType_Sideboard", "visibility": "Visibility_Private", "ownerSeatId": 2, "viewers": [ 2 ] } ], "diffDeletedInstanceIds": [ 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 141, 143, 145, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163 ], "timers": [ { "timerId": 1, "type": "TimerType_Prologue", "durationSec": 120, "behavior": "TimerBehavior_TakeControl", "warningThresholdSec": 30 }, { "timerId": 2, "type": "TimerType_Epilogue", "durationSec": 145, "behavior": "TimerBehavior_TakeControl", "warningThresholdSec": 30 }, { "timerId": 3, "type": "TimerType_ActivePLine truncated
|
||||
Can't add component to object that is being destroyed.
|
||||
Can't add component to object that is being destroyed.
|
||||
OnSceneUnloaded for DuelScene
|
||||
OnSceneLoaded for PreGameScene
|
||||
OnSceneLoaded for DuelScene
|
||||
[UnityCrossThreadLogger]10/16/2026 12:35:26 AM: LOCALPLAYERID0000000000000 to Match: ClientToGremessage
|
||||
{
|
||||
"requestId": 24,
|
||||
"clientToMatchServiceMessageType": "ClientToMatchServiceMessageType_ClientToGREMessage",
|
||||
"timestamp": "639277077265180717",
|
||||
"transactionId": "b1b6802c-df3c-46c6-a884-ca2ca85417d1",
|
||||
"payload": {
|
||||
"type": "ClientMessageType_SetSettingsReq",
|
||||
"setSettingsReq": {
|
||||
"settings": {
|
||||
"autoPassOption": "AutoPassOption_ResolveMyStackEffects",
|
||||
"manaSelectionType": "ManaSelectionType_Auto",
|
||||
"defaultAutoPassOption": "AutoPassOption_ResolveMyStackEffects",
|
||||
"autoSelectReplacementSetting": "Setting_Enable"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
[UnityCrossThreadLogger]10/16/2026 12:35:26 AM: Match to LOCALPLAYERID0000000000000: GreToClientEvent
|
||||
{ "transactionId": "b1b6802c-df3c-46c6-a884-ca2ca85417d1", "requestId": 24, "timestamp": "1792110926563", "greToClientEvent": { "greToClientMessages": [ { "type": "GREMessageType_SetSettingsResp", "systemSeatIds": [ 1 ], "msgId": 4, "gameStateId": 1, "setSettingsResp": { "settings": { "stops": [ { "stopType": "StopType_UpkeepStep", "appliesTo": "SettingScope_Team", "status": "SettingStatus_Clear" }, { "stopType": "StopType_UpkeepStep", "appliesTo": "SettingScope_Opponents", "status": "SettingStatus_Clear" }, { "stopType": "StopType_DrawStep", "appliesTo": "SettingScope_Team", "status": "SettingStatus_Clear" }, { "stopType": "StopType_DrawStep", "appliesTo": "SettingScope_Opponents", "status": "SettingStatus_Clear" }, { "stopType": "StopType_PrecombatMainPhase", "appliesTo": "SettingScope_Team", "status": "SettingStatus_Set" }, { "stopType": "StopType_PrecombatMainPhase", "appliesTo": "SettingScope_Opponents", "status": "SettingStatus_Clear" }, { "stopType": "StopType_BeginCombatStep", "appliesTo": "SettingScope_Team", "status": "SettingStatus_Set" }, { "stopType": "StopType_BeginCombatStep", "appliesTo": "SettingScope_Opponents", "status": "SettingStatus_Set" }, { "stopType": "StopType_DeclareAttackersStep", "appliesTo": "SettingScope_Team", "status": "SettingStatus_Set" }, { "stopType": "StopType_DeclareAttackersStep", "appliesTo": "SettingScope_Opponents", "status": "SettingStatus_Set" }, { "stopType": "StopType_DeclareBlockersStep", "appliesTo": "SettingScope_Team", "status": "SettingStatus_Set" }, { "stopType": "StopType_DeclareBlockersStep", "appliesTo": "SettingScope_Opponents", "status": "SettingStatus_Set" }, { "stopType": "StopType_CombatDamageStep", "appliesTo": "SettingScope_Team", "status": "SettingStatus_Clear" }, { "stopType": "StopType_CombatDamageStep", "appliesTo": "SettingScope_Opponents", "status": "SettingStatus_Clear" }, { "stopType": "StopType_EndCombatStep", "appliesTo": "SettingScope_Team", "status": "SettingStatus_Clear" }, { "stopType": "StopType_EndCombatStep", "appliesTo": "SettingScope_Opponents", "status": "SettingStatus_Clear" }, { "stopType": "StopType_PostcombatMainPhase", "appliesTo": "SettingScope_Team", "status": "SettingStatus_Set" }, { "stopType": "StopType_PostcombatMainPhase", "appliesTo": "SettingScope_Opponents", "status": "SettingStatus_Clear" }, { "stopType": "StopType_EndStep", "appliesTo": "SettingScope_Team", "status": "SettingStatus_Clear" }, { "stopType": "StopType_EndStep", "appliesTo": "SettingScope_Opponents", "status": "SettingStatus_Set" }, { "stopType": "StopType_FirstStrikeDamageStep", "appliesTo": "SettingScope_Team", "status": "SettingStatus_Set" }, { "stopType": "StopType_FirstStrikeDamageStep", "appliesTo": "SettingScope_Opponents", "status": "SettingStatus_Set" } ], "autoPassOption": "AutoPassOption_ResolveMyStackEffects", "graveyardOrder": "OrderingType_OrderArbitraryAlways", "manaSelectionType": "ManaSelectionType_Auto", "defaultAutoPassOption": "AutoPassOption_ResolveMyStackEffects", "smartStopsSetting": "SmartStopsSetting_Enable", "autoTapStopsSetting": "AutoTapStopsSetting_Enable", "autoOptionalPaymentCancellationSetting": "Setting_Enable", "transientStops": [ { "stopType": "StopType_UpkeepStep", "appliesTo": "SettingScope_Team", "status": "SettingStatus_Clear" }, { "stopType": "StopType_UpkeepStep", "appliesTo": "SettingScope_Opponents", "status": "SettingStatus_Clear" }, { "stopType": "StopType_DrawStep", "appliesTo": "SettingScope_Team", "status": "SettingStatus_Clear" }, { "stopType": "StopType_DrawStep", "appliesTo": "SettingScope_Opponents", "status": "SettingStatus_Clear" }, { "stopType": "StopType_PrecombatMainPhase", "appliesTo": "SettingScope_Team", "status": "SettingStatus_Clear" }, { "stopType": "StopType_PrecombatMainPhase", "appliesTo": "SettingScope_Opponents", "status": "SettingStatus_Clear" }, { "stopType": "StopType_BeginCombatStep", "appliesTo": "SettingScope_Team", "status": "SettingStatus_Clear" }, { "stopType": "StopType_BeginCombatStep", "appliesTo": "SettingScope_Opponents", "status": "SettingStatus_Clear" }, { "stopType": "StopType_DeclareAttackersStep", "appliesTo": "SettingScope_Team", "status": "SettingStatus_Clear" }, { "stopType": "StopType_DeclareAttackersStep", "appliesTo": "SettingScope_Opponents", "status": "SettingStatus_Clear" }, { "stopType": "StopType_DeclareBlockersStep", "appliesTo": "SettingScope_Team", "status": "SettingStatus_Clear" }, { "stopType": "StopType_DeclareBlockersStep", "appliesTo": "SettingScope_Opponents", "status": "SettingStatus_Clear" }, { "stopType": "StopType_CombatDamageStep", "appliesTo": "SettingScope_Team", "status": "SettingStatus_Clear" }, { "stopType": "StopType_CombatDamageStep", "appliesTo": "SettingScope_Opponents", "status": "SettingStatus_Clear" }, { "stopType": "StopType_EndCombatStep", "appliesTo": "SettingScope_Team", "status": "SettingStatus_Clear" }, { "stopType": "StopType_EndCombatStep", "appliesTo": "SettingScope_Opponents", "status": "SettingStatus_Clear" }, { Line truncated
|
||||
[UnityCrossThreadLogger]10/16/2026 12:35:28 AM: Match to LOCALPLAYERID0000000000000: GreToClientEvent
|
||||
{ "transactionId": "84c23c13-3d3a-4800-98f0-86c88a243951", "requestId": 13, "timestamp": "1792110928334", "greToClientEvent": { "greToClientMessages": [ { "type": "GREMessageType_SetSettingsResp", "systemSeatIds": [ 1 ], "msgId": 5, "gameStateId": 1, "setSettingsResp": { "settings": { "stops": [ { "stopType": "StopType_UpkeepStep", "appliesTo": "SettingScope_Team", "status": "SettingStatus_Clear" }, { "stopType": "StopType_UpkeepStep", "appliesTo": "SettingScope_Opponents", "status": "SettingStatus_Clear" }, { "stopType": "StopType_DrawStep", "appliesTo": "SettingScope_Team", "status": "SettingStatus_Clear" }, { "stopType": "StopType_DrawStep", "appliesTo": "SettingScope_Opponents", "status": "SettingStatus_Clear" }, { "stopType": "StopType_PrecombatMainPhase", "appliesTo": "SettingScope_Team", "status": "SettingStatus_Set" }, { "stopType": "StopType_PrecombatMainPhase", "appliesTo": "SettingScope_Opponents", "status": "SettingStatus_Clear" }, { "stopType": "StopType_BeginCombatStep", "appliesTo": "SettingScope_Team", "status": "SettingStatus_Set" }, { "stopType": "StopType_BeginCombatStep", "appliesTo": "SettingScope_Opponents", "status": "SettingStatus_Set" }, { "stopType": "StopType_DeclareAttackersStep", "appliesTo": "SettingScope_Team", "status": "SettingStatus_Set" }, { "stopType": "StopType_DeclareAttackersStep", "appliesTo": "SettingScope_Opponents", "status": "SettingStatus_Set" }, { "stopType": "StopType_DeclareBlockersStep", "appliesTo": "SettingScope_Team", "status": "SettingStatus_Set" }, { "stopType": "StopType_DeclareBlockersStep", "appliesTo": "SettingScope_Opponents", "status": "SettingStatus_Set" }, { "stopType": "StopType_CombatDamageStep", "appliesTo": "SettingScope_Team", "status": "SettingStatus_Clear" }, { "stopType": "StopType_CombatDamageStep", "appliesTo": "SettingScope_Opponents", "status": "SettingStatus_Clear" }, { "stopType": "StopType_EndCombatStep", "appliesTo": "SettingScope_Team", "status": "SettingStatus_Clear" }, { "stopType": "StopType_EndCombatStep", "appliesTo": "SettingScope_Opponents", "status": "SettingStatus_Clear" }, { "stopType": "StopType_PostcombatMainPhase", "appliesTo": "SettingScope_Team", "status": "SettingStatus_Set" }, { "stopType": "StopType_PostcombatMainPhase", "appliesTo": "SettingScope_Opponents", "status": "SettingStatus_Clear" }, { "stopType": "StopType_EndStep", "appliesTo": "SettingScope_Team", "status": "SettingStatus_Clear" }, { "stopType": "StopType_EndStep", "appliesTo": "SettingScope_Opponents", "status": "SettingStatus_Set" }, { "stopType": "StopType_FirstStrikeDamageStep", "appliesTo": "SettingScope_Team", "status": "SettingStatus_Set" }, { "stopType": "StopType_FirstStrikeDamageStep", "appliesTo": "SettingScope_Opponents", "status": "SettingStatus_Set" } ], "autoPassOption": "AutoPassOption_Clear", "graveyardOrder": "OrderingType_OrderArbitraryAlways", "manaSelectionType": "ManaSelectionType_Auto", "defaultAutoPassOption": "AutoPassOption_ResolveMyStackEffects", "smartStopsSetting": "SmartStopsSetting_Enable", "autoTapStopsSetting": "AutoTapStopsSetting_Enable", "autoOptionalPaymentCancellationSetting": "Setting_Enable", "transientStops": [ { "stopType": "StopType_UpkeepStep", "appliesTo": "SettingScope_Team", "status": "SettingStatus_Clear" }, { "stopType": "StopType_UpkeepStep", "appliesTo": "SettingScope_Opponents", "status": "SettingStatus_Clear" }, { "stopType": "StopType_DrawStep", "appliesTo": "SettingScope_Team", "status": "SettingStatus_Clear" }, { "stopType": "StopType_DrawStep", "appliesTo": "SettingScope_Opponents", "status": "SettingStatus_Clear" }, { "stopType": "StopType_PrecombatMainPhase", "appliesTo": "SettingScope_Team", "status": "SettingStatus_Clear" }, { "stopType": "StopType_PrecombatMainPhase", "appliesTo": "SettingScope_Opponents", "status": "SettingStatus_Clear" }, { "stopType": "StopType_BeginCombatStep", "appliesTo": "SettingScope_Team", "status": "SettingStatus_Clear" }, { "stopType": "StopType_BeginCombatStep", "appliesTo": "SettingScope_Opponents", "status": "SettingStatus_Clear" }, { "stopType": "StopType_DeclareAttackersStep", "appliesTo": "SettingScope_Team", "status": "SettingStatus_Clear" }, { "stopType": "StopType_DeclareAttackersStep", "appliesTo": "SettingScope_Opponents", "status": "SettingStatus_Clear" }, { "stopType": "StopType_DeclareBlockersStep", "appliesTo": "SettingScope_Team", "status": "SettingStatus_Clear" }, { "stopType": "StopType_DeclareBlockersStep", "appliesTo": "SettingScope_Opponents", "status": "SettingStatus_Clear" }, { "stopType": "StopType_CombatDamageStep", "appliesTo": "SettingScope_Team", "status": "SettingStatus_Clear" }, { "stopType": "StopType_CombatDamageStep", "appliesTo": "SettingScope_Opponents", "status": "SettingStatus_Clear" }, { "stopType": "StopType_EndCombatStep", "appliesTo": "SettingScope_Team", "status": "SettingStatus_Clear" }, { "stopType": "StopType_EndCombatStep", "appliesTo": "SettingScope_Opponents", "status": "SettingStatus_Clear" }, { "stopType": "StoLine truncated
|
||||
[UnityCrossThreadLogger]10/16/2026 12:35:28 AM: Match to LOCALPLAYERID0000000000000: MatchGameRoomStateChangedEvent
|
||||
{ "transactionId": "84c23c13-3d3a-4800-98f0-86c88a243951", "requestId": 13, "timestamp": "1792110928334", "matchGameRoomStateChangedEvent": { "gameRoomInfo": { "gameRoomConfig": { "reservedPlayers": [ { "userId": "LOCALPLAYERID0000000000000", "playerName":"Local Player", "systemSeatId": 1, "teamId": 1, "courseId": "Avatar_Basic_BilboRiddles_HOB", "sessionId": "00000000-0000-0000-0000-000000000000", "platformId": "SteamWindows", "eventId": "Traditional_Historic_Play" }, { "userId": "OPPONENTID000000", "playerName":"Opponent Player", "systemSeatId": 2, "teamId": 2, "courseId": "Avatar_Basic_Adventurer", "sessionId": "00000000-0000-0000-0000-000000000000", "platformId": "Windows", "eventId": "Traditional_Historic_Play" } ], "matchId": "c0a18506-9d87-4d0c-a2d3-e10bef8659d3" }, "stateType": "MatchGameRoomStateType_MatchCompleted", "finalMatchResult": { "matchId": "c0a18506-9d87-4d0c-a2d3-e10bef8659d3", "matchCompletedReason": "MatchCompletedReasonType_Success", "resultList": [ { "scope": "MatchScope_Game", "result": "ResultType_WinLoss", "winningTeamId": 1, "reason": "ResultReason_Concede" }, { "scope": "MatchScope_Game", "result": "ResultType_WinLoss", "winningTeamId": 1, "reason": "ResultReason_Concede" }, { "scope": "MatchScope_Match", "result": "ResultType_WinLoss", "winningTeamId": 1, "reason": "ResultReason_Concede" } ] } } } }
|
||||
[UnityCrossThreadLogger]STATE CHANGED {"old":"Playing","new":"MatchCompleted"}
|
||||
OnSceneUnloaded for PreGameScene
|
||||
Unloading 2 Unused Serialized files (Serialized files now loaded: 528)
|
||||
@@ -0,0 +1,50 @@
|
||||
import pytest
|
||||
|
||||
from mtga_assistant import paths
|
||||
from mtga_assistant.carddb import CardDB, mana_value, parse_mana
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"text,symbols,mv",
|
||||
[
|
||||
("o2oU", ["2", "U"], 3),
|
||||
("oW", ["W"], 1),
|
||||
("", [], 0),
|
||||
("o1o(R/G)", ["1", "R/G"], 2),
|
||||
("o1o(B/P)o(B/P)", ["1", "B/P", "B/P"], 3),
|
||||
("o(2/B)o(2/R)", ["2/B", "2/R"], 4),
|
||||
("oXoXoR", ["X", "X", "R"], 1),
|
||||
("o10", ["10"], 10),
|
||||
],
|
||||
)
|
||||
def test_parse_mana(text, symbols, mv):
|
||||
assert parse_mana(text) == symbols
|
||||
assert mana_value(symbols) == mv
|
||||
|
||||
|
||||
def test_missing_db_gives_placeholder():
|
||||
db = CardDB(None)
|
||||
assert not db.available
|
||||
assert db.get(123).name == "Unknown card #123"
|
||||
assert db.base_grp(123) == 123
|
||||
|
||||
|
||||
@pytest.fixture(scope="module")
|
||||
def real_db():
|
||||
mtga = paths.find_mtga_dir(paths.load_config())
|
||||
path = paths.find_card_db(mtga) if mtga else None
|
||||
if path is None:
|
||||
pytest.skip("MTGA is not installed on this machine")
|
||||
return CardDB(path)
|
||||
|
||||
|
||||
def test_real_db_lookup(real_db):
|
||||
island = real_db.get(97169)
|
||||
assert island.name == "Island"
|
||||
assert island.is_land
|
||||
|
||||
|
||||
def test_real_db_split_card_half_maps_to_whole(real_db):
|
||||
# Desist (half) -> Cease // Desist
|
||||
assert real_db.base_grp(89160) == 89158
|
||||
assert real_db.base_grp(89158) == 89158
|
||||
@@ -0,0 +1,196 @@
|
||||
from pathlib import Path
|
||||
|
||||
from mtga_assistant.carddb import CardInfo
|
||||
from mtga_assistant.gamestate import MatchTracker
|
||||
from mtga_assistant.logparse import GreMessages, LogParser
|
||||
|
||||
FIXTURE = Path(__file__).parent / "fixtures" / "bo3_match.log"
|
||||
|
||||
ME, OPP = 1, 2
|
||||
# Zone ids as MTGA assigns them for a two-player game.
|
||||
BATTLEFIELD, EXILE, LIMBO = 28, 29, 30
|
||||
MY_HAND, MY_LIB, MY_GY = 31, 32, 33
|
||||
OPP_HAND, OPP_LIB, OPP_GY = 35, 36, 37
|
||||
|
||||
|
||||
def replay(path: Path, tracker: MatchTracker, check=None) -> None:
|
||||
p = LogParser()
|
||||
with open(path, encoding="utf-8") as f:
|
||||
for line in f:
|
||||
for ev in p.feed(line):
|
||||
tracker.handle(ev)
|
||||
if check and isinstance(ev, GreMessages):
|
||||
check(tracker)
|
||||
|
||||
|
||||
def test_fixture_match_lifecycle():
|
||||
t = MatchTracker()
|
||||
replay(FIXTURE, t)
|
||||
assert t.my_seat == ME
|
||||
assert t.opponent_name == "Opponent Player"
|
||||
assert t.game is not None and t.game.game_number == 2
|
||||
assert t.game_results == ["Won", "Won"]
|
||||
assert t.last_result == "Won"
|
||||
assert not t.in_match
|
||||
assert t.deck_name == "Cruel Tutelage"
|
||||
|
||||
|
||||
def test_fixture_library_count_matches_library_zone():
|
||||
checked = 0
|
||||
|
||||
def check(t: MatchTracker) -> None:
|
||||
nonlocal checked
|
||||
g = t.game
|
||||
if g is None or not g.zones or g.desynced:
|
||||
return
|
||||
assert sum(t.my_library_remaining().values()) == g.zone_size("ZoneType_Library", ME)
|
||||
checked += 1
|
||||
|
||||
replay(FIXTURE, MatchTracker(), check)
|
||||
assert checked >= 15
|
||||
|
||||
|
||||
# -- synthetic GRE messages for opponent knowledge ------------------------------
|
||||
|
||||
|
||||
def gsm(state_id: int, *, zones=(), objects=(), annotations=(), deleted=(), full=False) -> dict:
|
||||
msg = {
|
||||
"type": "GameStateType_Full" if full else "GameStateType_Diff",
|
||||
"gameStateId": state_id,
|
||||
"zones": list(zones),
|
||||
"gameObjects": list(objects),
|
||||
"annotations": list(annotations),
|
||||
"diffDeletedInstanceIds": list(deleted),
|
||||
}
|
||||
if not full:
|
||||
msg["prevGameStateId"] = state_id - 1
|
||||
return {"type": "GREMessageType_GameStateMessage", "gameStateMessage": msg}
|
||||
|
||||
|
||||
def zone(zid: int, ztype: str, ids, owner=None) -> dict:
|
||||
z = {"zoneId": zid, "type": f"ZoneType_{ztype}", "objectInstanceIds": list(ids)}
|
||||
if owner is not None:
|
||||
z["ownerSeatId"] = owner
|
||||
return z
|
||||
|
||||
|
||||
def card(iid: int, grp: int, zid: int, owner=OPP, otype="Card") -> dict:
|
||||
return {"instanceId": iid, "grpId": grp, "type": f"GameObjectType_{otype}", "zoneId": zid,
|
||||
"ownerSeatId": owner, "controllerSeatId": owner}
|
||||
|
||||
|
||||
def id_changed(orig: int, new: int) -> dict:
|
||||
return {"type": ["AnnotationType_ObjectIdChanged"], "details": [
|
||||
{"key": "orig_id", "valueInt32": [orig]}, {"key": "new_id", "valueInt32": [new]}]}
|
||||
|
||||
|
||||
def shuffle(old: list[int], new: list[int]) -> dict:
|
||||
return {"type": ["AnnotationType_Shuffle"], "details": [
|
||||
{"key": "OldIds", "valueInt32": old}, {"key": "NewIds", "valueInt32": new}]}
|
||||
|
||||
|
||||
def start_game(t: MatchTracker, deck=(1001,) * 4) -> None:
|
||||
t.handle(GreMessages([{
|
||||
"type": "GREMessageType_ConnectResp", "systemSeatIds": [ME],
|
||||
"connectResp": {"deckMessage": {"deckCards": list(deck), "sideboardCards": []}},
|
||||
}]))
|
||||
t.handle(GreMessages([gsm(1, full=True, zones=[
|
||||
zone(BATTLEFIELD, "Battlefield", []), zone(LIMBO, "Limbo", []),
|
||||
zone(MY_HAND, "Hand", [], ME), zone(MY_LIB, "Library", range(100, 100 + len(deck)), ME),
|
||||
zone(OPP_HAND, "Hand", [200, 201], OPP), zone(OPP_LIB, "Library", [300, 301, 302], OPP),
|
||||
zone(OPP_GY, "Graveyard", [], OPP),
|
||||
])]))
|
||||
|
||||
|
||||
def test_bounced_card_is_known_in_opponent_hand():
|
||||
t = MatchTracker()
|
||||
start_game(t)
|
||||
# Opponent casts card 200 -> it resolves onto the battlefield as instance 210.
|
||||
t.handle(GreMessages([gsm(2, annotations=[id_changed(200, 210)], zones=[
|
||||
zone(OPP_HAND, "Hand", [201], OPP), zone(BATTLEFIELD, "Battlefield", [210]),
|
||||
], objects=[card(210, 5005, BATTLEFIELD)])]))
|
||||
g = t.game
|
||||
assert g.cards_in("ZoneType_Battlefield", controller=OPP) == {5005: 1}
|
||||
|
||||
# It gets bounced: new id 220, back in the hidden hand, no object sent for it.
|
||||
t.handle(GreMessages([gsm(3, annotations=[id_changed(210, 220)], zones=[
|
||||
zone(OPP_HAND, "Hand", [201, 220], OPP), zone(BATTLEFIELD, "Battlefield", []),
|
||||
], deleted=[210])]))
|
||||
assert g.opp_known_in("ZoneType_Hand") == {5005: 1}
|
||||
assert not g.cards_in("ZoneType_Battlefield", controller=OPP)
|
||||
assert t.opp_seen_match == {5005: 1} # same physical card, counted once
|
||||
|
||||
|
||||
def test_known_card_survives_library_shuffle():
|
||||
t = MatchTracker()
|
||||
start_game(t)
|
||||
g = t.game
|
||||
# A card is revealed on top of their library (e.g. by a "reveal the top card" effect).
|
||||
t.handle(GreMessages([gsm(2, objects=[card(300, 6006, OPP_LIB)])]))
|
||||
assert g.opp_known_in("ZoneType_Library") == {6006: 1}
|
||||
|
||||
t.handle(GreMessages([gsm(3, annotations=[shuffle([300, 301, 302], [310, 311, 312])],
|
||||
zones=[zone(OPP_LIB, "Library", [310, 311, 312], OPP)], deleted=[300])]))
|
||||
assert g.opp_known_in("ZoneType_Library") == {6006: 1}
|
||||
|
||||
# Later it is drawn and played: no longer "known in library".
|
||||
t.handle(GreMessages([gsm(4, zones=[zone(OPP_LIB, "Library", [310, 311], OPP),
|
||||
zone(BATTLEFIELD, "Battlefield", [320])],
|
||||
objects=[card(320, 6006, BATTLEFIELD)])]))
|
||||
assert g.opp_known_in("ZoneType_Library") == {}
|
||||
|
||||
|
||||
def test_revealed_card_in_hand():
|
||||
t = MatchTracker()
|
||||
start_game(t)
|
||||
t.handle(GreMessages([gsm(2, objects=[card(400, 7007, OPP_HAND, otype="RevealedCard")])]))
|
||||
assert t.game.opp_known_in("ZoneType_Hand") == {7007: 1}
|
||||
assert t.opp_seen_match == {7007: 1}
|
||||
|
||||
|
||||
def test_tokens_do_not_count_as_my_cards():
|
||||
t = MatchTracker()
|
||||
start_game(t, deck=(1001,) * 4)
|
||||
t.handle(GreMessages([gsm(2, annotations=[id_changed(100, 150)], zones=[
|
||||
zone(MY_LIB, "Library", [101, 102, 103], ME), zone(BATTLEFIELD, "Battlefield", [150, 151]),
|
||||
], objects=[card(150, 1001, BATTLEFIELD, owner=ME), card(151, 9999, BATTLEFIELD, owner=ME, otype="Token")])]))
|
||||
assert t.my_library_remaining() == {1001: 3}
|
||||
|
||||
|
||||
class FakeCards:
|
||||
def __init__(self, base: dict[int, int]):
|
||||
self.base = base
|
||||
|
||||
def get(self, grp):
|
||||
return CardInfo(grp_id=grp, name=str(grp))
|
||||
|
||||
def base_grp(self, grp):
|
||||
return self.base.get(grp, grp)
|
||||
|
||||
|
||||
def test_transformed_card_maps_back_to_deck_entry():
|
||||
t = MatchTracker(card_lookup=FakeCards({1002: 1001})) # 1002 is 1001's back face
|
||||
start_game(t, deck=(1001,) * 2)
|
||||
t.handle(GreMessages([gsm(2, annotations=[id_changed(100, 150)], zones=[
|
||||
zone(MY_LIB, "Library", [101], ME), zone(BATTLEFIELD, "Battlefield", [150]),
|
||||
], objects=[card(150, 1002, BATTLEFIELD, owner=ME)])]))
|
||||
assert t.my_library_remaining() == {1001: 1}
|
||||
|
||||
|
||||
def test_gap_in_state_ids_marks_desync():
|
||||
t = MatchTracker()
|
||||
start_game(t)
|
||||
t.handle(GreMessages([gsm(2)]))
|
||||
assert not t.game.desynced
|
||||
t.handle(GreMessages([gsm(5)])) # prevGameStateId 4 never seen
|
||||
assert t.game.desynced
|
||||
|
||||
|
||||
def test_object_logged_before_its_id_change_is_one_card():
|
||||
t = MatchTracker()
|
||||
start_game(t)
|
||||
t.handle(GreMessages([gsm(2, objects=[card(210, 5005, BATTLEFIELD)])]))
|
||||
# The new object shows up one message before the annotation linking it to its old id.
|
||||
t.handle(GreMessages([gsm(3, objects=[card(220, 5005, BATTLEFIELD)])]))
|
||||
t.handle(GreMessages([gsm(4, annotations=[id_changed(210, 220)])]))
|
||||
assert t.opp_seen_match == {5005: 1}
|
||||
@@ -0,0 +1,65 @@
|
||||
from collections import Counter
|
||||
from pathlib import Path
|
||||
|
||||
from mtga_assistant.logparse import ClientDeck, DeckSubmitted, GreMessages, LogParser, MatchRoom
|
||||
|
||||
FIXTURE = Path(__file__).parent / "fixtures" / "bo3_match.log"
|
||||
|
||||
|
||||
def parse_file(path: Path) -> list:
|
||||
p = LogParser()
|
||||
out = []
|
||||
with open(path, encoding="utf-8") as f:
|
||||
for line in f:
|
||||
out.extend(p.feed(line))
|
||||
return out
|
||||
|
||||
|
||||
def test_fixture_event_kinds():
|
||||
events = parse_file(FIXTURE)
|
||||
kinds = Counter(type(e).__name__ for e in events)
|
||||
assert kinds["MatchRoom"] == 2
|
||||
assert kinds["DeckSubmitted"] == 1
|
||||
assert kinds["ClientDeck"] == 1
|
||||
assert kinds["GreMessages"] >= 15
|
||||
|
||||
rooms = [e for e in events if isinstance(e, MatchRoom)]
|
||||
assert rooms[0].state == "MatchGameRoomStateType_Playing"
|
||||
assert rooms[1].state == "MatchGameRoomStateType_MatchCompleted"
|
||||
assert {p["playerName"] for p in rooms[0].players} == {"Local Player", "Opponent Player"}
|
||||
|
||||
|
||||
def test_deck_submitted():
|
||||
deck = next(e for e in parse_file(FIXTURE) if isinstance(e, DeckSubmitted))
|
||||
assert deck.name == "Cruel Tutelage"
|
||||
assert sum(deck.main.values()) == 60
|
||||
assert sum(deck.sideboard.values()) == 15
|
||||
|
||||
|
||||
def test_client_deck_from_pretty_printed_body():
|
||||
deck = next(e for e in parse_file(FIXTURE) if isinstance(e, ClientDeck))
|
||||
assert sum(deck.main.values()) == 60
|
||||
assert sum(deck.sideboard.values()) == 15
|
||||
|
||||
|
||||
def test_single_line_gre_event():
|
||||
p = LogParser()
|
||||
assert p.feed("[UnityCrossThreadLogger]10/16/2026 12:34:51 AM: Match to X: GreToClientEvent\n") == []
|
||||
evs = p.feed('{ "greToClientEvent": { "greToClientMessages": [ { "type": "GREMessageType_UIMessage" } ] } }\n')
|
||||
assert len(evs) == 1 and isinstance(evs[0], GreMessages)
|
||||
|
||||
|
||||
def test_multiline_body_and_abandoned_fragment():
|
||||
p = LogParser()
|
||||
assert p.feed("{\n") == []
|
||||
assert p.feed(' "payload": { "type": "Other" },\n') == []
|
||||
# A new log entry starts before the body closed: the fragment is dropped.
|
||||
assert p.feed("[UnityCrossThreadLogger]something\n") == []
|
||||
evs = p.feed('{ "greToClientEvent": { "greToClientMessages": [ { "type": "T" } ] } }\n')
|
||||
assert len(evs) == 1
|
||||
|
||||
|
||||
def test_non_json_lines_ignored():
|
||||
p = LogParser()
|
||||
for line in ["OnSceneLoaded for DuelScene", "[UnityCrossThreadLogger]STATE CHANGED {\"old\":1}", ""]:
|
||||
assert p.feed(line) == []
|
||||
Reference in new issue
Block a user