Skip to content

Commit 84d116b

Browse files
committed
remake sqlitedao with battlemaster and cmdv2 affected
1 parent 8b33892 commit 84d116b

3 files changed

Lines changed: 561 additions & 362 deletions

File tree

kokkoro/modules/pcrclanbattle/clanbattle/battlemaster.py

Lines changed: 120 additions & 109 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ def get_config():
1010

1111
class BattleMaster(object):
1212
'''
13-
Different bits represent different damage kind:
13+
Different bits represent different damage kind:
1414
'''
1515
NORM = BattleDao.NORM # 0
1616
LAST = BattleDao.LAST # 1<<0
@@ -41,7 +41,7 @@ def damage_kind_to_string(src):
4141
SERVER_JP_NAME = ('jp', 'JP', 'Jp', '日', '日服', str(SERVER_JP))
4242
SERVER_TW_NAME = ('tw', 'TW', 'Tw', '台', '台服', str(SERVER_TW))
4343
SERVER_CN_NAME = ('cn', 'CN', 'Cn', '国', '国服', 'B', 'B服', str(SERVER_CN))
44-
44+
4545
def __init__(self, group):
4646
super().__init__()
4747
self.group = group
@@ -54,7 +54,7 @@ def __init__(self, group):
5454
def get_timezone_num(server):
5555
return 9 if BattleMaster.SERVER_JP == server else 8
5656

57-
57+
5858
@staticmethod
5959
def get_yyyymmdd(time, zone_num:int=8):
6060
'''
@@ -133,171 +133,181 @@ def get_server_code(server_name):
133133
return -1
134134

135135

136-
def get_battledao(self, cid, time):
137-
clan = self.get_clan(cid)
136+
def get_battledao(self, time):
137+
clan = self.get_clan()
138138
zone_num = self.get_timezone_num(clan['server'])
139139
yyyy, mm, _ = self.get_yyyymmdd(time, zone_num)
140-
return BattleDao(self.group, cid, yyyy, mm)
141-
142-
143-
def add_clan(self, cid, name, server):
144-
return self.clandao.add({'gid': self.group, 'cid': cid, 'name': name, 'server': server})
145-
def del_clan(self, cid):
146-
return self.clandao.delete(self.group, cid)
147-
def mod_clan(self, cid, name, server):
148-
return self.clandao.modify({'gid': self.group, 'cid': cid, 'name': name, 'server': server})
149-
def has_clan(self, cid):
150-
return True if self.clandao.find_one(self.group, cid) else False
151-
def get_clan(self, cid):
152-
return self.clandao.find_one(self.group, cid)
140+
return BattleDao(self.group, yyyy, mm)
141+
142+
143+
def add_clan(self, name, server):
144+
return self.clandao.add({'gid': self.group, 'name': name, 'server': server})
145+
def get_clan(self):
146+
return self.clandao.find_one(self.group)
147+
def has_clan(self):
148+
return True if self.clandao.find_one(self.group) else False
153149
def list_clan(self):
154-
return self.clandao.find_by_gid(self.group)
155-
156-
157-
def add_member(self, uid, alt, name, cid):
158-
return self.memberdao.add({'uid': uid, 'alt': alt, 'name': name, 'gid': self.group, 'cid': cid})
159-
def del_member(self, uid, alt):
160-
return self.memberdao.delete(uid, alt)
161-
def clear_member(self, cid=None):
162-
return self.memberdao.delete_by(gid=self.group, cid=cid)
163-
def mod_member(self, uid, alt, new_name, new_cid):
164-
return self.memberdao.modify({'uid': uid, 'alt': alt, 'name': new_name, 'gid': self.group, 'cid': new_cid})
165-
def has_member(self, uid, alt):
166-
mem = self.memberdao.find_one(uid, alt)
167-
return True if mem and mem['gid'] == self.group else False
168-
def get_member(self, uid, alt):
169-
mem = self.memberdao.find_one(uid, alt)
170-
return mem if mem and mem['gid'] == self.group else None
171-
def list_member(self, cid=None):
172-
return self.memberdao.find_by(gid=self.group, cid=cid)
150+
return [self.clandao.find_one(self.group)]
151+
def list_clan_by_uid(self, uid):
152+
return self.clandao.find_by_uid(uid)
153+
def mod_clan(self, name, server):
154+
return self.clandao.modify({'gid': self.group, 'name': name, 'server': server})
155+
def del_clan(self):
156+
return self.clandao.delete(self.group)
157+
158+
159+
def add_member(self, uid, name):
160+
return self.memberdao.add({'uid': uid, 'gid': self.group, 'name': name})
161+
def get_member(self, uid):
162+
mem = self.memberdao.find_one(uid, self.group)
163+
return mem if mem else None
164+
def has_member(self, uid):
165+
mem = self.memberdao.find_one(uid, self.group)
166+
return True if mem else False
167+
def list_member(self):
168+
return self.memberdao.find_by(gid=self.group)
173169
def list_account(self, uid):
174170
return self.memberdao.find_by(gid=self.group, uid=uid)
175-
176-
177-
def add_challenge(self, uid, alt, round_, boss, dmg, flag, time):
178-
mem = self.get_member(uid, alt)
171+
def mod_member(self, uid, new_name, new_sl, new_auth):
172+
return self.memberdao.modify(
173+
{
174+
'uid': uid,
175+
'gid': self.group,
176+
'name': new_name,
177+
'last_sl': new_sl,
178+
'authority_group': new_auth
179+
}
180+
)
181+
def del_member(self, uid):
182+
return self.memberdao.delete(uid, self.group)
183+
def clear_member(self):
184+
return self.memberdao.delete_by(gid=self.group)
185+
186+
187+
def add_challenge(self, uid, round_, boss, dmg, remain, flag, time):
188+
mem = self.get_member(uid)
179189
if not mem or mem['gid'] != self.group:
180190
raise NotFoundError('未找到成员')
181191
challenge = {
182-
'uid': uid,
183-
'alt': alt,
184-
'time': time,
185-
'round': round_,
186-
'boss': boss,
187-
'dmg': dmg,
188-
'flag': flag
192+
'uid': uid,
193+
'time': time,
194+
'round': round_,
195+
'boss': boss,
196+
'dmg': dmg,
197+
'remain': remain,
198+
'flag': flag
189199
}
190-
dao = self.get_battledao(mem['cid'], time)
200+
dao = self.get_battledao(time)
191201
return dao.add(challenge)
192202

193-
def mod_challenge(self, eid, uid, alt, round_, boss, dmg, flag, time):
194-
mem = self.get_member(uid, alt)
203+
def get_challenge(self, eid, time):
204+
dao = self.get_battledao(time)
205+
return dao.find_one(eid)
206+
207+
def list_challenge(self, time):
208+
dao = self.get_battledao(time)
209+
return dao.find_all()
210+
211+
def list_challenge_of_user(self, uid, time):
212+
mem = self.memberdao.find_one(uid, self.group)
213+
if not mem or mem['gid'] != self.group:
214+
return []
215+
dao = self.get_battledao(time)
216+
return dao.find_by(uid=uid)
217+
218+
def mod_challenge(self, eid, uid, round_, boss, dmg, remain, flag, time):
219+
mem = self.get_member(uid)
195220
if not mem or mem['gid'] != self.group:
196221
raise NotFoundError('未找到成员')
197222
challenge = {
198-
'eid': eid,
199-
'uid': uid,
200-
'alt': alt,
201-
'time': time,
202-
'round': round_,
203-
'boss': boss,
204-
'dmg': dmg,
205-
'flag': flag
223+
'eid': eid,
224+
'uid': uid,
225+
'time': time,
226+
'round': round_,
227+
'boss': boss,
228+
'dmg': dmg,
229+
'remain': remain,
230+
'flag': flag
206231
}
207-
dao = self.get_battledao(mem['cid'], time)
232+
dao = self.get_battledao(time)
208233
return dao.modify(challenge)
209234

210-
def del_challenge(self, eid, cid, time):
211-
dao = self.get_battledao(cid, time)
235+
def del_challenge(self, eid, time):
236+
dao = self.get_battledao(time)
212237
return dao.delete(eid)
213238

214-
def get_challenge(self, eid, cid, time):
215-
dao = self.get_battledao(cid, time)
216-
return dao.find_one(eid)
217-
218-
def list_challenge(self, cid, time):
219-
dao = self.get_battledao(cid, time)
220-
return dao.find_all()
221-
222-
def list_challenge_of_user(self, uid, alt, time):
223-
mem = self.memberdao.find_one(uid, alt)
224-
if not mem or mem['gid'] != self.group:
225-
return []
226-
dao = self.get_battledao(mem['cid'], time)
227-
return dao.find_by(uid=uid, alt=alt)
228-
229239

230240
@staticmethod
231241
def filt_challenge_of_day(challenge_list, time, zone_num:int=8):
232242
_, _, day = BattleMaster.get_yyyymmdd(time, zone_num)
233243
return list(filter(lambda challen: day == BattleMaster.get_yyyymmdd(challen['time'], zone_num)[2], challenge_list))
234244

235245

236-
def list_challenge_of_day(self, cid, time, zone_num:int=8):
237-
return self.filt_challenge_of_day(self.list_challenge(cid, time), time, zone_num)
246+
def list_challenge_of_day(self, time, zone_num:int=8):
247+
return self.filt_challenge_of_day(self.list_challenge(time), time, zone_num)
238248

239249

240-
def list_challenge_of_user_of_day(self, uid, alt, time, zone_num:int=8):
241-
return self.filt_challenge_of_day(self.list_challenge_of_user(uid, alt, time), time, zone_num)
250+
def list_challenge_of_user_of_day(self, uid, time, zone_num:int=8):
251+
return self.filt_challenge_of_day(self.list_challenge_of_user(uid, time), time, zone_num)
242252

243253

244-
def stat_challenge(self, cid, time, only_one_day=True, zone_num:int=8):
254+
def stat_challenge(self, time, only_one_day=True, zone_num:int=8):
245255
'''
246256
统计每个成员的出刀
247257
return [(member, [challenge])]
248258
'''
249259
ret = []
250-
mem = self.list_member(cid)
251-
dao = self.get_battledao(cid, time)
260+
mem = self.list_member()
261+
dao = self.get_battledao(time)
252262
for m in mem:
253-
challens = dao.find_by(uid=m['uid'], alt=m['alt'])
263+
challens = dao.find_by(uid=m['uid'])
254264
if only_one_day:
255265
challens = self.filt_challenge_of_day(challens, time, zone_num)
256266
ret.append((m, challens))
257267
return ret
258268

259-
260-
def stat_damage(self, cid, time):
269+
270+
def stat_damage(self, time):
261271
'''
262-
统计cid会各成员的本月各Boss伤害总量
263-
:return: [(uid, alt, name, [total_dmg, dmg1, ..., dmg5])]
272+
统计各成员的本月各Boss伤害总量
273+
:return: [(uid, name, [total_dmg, dmg1, ..., dmg5])]
264274
'''
265-
clan = self.get_clan(cid)
275+
clan = self.get_clan()
266276
if not clan:
267-
raise NotFoundError(f'未找到公会{cid}')
277+
raise NotFoundError(f'未找到公会')
268278
server = clan['server']
269-
stat = self.stat_challenge(cid, time, only_one_day=False, zone_num=self.get_timezone_num(server))
279+
stat = self.stat_challenge(time, only_one_day=False, zone_num=self.get_timezone_num(server))
270280
ret = []
271281
for mem, challens in stat:
272282
dmgs = [0] * 6
273283
for ch in challens:
274284
d = ch['dmg']
275285
dmgs[0] += d
276286
dmgs[ch['boss']] += d
277-
ret.append((mem['uid'], mem['alt'], mem['name'], dmgs))
287+
ret.append((mem['uid'], mem['name'], dmgs))
278288
return ret
279289

280290

281-
def stat_score(self, cid, time):
291+
def stat_score(self, time):
282292
'''
283-
统计cid会各成员的本月总分数
284-
:return: [(uid,alt,name,score)]
293+
统计各成员的本月总分数
294+
:return: [(uid,name,score)]
285295
'''
286-
clan = self.get_clan(cid)
296+
clan = self.get_clan()
287297
if not clan:
288-
raise NotFoundError(f'未找到公会{cid}')
298+
raise NotFoundError(f'未找到公会')
289299
server = clan['server']
290-
stat = self.stat_challenge(cid, time, only_one_day=False, zone_num=self.get_timezone_num(server))
300+
stat = self.stat_challenge(time, only_one_day=False, zone_num=self.get_timezone_num(server))
291301
ret = [
292-
(mem['uid'], mem['alt'], mem['name'], sum(map(lambda ch: round(self.get_score_rate(ch['round'], ch['boss'], server) * ch['dmg']), challens)))
302+
(mem['uid'], mem['name'], sum(map(lambda ch: round(self.get_score_rate(ch['round'], ch['boss'], server) * ch['dmg']), challens)))
293303
for mem, challens in stat
294304
]
295305
return ret
296306

297307

298-
def list_challenge_remain(self, cid, time):
308+
def list_challenge_remain(self, time):
299309
'''
300-
return [(uid,alt,name,remain_n,remain_e)]
310+
return [(uid,name,remain_n,remain_e)]
301311
302312
norm + timeout + last == 3 - remain_n // 正常出刀数 == 3 - 余刀数
303313
last - ext == remain_e // 尾刀数 - 补时刀数 == 补时余刀
@@ -323,31 +333,32 @@ def count(challens):
323333
norm = norm + 1
324334
return norm, last, ext, timeout
325335

326-
clan = self.get_clan(cid)
336+
clan = self.get_clan()
327337
if not clan:
328-
raise NotFoundError(f'未找到公会{cid}')
338+
raise NotFoundError(f'未找到公会')
329339
ret = []
330-
stat = self.stat_challenge(cid, time, only_one_day=True, zone_num=self.get_timezone_num(clan['server']))
340+
stat = self.stat_challenge(time, only_one_day=True, zone_num=self.get_timezone_num(clan['server']))
331341
for mem, challens in stat:
332342
norm, last, ext, timeout = count(challens)
333343
r = (
334-
mem['uid'], mem['alt'], mem['name'],
344+
mem['uid'],
345+
mem['name'],
335346
3 - (norm + timeout + last),
336347
last - ext,
337348
)
338349
ret.append(r)
339350
return ret
340351

341352

342-
def get_challenge_progress(self, cid, time):
353+
def get_challenge_progress(self, time):
343354
'''
344355
return (round, boss, remain_hp)
345356
'''
346-
clan = self.get_clan(cid)
357+
clan = self.get_clan()
347358
if not clan:
348359
return None
349360
server = clan['server']
350-
dao = self.get_battledao(cid, time)
361+
dao = self.get_battledao(time)
351362
challens = dao.find_all()
352363
if not len(challens):
353364
return ( 1, 1, self.get_boss_hp(1, 1, server) )

0 commit comments

Comments
 (0)