hearthstone 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (40) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +15 -0
  3. data/Gemfile +4 -0
  4. data/LICENSE.txt +22 -0
  5. data/README.md +43 -0
  6. data/Rakefile +2 -0
  7. data/bin/hearthstone-recorder +7 -0
  8. data/hearthstone.gemspec +28 -0
  9. data/lib/hearthstone.rb +7 -0
  10. data/lib/hearthstone/commands/recorder_command.rb +86 -0
  11. data/lib/hearthstone/log.rb +7 -0
  12. data/lib/hearthstone/log/configurator.rb +41 -0
  13. data/lib/hearthstone/log/data.rb +1 -0
  14. data/lib/hearthstone/log/data/game.rb +74 -0
  15. data/lib/hearthstone/log/data/game_player.rb +25 -0
  16. data/lib/hearthstone/log/data/game_turn.rb +32 -0
  17. data/lib/hearthstone/log/game_logger.rb +128 -0
  18. data/lib/hearthstone/log/parser.rb +276 -0
  19. data/lib/hearthstone/models.rb +3 -0
  20. data/lib/hearthstone/models/AllSetsAllLanguages.json +1 -0
  21. data/lib/hearthstone/models/card.rb +20 -0
  22. data/lib/hearthstone/models/card_store.rb +50 -0
  23. data/lib/hearthstone/models/entity.rb +67 -0
  24. data/lib/hearthstone/models/game.rb +151 -0
  25. data/lib/hearthstone/models/game_loader.rb +52 -0
  26. data/lib/hearthstone/models/player.rb +37 -0
  27. data/lib/hearthstone/version.rb +3 -0
  28. data/spec/fixtures/completed.config +8 -0
  29. data/spec/fixtures/empty_config.config +0 -0
  30. data/spec/fixtures/game1.json +2433 -0
  31. data/spec/fixtures/gamelog1.json +1585 -0
  32. data/spec/fixtures/gamelog1.log +25508 -0
  33. data/spec/fixtures/gamelog2.log +85357 -0
  34. data/spec/hearthstone/log/configurator_spec.rb +61 -0
  35. data/spec/hearthstone/log/game_logger_spec.rb +57 -0
  36. data/spec/hearthstone/log/parser_spec.rb +185 -0
  37. data/spec/hearthstone/models/card_store_spec.rb +16 -0
  38. data/spec/hearthstone/models/game_loader_spec.rb +153 -0
  39. data/spec/hearthstone/models/game_spec.rb +157 -0
  40. metadata +179 -0
@@ -0,0 +1,52 @@
1
+ require 'json'
2
+
3
+ require_relative './game'
4
+
5
+ module Hearthstone
6
+ module Models
7
+ class GameLoader
8
+ attr_accessor :data
9
+ attr_reader :game
10
+
11
+ def initialize(data)
12
+ @data = data
13
+ @game = Game.new
14
+ end
15
+
16
+ def load_players
17
+ data[:players].each do |player|
18
+ game.add_player(id: player[:id], name: player[:name], first_player: player[:first_player],
19
+ hero_id: player[:hero][:id], hero_card_id: player[:hero][:card_id],
20
+ hero_power_id: player[:hero_power][:id], hero_power_card_id: player[:hero_power][:card_id])
21
+ end
22
+ end
23
+
24
+ def load_turns
25
+ data[:turns].each do |turn|
26
+ load_turn(number: turn[:number], events: turn[:events])
27
+ end
28
+ end
29
+
30
+ def load_turn(number: 0, events: [])
31
+ game.turn = number
32
+
33
+ events.each do |event|
34
+ load_event(event[0], event[1])
35
+ end
36
+ end
37
+
38
+ def load_event(name, data)
39
+ event_sym = name.to_sym
40
+ case event_sym
41
+ when :open_card, :card_received, :card_revealed, :card_played, :card_added_to_deck, :card_drawn, :card_discarded, :card_destroyed, :card_put_in_play
42
+ game.send(event_sym, data)
43
+ when :damaged
44
+ game.apply_damage(id: data[:id], amount: data[:amount])
45
+ when :attached
46
+ game.card_attached(attachment_id: data[:id], target_id: data[:target])
47
+ end
48
+ end
49
+
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,37 @@
1
+ module Hearthstone
2
+ module Models
3
+ class Player
4
+ attr_reader :id, :name, :first_player
5
+ attr_accessor :hero, :hero_power
6
+ attr_reader :deck, :hand, :play, :graveyard, :setaside
7
+
8
+ def initialize(id: nil, name: nil, first_player: nil, hero: nil, hero_power: nil)
9
+ @id = id
10
+ @name = name
11
+ @first_player = first_player
12
+ @hero = hero
13
+ @hero_power = hero_power
14
+
15
+ @deck = Set.new
16
+ @hand = Set.new
17
+ @play = Set.new
18
+ @graveyard = Set.new
19
+ @setaside = Set.new
20
+ end
21
+
22
+ def move_card(card, to_zone)
23
+ [:deck, :hand, :play, :graveyard, :setaside].each do |zone|
24
+ if to_zone != zone
25
+ self.send(zone).delete(card)
26
+ else
27
+ self.send(to_zone) << card
28
+ end
29
+ end
30
+ end
31
+
32
+ def to_s
33
+ "<Player ##{id} \"#{name}\">"
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,3 @@
1
+ module Hearthstone
2
+ VERSION = "0.2.0"
3
+ end
@@ -0,0 +1,8 @@
1
+ [Zone]
2
+ LogLevel=1
3
+ FilePrinting=false
4
+ ConsolePrinting=true
5
+ ScreenPrinting=false
6
+ [Power]
7
+ LogLevel=1
8
+ ConsolePrinting=true
File without changes
@@ -0,0 +1,2433 @@
1
+ {
2
+ "mode": "ranked",
3
+ "players": [
4
+ {
5
+ "id": 2,
6
+ "name": "ALzard",
7
+ "first_player": true,
8
+ "hero": {
9
+ "id": 36,
10
+ "card_id": "HERO_02"
11
+ },
12
+ "hero_power": {
13
+ "id": 37,
14
+ "card_id": "CS2_049"
15
+ }
16
+ },
17
+ {
18
+ "id": 1,
19
+ "name": "siuying",
20
+ "first_player": false,
21
+ "hero": {
22
+ "id": 4,
23
+ "card_id": "HERO_05"
24
+ },
25
+ "hero_power": {
26
+ "id": 5,
27
+ "card_id": "DS1h_292"
28
+ }
29
+ }
30
+ ],
31
+ "turns": [
32
+ {
33
+ "number": 0,
34
+ "player": null,
35
+ "timestamp": null,
36
+ "events": [
37
+ [
38
+ "open_card",
39
+ {
40
+ "id": 4,
41
+ "card_id": "HERO_05"
42
+ }
43
+ ],
44
+ [
45
+ "open_card",
46
+ {
47
+ "id": 5,
48
+ "card_id": "DS1h_292"
49
+ }
50
+ ],
51
+ [
52
+ "open_card",
53
+ {
54
+ "id": 6,
55
+ "card_id": "FP1_013"
56
+ }
57
+ ],
58
+ [
59
+ "open_card",
60
+ {
61
+ "id": 19,
62
+ "card_id": "EX1_016"
63
+ }
64
+ ],
65
+ [
66
+ "open_card",
67
+ {
68
+ "id": 20,
69
+ "card_id": "EX1_556"
70
+ }
71
+ ],
72
+ [
73
+ "open_card",
74
+ {
75
+ "id": 29,
76
+ "card_id": "EX1_536"
77
+ }
78
+ ],
79
+ [
80
+ "open_card",
81
+ {
82
+ "id": 36,
83
+ "card_id": "HERO_02"
84
+ }
85
+ ],
86
+ [
87
+ "open_card",
88
+ {
89
+ "id": 37,
90
+ "card_id": "CS2_049"
91
+ }
92
+ ]
93
+ ]
94
+ },
95
+ {
96
+ "number": 1,
97
+ "player": "ALzard",
98
+ "timestamp": 1418491162,
99
+ "events": [
100
+ [
101
+ "card_received",
102
+ {
103
+ "player_id": 1,
104
+ "id": 6,
105
+ "card_id": "FP1_013"
106
+ }
107
+ ],
108
+ [
109
+ "card_added_to_deck",
110
+ {
111
+ "player_id": 1,
112
+ "id": 7,
113
+ "card_id": ""
114
+ }
115
+ ],
116
+ [
117
+ "card_added_to_deck",
118
+ {
119
+ "player_id": 1,
120
+ "id": 8,
121
+ "card_id": ""
122
+ }
123
+ ],
124
+ [
125
+ "card_added_to_deck",
126
+ {
127
+ "player_id": 1,
128
+ "id": 9,
129
+ "card_id": ""
130
+ }
131
+ ],
132
+ [
133
+ "card_added_to_deck",
134
+ {
135
+ "player_id": 1,
136
+ "id": 10,
137
+ "card_id": ""
138
+ }
139
+ ],
140
+ [
141
+ "card_added_to_deck",
142
+ {
143
+ "player_id": 1,
144
+ "id": 11,
145
+ "card_id": ""
146
+ }
147
+ ],
148
+ [
149
+ "card_added_to_deck",
150
+ {
151
+ "player_id": 1,
152
+ "id": 12,
153
+ "card_id": ""
154
+ }
155
+ ],
156
+ [
157
+ "card_added_to_deck",
158
+ {
159
+ "player_id": 1,
160
+ "id": 13,
161
+ "card_id": ""
162
+ }
163
+ ],
164
+ [
165
+ "card_added_to_deck",
166
+ {
167
+ "player_id": 1,
168
+ "id": 14,
169
+ "card_id": ""
170
+ }
171
+ ],
172
+ [
173
+ "card_added_to_deck",
174
+ {
175
+ "player_id": 1,
176
+ "id": 15,
177
+ "card_id": ""
178
+ }
179
+ ],
180
+ [
181
+ "card_added_to_deck",
182
+ {
183
+ "player_id": 1,
184
+ "id": 16,
185
+ "card_id": ""
186
+ }
187
+ ],
188
+ [
189
+ "card_added_to_deck",
190
+ {
191
+ "player_id": 1,
192
+ "id": 17,
193
+ "card_id": ""
194
+ }
195
+ ],
196
+ [
197
+ "card_added_to_deck",
198
+ {
199
+ "player_id": 1,
200
+ "id": 18,
201
+ "card_id": ""
202
+ }
203
+ ],
204
+ [
205
+ "card_received",
206
+ {
207
+ "player_id": 1,
208
+ "id": 19,
209
+ "card_id": "EX1_016"
210
+ }
211
+ ],
212
+ [
213
+ "card_received",
214
+ {
215
+ "player_id": 1,
216
+ "id": 20,
217
+ "card_id": "EX1_556"
218
+ }
219
+ ],
220
+ [
221
+ "card_added_to_deck",
222
+ {
223
+ "player_id": 1,
224
+ "id": 21,
225
+ "card_id": ""
226
+ }
227
+ ],
228
+ [
229
+ "card_added_to_deck",
230
+ {
231
+ "player_id": 1,
232
+ "id": 22,
233
+ "card_id": ""
234
+ }
235
+ ],
236
+ [
237
+ "card_added_to_deck",
238
+ {
239
+ "player_id": 1,
240
+ "id": 23,
241
+ "card_id": ""
242
+ }
243
+ ],
244
+ [
245
+ "card_added_to_deck",
246
+ {
247
+ "player_id": 1,
248
+ "id": 24,
249
+ "card_id": ""
250
+ }
251
+ ],
252
+ [
253
+ "card_added_to_deck",
254
+ {
255
+ "player_id": 1,
256
+ "id": 25,
257
+ "card_id": ""
258
+ }
259
+ ],
260
+ [
261
+ "card_added_to_deck",
262
+ {
263
+ "player_id": 1,
264
+ "id": 26,
265
+ "card_id": ""
266
+ }
267
+ ],
268
+ [
269
+ "card_added_to_deck",
270
+ {
271
+ "player_id": 1,
272
+ "id": 27,
273
+ "card_id": ""
274
+ }
275
+ ],
276
+ [
277
+ "card_added_to_deck",
278
+ {
279
+ "player_id": 1,
280
+ "id": 28,
281
+ "card_id": ""
282
+ }
283
+ ],
284
+ [
285
+ "card_received",
286
+ {
287
+ "player_id": 1,
288
+ "id": 29,
289
+ "card_id": "EX1_536"
290
+ }
291
+ ],
292
+ [
293
+ "card_added_to_deck",
294
+ {
295
+ "player_id": 1,
296
+ "id": 30,
297
+ "card_id": ""
298
+ }
299
+ ],
300
+ [
301
+ "card_added_to_deck",
302
+ {
303
+ "player_id": 1,
304
+ "id": 31,
305
+ "card_id": ""
306
+ }
307
+ ],
308
+ [
309
+ "card_added_to_deck",
310
+ {
311
+ "player_id": 1,
312
+ "id": 32,
313
+ "card_id": ""
314
+ }
315
+ ],
316
+ [
317
+ "card_added_to_deck",
318
+ {
319
+ "player_id": 1,
320
+ "id": 33,
321
+ "card_id": ""
322
+ }
323
+ ],
324
+ [
325
+ "card_added_to_deck",
326
+ {
327
+ "player_id": 1,
328
+ "id": 34,
329
+ "card_id": ""
330
+ }
331
+ ],
332
+ [
333
+ "card_added_to_deck",
334
+ {
335
+ "player_id": 1,
336
+ "id": 35,
337
+ "card_id": ""
338
+ }
339
+ ],
340
+ [
341
+ "card_added_to_deck",
342
+ {
343
+ "player_id": 2,
344
+ "id": 38,
345
+ "card_id": ""
346
+ }
347
+ ],
348
+ [
349
+ "card_added_to_deck",
350
+ {
351
+ "player_id": 2,
352
+ "id": 39,
353
+ "card_id": ""
354
+ }
355
+ ],
356
+ [
357
+ "card_added_to_deck",
358
+ {
359
+ "player_id": 2,
360
+ "id": 40,
361
+ "card_id": ""
362
+ }
363
+ ],
364
+ [
365
+ "card_added_to_deck",
366
+ {
367
+ "player_id": 2,
368
+ "id": 41,
369
+ "card_id": ""
370
+ }
371
+ ],
372
+ [
373
+ "card_received",
374
+ {
375
+ "player_id": 2,
376
+ "id": 42,
377
+ "card_id": ""
378
+ }
379
+ ],
380
+ [
381
+ "card_added_to_deck",
382
+ {
383
+ "player_id": 2,
384
+ "id": 43,
385
+ "card_id": ""
386
+ }
387
+ ],
388
+ [
389
+ "card_added_to_deck",
390
+ {
391
+ "player_id": 2,
392
+ "id": 44,
393
+ "card_id": ""
394
+ }
395
+ ],
396
+ [
397
+ "card_added_to_deck",
398
+ {
399
+ "player_id": 2,
400
+ "id": 45,
401
+ "card_id": ""
402
+ }
403
+ ],
404
+ [
405
+ "card_added_to_deck",
406
+ {
407
+ "player_id": 2,
408
+ "id": 46,
409
+ "card_id": ""
410
+ }
411
+ ],
412
+ [
413
+ "card_added_to_deck",
414
+ {
415
+ "player_id": 2,
416
+ "id": 47,
417
+ "card_id": ""
418
+ }
419
+ ],
420
+ [
421
+ "card_added_to_deck",
422
+ {
423
+ "player_id": 2,
424
+ "id": 48,
425
+ "card_id": ""
426
+ }
427
+ ],
428
+ [
429
+ "card_added_to_deck",
430
+ {
431
+ "player_id": 2,
432
+ "id": 49,
433
+ "card_id": ""
434
+ }
435
+ ],
436
+ [
437
+ "card_added_to_deck",
438
+ {
439
+ "player_id": 2,
440
+ "id": 50,
441
+ "card_id": ""
442
+ }
443
+ ],
444
+ [
445
+ "card_added_to_deck",
446
+ {
447
+ "player_id": 2,
448
+ "id": 51,
449
+ "card_id": ""
450
+ }
451
+ ],
452
+ [
453
+ "card_added_to_deck",
454
+ {
455
+ "player_id": 2,
456
+ "id": 52,
457
+ "card_id": ""
458
+ }
459
+ ],
460
+ [
461
+ "card_added_to_deck",
462
+ {
463
+ "player_id": 2,
464
+ "id": 53,
465
+ "card_id": ""
466
+ }
467
+ ],
468
+ [
469
+ "card_added_to_deck",
470
+ {
471
+ "player_id": 2,
472
+ "id": 54,
473
+ "card_id": ""
474
+ }
475
+ ],
476
+ [
477
+ "card_received",
478
+ {
479
+ "player_id": 2,
480
+ "id": 55,
481
+ "card_id": ""
482
+ }
483
+ ],
484
+ [
485
+ "card_added_to_deck",
486
+ {
487
+ "player_id": 2,
488
+ "id": 56,
489
+ "card_id": ""
490
+ }
491
+ ],
492
+ [
493
+ "card_added_to_deck",
494
+ {
495
+ "player_id": 2,
496
+ "id": 57,
497
+ "card_id": ""
498
+ }
499
+ ],
500
+ [
501
+ "card_added_to_deck",
502
+ {
503
+ "player_id": 2,
504
+ "id": 58,
505
+ "card_id": ""
506
+ }
507
+ ],
508
+ [
509
+ "card_added_to_deck",
510
+ {
511
+ "player_id": 2,
512
+ "id": 59,
513
+ "card_id": ""
514
+ }
515
+ ],
516
+ [
517
+ "card_added_to_deck",
518
+ {
519
+ "player_id": 2,
520
+ "id": 60,
521
+ "card_id": ""
522
+ }
523
+ ],
524
+ [
525
+ "card_added_to_deck",
526
+ {
527
+ "player_id": 2,
528
+ "id": 61,
529
+ "card_id": ""
530
+ }
531
+ ],
532
+ [
533
+ "card_added_to_deck",
534
+ {
535
+ "player_id": 2,
536
+ "id": 62,
537
+ "card_id": ""
538
+ }
539
+ ],
540
+ [
541
+ "card_added_to_deck",
542
+ {
543
+ "player_id": 2,
544
+ "id": 63,
545
+ "card_id": ""
546
+ }
547
+ ],
548
+ [
549
+ "card_added_to_deck",
550
+ {
551
+ "player_id": 2,
552
+ "id": 64,
553
+ "card_id": ""
554
+ }
555
+ ],
556
+ [
557
+ "card_added_to_deck",
558
+ {
559
+ "player_id": 2,
560
+ "id": 65,
561
+ "card_id": ""
562
+ }
563
+ ],
564
+ [
565
+ "card_added_to_deck",
566
+ {
567
+ "player_id": 2,
568
+ "id": 66,
569
+ "card_id": ""
570
+ }
571
+ ],
572
+ [
573
+ "card_received",
574
+ {
575
+ "player_id": 2,
576
+ "id": 67,
577
+ "card_id": ""
578
+ }
579
+ ],
580
+ [
581
+ "card_received",
582
+ {
583
+ "player_id": 1,
584
+ "id": 68,
585
+ "card_id": "GAME_005"
586
+ }
587
+ ],
588
+ [
589
+ "choice_type",
590
+ "MULLIGAN"
591
+ ],
592
+ [
593
+ "choose",
594
+ {
595
+ "id": 29,
596
+ "card_id": "EX1_536",
597
+ "player_id": 1
598
+ }
599
+ ],
600
+ [
601
+ "card_drawn",
602
+ {
603
+ "player_id": 1,
604
+ "id": 11,
605
+ "card_id": "FP1_031"
606
+ }
607
+ ],
608
+ [
609
+ "card_reshuffled",
610
+ {
611
+ "player_id": 1,
612
+ "id": 19,
613
+ "card_id": "EX1_016"
614
+ }
615
+ ],
616
+ [
617
+ "card_drawn",
618
+ {
619
+ "player_id": 1,
620
+ "id": 21,
621
+ "card_id": "FP1_028"
622
+ }
623
+ ],
624
+ [
625
+ "card_reshuffled",
626
+ {
627
+ "player_id": 1,
628
+ "id": 20,
629
+ "card_id": "EX1_556"
630
+ }
631
+ ],
632
+ [
633
+ "card_drawn",
634
+ {
635
+ "player_id": 1,
636
+ "id": 8,
637
+ "card_id": "FP1_012"
638
+ }
639
+ ],
640
+ [
641
+ "card_reshuffled",
642
+ {
643
+ "player_id": 1,
644
+ "id": 6,
645
+ "card_id": "FP1_013"
646
+ }
647
+ ],
648
+ [
649
+ "card_drawn",
650
+ {
651
+ "player_id": 2,
652
+ "id": 59,
653
+ "card_id": ""
654
+ }
655
+ ],
656
+ [
657
+ "card_reshuffled",
658
+ {
659
+ "player_id": 2,
660
+ "id": 67,
661
+ "card_id": ""
662
+ }
663
+ ],
664
+ [
665
+ "card_drawn",
666
+ {
667
+ "player_id": 2,
668
+ "id": 58,
669
+ "card_id": ""
670
+ }
671
+ ],
672
+ [
673
+ "card_reshuffled",
674
+ {
675
+ "player_id": 2,
676
+ "id": 42,
677
+ "card_id": ""
678
+ }
679
+ ],
680
+ [
681
+ "card_drawn",
682
+ {
683
+ "player_id": 2,
684
+ "id": 47,
685
+ "card_id": ""
686
+ }
687
+ ]
688
+ ]
689
+ },
690
+ {
691
+ "number": 2,
692
+ "player": "siuying",
693
+ "timestamp": 1418491174,
694
+ "events": [
695
+ [
696
+ "card_setaside",
697
+ {
698
+ "player_id": 1,
699
+ "id": 23,
700
+ "card_id": "EX1_610"
701
+ }
702
+ ],
703
+ [
704
+ "card_drawn",
705
+ {
706
+ "player_id": 1,
707
+ "id": 23,
708
+ "card_id": "EX1_610"
709
+ }
710
+ ],
711
+ [
712
+ "card_played",
713
+ {
714
+ "player_id": 1,
715
+ "id": 21,
716
+ "card_id": "FP1_028"
717
+ }
718
+ ]
719
+ ]
720
+ },
721
+ {
722
+ "number": 3,
723
+ "player": "ALzard",
724
+ "timestamp": 1418491180,
725
+ "events": [
726
+ [
727
+ "card_drawn",
728
+ {
729
+ "player_id": 2,
730
+ "id": 67,
731
+ "card_id": ""
732
+ }
733
+ ],
734
+ [
735
+ "open_card",
736
+ {
737
+ "id": 69,
738
+ "card_id": "NEW1_009"
739
+ }
740
+ ],
741
+ [
742
+ "card_put_in_play",
743
+ {
744
+ "player_id": 2,
745
+ "id": 69,
746
+ "card_id": "NEW1_009"
747
+ }
748
+ ]
749
+ ]
750
+ },
751
+ {
752
+ "number": 4,
753
+ "player": "siuying",
754
+ "timestamp": 1418491191,
755
+ "events": [
756
+ [
757
+ "card_drawn",
758
+ {
759
+ "player_id": 1,
760
+ "id": 26,
761
+ "card_id": "EX1_096"
762
+ }
763
+ ],
764
+ [
765
+ "card_played",
766
+ {
767
+ "player_id": 1,
768
+ "id": 26,
769
+ "card_id": "EX1_096"
770
+ }
771
+ ],
772
+ [
773
+ "open_card",
774
+ {
775
+ "id": 70,
776
+ "card_id": "FP1_028e"
777
+ }
778
+ ],
779
+ [
780
+ "attached",
781
+ {
782
+ "id": 70,
783
+ "target": 21
784
+ }
785
+ ],
786
+ [
787
+ "action_start",
788
+ {
789
+ "subtype": "ATTACK",
790
+ "from": {
791
+ "id": 21,
792
+ "card_id": "FP1_028",
793
+ "player_id": 1
794
+ },
795
+ "to": {
796
+ "id": 36,
797
+ "card_id": "HERO_02",
798
+ "player_id": 2
799
+ }
800
+ }
801
+ ],
802
+ [
803
+ "damaged",
804
+ {
805
+ "id": 36,
806
+ "card_id": "HERO_02",
807
+ "player_id": 2,
808
+ "amount": 2
809
+ }
810
+ ]
811
+ ]
812
+ },
813
+ {
814
+ "number": 5,
815
+ "player": "ALzard",
816
+ "timestamp": 1418491202,
817
+ "events": [
818
+ [
819
+ "card_drawn",
820
+ {
821
+ "player_id": 2,
822
+ "id": 57,
823
+ "card_id": ""
824
+ }
825
+ ],
826
+ [
827
+ "open_card",
828
+ {
829
+ "id": 71,
830
+ "card_id": "CS2_051"
831
+ }
832
+ ],
833
+ [
834
+ "card_put_in_play",
835
+ {
836
+ "player_id": 2,
837
+ "id": 71,
838
+ "card_id": "CS2_051"
839
+ }
840
+ ],
841
+ [
842
+ "card_target",
843
+ {
844
+ "id": 55,
845
+ "card_id": "",
846
+ "player_id": 2,
847
+ "target": 26
848
+ }
849
+ ],
850
+ [
851
+ "damaged",
852
+ {
853
+ "id": 26,
854
+ "card_id": "EX1_096",
855
+ "player_id": 1,
856
+ "amount": 1
857
+ }
858
+ ],
859
+ [
860
+ "card_played",
861
+ {
862
+ "player_id": 2,
863
+ "id": 55,
864
+ "card_id": "EX1_245"
865
+ }
866
+ ],
867
+ [
868
+ "card_discarded",
869
+ {
870
+ "player_id": 2,
871
+ "id": 55,
872
+ "card_id": "EX1_245"
873
+ }
874
+ ],
875
+ [
876
+ "card_destroyed",
877
+ {
878
+ "player_id": 1,
879
+ "id": 26,
880
+ "card_id": "EX1_096"
881
+ }
882
+ ]
883
+ ]
884
+ },
885
+ {
886
+ "number": 6,
887
+ "player": "siuying",
888
+ "timestamp": 1418491281,
889
+ "events": [
890
+ [
891
+ "card_drawn",
892
+ {
893
+ "player_id": 1,
894
+ "id": 18,
895
+ "card_id": "GVG_026"
896
+ }
897
+ ],
898
+ [
899
+ "card_played",
900
+ {
901
+ "player_id": 1,
902
+ "id": 68,
903
+ "card_id": "GAME_005"
904
+ }
905
+ ],
906
+ [
907
+ "card_discarded",
908
+ {
909
+ "player_id": 1,
910
+ "id": 68,
911
+ "card_id": "GAME_005"
912
+ }
913
+ ],
914
+ [
915
+ "card_played",
916
+ {
917
+ "player_id": 1,
918
+ "id": 11,
919
+ "card_id": "FP1_031"
920
+ }
921
+ ],
922
+ [
923
+ "action_start",
924
+ {
925
+ "subtype": "ATTACK",
926
+ "from": {
927
+ "id": 21,
928
+ "card_id": "FP1_028",
929
+ "player_id": 1
930
+ },
931
+ "to": {
932
+ "id": 71,
933
+ "card_id": "CS2_051",
934
+ "player_id": 2
935
+ }
936
+ }
937
+ ],
938
+ [
939
+ "damaged",
940
+ {
941
+ "id": 71,
942
+ "card_id": "CS2_051",
943
+ "player_id": 2,
944
+ "amount": 2
945
+ }
946
+ ],
947
+ [
948
+ "card_destroyed",
949
+ {
950
+ "player_id": 2,
951
+ "id": 71,
952
+ "card_id": "CS2_051"
953
+ }
954
+ ]
955
+ ]
956
+ },
957
+ {
958
+ "number": 7,
959
+ "player": "ALzard",
960
+ "timestamp": 1418491292,
961
+ "events": [
962
+ [
963
+ "card_drawn",
964
+ {
965
+ "player_id": 2,
966
+ "id": 65,
967
+ "card_id": ""
968
+ }
969
+ ],
970
+ [
971
+ "card_played",
972
+ {
973
+ "player_id": 2,
974
+ "id": 67,
975
+ "card_id": "EX1_258"
976
+ }
977
+ ]
978
+ ]
979
+ },
980
+ {
981
+ "number": 8,
982
+ "player": "siuying",
983
+ "timestamp": 1418491321,
984
+ "events": [
985
+ [
986
+ "card_drawn",
987
+ {
988
+ "player_id": 1,
989
+ "id": 27,
990
+ "card_id": "GVG_096"
991
+ }
992
+ ],
993
+ [
994
+ "card_played",
995
+ {
996
+ "player_id": 1,
997
+ "id": 27,
998
+ "card_id": "GVG_096"
999
+ }
1000
+ ],
1001
+ [
1002
+ "action_start",
1003
+ {
1004
+ "subtype": "ATTACK",
1005
+ "from": {
1006
+ "id": 11,
1007
+ "card_id": "FP1_031",
1008
+ "player_id": 1
1009
+ },
1010
+ "to": {
1011
+ "id": 36,
1012
+ "card_id": "HERO_02",
1013
+ "player_id": 2
1014
+ }
1015
+ }
1016
+ ],
1017
+ [
1018
+ "damaged",
1019
+ {
1020
+ "id": 36,
1021
+ "card_id": "HERO_02",
1022
+ "player_id": 2,
1023
+ "amount": 3
1024
+ }
1025
+ ],
1026
+ [
1027
+ "action_start",
1028
+ {
1029
+ "subtype": "ATTACK",
1030
+ "from": {
1031
+ "id": 21,
1032
+ "card_id": "FP1_028",
1033
+ "player_id": 1
1034
+ },
1035
+ "to": {
1036
+ "id": 36,
1037
+ "card_id": "HERO_02",
1038
+ "player_id": 2
1039
+ }
1040
+ }
1041
+ ],
1042
+ [
1043
+ "damaged",
1044
+ {
1045
+ "id": 36,
1046
+ "card_id": "HERO_02",
1047
+ "player_id": 2,
1048
+ "amount": 6
1049
+ }
1050
+ ]
1051
+ ]
1052
+ },
1053
+ {
1054
+ "number": 9,
1055
+ "player": "ALzard",
1056
+ "timestamp": 1418491335,
1057
+ "events": [
1058
+ [
1059
+ "card_drawn",
1060
+ {
1061
+ "player_id": 2,
1062
+ "id": 44,
1063
+ "card_id": ""
1064
+ }
1065
+ ],
1066
+ [
1067
+ "open_card",
1068
+ {
1069
+ "id": 73,
1070
+ "card_id": "EX1_tk11"
1071
+ }
1072
+ ],
1073
+ [
1074
+ "open_card",
1075
+ {
1076
+ "id": 74,
1077
+ "card_id": "EX1_tk11"
1078
+ }
1079
+ ],
1080
+ [
1081
+ "card_played",
1082
+ {
1083
+ "player_id": 2,
1084
+ "id": 47,
1085
+ "card_id": "EX1_248"
1086
+ }
1087
+ ],
1088
+ [
1089
+ "card_put_in_play",
1090
+ {
1091
+ "player_id": 2,
1092
+ "id": 73,
1093
+ "card_id": "EX1_tk11"
1094
+ }
1095
+ ],
1096
+ [
1097
+ "card_put_in_play",
1098
+ {
1099
+ "player_id": 2,
1100
+ "id": 74,
1101
+ "card_id": "EX1_tk11"
1102
+ }
1103
+ ],
1104
+ [
1105
+ "card_discarded",
1106
+ {
1107
+ "player_id": 2,
1108
+ "id": 47,
1109
+ "card_id": "EX1_248"
1110
+ }
1111
+ ],
1112
+ [
1113
+ "card_played",
1114
+ {
1115
+ "player_id": 2,
1116
+ "id": 59,
1117
+ "card_id": "EX1_565"
1118
+ }
1119
+ ],
1120
+ [
1121
+ "action_start",
1122
+ {
1123
+ "subtype": "ATTACK",
1124
+ "from": {
1125
+ "id": 69,
1126
+ "card_id": "NEW1_009",
1127
+ "player_id": 2
1128
+ },
1129
+ "to": {
1130
+ "id": 11,
1131
+ "card_id": "FP1_031",
1132
+ "player_id": 1
1133
+ }
1134
+ }
1135
+ ],
1136
+ [
1137
+ "damaged",
1138
+ {
1139
+ "id": 11,
1140
+ "card_id": "FP1_031",
1141
+ "player_id": 1,
1142
+ "amount": 2
1143
+ }
1144
+ ],
1145
+ [
1146
+ "damaged",
1147
+ {
1148
+ "id": 69,
1149
+ "card_id": "NEW1_009",
1150
+ "player_id": 2,
1151
+ "amount": 1
1152
+ }
1153
+ ],
1154
+ [
1155
+ "action_start",
1156
+ {
1157
+ "subtype": "ATTACK",
1158
+ "from": {
1159
+ "id": 67,
1160
+ "card_id": "EX1_258",
1161
+ "player_id": 2
1162
+ },
1163
+ "to": {
1164
+ "id": 11,
1165
+ "card_id": "FP1_031",
1166
+ "player_id": 1
1167
+ }
1168
+ }
1169
+ ],
1170
+ [
1171
+ "damaged",
1172
+ {
1173
+ "id": 11,
1174
+ "card_id": "FP1_031",
1175
+ "player_id": 1,
1176
+ "amount": 7
1177
+ }
1178
+ ],
1179
+ [
1180
+ "damaged",
1181
+ {
1182
+ "id": 67,
1183
+ "card_id": "EX1_258",
1184
+ "player_id": 2,
1185
+ "amount": 1
1186
+ }
1187
+ ],
1188
+ [
1189
+ "card_destroyed",
1190
+ {
1191
+ "player_id": 1,
1192
+ "id": 11,
1193
+ "card_id": "FP1_031"
1194
+ }
1195
+ ]
1196
+ ]
1197
+ },
1198
+ {
1199
+ "number": 10,
1200
+ "player": "siuying",
1201
+ "timestamp": 1418491363,
1202
+ "events": [
1203
+ [
1204
+ "card_drawn",
1205
+ {
1206
+ "player_id": 1,
1207
+ "id": 17,
1208
+ "card_id": "GVG_096"
1209
+ }
1210
+ ],
1211
+ [
1212
+ "card_played",
1213
+ {
1214
+ "player_id": 1,
1215
+ "id": 8,
1216
+ "card_id": "FP1_012"
1217
+ }
1218
+ ],
1219
+ [
1220
+ "action_start",
1221
+ {
1222
+ "subtype": "ATTACK",
1223
+ "from": {
1224
+ "id": 21,
1225
+ "card_id": "FP1_028",
1226
+ "player_id": 1
1227
+ },
1228
+ "to": {
1229
+ "id": 73,
1230
+ "card_id": "EX1_tk11",
1231
+ "player_id": 2
1232
+ }
1233
+ }
1234
+ ],
1235
+ [
1236
+ "damaged",
1237
+ {
1238
+ "id": 73,
1239
+ "card_id": "EX1_tk11",
1240
+ "player_id": 2,
1241
+ "amount": 4
1242
+ }
1243
+ ],
1244
+ [
1245
+ "damaged",
1246
+ {
1247
+ "id": 21,
1248
+ "card_id": "FP1_028",
1249
+ "player_id": 1,
1250
+ "amount": 2
1251
+ }
1252
+ ],
1253
+ [
1254
+ "card_destroyed",
1255
+ {
1256
+ "player_id": 2,
1257
+ "id": 73,
1258
+ "card_id": "EX1_tk11"
1259
+ }
1260
+ ],
1261
+ [
1262
+ "action_start",
1263
+ {
1264
+ "subtype": "ATTACK",
1265
+ "from": {
1266
+ "id": 27,
1267
+ "card_id": "GVG_096",
1268
+ "player_id": 1
1269
+ },
1270
+ "to": {
1271
+ "id": 74,
1272
+ "card_id": "EX1_tk11",
1273
+ "player_id": 2
1274
+ }
1275
+ }
1276
+ ],
1277
+ [
1278
+ "damaged",
1279
+ {
1280
+ "id": 74,
1281
+ "card_id": "EX1_tk11",
1282
+ "player_id": 2,
1283
+ "amount": 4
1284
+ }
1285
+ ],
1286
+ [
1287
+ "damaged",
1288
+ {
1289
+ "id": 27,
1290
+ "card_id": "GVG_096",
1291
+ "player_id": 1,
1292
+ "amount": 2
1293
+ }
1294
+ ],
1295
+ [
1296
+ "card_destroyed",
1297
+ {
1298
+ "player_id": 2,
1299
+ "id": 74,
1300
+ "card_id": "EX1_tk11"
1301
+ }
1302
+ ]
1303
+ ]
1304
+ },
1305
+ {
1306
+ "number": 11,
1307
+ "player": "ALzard",
1308
+ "timestamp": 1418491386,
1309
+ "events": [
1310
+ [
1311
+ "card_drawn",
1312
+ {
1313
+ "player_id": 2,
1314
+ "id": 43,
1315
+ "card_id": ""
1316
+ }
1317
+ ],
1318
+ [
1319
+ "open_card",
1320
+ {
1321
+ "id": 77,
1322
+ "card_id": "CS2_051"
1323
+ }
1324
+ ],
1325
+ [
1326
+ "card_put_in_play",
1327
+ {
1328
+ "player_id": 2,
1329
+ "id": 77,
1330
+ "card_id": "CS2_051"
1331
+ }
1332
+ ],
1333
+ [
1334
+ "action_start",
1335
+ {
1336
+ "subtype": "ATTACK",
1337
+ "from": {
1338
+ "id": 67,
1339
+ "card_id": "EX1_258",
1340
+ "player_id": 2
1341
+ },
1342
+ "to": {
1343
+ "id": 8,
1344
+ "card_id": "FP1_012",
1345
+ "player_id": 1
1346
+ }
1347
+ }
1348
+ ],
1349
+ [
1350
+ "damaged",
1351
+ {
1352
+ "id": 8,
1353
+ "card_id": "FP1_012",
1354
+ "player_id": 1,
1355
+ "amount": 5
1356
+ }
1357
+ ],
1358
+ [
1359
+ "damaged",
1360
+ {
1361
+ "id": 67,
1362
+ "card_id": "EX1_258",
1363
+ "player_id": 2,
1364
+ "amount": 3
1365
+ }
1366
+ ],
1367
+ [
1368
+ "open_card",
1369
+ {
1370
+ "id": 78,
1371
+ "card_id": "FP1_012t"
1372
+ }
1373
+ ],
1374
+ [
1375
+ "card_destroyed",
1376
+ {
1377
+ "player_id": 1,
1378
+ "id": 8,
1379
+ "card_id": "FP1_012"
1380
+ }
1381
+ ],
1382
+ [
1383
+ "card_put_in_play",
1384
+ {
1385
+ "player_id": 1,
1386
+ "id": 78,
1387
+ "card_id": "FP1_012t"
1388
+ }
1389
+ ],
1390
+ [
1391
+ "action_start",
1392
+ {
1393
+ "subtype": "ATTACK",
1394
+ "from": {
1395
+ "id": 69,
1396
+ "card_id": "NEW1_009",
1397
+ "player_id": 2
1398
+ },
1399
+ "to": {
1400
+ "id": 78,
1401
+ "card_id": "FP1_012t",
1402
+ "player_id": 1
1403
+ }
1404
+ }
1405
+ ],
1406
+ [
1407
+ "damaged",
1408
+ {
1409
+ "id": 78,
1410
+ "card_id": "FP1_012t",
1411
+ "player_id": 1,
1412
+ "amount": 2
1413
+ }
1414
+ ],
1415
+ [
1416
+ "damaged",
1417
+ {
1418
+ "id": 69,
1419
+ "card_id": "NEW1_009",
1420
+ "player_id": 2,
1421
+ "amount": 1
1422
+ }
1423
+ ],
1424
+ [
1425
+ "card_destroyed",
1426
+ {
1427
+ "player_id": 1,
1428
+ "id": 78,
1429
+ "card_id": "FP1_012t"
1430
+ }
1431
+ ],
1432
+ [
1433
+ "card_target",
1434
+ {
1435
+ "id": 43,
1436
+ "card_id": "",
1437
+ "player_id": 2,
1438
+ "target": 21
1439
+ }
1440
+ ],
1441
+ [
1442
+ "damaged",
1443
+ {
1444
+ "id": 21,
1445
+ "card_id": "FP1_028",
1446
+ "player_id": 1,
1447
+ "amount": 5
1448
+ }
1449
+ ],
1450
+ [
1451
+ "card_played",
1452
+ {
1453
+ "player_id": 2,
1454
+ "id": 43,
1455
+ "card_id": "EX1_238"
1456
+ }
1457
+ ],
1458
+ [
1459
+ "damaged",
1460
+ {
1461
+ "id": 67,
1462
+ "card_id": "EX1_258",
1463
+ "player_id": 2,
1464
+ "amount": 2
1465
+ }
1466
+ ]
1467
+ ]
1468
+ },
1469
+ {
1470
+ "number": 12,
1471
+ "player": "siuying",
1472
+ "timestamp": 1418491447,
1473
+ "events": [
1474
+ [
1475
+ "card_discarded",
1476
+ {
1477
+ "player_id": 2,
1478
+ "id": 43,
1479
+ "card_id": "EX1_238"
1480
+ }
1481
+ ],
1482
+ [
1483
+ "card_destroyed",
1484
+ {
1485
+ "player_id": 1,
1486
+ "id": 21,
1487
+ "card_id": "FP1_028"
1488
+ }
1489
+ ],
1490
+ [
1491
+ "card_setaside",
1492
+ {
1493
+ "player_id": 1,
1494
+ "id": 28,
1495
+ "card_id": "EX1_611"
1496
+ }
1497
+ ],
1498
+ [
1499
+ "card_drawn",
1500
+ {
1501
+ "player_id": 1,
1502
+ "id": 28,
1503
+ "card_id": "EX1_611"
1504
+ }
1505
+ ],
1506
+ [
1507
+ "card_played",
1508
+ {
1509
+ "player_id": 1,
1510
+ "id": 17,
1511
+ "card_id": "GVG_096"
1512
+ }
1513
+ ],
1514
+ [
1515
+ "card_played",
1516
+ {
1517
+ "player_id": 1,
1518
+ "id": 18,
1519
+ "card_id": "GVG_026"
1520
+ }
1521
+ ],
1522
+ [
1523
+ "open_card",
1524
+ {
1525
+ "id": 79,
1526
+ "card_id": "EX1_012"
1527
+ }
1528
+ ],
1529
+ [
1530
+ "open_card",
1531
+ {
1532
+ "id": 80,
1533
+ "card_id": "GVG_023"
1534
+ }
1535
+ ],
1536
+ [
1537
+ "card_put_in_play",
1538
+ {
1539
+ "player_id": 1,
1540
+ "id": 79,
1541
+ "card_id": "EX1_012"
1542
+ }
1543
+ ],
1544
+ [
1545
+ "card_put_in_play",
1546
+ {
1547
+ "player_id": 1,
1548
+ "id": 80,
1549
+ "card_id": "GVG_023"
1550
+ }
1551
+ ],
1552
+ [
1553
+ "card_discarded",
1554
+ {
1555
+ "player_id": 1,
1556
+ "id": 18,
1557
+ "card_id": "GVG_026"
1558
+ }
1559
+ ],
1560
+ [
1561
+ "action_start",
1562
+ {
1563
+ "subtype": "ATTACK",
1564
+ "from": {
1565
+ "id": 27,
1566
+ "card_id": "GVG_096",
1567
+ "player_id": 1
1568
+ },
1569
+ "to": {
1570
+ "id": 77,
1571
+ "card_id": "CS2_051",
1572
+ "player_id": 2
1573
+ }
1574
+ }
1575
+ ],
1576
+ [
1577
+ "damaged",
1578
+ {
1579
+ "id": 77,
1580
+ "card_id": "CS2_051",
1581
+ "player_id": 2,
1582
+ "amount": 4
1583
+ }
1584
+ ],
1585
+ [
1586
+ "card_destroyed",
1587
+ {
1588
+ "player_id": 2,
1589
+ "id": 77,
1590
+ "card_id": "CS2_051"
1591
+ }
1592
+ ]
1593
+ ]
1594
+ },
1595
+ {
1596
+ "number": 13,
1597
+ "player": "ALzard",
1598
+ "timestamp": 1418491468,
1599
+ "events": [
1600
+ [
1601
+ "card_drawn",
1602
+ {
1603
+ "player_id": 2,
1604
+ "id": 64,
1605
+ "card_id": ""
1606
+ }
1607
+ ],
1608
+ [
1609
+ "card_played",
1610
+ {
1611
+ "player_id": 2,
1612
+ "id": 44,
1613
+ "card_id": "FP1_007"
1614
+ }
1615
+ ],
1616
+ [
1617
+ "card_played",
1618
+ {
1619
+ "player_id": 2,
1620
+ "id": 57,
1621
+ "card_id": "EX1_093"
1622
+ }
1623
+ ],
1624
+ [
1625
+ "action_start",
1626
+ {
1627
+ "subtype": "ATTACK",
1628
+ "from": {
1629
+ "id": 69,
1630
+ "card_id": "NEW1_009",
1631
+ "player_id": 2
1632
+ },
1633
+ "to": {
1634
+ "id": 80,
1635
+ "card_id": "GVG_023",
1636
+ "player_id": 1
1637
+ }
1638
+ }
1639
+ ],
1640
+ [
1641
+ "damaged",
1642
+ {
1643
+ "id": 80,
1644
+ "card_id": "GVG_023",
1645
+ "player_id": 1,
1646
+ "amount": 3
1647
+ }
1648
+ ],
1649
+ [
1650
+ "damaged",
1651
+ {
1652
+ "id": 69,
1653
+ "card_id": "NEW1_009",
1654
+ "player_id": 2,
1655
+ "amount": 3
1656
+ }
1657
+ ],
1658
+ [
1659
+ "card_destroyed",
1660
+ {
1661
+ "player_id": 2,
1662
+ "id": 69,
1663
+ "card_id": "NEW1_009"
1664
+ }
1665
+ ],
1666
+ [
1667
+ "card_destroyed",
1668
+ {
1669
+ "player_id": 1,
1670
+ "id": 80,
1671
+ "card_id": "GVG_023"
1672
+ }
1673
+ ],
1674
+ [
1675
+ "action_start",
1676
+ {
1677
+ "subtype": "ATTACK",
1678
+ "from": {
1679
+ "id": 67,
1680
+ "card_id": "EX1_258",
1681
+ "player_id": 2
1682
+ },
1683
+ "to": {
1684
+ "id": 17,
1685
+ "card_id": "GVG_096",
1686
+ "player_id": 1
1687
+ }
1688
+ }
1689
+ ],
1690
+ [
1691
+ "damaged",
1692
+ {
1693
+ "id": 17,
1694
+ "card_id": "GVG_096",
1695
+ "player_id": 1,
1696
+ "amount": 6
1697
+ }
1698
+ ],
1699
+ [
1700
+ "damaged",
1701
+ {
1702
+ "id": 67,
1703
+ "card_id": "EX1_258",
1704
+ "player_id": 2,
1705
+ "amount": 6
1706
+ }
1707
+ ],
1708
+ [
1709
+ "open_card",
1710
+ {
1711
+ "id": 84,
1712
+ "card_id": "GVG_064"
1713
+ }
1714
+ ],
1715
+ [
1716
+ "card_destroyed",
1717
+ {
1718
+ "player_id": 2,
1719
+ "id": 67,
1720
+ "card_id": "EX1_258"
1721
+ }
1722
+ ],
1723
+ [
1724
+ "card_destroyed",
1725
+ {
1726
+ "player_id": 1,
1727
+ "id": 17,
1728
+ "card_id": "GVG_096"
1729
+ }
1730
+ ],
1731
+ [
1732
+ "card_put_in_play",
1733
+ {
1734
+ "player_id": 1,
1735
+ "id": 84,
1736
+ "card_id": "GVG_064"
1737
+ }
1738
+ ]
1739
+ ]
1740
+ },
1741
+ {
1742
+ "number": 14,
1743
+ "player": "siuying",
1744
+ "timestamp": 1418491507,
1745
+ "events": [
1746
+ [
1747
+ "card_drawn",
1748
+ {
1749
+ "player_id": 1,
1750
+ "id": 25,
1751
+ "card_id": "EX1_110"
1752
+ }
1753
+ ],
1754
+ [
1755
+ "action_start",
1756
+ {
1757
+ "subtype": "ATTACK",
1758
+ "from": {
1759
+ "id": 4,
1760
+ "card_id": "HERO_05",
1761
+ "player_id": 1
1762
+ },
1763
+ "to": {
1764
+ "id": 44,
1765
+ "card_id": "FP1_007",
1766
+ "player_id": 2
1767
+ }
1768
+ }
1769
+ ],
1770
+ [
1771
+ "damaged",
1772
+ {
1773
+ "id": 44,
1774
+ "card_id": "FP1_007",
1775
+ "player_id": 2,
1776
+ "amount": 3
1777
+ }
1778
+ ],
1779
+ [
1780
+ "damaged",
1781
+ {
1782
+ "id": 4,
1783
+ "card_id": "HERO_05",
1784
+ "player_id": 1,
1785
+ "amount": 1
1786
+ }
1787
+ ],
1788
+ [
1789
+ "damaged",
1790
+ {
1791
+ "id": 29,
1792
+ "card_id": "EX1_536",
1793
+ "player_id": 1,
1794
+ "amount": 1
1795
+ }
1796
+ ],
1797
+ [
1798
+ "open_card",
1799
+ {
1800
+ "id": 85,
1801
+ "card_id": "FP1_007t"
1802
+ }
1803
+ ],
1804
+ [
1805
+ "card_destroyed",
1806
+ {
1807
+ "player_id": 2,
1808
+ "id": 44,
1809
+ "card_id": "FP1_007"
1810
+ }
1811
+ ],
1812
+ [
1813
+ "card_put_in_play",
1814
+ {
1815
+ "player_id": 2,
1816
+ "id": 85,
1817
+ "card_id": "FP1_007t"
1818
+ }
1819
+ ],
1820
+ [
1821
+ "action_start",
1822
+ {
1823
+ "subtype": "ATTACK",
1824
+ "from": {
1825
+ "id": 84,
1826
+ "card_id": "GVG_064",
1827
+ "player_id": 1
1828
+ },
1829
+ "to": {
1830
+ "id": 59,
1831
+ "card_id": "EX1_565",
1832
+ "player_id": 2
1833
+ }
1834
+ }
1835
+ ],
1836
+ [
1837
+ "damaged",
1838
+ {
1839
+ "id": 59,
1840
+ "card_id": "EX1_565",
1841
+ "player_id": 2,
1842
+ "amount": 3
1843
+ }
1844
+ ],
1845
+ [
1846
+ "card_destroyed",
1847
+ {
1848
+ "player_id": 2,
1849
+ "id": 59,
1850
+ "card_id": "EX1_565"
1851
+ }
1852
+ ],
1853
+ [
1854
+ "card_played",
1855
+ {
1856
+ "player_id": 1,
1857
+ "id": 23,
1858
+ "card_id": "EX1_610"
1859
+ }
1860
+ ],
1861
+ [
1862
+ "action_start",
1863
+ {
1864
+ "subtype": "ATTACK",
1865
+ "from": {
1866
+ "id": 27,
1867
+ "card_id": "GVG_096",
1868
+ "player_id": 1
1869
+ },
1870
+ "to": {
1871
+ "id": 85,
1872
+ "card_id": "FP1_007t",
1873
+ "player_id": 2
1874
+ }
1875
+ }
1876
+ ],
1877
+ [
1878
+ "damaged",
1879
+ {
1880
+ "id": 85,
1881
+ "card_id": "FP1_007t",
1882
+ "player_id": 2,
1883
+ "amount": 4
1884
+ }
1885
+ ],
1886
+ [
1887
+ "damaged",
1888
+ {
1889
+ "id": 27,
1890
+ "card_id": "GVG_096",
1891
+ "player_id": 1,
1892
+ "amount": 6
1893
+ }
1894
+ ],
1895
+ [
1896
+ "open_card",
1897
+ {
1898
+ "id": 86,
1899
+ "card_id": "EX1_131"
1900
+ }
1901
+ ],
1902
+ [
1903
+ "card_destroyed",
1904
+ {
1905
+ "player_id": 1,
1906
+ "id": 27,
1907
+ "card_id": "GVG_096"
1908
+ }
1909
+ ],
1910
+ [
1911
+ "card_destroyed",
1912
+ {
1913
+ "player_id": 2,
1914
+ "id": 85,
1915
+ "card_id": "FP1_007t"
1916
+ }
1917
+ ],
1918
+ [
1919
+ "card_put_in_play",
1920
+ {
1921
+ "player_id": 1,
1922
+ "id": 86,
1923
+ "card_id": "EX1_131"
1924
+ }
1925
+ ],
1926
+ [
1927
+ "damaged",
1928
+ {
1929
+ "id": 36,
1930
+ "card_id": "HERO_02",
1931
+ "player_id": 2,
1932
+ "amount": 8
1933
+ }
1934
+ ],
1935
+ [
1936
+ "action_start",
1937
+ {
1938
+ "subtype": "ATTACK",
1939
+ "from": {
1940
+ "id": 79,
1941
+ "card_id": "EX1_012",
1942
+ "player_id": 1
1943
+ },
1944
+ "to": {
1945
+ "id": 57,
1946
+ "card_id": "EX1_093",
1947
+ "player_id": 2
1948
+ }
1949
+ }
1950
+ ],
1951
+ [
1952
+ "damaged",
1953
+ {
1954
+ "id": 57,
1955
+ "card_id": "EX1_093",
1956
+ "player_id": 2,
1957
+ "amount": 1
1958
+ }
1959
+ ],
1960
+ [
1961
+ "damaged",
1962
+ {
1963
+ "id": 79,
1964
+ "card_id": "EX1_012",
1965
+ "player_id": 1,
1966
+ "amount": 2
1967
+ }
1968
+ ],
1969
+ [
1970
+ "card_destroyed",
1971
+ {
1972
+ "player_id": 1,
1973
+ "id": 79,
1974
+ "card_id": "EX1_012"
1975
+ }
1976
+ ],
1977
+ [
1978
+ "card_drawn",
1979
+ {
1980
+ "player_id": 1,
1981
+ "id": 6,
1982
+ "card_id": "FP1_013"
1983
+ }
1984
+ ]
1985
+ ]
1986
+ },
1987
+ {
1988
+ "number": 15,
1989
+ "player": "ALzard",
1990
+ "timestamp": 1418491539,
1991
+ "events": [
1992
+ [
1993
+ "card_drawn",
1994
+ {
1995
+ "player_id": 2,
1996
+ "id": 66,
1997
+ "card_id": ""
1998
+ }
1999
+ ],
2000
+ [
2001
+ "open_card",
2002
+ {
2003
+ "id": 87,
2004
+ "card_id": "NEW1_009"
2005
+ }
2006
+ ],
2007
+ [
2008
+ "card_put_in_play",
2009
+ {
2010
+ "player_id": 2,
2011
+ "id": 87,
2012
+ "card_id": "NEW1_009"
2013
+ }
2014
+ ],
2015
+ [
2016
+ "action_start",
2017
+ {
2018
+ "subtype": "ATTACK",
2019
+ "from": {
2020
+ "id": 57,
2021
+ "card_id": "EX1_093",
2022
+ "player_id": 2
2023
+ },
2024
+ "to": {
2025
+ "id": 84,
2026
+ "card_id": "GVG_064",
2027
+ "player_id": 1
2028
+ }
2029
+ }
2030
+ ],
2031
+ [
2032
+ "damaged",
2033
+ {
2034
+ "id": 84,
2035
+ "card_id": "GVG_064",
2036
+ "player_id": 1,
2037
+ "amount": 2
2038
+ }
2039
+ ],
2040
+ [
2041
+ "damaged",
2042
+ {
2043
+ "id": 57,
2044
+ "card_id": "EX1_093",
2045
+ "player_id": 2,
2046
+ "amount": 4
2047
+ }
2048
+ ],
2049
+ [
2050
+ "card_destroyed",
2051
+ {
2052
+ "player_id": 2,
2053
+ "id": 57,
2054
+ "card_id": "EX1_093"
2055
+ }
2056
+ ],
2057
+ [
2058
+ "card_destroyed",
2059
+ {
2060
+ "player_id": 1,
2061
+ "id": 84,
2062
+ "card_id": "GVG_064"
2063
+ }
2064
+ ],
2065
+ [
2066
+ "card_target",
2067
+ {
2068
+ "id": 66,
2069
+ "card_id": "",
2070
+ "player_id": 2,
2071
+ "target": 86
2072
+ }
2073
+ ],
2074
+ [
2075
+ "damaged",
2076
+ {
2077
+ "id": 86,
2078
+ "card_id": "EX1_131",
2079
+ "player_id": 1,
2080
+ "amount": 3
2081
+ }
2082
+ ],
2083
+ [
2084
+ "card_played",
2085
+ {
2086
+ "player_id": 2,
2087
+ "id": 66,
2088
+ "card_id": "CS2_042"
2089
+ }
2090
+ ],
2091
+ [
2092
+ "card_destroyed",
2093
+ {
2094
+ "player_id": 1,
2095
+ "id": 86,
2096
+ "card_id": "EX1_131"
2097
+ }
2098
+ ]
2099
+ ]
2100
+ },
2101
+ {
2102
+ "number": 16,
2103
+ "player": "siuying",
2104
+ "timestamp": 1418491563,
2105
+ "events": [
2106
+ [
2107
+ "card_drawn",
2108
+ {
2109
+ "player_id": 1,
2110
+ "id": 24,
2111
+ "card_id": "EX1_536"
2112
+ }
2113
+ ],
2114
+ [
2115
+ "card_played",
2116
+ {
2117
+ "player_id": 1,
2118
+ "id": 25,
2119
+ "card_id": "EX1_110"
2120
+ }
2121
+ ],
2122
+ [
2123
+ "card_played",
2124
+ {
2125
+ "player_id": 1,
2126
+ "id": 28,
2127
+ "card_id": "EX1_611"
2128
+ }
2129
+ ]
2130
+ ]
2131
+ },
2132
+ {
2133
+ "number": 17,
2134
+ "player": "ALzard",
2135
+ "timestamp": 1418491577,
2136
+ "events": [
2137
+ [
2138
+ "card_drawn",
2139
+ {
2140
+ "player_id": 2,
2141
+ "id": 50,
2142
+ "card_id": ""
2143
+ }
2144
+ ],
2145
+ [
2146
+ "card_played",
2147
+ {
2148
+ "player_id": 2,
2149
+ "id": 50,
2150
+ "card_id": "FP1_002"
2151
+ }
2152
+ ],
2153
+ [
2154
+ "card_played",
2155
+ {
2156
+ "player_id": 2,
2157
+ "id": 64,
2158
+ "card_id": "EX1_565"
2159
+ }
2160
+ ],
2161
+ [
2162
+ "action_start",
2163
+ {
2164
+ "subtype": "ATTACK",
2165
+ "from": {
2166
+ "id": 87,
2167
+ "card_id": "NEW1_009",
2168
+ "player_id": 2
2169
+ },
2170
+ "to": {
2171
+ "id": 4,
2172
+ "card_id": "HERO_05",
2173
+ "player_id": 1
2174
+ }
2175
+ }
2176
+ ],
2177
+ [
2178
+ "damaged",
2179
+ {
2180
+ "id": 36,
2181
+ "card_id": "HERO_02",
2182
+ "player_id": 2,
2183
+ "amount": 10
2184
+ }
2185
+ ],
2186
+ [
2187
+ "damaged",
2188
+ {
2189
+ "id": 87,
2190
+ "card_id": "NEW1_009",
2191
+ "player_id": 2,
2192
+ "amount": 2
2193
+ }
2194
+ ],
2195
+ [
2196
+ "damaged",
2197
+ {
2198
+ "id": 66,
2199
+ "card_id": "CS2_042",
2200
+ "player_id": 2,
2201
+ "amount": 2
2202
+ }
2203
+ ],
2204
+ [
2205
+ "damaged",
2206
+ {
2207
+ "id": 50,
2208
+ "card_id": "FP1_002",
2209
+ "player_id": 2,
2210
+ "amount": 2
2211
+ }
2212
+ ],
2213
+ [
2214
+ "damaged",
2215
+ {
2216
+ "id": 64,
2217
+ "card_id": "EX1_565",
2218
+ "player_id": 2,
2219
+ "amount": 2
2220
+ }
2221
+ ],
2222
+ [
2223
+ "open_card",
2224
+ {
2225
+ "id": 90,
2226
+ "card_id": "EX1_536e"
2227
+ }
2228
+ ],
2229
+ [
2230
+ "attached",
2231
+ {
2232
+ "id": 90,
2233
+ "target": 29
2234
+ }
2235
+ ],
2236
+ [
2237
+ "open_card",
2238
+ {
2239
+ "id": 92,
2240
+ "card_id": "FP1_002t"
2241
+ }
2242
+ ],
2243
+ [
2244
+ "open_card",
2245
+ {
2246
+ "id": 93,
2247
+ "card_id": "FP1_002t"
2248
+ }
2249
+ ],
2250
+ [
2251
+ "card_destroyed",
2252
+ {
2253
+ "player_id": 2,
2254
+ "id": 87,
2255
+ "card_id": "NEW1_009"
2256
+ }
2257
+ ],
2258
+ [
2259
+ "card_destroyed",
2260
+ {
2261
+ "player_id": 2,
2262
+ "id": 50,
2263
+ "card_id": "FP1_002"
2264
+ }
2265
+ ],
2266
+ [
2267
+ "card_put_in_play",
2268
+ {
2269
+ "player_id": 2,
2270
+ "id": 92,
2271
+ "card_id": "FP1_002t"
2272
+ }
2273
+ ],
2274
+ [
2275
+ "card_put_in_play",
2276
+ {
2277
+ "player_id": 2,
2278
+ "id": 93,
2279
+ "card_id": "FP1_002t"
2280
+ }
2281
+ ],
2282
+ [
2283
+ "open_card",
2284
+ {
2285
+ "id": 95,
2286
+ "card_id": "CS2_052"
2287
+ }
2288
+ ],
2289
+ [
2290
+ "card_put_in_play",
2291
+ {
2292
+ "player_id": 2,
2293
+ "id": 95,
2294
+ "card_id": "CS2_052"
2295
+ }
2296
+ ],
2297
+ [
2298
+ "action_start",
2299
+ {
2300
+ "subtype": "ATTACK",
2301
+ "from": {
2302
+ "id": 66,
2303
+ "card_id": "CS2_042",
2304
+ "player_id": 2
2305
+ },
2306
+ "to": {
2307
+ "id": 4,
2308
+ "card_id": "HERO_05",
2309
+ "player_id": 1
2310
+ }
2311
+ }
2312
+ ],
2313
+ [
2314
+ "card_returned",
2315
+ {
2316
+ "player_id": 2,
2317
+ "id": 66,
2318
+ "card_id": "CS2_042"
2319
+ }
2320
+ ]
2321
+ ]
2322
+ },
2323
+ {
2324
+ "number": 18,
2325
+ "player": "siuying",
2326
+ "timestamp": 1418491624,
2327
+ "events": [
2328
+ [
2329
+ "card_drawn",
2330
+ {
2331
+ "player_id": 1,
2332
+ "id": 33,
2333
+ "card_id": "FP1_004"
2334
+ }
2335
+ ],
2336
+ [
2337
+ "card_played",
2338
+ {
2339
+ "player_id": 1,
2340
+ "id": 6,
2341
+ "card_id": "FP1_013"
2342
+ }
2343
+ ],
2344
+ [
2345
+ "action_start",
2346
+ {
2347
+ "subtype": "ATTACK",
2348
+ "from": {
2349
+ "id": 4,
2350
+ "card_id": "HERO_05",
2351
+ "player_id": 1
2352
+ },
2353
+ "to": {
2354
+ "id": 64,
2355
+ "card_id": "EX1_565",
2356
+ "player_id": 2
2357
+ }
2358
+ }
2359
+ ],
2360
+ [
2361
+ "damaged",
2362
+ {
2363
+ "id": 64,
2364
+ "card_id": "EX1_565",
2365
+ "player_id": 2,
2366
+ "amount": 5
2367
+ }
2368
+ ],
2369
+ [
2370
+ "damaged",
2371
+ {
2372
+ "id": 29,
2373
+ "card_id": "EX1_536",
2374
+ "player_id": 1,
2375
+ "amount": 2
2376
+ }
2377
+ ],
2378
+ [
2379
+ "action_start",
2380
+ {
2381
+ "subtype": "ATTACK",
2382
+ "from": {
2383
+ "id": 25,
2384
+ "card_id": "EX1_110",
2385
+ "player_id": 1
2386
+ },
2387
+ "to": {
2388
+ "id": 36,
2389
+ "card_id": "HERO_02",
2390
+ "player_id": 2
2391
+ }
2392
+ }
2393
+ ],
2394
+ [
2395
+ "damaged",
2396
+ {
2397
+ "id": 36,
2398
+ "card_id": "HERO_02",
2399
+ "player_id": 2,
2400
+ "amount": 14
2401
+ }
2402
+ ],
2403
+ [
2404
+ "card_destroyed",
2405
+ {
2406
+ "player_id": 2,
2407
+ "id": 64,
2408
+ "card_id": "EX1_565"
2409
+ }
2410
+ ]
2411
+ ]
2412
+ },
2413
+ {
2414
+ "number": 19,
2415
+ "player": "ALzard",
2416
+ "timestamp": 1418491636,
2417
+ "events": [
2418
+ [
2419
+ "card_drawn",
2420
+ {
2421
+ "player_id": 2,
2422
+ "id": 54,
2423
+ "card_id": ""
2424
+ }
2425
+ ]
2426
+ ]
2427
+ }
2428
+ ],
2429
+ "results": {
2430
+ "ALzard": "LOST",
2431
+ "siuying": "WON"
2432
+ }
2433
+ }