From 89cd5c46258340014d31e4b8c6ee7df0e3b00c2d Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期一, 16 三月 2026 19:51:54 +0800
Subject: [PATCH] 16 卡牌服务端(自动开服相关;A103增加同步开服时间;增加是否允许加入跨服标记,默认否;跨服公会仅在允许跨服时才会加入跨服;优化ServersConfig.json配置,支持后台导出,优化战斗服务器配置;)
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ReadChConfig.py | 19 ++++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyMongoDB/GMToolLogicProcess/Commands/GMT_SetCanCross.py | 41 ++++++++++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/ServerDay.py | 2
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/GameWorldEvent.py | 30 +------
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py | 1
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py | 8 +
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py | 1
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/DB/StructData/DBFamily.py | 4 +
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyMongoDB/GMToolLogicProcess/Commands/GMT_Face.py | 0
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyMongoDB/GMToolLogicProcess/Commands/GMT_SetOpenServerTime.py | 55 +++++++++++++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyMongoDB/GMToolLogicProcess/Commands/GMT_CheckOpenServer.py | 27 ++++--
11 files changed, 148 insertions(+), 40 deletions(-)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
index 9005953..13a57ab 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
@@ -1405,6 +1405,7 @@
("NowSecond", c_ubyte),
("NowMicSecond", c_int),
("WeekOfYear", c_ubyte), #一年中的第几周
+ ("OpenServerTime", c_int), #开服时间戳
]
def __init__(self):
@@ -1433,6 +1434,7 @@
self.NowSecond = 0
self.NowMicSecond = 0
self.WeekOfYear = 0
+ self.OpenServerTime = 0
return
def GetLength(self):
@@ -1456,7 +1458,8 @@
NowMinute:%d,
NowSecond:%d,
NowMicSecond:%d,
- WeekOfYear:%d
+ WeekOfYear:%d,
+ OpenServerTime:%d
'''\
%(
self.Cmd,
@@ -1472,7 +1475,8 @@
self.NowMinute,
self.NowSecond,
self.NowMicSecond,
- self.WeekOfYear
+ self.WeekOfYear,
+ self.OpenServerTime
)
return DumpString
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/DB/StructData/DBFamily.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/DB/StructData/DBFamily.py
index b085183..d5d79ea 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/DB/StructData/DBFamily.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/DB/StructData/DBFamily.py
@@ -1243,6 +1243,10 @@
CheckMainServerNoFamilyToCross(connServerID)
return
+ if not DBDataMgr.GetEventTrigMgr().GetValue(ShareDefine.Def_CanCross):
+ GameWorld.Log("该服务器暂时未开放加入跨服!")
+ return
+
NeedServerDay = IpyGameDataPY.GetFuncCfg("FamilyCross", 1)
serverDay = DBDataMgr.GetEventTrigMgr().GetValue(ShareDefine.Def_ServerDay) + 1
if serverDay < NeedServerDay:
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/ServerDay.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/ServerDay.py
index f2f77e6..1505c96 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/ServerDay.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/ServerDay.py
@@ -65,7 +65,9 @@
IsMixServer = DBDataMgr.GetEventTrigMgr().GetValue(ShareDefine.Def_IsMixServer)
MixDay = DBDataMgr.GetEventTrigMgr().GetValue(ShareDefine.Def_MixServerDay) + 1
OpenWeekday = DBDataMgr.GetEventTrigMgr().GetValue(ShareDefine.Def_OpenServerWeekday)
+ openServerTime = DBDataMgr.GetEventTrigMgr().GetValue(ShareDefine.Def_InitOpenServerTime)
GameWorld.DebugAnswer(curPlayer, '开服星期%s, 天数:%s 是否合服:%s, 合服天数:%s' % (OpenWeekday, ServerDay, IsMixServer, MixDay))
+ GameWorld.DebugAnswer(curPlayer, '开服时间:%s' % GameWorld.ChangeTimeNumToStr(openServerTime))
return
def __clearOpenServerDay(curPlayer):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/GameWorldEvent.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/GameWorldEvent.py
index 4e8750f..621bc11 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/GameWorldEvent.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/GameWorldEvent.py
@@ -161,30 +161,6 @@
#PlayerDBOper.FindDBOper(PlayerDBOper.Table_DBPlayer, {}, {"PlayerID":1, "AccID":1, "_id":0}, LoadDBPlayerRet)
return
-def GMSetOpenServerTime(openServerTime):
- '''GM设置开服时间
- @param openServerTime: 开服时间戳
- @return: 1-成功;-1-设置的时间异常;-2-已经设置过且开服了,不能重复设置
- '''
- serverID = GameWorld.GetGameWorld().GetServerID()
- curTime = int(time.time())
- if openServerTime < curTime:
- GameWorld.ErrLog("当前时间已经超过设置的开服时间,不能设置! serverID=%s" % serverID)
- #GMCommon.GMCommandResult(orderId, gmCmdDict, GMCommon.Def_InvalidTime, "The set time is less than the current time.")
- return -1
- setOpenServerTime = DBDataMgr.GetEventTrigMgr().GetValue(ShareDefine.Def_SetOpenServerTime)
- if setOpenServerTime and curTime > setOpenServerTime:
- GameWorld.ErrLog("已经设置过且开服了,不能重复设置! serverID=%s" % serverID)
- #GMCommon.GMCommandResult(orderId, gmCmdDict, GMCommon.Def_ServerAlreadyOpen, "The server has been opened.")
- return -2
-
- DBDataMgr.GetEventTrigMgr().SetValue(ShareDefine.Def_SetOpenServerTime, openServerTime)
- GameWorld.Log("GM设置开服时间: serverID=%s,%s,%s" % (serverID, GameWorld.ChangeTimeNumToStr(openServerTime), openServerTime))
- if openServerTime == curTime:
- OnNewServerOpen(GameWorld.GetGameWorld().GetTick())
-
- return 1
-
def DoCheckNewServerOpen(tick):
setOpenServerTime = DBDataMgr.GetEventTrigMgr().GetValue(ShareDefine.Def_SetOpenServerTime)
if not setOpenServerTime:
@@ -220,10 +196,14 @@
DBDataMgr.GetMailMgr().DelAllMail()
DBDataMgr.GetPlayerViewCacheMgr().DelAllCache()
+ # 设置允许跨服,该函数为自动开服会触发,所以要设置为允许跨服,手动开服的需后台手动设置为允许
+ DBDataMgr.GetEventTrigMgr().SetValue(ShareDefine.Def_CanCross, 1)
SetInitOpenServerTime(setOpenServerTime)
AllMapServerInitOK(tick)
- GameWorld.GetGameWorld().SaveGameServerData()
+ #强制备档一次、入库
+ DBDataMgr.BackupGameWorldData(saveToDB=True)
+ #GameWorld.GetGameWorld().SaveGameServerData()
GameWorld.SendGameError("ClearOpenServerOK")
return
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
index f577fe2..06d7dc5 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
@@ -3650,6 +3650,7 @@
clientPack.NowSecond = serverTime.second
clientPack.NowMicSecond = serverTime.microsecond
clientPack.WeekOfYear = GameWorld.GetWeekOfYear()
+ clientPack.OpenServerTime = DBDataMgr.GetEventTrigMgr().GetValue(ShareDefine.Def_InitOpenServerTime)
NetPackCommon.SendFakePack(curPlayer, clientPack)
return
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyMongoDB/GMToolLogicProcess/Commands/GMT_CheckOpenServer.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyMongoDB/GMToolLogicProcess/Commands/GMT_CheckOpenServer.py
index 04906e0..90c04a6 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyMongoDB/GMToolLogicProcess/Commands/GMT_CheckOpenServer.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyMongoDB/GMToolLogicProcess/Commands/GMT_CheckOpenServer.py
@@ -2,32 +2,37 @@
# -*- coding: GBK -*-
#-------------------------------------------------------------------------------
#
-##@package PyMongoDataServer.GMToolLogicProcess.Commands.GMT_CheckOpenServer
+##@package PyMongoDB.GMToolLogicProcess.Commands.GMT_CheckOpenServer
#
# @todo:检查开服相关是否正常
# @author hxp
-# @date 2024-10-23
+# @date 2026-03-16
# @version 1.0
#
# 详细描述: 检查开服相关是否正常
#
#-------------------------------------------------------------------------------
-#"""Version = 2024-10-23 15:00"""
+#"""Version = 2026-03-16 20:00"""
#-------------------------------------------------------------------------------
import GMCommon
+import ShareDefine
+import GameWorld
+import DBDataMgr
-## 收到gm命令执行
-# @param gmCmdDict:gm命令字典
-# @return None
def OnExec(gmCmdDict):
- from LogicProcess import (UserCtrlDB,)
+ from LogicProcess import (UserCtrlDB)
# 先检查版本号
checkRet = UserCtrlDB.CheckGameVersion()
curVersion, centerVersion = checkRet if checkRet else ("", "")
- if curVersion == centerVersion:
- # 推给GameServer进一步检查
- return GMCommon.Def_SendToGameServer, ''
- return GMCommon.Def_Unknow, {"errMsg":"VersionError", "curVersion":curVersion, "centerVersion":centerVersion}
+ if curVersion != centerVersion:
+ return GMCommon.Def_Unknow, {"errMsg":"VersionError", "curVersion":curVersion, "centerVersion":centerVersion}
+
+ openServerDay = DBDataMgr.GetEventTrigMgr().GetValue(ShareDefine.Def_ServerDay) + 1
+ if openServerDay != 1:
+ GameWorld.SendGameError("GMT_CheckOpenServer", "开服天异常:%s" % openServerDay)
+ return GMCommon.Def_Unknow, {"errMsg":"OpenServerDayError", "openServerDay":openServerDay}
+
+ return GMCommon.Def_Success, {"errMsg":"OK"}
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyMongoDB/GMToolLogicProcess/Commands/GMT_ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyMongoDB/GMToolLogicProcess/Commands/GMT_Face.py
similarity index 100%
rename from ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyMongoDB/GMToolLogicProcess/Commands/GMT_
rename to ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyMongoDB/GMToolLogicProcess/Commands/GMT_Face.py
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyMongoDB/GMToolLogicProcess/Commands/GMT_SetCanCross.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyMongoDB/GMToolLogicProcess/Commands/GMT_SetCanCross.py
new file mode 100644
index 0000000..b9ffd91
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyMongoDB/GMToolLogicProcess/Commands/GMT_SetCanCross.py
@@ -0,0 +1,41 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#-------------------------------------------------------------------------------
+#
+##@package PyMongoDB.GMToolLogicProcess.Commands.GMT_SetCanCross
+#
+# @todo:设置是否允许跨服
+# @author hxp
+# @date 2026-03-16
+# @version 1.0
+#
+# 详细描述: 设置是否允许跨服
+#
+#-------------------------------------------------------------------------------
+#"""Version = 2026-03-16 20:00"""
+#-------------------------------------------------------------------------------
+
+import GMCommon
+import ShareDefine
+import GameWorld
+import DBDataMgr
+
+def OnExec(gmCmdDict):
+ setValue = GameWorld.ToIntDef(gmCmdDict.get("setValue"), None)
+ if setValue == None:
+ return GMCommon.Def_ParamErr
+
+ canCross = DBDataMgr.GetEventTrigMgr().GetValue(ShareDefine.Def_CanCross)
+ # 查询
+ if setValue == 2:
+ pass
+ elif setValue == 1:
+ canCross = DBDataMgr.GetEventTrigMgr().SetValue(ShareDefine.Def_CanCross, 1)
+ else:
+ #if canCross:
+ # return GMCommon.Def_Unknow, {"errMsg":"AlreadyCrossState"}
+ canCross = DBDataMgr.GetEventTrigMgr().SetValue(ShareDefine.Def_CanCross, 0)
+
+ GameWorld.Log("是否允许加入跨服: %s" % canCross)
+ return GMCommon.Def_Success, {"errMsg":"OK", "canCross":canCross}
+
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyMongoDB/GMToolLogicProcess/Commands/GMT_SetOpenServerTime.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyMongoDB/GMToolLogicProcess/Commands/GMT_SetOpenServerTime.py
new file mode 100644
index 0000000..235bdef
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyMongoDB/GMToolLogicProcess/Commands/GMT_SetOpenServerTime.py
@@ -0,0 +1,55 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#-------------------------------------------------------------------------------
+#
+##@package PyMongoDB.GMToolLogicProcess.Commands.GMT_SetOpenServerTime
+#
+# @todo:设置开服时间
+# @author hxp
+# @date 2026-03-16
+# @version 1.0
+#
+# 详细描述: 设置开服时间
+#
+#-------------------------------------------------------------------------------
+#"""Version = 2026-03-16 20:00"""
+#-------------------------------------------------------------------------------
+
+import GMCommon
+import GameWorld
+import GameWorldEvent
+import ShareDefine
+import DBDataMgr
+import time
+
+def OnExec(gmCmdDict):
+ from LogicProcess import (UserCtrlDB)
+
+ curTime = int(time.time())
+ OpenServerDate = gmCmdDict.get("OpenServerDate")
+ OpenServerHour = GameWorld.ToIntDef(gmCmdDict.get("OpenServerHour"), None)
+ OpenServerMinute = GameWorld.ToIntDef(gmCmdDict.get("OpenServerMinute"), None)
+
+ if not OpenServerDate or OpenServerHour == None or OpenServerMinute == None:
+ openServerTime = curTime # 允许不设置时间,默认取当前服务器时间
+ timeStr = GameWorld.ChangeTimeNumToStr(openServerTime)
+ else:
+ timeStr = "%s %02d:%02d:%02d" % (OpenServerDate, OpenServerHour, OpenServerMinute, 0)
+ openServerTime = GameWorld.ChangeTimeStrToNum(timeStr)
+
+ if openServerTime < curTime:
+ # 当前时间已经超过设置的开服时间,不能设置!
+ return GMCommon.Def_InvalidTime, "The set time is less than the current time."
+
+ setOpenServerTime = DBDataMgr.GetEventTrigMgr().GetValue(ShareDefine.Def_SetOpenServerTime)
+ if setOpenServerTime and curTime > setOpenServerTime:
+ # 已经设置过且开服了,不能重复设置!
+ return GMCommon.Def_ServerAlreadyOpen, "The server has been opened."
+
+ DBDataMgr.GetEventTrigMgr().SetValue(ShareDefine.Def_SetOpenServerTime, openServerTime)
+
+ if openServerTime == curTime:
+ GameWorldEvent.OnNewServerOpen(GameWorld.GetGameWorld().GetTick())
+
+ return GMCommon.Def_Success, timeStr
+
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ReadChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ReadChConfig.py
index 83033e1..ede0efe 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ReadChConfig.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ReadChConfig.py
@@ -257,12 +257,27 @@
GameWorld.Log('无法找到文件 = %s'%(filePath))
raise Exception('无法找到文件 = %s'%(filePath))
+ batFilePath = ChConfig.GetServersRoutePath() + "\\Config\\BattleServer.json"
+ if not os.path.isfile(batFilePath):
+ GameWorld.Log('无法找到文件 = %s'%(batFilePath))
+ raise Exception('无法找到文件 = %s'%(batFilePath))
+
f = open(filePath, 'r')
- strMsg = f.read()
+ serverDict = eval(f.read())
f.close()
- ServersConfigDict = eval(strMsg)
+ f = open(batFilePath, 'r')
+ batServerDict = eval(f.read())
+ f.close()
+ groupName = GameWorld.GetServerGroupName()
+ ServersConfigDict = {}
+ ServersConfigDict = {int(k):v for k, v in serverDict.items()}
+ for batServerID, mapID in batServerDict.items():
+ if batServerID in ServersConfigDict:
+ continue
+ ServersConfigDict[batServerID] = [groupName, mapID, ShareDefine.serverType_Battle]
+
return ServersConfigDict
## PyMongoDataServer.ini配置读取
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
index 74fdf14..6eb013c 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
@@ -42,6 +42,7 @@
'''
Def_InitOpenServerTime = 'InitOpenServerTime'
Def_SetOpenServerTime = 'SetOpenServerTime' # GM工具预定的开服时间
+Def_CanCross = 'CanCross' # 是否允许加入跨服,暂时仅对将要加入的做限制,已加入的暂不处理
Def_FamilyCrossState = 'FamilyCrossState' # 本服公会跨服状态, 0-未跨服;1-已跨服
Def_FamilyTransDataTime = 'FamilyTransDataTime' # 本服公会首次跨服互通数据开始传输时间戳,不为0代表传输数据中
--
Gitblit v1.8.0