Exemple #1
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
Exemple #2
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
Exemple #3
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
Exemple #4
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
Exemple #5
0
def TransferPlayer(deferData,nownode,dynamicId,characterId,placeId,force,vplayer):
    '''传递角色'''
    player,oldplaceId = deferData
    #将角色信息写入新的场景
    d=GlobalObject().root.callChild("scense_1000",612,601,dynamicId, characterId, placeId,force,player)
#    d = root.callChild(nownode,601,dynamicId, characterId, placeId,force,player)
    #调用失败后的处理
    d.addErrback(sceneErorrBack,vplayer)
    #删除原先场景中的角色
    d.addCallback(DropCharacterInScene,vplayer,nownode,dynamicId)
    return d
Exemple #6
0
    def try_forward_battle(self, user_id, request):
        """尝试进入下一场战斗
        """
        timer = Timer(user_id)

        req = union_battle_pb2.TryForwardUnionBattleReq()
        req.ParseFromString(request)

        defer = GlobalObject().remote['gunion'].callRemote(
            "try_forward_battle", req.union_id, req.SerializeToString())
        defer.addCallback(self._calc_forward_battle_own_result, req, timer)
        defer.addErrback(self._try_forward_battle_failed, req, timer)
        return defer
Exemple #7
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
Exemple #8
0
    def force_update(self, user_id, request):
        """强制更新联盟战争(内部接口)
        """
        timer = Timer(user_id)

        req = internal_pb2.ForceUpdateUnionBattleReq()
        req.ParseFromString(request)

        defer = GlobalObject().remote['gunion'].callRemote(
            "force_update_battle", req.union_id, req.SerializeToString())
        defer.addCallback(self._force_update_succeed, req, timer)
        defer.addErrback(self._force_update_failed, req, timer)
        return defer
Exemple #9
0
    def manage(self, user_id, request):
        """管理聊天
        """
        timer = Timer(user_id)
        req = chat_pb2.ManageChatReq()
        req.ParseFromString(request)

        defer = GlobalObject().root.callChild("portal",
                                              "forward_chat_operation",
                                              req.target_user_id, request)
        defer.addCallback(self._calc_manage_result, req, timer)
        defer.addErrback(self._calc_manage_failed, req, timer)
        return defer
Exemple #10
0
def TransferPlayer(deferData, nownode, dynamicId, characterId, placeId, force,
                   vplayer):
    '''传递角色'''
    player, oldplaceId = deferData
    #将角色信息写入新的场景
    d = GlobalObject().root.callChild("scense_1000", 612, 601, dynamicId,
                                      characterId, placeId, force, player)
    #    d = root.callChild(nownode,601,dynamicId, characterId, placeId,force,player)
    #调用失败后的处理
    d.addErrback(sceneErorrBack, vplayer)
    #删除原先场景中的角色
    d.addCallback(DropCharacterInScene, vplayer, nownode, dynamicId)
    return d
Exemple #11
0
def DropCharacterInScene(deferResult,vcharacter,nownode,dynamicId):
    '''删除原先场景中角色的实例
    '''
    if not deferResult.get('result',False):#如果不能进行跳转
        vcharacter.release()#释放角色对象锁
        d = defer.Deferred()
        d.callback(deferResult)
    else:
#        oldnode = vcharacter.getNode()
        d=GlobalObject().root.callChild("scense_1000",612,dynamicId, vcharacter.characterId)
#        d = root.callChild(oldnode,612,dynamicId, vcharacter.characterId)
        d.addErrback(sceneErorrBack2,nownode,dynamicId,vcharacter)
        d.addCallback(cleanOldScene,deferResult,vcharacter,dynamicId,nownode)
    return d
Exemple #12
0
    def try_transfer(self, user_id, request):
        """自动转让盟主(内部接口)"""
        timer = Timer(user_id)
        
        req = internal_pb2.TryTransferUnionLeaderReq()
        req.ParseFromString(request)

        union_req = internal_union_pb2.InternalTryTransferUnionLeaderReq()
        union_req.user_id = user_id

        defer = GlobalObject().remote['gunion'].callRemote(
                "try_transfer_leader", req.union_id, union_req.SerializeToString())
        defer.addCallback(self._calc_transfer, req, timer)
        defer.addErrback(self._transfer_failed, req, timer)
        return defer
Exemple #13
0
def DropCharacterInScene(deferResult, vcharacter, nownode, dynamicId):
    '''删除原先场景中角色的实例
    '''
    if not deferResult.get('result', False):  #如果不能进行跳转
        vcharacter.release()  #释放角色对象锁
        d = defer.Deferred()
        d.callback(deferResult)
    else:
        #        oldnode = vcharacter.getNode()
        d = GlobalObject().root.callChild("scense_1000", 612, dynamicId,
                                          vcharacter.characterId)
        #        d = root.callChild(oldnode,612,dynamicId, vcharacter.characterId)
        d.addErrback(sceneErorrBack2, nownode, dynamicId, vcharacter)
        d.addCallback(cleanOldScene, deferResult, vcharacter, dynamicId,
                      nownode)
    return d
Exemple #14
0
def DropCharacterInSceneForFam(deferResult,vcharacter,nownode,dynamicId,famId):
    '''删除原先场景角色的实例
    '''
    if not deferResult.get('result',False):#如果不能进行跳转
        vcharacter.release()#释放角色对象锁
        d = defer.Deferred()
        d.callback(deferResult)
    else:
#        oldnode = vcharacter.getNode()
        #通知原先场景服务器删除角色的信息
        d = GlobalObject().root.callChild("scense_1000",612,dynamicId, vcharacter.characterId)
        #消息出错时的处理
        d.addErrback(InFamErrbck2,vcharacter,nownode,famId)
        #消息成功时的处理
        d.addCallback(cleanOldSceneForFam,deferResult,vcharacter,nownode,famId)
    return d
Exemple #15
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
Exemple #16
0
    def add_reputation(self, user_id, request):
        """添加声望,内部接口
        """
        timer = Timer(user_id)
        req = internal_pb2.AddReputationReq()
        req.ParseFromString(request)

        unit_req = unit_pb2.UnitAddReputationReq()
        unit_req.user_id = user_id
        unit_req.reputation = req.reputation

        #请求 Unit 模块
        defer = GlobalObject().remote['unit'].callRemote(
            "add_reputation", req.city_id, unit_req.SerializeToString())
        defer.addCallback(self._add_reputation_succeed, req, timer)
        defer.addErrback(self._add_reputation_failed, req, timer)
        return defer
Exemple #17
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
Exemple #18
0
def DropCharacterInSceneForFam(deferResult, vcharacter, nownode, dynamicId,
                               famId):
    '''删除原先场景角色的实例
    '''
    if not deferResult.get('result', False):  #如果不能进行跳转
        vcharacter.release()  #释放角色对象锁
        d = defer.Deferred()
        d.callback(deferResult)
    else:
        #        oldnode = vcharacter.getNode()
        #通知原先场景服务器删除角色的信息
        d = GlobalObject().root.callChild("scense_1000", 612, dynamicId,
                                          vcharacter.characterId)
        #消息出错时的处理
        d.addErrback(InFamErrbck2, vcharacter, nownode, famId)
        #消息成功时的处理
        d.addCallback(cleanOldSceneForFam, deferResult, vcharacter, nownode,
                      famId)
    return d
Exemple #19
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
Exemple #20
0
    def award(self, user_id, request):
        """发放奖励(内部接口)"""
        timer = Timer(user_id)

        req = transfer_arena_pb2.TransferArenaRewardReq()
        req.ParseFromString(request)

        (gold, items_id,
         items_num) = transfer_business.rank_reward(req.ranking)

        if gold == None:
            logger.notice("No reward[user_id=%d]" % req.user_id)
            res = transfer_arena_pb2.TransferArenaRewardRes()
            res.status = 0
            response = res.SerializeToString()
            return self._award_succeed(response, req, timer)

        forward_req = internal_pb2.ReceiveMailReq()
        forward_req.user_id = req.user_id
        forward_req.mail.basic_id = 101
        forward_req.mail.subject = data_loader.ServerDescKeyInfo_dict[
            "award_transfer_subject"].value.encode("utf-8")
        forward_req.mail.content = data_loader.ServerDescKeyInfo_dict[
            "award_transfer_content"].value.encode("utf-8")
        forward_req.mail.sender = data_loader.ServerDescKeyInfo_dict[
            "award_transfer_sender"].value.encode("utf-8")

        for i, item_id in enumerate(items_id):
            info = forward_req.mail.reward_items.add()
            info.basic_id = item_id
            info.num = items_num[i]

        forward_req.mail.reward_resource.gold = gold

        forward_request = forward_req.SerializeToString()

        defer = GlobalObject().root.callChild("portal", "forward_mail",
                                              req.user_id, forward_request)
        defer.addCallback(self._award_succeed, req, timer)
        defer.addErrback(self._award_failed, req, timer)
        return defer
Exemple #21
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
Exemple #22
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