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/Player/RemoteQuery/GY_Query_CrossRealmReg.py |   75 +++++++++++++++++++++++++++++++------
 1 files changed, 62 insertions(+), 13 deletions(-)

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
     
     

--
Gitblit v1.8.0