示例#1
0
def roleLogin(dynamicId, userId, characterId):
    '''角色登陆
    @param dynamicId: int 客户端的ID
    @param userId: int 用户的ID
    @param characterId: int 角色的ID
    '''
    user = UsersManager().getUserByDynamicId(dynamicId)
    if not user:
        return {'result': False, 'message': u'conn_error'}
    characterInfo = user.getCharacterInfo()
    if not characterInfo:  # 没有角色信息
        return {'result': False, 'message': u'norole'}
    _characterId = user.characterId
    if _characterId != characterId:  # 角色id不对应
        return {'result': False, 'message': u'norole'}
    # 虚拟角色管理类,并由这个管理类来管理一批登陆的虚拟角色
    # 获取最后次下线的虚拟角色
    oldvcharacter = VCharacterManager().getVCharacterByCharacterId(characterId)
    data = {'placeId': characterInfo.get('town', 1000)}  # 获取角色最后所在城镇id,默认为1000
    if oldvcharacter:
        oldvcharacter.setDynamicId(dynamicId)  # 更新动态id
    else:
        vcharacter = VirtualCharacter(characterId, dynamicId)  # 构造一个虚拟角色
        VCharacterManager().addVCharacter(vcharacter)  # 添加到管理类中
    return {'result': True, 'message': u'login_success', 'data': data}
示例#2
0
def roleLogin(dynamicId, userId):
    '''角色登陆
	@param dynamicId:int 客户端的ID
	@param userId:int 用户的ID
	'''
    user = User(dynamicId=dynamicId, uid=userId)
    characterInfo = user.getCharacterInfo()
    if not characterInfo:
        data = {'hasRole': False}
        return {'result': True, 'data': data}
    else:
        if UsersManager()._users.has_key(user.id):
            olduser = UsersManager().getUserByID(user.id)
            if not olduser.CheckEffective():
                return {"result": False, 'message': "账号异常"}
            else:
                UsersManager().dropUser(user)
        UsersManager().addUser(user)
        oldvcharacter = VCharacterManager().getVCharacterByCharacterId(
            user.characterId)
        data = {
            'placeId': characterInfo.get('town', 1000),
            'characterId': user.characterId,
            'hasRole': True
        }
        if oldvcharacter:
            oldvcharacter.setDynamicId(dynamicId)
        else:
            vcharacter = VirtualCharacter(user.characterId, dynamicId)
            VCharacterManager().addVCharacter(vcharacter)
    return {'result': True, 'data': data}
示例#3
0
def roleLogin(dynamicId, userId, characterId):
    """角色登陆
    @param dynamicId: int 客户端的ID
    @param userId: int 用户的ID
    @param characterId: int 角色的ID
    """
    user = UsersManager().getUserByDynamicId(dynamicId)
    if not user:
        return {'result': False, 'message': u'conn_error'}

    characterInfo = user.getCharacterInfo()
    if not characterInfo:
        return {'result': False, 'message': u'norole'}

    _characterId = user.characterId
    if _characterId != characterId:
        return {'result': False, 'message': u'norole'}

    oldvcharacter = VCharacterManager().getVCharacterByCharacterId(characterId)
    if oldvcharacter:
        oldvcharacter.setDynamicId(dynamicId)
    else:
        vcharacter = VirtualCharacter(characterId, dynamicId)
        VCharacterManager().addVCharacter(vcharacter)

    data = {'placeId': characterInfo.get('town', 1000)}
    return {'result': True, 'message': u'login_success', 'data': data}
示例#4
0
def enterInstance1(dynamicId, characterId, InstanceId):
    '''进入副本
    @param dynamicId: int 角色动态id
    @param characterId: int 角色id
    @param InstanceId: int 副本id
    '''
    vplayer = VCharacterManager().getVCharacterByClientId(dynamicId)
    if not vplayer or vplayer.getLocked():#判断是否存在角色或者角色是否被锁定
        return
    oldnode = 201000
    if oldnode < 300000 and oldnode != 0:#如果角色在场景
        #创建新的副本返回服务器编号,副本动态id
        famserTag,famId=FamSerManager().createNewFam(dynamicId)
        if famserTag <0:
            return
        vplayer.lock()#锁定角色对象
        newnode = 300000+famserTag
        #获取角色在原先场景中的实例
        d = GlobalObject().root.callChild("scense_1000",610,dynamicId, characterId)
        #调用失败后的处理
        d.addErrback(InFamErrbck,vplayer,newnode,famId)
        #进入副本
        d.addCallback(Transfer1501,newnode,dynamicId,characterId,InstanceId,famId)
        return d
    else:
        dd = defer.Deferred()
        dd.callback({'result':True,'message':u'nofam'})
        return dd
示例#5
0
def enterInstance1(dynamicId, characterId, InstanceId):
    '''进入副本
    @param dynamicId: int 角色动态id
    @param characterId: int 角色id
    @param InstanceId: int 副本id
    '''
    vplayer = VCharacterManager().getVCharacterByClientId(dynamicId)
    if not vplayer or vplayer.getLocked():  #判断是否存在角色或者角色是否被锁定
        return
    oldnode = 201000
    if oldnode < 300000 and oldnode != 0:  #如果角色在场景
        #创建新的副本返回服务器编号,副本动态id
        famserTag, famId = FamSerManager().createNewFam(dynamicId)
        if famserTag < 0:
            return
        vplayer.lock()  #锁定角色对象
        newnode = 300000 + famserTag
        #获取角色在原先场景中的实例
        d = GlobalObject().root.callChild("scense_1000", 610, dynamicId,
                                          characterId)
        #调用失败后的处理
        d.addErrback(InFamErrbck, vplayer, newnode, famId)
        #进入副本
        d.addCallback(Transfer1501, newnode, dynamicId, characterId,
                      InstanceId, famId)
        return d
    else:
        dd = defer.Deferred()
        dd.callback({'result': True, 'message': u'nofam'})
        return dd
示例#6
0
文件: login.py 项目: chekwind/Soccer
def roleLogin(dynamicId,userId):
	'''角色登陆
	@param dynamicId:int 客户端的ID
	@param userId:int 用户的ID
	'''
	user=User(dynamicId=dynamicId,uid=userId)
	characterInfo=user.getCharacterInfo()
	if not characterInfo:
		data={'hasRole':False}
		return {'result':True,'data':data}
	else:
		if UsersManager()._users.has_key(user.id):
			olduser=UsersManager().getUserByID(user.id)
			if not olduser.CheckEffective():
				return {"result":False,'message':"账号异常"}
			else:
				UsersManager().dropUser(user)
		UsersManager().addUser(user)
		oldvcharacter=VCharacterManager().getVCharacterByCharacterId(user.characterId)
		data={'placeId':characterInfo.get('town',1000),'characterId':user.characterId,'hasRole':True}
		if oldvcharacter:
			oldvcharacter.setDynamicId(dynamicId)
		else:
			vcharacter=VirtualCharacter(user.characterId,dynamicId)
			VCharacterManager().addVCharacter(vcharacter)
	return {'result':True,'data':data}
示例#7
0
def opera_gamer(pid,opera_str):
	''''''
	vcharacter=VCharacterManager().getVCharacterByCharacterId(pid)
	if not vcharacter:
		node="game1"
	else:
		node=vcharacter.getNode()
	GlobalObject().root.callChild(node,99,pid,opera_str)
示例#8
0
def opera_gamer(pid, opera_str):
    ''''''
    vcharacter = VCharacterManager().getVCharacterByCharacterId(pid)
    if not vcharacter:
        node = "game1"
    else:
        node = vcharacter.getNode()
    GlobalObject().root.callChild(node, 99, pid, opera_str)
示例#9
0
def SavePlayerInfoInDB(dynamicId):
    """将玩家信息写入数据库
       node: 用于判定是 game1,game2,。。。。。这些节点
       magic number: 2 --> "maybe save to db"
    """
    vcharacter = VCharacterManager().getVCharacterByClientId(dynamicId)
    nodeid = vcharacter.getNode()
    d = GlobalObject().root.callChild(nodeid,2,dynamicId)
    return d
示例#10
0
def opera_player(pid,oprea_str):
    """
    #vcharacter是虚拟角色,VCharacterManager()虚拟角色管理器,{角色id:虚拟角色实例}
    """
    vcharacter = VCharacterManager().getVCharacterByCharacterId(pid)
    if not vcharacter:
        node = "game1"
    else:
        node = vcharacter.getNode()
    GlobalObject().root.callChild(node,99,pid,oprea_str)
示例#11
0
def JoinDuiWu(dynamicId, pid, pos, dwId):
    """加入队伍
    """
    vplayer = VCharacterManager().getVCharacterByClientId(dynamicId)
    if not vplayer or vplayer.getLocked():  # 判断是否存在角色或者角色是否被锁定
        return
    #    nownode = vplayer.getNode()
    d = GlobalObject().root.callChild("scense_1000", 610, dynamicId, pid)
    d.addErrback(ErorrBack)
    d.addCallback(TransferPlayerJoin, dynamicId, pid, pos, dwId)
    return d
示例#12
0
def CreateZuDui(dynamicId,pid,pos,gkType):
    '''创建队伍
    '''
    vplayer = VCharacterManager().getVCharacterByClientId(dynamicId)
    if not vplayer or vplayer.getLocked():#判断是否存在角色或者角色是否被锁定
        return
#    nownode = vplayer.getNode()
    d = GlobalObject().root.callChild("scense_1000",610,dynamicId, pid)
    d.addErrback(ErorrBack)
    d.addCallback(TransferPlayerCreate,dynamicId,pid,pos,gkType)
    return d
示例#13
0
def netconnlost(dynamicId):
    '''客户端断开连接时的处理
	@param dynamicId:int 客户端的动态ID
	'''
    vcharacter = VCharacterManager().getVCharacterByClientId(dynamicId)
    if vcharacter and vcharacter.getNode() > 0:  #判断是否已经登入角色
        vcharacter.lock()  #锁定角色
        result = SaveGamerInfoInDB(dynamicId)  #保存角色,写入角色数据
        if result:
            dropClient(result, dynamicId, vcharacter)  #清理客户端的数据
    else:
        UsersManager().dropUserByDynamicId(dynamicId)
示例#14
0
def NetConnLost_2(dynamicId):
    '''客户端断开连接时的处理
    @param dynamicId: int 客户端的动态ID
    '''
    vcharacter = VCharacterManager().getVCharacterByClientId(dynamicId)
    if vcharacter and vcharacter.getNode():  #判断是否已经登入角色
        vcharacter.lock()  #锁定角色
        d = SavePlayerInfoInDB(dynamicId)  #保存角色,写入角色数据
        d.addBoth(SaveDBSuccedOrError, vcharacter)  #解锁角色
        d.addCallback(dropClient, dynamicId, vcharacter)  #清理客户端的数据
    else:
        UsersManager().dropUserByDynamicId(dynamicId)
示例#15
0
def netconnlost(dynamicId):
    """客户端断开连接时的处理
    @param dynamicId: int 客户端的动态ID
    """
    vcharacter = VCharacterManager().getVCharacterByClientId(dynamicId)
    if vcharacter and vcharacter.getNode()>0:#判断是否已经登入角色
        vcharacter.lock()#锁定角色
        d = SavePlayerInfoInDB(dynamicId)#保存角色,写入角色数据
        d.addErrback(SaveDBSuccedOrError, vcharacter)#解锁角色
        d.addCallback(dropClient, dynamicId, vcharacter)#清理客户端的数据
    else:
        UsersManager().dropUserByDynamicId(dynamicId)
示例#16
0
def netconnlost(dynamicId):
	'''客户端断开连接时的处理
	@param dynamicId:int 客户端的动态ID
	'''
	vcharacter=VCharacterManager().getVCharacterByClientId(dynamicId)
	if vcharacter and vcharacter.getNode()>0:#判断是否已经登入角色
		vcharacter.lock()#锁定角色
		result=SaveGamerInfoInDB(dynamicId)#保存角色,写入角色数据
		if result:
			dropClient(result,dynamicId,vcharacter)#清理客户端的数据
	else:
		UsersManager().dropUserByDynamicId(dynamicId)
示例#17
0
def netconnlost(dynamicId):
	'''客户端断开连接时的处理
	@param dynamicId:int 客户端的动态ID
	'''
	vcharacter=VCharacterManager().getVCharacterByClientId(dynamicId)
	if vcharacter and vcharacter.getNode()>0:#判断是否已经登入角色
		vcharacter.lock()#锁定角色
		d=SaveGamerInfoInDB(dynamicId)#保存角色,写入角色数据
		d.addErrback(SaveDBSuccedOrError,vcharacter)#解锁角色
		d.addCallback(dropClient,dynamicId,vcharacter)#清理客户端的数据
	else:
		UsersManager().dropUserByDynamicId(dynamicId)
示例#18
0
def getOtherPlayerInfo(dynamicId, pid, tid, request_proto):
    '''获取其他角色的信息
    '''
    tvplayer = VCharacterManager().getVCharacterByCharacterId(tid)
    if tvplayer:
        nownode = 201000  #tvplayer.getNode()
    else:
        vplayer = VCharacterManager().getVCharacterByClientId(dynamicId)
        if not vplayer:
            return
        else:
            nownode = 201000  #vplayer.getNode()
    d = GlobalObject().root.callChild("scense_1000", 221, dynamicId,
                                      request_proto)
    return d
示例#19
0
def enterScene(dynamicId, characterId, placeId,force):
    '''进入场景
    @param dynamicId: int 客户端的ID
    @param characterId: int 角色的ID
    @param placeId: int 场景的ID
    @param force: bool 
    '''
    vplayer = VCharacterManager().getVCharacterByClientId(dynamicId)
    if not vplayer:
        return None
    nownode = SceneSerManager().getBsetScenNodeId()
    d = GlobalObject().root.callChild(nownode,601,dynamicId, characterId, placeId,force,None)
    vplayer.setNode(nownode)
    SceneSerManager().addClient(nownode, vplayer.dynamicId)
    return d
示例#20
0
def enterScene(dynamicId, characterId, placeId,force):
    '''进入场景
    @param dynamicId: int 客户端的ID
    @param characterId: int 角色的ID
    @param placeId: int 场景的ID
    @param force: bool 
    '''
    vplayer = VCharacterManager().getVCharacterByClientId(dynamicId)
    if not vplayer:
        return None
    nownode = SceneSerManager().getBsetScenNodeId()
    d = GlobalObject().root.callChild(nownode,601,dynamicId, characterId, placeId,force,None)
    vplayer.setNode(nownode)
    SceneSerManager().addClient(nownode, vplayer.dynamicId)
    return d
示例#21
0
def pushObjectByCharacterId_10(topicID, msg, sendList):
    '''根据角色的ID推送消息'''
    _sendList = [
        VCharacterManager().getClientIdByCharacterId(cid) for cid in sendList
    ]
    root = GlobalObject().root
    root.callChild('net', "pushData", topicID, msg, _sendList)
示例#22
0
def forwarding(key,dynamicId,data):
    """
    """
    if localservice._targets.has_key(key):
        return localservice.callTarget(key,dynamicId,data)
    else:
        user = UsersManager().getUserByDynamicId(dynamicId)
        if not user:
            return
        oldvcharacter = VCharacterManager().getVCharacterByClientId(dynamicId)
        if not oldvcharacter:
            return
        if oldvcharacter.getLocked():#判断角色对象是否被锁定
            return
        node = VCharacterManager().getNodeByClientId(dynamicId)
        return GlobalObject().root.callChild(node,key,dynamicId,data)
示例#23
0
def forwarding(key,dynamicId,data):
    """
    """
    if key in GlobalObject().localservice._targets:
        return GlobalObject().localservice.callTarget(key,dynamicId,data)
    else:
        user = UsersManager().getUserByDynamicId(dynamicId)
        if not user:
            return
        oldvcharacter = VCharacterManager().getVCharacterByClientId(dynamicId)
        if not oldvcharacter:
            return
        if oldvcharacter.getLocked():#判断角色对象是否被锁定
            return
        node = VCharacterManager().getNodeByClientId(dynamicId)
        return GlobalObject().root.callChild(node, key, dynamicId, data)
示例#24
0
def enterScene(dynamicId, characterId, placeId, force):
    '''进入场景
    @param dynamicId: int 客户端的ID
    @param characterId: int 角色的ID
    @param placeId: int 场景的ID
    @param force: bool 
    '''
    vplayer = VCharacterManager().getVCharacterByClientId(dynamicId)
    if not vplayer:
        return None
    nownode = SceneSerManager().getBestScenNodeId()  # 获取最佳的game服务器
    # 调用子节点 childname, *args
    d = GlobalObject().root.callChild(nownode, 601, dynamicId, characterId,
                                      placeId, force, None)
    vplayer.setNode(nownode)  # 设置节点服务器
    SceneSerManager().addClient(nownode, vplayer.dynamicId)  # 添加到场景服务器
    return d
示例#25
0
def forwarding(key, dynamicId, data):
    '''
	'''
    if localservice._targets.has_key(key):
        return localservice.callTarget(key, dynamicId, data)
    else:
        user = UsersManager().getUserByDynamicId(dynamicId)
        if not user:
            return "-1"
        if not user.CheckEffective():
            return "-2"
        oldvcharacter = VCharacterManager().getVCharacterByClientId(dynamicId)
        if not oldvcharacter:
            return
        if oldvcharacter.getLocked():  #判断角色对象是否被锁定
            return
        node = VCharacterManager().getNodeByClientId(dynamicId)
        return GlobalObject().root.callChild(node, key, dynamicId, data)
示例#26
0
def Transfer1502(data,dynamicId,characterId,force):
    '''离开副本后将角色实例传递回来
    '''
    player, placeId = data
    vplayer = VCharacterManager().getVCharacterByClientId(dynamicId)
    oldnode = 201000 #vplayer.getNode()
    famId = vplayer.getFamId()
    if oldnode < 300000:
        dp = defer.Deferred()
        dp.callback({'result':True,'message':u'nofam'})
        return dp
    nownode = SceneSerManager().getBsetScenNodeId(placeId)
    d = GlobalObject().root.callChild("scense_1000",601,dynamicId, characterId, placeId,force,player)
    #进入场景错误时的处理
    d.addErrback(sceneErorrBack,vplayer)
    #进入成功时
    d.addCallback(DropCharacterInFam,vplayer,nownode,dynamicId,oldnode,famId)
    return d
示例#27
0
def dropClient(deferResult, dynamicId, vcharacter):
    '''清理客户端的记录
	@param result:写入后返回的结果
	'''
    node = vcharacter.getNode()
    if node:  #角色在场景中的处理
        SceneSerManager().dropClient(node, dynamicId)
    VCharacterManager().dropVCharacterByClientId(dynamicId)
    UsersManager().dropUserByDynamicId(dynamicId)
示例#28
0
def SavePlayerInfoInDB(dynamicId):
    '''将玩家信息写入数据库'''
    vcharacter = VCharacterManager().getVCharacterByClientId(dynamicId)
    #    node = vcharacter.getNode()
    root = GlobalObject().root
    d = root.callChild("scense_1000", 2, dynamicId)
    #    pid = vcharacter.getCharacterId()
    #    if TeamFight.ishaveTeamFight(pid):
    #        root.callChild(9999,4307,dynamicId,pid)
    return d
示例#29
0
def Transfer1502(data, dynamicId, characterId, force):
    '''离开副本后将角色实例传递回来
    '''
    player, placeId = data
    vplayer = VCharacterManager().getVCharacterByClientId(dynamicId)
    oldnode = 201000  #vplayer.getNode()
    famId = vplayer.getFamId()
    if oldnode < 300000:
        dp = defer.Deferred()
        dp.callback({'result': True, 'message': u'nofam'})
        return dp
    nownode = SceneSerManager().getBsetScenNodeId(placeId)
    d = GlobalObject().root.callChild("scense_1000", 601, dynamicId,
                                      characterId, placeId, force, player)
    #进入场景错误时的处理
    d.addErrback(sceneErorrBack, vplayer)
    #进入成功时
    d.addCallback(DropCharacterInFam, vplayer, nownode, dynamicId, oldnode,
                  famId)
    return d
示例#30
0
def roleLogin(dynamicId, userId, characterId):
    '''角色登陆
    @param dynamicId: int 客户端的ID
    @param userId: int 用户的ID
    @param characterId: int 角色的ID
    '''
    user=UsersManager().getUserByDynamicId(dynamicId)
    if not user:
        return {'result':False,'message':u'conn_error'}
    characterInfo = user.getCharacterInfo()
    if not characterInfo:
        return {'result':False,'message':u'norole'}
    characterId = user.characterId
    oldvcharacter = VCharacterManager().getVCharacterByCharacterId(characterId)
    if oldvcharacter and oldvcharacter.getLocked():
        return {'result':False,'message':u'zhengzaiyx'}
    vcharacter = VirtualCharacter(characterId,dynamicId)
    VCharacterManager().addVCharacter(vcharacter)
    data = {'placeId':characterInfo.get('town',1000)}
    return {'result':True,'message':u'login_success','data':data}
示例#31
0
def roleLogin(dynamicId, userId, characterId):
    '''角色登陆
    @param dynamicId: int 客户端的ID
    @param userId: int 用户的ID
    @param characterId: int 角色的ID
    '''
    user = UsersManager().getUserByDynamicId(dynamicId)
    if not user:
        return {'result': False, 'message': u'conn_error'}
    characterInfo = user.getCharacterInfo()
    if not characterInfo:
        return {'result': False, 'message': u'norole'}
    characterId = user.characterId
    oldvcharacter = VCharacterManager().getVCharacterByCharacterId(characterId)
    if oldvcharacter and oldvcharacter.getLocked():
        return {'result': False, 'message': u'zhengzaiyx'}
    vcharacter = VirtualCharacter(characterId, dynamicId)
    VCharacterManager().addVCharacter(vcharacter)
    data = {'placeId': characterInfo.get('town', 1000)}
    return {'result': True, 'message': u'login_success', 'data': data}
示例#32
0
def roleLogin(dynamicId, userId, characterId):
    '''角色登陆
    @param dynamicId: int 客户端的ID
    @param userId: int 用户的ID
    @param characterId: int 角色的ID
    '''
    user = UsersManager().getUserByDynamicId(dynamicId)
    if not user:
        return {'result': False, 'message': u'conn_error'}
    _characterId = user.characterId
    if _characterId != characterId:
        return {'result': False, 'message': u'norole'}
    oldvcharacter = VCharacterManager().getVCharacterByCharacterId(characterId)
    data = {'placeId': 1000}
    if oldvcharacter:
        oldvcharacter.setDynamicId(dynamicId)
    else:
        vcharacter = VirtualCharacter(characterId, dynamicId)
        VCharacterManager().addVCharacter(vcharacter)
    return {'result': True, 'message': u'login_success', 'data': data}
示例#33
0
def forwarding(key,dynamicId,data): #net传过来的信息
    '''分配处理netserver转发的请求
    @param key: int 请求的指令号
    @param conn: Conn Object Client到netserver的连接
    @param data: str Client 发送过来的数据
    '''
    if localservice._targets.has_key(key):
        return localservice.callTarget(key,dynamicId,data)
    else:
        from app.gate.basicapp.pushObject import pushOtherMessage
        from app.gate.utils.dbopera.db_language_login import getLanguageStr
        user = UsersManager().getUserByDynamicId(dynamicId)
        if not user:
            msg = getLanguageStr('conn_error')
            pushOtherMessage(msg,[dynamicId])
            return
        oldvcharacter = VCharacterManager().getVCharacterByClientId(dynamicId)
        if oldvcharacter.getLocked():#判断角色对象是否被锁定
            return
        node = VCharacterManager().getNodeByClientId(dynamicId)
        root=GlobalObject().root
        return root.callChild(node,key,dynamicId,data)
示例#34
0
def forwarding(key, dynamicId, data):  #net传过来的信息
    '''分配处理netserver转发的请求
    @param key: int 请求的指令号
    @param conn: Conn Object Client到netserver的连接
    @param data: str Client 发送过来的数据
    '''
    if localservice._targets.has_key(key):
        return localservice.callTarget(key, dynamicId, data)
    else:
        from app.gate.basicapp.pushObject import pushOtherMessage
        from app.gate.utils.dbopera.db_language_login import getLanguageStr
        user = UsersManager().getUserByDynamicId(dynamicId)
        if not user:
            msg = getLanguageStr('conn_error')
            pushOtherMessage(msg, [dynamicId])
            return
        oldvcharacter = VCharacterManager().getVCharacterByClientId(dynamicId)
        if oldvcharacter.getLocked():  #判断角色对象是否被锁定
            return
        node = VCharacterManager().getNodeByClientId(dynamicId)
        root = GlobalObject().root
        return root.callChild(node, key, dynamicId, data)
示例#35
0
def closeInstance(dynamicId,characterId):
    '''退出副本'''
    vplayer = VCharacterManager().getVCharacterByClientId(dynamicId)
    if not vplayer:
        dp = defer.Deferred()
        dp.callback({'result':True,'message':u'nofam'})
        return dp
    oldnode = 201000 #vplayer.getNode()
    if oldnode > 300000:#如果角色在副本中
        #锁定角色对象
        vplayer.lock()
        #获取角色在原先场景中的实例
        d = GlobalObject().root.callChild("scense_1000",610,dynamicId, characterId)
        #获取错误时的处理
        d.addErrback(sceneErorrBack,vplayer)
        #获取成功时的处理
        d.addCallback(Transfer1502,dynamicId,characterId,True)
        return d
    else:
        dp = defer.Deferred()
        dp.callback({'result':True,'message':u'nofam'})
        return dp
示例#36
0
def closeInstance(dynamicId, characterId):
    '''退出副本'''
    vplayer = VCharacterManager().getVCharacterByClientId(dynamicId)
    if not vplayer:
        dp = defer.Deferred()
        dp.callback({'result': True, 'message': u'nofam'})
        return dp
    oldnode = 201000  #vplayer.getNode()
    if oldnode > 300000:  #如果角色在副本中
        #锁定角色对象
        vplayer.lock()
        #获取角色在原先场景中的实例
        d = GlobalObject().root.callChild("scense_1000", 610, dynamicId,
                                          characterId)
        #获取错误时的处理
        d.addErrback(sceneErorrBack, vplayer)
        #获取成功时的处理
        d.addCallback(Transfer1502, dynamicId, characterId, True)
        return d
    else:
        dp = defer.Deferred()
        dp.callback({'result': True, 'message': u'nofam'})
        return dp
示例#37
0
def roleLogin(dynamicId, userId, characterId):
    """角色登陆
    @param dynamicId: int 客户端的ID
    @param userId: int 用户的ID
    @param characterId: int 角色的ID
    """
    user = UsersManager().getUserByDynamicId(dynamicId)
    if not user:
        return {"result": False, "message": u"conn_error"}
    characterInfo = user.getCharacterInfo()
    if not characterInfo:
        return {"result": False, "message": u"norole"}
    _characterId = user.characterId
    if _characterId != characterId:
        return {"result": False, "message": u"norole"}
    oldvcharacter = VCharacterManager().getVCharacterByCharacterId(characterId)
    data = {"placeId": characterInfo.get("town", 1000)}
    if oldvcharacter:
        oldvcharacter.setDynamicId(dynamicId)
    else:
        vcharacter = VirtualCharacter(characterId, dynamicId)
        VCharacterManager().addVCharacter(vcharacter)
    return {"result": True, "message": u"login_success", "data": data}
示例#38
0
def dropClient(deferResult, dynamicId, vcharacter):
    '''清理客户端的记录
    @param result: 写入后返回的结果
    '''
    node = 201000  # vcharacter.getNode()
    if node <= 0:
        return
    elif 200000 < node < 300000:  #角色在场景中的处理
        SceneSerManager().dropClient(node, dynamicId)
    elif node >= 300000:  #角色在副本中的处理
        famserId = node - 300000
        famId = vcharacter.getFamId()
        FamSerManager().leaveFam(famserId, famId, dynamicId)

    VCharacterManager().dropVCharacterByClientId(dynamicId)
    UsersManager().dropUserByDynamicId(dynamicId)
示例#39
0
def Transfer1501(resultdata, nownode, dynamicId, characterId, instanceId,
                 famId):
    '''调用进入副本方法
    @param nownode: int 副本服务器动态id+30W
    '''
    vplayer = VCharacterManager().getVCharacterByClientId(dynamicId)
    player, placeId = resultdata
    #加入角色的实例到创建的副本中去
    d = GlobalObject().root.callChild("scense_1000", 1501, player, dynamicId,
                                      characterId, instanceId, famId)
    #写入出错时的错误处理
    d.addErrback(InFamErrbck, vplayer, nownode, famId)
    #写入成功时,清除原先场景中的角色实例
    d.addCallback(DropCharacterInSceneForFam, vplayer, nownode, dynamicId,
                  famId)
    return d
示例#40
0
 def doWhenStop(self):
     '''when netserver stoped'''
     #        from bridge.famsermanger import FamSerManager
     #        from bridge.scenesermanger import SceneSerManager
     #        from core.UserManager import UsersManager
     from app.gate.core.VCharacterManager import VCharacterManager
     #        from app.gate.serverconfig.root import root
     #        childs = root._childsmanager._childs.keys()
     #        for node in childs:
     #            if 200000<node<300000:
     #                root.callChild(node,50)
     for vcharacter in VCharacterManager().character_client.values():
         dynamicId = vcharacter.dynamicId
         node = vcharacter.getNode()
         if node:
             #                root.callChild(node,2,dynamicId)
             GlobalObject().root.callChild("scense_1000", 2, dynamicId)
示例#41
0
def instanceColonizeBattle_712(key, dynamicId, request_proto):
    '''副本殖民的加锁处理,避免同时殖民同一个副本
    '''
    global COLONIZE_POOL
    argument = ColonizationBattle712_pb2.FightRequest()
    argument.ParseFromString(request_proto)
    response = ColonizationBattle712_pb2.FightResponse()

    dynamicId = dynamicId
    instanceid = argument.copyId  #副本id(难度最小的那个)
    if instanceid in COLONIZE_POOL:
        response.result = False
        response.message = u'该副本正在进行殖民战斗'
        return response.SerializeToString()
    COLONIZE_POOL.append(instanceid)
    try:
        node = VCharacterManager().getNodeByClientId(dynamicId)
        d = GlobalObject().root.callChild("scense_1000", key, dynamicId,
                                          request_proto)
        d.addBoth(bothhandle, instanceid)
        return d
    except:
        COLONIZE_POOL.remove(instanceid)
示例#42
0
def SaveGamerInfoInDB(dynamicId):
	'''将玩家信息写入数据库'''
	vcharacter=VCharacterManager().getVCharacterByClientId(dynamicId)
	node=vcharacter.getNode()
	d=GlobalObject().root.callChild(node,2,dynamicId)
	return d
示例#43
0
def pushObjectToAll_11(topicID, msg):
    '''根据角色的ID推送消息'''
    _sendList = [cid for cid in VCharacterManager().client_character.keys()]
    root = GlobalObject().root
    root.callChild('net', "pushData", topicID, msg, _sendList)
示例#44
0
def SaveGamerInfoInDB(dynamicId):
    '''将玩家信息写入数据库'''
    vcharacter = VCharacterManager().getVCharacterByClientId(dynamicId)
    node = vcharacter.getNode()
    d = GlobalObject().root.callChild(node, 2, dynamicId)
    return d