Example #1
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 #2
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 #3
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 #4
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 #5
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 #6
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 #7
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 #8
0
def updateInstanceInfo(rate):
    '''更新副本场景角色的信息'''
    try:
        InstanceManager().pushAllInstanceInfo(rate)
    finally:
        reactor.callLater(rate, updateInstanceInfo, rate)
def pushAllSceneInfo(delta):
    '''推送所有场景中的玩家位置'''
    try:
        InstanceManager().pushAllInstanceInfo(delta)
    except Exception, e:
        log.err(e)