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