hxp
2019-01-07 d8cf06e323dca770512529f741a667278c0c8786
5722 【后端】【1.5】跨服BOSS开发(进入跨服地图通用逻辑)
13个文件已修改
1个文件已添加
311 ■■■■ 已修改文件
PySysDB/PySysDBPY.h 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/CoreServerGroup/GameServer/Script/ChConfig.py 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossRealmPK.py 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/CoreServerGroup/GameServer/Script/Player/CrossRealmPlayer.py 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_CrossPenglai.py 84 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCustomRefresh.py 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_CrossRealmReg.py 73 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PySysDB/PySysDBPY.h
@@ -1442,6 +1442,18 @@
    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
ServerPython/CoreServerGroup/GameServer/Script/ChConfig.py
@@ -636,7 +636,7 @@
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"  #是否跨服匹配中
@@ -680,6 +680,10 @@
Def_FBMapID_ChaosDemon = 31180
#娲皇遗迹
Def_FBMapID_QueenRelics = 51010
#跨服竞技场
Def_FBMapID_CrossRealmPK = 32010
#跨服蓬莱仙境
Def_FBMapID_CrossPenglai = 32020
#同系职业枚举
JOB_TYPY_COUNT = 5
ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossRealmPK.py
@@ -1702,7 +1702,6 @@
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:
@@ -1727,7 +1726,7 @@
            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
ServerPython/CoreServerGroup/GameServer/Script/Player/CrossRealmPlayer.py
@@ -132,15 +132,15 @@
    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): 
@@ -153,13 +153,16 @@
    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()
        
@@ -178,13 +181,13 @@
        
    # 其他的,在上传数据完毕后,使用通用的通知可进入跨服
    else:
        NotifyCanEnterMergeServer(curPlayer, actionType)
        NotifyCanEnterMergeServer(curPlayer, registerType)
        
    # hxp 2015.09.10 跨服boss,后面的暂时不需要
    return
def NotifyCanEnterMergeServer(curPlayer, actionType):
def NotifyCanEnterMergeServer(curPlayer, registerType):
    # 通用包,通知客户端可进入跨服服务器
    return
ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
@@ -1206,12 +1206,6 @@
ClientServerMsg_PKPrepareOK = "PKPrepareOK"             # 跨服PK准备完毕
ClientServerMsg_PKBillboard = "PKBillboard"             # 跨服PK排行榜
# 跨服活动类型
(
Def_CrossAction_PK,  # 跨服匹配PK
Def_CrossAction_Penglai,  # 跨服蓬莱仙境
) = range(2)
#角色改名结果
(
Def_Rename_Result_MoneyErr,  # 金钱不足
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini
@@ -373,9 +373,9 @@
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
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -1790,6 +1790,12 @@
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, 
@@ -1878,6 +1884,7 @@
                'XMZZ':[Def_FBMapID_XMZZ], #仙魔之争
                'Dogz':[Def_FBMapID_Dogz], #神兽副本
                'CrossRealmPK':[Def_FBMapID_CrossRealmPK], #跨服竞技场
                'CrossPenglai':[Def_FBMapID_CrossPenglai], #跨服蓬莱仙境
                'GatherSoul':[Def_FBMapID_GatherSoul],#聚魂副本
                }
@@ -3216,6 +3223,7 @@
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"  # 查询科技等级提升状态
@@ -3397,8 +3405,6 @@
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"  # 改名锁
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_CrossPenglai.py
New file
@@ -0,0 +1,84 @@
#!/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
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
@@ -1139,6 +1139,15 @@
                        ("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),
@@ -3505,6 +3514,25 @@
    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():
    
@@ -3835,6 +3863,8 @@
        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)
@@ -4225,6 +4255,8 @@
    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
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCustomRefresh.py
@@ -336,6 +336,27 @@
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():
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
@@ -4275,6 +4275,18 @@
#---------------------------------------------------------------------
#---------------------------------------------------------------------
#// 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();
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
@@ -81,6 +81,7 @@
import PlayerRefineStove
import PlayerFamilyTech
import PlayerCostRebate
import GY_Query_CrossRealmReg
import PlayerFairyCeremony
import PlayerCrossRealmPK
import FunctionNPCCommon
@@ -1566,6 +1567,20 @@
#---------------------------------------------------------------------
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
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_CrossRealmReg.py
@@ -19,7 +19,10 @@
import PlayerControl
import CrossRealmPlayer
import IPY_GameWorld
import ChPlayer
import ChPyNetSendPack
import NetPackCommon
import IpyGameDataPY
import ChConfig
#------------------------------------------------------------------------------ 
@@ -44,29 +47,66 @@
#  @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
## 跨服赛报名结果(上传数据)
@@ -76,19 +116,28 @@
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
    
    
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
@@ -1206,12 +1206,6 @@
ClientServerMsg_PKPrepareOK = "PKPrepareOK"             # 跨服PK准备完毕
ClientServerMsg_PKBillboard = "PKBillboard"             # 跨服PK排行榜
# 跨服活动类型
(
Def_CrossAction_PK,  # 跨服匹配PK
Def_CrossAction_Penglai,  # 跨服蓬莱仙境
) = range(2)
#角色改名结果
(
Def_Rename_Result_MoneyErr,  # 金钱不足