16 卡牌服务端(优化服务器时间、天封包A004 A103同步:过天、回调时间、时间误差超过10秒时补同步;)
3个文件已修改
40 ■■■■■ 已修改文件
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/GameWorldEvent.py 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyGameData.py 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/GameWorldEvent.py
@@ -27,6 +27,7 @@
import ShareDefine
import PyGameData
import BattleObj
import ChPlayer
import ObjPool
import datetime
@@ -233,9 +234,23 @@
    ## 每秒分钟执行一次
    if not PyGameData.g_initGameTime:
        return
    if tick - PyGameData.g_highProcessTick < 1000:
    curTime = int(time.time())
    if not PyGameData.g_highProcessTime:
        PyGameData.g_highProcessTime = curTime
    if curTime < PyGameData.g_highProcessTime:
        GameWorld.Log("时间回调了: lastProcessTime=%s" % (GameWorld.ChangeTimeNumToStr(PyGameData.g_highProcessTime)))
        PyGameData.g_highProcessTime = curTime
        OnFixServerTimeProcess()
    passSeconds = curTime - PyGameData.g_highProcessTime
    if passSeconds < 1:
        return
    PyGameData.g_highProcessTick = tick
    if passSeconds > 10:
        GameWorld.Log("时间误差过大: passSeconds=%s,lastProcessTime=%s" % (passSeconds, GameWorld.ChangeTimeNumToStr(PyGameData.g_highProcessTime)))
        OnFixServerTimeProcess()
    PyGameData.g_highProcessTime = curTime
    
    if PyGameData.g_serverClosing:
        CheckCloseMapOK()
@@ -249,6 +264,21 @@
    
    return
def OnFixServerTimeProcess():
    # 补同步一次服务器时间给前端
    playerManager = GameWorld.GetPlayerManager()
    for i in xrange(playerManager.GetPlayerCount()):
        curPlayer = playerManager.GetPlayerByIndex(i)
        if not GameWorld.IsNormalPlayer(curPlayer):
            continue
        ChPlayer.Sync_PyServerDataTimeToClient(curPlayer)
        ChPlayer.Sync_OpenServerDay(curPlayer)
    return
def OnMinute(tick):
    ## 每整分钟执行一次
    curTime = GameWorld.GetCurrentTime()
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py
@@ -232,6 +232,10 @@
    playerID = curPlayer.GetPlayerID()
    GameWorld.Log("PlayerOnDay! ondayValue=%s" % (ondayValue), playerID)
    
    # 过天同步下时间、开服天
    ChPlayer.Sync_PyServerDataTimeToClient(curPlayer)
    ChPlayer.Sync_OpenServerDay(curPlayer)
    __DoPlayerOnDay(curPlayer, ShareDefine.Def_OnEventType)
    __DoPlayerOnDay(curPlayer, ShareDefine.Def_OnEventTypeEx)
    
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyGameData.py
@@ -19,7 +19,7 @@
g_lastRTBTime = 0 # 上一次备档时间戳
g_initGameTime = 0 # 开始初始化服务器时间戳
g_serverInitOK = False # 服务器是否启动成功
g_highProcessTick = 0 # 每秒触发一次,上次Tick
g_highProcessTime = 0 # 每秒触发一次,上次Time
g_minuteProcess = -1 # 每分钟触发一次,上次处理的分钟
g_serverClosing = 0 # 是否关服中 0-非关服中;1-关服中;2-关服结束
g_closeSaveDataOK = False # 关服数据入库是否成功