Example #1
0
def addInstance_record_id(characterid,instanceid,score=-1):
    '''添加角色通关记录
    @param characterid:int 角色id
    @param instanceid: int 副本id 
    '''
    player=PlayersManager().getPlayerByID(characterid) #当前角色实例
    tag=player.baseInfo.getInstancetag()
    instance=InstanceManager().getInstanceByIdTag(tag)
    
    sid=dbInstance_record_id.getisInstanceRecord(characterid, instanceid)
    if not sid: #如果通关记录里面没有,加入通关副本
        if not player.instance.addClean(instanceid):#如果添加通关副本成功
#        if not dbInstance_record_id.insertInstanceRecord(characterid, instanceid):#如果添加通关副本成功
            log.err(u"instance_app/addInstance_record_id 添加通关记录失败")
        else:
            if instance.islq:
                player.finance.updateAddMorale(20,True)
                instance.islq=False
            player.schedule.noticeSchedule(19,goal = 1)
    else:
        if instance.islq:
            player.finance.updateAddMorale(2,True)
            instance.islq=False
    
    player.daily.noticeDaily(6,instanceid,1)
Example #2
0
def iteranceInstance(characterId):
    '''重打副本'''
    player= PlayersManager().getPlayerByID(characterId) #获取角色
    if not player:
        return {'result':False,'message':Lg().g(18)}
    instanceId=player.baseInfo.getInstanceid() #获取角色所在副本Id
    
    tag=player.baseInfo.getInstancetag() #副本动态Id
    Instance=InstanceManager().getInstanceByIdTag(tag) #获取 副本
    if not Instance:
        log.err(u"不存在副本动态id %s"%tag)
    Instance.initInstance() #初始化副本
    #start角色有队伍境况下组队进入副本
    loaduser=[]#记录需要推送消息的角色对象
    if player.teamcom.amisteam(): #如果角色有队伍
        if player.teamcom.amITeamLeader(): #判断是否是队长
            sceneid=player.baseInfo.getLocation() #获取队长当前场景Id
            members=player.teamcom.getMyTeamMember() #获取队伍成员列表 
            if members:
                if len(members)>1:
                    for py1 in members: #遍历所有队员
                        if py1.baseInfo.getLocation()==sceneid:#判断当前角色是否和队长在同一个场景中
                            enterplay(py1,instanceId,Instance) #角色进入副本操作
                        else:#若该成员和队长不在同一场景,推送是否进入副本提示框消息
                            loaduser.append(py1.getDynamicId())
                    pushObjectNetInterface.pushLeaderInstance(loaduser,player.baseInfo.getId())
        else:#如果请求的人有队伍并且不是队长
            return {'result':False,'message':u'在队伍中的成员中只有队长才能开启副本'}
    #end  角色有队伍境况下组队进入副本 
    else:
        enterplay(player,instanceId,Instance) #角色进入副本操作
    data = {'placeId':Instance.getSceneResourceidByid(Instance._inSceneid)}
    return {'result':True,'message':u'进入副本','data':data}
Example #3
0
def dropInstanceAllplayer(did,tag):
    '''如果副本内没有角色那么销毁该副本
    @param did: int 副本id
    @param tag: int 副本动态id
    '''
    Instan1=InstanceManager().getInstanceByIdTag(tag)#获取副本实例
    if not Instan1.ishavingplayer():#如果副本内没有角色的话
        InstanceManager().dropInstanceById(tag)
Example #4
0
def moveInScene(dynamicId, characterId, sceneId, x, y):
    '''在场景中移动
    @param dynamicId: int 客户端的id
    @param characterId: int 角色的id
    @param x: int 移动到的x坐标
    @param y: int 移动到的y坐标 
    '''
    player = PlayersManager().getPlayerByID(characterId)
    if not player:
        return
    if x == -1 and y == -1:
        if player.baseInfo.getState() == 1:  #如果角色在副本
            sceneId = player.baseInfo.getLocation()  #获取角色所在场景Id
            #            id=player.baseInfo.getInstanceid() #副本模板Id
            dtid = player.baseInfo.getInstancetag()  #副本动态Id
            instance = InstanceManager().getInstanceByIdTag(dtid)  #获取副本实例
            sceneId = instance._Scenes.keys()[0]
            nowScene = instance._Scenes[sceneId]  #获取场景实例
            nowScene.pushNowScenePosition(dynamicId, characterId)
        else:
            scene = MapManager().getMapId(sceneId)
            scene.pushNowScenePosition(dynamicId, characterId)
        return
    if not player:
        return {'result': False, 'message': Lg().g(18)}
    if player.baseInfo.getStatus() != 1:
        return {
            'result': False,
            'message': u'您正处于%s状态' % player.baseInfo.getStatusName()
        }
    player.baseInfo.updateDestination((x, y))
Example #5
0
def FightInScene(dynamicId, characterId, monsterId):
    '''副本战斗
    @param dynamicId: int 客户端的动态id
    @param characterId: int 角色的id
    @param monsterId: int 碰撞的怪物在场景中的id
    '''
    res = CanDoServer(characterId)
    if not res['result']:
        return res
    player = PlayersManager().getPlayerByID(characterId)
    if not player.CheckClient(dynamicId):
        return {'result': False, 'message': Lg().g(18)}
    if not player.status.getLifeStatus():
        return {'result': False, 'message': Lg().g(97)}
    if player.baseInfo.getState() == 1:  #如果角色在副本
        dtid = player.baseInfo.getInstancetag()  #副本动态Id
        instance = InstanceManager().getInstanceByIdTag(dtid)  #获取副本实例
        sceneId = player.baseInfo.getLocation()
        nowScene = instance._Scenes[sceneId]  #获取场景实例
    else:
        town = player.baseInfo.getTown()
        nowScene = MapManager().getMapId(town)
#        return {'result':False,'message':Lg().g(64)}
    data = nowScene.FightInScene(monsterId,
                                 int(player.baseInfo.getPosition()[0]),
                                 characterId)
    if data.get('result'):
        player.baseInfo.setStatus(4)  #角色状态设置为战斗状态
    return data
Example #6
0
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
Example #7
0
def initMemory(characterId, argument):
    ''''刷新从数据库读取的数据'''
    from app.scense.serverconfig.confighandle import initDBData
    from app.scense.core.instance.InstanceManager import InstanceManager
    from app.scense.core.shop.shopmanager import ShopManager
    SceneManager_new().__init__()
    InstanceManager().__init__()
    ShopManager().__init__()
    Mall().__init__()
    initDBData()
    log.msg(u"刷新从数据库读取的数据")
Example #8
0
def GetCopySceneInfo(pid):
    '''返回副本怪物数量,角色信息以及国信息'''
    from app.scense.core.instance.ColonizeManage import ColonizeManage
    player=PlayersManager().getPlayerByID(pid)
    if not player:
        log.err(u"角色不存在%s"%pid)
        return None
    if player.baseInfo.getState()==1: #如果角色在副本中
        tag=player.baseInfo.getInstancetag()#副本动态id
        sceneid=player.baseInfo.getLocation() #角色所在副本的场景id
        instanceinfo= InstanceManager().getInstanceByIdTag(tag)#副本实例
        sceneinfo=instanceinfo.getScene(sceneid)#副本场景实例
        count=len(sceneinfo._monsters)#怪物数量
        instanceid=instanceinfo.getId()#获取副本id
        data=ColonizeManage().getInstanceInfoByinstanceid(instanceid)
        if data['gid']==0:
            data['gname']=Lg().g(143)
        if data:
            return {'count':count,'pid':data['pid'],'pname':data['pname'],'gid':data['gid'],'gname':data['gname']}
        return None
    return None
Example #9
0
def _pushSceneInfo(dynamicId, characterId):
    '''推送场景信息'''
    player = PlayersManager().getPlayerByID(characterId)
    if player.baseInfo.getState() == 1:  #如果角色在副本
        #        id=player.baseInfo.getInstanceid() #副本模板Id
        dtid = player.baseInfo.getInstancetag()  #副本动态Id
        instance = InstanceManager().getInstanceByIdTag(dtid)  #获取副本实例
        sceneId = player.baseInfo.getLocation()
        oldscene = instance._Scenes[sceneId]  #获取场景实例
    else:
        sceneId = player.baseInfo.getTown()
        oldscene = SceneManager_new().getSceneById(sceneId)
    if oldscene:
        oldscene.pushEnterPlace([dynamicId])
Example #10
0
def enterInstance1(player,dynamicId,characterId,instanceId,famId):
    '''进入副本 
    @param dynamicId: int  角色动态Id
    @param characterId: int 角色Id
    @param instanceId: int 副本Id
    '''

    player=PlayersManager().getPlayerByID(characterId)
    if not player:
        return {'result':False,'message':Lg().g(18)}
    if player.baseInfo.getState==1: #角色在副本中
        return  {'result':False,'message':Lg().g(114)}
    player.startAllTimer()
    Instan1= InstanceManager().addInstance(instanceId,famId) #把副本添加到副本管理器中,返回副本管理器中的这个副本实例
    scenename = Instan1._name
    chatnoderemote.callRemote('JoinRoom',characterId,famId,scenename)
#    Instan1.setTag(famId)
    if not Instan1:
        return {'result':False,'message':u'没有id为%d的副本'%instanceId}
    activationInstance(Instan1, player) #激活副本
    enterplay(player,instanceId,Instan1) #角色进入副本操作
    data = {'placeId':Instan1.getSceneResourceidByid(Instan1._inSceneid)}
    player.baseInfo.setInstanceid(instanceId)
    return {'result':True,'message':u'进入副本成功','data':data} #返回副本初始Id
Example #11
0
def getAllCardInfo(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': Lg().g(18)}

    if player.baseInfo.getState() == 1:  #如果角色在副本
        #        id=player.baseInfo.getInstanceid() #副本模板Id
        dtid = player.baseInfo.getInstancetag()  #副本动态Id
        instance = InstanceManager().getInstanceByIdTag(dtid)  #获取副本实例
        data = instance.cards.getAllCardInfo(characterId)
    else:
        data = {'result': False}
    return data
Example #12
0
def playerBackRevive(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':Lg().g(18)}
    if player.status.getLifeStatus():
        return {'result':False,'message':Lg().g(185)}
#    player.baseInfo.setState(0)
#    data = enterPlace(dynamicId,characterId,1000)
#    if not data.get('result',False):
#        return data
    state = player.baseInfo.getState()
    if state==0:
        lastscene = SceneManager_new().getSceneById(player.baseInfo.getLocation())
        lastscene.dropPlayer(player.baseInfo.id)
    else:
#        id=player.baseInfo.getInstanceid() #副本id
        tag=player.baseInfo.getInstancetag() #副本动态Id
        instance=InstanceManager().getInstanceByIdTag(tag) #获取副本实例
        old=instance._Scenes[player.baseInfo.getLocation()] #获取当前角色所在副本中的场景
        old.dropPlayer(player.baseInfo.id) #从当前场景中移除角色
    
    gotoSence = SceneManager_new().getSceneById(1000)
    if not gotoSence:
        scene = PublicScene(1000)
        SceneManager_new().addScene(scene)
#    else:
#        areaid = gotoSence.getAreaid()
    gotoSence.addPlayer(player)
#    player.baseInfo.setAreaid(areaid)
    player.baseInfo.setPosition(gotoSence.baseInfo.getInitiaPosition())
    player.baseInfo.setLocation(1000)
    player.baseInfo.setState(0)
    player.status.updateLifeStatus(1)
    player.attribute.updateHp(int(player.attribute.getMaxHp()*0.01)+1)
    player.attribute.updateMp(int(player.attribute.getMaxMp()*0.01)+1)
    
    pushEnterPlace(1000,dynamicId)
    player.teamcom.pushTeamMemberInfo()
    return {'result':True,'message':Lg().g(186)}
Example #13
0
def updateInstanceInfo(rate):
    '''更新副本场景角色的信息'''
    try:
        InstanceManager().pushAllInstanceInfo(rate)
    finally:
        reactor.callLater(rate, updateInstanceInfo, rate)
Example #14
0
def pushAllSceneInfo(delta):
    '''推送所有场景中的玩家位置'''
    try:
        InstanceManager().pushAllInstanceInfo(delta)
    except Exception, e:
        log.err(e)