16 卡牌服务端(自动开服相关;A103增加同步开服时间;增加是否允许加入跨服标记,默认否;跨服公会仅在允许跨服时才会加入跨服;优化ServersConfig.json配置,支持后台导出,优化战斗服务器配置;)
1 文件已重命名
8个文件已修改
2个文件已添加
186 ■■■■ 已修改文件
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/DB/StructData/DBFamily.py 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/ServerDay.py 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/GameWorldEvent.py 30 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyMongoDB/GMToolLogicProcess/Commands/GMT_CheckOpenServer.py 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyMongoDB/GMToolLogicProcess/Commands/GMT_Face.py 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyMongoDB/GMToolLogicProcess/Commands/GMT_SetCanCross.py 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyMongoDB/GMToolLogicProcess/Commands/GMT_SetOpenServerTime.py 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ReadChConfig.py 19 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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
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:
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):
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
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
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, ''
    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"}
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyMongoDB/GMToolLogicProcess/Commands/GMT_Face.py
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyMongoDB/GMToolLogicProcess/Commands/GMT_SetCanCross.py
New file
@@ -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}
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyMongoDB/GMToolLogicProcess/Commands/GMT_SetOpenServerTime.py
New file
@@ -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
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ReadChConfig.py
@@ -257,11 +257,26 @@
            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
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代表传输数据中