From d8cf06e323dca770512529f741a667278c0c8786 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期一, 07 一月 2019 17:38:57 +0800
Subject: [PATCH] 5722 【后端】【1.5】跨服BOSS开发(进入跨服地图通用逻辑)

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py                                     |    6 -
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_CrossRealmReg.py       |   75 ++++++++++--
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCustomRefresh.py                            |   21 +++
 ServerPython/CoreServerGroup/GameServer/Script/Player/CrossRealmPlayer.py                                              |   25 ++-
 ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossRealmPK.py                                          |    3 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini                                             |    6 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py                                   |   32 +++++
 ServerPython/CoreServerGroup/GameServer/Script/ChConfig.py                                                             |    6 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py                                 |   12 ++
 PySysDB/PySysDBPY.h                                                                                                    |   12 ++
 ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py                                                          |    6 -
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py                            |   15 ++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py                                        |   10 +
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_CrossPenglai.py |   84 ++++++++++++++
 14 files changed, 269 insertions(+), 44 deletions(-)

diff --git a/PySysDB/PySysDBPY.h b/PySysDB/PySysDBPY.h
index 6ab6cee..b97f526 100644
--- a/PySysDB/PySysDBPY.h
+++ b/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
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChConfig.py b/ServerPython/CoreServerGroup/GameServer/Script/ChConfig.py
index 24383be..f9d1fcf 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ChConfig.py
+++ b/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
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossRealmPK.py b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossRealmPK.py
index 6a9ef00..a49ec94 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossRealmPK.py
+++ b/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
 
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/CrossRealmPlayer.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/CrossRealmPlayer.py
index adbe385..3937a1b 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/Player/CrossRealmPlayer.py
+++ b/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
 
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py b/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
index b1b8424..62a0a18 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
+++ b/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,  # 金钱不足
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini
index 923646a..ba09622 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini
+++ b/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
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
index 9f58909..f5f6b9d 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
+++ b/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"  # 改名锁
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_CrossPenglai.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_CrossPenglai.py
new file mode 100644
index 0000000..4e847df
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_CrossPenglai.py
@@ -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
+
+
+
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
index 683dc1c..2825e23 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
+++ b/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
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCustomRefresh.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCustomRefresh.py
index 1c58de8..6aa5ef7 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCustomRefresh.py
+++ b/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():
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
index df300e4..6cba5b1 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
+++ b/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();
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
index 815c4d8..8b53f37 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
+++ b/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
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_CrossRealmReg.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_CrossRealmReg.py
index 98d7d21..f3ff343 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_CrossRealmReg.py
+++ b/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
-    
-    playerID = curPlayer.GetPlayerID()
-    GameWorld.Log("GY_Query_CrossRealmReg DoResult %s" % funResult, playerID)
+    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()
     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
     
     
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
index b1b8424..62a0a18 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
+++ b/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,  # 金钱不足

--
Gitblit v1.8.0