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