def pushSceneInfo(self,rate): '''给每一个在场景中的玩家推送场景信息 @param rate: int 移动的频率 ''' if not self._canRec: return self.updateAllPlayerLocation(rate) if self._monsters: self.updateAllMonsterLocation() groupState = configure.isteamInstanceTime(20)#组队副本时间判断 guildFightState = fortress.IsWarTime()#国战时间判断 for room in self.rooms: sendlist = [] sceneInfo = pushSceneMessage_pb2.pushSceneMessage() for playerId in room: player = PlayersManager().getPlayerByID(playerId) if not player: continue player.icon.groupIconManager(groupState)#组队战图标管理 player.icon.guildFightManager(guildFightState)#国战图标管理 PlayerPosition = sceneInfo.PlayerPosition.add() PlayerPosition.id = player.baseInfo.id PlayerPosition.name = player.baseInfo.getNickName() PlayerPosition.profession = player.profession.getProfessionName() PlayerPosition.headicon = player.profession.getFigure() GuildInfo = player.guild.getGuildInfo() if GuildInfo: PlayerPosition.guildname = GuildInfo.get('name','') PlayerPosition.figure = player.profession.getSceneFigure() position = player.baseInfo.getDestination() PlayerPosition.x = int(position[0]) PlayerPosition.y = int(position[1]) PlayerPosition.level = player.level.getLevel() PlayerPosition.viptype = player.baseInfo.getType() PlayerPosition.gemlevel = player.pack._equipmentSlot.getGemLevel() sendlist.append(player.getDynamicId()) ###############角色展示宠物的处理################ petremove = player.pet.popLastRemove() for petId in petremove: self.dropPet(petId) for petId in player.matrix._matrixSetting.values(): if petId<=0: continue pet = player.pet.getPet(petId) figure = pet.templateInfo['resourceid'] position = pet.getPosition() PetPosition = sceneInfo.petInfo.add() PetPosition.id = petId PetPosition.name = pet.baseInfo.getName() PetPosition.profession = pet.baseInfo.getName() PetPosition.headicon = figure PetPosition.figure = figure PetPosition.x = int(position[0]) PetPosition.y = int(position[1]) PetPosition.masterId = playerId sceneInfo.sceneId = self._id msg = sceneInfo.SerializeToString() pushApplyMessage(602,msg, sendlist)
def TeamFighting(pid): '''开始多人副本战斗''' from app.scense.core.teamfight.TeamFight import TeamFight from app.scense.applyInterface import teamInstanceDrop if not configure.isteamInstanceTime(17): return teamid=TeamFight().getTeamidByPid(pid) if teamid==0: return{'result':False,'message':Lg().g(260)} teaminfo=TeamFight().getteaminfoByteamid(teamid) if not teaminfo.pid==pid: return{'result':False,'message':Lg().g(261)} if teaminfo.count<2: pushObjectNetInterface.pushOtherMessageByCharacterId(Lg().g(646), [pid]) return{'result':False,'message':Lg().g(262)} PlayerList=teaminfo.players.values()#角色实例列表 typeid=teaminfo.type msgs={}#记录角色获得物品 playeritem={}#记录角色获得物品信息 key:角色id,value:[{'id':5201,'count':2}]物品列表[物品id和物品数量] playerzf=teaminfo.getZfInfo()#角色阵法位置 rs=getInfo(typeid) MosterList=rs.get('MosterList')#怪物实例列表 mosterwz=rs.get('mosterwz')#怪物阵法位置 ItemList=rs.get('ItemList')#物品实例列表 zy=rs.get('zy')#资源id fightinfo=fight_new.DoGroupFight(PlayerList, playerzf, MosterList, mosterwz) if fightinfo.battleResult==1: pklist=teaminfo.players.keys() for pk in pklist: msgs[pk]=u'' ItemList=teamInstanceDrop.getTeamDropListItemidCountByTypeid(typeid) #[{'id':5201,'count':2}] playeritem[pk]=ItemList for item in ItemList: itemTemplateId=item.get('id') iname=dbaccess.all_ItemTemplate[itemTemplateId]['name']#物品名称 msgs[pk]=msgs[pk]+u'%s * %s\n'%(iname,item.get('count')) gm="player.pack.putNewItemsInPackage(%s,%s)"%(itemTemplateId,item.get('count')) # publicnoderemote.callRemote("updateplayerInfo",pk,gm) else:#战斗失败 for pk in teaminfo.players.keys(): msgs[pk]=Lg().g(143) for pk in teaminfo.players.keys(): msg=msgs.get(pk) TeamFight().addfightcount(pk, typeid) pushObjectNetInterface.getzudui_4308(fightinfo, [pk], msg,zy) TeamFight().dismissTeam(teamid)
def CreateTeam(self,player,typeid,wz): '''创建队伍 @param player: obj 角色实例 @param typeid: int 副本类型 @param wz: int 角色所在阵法的位置 ''' if not configure.isteamInstanceTime(player.level.getLevel()): return 0 pid=player.baseInfo.getId()#队长id if not self.iscsxz(pid, typeid): pushObjectNetInterface.pushOtherMessageByCharacterId(Lg().g(645), [pid]) return 0 self.tag+=1 pid=player.baseInfo.getId()#队长id if self.pi.has_key(pid): return 0 self.info[self.tag]=TeamInfo(self.tag,player,typeid,wz)#组队挑战副本类 self.pi[pid]=self.tag#记录角色所在队伍id self.addCXpi(pid) return self.tag
def TeamAddPlayer(self,player,tid,wz): '''角色加入队伍 @param player: obj 角色实例 @param tid: int 要加入队伍的id @param wz: int 阵法位置 ''' #队伍有变动后需要推送队伍信息给所有的成员 if not configure.isteamInstanceTime(player.level.getLevel()): return {'result':False,'message':Lg().g(580),'tid':0} pid=player.baseInfo.getId()#角色id teid= self.pi.get(pid,None)#原始队伍id teaminfo=self.info.get(tid,None)#队伍信息 if not teaminfo:#如果没有队伍信息 pushObjectNetInterface.pushOtherMessageByCharacterId(Lg().g(624), [pid]) return {'result':False,'message':Lg().g(479),'tid':tid} typeid=teaminfo.type if not self.iscsxz(pid, typeid): pushObjectNetInterface.pushOtherMessageByCharacterId(Lg().g(645), [pid]) return {'result':False,'message':Lg().g(645),'tid':tid} if teaminfo.zf[wz]>0: return{'result':False,'message':Lg().g(577),'tid':tid} if teaminfo.count>=5: return{'result':False,'message':Lg().g(578),'tid':tid} if teid: if tid==teid: return{'result':False,'message':Lg().g(579),'tid':tid} else: self.TeamDelPlayer(pid)#退出原始队伍 teaminfo.addTeamPlayer(player, wz) plist=teaminfo.players.keys()#队伍成员id列表 plist.remove(pid) pushObjectNetInterface.team4304(tid, plist) self.pi[pid]=tid self.addCXpi(pid) return {'result':True,'message':Lg().g(166),'tid':tid}
def pushSceneInfo(self, rate): '''给每一个在场景中的玩家推送场景信息 @param rate: int 移动的频率 ''' if not self._canRec: return self.updateAllPlayerLocation(rate) if self._monsters: self.updateAllMonsterLocation() groupState = configure.isteamInstanceTime(20) #组队副本时间判断 guildFightState = fortress.IsWarTime() #国战时间判断 for room in self.rooms: sendlist = [] sceneInfo = pushSceneMessage_pb2.pushSceneMessage() for playerId in room: player = PlayersManager().getPlayerByID(playerId) if not player: continue player.icon.groupIconManager(groupState) #组队战图标管理 player.icon.guildFightManager(guildFightState) #国战图标管理 PlayerPosition = sceneInfo.PlayerPosition.add() PlayerPosition.id = player.baseInfo.id PlayerPosition.name = player.baseInfo.getNickName() PlayerPosition.profession = player.profession.getProfessionName( ) PlayerPosition.headicon = player.profession.getFigure() GuildInfo = player.guild.getGuildInfo() if GuildInfo: PlayerPosition.guildname = GuildInfo.get('name', '') PlayerPosition.figure = player.profession.getSceneFigure() position = player.baseInfo.getDestination() PlayerPosition.x = int(position[0]) PlayerPosition.y = int(position[1]) PlayerPosition.level = player.level.getLevel() PlayerPosition.viptype = player.baseInfo.getType() PlayerPosition.gemlevel = player.pack._equipmentSlot.getGemLevel( ) sendlist.append(player.getDynamicId()) ###############角色展示宠物的处理################ petremove = player.pet.popLastRemove() for petId in petremove: self.dropPet(petId) for petId in player.matrix._matrixSetting.values(): if petId <= 0: continue pet = player.pet.getPet(petId) figure = pet.templateInfo['resourceid'] position = pet.getPosition() PetPosition = sceneInfo.petInfo.add() PetPosition.id = petId PetPosition.name = pet.baseInfo.getName() PetPosition.profession = pet.baseInfo.getName() PetPosition.headicon = figure PetPosition.figure = figure PetPosition.x = int(position[0]) PetPosition.y = int(position[1]) PetPosition.masterId = playerId sceneInfo.sceneId = self._id msg = sceneInfo.SerializeToString() pushApplyMessage(602, msg, sendlist)