def NetConnLost_2(dynamicId): '''loginout''' player = PlayersManager().getPlayerBydynamicId(dynamicId) if not player: return True try: tag = player.baseInfo.getInstancetag() #副本动态Id InstanceManager().dropInstanceById(tag) #如果角色下线的时候在副本中,就清空副本 player.afk.stopMeditation() #在线挂机结算 player.updatePlayerDBInfo() # player.qhtime.dbupdate()#记录角色强化冷却时间 player.nobility.dbupdate() #记录爵位限制信息 player.petShop.dbupdate() #记录宠物商店信息 # publicnoderemote.callRemote('dropPCharacter',player.baseInfo.id) PlayersManager().dropPlayer(player) state = player.baseInfo.getState() if state == 0: sceneId = player.baseInfo.getTown() scene = MapManager().getMapId(sceneId) scene.dropPlayer(player.baseInfo.id) if player.baseInfo.getState() == 0: scene.dropPlayer(player.baseInfo.id) for petId, pet in player.pet._pets.items(): if pet.getFlowFlag(): scene.dropPet(petId) except Exception as ex: log.err(ex) finally: return True
def tiaozhuan(dynamicId,characterid,csz): '''场景间的跳转或者进入副本 ''' player = PlayersManager().getPlayerByID(characterid) if not player: return {'result':False,'message':Lg().g(18)} doorinfo = dbMap.ALL_DOOR_INFO.get(csz)#获取传送门的信息 lastscene = MapManager().getMapId(player.baseInfo.getTown()) if doorinfo.get('functionType')==1:#跳转场景 placeId = doorinfo.get('nextmap') position = (doorinfo.get('init_x'),doorinfo.get('init_y')) player.baseInfo.setTown( placeId) player.baseInfo.setState(0) PlayersManager().addPlayer(player) defencelog_app.isReward(player.baseInfo.id, player.getDynamicId()) scene = MapManager().getMapId(placeId) scenename = scene.getSceneName() chatnoderemote.callRemote('JoinRoom',characterid,placeId,scenename) scene.addPlayer(characterid) player.quest.setNpcList(scene._npclist) player.baseInfo.initPosition(position) scene.pushEnterPlace([dynamicId]) result = {'result':True} else: instanceId = doorinfo.get('famID') result = instance_app.enterInstance1(player,dynamicId, characterid, instanceId,0) if result.get('result'): lastscene.dropPlayer(characterid)
def NetConnLost_2(dynamicId): '''loginout''' player = PlayersManager().getPlayerBydynamicId(dynamicId) if not player: return True try: tag=player.baseInfo.getInstancetag() #副本动态Id InstanceManager().dropInstanceById(tag)#如果角色下线的时候在副本中,就清空副本 player.afk.stopMeditation()#在线挂机结算 player.updatePlayerDBInfo() # player.qhtime.dbupdate()#记录角色强化冷却时间 player.nobility.dbupdate()#记录爵位限制信息 player.petShop.dbupdate()#记录宠物商店信息 # publicnoderemote.callRemote('dropPCharacter',player.baseInfo.id) PlayersManager().dropPlayer(player) state = player.baseInfo.getState() if state == 0: sceneId = player.baseInfo.getTown() scene = MapManager().getMapId(sceneId) scene.dropPlayer(player.baseInfo.id) if player.baseInfo.getState()==0: scene.dropPlayer(player.baseInfo.id) for petId,pet in player.pet._pets.items(): if pet.getFlowFlag(): scene.dropPet(petId) except Exception as ex: log.err(ex) finally: return True
def FightWithPlayer(dynamicId, characterId, tid): '''玩家PK @param dynamicId: int 客户端的动态id @param characterId: int 角色的id @param tid: int 对方的id ''' res = CanDoServer(characterId) if not res['result']: return res player = PlayersManager().getPlayerByID(characterId) if not player or not player.CheckClient(dynamicId): return {'result': False, 'message': Lg().g(18)} toplayer = PlayersManager().getPlayerByID(tid) if not toplayer: return {'result': False, 'message': Lg().g(66)} guildid = player.guild.getID() tguildid = toplayer.guild.getID() town = player.baseInfo.getTown() ttown = toplayer.baseInfo.getTown() if not player.pvp.checktime(): return {'result': False, 'message': u"PK战斗CD中"} if not toplayer.pvp.checktime(): return {'result': False, 'message': u"对方PK战斗CD中"} if town != ttown: return {'result': False, 'message': u"不在统一场景无法进行战斗"} if player.guild.getID() == toplayer.guild.getID() or 0 in [ guildid, tguildid ]: return {'result': False, 'message': u"不允许本国之间战斗"} level = player.level.getLevel() tlevel = player.level.getLevel() if level < 25 or tlevel < 25: return {'result': False, 'message': u"低于25级不能进行战斗"} player.pvp.recordtime() toplayer.pvp.recordtime() data = DoFight([player], [toplayer], now_X=550) #战后的处理 battleresult = data.battleResult nowscene = MapManager().getMapId(ttown) #获取当前场景 if battleresult == 1: #如果主动方胜利 nowscene.dropPlayer(tid) #在当前场景中移除被攻击的玩家 toscene = MapManager().getMapId(1000) #扔回其他场景 toscene.addPlayer(tid) toscene.pushEnterPlace([toplayer.dynamicId]) toplayer.baseInfo.setTown(1000) else: nowscene.dropPlayer(characterId) #在当前场景中移主动攻击的玩家 toscene = MapManager().getMapId(1000) #扔回其他场景 toscene.addPlayer(characterId) toscene.pushEnterPlace([player.dynamicId]) player.baseInfo.setTown(1000) return { 'result': True, 'data': data, 'sendlist': [dynamicId, toplayer.dynamicId] }
def FightWithPlayer(dynamicId,characterId,tid): '''玩家PK @param dynamicId: int 客户端的动态id @param characterId: int 角色的id @param tid: int 对方的id ''' res = CanDoServer(characterId) if not res['result']: return res player = PlayersManager().getPlayerByID(characterId) if not player or not player.CheckClient(dynamicId): return {'result':False,'message':Lg().g(18)} toplayer = PlayersManager().getPlayerByID(tid) if not toplayer: return {'result':False,'message':Lg().g(66)} guildid = player.guild.getID() tguildid = toplayer.guild.getID() town = player.baseInfo.getTown() ttown = toplayer.baseInfo.getTown() if not player.pvp.checktime(): return {'result':False,'message':u"PK战斗CD中"} if not toplayer.pvp.checktime(): return {'result':False,'message':u"对方PK战斗CD中"} if town!=ttown: return {'result':False,'message':u"不在统一场景无法进行战斗"} if player.guild.getID()== toplayer.guild.getID() or 0 in [guildid,tguildid]: return {'result':False,'message':u"不允许本国之间战斗"} level = player.level.getLevel() tlevel = player.level.getLevel() if level<25 or tlevel<25: return {'result':False,'message':u"低于25级不能进行战斗"} player.pvp.recordtime() toplayer.pvp.recordtime() data = DoFight([player], [toplayer], now_X=550) #战后的处理 battleresult = data.battleResult nowscene = MapManager().getMapId(ttown)#获取当前场景 if battleresult==1:#如果主动方胜利 nowscene.dropPlayer(tid)#在当前场景中移除被攻击的玩家 toscene = MapManager().getMapId(1000)#扔回其他场景 toscene.addPlayer(tid) toscene.pushEnterPlace([toplayer.dynamicId]) toplayer.baseInfo.setTown(1000) else: nowscene.dropPlayer(characterId)#在当前场景中移主动攻击的玩家 toscene = MapManager().getMapId(1000)#扔回其他场景 toscene.addPlayer(characterId) toscene.pushEnterPlace([player.dynamicId]) player.baseInfo.setTown(1000) return {'result':True,'data':data,'sendlist':[dynamicId,toplayer.dynamicId]}
def DropCharacterInNode_612(dynamicId,characterId): '''移除角色在当前场景(副本)服务中的实例 ''' player = PlayersManager().getPlayerByID(characterId) if not player: return False if player.baseInfo.getState()==0: placeId = player.baseInfo.getTown() scene = MapManager().getMapId(placeId) scene.dropPlayer(characterId) for petId in player.matrix._matrixSetting.values(): if petId>0: scene.dropPet(petId) player.stopAllTimer() PlayersManager().dropPlayerByID(characterId) return True
def goto(characterId,argument): '''跳转场景 @param characterId: int 角色的ID ''' if len(argument)<1: return player = PlayersManager().getPlayerByID(characterId) if not player: return from app.scense.core.map.MapManager import MapManager placeId = int(argument[0]) lastscene = MapManager().getMapId(player.baseInfo.getTown()) scene = MapManager().getMapId(placeId) if not scene: return player.baseInfo.setTown( placeId) player.baseInfo.setState(0) player.baseInfo.initPosition((300,300)) scene.addPlayer(characterId) player.quest.setNpcList(scene._npclist) dynamicId = player.dynamicId scene.pushEnterPlace([dynamicId]) lastscene.dropPlayer(characterId)
def getBattlePlayer(instanceid, cid): '''副本殖民战斗,返回对手实例''' from app.scense.core.instance.Instance import Instance from app.scense.core.map.MapManager import MapManager player = PlayersManager().getPlayerByID(cid) #获取角色实例 if player.baseInfo._state != 0: #如果在普通场景 return False, Lg().g(144), False # cityid=InstanceGroupManage().getcityidBygroupid(instanceid) # if player.baseInfo._town!=cityid: # pushObjectNetInterface.pushOtherMessage(905, u'只能殖民本场景的副本', [player.getDynamicId()]) # return False,u'只能殖民本场景的副本',False if player.level._level <= 12: return False, Lg().g(145), False guildLevel = player.guild.getGuildLevel() #当前角色行会等级 if guildLevel < 1: #没有国 return False, Lg().g(146), False zmcount = int(math.ceil((guildLevel / 5.0))) #可殖民副本数量 yydata = 0 #该角色已殖民数量 for info in ColonizeManage().getI().values(): if info['pid'] == cid: yydata += 1 if zmcount <= yydata: pushObjectNetInterface.pushOtherMessage(905, Lg().g(147), [player.getDynamicId()]) return False, Lg().g(147), False player.schedule.noticeSchedule(17, goal=1) tlist = [] sceneId = player.baseInfo.getTown() scene = MapManager().getMapId(sceneId) scene.dropPlayer(cid) allInfo = instance_app.allInfo info = allInfo.get(instanceid) downlevel = info.get('downlevle', 0) #殖民等级 if downlevel > player.level.getLevel(): #如果角色等级<副本等级要求 return False, Lg().g(148), False instancegroupid = InstanceGroupManage().getFristInstanceBy( instanceid) #根据副本id获取副本组id pid = ColonizeManage().getpidByinstanceid( instancegroupid) #通过副本组id获得副本殖民者id mosterid = 15001 if pid < 1: #如果此副本没有被殖民 try: mosterid = instanceColonizeChallenge.getColonizeChallengeByMosterid( instancegroupid) #获取怪物id if mosterid < 0: log.err(u'殖民战斗当中副本组中没有配置对应的殖民挑战怪物,殖民副本组id为%d' % instancegroupid) except Exception as e: log.err(u'殖民战斗当中副本组中没有配置对应的殖民挑战怪物,殖民副本组id为%d' % instancegroupid) log.err(e.message) tlist.append(Monster(templateId=mosterid)) else: #如果此副本被殖民了 py = PlayersManager().getPlayerByID(pid) if not py: py = PlayerCharacter(pid) tlist.append(py) instance = Instance(instanceid) #副本 scene = instance.getScene(instance._inSceneid) #第一个场景实例 del instance zon = random.randint(500, scene._width - 500) return tlist, zon, scene.formatSceneInfo() #场景资源id
def getBattlePlayer(instanceid, cid): """副本殖民战斗,返回对手实例""" from app.scense.core.instance.Instance import Instance from app.scense.core.map.MapManager import MapManager player = PlayersManager().getPlayerByID(cid) # 获取角色实例 if player.baseInfo._state != 0: # 如果在普通场景 return False, Lg().g(144), False # cityid=InstanceGroupManage().getcityidBygroupid(instanceid) # if player.baseInfo._town!=cityid: # pushObjectNetInterface.pushOtherMessage(905, u'只能殖民本场景的副本', [player.getDynamicId()]) # return False,u'只能殖民本场景的副本',False if player.level._level <= 12: return False, Lg().g(145), False guildLevel = player.guild.getGuildLevel() # 当前角色行会等级 if guildLevel < 1: # 没有国 return False, Lg().g(146), False zmcount = int(math.ceil((guildLevel / 5.0))) # 可殖民副本数量 yydata = 0 # 该角色已殖民数量 for info in ColonizeManage().getI().values(): if info["pid"] == cid: yydata += 1 if zmcount <= yydata: pushObjectNetInterface.pushOtherMessage(905, Lg().g(147), [player.getDynamicId()]) return False, Lg().g(147), False player.schedule.noticeSchedule(17, goal=1) tlist = [] sceneId = player.baseInfo.getTown() scene = MapManager().getMapId(sceneId) scene.dropPlayer(cid) allInfo = instance_app.allInfo info = allInfo.get(instanceid) downlevel = info.get("downlevle", 0) # 殖民等级 if downlevel > player.level.getLevel(): # 如果角色等级<副本等级要求 return False, Lg().g(148), False instancegroupid = InstanceGroupManage().getFristInstanceBy(instanceid) # 根据副本id获取副本组id pid = ColonizeManage().getpidByinstanceid(instancegroupid) # 通过副本组id获得副本殖民者id mosterid = 15001 if pid < 1: # 如果此副本没有被殖民 try: mosterid = instanceColonizeChallenge.getColonizeChallengeByMosterid(instancegroupid) # 获取怪物id if mosterid < 0: log.err(u"殖民战斗当中副本组中没有配置对应的殖民挑战怪物,殖民副本组id为%d" % instancegroupid) except Exception as e: log.err(u"殖民战斗当中副本组中没有配置对应的殖民挑战怪物,殖民副本组id为%d" % instancegroupid) log.err(e.message) tlist.append(Monster(templateId=mosterid)) else: # 如果此副本被殖民了 py = PlayersManager().getPlayerByID(pid) if not py: py = PlayerCharacter(pid) tlist.append(py) instance = Instance(instanceid) # 副本 scene = instance.getScene(instance._inSceneid) # 第一个场景实例 del instance zon = random.randint(500, scene._width - 500) return tlist, zon, scene.formatSceneInfo() # 场景资源id