Esempio n. 1
0
 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)
Esempio n. 2
0
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)
Esempio n. 3
0
 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
Esempio n. 4
0
 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}
Esempio n. 5
0
    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)