| | |
| | | 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:
|
| | |
| | | if curPlayer == None:
|
| | | continue
|
| | | PlayerControl.SetCrossMapID(curPlayer, 0)
|
| | | |
| | | else:
|
| | | CrossRealmMsg.OnCrossServerStateOpen()
|
| | | |
| | | GameWorld.GetGameWorld().SendCrossServerStateToLoginServer(isOpen)
|
| | | # 通知地图
|
| | | GameWorld.SendMapServerMsgEx(ShareDefine.Def_Notify_WorldKey_CrossServerOpen, isOpen)
|
| | |
| | |
|
| | | # 跨服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:
|