5722 【后端】【1.5】跨服BOSS开发(进入跨服地图通用逻辑)
| | |
| | | list SeasonDanLVAwardList; //赛季段位奖励物品列表
|
| | | };
|
| | |
|
| | | //跨服Boss蓬莱仙境分区表
|
| | |
|
| | | struct tagCrossPenglaiZone
|
| | | {
|
| | | BYTE _ZoneID; //分区ID
|
| | | list ServerGroupIDList; //服务器组ID列表
|
| | | DWORD MapID; //场景地图ID
|
| | | BYTE CopyMapID; //虚拟线路ID
|
| | | WORD PosX; //坐标X
|
| | | WORD PosY; //坐标Y
|
| | | };
|
| | |
|
| | | //聚魂表
|
| | |
|
| | | struct tagGatherSoul
|
| | |
| | | Def_PlayerKey_IsStopSendDBCommand = "StopSendDBCom" #是否停止发送数据库操作命令
|
| | | Def_PlayerKey_SendDBComTick = "SendDBComTick" #发送DB命令时间
|
| | |
|
| | | Def_PlayerKey_MergeRegisterType = "MergeRegisterType" #当前上传数据的活动类型
|
| | | Def_PlayerKey_CrossRegisterType = "CrossRegisterType" #当前上传数据的活动类型
|
| | | Def_PlayerKey_MergeRegisterRoomID = "MergeRegisterRoomID" #当前上传数据的roomID
|
| | | Def_PlayerKey_IsLoginToMergeServer = "IsLoginToMergeServer" #是否要登陆跨服服务器
|
| | | Def_PlayerKey_IsCrossPKMatching = "IsCrossPKMatching" #是否跨服匹配中
|
| | |
| | | Def_FBMapID_ChaosDemon = 31180
|
| | | #娲皇遗迹
|
| | | Def_FBMapID_QueenRelics = 51010
|
| | | #跨服竞技场
|
| | | Def_FBMapID_CrossRealmPK = 32010
|
| | | #跨服蓬莱仙境
|
| | | Def_FBMapID_CrossPenglai = 32020
|
| | |
|
| | | #同系职业枚举
|
| | | JOB_TYPY_COUNT = 5
|
| | |
| | | def CrossServerMsg_PKMatchResult(vsRoomDict):
|
| | | ## 跨服PK匹配结果
|
| | | curServerGroupID = GameWorld.GetServerGroupID()
|
| | | actionType = ShareDefine.Def_CrossAction_PK
|
| | | mapPosList = IpyGameDataPY.GetFuncEvalCfg("CrossRealmPKMatch", 5)
|
| | | GameWorld.DebugLog("=== 收到PK匹配结果处理 === curServerGroupID=%s" % curServerGroupID)
|
| | | if not mapPosList:
|
| | |
| | | PlayerControl.SetVsRoomId(player, roomID, True)
|
| | | # 通知地图玩家匹配成功, 上传数据, 准备进入跨服服务器
|
| | | posX, posY = mapPosList[i] if len(mapPosList) > i else mapPosList[0]
|
| | | CrossRealmPlayer.SendCrossRealmReg(player, actionType, mapID, mapID, 0, posX, posY)
|
| | | CrossRealmPlayer.SendCrossRealmReg(player, ChConfig.Def_FBMapID_CrossRealmPK, mapID, mapID, 0, posX, posY)
|
| | |
|
| | | return
|
| | |
|
| | |
| | | PlayerControl.SetCrossRealmState(curPlayer, 0)
|
| | | return
|
| | |
|
| | | def SendCrossRealmReg(curPlayer, actionType, mapID=0, dataMapID=0, copyMapID=0, posX=0, posY=0):
|
| | | def SendCrossRealmReg(curPlayer, registerType, mapID=0, dataMapID=0, copyMapID=0, posX=0, posY=0):
|
| | | # 发送跨服账号注册上传数据
|
| | |
|
| | | # 设置上传数据的活动类型
|
| | | curPlayer.SetDict(ChConfig.Def_PlayerKey_MergeRegisterType, actionType)
|
| | | sysMsg = str([actionType, mapID, dataMapID, copyMapID, posX, posY])
|
| | | curPlayer.SetDict(ChConfig.Def_PlayerKey_CrossRegisterType, registerType)
|
| | | sysMsg = str([registerType, mapID, dataMapID, copyMapID, posX, posY])
|
| | | curPlayer.MapServer_QueryPlayerResult(0, 0, "CrossRealmReg", sysMsg, len(sysMsg))
|
| | | GameWorld.Log("SendCrossRealmReg actionType=%s,mapID=%s,dataMapID=%s,copyMapID=%s,posX=%s,posY=%s" |
| | | % (actionType, mapID, dataMapID, copyMapID, posX, posY), curPlayer.GetPlayerID())
|
| | | GameWorld.Log("SendCrossRealmReg registerType=%s,mapID=%s,dataMapID=%s,copyMapID=%s,posX=%s,posY=%s" |
| | | % (registerType, mapID, dataMapID, copyMapID, posX, posY), curPlayer.GetPlayerID())
|
| | | return
|
| | |
|
| | | def OnCrossRealmRegOK(playerID, msgList, tick):
|
| | |
| | | if not IsCrossServerOpen():
|
| | | return
|
| | |
|
| | | #newAccount, newName = msgList
|
| | | registerType = msgList[0]
|
| | | playerRegisterType = curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_CrossRegisterType)
|
| | | if playerRegisterType and registerType != playerRegisterType:
|
| | | return
|
| | | curPlayer.SetDict(ChConfig.Def_PlayerKey_CrossRegisterType, 0)
|
| | |
|
| | | actionType = curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_MergeRegisterType)
|
| | | GameWorld.Log("跨服报名成功 , actionType=%s" % (actionType), playerID)
|
| | | GameWorld.Log("跨服报名成功 , registerType=%s" % (registerType), playerID)
|
| | |
|
| | | # 跨服PK上传数据完毕,通知跨服服务器,准备完毕
|
| | | if actionType == ShareDefine.Def_CrossAction_PK:
|
| | | if registerType == ChConfig.Def_FBMapID_CrossRealmPK:
|
| | | regVSRoomID = curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_MergeRegisterRoomID)
|
| | | vsRoomID = curPlayer.GetVsRoomId()
|
| | |
|
| | |
| | |
|
| | | # 其他的,在上传数据完毕后,使用通用的通知可进入跨服
|
| | | else:
|
| | | NotifyCanEnterMergeServer(curPlayer, actionType)
|
| | | NotifyCanEnterMergeServer(curPlayer, registerType)
|
| | |
|
| | | # hxp 2015.09.10 跨服boss,后面的暂时不需要
|
| | | return
|
| | |
|
| | |
|
| | | def NotifyCanEnterMergeServer(curPlayer, actionType):
|
| | | def NotifyCanEnterMergeServer(curPlayer, registerType):
|
| | | # 通用包,通知客户端可进入跨服服务器
|
| | | return
|
| | |
|
| | |
| | | ClientServerMsg_PKPrepareOK = "PKPrepareOK" # 跨服PK准备完毕
|
| | | ClientServerMsg_PKBillboard = "PKBillboard" # 跨服PK排行榜
|
| | |
|
| | | # 跨服活动类型
|
| | | (
|
| | | Def_CrossAction_PK, # 跨服匹配PK
|
| | | Def_CrossAction_Penglai, # 跨服蓬莱仙境
|
| | | ) = range(2)
|
| | |
|
| | | #角色改名结果
|
| | | (
|
| | | Def_Rename_Result_MoneyErr, # 金钱不足
|
| | |
| | | PacketSubCMD_8=0x03
|
| | | PacketCallFunc_8=PySetAdult
|
| | |
|
| | | PacketCMD_9=
|
| | | PacketSubCMD_9=
|
| | | PacketCallFunc_9=
|
| | | PacketCMD_9=C1
|
| | | PacketSubCMD_9=05
|
| | | PacketCallFunc_9=OnEnterCrossServer
|
| | |
|
| | | PacketCMD_10=0xB4
|
| | | PacketSubCMD_10=0x04
|
| | |
| | | Def_FBMapID_GatherSoul = 31340
|
| | | #跨服竞技场
|
| | | Def_FBMapID_CrossRealmPK = 32010
|
| | | #跨服蓬莱仙境
|
| | | Def_FBMapID_CrossPenglai = 32020
|
| | |
|
| | | #注册上传跨服服务器数据后直接进入跨服服务器的地图
|
| | | RegisterEnter_CrossServerMapIDList = [Def_FBMapID_CrossPenglai]
|
| | |
|
| | | #副本关闭时未拾取的物品邮件发放给玩家
|
| | | #这里只有需要的副本才配置,不做默认逻辑,防止某些副本实际不能给导致刷物品,如麒麟之府
|
| | | Def_SendUnPickItemMailMapIDList = [Def_FBMapID_IceLode, Def_FBMapID_PersonalBoss, Def_FBMapID_MunekadoTrial,
|
| | |
| | | 'XMZZ':[Def_FBMapID_XMZZ], #仙魔之争
|
| | | 'Dogz':[Def_FBMapID_Dogz], #神兽副本
|
| | | 'CrossRealmPK':[Def_FBMapID_CrossRealmPK], #跨服竞技场
|
| | | 'CrossPenglai':[Def_FBMapID_CrossPenglai], #跨服蓬莱仙境
|
| | | 'GatherSoul':[Def_FBMapID_GatherSoul],#聚魂副本
|
| | | }
|
| | |
|
| | |
| | | Def_PlayerKey_CalcAddAttrType = "CalcAType_%s_%s_%s" # 刷属性类型, 参数[funcIndex, attrIndex, 缓存编号]
|
| | | Def_PlayerKey_CalcAddAttrValue = "CalcAValue_%s_%s_%s" # 刷属性值, 参数[funcIndex, attrIndex, 缓存编号]
|
| | |
|
| | | Def_PlayerKey_CrossRegisterType = "CrossRegisterType" #跨服注册活动类型
|
| | | Def_PlayerKey_IsCrossPKMatching = "IsCrossPKMatching" #是否跨服匹配中
|
| | |
|
| | | Def_PDict_QueryTechLVUPState = "QueryTechLVUPState" # 查询科技等级提升状态
|
| | |
| | | Def_Player_Dict_HasVIPClubNote = 'HasVIPClubNote_186' # 是否提示过vip升级可加入贵宾俱乐部信息
|
| | | Def_Player_Dict_PyPlayerAction = 'PyPlayerAction_187' # py自定义玩家状态
|
| | | Def_Player_Dict_FamilyLV = 'FamilyLV_189' # 玩家帮会等级
|
| | | Def_Player_Dict_MergeWarRegisterTime = 'MergeWarRegisterTime_190' # 上传数据至万国服务器cd
|
| | | Def_Player_Dict_MergeRegisterTime = 'MergeRegisterTime%s_194' # 活动的上传数据时间
|
| | | Def_Player_UpdatePlayerNameCnt = "UpdatePlayerNameCnt_196" # 角色改名次数
|
| | | Def_Player_Dict_UpdatePlayerNameItemIndex = "UpdatePlayerNameItemIndex_198" # 改名物品在背包的位置
|
| | | Def_Player_Dict_UpdatePlayerName = "UpdatePlayerName_199" # 改名锁
|
New file |
| | |
| | | #!/usr/bin/python
|
| | | # -*- coding: GBK -*-
|
| | | #-------------------------------------------------------------------------------
|
| | | #
|
| | | ##@package GameWorldLogic.FBProcess.GameLogic_CrossPenglai
|
| | | #
|
| | | # @todo:蓬莱仙境(跨服异兽之地)
|
| | | # @author hxp
|
| | | # @date 2019-01-07
|
| | | # @version 1.0
|
| | | #
|
| | | # 详细描述: 蓬莱仙境(跨服异兽之地)
|
| | | #
|
| | | #-------------------------------------------------------------------------------
|
| | | #"""Version = 2019-01-07 18:00"""
|
| | | #-------------------------------------------------------------------------------
|
| | |
|
| | | import IPY_GameWorld
|
| | | import GameWorld
|
| | |
|
| | |
|
| | | ## 查询地图是否开启
|
| | | # @param tick 时间戳
|
| | | # @return 布尔值
|
| | | def OnCanOpen(tick):
|
| | | return True
|
| | |
|
| | | ## 是否能够通过活动查询进入
|
| | | # @param curPlayer 玩家实例
|
| | | # @param mapID 地图ID
|
| | | # @param lineID 线路id
|
| | | # @param tick 时间戳
|
| | | # @return 布尔值
|
| | | def OnEnterFBEvent(curPlayer, mapID, lineID, tick):
|
| | | return True
|
| | |
|
| | | ##查询是否可以进入地图
|
| | | # @param ask:请求结构体(IPY_BMChangeMapAsk)
|
| | | # @param tick:时间戳
|
| | | # @return IPY_GameWorld.cme 枚举
|
| | | def OnChangeMapAsk(ask, tick):
|
| | | return IPY_GameWorld.cmeAccept
|
| | |
|
| | | ## 进副本
|
| | | # @param curPlayer
|
| | | # @param tick
|
| | | # @return None
|
| | | def DoEnterFB(curPlayer, tick):
|
| | | GameWorld.DebugLog("DoEnterFB", curPlayer.GetPlayerID())
|
| | | return
|
| | |
|
| | |
|
| | | ## 开始采集
|
| | | # @param curPlayer 当前玩家
|
| | | # @param curNPC 当前NPC
|
| | | # @return None or False
|
| | | # @remarks 函数详细说明.
|
| | | def OnBeginCollect(curPlayer, curNPC):
|
| | | return
|
| | |
|
| | |
|
| | | ## 收集中
|
| | | def OnCollecting(curPlayer, tick):
|
| | | return
|
| | |
|
| | |
|
| | | ##玩家收集成功(塔, 旗)
|
| | | # @param curPlayer 玩家实例
|
| | | # @param tick 时间戳
|
| | | # @return 无意义
|
| | | # @remarks
|
| | | def OnCollectOK(curPlayer, npcID, tick):
|
| | | return
|
| | |
|
| | |
|
| | | ##---副本总逻辑计时器---
|
| | | # @param tick:时间戳
|
| | | # @return 无意义
|
| | | # @remarks 副本总逻辑计时器
|
| | | def OnProcess(tick):
|
| | | return
|
| | |
|
| | |
|
| | |
|
| | |
| | | ("list", "SeasonDanLVAwardList", 0),
|
| | | ),
|
| | |
|
| | | "CrossPenglaiZone":(
|
| | | ("BYTE", "ZoneID", 1),
|
| | | ("list", "ServerGroupIDList", 0),
|
| | | ("DWORD", "MapID", 0),
|
| | | ("BYTE", "CopyMapID", 0),
|
| | | ("WORD", "PosX", 0),
|
| | | ("WORD", "PosY", 0),
|
| | | ),
|
| | |
|
| | | "GatherSoul":(
|
| | | ("DWORD", "ItemID", 1),
|
| | | ("list", "AttrType", 0),
|
| | |
| | | def GetDanLVAwardList(self): return self.DanLVAwardList # 段位达标奖励物品列表
|
| | | def GetSeasonDanLVAwardList(self): return self.SeasonDanLVAwardList # 赛季段位奖励物品列表 |
| | | |
| | | # 跨服Boss蓬莱仙境分区表 |
| | | class IPY_CrossPenglaiZone(): |
| | | |
| | | def __init__(self): |
| | | self.ZoneID = 0
|
| | | self.ServerGroupIDList = []
|
| | | self.MapID = 0
|
| | | self.CopyMapID = 0
|
| | | self.PosX = 0
|
| | | self.PosY = 0 |
| | | return |
| | | |
| | | def GetZoneID(self): return self.ZoneID # 分区ID
|
| | | def GetServerGroupIDList(self): return self.ServerGroupIDList # 服务器组ID列表
|
| | | def GetMapID(self): return self.MapID # 场景地图ID
|
| | | def GetCopyMapID(self): return self.CopyMapID # 虚拟线路ID
|
| | | def GetPosX(self): return self.PosX # 坐标X
|
| | | def GetPosY(self): return self.PosY # 坐标Y |
| | | |
| | | # 聚魂表 |
| | | class IPY_GatherSoul(): |
| | | |
| | |
| | | self.ipyGodWeaponEffectLen = len(self.ipyGodWeaponEffectCache)
|
| | | self.ipyCrossRealmPKDanCache = self.__LoadFileData("CrossRealmPKDan", IPY_CrossRealmPKDan)
|
| | | self.ipyCrossRealmPKDanLen = len(self.ipyCrossRealmPKDanCache)
|
| | | self.ipyCrossPenglaiZoneCache = self.__LoadFileData("CrossPenglaiZone", IPY_CrossPenglaiZone)
|
| | | self.ipyCrossPenglaiZoneLen = len(self.ipyCrossPenglaiZoneCache)
|
| | | self.ipyGatherSoulCache = self.__LoadFileData("GatherSoul", IPY_GatherSoul)
|
| | | self.ipyGatherSoulLen = len(self.ipyGatherSoulCache)
|
| | | self.ipyGatherSoulCompoundCache = self.__LoadFileData("GatherSoulCompound", IPY_GatherSoulCompound)
|
| | |
| | | def GetGodWeaponEffectByIndex(self, index): return self.ipyGodWeaponEffectCache[index]
|
| | | def GetCrossRealmPKDanCount(self): return self.ipyCrossRealmPKDanLen
|
| | | def GetCrossRealmPKDanByIndex(self, index): return self.ipyCrossRealmPKDanCache[index]
|
| | | def GetCrossPenglaiZoneCount(self): return self.ipyCrossPenglaiZoneLen
|
| | | def GetCrossPenglaiZoneByIndex(self, index): return self.ipyCrossPenglaiZoneCache[index]
|
| | | def GetGatherSoulCount(self): return self.ipyGatherSoulLen
|
| | | def GetGatherSoulByIndex(self, index): return self.ipyGatherSoulCache[index]
|
| | | def GetGatherSoulCompoundCount(self): return self.ipyGatherSoulCompoundLen
|
| | |
| | | def NPCRefresh_98(npcRefresh, tick):__DoRefreshWorldBoss(npcRefresh, tick)
|
| | | def NPCRefresh_99(npcRefresh, tick):__DoRefreshWorldBoss(npcRefresh, tick)
|
| | | def NPCRefresh_100(npcRefresh, tick):__DoRefreshWorldBoss(npcRefresh, tick)
|
| | | def NPCRefresh_180(npcRefresh, tick):__DoRefreshWorldBoss(npcRefresh, tick)
|
| | | def NPCRefresh_181(npcRefresh, tick):__DoRefreshWorldBoss(npcRefresh, tick)
|
| | | def NPCRefresh_182(npcRefresh, tick):__DoRefreshWorldBoss(npcRefresh, tick)
|
| | | def NPCRefresh_183(npcRefresh, tick):__DoRefreshWorldBoss(npcRefresh, tick)
|
| | | def NPCRefresh_184(npcRefresh, tick):__DoRefreshWorldBoss(npcRefresh, tick)
|
| | | def NPCRefresh_185(npcRefresh, tick):__DoRefreshWorldBoss(npcRefresh, tick)
|
| | | def NPCRefresh_186(npcRefresh, tick):__DoRefreshWorldBoss(npcRefresh, tick)
|
| | | def NPCRefresh_187(npcRefresh, tick):__DoRefreshWorldBoss(npcRefresh, tick)
|
| | | def NPCRefresh_188(npcRefresh, tick):__DoRefreshWorldBoss(npcRefresh, tick)
|
| | | def NPCRefresh_189(npcRefresh, tick):__DoRefreshWorldBoss(npcRefresh, tick)
|
| | | def NPCRefresh_190(npcRefresh, tick):__DoRefreshWorldBoss(npcRefresh, tick)
|
| | | def NPCRefresh_191(npcRefresh, tick):__DoRefreshWorldBoss(npcRefresh, tick)
|
| | | def NPCRefresh_192(npcRefresh, tick):__DoRefreshWorldBoss(npcRefresh, tick)
|
| | | def NPCRefresh_193(npcRefresh, tick):__DoRefreshWorldBoss(npcRefresh, tick)
|
| | | def NPCRefresh_194(npcRefresh, tick):__DoRefreshWorldBoss(npcRefresh, tick)
|
| | | def NPCRefresh_195(npcRefresh, tick):__DoRefreshWorldBoss(npcRefresh, tick)
|
| | | def NPCRefresh_196(npcRefresh, tick):__DoRefreshWorldBoss(npcRefresh, tick)
|
| | | def NPCRefresh_197(npcRefresh, tick):__DoRefreshWorldBoss(npcRefresh, tick)
|
| | | def NPCRefresh_198(npcRefresh, tick):__DoRefreshWorldBoss(npcRefresh, tick)
|
| | | def NPCRefresh_199(npcRefresh, tick):__DoRefreshWorldBoss(npcRefresh, tick)
|
| | | def NPCRefresh_200(npcRefresh, tick):__DoRefreshWorldBoss(npcRefresh, tick)
|
| | |
|
| | |
|
| | | def ResetActivityBossRefreshCount():
|
| | |
| | | #---------------------------------------------------------------------
|
| | |
|
| | | #---------------------------------------------------------------------
|
| | | #// C1 05 进入跨服地图 #tagCMEnterCrossServer
|
| | | #
|
| | | #struct tagCMEnterCrossServer
|
| | | #{
|
| | | # tagHead Head;
|
| | | # DWORD DataMapID;
|
| | | #};
|
| | | def OnEnterCrossServer(index, clientData, tick):
|
| | | curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
| | | PlayerControl.PlayerEnterCrossServer(curPlayer, clientData.DataMapID)
|
| | | return
|
| | | |
| | | #===============================================================================
|
| | | # //03 21 进入副本活动#tagCEnterFbGameEvent
|
| | | # tagCEnterFbGameEvent * GettagCEnterFbGameEvent();
|
| | |
| | | import PlayerRefineStove
|
| | | import PlayerFamilyTech
|
| | | import PlayerCostRebate
|
| | | import GY_Query_CrossRealmReg
|
| | | import PlayerFairyCeremony
|
| | | import PlayerCrossRealmPK
|
| | | import FunctionNPCCommon
|
| | |
| | |
|
| | | #---------------------------------------------------------------------
|
| | |
|
| | | def PlayerEnterCrossServer(curPlayer, mapID):
|
| | | playerID = curPlayer.GetPlayerID()
|
| | | GameWorld.Log("玩家请求进入跨服地图: mapID=%s" % (mapID), playerID)
|
| | | if GameWorld.IsCrossServer():
|
| | | GameWorld.DebugLog("跨服服务器不允许该操作!")
|
| | | return
|
| | | |
| | | if not CrossRealmPlayer.IsCrossServerOpen():
|
| | | NotifyCode(curPlayer, "CrossMatching18")
|
| | | return
|
| | | |
| | | GY_Query_CrossRealmReg.RegisterEnterCrossServer(curPlayer, mapID)
|
| | | return
|
| | |
|
| | | ##玩家进入副本
|
| | | # @param curPlayer 玩家实例
|
| | | # @param mapID 地图ID
|
| | |
| | | import PlayerControl
|
| | | import CrossRealmPlayer
|
| | | import IPY_GameWorld
|
| | | import ChPlayer
|
| | | import ChPyNetSendPack
|
| | | import NetPackCommon
|
| | | import IpyGameDataPY
|
| | | import ChConfig
|
| | |
|
| | |
|
| | | #------------------------------------------------------------------------------
|
| | |
| | | # @remarks 函数详细说明.
|
| | | def DoResult(curPlayer, callFunName, funResult, tick):
|
| | | resultInfo = eval(funResult)
|
| | | actionType = resultInfo[0]
|
| | | mapPosInfo = resultInfo[1:]
|
| | | if not curPlayer:
|
| | | GameWorld.Log("GY_Query_CrossRealmReg DoResult %s" % funResult, curPlayer.GetPlayerID())
|
| | | if not resultInfo:
|
| | | return
|
| | | registerType, mapID, dataMapID, copyMapID, posX, posY = resultInfo
|
| | | RegisterEnterCrossServer(curPlayer, registerType, mapID, dataMapID, copyMapID, posX, posY)
|
| | | return
|
| | |
|
| | | def RegisterEnterCrossServer(curPlayer, registerType, mapID=0, dataMapID=0, copyMapID=0, posX=0, posY=0):
|
| | | playerID = curPlayer.GetPlayerID()
|
| | | GameWorld.Log("GY_Query_CrossRealmReg DoResult %s" % funResult, playerID)
|
| | |
|
| | | if GameWorld.IsCrossServer():
|
| | | GameWorld.Log(" 跨服服务器不允许上传报名数据!", playerID)
|
| | | return
|
| | |
|
| | | if not mapPosInfo:
|
| | | playerRegisterType = curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_CrossRegisterType)
|
| | | if playerRegisterType in ChConfig.RegisterEnter_CrossServerMapIDList:
|
| | | GameWorld.ErrLog("跨服已经在上传数据,不重复提交!playerRegisterType=%s,registerType=%s" % (playerRegisterType, registerType), curPlayer.GetPlayerID())
|
| | | return
|
| | | |
| | | if not mapID:
|
| | | if registerType in ChConfig.RegisterEnter_CrossServerMapIDList:
|
| | | registerTableName = "CrossPenglaiZone"
|
| | | else:
|
| | | return
|
| | | RegisterMapInfo = GetCurServerGroupIDRegisterMapInfo(registerTableName)
|
| | | if not RegisterMapInfo:
|
| | | GameWorld.ErrLog("找不到该服务器对应跨服分区: registerType=%s,registerTableName=%s" % (registerType, registerTableName))
|
| | | return
|
| | | mapID, copyMapID, posX, posY = RegisterMapInfo
|
| | | dataMapID = mapID
|
| | | |
| | | if not mapID:
|
| | | return
|
| | |
|
| | | #跨服前更新自己所属服务器组ID
|
| | | PlayerControl.UpdPlayerServerGroupID(curPlayer)
|
| | |
|
| | | mapID, dataMapID, copyMapID, posX, posY = mapPosInfo
|
| | | if registerType in ChConfig.RegisterEnter_CrossServerMapIDList:
|
| | | prepareEnterCrossServer = ChPyNetSendPack.tagMCPrepareEnterCrossServer()
|
| | | prepareEnterCrossServer.DataMapID = registerType
|
| | | NetPackCommon.SendFakePack(curPlayer, prepareEnterCrossServer)
|
| | | curPlayer.SetDict(ChConfig.Def_PlayerKey_CrossRegisterType, registerType)
|
| | | #curPlayer.SendMergeRegisterPlayer(mapID, dataMapID, copyMapID, posX, posY)
|
| | | curPlayer.SendMergeRegisterPlayerAfterChange(CrossRealmPlayer.GetCrossPlayerName(curPlayer), mapID, dataMapID, copyMapID, posX, posY)
|
| | | GameWorld.Log(" 发送跨服玩家数据注册: actionType=%s,mapID=%s,dataMapID=%s,copyMapID=%s,posX=%s,posY=%s,GetVsRoomId=%s" |
| | | % (actionType, mapID, dataMapID, copyMapID, posX, posY, curPlayer.GetVsRoomId()), playerID)
|
| | | GameWorld.Log(" 发送跨服玩家数据注册: registerType=%s,mapID=%s,dataMapID=%s,copyMapID=%s,posX=%s,posY=%s,GetVsRoomId=%s" |
| | | % (registerType, mapID, dataMapID, copyMapID, posX, posY, curPlayer.GetVsRoomId()), playerID)
|
| | | return
|
| | |
|
| | | def GetCurServerGroupIDRegisterMapInfo(tableName):
|
| | | ipyDataMgr = IpyGameDataPY.IPY_Data()
|
| | | if not hasattr(ipyDataMgr, "Get%sCount" % tableName):
|
| | | return
|
| | | |
| | | serverGroupID = GameWorld.GetServerGroupID()
|
| | | for i in xrange(getattr(ipyDataMgr, "Get%sCount" % tableName)()):
|
| | | ipyData = getattr(ipyDataMgr, "Get%sByIndex" % tableName)(i)
|
| | | serverGroupIDList = ipyData.GetServerGroupIDList()
|
| | | for serverGroupIDInfo in serverGroupIDList:
|
| | | if (isinstance(serverGroupIDInfo, tuple) and serverGroupIDInfo[0] <= serverGroupID <= serverGroupIDInfo[1]) \
|
| | | or (isinstance(serverGroupIDInfo, int) and serverGroupIDInfo == serverGroupID):
|
| | | return ipyData.GetMapID(), ipyData.GetCopyMapID(), ipyData.GetPosX(), ipyData.GetPosY()
|
| | | return
|
| | |
|
| | | ## 跨服赛报名结果(上传数据)
|
| | |
| | | def GameServer_MergeRegisterResult(index, tick):
|
| | | registerResult = IPY_GameWorld.IPY_GMMergeRegisterPlayerResult()
|
| | | curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
| | | registerType = curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_CrossRegisterType)
|
| | | curPlayer.SetDict(ChConfig.Def_PlayerKey_CrossRegisterType, 0)
|
| | | playerID = curPlayer.GetPlayerID()
|
| | | result = registerResult.GetResult()
|
| | | GameWorld.Log("GameServer_MergeRegisterResult registerType=%s,result=%s" % (registerType, result), playerID)
|
| | | if not result:
|
| | | errorMsg = registerResult.GetErrorMsg()
|
| | | GameWorld.Log("CrossRealmReg result Error:%s" % errorMsg, playerID)
|
| | | NetPackCommon.SendFakePack(curPlayer, ChPyNetSendPack.tagMCEnterCrossServerError())
|
| | | return
|
| | | |
| | | if registerType in ChConfig.RegisterEnter_CrossServerMapIDList:
|
| | | CrossRealmPlayer.DoEnterCrossRealm(curPlayer)
|
| | | PlayerControl.SetCrossRealmState(curPlayer, 1)
|
| | | NetPackCommon.SendFakePack(curPlayer, ChPyNetSendPack.tagMCStartEnterCrossServer())
|
| | | return
|
| | |
|
| | | #newAccount = registerResult.GetAccount()
|
| | | #newName = registerResult.GetPwd()
|
| | |
|
| | | msgList = str([]) |
| | | msgList = str([registerType]) |
| | | GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(curPlayer.GetID(), 0, 0, "CrossRealmReg", msgList, len(msgList))
|
| | | GameWorld.Log("GameServer_MergeRegisterResult msgList=%s" % msgList, playerID)
|
| | | return
|
| | |
|
| | |
|
| | |
| | | ClientServerMsg_PKPrepareOK = "PKPrepareOK" # 跨服PK准备完毕
|
| | | ClientServerMsg_PKBillboard = "PKBillboard" # 跨服PK排行榜
|
| | |
|
| | | # 跨服活动类型
|
| | | (
|
| | | Def_CrossAction_PK, # 跨服匹配PK
|
| | | Def_CrossAction_Penglai, # 跨服蓬莱仙境
|
| | | ) = range(2)
|
| | |
|
| | | #角色改名结果
|
| | | (
|
| | | Def_Rename_Result_MoneyErr, # 金钱不足
|