def NetConnLost_2(dynamicId): '''loginout ''' player = PlayersManager().getPlayerBydynamicId(dynamicId) if not player: return True player.updatePlayerDBInfo() # 更新角色在数据库中的数据 PlayersManager().dropPlayer(player) # 移除角色 return True
def doWhenStop(): """服务器关闭前的处理 """ for player in PlayersManager()._players.values(): # 遍历所有玩家 try: player.updatePlayerDBInfo() # 将所有玩家更新到数据库 PlayersManager().dropPlayer(player) # 移除玩家 except Exception as ex: log.err(ex)
def doWhenStop(): """服务器关闭前的处理 """ for player in PlayersManager()._players.values(): try: player.updatePlayerDBInfo() PlayersManager().dropPlayer(player) except Exception as ex: log.err(ex)
def NetConnLost_2(dynamicId): """loginout """ player = PlayersManager().getPlayerBydynamicId(dynamicId) if not player: return True player.updatePlayerDBInfo() PlayersManager().dropPlayer(player) return True
def enter_scene_remote(dynamic_id, character_id): """进入场景""" player = PlayersManager().get_player_by_id(character_id) if not player: player = PlayerCharacter(character_id, dynamic_id=dynamic_id) init_player(player) PlayersManager().add_player(player) responsedata = GameLoginResponse() responsedata.res.result = True responsedata.id = player.base_info.id responsedata.nickname = player.base_info.base_name responsedata.level = player.level.level responsedata.exp = player.level.exp responsedata.coin = player.finance.coin responsedata.gold = player.finance.gold responsedata.hero_soul = player.finance.hero_soul responsedata.junior_stone = player.finance.junior_stone responsedata.middle_stone = player.finance.middle_stone responsedata.high_stone = player.finance.high_stone responsedata.fine_hero = player.last_pick_time.fine_hero responsedata.excellent_hero = player.last_pick_time.excellent_hero responsedata.fine_equipment = player.last_pick_time.fine_equipment responsedata.excellent_equipment = player.last_pick_time.excellent_equipment responsedata.pvp_times = player.pvp_times responsedata.combat_power = player.line_up_component.combat_power if player.guild.g_id != 0: responsedata.guild_id = player.guild.g_id responsedata.vip_level = player.vip_component.vip_level # 体力 responsedata.stamina = player.stamina.stamina responsedata.get_stamina_times = player.stamina.get_stamina_times responsedata.buy_stamina_times = player.stamina.buy_stamina_times responsedata.last_gain_stamina_time = player.stamina.last_gain_stamina_time responsedata.server_time = int(time.time()) responsedata.soul_shop_refresh_times = player.soul_shop.refresh_times logger.debug("character info:----------------------") logger.debug("vip_level:%d", player.vip_component.vip_level) logger.debug("stamina:%d", player.stamina.stamina) logger.debug("coin:%d", player.finance.coin) logger.debug("gold:%d", player.finance.gold) logger.debug("hero_soul:%d", player.finance.hero_soul) logger.debug("soul_shop_refresh_times:%d", player.soul_shop.refresh_times) # GlobalObject().remote['gate']['world'].on_test_remote('43432', 4324) return responsedata.SerializeToString()
def GetOnePetInfo(dynamicId,characterId, petId,masterId): """获取单个武将的信息""" player = PlayersManager().getPlayerByID(characterId) if not player: return {'result':False,'message':u""} toplayer = PlayersManager().getPlayerByID(masterId) if not toplayer: return {'result':False,'message':u""} else: pet = toplayer.pet.getPet(petId) return {'result':True,'data':pet}
def GetOnePetInfo(dynamicId,characterId, petId,masterId): '''获取单个武将的信息''' # 这里的 masterId??? characterId就够了吧 player = PlayersManager().getPlayerByID(characterId) if not player: return {'result':False,'message':u""} toplayer = PlayersManager().getPlayerByID(masterId) # 根据角色id获取玩家角色实例 if not toplayer: return {'result':False,'message':u""} else: pet = toplayer.pet.getPet(petId) return {'result':True,'data':pet}
def sendMail(dynamicId, characterId, playerName, title, content): '''添加邮件 @param dynamicId: int 客户端的动态id @param characterId: int 角色的id @param playerName: str 发送人的名称 @param content: str 邮件内容 @param title: str 标题 ''' player = PlayersManager().getPlayerByID(characterId) if not player or not player.CheckClient(dynamicId): return {'result': False, 'message': u""} if not dbShieldWord.checkIllegalChar(title): return {'result': False, 'message': u""} if not dbShieldWord.checkIllegalChar(content): return {'result': False, 'message': u""} if len(title) > 12: return {'result': False, 'message': u""} toId = dbCharacter.getCharacterIdByNickName(playerName) if not toId: return {'result': False, 'message': u""} if toId[0] == characterId: return {'result': False, 'message': u""} result = player.mail.sendMail(toId[0], title, content) if result: return {'result': True, 'message': u""} return {'result': False, 'message': u""}
def wrapper(dynamic_id, *args, **kwargs): player = PlayersManager().get_player_by_dynamic_id(dynamic_id) if not player or not player.check_dynamic_id: return {'result': False, 'result_no': 1, 'message': u''} kwargs['player'] = player ret = func(*args, **kwargs) return ret
def callTarget(self, targetKey, *args, **kw): target = self.getTarget(targetKey) if not target: logger.error('command %s not Found on service' % str(targetKey)) print self._targets return None # if targetKey not in self.unDisplay: # logger.info("call method %s on service[%s]" % # (target.__name__, self._name)) t = time.time() try: dynamic_id = args[0] # logger.debug('key and dynamic_id,%s,%s', dynamic_id, targetKey) if targetKey != 'enter_scene_remote': _player = PlayersManager().get_player_by_dynamic_id(dynamic_id) # print 'find player:', _player if not _player: return {'result': False, 'result_no': 1, 'message': u''} args = args[1:] kw['player'] = _player response = target(*args, **kw) else: response = target(*args, **kw) except Exception, e: logger.exception(e) return None
def GuYongHaoYou(self, tid): '''雇用好友 ''' characterId = self._owner.baseInfo.id if tid == characterId: return {'result': False, 'messge': u'不能雇用自己'} mcha = McharacterManager().getMCharacterById(tid) if not mcha: return {'result': False, 'messge': u'好友信息不存在'} characterId = self._owner.baseInfo.id self.addFriend(characterId, tid) if tid in self._guyong: return {'result': False, 'messge': u'已经被雇用'} from app.game.core.PlayersManager import PlayersManager from app.game.core.character.PlayerCharacter import PlayerCharacter toplayer = PlayersManager().getPlayerByID(tid) if not toplayer: toplayer = PlayerCharacter(tid) price = toplayer.level.getLevel() * 1000 if self._owner.finance.getCoin() < price: return {'result': False, 'messge': u'资金不足无法雇用'} self._guyong.add(tid) #添加到雇用列表 characterId = self._owner.baseInfo.id self._owner.finance.addCoin(-price) dbFriend.UpdateGuYongState(characterId, tid, 1) return {'result': True, 'messge': u'雇用成功'}
def SettingMatrix(dynamicId,characterId,petId,chatype,operationType,fromPos,toPos): """阵法设置""" player = PlayersManager().getPlayerByID(characterId) if not player: return {'result':False,'message':u""} result = player.matrix.updateMatrix(petId,chatype,operationType,fromPos,toPos) return result
def SettingMatrix(dynamicId, characterId, setting): '''阵法设置''' player = PlayersManager().getPlayerByID(characterId) if not player: return {'result': False, 'message': u""} result = player.matrix.updateMatrix(setting) return result
def enterPlace_601(dynamicId, characterId, player): '''进入场景''' if not player: player = PlayerCharacter(characterId, dynamicId=dynamicId) PlayersManager().addPlayer(player) now = datetime.datetime.now().strftime("%y-%m-%d %H:%M:%S") print('time', now) result = dbCharacter.setlogintime(characterId) print result playerinfo = player.formatInfo() responsedata = { 'message': 'hasrole', 'result': True, 'data': { 'cid': playerinfo['id'], 'name': playerinfo['nickname'], 'level': playerinfo['level'], 'viplevel': playerinfo['viplevel'], 'exp': playerinfo['exp'], # 'maxexp':playerinfo['maxExp'], 'coin': playerinfo['coin'], 'zuanshi': playerinfo['gold'], 'tili': playerinfo['energy'], 'sex': playerinfo['sex'] } } print responsedata return True
def doFight(self,characterId): '''执行战斗 @param characterId: int 对手的ID ''' if self.surplustimes<=0: return {'result':False,'message':u"竞技场今日战斗次数已满"} from app.game.core.character.PlayerCharacter import PlayerCharacter from app.game.core.PlayersManager import PlayersManager from app.game.core.fight.fight import DoFight player = PlayersManager().getPlayerByID(characterId) if not player: player = PlayerCharacter(characterId) nowHp = self._owner.attribute.getHp() player.attribute.Restoration() self._owner.attribute.Restoration() fig = DoFight([self._owner], [player], 1000) self.afterFight(fig.battleResult,player) self._owner.attribute.setHp(nowHp) self.lasttime = datetime.datetime.now()#更新最后战斗的时间 pid = self._owner.baseInfo.id props = {'lasttime':str(self.lasttime)} dbarena.updateCharacterArenaInfo(pid, props) setData = {'coin':0,'exp':0,'star':0, 'item':[],'huoli':0} return {'result':True,'data':{'fight':fig,'setData':setData}}
def GetPetMatrixList(dynamicId,characterId): """获取阵法设置""" player = PlayersManager().getPlayerByID(characterId) if not player: return {'result':False,'message':u""} data = player.matrix.getMatrixListSetting() return {'result':True,'data':data}
def getItemsInEquipSlotNew(dynamicId, characterId): '''获取角色的装备栏信息 @param dynamicId: int 客户端的id @param characterId: int 角色的id ''' player = PlayersManager().getPlayerByID(characterId) if not player or not player.CheckClient(dynamicId): return {'result': False, 'message': ""} equipmentList = player.pack.getEquipmentSlotItemList() keys_copy = dict(equipmentList) equipmentList_copy = [] for position in range(1, 7): item = keys_copy.get(position, None) if item: _item = {} _item['itemid'] = item.baseInfo.id _item['icon'] = item.baseInfo.getItemTemplateInfo().get('icon', 0) _item['tempid'] = item.baseInfo.getItemTemplateId() _item['exp'] = item.exp iteminfo = {'pos': position, 'item': _item} equipmentList_copy.append(iteminfo) playerInfo = player.formatInfoForWeiXin() data = {} data['equip'] = equipmentList_copy data['attack'] = playerInfo['attack'] data['fangyu'] = playerInfo['fangyu'] data['minjie'] = playerInfo['minjie'] return {'result': True, 'message': u'', 'data': data}
def dailytaskreward(characterId, dynamicId, dtaskId): '''日常任务奖励''' player = PlayersManager().getPlayerByID(characterId) taskinfo = dbTask.getpointedDailyTaskInfo(characterId, dtaskId) print taskinfo rewardlist = {} if taskinfo[0]['ifachieved'] == 1: if dtaskId == 100001: #在线30min rewardlist.update({"Gold": 10}) rewardlist.update({"Coin": 10000}) RewardCleanOut(dynamicId, characterId, rewardlist) resutl = dbTask.setDailyTaskrInfo(characterId, 100001, 1) result = RewardCleanOut(dynamicId, characterId, rewardlist) return {'message': resutl} if dtaskId == 100010: #强化一次装备 rewardlist.update({"stone": 2}) RewardCleanOut(dynamicId, characterId, rewardlist) i = 1 resutl = dbTask.setDailyTaskrInfo(characterId, 100010, int(i)) result = RewardCleanOut(dynamicId, characterId, rewardlist) return {'message': resutl} return False
def getItemsInEquipSlotNew(dynamicId, characterId): '''获取角色的装备栏信息 @param dynamicId: int 客户端的id @param characterId: int 角色的id ''' player = PlayersManager().getPlayerByID(characterId) if not player or not player.CheckClient(dynamicId): return {'result': False, 'message': ""} equipmentList = player.pack.getEquipmentSlotItemList() keys_copy = dict(equipmentList) equipmentList_copy = [] for position in range(0, 8): item = keys_copy.get(position, None) if item: _item = {} _item['id'] = item.baseInfo.id _item['strengthen'] = dbItems.getItem( characterId, item.baseInfo.id)[0]['strengthen'] _item['tempid'] = item.baseInfo.getItemTemplateId() #_item['pos'] = position #_item['item'] = _item #_item['stacks'] = item.pack.getStack iteminfo = {'pos': position, 'item': _item} equipmentList_copy.append(iteminfo) #playerInfo = player.formatInfoForWeiXin() #data = {} #data['equip'] = equipmentList_copy #data['attack'] = playerInfo['attack'] #data['fangyu'] = playerInfo['fangyu'] #data['blood'] = playerInfo['blood'] return {'result': True, 'message': u'', 'data': equipmentList_copy}
def GetCompoundItem(dynamicId, characterId, tempid): '''获取当前碎片能合成的物品的信息 ''' player = PlayersManager().getPlayerByID(characterId) if not player or not player.CheckClient(dynamicId): return {'result': False, 'message': u""} suipianinfo = dbItems.all_ItemTemplate.get(tempid) if not suipianinfo: return {'result': False, 'message': u"碎片信息不存在"} newtempid = suipianinfo.get('compound', 0) newiteminfo = dbItems.all_ItemTemplate.get(newtempid) if not newiteminfo: return {'result': False, 'message': u"该物品不能合成"} response = {} info = {} info['itemid'] = 0 info['icon'] = newiteminfo['icon'] info['itemname'] = newiteminfo['name'] info['itemdesc'] = newiteminfo['description'] info['tempid'] = newiteminfo['id'] info['qlevel'] = 0 info['attack'] = newiteminfo['basePhysicalAttack'] info['fangyu'] = newiteminfo['basePhysicalDefense'] info['minjie'] = newiteminfo['baseSpeedAdditional'] info['tili'] = newiteminfo['baseHpAdditional'] info['price'] = newiteminfo['buyingRateCoin'] info['stack'] = 1 info['qh'] = 1 if newiteminfo['bodyType'] > 0 else 0 response['hcprice'] = suipianinfo.get('comprice', 0) response['iteminfo'] = info return {'result': True, 'message': u"", 'data': response}
def GetPetListInfo(dynamicId,characterId): """获取角色的武将列表信息""" player = PlayersManager().getPlayerByID(characterId) if not player: return {'result':False,'message':u""} petList = player.pet.getCharacterPetListInfo() return {'result':True,'data':petList}
def roleInfo(dynamicId, characterId): '''获取角色的状态栏信息 @param userId: int 用户id @param characterId: 角色的id ''' player = PlayersManager().getPlayerBydynamicId(dynamicId) if dynamicId != player.getDynamicId(): return {'result': False, 'message': ""} playerinfo = player.formatInfo() responsedata = { 'result': True, 'message': '', 'data': { 'characterId': playerinfo['id'], 'rolename': playerinfo['nickname'], 'level': playerinfo['level'], 'exp': playerinfo['exp'], 'maxexp': playerinfo['maxExp'], 'coin': playerinfo['coin'], 'gold': playerinfo['gold'], 'tili': playerinfo['maxHp'], 'tilimax': playerinfo['maxHp'], 'huoli': playerinfo['energy'], 'maxhuoli': playerinfo['energy'], 'profession': playerinfo['profession'] } } return responsedata
def sendMail(dynamicId, characterId, playerName, title, content): '''添加邮件 @param dynamicId: int 客户端的动态id @param characterId: int 角色的id @param playerName: str 发送人的名称 @param content: str 邮件内容 @param title: str 标题 ''' player = PlayersManager().getPlayerByID(characterId) if not player or not player.CheckClient(dynamicId): return {'result': False, 'message': u""} if not dbShieldWord.checkIllegalChar(title): # 查询 title 是否存在屏蔽词 return {'result': False, 'message': u""} if not dbShieldWord.checkIllegalChar(content): # 查询 content 是否存在屏蔽词 return {'result': False, 'message': u""} if len(title) > 12: # 标题长度限制 return {'result': False, 'message': u""} toId = dbCharacter.getCharacterIdByNickName( playerName) # 根据昵称获取 角色(发信人) 的id if not toId: return {'result': False, 'message': u""} if toId[0] == characterId: return {'result': False, 'message': u""} result = player.mail.sendMail( toId[0], title, content) # 发送邮件(这里是保存到数据库,只有当收信人打开邮箱,才会收到从服务器更新) if result: return {'result': True, 'message': u""} return {'result': False, 'message': u""}
def getPetSkillSetting(dynamicId, characterId, pet_id): '''获取伙伴技能设置 ''' player = PlayersManager().getPlayerByID(characterId) if not player or not player.CheckClient(dynamicId): return {'result': False, 'message': u""} return player.skill.getPetSkillSetting(pet_id)
def getSkillTreeInfo(dynamicId, characterId): """获取所有技能信息 """ player = PlayersManager().getPlayerByID(characterId) if not player or not player.CheckClient(dynamicId): return {'result': False, 'message': u""} return player.skill.getSkillTreeInfo()
def updateSkillSetting(dynamicId, characterId, pet_id, skill_id, space): '''更新技能设置 ''' player = PlayersManager().getPlayerByID(characterId) if not player or not player.CheckClient(dynamicId): return {'result': False, 'message': u""} return player.skill.equipSkill(pet_id, skill_id, space)
def learnSkill(dynamicId, characterId, skill_id): '''学习技能 ''' player = PlayersManager().getPlayerByID(characterId) if not player or not player.CheckClient(dynamicId): return {'result': False, 'message': u""} return player.skill.learnSkill(skill_id)
def kick_807(data, player): """踢人 """ args = KickRequest() args.ParseFromString(data) response = GuildCommonResponse() p_ids = args.p_ids m_g_id = player.guild.g_id if player.guild.position != 1: response.result = False response.message = "您不是会长" return response.SerializeToString() data1 = tb_guild_info.getObjData(m_g_id) guild_obj = Guild() guild_obj.init_data(data1) p_list = guild_obj.p_list for p_id in p_ids: for num in range(2, 6): p_list1 = p_list.get(num) if p_list1 and p_list1.count(p_id) == 1: p_list1.remove(p_id) p_list.update({num: p_list1}) guild_obj.p_list = p_list guild_obj.p_num -= 1 guild_obj.save_data() character_guild = tb_character_guild.getObjData(p_id) info = character_guild.get("info") if info.get("g_id") == 0: response.result = False response.message = "此玩家不在公会" return response.SerializeToString() data = { 'info': { 'g_id': 0, 'position': 5, 'contribution': 0, 'all_contribution': 0, 'k_num': 0, 'worship': 0, 'worship_time': 1, 'exit_time': time.time() } } p_guild_data = tb_character_guild.getObj(p_id) p_guild_data.update_multi(data) # 踢出公会聊天室 invitee_player = PlayersManager().get_player_by_id(p_id) if invitee_player: # 在线 remote_gate.logout_guild_chat_remote( invitee_player.dynamic_id) invitee_player.guild.g_id = 0 invitee_player.guild.save_data() remote_gate.push_object_remote(814, args.SerializeToString(), [invitee_player.dynamic_id]) response.result = True response.message = "踢人成功" return response.SerializeToString()
def getLearnedSkills(dynamicId, characterId): """获取所有技能信息 """ player = PlayersManager().getPlayerByID(characterId) if not player or not player.CheckClient(dynamicId): return {'result': False, 'message': u""} learned_skills = player.skill.getSkills() return {"result": True, "data": learned_skills}
def zhangjieFight(dynamicId, characterId, zhangjieid): """章节战斗 """ player = PlayersManager().getPlayerByID(characterId) if not player or not player.CheckClient(dynamicId): return {'result': False, 'message': ""} fightresult = player.zhanyi.doZhangJie(zhangjieid) return fightresult