class Game: def __init__(self, rec, db): self.game = rec['game'] self.day = rec['day'] self.deathTime = rec['deathtime'] self.players = rec['players'] self.result = rec['result'] self.state = rec['state'] self.termOfDay = rec['termOfDay'] self.characterSet = rec['characterSet'] self.useTimetable = rec['useTimetable'] self.win = rec['win'] self.good = rec['good'] self.bad = rec['bad'] self.seal = rec['seal'] self.seal_yes = rec['seal_yes'] self.seal_no = rec['seal_no'] self.delayAfter = rec['delayAfter'] self.delayBefore = rec['delayBefore'] self.delayAfterUsed = rec['delayAfterUsed'] self.delayBeforeUsed = rec['delayBeforeUsed'] self.rule = RuleFactory.getRule(rec['rule'], self) self.entry = Entry(self) self.db = db def nextTurn(self): # 1일 마을에서 시간이 지난 경우. if self.useTimetable == 0 and time.time() >= (self.deathTime + self.termOfDay * self.day): if self.seal == "논의": logging.debug("%s: 봉인 논의중..", self.game) suddenPlayerCount = self.entry.getSuddenPlayerCount() self.setGameState("seal", "종료") if (self.seal_yes > self.seal_no) and (self.seal_yes >= (self.players - suddenPlayerCount - 1)/2): logging.info("%s: 봉인 조건 충족 - 봉인", self.game) self.setGameState("state", GAME_STATE.SEAL) return logging.info("%s: 다음 날로..", self.game) self.rule.nextTurn() # 30분 마을의 경우 elif self.useTimetable == 1: AllAlivePlayerCounter = self.entry.getAllAlivePlayerCounter() AllConfirmCounter = self.entry.getAllConfirmCounter() logging.debug("준비 완료: %s within %s", AllConfirmCounter, AllAlivePlayerCounter) logging.debug("Type of AllConfirmCounter: %s", type(AllConfirmCounter)) if self.day == 0: deathtime = self.deathTime else: deathtime = self.getTimetable()['reg_date'] + self.termOfDay # 디버그 서버일 경우엔 준비완료를 같게 한다 if config.server == "test group": AllConfirmCounter = AllAlivePlayerCounter # 준비 완료 OR 시간이 지남 if((self.state == "게임중" and AllAlivePlayerCounter == AllConfirmCounter) or time.time() >= deathtime): logging.debug("Alive players: %s", AllAlivePlayerCounter) logging.debug("Confirm players: %s", AllConfirmCounter) logging.debug("Death time: %s", deathtime) if self.seal == "논의": logging.debug("%s: 봉인 논의중..", self.game) suddenPlayerCount = self.entry.getSuddenPlayerCount() self.setGameState("seal", "종료") if (self.seal_yes > self.seal_no) and (self.seal_yes >= (self.players - suddenPlayerCount - 1)/2): logging.info("%s: 봉인 조건 충족 - 봉인", self.game) self.setGameState("state", GAME_STATE.SEAL) return logging.info("%s: 다음 날로..", self.getName()) self.setTimetable() self.rule.nextTurn() def checkDelay(self): # 코멘트 충전 if self.state == "게임중" and self.delayAfterUsed == 0: if self.day == 1 and self.delayAfter > 0: if time.time() >= (self.deathTime + self.delayAfter): logging.info("%s: 로그 충전!", self.game) self.rule.checkDelayToAllocComment() else: logging.info("%s: 로그 충전!", self.game) self.rule.checkDelayToAllocComment() # 코멘트 해제 if self.state == "게임중" and self.delayBeforeUsed == 0 and self.delayBefore > 0: # 1일 서버 if self.useTimetable == 0 and time.time() >= (self.deathTime + self.termOfDay * self.day - self.delayBefore): logging.info("%s: 로그 해제!", self.game) self.rule.checkDelayToFreeComment() # 30분 서버 elif self.useTimetable == 1: deathtime = self.getTimetable()['reg_date'] + self.termOfDay if time.time() >= (deathtime - self.delayBefore): logging.info("%s: 로그 해제!", self.game) self.rule.checkDelayToFreeComment() def minus_division(self, division): cursor = self.db.cursor cursor.execute("update `zetyx_division_werewolf` set num=num-1 where division='"+str(division)+"'") #print "division: " ,division def getName(self): cursor = self.db.cursor def deleteGame(self): cursor = self.db.cursor cursor.execute("select * from `zetyx_board_werewolf` where no='"+str(self.game)+"'") boardData = cursor.fetchone() logging.info("%s: 게임 삭제", boardData['subject']) cursor.execute("delete from `zetyx_board_werewolf` where no='"+str(self.game)+"'") self.minus_division(boardData['division']) logging.info("depth: %s", boardData['depth']) if boardData['depth'] == 0: if boardData['prev_no']: logging.debug("prev_no: %s", boardData['prev_no']) cursor.execute("update `zetyx_board_werewolf` set next_no='"+str(boardData['next_no'])+"' where next_no='"+str(self.game)+"'") if boardData['next_no']: logging.debug("next_no: %s", boardData['next_no']) cursor.execute("update `zetyx_board_werewolf` set prev_no='"+str(boardData['prev_no'])+"' where prev_no='"+str(self.game)+"'") else: cursor.execute("select count(*) from `zetyx_board_werewolf` where father='"+str(boardData['father'])+"'") fatherData = cursor.fetchone() logging.info("fatherData: %s", fatherData['count(*)']) if fatherData['count(*)'] == 0: cursor.execute("update `zetyx_board_werewolf` set child='0' where no='"+boardData['father']+"'") cursor.execute("delete from `zetyx_board_comment_werewolf` where parent='"+str(self.game)+"'") cursor.execute("delete from `zetyx_board_werewolf_gameinfo` where game='"+str(self.game)+"'") cursor.execute("delete from `zetyx_board_werewolf_entry` where game='"+str(self.game)+"'") cursor.execute("delete from `zetyx_board_werewolf_vote` where game='"+str(self.game)+"'") cursor.execute("delete from `zetyx_board_comment_werewolf_commentType` where game='"+str(self.game)+"'") cursor.execute("delete from `zetyx_board_werewolf_revelation` where game='"+str(self.game)+"'") cursor.execute("delete from `zetyx_board_werewolf_deathNote` where game='"+str(self.game)+"'") cursor.execute("delete from `zetyx_board_werewolf_deathNote_result` where game='" + str(self.game) + "'") cursor.execute("delete from `zetyx_board_werewolf_guard` where game="+str(self.game)+"") cursor.execute("select count(*) from `zetyx_board_werewolf`") total = cursor.fetchone() logging.info("total: %s", total['count(*)']) cursor.execute("update `zetyx_admin_table` set total_article='"+str(total['count(*)'])+"' where name='werewolf'") cursor.execute("update `zetyx_board_category_werewolf` set num=num-1 where no='"+str(boardData['category'])+"'") cursor.execute("update `zetyx_member_table` set point1=point1-1 where no='"+str(boardData['ismember'])+"'") def setGameState(self, key, value): cursor = self.db.cursor #self.deathTime += self.termOfDay query = "update `zetyx_board_werewolf_gameinfo` set `%s` = '%s' where game = '%s'" query %= (key, value, self.game) cursor.execute(query) def setTimetable(self): cursor = self.db.cursor #self.deathTime += self.termOfDay query = """insert into `zetyx_board_werewolf_timetable` (`game`,`day`,`reg_date`) values(%s,%s,%s)""" query %= (self.game, self.day, time.time()) cursor.execute(query) def getTimetable(self): cursor = self.db.cursor #self.deathTime += self.termOfDay query = """select * from `zetyx_board_werewolf_timetable` where `game` =%s and `day`=%s """ query %= (self.game, self.day-1) cursor.execute(query) return cursor.fetchone() def writeComment(self, userID, userName, userPasswd, comment, ip, commentType, character, time): cursor = self.db.cursor import re #userID = re.escape(userID) userName = re.escape(userName) comment = re.escape(comment) query = """insert into `zetyx_board_comment_werewolf` (`parent`,`ismember`,`name`,`password`,`memo`,`reg_date`,`ip`) """ #query += "values ('"+str(self.game)+"','"+str(userID)+"','"+userName+"','"+userPasswd+"','"+comment+"','"+str(int(time.time()))+"','"+ip+"')" query += "values ('"+str(self.game)+"','"+str(userID)+"','"+userName+"','"+userPasswd+"','"+comment+"','"+str(time)+"','"+ip+"')" cursor.execute(query) query = "insert into `zetyx_board_comment_werewolf_commentType` (game,comment,type,`character`)" query += "values ('"+str(self.game)+"',"+str(cursor.lastrowid)+",'"+commentType+"','"+str(character)+"')" cursor.execute(query)
class Game: def __init__(self, rec, db): self.game = rec['game'] # self.rule = rec['rule'] self.day = rec['day'] self.deathTime = rec['deathtime'] self.players = rec['players'] self.result = rec['result'] self.state = rec['state'] self.termOfDay = rec['termOfDay'] self.characterSet = rec['characterSet'] self.useTimetable = rec['useTimetable'] self.win = rec['win'] self.good = rec['good'] self.bad = rec['bad'] self.seal = rec['seal'] self.seal_yes = rec['seal_yes'] self.seal_no = rec['seal_no'] self.rule = RuleFactory.getRule(rec['rule'], self) self.entry = Entry(self) self.db = db def nextTurn(self): import time if(self.useTimetable == 0 and time.time() >= (self.deathTime + self.termOfDay * self.day)): print("-----------------------") if(self.seal == "논의"): suddenPlayerCount = self.entry.getSuddenPlayerCount if((self.seal_yes > self.seal_no) and (self.seal_yes >= (self.players - suddenPlayerCount - 1)/2)): self.setGameState("state", GAME_STATE.SEAL) else: print(self.getName(), ": 다음 날로.. ", time.asctime()) self.rule.nextTurn() self.setGameState("seal", "종료") else: print(self.getName(), ": 다음 날로.. ", time.asctime()) self.rule.nextTurn() elif(self.useTimetable == 1): AllAlivePlayerCounter = self.entry.getAllAlivePlayerCounter() AllConfirmCounter = self.entry.getAllConfirmCounter() if(self.day == 0): deathtime = self.deathTime else: deathtime = self.getTimetable()['reg_date'] + self.termOfDay if((self.state == "게임중" and AllAlivePlayerCounter == AllConfirmCounter) or time.time() >= deathtime): print("----------------------------") print(self.getName(), ": 다음 날로.. ", time.asctime()) #print "AllAlivePlayerCounter:",AllAlivePlayerCounter #print "AllConfirmCounter:",AllConfirmCounter #print "deathtime: ", deathtime self.setTimetable() self.rule.nextTurn() def minus_division(self, division): cursor = self.db.cursor cursor.execute("update `zetyx_division_werewolf` set num=num-1 where division='"+str(division)+"'") #print "division: " ,division def getName(self): cursor = self.db.cursor def deleteGame(self): print("---------------------------") cursor = self.db.cursor cursor.execute("select * from `zetyx_board_werewolf` where no='"+str(self.game)+"'") boardData = cursor.fetchone() print(boardData['subject'], "게임 삭제") cursor.execute("delete from `zetyx_board_werewolf` where no='"+str(self.game)+"'") self.minus_division(boardData['division']) print("depth: ", boardData['depth']) if(boardData['depth']==0): if(boardData['prev_no']): print("prev_no:", boardData['prev_no']) cursor.execute("update `zetyx_board_werewolf` set next_no='"+str(boardData['next_no'])+"' where next_no='"+str(self.game)+"'") if(boardData['next_no']): print("next_no:", boardData['next_no']) cursor.execute("update `zetyx_board_werewolf` set prev_no='"+str(boardData['prev_no'])+"' where prev_no='"+str(self.game)+"'") else: cursor.execute("select count(*) from `zetyx_board_werewolf` where father='"+str(boardData['father'])+"'") fatherData = cursor.fetchone() print("fatherData:", fatherData['count(*)']) if(fatherData['count(*)'] == 0): cursor.execute("update `zetyx_board_werewolf` set child='0' where no='"+boardData['father']+"'") cursor.execute("delete from `zetyx_board_comment_werewolf` where parent='"+str(self.game)+"'") cursor.execute("delete from `zetyx_board_werewolf_gameinfo` where game='"+str(self.game)+"'") cursor.execute("delete from `zetyx_board_werewolf_entry` where game='"+str(self.game)+"'") cursor.execute("delete from `zetyx_board_werewolf_vote` where game='"+str(self.game)+"'") cursor.execute("delete from `zetyx_board_comment_werewolf_commentType` where game='"+str(self.game)+"'") cursor.execute("delete from `zetyx_board_werewolf_revelation` where game='"+str(self.game)+"'") cursor.execute("delete from `zetyx_board_werewolf_deathNote` where game='"+str(self.game)+"'") cursor.execute("delete from `zetyx_board_werewolf_deathNote_result` where game='" + str(self.game) + "'") cursor.execute("delete from `zetyx_board_werewolf_guard` where game="+str(self.game)+"") cursor.execute("select count(*) from `zetyx_board_werewolf`") total = cursor.fetchone() print("total:", total['count(*)']) cursor.execute("update `zetyx_admin_table` set total_article='"+str(total['count(*)'])+"' where name='werewolf'") cursor.execute("update `zetyx_board_category_werewolf` set num=num-1 where no='"+str(boardData['category'])+"'") cursor.execute("update `zetyx_member_table` set point1=point1-1 where no='"+str(boardData['ismember'])+"'") def setGameState(self, key, value): cursor = self.db.cursor #self.deathTime += self.termOfDay query = "update `zetyx_board_werewolf_gameinfo` set `%s` = '%s' where game = '%s'" query%=(key,value,self.game) cursor.execute(query) def setTimetable(self): cursor = self.db.cursor #self.deathTime += self.termOfDay query = """insert into `zetyx_board_werewolf_timetable` (`game`,`day`,`reg_date`) values(%s,%s,%s)""" query%=(self.game, self.day, time.time()) cursor.execute(query) def getTimetable(self): cursor = self.db.cursor #self.deathTime += self.termOfDay query = """select * from `zetyx_board_werewolf_timetable` where `game` =%s and `day`=%s """ query%=(self.game, self.day-1) cursor.execute(query) return cursor.fetchone() def writeComment(self, userID ,userName ,userPasswd ,comment ,ip ,commentType ,character ,time): cursor = self.db.cursor import re #userID = re.escape(userID) userName = re.escape(userName) comment = re.escape(comment) query = """insert into `zetyx_board_comment_werewolf` (`parent`,`ismember`,`name`,`password`,`memo`,`reg_date`,`ip`) """ #query += "values ('"+str(self.game)+"','"+str(userID)+"','"+userName+"','"+userPasswd+"','"+comment+"','"+str(int(time.time()))+"','"+ip+"')" query += "values ('"+str(self.game)+"','"+str(userID)+"','"+userName+"','"+userPasswd+"','"+comment+"','"+str(time)+"','"+ip+"')" cursor.execute(query) query = "insert into `zetyx_board_comment_werewolf_commentType` (game,comment,type,`character`)" query +="values ('"+str(self.game)+"',"+str(cursor.lastrowid)+",'"+commentType+"','"+str(character)+"')" cursor.execute(query)
class Game: def __init__(self, rec, db): self.game = rec['game'] self.day = rec['day'] self.deathTime = rec['deathtime'] self.players = rec['players'] self.result = rec['result'] self.state = rec['state'] self.termOfDay = rec['termOfDay'] self.characterSet = rec['characterSet'] self.useTimetable = rec['useTimetable'] self.win = rec['win'] self.good = rec['good'] self.bad = rec['bad'] self.seal = rec['seal'] self.seal_yes = rec['seal_yes'] self.seal_no = rec['seal_no'] self.delayAfter = rec['delayAfter'] self.delayBefore = rec['delayBefore'] self.delayAfterUsed = rec['delayAfterUsed'] self.delayBeforeUsed = rec['delayBeforeUsed'] self.rule = RuleFactory.getRule(rec['rule'], self) self.entry = Entry(self) self.db = db def nextTurn(self): # 1일 마을에서 시간이 지난 경우. if self.useTimetable == 0 and time.time() >= (self.deathTime + self.termOfDay * self.day): if self.seal == "논의": logging.debug("%s: 봉인 논의중..", self.game) suddenPlayerCount = self.entry.getSuddenPlayerCount() self.setGameState("seal", "종료") if (self.seal_yes > self.seal_no) and (self.seal_yes >= (self.players - suddenPlayerCount - 1)/2): logging.info("%s: 봉인 조건 충족 - 봉인", self.game) self.setGameState("state", GAME_STATE.SEAL) return logging.info("%s: 다음 날로..", self.game) self.rule.nextTurn() # 30분 마을의 경우 elif self.useTimetable == 1: AllAlivePlayerCounter = self.entry.getAllAlivePlayerCounter() AllConfirmCounter = self.entry.getAllConfirmCounter() logging.debug("준비 완료: %s within %s", AllConfirmCounter, AllAlivePlayerCounter) logging.debug("Type of AllConfirmCounter: %s", type(AllConfirmCounter)) if self.day == 0: deathtime = self.deathTime else: deathtime = self.getTimetable()['reg_date'] + self.termOfDay # 준비 완료 OR 시간이 지남 if((self.state == "게임중" and AllAlivePlayerCounter == AllConfirmCounter) or time.time() >= deathtime): logging.debug("Alive players: %s", AllAlivePlayerCounter) logging.debug("Confirm players: %s", AllConfirmCounter) logging.debug("Death time: %s", deathtime) if self.seal == "논의": logging.debug("%s: 봉인 논의중..", self.game) suddenPlayerCount = self.entry.getSuddenPlayerCount() self.setGameState("seal", "종료") if (self.seal_yes > self.seal_no) and (self.seal_yes >= (self.players - suddenPlayerCount - 1)/2): logging.info("%s: 봉인 조건 충족 - 봉인", self.game) self.setGameState("state", GAME_STATE.SEAL) return logging.info("%s: 다음 날로..", self.getName()) self.setTimetable() self.rule.nextTurn() def checkDelay(self): # 코멘트 충전 if self.state == "게임중" and self.delayAfterUsed == 0: if self.day == 1 and self.delayAfter > 0: if time.time() >= (self.deathTime + self.delayAfter): logging.info("%s: 로그 충전!", self.game) self.rule.checkDelayToAllocComment() else: logging.info("%s: 로그 충전!", self.game) self.rule.checkDelayToAllocComment() # 코멘트 해제 if self.state == "게임중" and self.delayBeforeUsed == 0 and self.delayBefore > 0: # 1일 서버 if self.useTimetable == 0 and time.time() >= (self.deathTime + self.termOfDay * self.day - self.delayBefore): logging.info("%s: 로그 해제!", self.game) self.rule.checkDelayToFreeComment() # 30분 서버 elif self.useTimetable == 1: deathtime = self.getTimetable()['reg_date'] + self.termOfDay if time.time() >= (deathtime - self.delayBefore): logging.info("%s: 로그 해제!", self.game) self.rule.checkDelayToFreeComment() def minus_division(self, division): cursor = self.db.cursor cursor.execute("update `zetyx_division_werewolf` set num=num-1 where division='"+str(division)+"'") #print "division: " ,division def getName(self): cursor = self.db.cursor def deleteGame(self): cursor = self.db.cursor cursor.execute("select * from `zetyx_board_werewolf` where no='"+str(self.game)+"'") boardData = cursor.fetchone() logging.info("%s: 게임 삭제", boardData['subject']) cursor.execute("delete from `zetyx_board_werewolf` where no='"+str(self.game)+"'") self.minus_division(boardData['division']) logging.info("depth: %s", boardData['depth']) if boardData['depth'] == 0: if boardData['prev_no']: logging.debug("prev_no: %s", boardData['prev_no']) cursor.execute("update `zetyx_board_werewolf` set next_no='"+str(boardData['next_no'])+"' where next_no='"+str(self.game)+"'") if boardData['next_no']: logging.debug("next_no: %s", boardData['next_no']) cursor.execute("update `zetyx_board_werewolf` set prev_no='"+str(boardData['prev_no'])+"' where prev_no='"+str(self.game)+"'") else: cursor.execute("select count(*) from `zetyx_board_werewolf` where father='"+str(boardData['father'])+"'") fatherData = cursor.fetchone() logging.info("fatherData: %s", fatherData['count(*)']) if fatherData['count(*)'] == 0: cursor.execute("update `zetyx_board_werewolf` set child='0' where no='"+boardData['father']+"'") cursor.execute("delete from `zetyx_board_comment_werewolf` where parent='"+str(self.game)+"'") cursor.execute("delete from `zetyx_board_werewolf_gameinfo` where game='"+str(self.game)+"'") cursor.execute("delete from `zetyx_board_werewolf_entry` where game='"+str(self.game)+"'") cursor.execute("delete from `zetyx_board_werewolf_vote` where game='"+str(self.game)+"'") cursor.execute("delete from `zetyx_board_comment_werewolf_commentType` where game='"+str(self.game)+"'") cursor.execute("delete from `zetyx_board_werewolf_revelation` where game='"+str(self.game)+"'") cursor.execute("delete from `zetyx_board_werewolf_deathNote` where game='"+str(self.game)+"'") cursor.execute("delete from `zetyx_board_werewolf_deathNote_result` where game='" + str(self.game) + "'") cursor.execute("delete from `zetyx_board_werewolf_guard` where game="+str(self.game)+"") cursor.execute("select count(*) from `zetyx_board_werewolf`") total = cursor.fetchone() logging.info("total: %s", total['count(*)']) cursor.execute("update `zetyx_admin_table` set total_article='"+str(total['count(*)'])+"' where name='werewolf'") cursor.execute("update `zetyx_board_category_werewolf` set num=num-1 where no='"+str(boardData['category'])+"'") cursor.execute("update `zetyx_member_table` set point1=point1-1 where no='"+str(boardData['ismember'])+"'") def setGameState(self, key, value): cursor = self.db.cursor #self.deathTime += self.termOfDay query = "update `zetyx_board_werewolf_gameinfo` set `%s` = '%s' where game = '%s'" query %= (key, value, self.game) cursor.execute(query) def setTimetable(self): cursor = self.db.cursor #self.deathTime += self.termOfDay query = """insert into `zetyx_board_werewolf_timetable` (`game`,`day`,`reg_date`) values(%s,%s,%s)""" query %= (self.game, self.day, time.time()) cursor.execute(query) def getTimetable(self): cursor = self.db.cursor #self.deathTime += self.termOfDay query = """select * from `zetyx_board_werewolf_timetable` where `game` =%s and `day`=%s """ query %= (self.game, self.day-1) cursor.execute(query) return cursor.fetchone() def writeComment(self, userID, userName, userPasswd, comment, ip, commentType, character, time): cursor = self.db.cursor import re #userID = re.escape(userID) userName = re.escape(userName) comment = re.escape(comment) query = """insert into `zetyx_board_comment_werewolf` (`parent`,`ismember`,`name`,`password`,`memo`,`reg_date`,`ip`) """ #query += "values ('"+str(self.game)+"','"+str(userID)+"','"+userName+"','"+userPasswd+"','"+comment+"','"+str(int(time.time()))+"','"+ip+"')" query += "values ('"+str(self.game)+"','"+str(userID)+"','"+userName+"','"+userPasswd+"','"+comment+"','"+str(time)+"','"+ip+"')" cursor.execute(query) query = "insert into `zetyx_board_comment_werewolf_commentType` (game,comment,type,`character`)" query += "values ('"+str(self.game)+"',"+str(cursor.lastrowid)+",'"+commentType+"','"+str(character)+"')" cursor.execute(query)