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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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