From 8cde6fcb2806974b7c35de295ce03f73c2c92bfe Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期一, 09 六月 2025 11:18:36 +0800 Subject: [PATCH] 10263 【英文】【越南】【BT】【砍树】后端支持NPC仿真实玩家战斗和快速战斗(防范剩余血量计算报错;) --- ServerPython/CoreServerGroup/GameServer/Script/Player/CrossRealmPlayer.py | 31 +++++++++++++++---------------- 1 files changed, 15 insertions(+), 16 deletions(-) diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/CrossRealmPlayer.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/CrossRealmPlayer.py index 9a0007d..c68b666 100644 --- a/ServerPython/CoreServerGroup/GameServer/Script/Player/CrossRealmPlayer.py +++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/CrossRealmPlayer.py @@ -149,6 +149,17 @@ CrossRealmMsg.SendMsgToClientServer(ShareDefine.CrossServerMsg_CrossServerState, {"isOpen":isOpen}) return +def OnCrossServerClose(): + '''关服时处理 + 注意关服只需设置关闭状态即可,不调用 DoChangeCrossServerState 改变db状态及其他额外处理 + db存储的关闭状态为维护状态(可能跨服服务器正常开着,但是运维后台GM手动设置处于维护状态) + 通知关服状态主要目的是让子服不再发送消息到跨服服务器了,等待跨服服务器重新开启即可 + ''' + isOpen = 0 + GameWorld.GetGameWorld().SetDict(ShareDefine.Def_Notify_WorldKey_CrossServerOpen, isOpen) + CrossRealmMsg.SendMsgToClientServer(ShareDefine.CrossServerMsg_CrossServerState, {"isOpen":isOpen}) + return + def CrossServerMsg_CrossServerState(msgData): ## 子服收到跨服服务器状态变更,子服不存DB,默认跨服维护中,连接跨服成功后由跨服同步状态直接更新到字典即可,没连上就默认维护中 if "crossZoneName" in msgData: @@ -167,7 +178,9 @@ if curPlayer == None: continue PlayerControl.SetCrossMapID(curPlayer, 0) - + else: + CrossRealmMsg.OnCrossServerStateOpen() + GameWorld.GetGameWorld().SendCrossServerStateToLoginServer(isOpen) # 通知地图 GameWorld.SendMapServerMsgEx(ShareDefine.Def_Notify_WorldKey_CrossServerOpen, isOpen) @@ -241,21 +254,7 @@ # 跨服PK上传数据完毕,通知跨服服务器,准备完毕 if registerMap == ChConfig.Def_FBMapID_CrossRealmPK: - regVSRoomID = curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_MergeRegisterRoomID) - vsRoomID = curPlayer.GetVsRoomId() - - if regVSRoomID != vsRoomID: - GameWorld.Log("上传跨服服务器的 regVSRoomID=%s 与玩家当前的 roomID=%s 不同!不发送准备完毕!" - % (regVSRoomID, vsRoomID), playerID) - return - - dataMsg = { - "accID":curPlayer.GetAccID(), # 角色账号ID - "playerID":playerID, # 角色ID - "vsRoomID":vsRoomID, # 所属对战房间ID - } - CrossRealmMsg.SendMsgToCrossServer(ShareDefine.ClientServerMsg_PKPrepareOK, dataMsg) - GameWorld.Log("通知跨服服务器, 玩家匹配PK准备完毕!%s" % str(dataMsg), playerID) + pass # 其他的,在上传数据完毕后,使用通用的通知可进入跨服 else: -- Gitblit v1.8.0