Commit graph

23551 commits

Author SHA1 Message Date
Shaun Hannah
6aeb3c7c3a [WIP] Consumable JSON game logs
As discussed in https://github.com/magefree/mage/issues/4515

This exposes a JSON log of game interactions that can be analyzed.

This is just a first pass, to get up to speed with how the messaging works. It'd like to trim down the messages much
further so they don't include redundant information in each message. Also gson supports much more advances serialization
options; such as using the @Expose annotation. We should probably use that, but I ran into some issues (I'm not a java
developer, so still learning).

TODO:
  These currently only exist on the client side; ideally we'd submit this logs back up to a central server after the
  games completion; thinking this could be simple via an S3 file drop, and a Lambda function to process and expose the
  logs; maybe via a kafka stream.

Examples of log messages are below:

```
{
  "gameId": "2cede8c5-ff8e-4f8c-b9ac-66af53c0a254",
  "sessionId": "5c4o149-678483-je42ycva-1-je42ycw2-4",
  "type": "GAME_SELECT",
  "value": {
    "gameView": {
      "priorityTime": 3000,
      "players": [
        {
          "name": "computer",
          "life": 20,
          "counters": {}
        },
        {
          "name": "hooptie",
          "life": 20,
          "counters": {}
        }
      ],
      "hand": {
        "425d774f-ee0c-4a9b-8516-c98f886943f0": {
          "name": "Springleaf Drum",
          "power": "0",
          "toughness": "0",
          "loyalty": "",
          "manaCost": [
            "{1}"
          ],
          "convertedManaCost": 1,
          "type": 0,
          "paid": false,
          "id": "425d774f-ee0c-4a9b-8516-c98f886943f0"
        },
        "dd41bb4b-7fc3-4a3c-a69c-d18e281a1bff": {
          "name": "Blade of the Bloodchief",
          "power": "0",
          "toughness": "0",
          "loyalty": "",
          "manaCost": [
            "{1}"
          ],
          "convertedManaCost": 1,
          "type": 0,
          "paid": false,
          "id": "dd41bb4b-7fc3-4a3c-a69c-d18e281a1bff"
        },
        "06eb0a6c-1e70-4dc0-bd1c-93b6ea444806": {
          "name": "Ornithopter",
          "power": "0",
          "toughness": "2",
          "loyalty": "",
          "manaCost": [
            "{0}"
          ],
          "convertedManaCost": 0,
          "type": 0,
          "paid": false,
          "id": "06eb0a6c-1e70-4dc0-bd1c-93b6ea444806"
        },
        "a2f9cc13-e71a-4c9c-96aa-5424ea1a6b64": {
          "name": "Springleaf Drum",
          "power": "0",
          "toughness": "0",
          "loyalty": "",
          "manaCost": [
            "{1}"
          ],
          "convertedManaCost": 1,
          "type": 0,
          "paid": false,
          "id": "a2f9cc13-e71a-4c9c-96aa-5424ea1a6b64"
        },
        "91239f4f-9003-4c48-8ca1-4c318f892489": {
          "name": "Cranial Plating",
          "power": "0",
          "toughness": "0",
          "loyalty": "",
          "manaCost": [
            "{2}"
          ],
          "convertedManaCost": 2,
          "type": 0,
          "paid": false,
          "id": "91239f4f-9003-4c48-8ca1-4c318f892489"
        },
        "feb268d8-0535-4a9c-8915-83dd92a08c4c": {
          "name": "Arcbound Ravager",
          "power": "0",
          "toughness": "0",
          "loyalty": "",
          "manaCost": [
            "{2}"
          ],
          "convertedManaCost": 2,
          "type": 0,
          "paid": false,
          "id": "feb268d8-0535-4a9c-8915-83dd92a08c4c"
        }
      },
      "canPlayInHand": [
        "06eb0a6c-1e70-4dc0-bd1c-93b6ea444806"
      ],
      "stack": {},
      "combat": [],
      "phase": "PRECOMBAT_MAIN",
      "step": "PRECOMBAT_MAIN"
    },
    "message": "Play spells and abilities.",
    "options": {
      "queryType": "SELECT"
    }
  }
}
{
  "gameId": "2cede8c5-ff8e-4f8c-b9ac-66af53c0a254",
  "sessionId": "5c4o149-678483-je42ycva-1-je42ycw2-4",
  "type": "SEND_PLAYER_UUID",
  "value": "06eb0a6c-1e70-4dc0-bd1c-93b6ea444806"
}
{
  "gameId": "2cede8c5-ff8e-4f8c-b9ac-66af53c0a254",
  "sessionId": "5c4o149-678483-je42ycva-1-je42ycw2-4",
  "type": "GAME_CHOOSE_PILE",
  "value": {
    "choices": {
      "1ecf8671-be4c-4060-a76b-af614235a5b7": "Cast Ornithopter"
    }
  }
}
{
  "gameId": "2cede8c5-ff8e-4f8c-b9ac-66af53c0a254",
  "sessionId": "5c4o149-3v2cj2-je43178o-1-je43179f-4",
  "type": "GAME_INIT",
  "value": {
    "priorityTime": 3000,
    "players": [
      {
        "name": "computer",
        "life": 20,
        "counters": {}
      },
      {
        "name": "hooptie",
        "life": 20,
        "counters": {}
      }
    ],
    "hand": {
      "425d774f-ee0c-4a9b-8516-c98f886943f0": {
        "name": "Springleaf Drum",
        "power": "0",
        "toughness": "0",
        "loyalty": "",
        "manaCost": [
          "{1}"
        ],
        "convertedManaCost": 1,
        "type": 0,
        "paid": false,
        "id": "425d774f-ee0c-4a9b-8516-c98f886943f0"
      },
      "dd41bb4b-7fc3-4a3c-a69c-d18e281a1bff": {
        "name": "Blade of the Bloodchief",
        "power": "0",
        "toughness": "0",
        "loyalty": "",
        "manaCost": [
          "{1}"
        ],
        "convertedManaCost": 1,
        "type": 0,
        "paid": false,
        "id": "dd41bb4b-7fc3-4a3c-a69c-d18e281a1bff"
      },
      "06eb0a6c-1e70-4dc0-bd1c-93b6ea444806": {
        "name": "Ornithopter",
        "power": "0",
        "toughness": "2",
        "loyalty": "",
        "manaCost": [
          "{0}"
        ],
        "convertedManaCost": 0,
        "type": 0,
        "paid": false,
        "id": "06eb0a6c-1e70-4dc0-bd1c-93b6ea444806"
      },
      "a2f9cc13-e71a-4c9c-96aa-5424ea1a6b64": {
        "name": "Springleaf Drum",
        "power": "0",
        "toughness": "0",
        "loyalty": "",
        "manaCost": [
          "{1}"
        ],
        "convertedManaCost": 1,
        "type": 0,
        "paid": false,
        "id": "a2f9cc13-e71a-4c9c-96aa-5424ea1a6b64"
      },
      "91239f4f-9003-4c48-8ca1-4c318f892489": {
        "name": "Cranial Plating",
        "power": "0",
        "toughness": "0",
        "loyalty": "",
        "manaCost": [
          "{2}"
        ],
        "convertedManaCost": 2,
        "type": 0,
        "paid": false,
        "id": "91239f4f-9003-4c48-8ca1-4c318f892489"
      },
      "feb268d8-0535-4a9c-8915-83dd92a08c4c": {
        "name": "Arcbound Ravager",
        "power": "0",
        "toughness": "0",
        "loyalty": "",
        "manaCost": [
          "{2}"
        ],
        "convertedManaCost": 2,
        "type": 0,
        "paid": false,
        "id": "feb268d8-0535-4a9c-8915-83dd92a08c4c"
      }
    },
    "canPlayInHand": [
      "06eb0a6c-1e70-4dc0-bd1c-93b6ea444806"
    ],
    "stack": {},
    "combat": [],
    "phase": "PRECOMBAT_MAIN",
    "step": "PRECOMBAT_MAIN"
  }
}
{
  "gameId": "2cede8c5-ff8e-4f8c-b9ac-66af53c0a254",
  "sessionId": "5c4o149-3v2cj2-je43178o-1-je43179f-4",
  "type": "GAME_SELECT",
  "value": {
    "gameView": {
      "priorityTime": 3000,
      "players": [
        {
          "name": "computer",
          "life": 20,
          "counters": {}
        },
        {
          "name": "hooptie",
          "life": 20,
          "counters": {}
        }
      ],
      "hand": {
        "425d774f-ee0c-4a9b-8516-c98f886943f0": {
          "name": "Springleaf Drum",
          "power": "0",
          "toughness": "0",
          "loyalty": "",
          "manaCost": [
            "{1}"
          ],
          "convertedManaCost": 1,
          "type": 0,
          "paid": false,
          "id": "425d774f-ee0c-4a9b-8516-c98f886943f0"
        },
        "dd41bb4b-7fc3-4a3c-a69c-d18e281a1bff": {
          "name": "Blade of the Bloodchief",
          "power": "0",
          "toughness": "0",
          "loyalty": "",
          "manaCost": [
            "{1}"
          ],
          "convertedManaCost": 1,
          "type": 0,
          "paid": false,
          "id": "dd41bb4b-7fc3-4a3c-a69c-d18e281a1bff"
        },
        "06eb0a6c-1e70-4dc0-bd1c-93b6ea444806": {
          "name": "Ornithopter",
          "power": "0",
          "toughness": "2",
          "loyalty": "",
          "manaCost": [
            "{0}"
          ],
          "convertedManaCost": 0,
          "type": 0,
          "paid": false,
          "id": "06eb0a6c-1e70-4dc0-bd1c-93b6ea444806"
        },
        "a2f9cc13-e71a-4c9c-96aa-5424ea1a6b64": {
          "name": "Springleaf Drum",
          "power": "0",
          "toughness": "0",
          "loyalty": "",
          "manaCost": [
            "{1}"
          ],
          "convertedManaCost": 1,
          "type": 0,
          "paid": false,
          "id": "a2f9cc13-e71a-4c9c-96aa-5424ea1a6b64"
        },
        "91239f4f-9003-4c48-8ca1-4c318f892489": {
          "name": "Cranial Plating",
          "power": "0",
          "toughness": "0",
          "loyalty": "",
          "manaCost": [
            "{2}"
          ],
          "convertedManaCost": 2,
          "type": 0,
          "paid": false,
          "id": "91239f4f-9003-4c48-8ca1-4c318f892489"
        },
        "feb268d8-0535-4a9c-8915-83dd92a08c4c": {
          "name": "Arcbound Ravager",
          "power": "0",
          "toughness": "0",
          "loyalty": "",
          "manaCost": [
            "{2}"
          ],
          "convertedManaCost": 2,
          "type": 0,
          "paid": false,
          "id": "feb268d8-0535-4a9c-8915-83dd92a08c4c"
        }
      },
      "canPlayInHand": [
        "06eb0a6c-1e70-4dc0-bd1c-93b6ea444806"
      ],
      "stack": {},
      "combat": [],
      "phase": "PRECOMBAT_MAIN",
      "step": "PRECOMBAT_MAIN"
    },
    "message": "Play spells and abilities.",
    "options": {
      "queryType": "SELECT"
    }
  }
}
{
  "gameId": "2cede8c5-ff8e-4f8c-b9ac-66af53c0a254",
  "sessionId": "5c4o149-678483-je42ycva-1-je42ycw2-4",
  "type": "SEND_PLAYER_UUID",
  "value": "1ecf8671-be4c-4060-a76b-af614235a5b7"
}
```
2018-02-26 19:23:00 -05:00
Jeff
fe3a023c36 - Fixed Djinn Illuminatus #4552 2018-02-26 11:18:17 -06:00
LevelX2
79939c5ee7 Merge origin/master 2018-02-26 16:17:48 +01:00
LevelX2
5f98cb685e * Hushwing Gryff - Fixed that log message was sent out too often (fixes #4548). 2018-02-26 16:17:16 +01:00
Oleg Agafonov
aeb1fa6bb3 Card text fixes 2018-02-26 16:48:38 +04:00
Oleg Agafonov
ed8b59ff6f
Merge pull request #4553 from lcoviedo/master
spells cost reduction text
2018-02-26 16:46:56 +04:00
lcoviedo
1dd88b0ea7
spells cost reduction text 2018-02-26 12:27:19 +00:00
spjspj
871b035bb4
Merge pull request #4551 from spjspj/master
Adding in way to render Zendikar full art lands.
2018-02-26 15:31:10 +11:00
spjspj
afeb1c16ac Adding in way to render Zendikar full art lands.
Things still to do:
1) Get everyone to download the full art Face images
2) Add in the collector number to the Face images (<ImageDirector>/FACE/ZEN/Island.<numberneeded>.jpg for example)
3) Add in the ability to draw say BFZ / HOU full art lands as well.
4) Maybe even add in an UST (Unstable) way of rendering lands (with the swoosh of opaque full art down the bottom).
2018-02-26 15:22:59 +11:00
spjspj
576c1aec57 Adding in way to render Zendikar full art lands.
Things still to do:
1) Get everyone to download the full art Face images
2) Add in the collector number to the Face images (<ImageDirector>/FACE/ZEN/Island.<numberneeded>.jpg for example)
3) Add in the ability to draw say BFZ / HOU full art lands as well.
4) Maybe even add in an UST (Unstable) way of rendering lands (with the swoosh of opaque full art down the bottom).
2018-02-26 12:47:18 +11:00
L_J
2da32a767c
Implemented Just Fate 2018-02-25 21:44:52 +00:00
L_J
5246b96005
Implemented Heavy Fog 2018-02-25 21:43:58 +00:00
L_J
a87cbc12c7
Implemented cards 2018-02-25 21:42:46 +00:00
L_J
84f2d5cb27
Implemented cards 2018-02-25 21:42:07 +00:00
L_J
5104442d6d
Implemented Warrior's Stand 2018-02-25 21:41:18 +00:00
L_J
3af8e03350
Implemented Kongming's Contraptions 2018-02-25 21:40:30 +00:00
L_J
2892573fd3
Implemented Just Fate 2018-02-25 21:39:57 +00:00
L_J
47c3117dd3
Implemented Heavy Fog 2018-02-25 21:39:25 +00:00
L_J
cb677fa983
Implemented Goblin War Cry 2018-02-25 21:38:47 +00:00
L_J
9e2fda2a77
Implemented Eunuchs' Intrigues 2018-02-25 21:38:05 +00:00
LevelX2
ba483dd87a * Added a test for the new Blood Moon rule (set to @Ignored) because new rule is not implemented. 2018-02-25 21:59:06 +01:00
LevelX2
2fceafda93 * Fixed a bug that mana in the mana pool could not be used to pay mana costs that could only be payed with "you may spend mana as thought" effects (fixes #2581). 2018-02-25 21:53:47 +01:00
L_J
5fac17c0d4
Implemented Deep Wood 2018-02-25 15:24:55 +00:00
L_J
7e83497ba4
Implemented cards 2018-02-25 15:24:30 +00:00
L_J
b347ab3eb8
Implemented Temporary Truce 2018-02-25 15:22:41 +00:00
L_J
5152d34c41
Implemented Cruel Fate 2018-02-25 15:21:05 +00:00
L_J
65428726da
Implemented Dread Charge 2018-02-25 15:21:00 +00:00
L_J
d3eeaa28a4
Implemented Deep Wood 2018-02-25 15:20:31 +00:00
L_J
2c28f64294
CantBeBlockedByCreaturesAllEffect duration bugfix 2018-02-25 14:26:02 +00:00
L_J
aa4997607f
Implemented Harsh Justice 2018-02-25 11:54:31 +00:00
L_J
44e5366c48
Implemented Harsh Justice 2018-02-25 11:53:58 +00:00
L_J
36ef666f0e
Implemented Harsh Justice 2018-02-25 11:52:43 +00:00
LevelX2
0d4082c7f3 Merge origin/master 2018-02-25 12:34:27 +01:00
LevelX2
7e5f4f580d * Fixed wrong user active check for table health. 2018-02-25 12:33:57 +01:00
Oleg Agafonov
d7b19a1866 Fixed random game ends from 89b6aeacd6 2018-02-25 14:20:42 +04:00
LevelX2
4c88b8e6e3 * Fixed a bug of AttackedThisStepWatcher (fixes #4549). 2018-02-25 10:39:33 +01:00
L_J
a6048f497f
Implemented Blaze of Glory 2018-02-24 22:03:31 +00:00
L_J
9b3ed94cd4
Implemented Blaze of Glory 2018-02-24 22:03:25 +00:00
L_J
38a5bd01f2
Implemented Blaze of Glory 2018-02-24 22:03:17 +00:00
L_J
05123dafbf
Implemented Blaze of Glory 2018-02-24 22:03:13 +00:00
L_J
a204630180
Implemented Blaze of Glory 2018-02-24 22:00:16 +00:00
L_J
4b89342c34
Added support for Blaze of Glory 2018-02-24 21:52:05 +00:00
LevelX2
309d4685e8 * Cleaned up FixedTargets MageObjectReference handling. 2018-02-24 17:28:55 +01:00
LevelX2
f6ad6b37c2 Merge origin/master 2018-02-24 17:10:37 +01:00
LevelX2
800daff304 * Fixed Vodalian War Machine watcher handling related to MageObjectReferences. 2018-02-24 17:10:13 +01:00
Oleg Agafonov
3e9f5d6e3b Merge remote-tracking branch 'production/master' into production_master 2018-02-24 19:52:33 +04:00
Oleg Agafonov
8238139192 * UI: added SVG icons support on x64 linux systems (see #4421, must cleanup xmage\mage-client\lib folder); 2018-02-24 19:52:25 +04:00
LevelX2
a6e389bbaa
Merge pull request #4542 from Zzooouhh/Zzooouhh-vwm
Implemented Vodalian War Machine (Fallen Empires complete) & some Legends cards
2018-02-24 16:45:42 +01:00
L_J
c00b8ad136
Merge pull request #4546 from Zzooouhh/master
Implemented Legions cards (completed Legions set)
2018-02-24 15:05:46 +01:00
L_J
459b81c967
Implemented cards 2018-02-24 13:52:07 +00:00