now even stable with asyc events like chat or mail, etc
[shakeTheFidget.git] / quest.py
blobebaa0a4040ed49554fb75fc0fd6b6847bb7a70bf
1 from time import sleep
3 class QuestList():
4 def __init__(self, session):
5 self.session = session
6 self.quests = []
8 def __getattr__(self, name):
9 if(name == 'minDuration'):
10 cur = self.quests[0]
11 for q in self.quests[1:]:
12 if(q.duration < cur.duration):
13 cur = q
14 return cur.duration
16 def getBestByMoney(self, maxDuration = 1200):
17 cur = self.quests[0]
18 for q in self.quests[1:]:
19 if(q.silver/q.duration > cur.silver/cur.duration and q.duration <= maxDuration):
20 cur = q
21 if(q.duration <= maxDuration):
22 return cur
23 else:
24 return None
26 def getBestByExperience(self, maxDuration = 1200):
27 cur = self.quests[0]
28 for q in self.quests[1:]:
29 if(q.experience/q.duration > cur.experience/cur.duration and q.duration <= maxDuration):
30 cur = q
31 if(q.duration <= maxDuration):
32 return cur
33 else:
34 return None
36 def parse(self, data, result = None):
37 if(not result):
38 result = data[0:3]
39 data = data[3:]
41 data = data.split('/')
42 if(result == '010'):
43 for i in range(3):
44 quest = Quest(
45 self.session,
46 number = i+1,
47 duration = int(data[241 +i]),
48 silver = int(data[283 +i]),
49 experience = int(data[280 +i]))
50 self.quests.append(quest)
52 class Quest():
53 def __init__(self, session, number, duration = None, silver = None, experience = None):
54 self.session = session
55 self.number = number
56 self.duration = duration
57 self.silver = silver
58 self.experience = experience
60 #TODO debug output
61 def attend(self):
62 try:
63 print 'do quest.attend quest'
64 r107 = self.session.request('510%i' % (self.number))
65 #TODO parse
66 print 'done quest.attend quest'
68 sleep(self.duration)
70 print 'do quest.request fight'
71 r106 = self.session.request('010')
72 #TODO parse fight
73 print 'done quest.request fight'
75 except KeyboardInterrupt:
76 print 'do quest.abort'
77 r108 = self.session.request('511')
78 #TODO parse
79 print 'done quest.abort'
80 return 1
82 print 'do character.request'
83 r004 = self.session.request('004')
84 self.session.character.parse(r004)
85 print 'done character.request'
86 #self.session.character.silver
87 return 0
89 def score(self):
90 return float(self.experience) / float(self.duration)
92 def __repr__(self):
93 return '<Quest %i>' % (self.number)
95 def queryQuests(session):
96 data = session.request('010')
97 result = data[0:3]
98 data = data[3:].split('/')
99 quests = []
100 for i in range(3):
101 quest = Quest(
102 session,
103 number = i+1,
104 duration = int(data[241 +i]),
105 silver = int(data[283 +i]),
106 experience = int(data[280 +i]))
107 quests.append(quest)
108 return quests