From b2e6e02a9b7e3ca95047bbdefce5261edb23658f Mon Sep 17 00:00:00 2001
From: hch <305670599@qq.com>
Date: 星期二, 08 十月 2024 14:14:08 +0800
Subject: [PATCH] 10263 【越南】后端支持NPC仿真实玩家战斗和快速战斗

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IPY_PlayerDefine.py                         |    1 
 ServerPython/CoreServerGroup/GameServer/Script/IPY_ServerDefine.py                                              |    2 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/ClearPlayerMirror.py            |   39 +++++++++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IPY_ServerDefine.py                         |    2 
 ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerQuery.py                                            |    4 +
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IPY_GameObj.py                              |    4 +
 ServerPython/CoreServerGroup/GameServer/Script/IPY_PlayerDefine.py                                              |    1 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IPY_GameWorld1.py                           |    1 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NetPackCommon.py                            |    3 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_PlayerMirror.py |   42 ++++++++++
 ServerPython/CoreServerGroup/GameServer/Script/IPY_MapServerToGameServer.py                                     |   26 ++++++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/PlayerMirror.py                 |   43 ++++++++++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerBackup.py                      |    4 +
 ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/QueryDBLogicResult.py                             |   50 ++++++++++++
 ServerPython/CoreServerGroup/GameServer/Script/ChConfig.py                                                      |    3 
 ServerPython/CoreServerGroup/GameServer/Script/IPY_GameServer1.py                                               |    1 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py                                 |    3 
 17 files changed, 227 insertions(+), 2 deletions(-)

diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChConfig.py b/ServerPython/CoreServerGroup/GameServer/Script/ChConfig.py
index 79ab4a7..28bf1f0 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ChConfig.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ChConfig.py
@@ -451,7 +451,7 @@
 Def_Billboard_MaxCnt = 100
 #---------------------------------------------------------------------
 #请求类型(需要和MapServer中的一致)
-Def_QueryType_Count = 55
+Def_QueryType_Count = 56
 (
 queryType_sqtPlayer,                  #查询玩家
 queryType_sqtFamilyWar,               #家族战
@@ -508,6 +508,7 @@
 queryType_EnterFB,                    #进入副本
 queryType_NPCInfo,                    #查询NPCInfo
 queryType_NPCCnt,                     #查询NPC数量
+queryType_MirrorPlayer,               #镜像玩家
 ) = range(0, Def_QueryType_Count)
 #------------------------------------------------------------------------------ 
 #家族某行为类型保存的条数
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/QueryDBLogicResult.py b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/QueryDBLogicResult.py
new file mode 100644
index 0000000..f6a3985
--- /dev/null
+++ b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/QueryDBLogicResult.py
@@ -0,0 +1,50 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#
+#
+##@package QueryDBLogicResult.py
+#
+# @todo:GameServer向DB请求的回复信息
+
+import GameWorld
+import IPY_GameServer
+import ChConfig
+
+#-------------------------------------------------------------------------
+
+# //04 08 GameServer向DB请求的回复信息 tagDGQueryDBLogicResult
+
+# struct tagDGQueryDBLogicResult
+# {
+# 	tagHead	Head;
+# 	BYTE	Result;			//结果:1成功;0失败
+# 	DWORD	ID;			//查询的ID
+# 	BYTE	QueryType;		//查询的类型
+# 	DWORD	DataLen;
+# 	char	Data[DataLen];		//原样返回的附加数据
+# 	DWORD	ResultSetLen;
+# 	char	ResultSet[ResultSetLen];	//结果集
+# };
+
+## DB返回到GameServer信息
+#  @param None None
+#  @return None
+def RecvDGDBLogicResult(index, tick):
+    dbResultPack = IPY_GameServer.IPY_DGQueryDBLogicResult()
+    result = dbResultPack.GetResult()  #结果:1成功,0失败
+    if result == 0:
+        return
+    queryType = dbResultPack.GetQueryType()
+    if queryType == 0:
+        data = eval(dbResultPack.GetData())
+        playerID = data['id'] #发起请求的玩家ID
+        mapID = data['mapid']
+        curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(playerID)
+        if not curPlayer:
+            return
+        
+        data['playerData'] = dbResultPack.GetResultSet()
+        dateStr = str(data)
+        GameWorld.GetPlayerManager().MapServer_QueryPlayer(0, ChConfig.queryType_MirrorPlayer, playerID, mapID,
+                        "PlayerMirror", dateStr, len(dateStr), curPlayer.GetRouteServerIndex())
+    return
\ No newline at end of file
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/IPY_GameServer1.py b/ServerPython/CoreServerGroup/GameServer/Script/IPY_GameServer1.py
index ee540c2..bf46866 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/IPY_GameServer1.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/IPY_GameServer1.py
@@ -999,6 +999,7 @@
     def SendProxyDBOper(self, *args): return _IPY_GameServer1.IPY_GameWorld_SendProxyDBOper(self, *args)
     def SendMergerChildToCenterStringData(self, *args): return _IPY_GameServer1.IPY_GameWorld_SendMergerChildToCenterStringData(self, *args)
     def SendCrossServerStateToLoginServer(self, *args): return _IPY_GameServer1.IPY_GameWorld_SendCrossServerStateToLoginServer(self, *args)
+    def SendDBLogic(self, *args): return _IPY_GameServer1.IPY_GameWorld_SendDBLogic(self, *args)
 IPY_GameWorld_swigregister = _IPY_GameServer1.IPY_GameWorld_swigregister
 IPY_GameWorld_swigregister(IPY_GameWorld)
 
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/IPY_MapServerToGameServer.py b/ServerPython/CoreServerGroup/GameServer/Script/IPY_MapServerToGameServer.py
index 81a6849..2f6949b 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/IPY_MapServerToGameServer.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/IPY_MapServerToGameServer.py
@@ -961,6 +961,32 @@
 IPY_LGCrossLoginResult_swigregister(IPY_LGCrossLoginResult)
 
 
+def GettagDGQueryDBLogicResult():
+  return _IPY_MapServerToGameServer.GettagDGQueryDBLogicResult()
+GettagDGQueryDBLogicResult = _IPY_MapServerToGameServer.GettagDGQueryDBLogicResult
+class IPY_DGQueryDBLogicResult(_object):
+    __swig_setmethods__ = {}
+    __setattr__ = lambda self, name, value: _swig_setattr(self, IPY_DGQueryDBLogicResult, name, value)
+    __swig_getmethods__ = {}
+    __getattr__ = lambda self, name: _swig_getattr(self, IPY_DGQueryDBLogicResult, name)
+    __repr__ = _swig_repr
+    def GetResult(self): return _IPY_MapServerToGameServer.IPY_DGQueryDBLogicResult_GetResult(self)
+    def GetID(self): return _IPY_MapServerToGameServer.IPY_DGQueryDBLogicResult_GetID(self)
+    def GetQueryType(self): return _IPY_MapServerToGameServer.IPY_DGQueryDBLogicResult_GetQueryType(self)
+    def GetDataLen(self): return _IPY_MapServerToGameServer.IPY_DGQueryDBLogicResult_GetDataLen(self)
+    def GetData(self): return _IPY_MapServerToGameServer.IPY_DGQueryDBLogicResult_GetData(self)
+    def GetResultSetLen(self): return _IPY_MapServerToGameServer.IPY_DGQueryDBLogicResult_GetResultSetLen(self)
+    def GetResultSet(self): return _IPY_MapServerToGameServer.IPY_DGQueryDBLogicResult_GetResultSet(self)
+    def __init__(self): 
+        this = _IPY_MapServerToGameServer.new_IPY_DGQueryDBLogicResult()
+        try: self.this.append(this)
+        except: self.this = this
+    __swig_destroy__ = _IPY_MapServerToGameServer.delete_IPY_DGQueryDBLogicResult
+    __del__ = lambda self : None;
+IPY_DGQueryDBLogicResult_swigregister = _IPY_MapServerToGameServer.IPY_DGQueryDBLogicResult_swigregister
+IPY_DGQueryDBLogicResult_swigregister(IPY_DGQueryDBLogicResult)
+
+
 def GettagGCalcFamilyWarResult():
   return _IPY_MapServerToGameServer.GettagGCalcFamilyWarResult()
 GettagGCalcFamilyWarResult = _IPY_MapServerToGameServer.GettagGCalcFamilyWarResult
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/IPY_PlayerDefine.py b/ServerPython/CoreServerGroup/GameServer/Script/IPY_PlayerDefine.py
index 99becc1..7945808 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/IPY_PlayerDefine.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/IPY_PlayerDefine.py
@@ -253,6 +253,7 @@
 Def_Player_Truck_ID_Rate = _IPY_PlayerDefine.Def_Player_Truck_ID_Rate
 Def_Player_Pet_ID_Rate = _IPY_PlayerDefine.Def_Player_Pet_ID_Rate
 Def_Player_PetList_MaxCnt = _IPY_PlayerDefine.Def_Player_PetList_MaxCnt
+Def_Player_MirrorID = _IPY_PlayerDefine.Def_Player_MirrorID
 
 def MakePetID(*args):
   return _IPY_PlayerDefine.MakePetID(*args)
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/IPY_ServerDefine.py b/ServerPython/CoreServerGroup/GameServer/Script/IPY_ServerDefine.py
index 1edae98..2c8bdb0 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/IPY_ServerDefine.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/IPY_ServerDefine.py
@@ -285,6 +285,7 @@
 dgBroadcastMergeClient = _IPY_ServerDefine.dgBroadcastMergeClient
 dgMergerChildToCenter = _IPY_ServerDefine.dgMergerChildToCenter
 dgLoginMergeServer = _IPY_ServerDefine.dgLoginMergeServer
+dgDBGameServerToDBLogicResult = _IPY_ServerDefine.dgDBGameServerToDBLogicResult
 gmMapInitOk = _IPY_ServerDefine.gmMapInitOk
 gmPlayerInit = _IPY_ServerDefine.gmPlayerInit
 gmPlayerLogout = _IPY_ServerDefine.gmPlayerLogout
@@ -512,6 +513,7 @@
 gstSendDBMergeClientMsg = _IPY_ServerDefine.gstSendDBMergeClientMsg
 gstSendDBMergeClientListMsg = _IPY_ServerDefine.gstSendDBMergeClientListMsg
 gstMergePlayerData = _IPY_ServerDefine.gstMergePlayerData
+gstDBLogic = _IPY_ServerDefine.gstDBLogic
 gstMax = _IPY_ServerDefine.gstMax
 btgServerSupport = _IPY_ServerDefine.btgServerSupport
 btgLineID = _IPY_ServerDefine.btgLineID
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerQuery.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerQuery.py
index bf3468f..f458c71 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerQuery.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerQuery.py
@@ -282,6 +282,10 @@
     elif queryType == ChConfig.queryType_NPCCnt:
         __QueryMapNPCCntInfo(curPlayer, queryCallName, sendCMD, tick)
         return
+    elif queryType == ChConfig.queryType_MirrorPlayer:
+        data = str({"id" : curPlayer.GetPlayerID(), "mapid" : GameWorld.GetQueryPlayerMapID(curPlayer)})
+        GameWorld.GetGameWorld().SendDBLogic(0, queryID, data, len(data))
+        return
     else:
         GameWorld.ErrLog('unKnow queryType = %s' % (queryType))
         
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
index 6e33d44..ff3f774 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -2647,7 +2647,7 @@
 
 #---------------------------------------------------------------------
 #请求类型(需要和GameServer中的一致)
-Def_QueryType_Count = 55
+Def_QueryType_Count = 56
 (
 queryType_sqtPlayer,                  #查询玩家
 queryType_sqtFamilyWar,               #家族战
@@ -2704,6 +2704,7 @@
 queryType_EnterFB,                    #进入副本
 queryType_NPCInfo,                    #查询NPCInfo
 queryType_NPCCnt,                     #查询NPC数量
+queryType_MirrorPlayer,               #镜像玩家
 ) = range(0, Def_QueryType_Count)
 #------------------------------------------------------------------------------ 
 #---------------------------------------------------------------------
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/ClearPlayerMirror.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/ClearPlayerMirror.py
new file mode 100644
index 0000000..8dafd9d
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/ClearPlayerMirror.py
@@ -0,0 +1,39 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+
+##@package ClearPlayerMirror
+# 清理玩家镜像
+
+
+import GameWorld
+
+## GM命令执行入口
+#  @param curPlayer 当前玩家
+#  @param playerList 参数列表 [玩家ID]
+#  @return None
+#  @remarks 函数详细说明.
+def OnExec(curPlayer, playerList):
+    playerID = 0
+    if len(playerList) != 0:
+        playerID = playerList[0]
+    
+    if playerID != 0:
+        mirrorPlayer = GameWorld.GetPlayerManager().FindPlayerByID(playerID)
+        if mirrorPlayer:
+            mirrorPlayer.DeleteMirror()
+        return
+
+    ids = []
+    playerManager = GameWorld.GetPlayerManager()
+    for i in range(playerManager.OnlineCount()):
+        mirrorPlayer = playerManager.OnlineAt(i)
+        if not mirrorPlayer:
+            continue
+        
+        ids.append(mirrorPlayer.GetID())
+
+    for id in ids:
+        mirrorPlayer = playerManager.FindPlayerByID(id)
+        if not mirrorPlayer:
+            continue
+        mirrorPlayer.DeleteMirror()
\ No newline at end of file
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/PlayerMirror.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/PlayerMirror.py
new file mode 100644
index 0000000..7758852
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/PlayerMirror.py
@@ -0,0 +1,43 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+
+##@package PlayerMirror
+# 创建玩家镜像, 考虑地图人满问题,py可以做个预判,可调整地图配置的人数上限
+
+
+import GameWorld
+import PlayerEventCounter
+import ChPlayer
+import GameServerRefresh
+import ChConfig
+
+## GM命令执行入口
+#  @param curPlayer 当前玩家
+#  @param playerList 参数列表 [玩家ID]
+#  @return None
+#  @remarks 函数详细说明.
+def OnExec(curPlayer, playerList):
+    playerID = 0
+    if len(playerList) != 0:
+        playerID = playerList[0]
+    
+    if playerID != 0:
+        #向GameServer请求其他玩家数据
+        #开始查询
+        curPlayer.GameServer_QueryPlayerByID(ChConfig.queryType_MirrorPlayer, playerID, 'PlayerMirror', '', 0)
+        return
+
+    playerData = curPlayer.GetPackData()
+    # playerData为base64后的数据
+    mirrorPlayer = GameWorld.GetGameWorld().CreateMirrorPlayer(playerData, curPlayer.GetPosX(), curPlayer.GetPosY())
+    
+    GameWorld.Log("mirrorPlayer.GetRealPlayerID %s"%mirrorPlayer.GetRealPlayerID())
+    #CreateMirrorPlayer 中会调用到 ChPlayer.PlayerLogin
+    #是否镜像玩家 判断 mirrorPlayer.GetRealPlayerID()是否为0
+    #python自己处理,以下逻辑,可以在DoPlayerLogin函数最后 判断是镜像玩家后统一处理
+
+    index = mirrorPlayer.GetIndex()
+    tick = GameWorld.GetGameWorld().GetTick()
+    PlayerEventCounter.GameServer_InitOK(index, tick)
+    ChPlayer.LoadMapOK(index, tick)
+    GameServerRefresh.GameSever_PlayerInitOK(index, tick)
\ No newline at end of file
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IPY_GameObj.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IPY_GameObj.py
index 22e91b7..d5f6a8c 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IPY_GameObj.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IPY_GameObj.py
@@ -1900,6 +1900,10 @@
     def SendDBFinishRecharge(self, *args): return _IPY_GameObj.IPY_Player_SendDBFinishRecharge(self, *args)
     def SendDBQueryRecharge(self): return _IPY_GameObj.IPY_Player_SendDBQueryRecharge(self)
     def GetMergePlayerData(self): return _IPY_GameObj.IPY_Player_GetMergePlayerData(self)
+    def GetPackData(self): return _IPY_GameObj.IPY_Player_GetPackData(self)
+    def GetRealPlayerID(self): return _IPY_GameObj.IPY_Player_GetRealPlayerID(self)
+    def GetIndex(self): return _IPY_GameObj.IPY_Player_GetIndex(self)
+    def DeleteMirror(self): return _IPY_GameObj.IPY_Player_DeleteMirror(self)
     def SendMergeRegisterPlayer(self, selectMapID = 0, selectDataMapID = 0, selectCopyMapID = 0, 
     selectPosX = 0, selectPosY = 0): return _IPY_GameObj.IPY_Player_SendMergeRegisterPlayer(self, selectMapID, selectDataMapID, selectCopyMapID, selectPosX, 
     selectPosY)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IPY_GameWorld1.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IPY_GameWorld1.py
index 5d67aeb..e26e986 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IPY_GameWorld1.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IPY_GameWorld1.py
@@ -509,6 +509,7 @@
     def EventReport_EventReport(self, *args): return _IPY_GameWorld1.IPY_GameWorld_EventReport_EventReport(self, *args)
     def EventReport_SetEventReportParam(self, *args): return _IPY_GameWorld1.IPY_GameWorld_EventReport_SetEventReportParam(self, *args)
     def SendGameServerGeneralPack(self, *args): return _IPY_GameWorld1.IPY_GameWorld_SendGameServerGeneralPack(self, *args)
+    def CreateMirrorPlayer(self, *args): return _IPY_GameWorld1.IPY_GameWorld_CreateMirrorPlayer(self, *args)
 IPY_GameWorld_swigregister = _IPY_GameWorld1.IPY_GameWorld_swigregister
 IPY_GameWorld_swigregister(IPY_GameWorld)
 
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IPY_PlayerDefine.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IPY_PlayerDefine.py
index 850d2fb..23012f6 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IPY_PlayerDefine.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IPY_PlayerDefine.py
@@ -254,6 +254,7 @@
 Def_Player_Truck_ID_Rate = _IPY_PlayerDefine.Def_Player_Truck_ID_Rate
 Def_Player_Pet_ID_Rate = _IPY_PlayerDefine.Def_Player_Pet_ID_Rate
 Def_Player_PetList_MaxCnt = _IPY_PlayerDefine.Def_Player_PetList_MaxCnt
+Def_Player_MirrorID = _IPY_PlayerDefine.Def_Player_MirrorID
 
 def MakePetID(*args):
   return _IPY_PlayerDefine.MakePetID(*args)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IPY_ServerDefine.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IPY_ServerDefine.py
index 26aee35..679f7dc 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IPY_ServerDefine.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IPY_ServerDefine.py
@@ -286,6 +286,7 @@
 dgBroadcastMergeClient = _IPY_ServerDefine.dgBroadcastMergeClient
 dgMergerChildToCenter = _IPY_ServerDefine.dgMergerChildToCenter
 dgLoginMergeServer = _IPY_ServerDefine.dgLoginMergeServer
+dgDBGameServerToDBLogicResult = _IPY_ServerDefine.dgDBGameServerToDBLogicResult
 gmMapInitOk = _IPY_ServerDefine.gmMapInitOk
 gmPlayerInit = _IPY_ServerDefine.gmPlayerInit
 gmPlayerLogout = _IPY_ServerDefine.gmPlayerLogout
@@ -513,6 +514,7 @@
 gstSendDBMergeClientMsg = _IPY_ServerDefine.gstSendDBMergeClientMsg
 gstSendDBMergeClientListMsg = _IPY_ServerDefine.gstSendDBMergeClientListMsg
 gstMergePlayerData = _IPY_ServerDefine.gstMergePlayerData
+gstDBLogic = _IPY_ServerDefine.gstDBLogic
 gstMax = _IPY_ServerDefine.gstMax
 btgServerSupport = _IPY_ServerDefine.btgServerSupport
 btgLineID = _IPY_ServerDefine.btgLineID
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NetPackCommon.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NetPackCommon.py
index df5680d..daa622f 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NetPackCommon.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NetPackCommon.py
@@ -286,6 +286,9 @@
 ##发送Map到GameServer的沟通包
 #
 def SendPyPackToGameServer(sendPack):
+    if hasattr(sendPack, 'PlayerID'):
+        if sendPack.PlayerID >= 100000000:
+            return
     routeIndex = GameWorld.GetGameWorld().GetLineNO()
     #这里必须用GetRealMapID,GetMapID 实际取到的是DataMapID,在有分线的地图会问题
     mapID = GameWorld.GetGameWorld().GetRealMapID()  
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerBackup.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerBackup.py
index f127920..efc2b37 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerBackup.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerBackup.py
@@ -29,6 +29,10 @@
     if not PlayerBakRoot:
         #GameWorld.DebugLog("未启用备档")
         return
+    
+    if curPlayer.GetRealPlayerID() != 0:
+        return
+
     curTime = int(time.time())
     backupTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_BackupTime)
     if not backupTime:
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_PlayerMirror.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_PlayerMirror.py
new file mode 100644
index 0000000..5375ace
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_PlayerMirror.py
@@ -0,0 +1,42 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#---------------------------------------------------------------------
+#
+#---------------------------------------------------------------------
+##@package GY_Query_PlayerMirror
+
+import GameWorld
+import PlayerEventCounter
+import ChPlayer
+import GameServerRefresh
+#---------------------------------------------------------------------
+
+#  @param query_Type 请求类型
+#  @param query_ID 请求的玩家ID
+#  @param packCMDList 发包命令
+#  @param tick 当前时间
+#  @return "True" or "False" or ""
+def DoLogic(query_Type, query_ID, packCMDList, tick):
+    curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(query_ID)
+    
+    if not curPlayer or curPlayer.IsEmpty():
+        return ''
+    playerData = packCMDList['playerData']
+    # playerData为base64后的数据
+    mirrorPlayer = GameWorld.GetGameWorld().CreateMirrorPlayer(playerData, curPlayer.GetPosX(), curPlayer.GetPosY())
+    
+
+    #CreateMirrorPlayer 中会调用到 ChPlayer.PlayerLogin
+    #是否镜像玩家 判断 mirrorPlayer.GetRealPlayerID()是否为0
+    #python自己处理,以下逻辑,可以在DoPlayerLogin函数最后 判断是镜像玩家后统一处理
+
+    index = mirrorPlayer.GetIndex()
+    tick = GameWorld.GetGameWorld().GetTick()
+    PlayerEventCounter.GameServer_InitOK(index, tick)
+    ChPlayer.LoadMapOK(index, tick)
+    GameServerRefresh.GameSever_PlayerInitOK(index, tick)
+    return ''
+
+
+
+

--
Gitblit v1.8.0