def post(self): bodyData = self.request.body dictData = MessageTools.decode(bodyData) udid = dictData['udid'] returnData = None player = None playerID = self.getPlayeridByudid(udid) # 使用udid从数据库读取玩家ID if playerID == -1: returnData = MessData(ErrorCode.have_not_sign) # 玩家未注册 else: returnData = MessData() player = playerDataManager.getPlayerByPlayerid(playerID) # 登录成功,使用playerid获取玩家信息 if player == None: # 玩家信息未在内存中从数据库读取 player = playerDataManager.loginUseUidd(udid) player.connect_id = playerDataManager.create_connect_id(player.player_id) # 重新生成连接ID returnData.data = player player.server_date_time = GameTools.getDateTimeNowString() else: player.connect_id = playerDataManager.create_connect_id(player.player_id) # 重新生成连接ID returnData.data = player player.server_date_time = GameTools.getDateTimeNowString() if player != None: player.calculateOfflineResource() # 结算离线奖励 message = MessageTools.encode(returnData,False) if player != None: # 重置离线奖励 player.offlineCash = 0 self.write(message) self.finish()
def _process(self, params): token = params.get('token') skillID = params.get('skill_id') cost = params.get('costValue') cost = int(cost) player = playerDataManager.getPlayerByToken(token) returnData = MessData() if player == None: returnData = MessData(ErrorCode.tokenOutData) else: # Íæ¼Òconnect id¼ì²â connect_id = params.get('connect_id', '') # Íæ¼ÒÁ¬½Óid ck_connectid = playerDataManager.check_connect_id(obj=player, post_connect_id=connect_id) if ck_connectid[0] is False: returnData = MessData(ck_connectid[1]) self.write(MessageTools.encode(returnData)) self.finish() return if player.costResource(ResourceType.gems,cost): heroSkillData = player.getSkillInfo(skillID) heroSkillData.last_use_time = GameTools.datetime2string(GameTools.getDatetimeNow() - datetime.timedelta(days=1)) else: returnData = MessData(ErrorCode.resourceNotEnough) str = MessageTools.encode(returnData) self.write(str) self.finish() if player != None: playerDataManager.checkNeedSave2DB(player.player_id)
def post(self): bodyData = self.request.body dictData = MessageTools.decode(bodyData) token = dictData.get('token') player = playerDataManager.getPlayerByToken(token) returnData = MessData() if player == None: returnData = MessData(ErrorCode.tokenOutData) elif player.getSkillInfo(7).skillLevel == 0 and player.getSkillInfo(0).skillLevel < static.pvp_level_limit: returnData = MessData(ErrorCode.pvpNOTUnlockNow) else: # Íæ¼Òconnect id¼ì²â connect_id = dictData.get('connect_id', '') # Íæ¼ÒÁ¬½Óid ck_connectid = playerDataManager.check_connect_id(obj=player, post_connect_id=connect_id) if ck_connectid[0] is False: returnData = MessData(ck_connectid[1]) self.write(MessageTools.encode(returnData)) self.finish() return player_id = player.player_id if not rankManager.checkPlayerInRanking(player_id): rankManager.addRank(player_id) if player.costResource(ResourceType.gems,10): player.last_challenge_datetime = GameTools.datetime2string(GameTools.getDatetimeNow() - datetime.timedelta(minutes = 20)) else: returnData = MessData(ErrorCode.resourceNotEnough) str = MessageTools.encode(returnData) self.write(str) self.finish()
def post(self): bodyData = self.request.body dictData = MessageTools.decode(bodyData) udid = dictData['udid'] name = dictData['name'] cdkey = dictData.get('cdkey', '') returnData = MessData() player = None open_activate = True # 账户验证 name = name.strip() contains = name.find(';') >= 0 or name.find(' ') > 0 or len(name) == 0 charCount = len(name) max_length = gloabalBase.getValue('MAX_LENGTH_OF_NAME') max_length = int(max_length) # 长度验证 if contains or charCount > max_length: returnData = MessData(ErrorCode.name_illegal) # 非法字符验证 elif illegalWordManager.ContainIllegalWord(name): returnData = MessData(ErrorCode.name_illegal) # 是否已被使用验证 elif not playerDataManager.isSign(udid): if playerDataManager.isNameUsed(name): returnData = MessData(ErrorCode.name_used) else: playerDataManager.createAccount(udid,name) player = playerDataManager.loginUseUidd(udid) player.connect_id = playerDataManager.create_connect_id(player.player_id) # 重新生成连接ID player.revial = 1 returnData.data = player player.server_date_time = GameTools.getDateTimeNowString() # 通过 else: player = playerDataManager.loginUseUidd(udid) player.server_date_time = GameTools.getDateTimeNowString() player.connect_id = playerDataManager.create_connect_id(player.player_id) # 重新生成连接ID returnData.data = player player.calculateOfflineResource() message = MessageTools.encode(returnData,False) if player != None: # 重置离线奖励 player.offlineCash = 0 # 使用cdkey if open_activate is True: cdkey_obj.is_use = True cdkey_obj.usedtime = datetime.datetime.now() cdkey_obj.use_udid = udid cdkey_obj.save() self.write(message) self.finish()
def refreshTimeData(self): if self.random_rweard_date == None or self.random_rweard_date == "": self.random_reward_num = 0 self.random_rweard_date= GameTools.getDateTimeNowString() rr_date = GameTools.string2datetime(self.random_rweard_date) time_now = GameTools.getDatetimeNow() if rr_date.year != time_now.year or rr_date.month != time_now.month or rr_date.day != time_now.day: self.random_reward_num = 0 self.random_rweard_date= GameTools.getDateTimeNowString()
def updateDailyData(self): dateTimeNow = GameTools.getDatetimeNow() lastDateTimeNow = GameTools.string2datetime(self.daily_datetime) if dateTimeNow.year != lastDateTimeNow.year or dateTimeNow.month != lastDateTimeNow.month or dateTimeNow.day != lastDateTimeNow.day: self.daily_datetime = GameTools.getDateTimeNowString() self.chanllenge_num = int(gloabalBase.getValue('daily_challenge_num')) self.buy_del_challenge_cd_num = 0 self.add_chanllenge_num = 0 self.random_reward_num = 0
def addNocachePlayerResource(self,playerid,type,value,rankNum): tableName = "player_base_info" filedName = "cash" if type == 1: filedName = "pvp_medal" elif type == 2: filedName = "gem" elif type == 3: filedName = "revive" elif type == 4: filedName = "cash" else: print("not conifg this resource %s"%type) return selectField = filedName condition = "playerid = %s" %playerid data = db_Manager.selectDataFromTable(tableName,selectField,condition) oldValue = int(data[0][0]) newValue = oldValue + value insertField = [] insertField.append(filedName) insertField.append('lastTimedRewardDatetime') insertField.append('last_timed_reward_ranknum') insertValue = [] insertValue.append(newValue) insertValue.append(GameTools.getDateTimeNowString()) insertValue.append(rankNum) db_Manager.updateDataAtTable(tableName,insertField,insertValue,condition)
def __init__(self,data): self.skillID = data[0] self.skillLevel = data[1] if data[2] == None or data[2] =="" or data[2] == " ": yesterday = datetime.datetime.now() - datetime.timedelta(days = 1) self.last_use_time = GameTools.datetime2string(yesterday) else: self.last_use_time = data[2]
def loginUseUidd(self,udid): tableName = 'player_base_info' fileds = 'playerid, name, pvp_medal, gem, ' \ 'revive, cash, game_level, game_wave, ' \ 'chanllenge_date, chanllenge_num, avatorid, lootequiplevel, is_brush, ' \ 'last_cmd_time, random_reward_num, random_reward_date, ' \ 'lastTimedRewardDatetime, last_timed_reward_ranknum, last_challenge_datetime, buy_del_challenge_cd_num,' \ 'daily_datetime, add_chanllenge_num, awake_spell_num, last_free_draw_datetime, recharge_total_num, recharge_get_gifts_status,' \ 'last_login_date, login_num, login_get_gifts_status, tutorial, udid' condiction = "udid = '%s'" %udid data = db_Manager.selectDataFromTable(tableName, fileds, condiction) player = PlayerInfo(data[0]) self.playerid2player[player.player_id] = player self.token2player[player.token] = player self.token2time[player.token] = GameTools.getDatetimeNow() self.playerid2saveTime[player.player_id] = GameTools.getDatetimeNow() player.login_days_check() return player
def loadSkills(self): tableName = "player_skill" fields = "skill_id,level,last_use_time" conditon = "player_id = %s" % self.player_id data = db_Manager.selectDataFromTable(tableName,fields,conditon) skillids = [] for skillData in data: heroSkill = HeroSkillData(skillData) if heroSkill.skillID == 0 and heroSkill.skillLevel < 1: heroSkill.skillLevel = 1 skillids.append(heroSkill.skillID) self.skills.append(heroSkill) for skillidInTable in range(8): if not skillidInTable in skillids: fields = [] fields.append('player_id') fields.append('skill_id') fields.append('level') fields.append('last_use_time') values = [] values.append(self.player_id) values.append(skillidInTable) if skillidInTable == 0: values.append(1) else: values.append(0) t_now = GameTools.getDatetimeNow() t_ok = t_now- datetime.timedelta(days = 1) t_now_string = GameTools.datetime2string(t_ok) values.append(t_now_string) db_Manager.insertIntoTable(tableName,fields,values) skillData = [] skillData.append(skillidInTable) if skillidInTable == 0: skillData.append(1) else: skillData.append(0) skillData.append(t_now_string) heroSkill = HeroSkillData(skillData) self.skills.append(heroSkill)
def sendPVPReward(self,playerid,type,value,rankNum): if value <= 0: value = -value value = int(value) player = self.playerid2player.get(playerid,None) if player == None: self.addNocachePlayerResource(playerid,type,value,rankNum) else: player.addResource(type,value) player.last_timed_reward_datetime = GameTools.getDateTimeNowString() player.last_timed_reward_ranknum = rankNum
def IsEffectNow(self): if self.skillLevel == 0: return False lastUseTime = GameTools.string2datetime(self.last_use_time) skillConstInfo = heroSkillTableManager.getHeroSkill(self.skillID,self.skillLevel) effectTime = skillConstInfo.duration if effectTime == 0: effectTime += 10 effectTime += 10 t = datetime.timedelta(seconds = effectTime) return lastUseTime + t > datetime.datetime.now()
def post(self): bodyData = self.request.body dictData = MessageTools.decode(bodyData) token = dictData.get('token') targetid = dictData.get('targetid',0) targetid = int(targetid) player = playerDataManager.getPlayerByToken(token) returnData = MessData() if player == None: returnData = MessData(ErrorCode.tokenOutData) elif player.getSkillInfo(7).skillLevel == 0 and player.getSkillInfo(0).skillLevel < static.pvp_level_limit: returnData = MessData(ErrorCode.pvpNOTUnlockNow) else: # Íæ¼Òconnect id¼ì²â connect_id = dictData.get('connect_id', '') # Íæ¼ÒÁ¬½Óid ck_connectid = playerDataManager.check_connect_id(obj=player, post_connect_id=connect_id) if ck_connectid[0] is False: returnData = MessData(ck_connectid[1]) self.write(MessageTools.encode(returnData)) self.finish() return player_id = player.player_id if not rankManager.checkPlayerInRanking(player_id): rankManager.addRank(player_id) player.updateDailyData() lastChanllengeDatetime = GameTools.string2datetime(player.last_challenge_datetime) if GameTools.getDatetimeNow() < lastChanllengeDatetime + datetime.timedelta(seconds = 60 * 4): returnData = MessData(ErrorCode.skillincd) elif player.costResource(ResourceType.chanllengeNum,1): player.last_challenge_datetime = GameTools.getDateTimeNowString() pvpDataManger.addFightStatus(player_id,targetid) else: returnData = MessData(ErrorCode.resourceNotEnough) str = MessageTools.encode(returnData) self.write(str) self.finish()
def calculateOfflineCash(self): playerLevel = self.getSkillInfo(0).skillLevel # 主角技能 playerRevial = self.getSkillInfo(7).skillLevel # 重生技能 # 玩家获取离线奖励技能检测 if playerLevel == 0 and playerRevial == 0: self.offlineCash = 0 return timeLast = GameTools.string2datetime(self.last_cmd_time) # 最后操作时间 timeNow = GameTools.getDatetimeNow() # 当前时间 # 玩家获取离线奖励时间检测 if timeNow > timeLast + datetime.timedelta(seconds = ConstValue.tokenEffectTime): time = timeNow - timeLast time = time.total_seconds() gold = OfflineCash.calculateOfflineCash(self.game_level,time) # 获取奖励金币 self.offlineCash = gold self.cash += gold else: self.offlineCash = 0
def calculOfflinePartnersHP(self): lastCMDTime = self.last_cmd_time lastCMDTime = GameTools.string2datetime(lastCMDTime) timeNow = GameTools.getDatetimeNow() if timeNow < lastCMDTime + datetime.timedelta(seconds = ConstValue.tokenEffectTime): return deltaTime = timeNow - lastCMDTime totalSeconds = deltaTime.total_seconds() totalSeconds = int(totalSeconds) if totalSeconds <=50: return else: print('calculOfflinePartnersHP add hp ') for partner in self.partners: partnerID = partner.partner_id heroInfo = heroTable.GetHeroInfoByid(partnerID) add_hp = totalSeconds * heroInfo.add_hp max_hp = heroInfo.max_hp partner.hp += add_hp partner.hp = min(partner.hp,max_hp) if partner.hp == max_hp: partner.sleep = 0
def encode(object,isencrypt = True): jsonStr = MyEncoder().encode(object) #log here jsonStr print(jsonStr) # logging.info("respond data"+ jsonStr) try: MessageTools.log.info("respond data"+ jsonStr) except BaseException as e : pass if isencrypt: timeBefore = GameTools.getDatetimeNow() bjson = jsonStr.encode(encoding= "utf8") des = DES('12345678','1234567812345678') encryptdata = des.encrypt(bjson) sss = encryptdata.decode('utf-8') timeAfter = GameTools.getDatetimeNow() alpha = timeAfter - timeBefore print('total seconds :%s' %alpha.total_seconds()) sss = "1111%s"%jsonStr else: sss = "0000%s"%jsonStr return sss
def getPlayerByPlayerid(self,player_id): player= self.playerid2player.get(player_id,None) if player != None: token = player.token tokenTime = self.token2time[token] if GameTools.getDatetimeNow() > tokenTime + datetime.timedelta(seconds = ConstValue.tokenEffectTime): outDateTokens = [] outDateTokens.append(token) self.kickOfTokens(outDateTokens) return None else: self.updatePlayerTokenTime(player) return player
def getPlayerByToken(self,token): if token in self.token2time: tokenTime = self.token2time[token] if GameTools.getDatetimeNow() > tokenTime + datetime.timedelta(seconds = ConstValue.tokenEffectTime): outDateTokens = [] outDateTokens.append(token) self.kickOfTokens(outDateTokens) return None else: player = self.token2player.get(token) if player != None: self.updatePlayerTokenTime(player) player.login_days_check() return player return None
def createAccount(self,udid,name): tableName = 'player_base_info' fields = [] values = [] fields.append('playerid') fields.append('udid') fields.append('name') fields.append('last_cmd_time') self.player_max_id += 1 playerid = self.server_id + self.player_max_id values.append(playerid) values.append(udid) values.append(name) timeNowStr = GameTools.datetime2string(datetime.datetime.now()) values.append(timeNowStr) db_Manager.insertIntoTable(tableName,fields,values) self.updatePlayerMaxID(self.player_max_id)
def _process(self, params): token = params.get('token') skillID = params.get('skillid') player = playerDataManager.getPlayerByToken(token) returnData = MessData() if player == None: returnData = MessData(ErrorCode.tokenOutData) else: # Íæ¼Òconnect id¼ì²â connect_id = params.get('connect_id', '') # Íæ¼ÒÁ¬½Óid ck_connectid = playerDataManager.check_connect_id(obj=player, post_connect_id=connect_id) if ck_connectid[0] is False: returnData = MessData(ck_connectid[1]) self.write(MessageTools.encode(returnData)) self.finish() return playerSkillInfo = player.getSkillInfo(skillID) skillLevel = playerSkillInfo.skillLevel lastUseTimeStr = playerSkillInfo.last_use_time lastUseTime = GameTools.string2datetime(lastUseTimeStr) skillConstInfo = heroSkillTableManager.getHeroSkill(skillID,skillLevel) cd = skillConstInfo.cd errCode = player.useSkill(skillID) # if GameTools.getDatetimeNow() + datetime.timedelta(seconds = 90) >= lastUseTime + datetime.timedelta(seconds = cd): # errCode = player.useSkill(skillID) # else: # returnData = MessData(ErrorCode.skillincd) #in cd str = MessageTools.encode(returnData) self.write(str) self.finish() if player != None: playerDataManager.checkNeedSave2DB(player.player_id)
def get(self): timeNow = GameTools.getDatetimeNow() # 当前时间 rank = rankManager.rank # pvp排行 # 更新发送时间 rankManager.lastSendRewardTime = timeNow for (rankNum, playerid) in rank.items(): # 获取奖励信息 pvpRankTimerReward = pvpRankTimerRewardTable.getRewardByRankNum(rankNum) rewardType = pvpRankTimerReward.type rewardValue = pvpRankTimerReward.value # 发送奖励0 playerDataManager.sendPVPReward(playerid, rewardType, rewardValue, rankNum) # 发送奖励1 type1 = pvpRankTimerReward.type1 value1 = pvpRankTimerReward.value1 if value1 > 0: playerDataManager.sendPVPReward(playerid, type1, value1, rankNum) self.write("send reward time : %s" % (timeNow)) self.finish()
def __init__(self): self.rank_max_num = 0 self.rank = {} self.lastSendRewardTime = GameTools.getDatetimeNow() - datetime.timedelta(days = 1) print('init rank')
for i in range(2): udid += random.choice('abcdefghkmnpqrstuvwxyz') for i in range(6): udid += random.choice('0123456789') name = '' for i in range(2): name += random.choice(namelist) if random.choice([True, False]): if random.choice([True, False]): name += '.' name += random.choice('ABCDEFGHIJKLMOPQRSTUVWXYZ') if not playerDataManager.isSign(udid): if playerDataManager.isNameUsed(name): continue else: playerDataManager.createAccount(udid,name) player = playerDataManager.loginUseUidd(udid) player.server_date_time = GameTools.getDateTimeNowString() player.cash = 10000000 player.skillUpgrade(0,static.pvp_level_limit) player.saveData2DB() rankManager.addRank(player.player_id) else: continue count -= 1
def getWaveStartTime(self): time = GameTools.string2datetime(self.waveStartTime) return time
def updateTokenTime(self, token): self.token2time[token] = GameTools.getDatetimeNow() player = self.token2player[token] player.last_cmd_time = GameTools.getDateTimeNowString()
def checkNeedSave2DB(self,playerid): if GameTools.getDatetimeNow() > self.playerid2saveTime[playerid] + datetime.timedelta(minutes = 1): player = self.playerid2player[playerid] player.saveData2DB() self.playerid2saveTime[playerid] = GameTools.getDatetimeNow()
def __init__(self,data): self.player_id = data[0] # ID self.name = data[1] # 昵称 self.pvp_medal = int(data[2]) # self.gems = int(data[3]) # 钻石 self.revial = int(data[4]) # 复活币 self.cash = int(data[5]) # 金币 self.game_level = data[6] # 游戏关卡 self.game_wave = data[7] # 游戏波数 self.change_date = data[8] # 修改日期 self.chanllenge_num = data[9] # 剩余挑战次数 self.avatorid = data[10] # self.lootEquipLevel = data[11] self.isBrush = data[12] self.offlineCash = 0 if data[13] == None or data[13] == '': self.last_cmd_time = GameTools.getDateTimeNowString() else: self.last_cmd_time = data[13] self.random_reward_num = data[14] self.random_rweard_date= data[15] self.last_timed_reward_datetime = data[16] self.last_timed_reward_ranknum = data[17] self.last_challenge_datetime = data[18] self.buy_del_challenge_cd_num = data[19] self.daily_datetime = data[20] self.add_chanllenge_num = data[21] self.awake_spell_num = data[22] self.last_free_draw_datetime = data[23] self.recharge_total_num = data[24] self.recharge_get_gifts_status = json.loads(data[25]) self.last_login_date = "%s" %data[26] self.login_num = data[27] self.login_get_gifts_status = json.loads(data[28]) tutorial = json.loads(data[29]) self.Tutor1Finished = tutorial["1"] self.Tutor2Finished = tutorial["2"] self.Tutor3Finished = tutorial["3"] self.Tutor4Finished = tutorial["4"] self.Tutor5Finished = tutorial["5"] try: self.Tutor6Finished = tutorial["6"] except: self.Tutor6Finished = 0 try: self.Tutor7Finished = tutorial["7"] except: self.Tutor7Finished = 0 self.udid = data[30] self.server_date_time = GameTools.getDateTimeNowString() self.token = self.getToken(self.player_id) self.waveStartTime = GameTools.getDateTimeNowString() self.scenesInfo = {} self.connect_id = '' #equipment self.equipments = {}# pos --> equipment self.skills = [] self.partners = [] self.selected_partners = [] self.buffsValue = {} # buf count self.loadEqument() self.loadSkills() self.loadPartners() self.loadSelectPartners() self.loadSceneInfo() self.refreshTimeData() self.pvpBuffs = [] self.loadRankTimedRewardInfo() self.loadPvpBuffs() self.updateDailyData()
def useSkill(self,skillID): playerSkillInfo = self.getSkillInfo(skillID) playerSkillInfo.last_use_time = GameTools.getDateTimeNowString()
def _process(self, params): token = params.get('token') drawtimes = params.get('drawtimes',1) free_draw = params.get('free_draw',0) player = playerDataManager.getPlayerByToken(token) returnData = MessData() if player == None: returnData = MessData(ErrorCode.tokenOutData) else: # Íæ¼Òconnect id¼ì²â connect_id = params.get('connect_id', '') # Íæ¼ÒÁ¬½Óid ck_connectid = playerDataManager.check_connect_id(obj=player, post_connect_id=connect_id) if ck_connectid[0] is False: returnData = MessData(ck_connectid[1]) self.write(MessageTools.encode(returnData)) self.finish() return if free_draw == 1: if GameTools.getDatetimeNow() < GameTools.string2datetime(player.last_free_draw_datetime) + datetime.timedelta(hours = 23): returnData = MessData(ErrorCode.skillincd) str = MessageTools.encode(returnData) self.write(str) self.finish() if player != None: playerDataManager.checkNeedSave2DB(player.player_id) return cost = 0 if drawtimes == 1: if free_draw == 0: cost = int(gloabalBase.getValue('draw1cost')) else: cost = int(gloabalBase.getValue('draw10cost')) if player.costResource(ResourceType.gems,cost): if free_draw == 1: player.last_free_draw_datetime = GameTools.getDateTimeNowString() rewards = [] if drawtimes == 1: rewards = drawRewardManager.draw1Reward(player.game_level) else: rewards = drawRewardManager.draw10Reward(player.game_level) for resourceAndVlue in rewards: itemid = resourceAndVlue.itemid value = resourceAndVlue.value item = itemTable.getItemConstInfo(itemid) resourceId = item.buftype player.addResource(resourceId,value) if item.quliaty > 3: drawHistoryManager.pushIntoHistory(player.name,resourceAndVlue) returnData.data = rewards else: returnData = MessData(ErrorCode.resourceNotEnough) str = MessageTools.encode(returnData) self.write(str) self.finish() if player != None: playerDataManager.checkNeedSave2DB(player.player_id)