forked from iteratedecks/fansiteSubmission
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathfansiteSimulator.py
More file actions
123 lines (87 loc) · 3.79 KB
/
fansiteSimulator.py
File metadata and controls
123 lines (87 loc) · 3.79 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
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
91
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
#import hashlib
#import httplib
#import json
#import os
import re
import subprocess
#import time
class FansiteSimulator(object):
name = "default"
executable = None
def __init__(self):
self.version = None
def getVersion(self):
if(self.version is None):
self.version = self.loadVersion()
return self.version
def simulate(self, deck, args):
playerHash = deck["attackingDeck"]
type = deck["type"]
commandArgs = [self.executable]
attackingDeckCards = None
if("attackingDeckCards" in deck):
attackingDeckCards = deck["attackingDeckCards"]
self.addAttackingDeck(commandArgs, deck["attackingDeck"], attackingDeckCards)
if(type == "raid"):
self.addRaid(commandArgs, deck["raidId"])
elif(type == "mission"):
self.addMission(commandArgs, deck["missionId"])
elif(type == "quest"):
self.addQuest(commandArgs, deck["questId"])
elif(type == "custom"):
self.addCustom(commandArgs, deck["defendingDeck"])
elif(type == "ach"):
self.addAchievement(commandArgs, deck["achId"], deck["missionId"])
else:
print("unknown deck type: " + type)
return
if("battlegroundId" in deck):
self.addBattlegroundId(commandArgs, deck["battlegroundId"])
if(deck.get("isExactOrdered")):
self.addExactOrdered(commandArgs)
elif(deck.get("isOrdered")):
self.addOrdered(commandArgs)
if(deck.get("isDefendingExactOrdered")):
self.addDefendingExactOrdered(commandArgs)
elif(deck.get("isDefendingOrdered")):
self.addDefendingOrdered(commandArgs)
if("isSurge" in deck and deck["isSurge"]):
self.addSurge(commandArgs)
if("isDelayed" in deck and deck["isDelayed"]):
self.addDelayed(commandArgs)
self.addExtraArgs(commandArgs, args)
print("Running " + " ".join('"%s"' % arg if " " in arg else arg for arg in commandArgs))
result = subprocess.check_output(commandArgs)
return self.processResults(result)
def processResults(self, results):
raise NotImplementedError, "Process Results from Output"
def loadVersion(self):
raise NotImplementedError, "Version"
def addAchievement(self, commandArgs, achievementId, missionId):
raise NotImplementedError, "Achievement"
def addAttackingDeck(self, commandArgs, attackingDeck, attackingDeckCards):
raise NotImplementedError, "Attacking Deck"
def addBattlegroundId(self, commandArgs, battlegroundId):
raise NotImplementedError, "Battlegroud Effect"
def addCustom(self, commandArgs, custom):
raise NotImplementedError, "Custom Deck"
def addDefendingExactOrdered(self, commandArgs):
raise NotImplementedError, "Defending Exact Order (ignore 3-card hand rule)"
def addDefendingOrdered(self, commandArgs):
raise NotImplementedError, "Defending Ordered Deck (honor 3-card hand rule)"
def addDelayed(self, commandArgs):
raise NotImplementedError, "Delayed (tournament mode)"
def addExactOrdered(self, commandArgs):
raise NotImplementedError, "Exact Order (ignore 3-card hand rule)"
def addExtraArgs(self, commandArgs, args):
pass
def addMission(self, commandArgs, missionId):
raise NotImplementedError, "Mission Deck"
def addOrdered(self, commandArgs):
raise NotImplementedError, "Ordered Deck (honor 3-card hand rule)"
def addQuest(self, commandArgs, questId):
raise NotImplementedError, "Quest Deck"
def addRaid(self, commandArgs, raidId):
raise NotImplementedError, "Raid Deck"
def addSurge(self, commandArgs):
raise NotImplementedError, "Surge"