From b563f56319b05e8c193dc5b9ddb5eb7a612355df Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期四, 15 五月 2025 10:43:43 +0800
Subject: [PATCH] 16 卡牌服务端(服务器Event事件触发改为地图如OnDay等;地图开服事件流程;)

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/test_OnDay.py          |   38 +
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/test_OnYear.py         |   41 +
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py                     |   25 +
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py                 |   96 ++++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyGameData.py                      |    2 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/DB/StructData/DBFamily.py          |    7 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerMail.py               |    2 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/DB/DBDataMgr.py                    |   12 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/ClearOpenServerDay.py  |   52 ++
 /dev/null                                                                                              |   98 ----
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/test_OnMonth.py        |   40 +
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/GameWorldEvent.py   |  309 +++++++++++++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py                 |   18 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/GetOpenServerDay.py    |   36 +
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/test_OnHour.py         |   37 +
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorld.py                       |    4 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/DB/StructData/DBPlayerViewCache.py |    7 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/DB/StructData/DBEventTrig.py       |   85 +++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/DB/StructData/DBMail.py            |    7 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/GameWorldProcess.py |   14 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py       |  303 ++----------
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/DB/DBStruct.py                     |   62 ++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/test_OnWeek.py         |   39 +
 23 files changed, 979 insertions(+), 355 deletions(-)

diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
index aa30ab6..174b641 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
@@ -22348,6 +22348,102 @@
 
 
 #------------------------------------------------------
+# A1 03 同步开服天数 #tagMCOpenServerDay
+
+class  tagMCOpenServerDay(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("Day", c_ushort),    # 已开服天数,从0开始
+                  ("IsMixServer", c_ubyte),    #是否是合服服务器
+                  ("MixDay", c_ushort),    # 已合服天数,从0开始
+                  ("OpenWeekday", c_ubyte),    #开服是周几,1代表周一
+                  ("NowYear", c_ushort),    #服务器当前时间 - 年
+                  ("NowMonth", c_ubyte),    
+                  ("NowDay", c_ubyte),    
+                  ("NowHour", c_ubyte),    
+                  ("NowMinute", c_ubyte),    
+                  ("NowSecond", c_ubyte),    
+                  ("NowMicSecond", c_int),    
+                  ("WeekOfYear", c_ubyte),    #一年中的第几周
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xA1
+        self.SubCmd = 0x03
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.Cmd = 0xA1
+        self.SubCmd = 0x03
+        self.Day = 0
+        self.IsMixServer = 0
+        self.MixDay = 0
+        self.OpenWeekday = 0
+        self.NowYear = 0
+        self.NowMonth = 0
+        self.NowDay = 0
+        self.NowHour = 0
+        self.NowMinute = 0
+        self.NowSecond = 0
+        self.NowMicSecond = 0
+        self.WeekOfYear = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCOpenServerDay)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A1 03 同步开服天数 //tagMCOpenServerDay:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                Day:%d,
+                                IsMixServer:%d,
+                                MixDay:%d,
+                                OpenWeekday:%d,
+                                NowYear:%d,
+                                NowMonth:%d,
+                                NowDay:%d,
+                                NowHour:%d,
+                                NowMinute:%d,
+                                NowSecond:%d,
+                                NowMicSecond:%d,
+                                WeekOfYear:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.Day,
+                                self.IsMixServer,
+                                self.MixDay,
+                                self.OpenWeekday,
+                                self.NowYear,
+                                self.NowMonth,
+                                self.NowDay,
+                                self.NowHour,
+                                self.NowMinute,
+                                self.NowSecond,
+                                self.NowMicSecond,
+                                self.WeekOfYear
+                                )
+        return DumpString
+
+
+m_NAtagMCOpenServerDay=tagMCOpenServerDay()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCOpenServerDay.Cmd,m_NAtagMCOpenServerDay.SubCmd))] = m_NAtagMCOpenServerDay
+
+
+#------------------------------------------------------
 #A1 07 玩家掉率加成 #tagMCPlayerDropRate
 
 class  tagMCPlayerDropRate(Structure):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/DB/DBDataMgr.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/DB/DBDataMgr.py
index 47ff107..2168596 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/DB/DBDataMgr.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/DB/DBDataMgr.py
@@ -17,6 +17,7 @@
 
 import GameWorld
 import PyGameData
+import DBEventTrig
 import DBPlayerViewCache
 import DBFamily
 import DBMail
@@ -48,9 +49,6 @@
     curMinute = curTime.minute
     ServerDataBackup()
     DBFamily.OnMinute(curMinute)
-    return
-
-def OnDayEx():
     return
 
 #------------------------------------------- 备档 ---------------------------------------------------
@@ -163,6 +161,7 @@
 
 class PyGameDataManager(object):
     def __init__(self):
+        self.EventTrigMgr = DBEventTrig.EventTrigMgr()
         self.PlayerViewCacheMgr = DBPlayerViewCache.PlayerViewCacheMgr()
         self.FamilyMgr = DBFamily.FamilyMgr()
         self.MailMgr = DBMail.MailMgr()
@@ -170,6 +169,7 @@
     
     def GetSaveData(self):
         buff = ""
+        buff += self.EventTrigMgr.GetSaveData()
         buff += self.PlayerViewCacheMgr.GetSaveData()
         buff += self.FamilyMgr.GetSaveData()
         buff += self.MailMgr.GetSaveData()
@@ -177,6 +177,7 @@
     
     def LoadGameData(self, gameBuffer, pos):
         dataslen = len(gameBuffer)
+        pos = self.EventTrigMgr.LoadPyGameData(gameBuffer, pos, dataslen)
         pos = self.PlayerViewCacheMgr.LoadPyGameData(gameBuffer, pos, dataslen)
         pos = self.FamilyMgr.LoadPyGameData(gameBuffer, pos, dataslen)
         pos = self.MailMgr.LoadPyGameData(gameBuffer, pos, dataslen)
@@ -190,6 +191,11 @@
         PyGameData.g_pyGameDataManager = pyGameDataMgr
     return pyGameDataMgr
 
+def GetEventTrigMgr():
+    ## 事件值管理器
+    dbDataMgr = GetDBDataMgr()
+    return dbDataMgr.EventTrigMgr
+
 def GetPlayerViewCacheMgr():
     ## 玩家查看缓存数据管理器
     dbDataMgr = GetDBDataMgr()
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/DB/DBStruct.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/DB/DBStruct.py
index c258a1a..2ca0b00 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/DB/DBStruct.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/DB/DBStruct.py
@@ -666,7 +666,67 @@
         else:
             self.Operate = Str[:15]
 
-            
+
+# 事件触发表 #tagDBEventTrig
+class tagDBEventTrig(Structure):
+    _pack_ = 1
+    _fields_ = [
+        ('EventLen', ctypes.c_ulong),
+        ('EventID', ctypes.c_char_p),
+        ('EventValue', ctypes.c_ulong),
+        ('ADOResult', ctypes.c_ulong),
+    ]
+
+    def __init__(self):
+        Structure.__init__(self)
+        self.clear()
+
+    def clear(self):
+        self.EventLen = 0
+        self.EventID = ''
+        self.EventValue = 0
+
+    def readData(self, buf, pos = 0, length = 0):
+        if not pos <= length:
+            return -1
+        if len(buf) < pos + self.getLength():
+            return -1
+        self.clear()
+        self.EventLen, pos = CommFunc.ReadDWORD(buf, pos)
+        tmp, pos = CommFunc.ReadString(buf, pos, self.EventLen)
+        self.EventID = ctypes.c_char_p(tmp)
+        self.EventValue, pos = CommFunc.ReadDWORD(buf, pos)
+        return self.getLength()
+
+    def getBuffer(self):
+        buf = ''
+        buf = CommFunc.WriteDWORD(buf, self.EventLen)
+        buf = CommFunc.WriteString(buf, self.EventLen, self.EventID)
+        buf = CommFunc.WriteDWORD(buf, self.EventValue)
+        return buf
+
+    def getLength(self):
+        length = 0
+        length += sizeof(ctypes.c_ulong)
+        length += self.EventLen
+        length += sizeof(ctypes.c_ulong)
+        return length
+
+    def outputString(self):
+        output = '''// 事件触发表 #tagDBEventTrig:
+            EventLen = %s,
+            EventID = %s,
+            EventValue = %s,
+            ADOResult = %s,
+            '''%(
+                self.EventLen,
+                self.EventID,
+                self.EventValue,
+                self.ADOResult,
+            )
+        return output
+
+
 # 家族表 #tagDBFamily
 class tagDBFamily(Structure):
     _pack_ = 1
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/DB/StructData/DBEventTrig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/DB/StructData/DBEventTrig.py
new file mode 100644
index 0000000..6fb518a
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/DB/StructData/DBEventTrig.py
@@ -0,0 +1,85 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#-------------------------------------------------------------------------------
+#
+##@package DB.StructData.DBEventTrig
+#
+# @todo:事件触发值管理器
+# @author hxp
+# @date 2025-05-15
+# @version 1.0
+#
+# 详细描述: 事件触发值管理器
+#
+#-------------------------------------------------------------------------------
+#"""Version = 2025-05-15 10:35"""
+#-------------------------------------------------------------------------------
+
+import DBStruct
+import GameWorld
+import CommFunc
+    
+class EventTrigMgr():
+    
+    def __init__(self):
+        self.__eventDict = {} # 事件字典 {key:value, ...}
+        return
+    
+    def GetDict(self): return self.__eventDict
+    
+    def GetValue(self, key, defaultValue=0):
+        if key in self.__eventDict:
+            return self.__eventDict[key]
+        return defaultValue
+    
+    def SetValue(self, key, value):
+        self.__eventDict[key] = value
+        return value
+    
+    def DelAllKey(self, excludeList=[]):
+        ## 删除所有记录
+        # @param excludeList: 不包含的key列表
+        self.__eventDict = {k:self.GetValue(k) for k in excludeList}           
+        return
+    
+    def DelKey(self, key):
+        return self.__eventDict.pop(key, None)
+    
+    def SetValueIncrement(self, key):
+        ## 设定服务器事件(该事件记录为数值从1一直自增累加)
+        # @return: 自增后的值
+        value = self.GetValue(key, 0)
+        return self.SetValue(key, value + 1)
+
+    # 保存数据 存数据库和realtimebackup
+    def GetSaveData(self):
+        savaData = ""
+        cntData = ""
+        cnt = 0
+        
+        dbData = DBStruct.tagDBEventTrig()
+        for key, value in self.__eventDict.items():
+            if not value:
+                continue
+            dbData.clear()
+            dbData.EventID = key
+            dbData.EventLen = len(dbData.EventID)
+            dbData.EventValue = value
+            cnt += 1
+            savaData += dbData.getBuffer()
+            
+        GameWorld.Log("Save DBEventTrig count :%s len=%s" % (cnt, len(savaData)))
+        return CommFunc.WriteDWORD(cntData, cnt) + savaData
+    
+    # 从数据库载入数据
+    def LoadPyGameData(self, datas, pos, dataslen):
+        
+        cnt, pos = CommFunc.ReadDWORD(datas, pos)
+        GameWorld.Log("Load DBEventTrig count :%s" % cnt)
+        
+        dbData = DBStruct.tagDBEventTrig()
+        for _ in xrange(cnt):
+            pos += dbData.readData(datas, pos, dataslen)
+            self.__eventDict[dbData.EventID] = dbData.EventValue
+            
+        return pos
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 44d3fd7..293d8de 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
@@ -480,6 +480,13 @@
         self.__familyIDDict.pop(familyID, None)
         return family
     
+    def DelAllFamily(self):
+        for index in range(self.GetCount())[::-1]:
+            family = self.GetAt(index)
+            familyID = family.GetID()
+            self.DelFamily(familyID)
+        return
+    
     def GetCount(self): return len(self.__familyList)
     def GetAt(self, index):
         family = None
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/DB/StructData/DBMail.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/DB/StructData/DBMail.py
index bd9a051..5a65c35 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/DB/StructData/DBMail.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/DB/StructData/DBMail.py
@@ -329,6 +329,13 @@
         playerStateDict = self.__serverMailPlayerStateDict.pop(guid, {})
         return playerStateDict
     
+    def DelAllMail(self):
+        self.__personalMailDict = {}
+        self.__mailItemDict = {}
+        self.__serverMailDict = {}
+        self.__serverMailPlayerStateDict = {}
+        return
+    
     # 保存数据 存数据库和realtimebackup
     def GetSaveData(self):
         saveData = ""
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/DB/StructData/DBPlayerViewCache.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/DB/StructData/DBPlayerViewCache.py
index a108d0d..4acf923 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/DB/StructData/DBPlayerViewCache.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/DB/StructData/DBPlayerViewCache.py
@@ -223,6 +223,13 @@
         self.__serverIDRangePlayerIDDict = {}
         return
     
+    def DelAllCache(self):
+        self.__viewCacheList = []
+        self.__idIndexDict = {}
+        self.__needSort = False
+        self.__serverIDRangePlayerIDDict = {}
+        return
+
     def GetCount(self): return len(self.__viewCacheList)    
     def At(self, index):
         viewCache = self.__viewCacheList[index]
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/ClearOpenServerDay.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/ClearOpenServerDay.py
new file mode 100644
index 0000000..834e883
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/ClearOpenServerDay.py
@@ -0,0 +1,52 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#-------------------------------------------------------------------------------
+#
+##@package GM.Commands.ClearOpenServerDay
+#
+# @todo:清除开服天
+# @author hxp
+# @date 2025-05-15
+# @version 1.0
+#
+# 详细描述: 清除开服天
+#
+#-------------------------------------------------------------------------------
+#"""Version = 2025-05-15 10:35"""
+#-------------------------------------------------------------------------------
+
+import GameWorld
+import ShareDefine
+import GameWorldEvent
+import DBDataMgr
+import ChPlayer
+
+import time
+
+#---------------------------------------------------------------------
+## 执行逻辑
+#  @param curPlayer 当前玩家
+#  @param cmdList 参数
+#  @return None
+#  @remarks 函数详细说明.
+def OnExec(curPlayer, cmdList):
+    #重置开服天,设置非合服
+    DBDataMgr.GetEventTrigMgr().SetValue(ShareDefine.Def_ServerWeek, 0)
+    DBDataMgr.GetEventTrigMgr().SetValue(ShareDefine.Def_ServerDay, 0)
+    DBDataMgr.GetEventTrigMgr().SetValue(ShareDefine.Def_IsMixServer, 0)
+    DBDataMgr.GetEventTrigMgr().SetValue(ShareDefine.Def_MixServerDay, 0)
+    
+    curTime = int(time.time())
+    GameWorldEvent.SetInitOpenServerTime(curTime)
+    
+    if curPlayer:
+        ChPlayer.Sync_OpenServerDay(curPlayer)
+        ServerDay = DBDataMgr.GetEventTrigMgr().GetValue(ShareDefine.Def_ServerDay) + 1
+        IsMixServer = DBDataMgr.GetEventTrigMgr().GetValue(ShareDefine.Def_IsMixServer)
+        MixDay = DBDataMgr.GetEventTrigMgr().GetValue(ShareDefine.Def_MixServerDay) + 1
+        OpenWeekday = DBDataMgr.GetEventTrigMgr().GetValue(ShareDefine.Def_OpenServerWeekday)
+        GameWorld.DebugAnswer(curPlayer, '开服星期%s, 天数:%s 是否合服:%s, 合服天数:%s' % (OpenWeekday, ServerDay, IsMixServer, MixDay))
+        
+    # 暂时同步GameServer,之后可去除
+    return True
+
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/GetOpenServerDay.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/GetOpenServerDay.py
new file mode 100644
index 0000000..e836a50
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/GetOpenServerDay.py
@@ -0,0 +1,36 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#-------------------------------------------------------------------------------
+#
+##@package GM.Commands.GetOpenServerDay
+#
+# @todo:获取开服天
+# @author hxp
+# @date 2025-05-15
+# @version 1.0
+#
+# 详细描述: 获取开服天
+#
+#-------------------------------------------------------------------------------
+#"""Version = 2025-05-15 10:35"""
+#-------------------------------------------------------------------------------
+
+import DBDataMgr
+import ShareDefine
+import GameWorld
+
+## 执行逻辑
+#  @param curPlayer 当前玩家
+#  @param cmdList 参数
+#  @return None
+#  @remarks 函数详细说明.
+def OnExec(curPlayer, cmdList):
+    ServerDay = DBDataMgr.GetEventTrigMgr().GetValue(ShareDefine.Def_ServerDay) + 1
+    IsMixServer = DBDataMgr.GetEventTrigMgr().GetValue(ShareDefine.Def_IsMixServer)
+    MixDay = DBDataMgr.GetEventTrigMgr().GetValue(ShareDefine.Def_MixServerDay) + 1
+    OpenWeekday = DBDataMgr.GetEventTrigMgr().GetValue(ShareDefine.Def_OpenServerWeekday)
+    GameWorld.DebugAnswer(curPlayer, '开服星期%s, 天数:%s 是否合服:%s, 合服天数:%s' % (OpenWeekday, ServerDay, IsMixServer, MixDay))
+    
+    # 暂时同步GameServer,之后可去除
+    return True
+
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/test_OnDay.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/test_OnDay.py
new file mode 100644
index 0000000..2b7b51c
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/test_OnDay.py
@@ -0,0 +1,38 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#-------------------------------------------------------------------------------
+#
+##@package GM.Commands.test_OnDay
+#
+# @todo:模拟过天
+# @author hxp
+# @date 2025-05-15
+# @version 1.0
+#
+# 详细描述: 模拟过天
+#
+#-------------------------------------------------------------------------------
+#"""Version = 2025-05-15 10:35"""
+#-------------------------------------------------------------------------------
+
+import GameWorld
+import PlayerEventCounter
+import GameWorldEvent
+
+def OnExec(curPlayer, gmList):
+    __DoExec(GameWorld.GetGameWorld().GetTick())
+    
+    # 暂时同步GameServer,之后可去除
+    return True
+
+def __DoExec(tick):
+    playerManager = GameWorld.GetPlayerManager()
+    for i in xrange(playerManager.GetPlayerCount()):
+        curPlayer = playerManager.GetPlayerByIndex(i)
+        if not GameWorld.IsNormalPlayer(curPlayer):
+            continue
+        PlayerEventCounter.GMDateTime(curPlayer, "GMOnDay")
+        
+    GameWorldEvent.OnHour(tick)
+    GameWorldEvent.OnDay(tick)
+    return
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/test_OnHour.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/test_OnHour.py
new file mode 100644
index 0000000..edcf194
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/test_OnHour.py
@@ -0,0 +1,37 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#-------------------------------------------------------------------------------
+#
+##@package GM.Commands.test_OnHour
+#
+# @todo:模式过小时
+# @author hxp
+# @date 2025-05-15
+# @version 1.0
+#
+# 详细描述: 模式过小时
+#
+#-------------------------------------------------------------------------------
+#"""Version = 2025-05-15 10:35"""
+#-------------------------------------------------------------------------------
+
+import GameWorld
+import PlayerEventCounter
+import GameWorldEvent
+
+def OnExec(curPlayer, gmList):
+    __DoExec(GameWorld.GetGameWorld().GetTick())
+    
+    # 暂时同步GameServer,之后可去除
+    return True
+
+def __DoExec(tick):
+    playerManager = GameWorld.GetPlayerManager()
+    for i in xrange(playerManager.GetPlayerCount()):
+        curPlayer = playerManager.GetPlayerByIndex(i)
+        if not GameWorld.IsNormalPlayer(curPlayer):
+            continue
+        PlayerEventCounter.GMDateTime(curPlayer, "GMOnHour")
+        
+    GameWorldEvent.OnHour(tick)
+    return
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/test_OnMonth.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/test_OnMonth.py
new file mode 100644
index 0000000..d9db5f3
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/test_OnMonth.py
@@ -0,0 +1,40 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#-------------------------------------------------------------------------------
+#
+##@package GM.Commands.test_OnMonth
+#
+# @todo:模拟过月
+# @author hxp
+# @date 2025-05-15
+# @version 1.0
+#
+# 详细描述: 模拟过月
+#
+#-------------------------------------------------------------------------------
+#"""Version = 2025-05-15 10:35"""
+#-------------------------------------------------------------------------------
+
+import GameWorld
+import PlayerEventCounter
+import GameWorldEvent
+
+def OnExec(curPlayer, gmList):
+    __DoExec(GameWorld.GetGameWorld().GetTick())
+    
+    # 暂时同步GameServer,之后可去除
+    return True
+
+def __DoExec(tick):
+    playerManager = GameWorld.GetPlayerManager()
+    for i in xrange(playerManager.GetPlayerCount()):
+        curPlayer = playerManager.GetPlayerByIndex(i)
+        if not GameWorld.IsNormalPlayer(curPlayer):
+            continue
+        PlayerEventCounter.GMDateTime(curPlayer, "GMOnMonth")
+        
+    GameWorldEvent.OnHour(tick)
+    GameWorldEvent.OnDay(tick)
+    GameWorldEvent.OnWeek(tick)
+    GameWorldEvent.OnMonth(tick)
+    return
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/test_OnWeek.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/test_OnWeek.py
new file mode 100644
index 0000000..c37ae06
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/test_OnWeek.py
@@ -0,0 +1,39 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#-------------------------------------------------------------------------------
+#
+##@package GM.Commands.test_OnWeek
+#
+# @todo:模拟过周
+# @author hxp
+# @date 2025-05-15
+# @version 1.0
+#
+# 详细描述: 模拟过周
+#
+#-------------------------------------------------------------------------------
+#"""Version = 2025-05-15 10:35"""
+#-------------------------------------------------------------------------------
+
+import GameWorld
+import PlayerEventCounter
+import GameWorldEvent
+
+def OnExec(curPlayer, gmList):
+    __DoExec(GameWorld.GetGameWorld().GetTick())
+    
+    # 暂时同步GameServer,之后可去除
+    return True
+
+def __DoExec(tick):
+    playerManager = GameWorld.GetPlayerManager()
+    for i in xrange(playerManager.GetPlayerCount()):
+        curPlayer = playerManager.GetPlayerByIndex(i)
+        if not GameWorld.IsNormalPlayer(curPlayer):
+            continue
+        PlayerEventCounter.GMDateTime(curPlayer, "GMOnWeek")
+        
+    GameWorldEvent.OnHour(tick)
+    GameWorldEvent.OnDay(tick)
+    GameWorldEvent.OnWeek(tick)
+    return
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/test_OnYear.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/test_OnYear.py
new file mode 100644
index 0000000..4ef0c9c
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/test_OnYear.py
@@ -0,0 +1,41 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#-------------------------------------------------------------------------------
+#
+##@package GM.Commands.test_OnYear
+#
+# @todo:模拟过年
+# @author hxp
+# @date 2025-05-15
+# @version 1.0
+#
+# 详细描述: 模拟过年
+#
+#-------------------------------------------------------------------------------
+#"""Version = 2025-05-15 10:35"""
+#-------------------------------------------------------------------------------
+
+import GameWorld
+import PlayerEventCounter
+import GameWorldEvent
+
+def OnExec(curPlayer, gmList):
+    __DoExec(GameWorld.GetGameWorld().GetTick())
+    
+    # 暂时同步GameServer,之后可去除
+    return True
+
+def __DoExec(tick):
+    playerManager = GameWorld.GetPlayerManager()
+    for i in xrange(playerManager.GetPlayerCount()):
+        curPlayer = playerManager.GetPlayerByIndex(i)
+        if not GameWorld.IsNormalPlayer(curPlayer):
+            continue
+        PlayerEventCounter.GMDateTime(curPlayer, "GMOnYear")
+        
+    GameWorldEvent.OnHour(tick)
+    GameWorldEvent.OnDay(tick)
+    GameWorldEvent.OnWeek(tick)
+    GameWorldEvent.OnMonth(tick)
+    GameWorldEvent.OnYear(tick)
+    return
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorld.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorld.py
index 6092f9c..77f4ad0 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorld.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorld.py
@@ -1318,6 +1318,10 @@
     ## 服务器组ID,必须唯一,代表这台物理服务器
     return ToIntDef(ReadChConfig.GetPyMongoConfig("platform", "GroupID"), 0)
 
+def GetServerID():
+    ## 当前服务器ID
+    return 87
+
 def GetMainServerID(serverID):
     ## 获取服务器ID所属主服ID
     ServerIDMainServerDict = IpyGameDataPY.GetConfigEx("ServerIDMainServerDict")
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/GameWorldEvent.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/GameWorldEvent.py
new file mode 100644
index 0000000..9e4ecb5
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/GameWorldEvent.py
@@ -0,0 +1,309 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#-------------------------------------------------------------------------------
+#
+##@package GameWorldLogic.GameWorldEvent
+#
+# @todo:服务器世界事件
+# @author hxp
+# @date 2025-05-15
+# @version 1.0
+#
+# 详细描述: 服务器世界事件
+#
+#-------------------------------------------------------------------------------
+#"""Version = 2025-05-15 10:35"""
+#-------------------------------------------------------------------------------
+
+import DBDataMgr
+import GameWorld
+import PlayerEventCounter
+import ShareDefine
+import PyGameData
+
+import datetime
+import time
+
+def Get_Server_Year(): return DBDataMgr.GetEventTrigMgr().GetValue(ShareDefine.Def_Server_Year)
+def Set_Server_Year():
+    DBDataMgr.GetEventTrigMgr().SetValue(ShareDefine.Def_Server_Year, datetime.datetime.today().year)
+    return
+def Get_Server_Month(): return DBDataMgr.GetEventTrigMgr().GetValue(ShareDefine.Def_Server_Month)
+def Set_Server_Month():
+    DBDataMgr.GetEventTrigMgr().SetValue(ShareDefine.Def_Server_Month, datetime.datetime.today().month)
+    return
+def Get_Server_Week(): return DBDataMgr.GetEventTrigMgr().GetValue(ShareDefine.Def_Server_Week)
+def Set_Server_Week():
+    DBDataMgr.GetEventTrigMgr().SetValue(ShareDefine.Def_Server_Week, datetime.datetime.isocalendar(datetime.datetime.today())[1])
+    return
+def Get_Server_Day(): return DBDataMgr.GetEventTrigMgr().GetValue(ShareDefine.Def_Server_Day)
+def Set_Server_Day():
+    DBDataMgr.GetEventTrigMgr().SetValue(ShareDefine.Def_Server_Day, datetime.datetime.today().day)
+    return
+def Get_Server_Hour(): return DBDataMgr.GetEventTrigMgr().GetValue(ShareDefine.Def_Server_Hour)
+def Set_Server_Hour():
+    DBDataMgr.GetEventTrigMgr().SetValue(ShareDefine.Def_Server_Hour, datetime.datetime.today().hour)
+    return
+
+def InitServerTime():
+    ## 初始化服务器时间
+    if not Get_Server_Year():
+        Set_Server_Hour()
+        Set_Server_Day()
+        Set_Server_Week()
+        Set_Server_Month()
+        Set_Server_Year()
+        GameWorld.Log('###服务器新开, 初始化服务器时间 !')
+    
+    return Get_Server_Hour(), Get_Server_Day(), Get_Server_Week(), Get_Server_Month(), Get_Server_Year()
+
+def InitGameWorld(tick):
+    ## GameWorld初始化
+    if PyGameData.g_initGameTime:
+        return
+    PyGameData.g_initGameTime = int(time.time())
+    serverID = GameWorld.GetServerID()
+    GameWorld.Log("服务器启动初始化InitGameWorld: serverID=%s" % serverID)
+    DBDataMgr.OnServerStart() # 优先加载公共数据
+    LoadDBPlayer()
+    
+    #初始话开服时间、星期几
+    initOpenServerTime = DBDataMgr.GetEventTrigMgr().GetValue(ShareDefine.Def_InitOpenServerTime)
+    openServerWeekday = DBDataMgr.GetEventTrigMgr().GetValue(ShareDefine.Def_OpenServerWeekday)
+    if initOpenServerTime <= 0 or openServerWeekday <= 0:
+        #记录首次开发时间(现实时间戳)
+        SetInitOpenServerTime(initOpenServerTime if initOpenServerTime else int(time.time()))
+        
+    #合服首次启动加载处理
+    __DoMixServerInit()
+    
+    # 其他功能初始化
+    
+    
+    OnHighProcess(tick) # 主动触发一次高精度的调用,确保服务器启动后一些功能活动等的数据会被加载
+    OnMinute(tick)
+    
+    GameWorld.Log("=============================== 服务器启动成功 ===================================")
+    isCrossServer = GameWorld.IsCrossServer()
+    if isCrossServer:
+        pass
+    else:
+        serverGroupID = GameWorld.GetServerGroupID()
+        GameWorld.Log("服务器启动成功: ServerGroupID=%s,serverID=%s" % (serverGroupID, serverID))
+    GameWorld.GetGameWorld().SetGameWorldDict(ShareDefine.Def_WorldKey_GameWorldInitOK, 1)
+    return
+
+def AllMapServerInitOK(tick):
+    return
+
+def LoadDBPlayer():
+    if GameWorld.IsCrossServer():
+        return
+    #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.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:
+        #GameWorld.DebugLog("没有指定开服时间!")
+        return
+    curOpenServerTime = DBDataMgr.GetEventTrigMgr().GetValue(ShareDefine.Def_InitOpenServerTime)
+    if curOpenServerTime == setOpenServerTime:
+        #GameWorld.DebugLog("已经正式开服过了!")
+        return
+    curTime = int(time.time())
+    if curTime < setOpenServerTime:
+        #GameWorld.DebugLog("还未到正式开服时间!")
+        return
+    OnNewServerOpen(tick)
+    return
+    
+def OnNewServerOpen(tick):
+    '''新服开启需要处理的逻辑'''
+    
+    serverID = GameWorld.GetServerID()
+    GameWorld.Log("执行正式开服重置逻辑... serverID=%s" % serverID)
+    
+    setOpenServerTime = DBDataMgr.GetEventTrigMgr().GetValue(ShareDefine.Def_SetOpenServerTime)
+    if not setOpenServerTime:
+        return
+    
+    #清DBGSTrig
+    excludeList = [ShareDefine.Def_InitOpenServerTime, ShareDefine.Def_SetOpenServerTime]
+    DBDataMgr.GetEventTrigMgr().DelAllKey(excludeList)
+    #清家族
+    DBDataMgr.GetFamilyMgr().DelAllFamily()
+    #清邮件
+    DBDataMgr.GetMailMgr().DelAllMail()
+    DBDataMgr.GetPlayerViewCacheMgr().DelAllCache()
+    
+    SetInitOpenServerTime(setOpenServerTime)
+    AllMapServerInitOK(tick)
+    
+    GameWorld.GetGameWorld().SaveGameServerData()
+    GameWorld.SendGameError("ClearOpenServerOK")
+    return
+
+def SetInitOpenServerTime(initTime):
+    openDatetime = GameWorld.ChangeTimeNumToDatetime(initTime)
+    openServerWeekday = openDatetime.weekday() + 1
+    DBDataMgr.GetEventTrigMgr().SetValue(ShareDefine.Def_InitOpenServerTime, initTime)
+    DBDataMgr.GetEventTrigMgr().SetValue(ShareDefine.Def_OpenServerWeekday, openServerWeekday)
+    GameWorld.Log("设置开服时间: %s(%s), 周%s" % (openDatetime, initTime, openServerWeekday))
+    # 需要这个参数主要是GM工具会判断是否有设置过,所以该值一般只有GM命令或工具才能设置
+    setOpenServerTime = DBDataMgr.GetEventTrigMgr().GetValue(ShareDefine.Def_SetOpenServerTime)
+    if setOpenServerTime and setOpenServerTime != initTime:
+        DBDataMgr.GetEventTrigMgr().SetValue(ShareDefine.Def_SetOpenServerTime, initTime)
+        GameWorld.Log("    同步更新 Def_SetOpenServerTime=%s" % initTime)
+    return
+
+def __DoMixServerInit():
+    isMixServer = DBDataMgr.GetEventTrigMgr().GetValue(ShareDefine.Def_IsMixServer)
+    if not isMixServer:
+        GameWorld.DebugLog("非合服,不处理合服首次启动数据加载!")
+        return
+    
+    isMixServerInitOK = DBDataMgr.GetEventTrigMgr().GetValue(ShareDefine.Def_IsMixServerInitOK)
+    if isMixServerInitOK:
+        GameWorld.DebugLog("合服首次启动加载已经处理过!")
+        return
+    
+    GameWorld.Log("合服首次启动加载处理...")
+    
+    # 清除指定通用数据,一般是合服工具删,这里可以再做个补充
+    #universalRecMgr = GameWorld.GetUniversalRecMgr()
+    #delRecTypeList = []
+    #GameWorld.Log("清除指定通用数据 delRecTypeList=%s" % str(delRecTypeList))
+    #for delRecType in delRecTypeList:
+    #    universalRecMgr.Delete(delRecType)
+        
+    # 删除过期的通用数据
+    #__DelOutofdayRecData(universalRecMgr)
+    
+    # 设置合服首次启动加载成功
+    DBDataMgr.GetEventTrigMgr().SetValue(ShareDefine.Def_IsMixServerInitOK, 1)
+    
+    # 设置本次合服时的开服天数、世界等级
+    serverDay = DBDataMgr.GetEventTrigMgr().GetValue(ShareDefine.Def_ServerDay)
+    DBDataMgr.GetEventTrigMgr().SetValue(ShareDefine.Def_LastMixServerDay, serverDay)
+    GameWorld.Log("    合服首次启动加载成功! serverDay=%s" % (serverDay))
+    return
+
+def OnHighProcess(tick):
+    ## 每秒分钟执行一次
+    return
+
+def OnMinute(tick):
+    ## 每整分钟执行一次
+    curTime = GameWorld.GetCurrentTime()
+    #检查服务器正式开服
+    DoCheckNewServerOpen(tick)
+    DBDataMgr.OnMinute(curTime)
+    DoLogic_GameWorldEvenByTime(tick)
+    
+    #其他功能逻辑
+    #GameWorldActionControl.Dispose_OperationActionState()
+    #GameWorldActionControl.Dispose_DailyActionState()
+    #GameWorldActionControl.Dispose_FBStateTime()
+    return
+    
+def DoLogic_GameWorldEvenByTime(tick):
+    #-----------服务器当前时间
+    curTime = datetime.datetime.today()
+    curTimeHour = curTime.hour
+    curTimeDay = curTime.day
+    curTimeWeek = datetime.datetime.isocalendar(curTime)[1]
+    curTimeMonth = curTime.month
+    curTimeYear = curTime.year
+    
+    #-----------服务器记录的时间
+    serverHour , serverDay , serverWeek , serverMonth , serverYear = InitServerTime()
+    
+    #-----------开始比对时间
+    #OnHour事件
+    if (serverHour != curTimeHour or serverDay != curTimeDay or serverMonth != curTimeMonth or serverYear != curTimeYear):
+        Set_Server_Hour()
+        OnHour(tick)
+        
+    #OnDay事件
+    if (serverDay != curTimeDay or serverMonth != curTimeMonth or serverYear != curTimeYear):
+        Set_Server_Day()
+        OnDay(tick)
+        
+    #OnWeek事件
+    #不考虑隔年情况,如2009,12,31日关服->2010,12,31日开服(不触发OnWeek)
+    if (serverWeek != curTimeWeek):
+        Set_Server_Week()
+        OnWeek(tick)
+        
+    #OnMonth事件
+    if (serverMonth != curTimeMonth or serverYear != curTimeYear):
+        Set_Server_Month()
+        OnMonth(tick)
+        
+    #OnYear事件
+    if serverYear != curTimeYear:
+        Set_Server_Year()
+        OnYear(tick)
+        
+    return
+
+def OnHour(tick):
+    GameWorld.Log("Server -> OnHour!")
+    PlayerEventCounter.DoLogic_OnHour(tick)
+    return
+
+def OnDay(tick):
+    GameWorld.Log("Server -> OnDay!")
+    #设定服务器当前天事件
+    eventMgr = DBDataMgr.GetEventTrigMgr()
+    eventMgr.SetValueIncrement(ShareDefine.Def_ServerDay)
+    isMixServer = eventMgr.GetValue(ShareDefine.Def_IsMixServer)
+    if isMixServer:
+        eventMgr.SetValueIncrement(ShareDefine.Def_MixServerDay)
+        
+    PlayerEventCounter.DoLogic_OnDay(tick)
+    return
+
+def OnWeek(tick):
+    GameWorld.Log("Server -> OnWeek!")
+    eventMgr = DBDataMgr.GetEventTrigMgr()
+    eventMgr.SetValueIncrement(ShareDefine.Def_ServerWeek)
+    
+    PlayerEventCounter.DoLogic_OnWeek(tick)
+    return
+
+def OnMonth(tick):
+    GameWorld.Log("Server -> OnMonth!")
+    PlayerEventCounter.DoLogic_OnMonth(tick)
+    return
+
+def OnYear(tick):
+    GameWorld.Log("Server -> OnYear!")
+    PlayerEventCounter.DoLogic_OnYear(tick)
+    return
+
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/GameWorldProcess.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/GameWorldProcess.py
index fa6d995..7a28ab7 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/GameWorldProcess.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/GameWorldProcess.py
@@ -44,7 +44,6 @@
 import EventShell
 import FBLogic
 import FBCommon
-import ShareDefine
 import EventReport
 import ItemCommon
 import PyGameData
@@ -52,7 +51,7 @@
 import GameMap
 import NPCRealmRefresh
 import IpyGameDataPY
-import DBDataMgr
+import GameWorldEvent
 #---------------------------------------------------------------------
 ## 副本开启
 #  @param gameWorld IPY_GameWorld
@@ -593,9 +592,7 @@
 #  @return None
 #  @remarks 函数详细说明.
 def InitGameWorld(tick):
-    if not PyGameData.g_initGame:
-        PyGameData.g_initGame = True
-        DBDataMgr.OnServerStart()
+    GameWorldEvent.InitGameWorld(tick)
     gameWorld = GameWorld.GetGameWorld()
     ItemCommon.InitPyItem()
     EventShell.DoReloadRefresh()
@@ -778,12 +775,15 @@
 
 def __OnMapMinute(curTime, tick):
     ## 地图层级每分钟处理, 每分钟最多只会处理一次, 无视虚拟分线
+    if not PyGameData.g_initGameTime:
+        return
+    
     curMinute = curTime.minute
     if curMinute == PyGameData.g_mapLastProcess_Minute:
         return
-    if PyGameData.g_initGame:
-        DBDataMgr.OnMinute(curTime)
     PyGameData.g_mapLastProcess_Minute = curMinute
+    GameWorldEvent.OnMinute(tick)
+    
     PlayerTeam.OnCheckTeamPlayerDisconnectTimeout(tick)
     
     __CheckIpyDataRecycle(curTime)
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 d205783..abc747b 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
@@ -173,6 +173,7 @@
 import PlayerActYunshi
 import PlayerActTask
 import PlayerMail
+import DBDataMgr
 
 import datetime
 import time
@@ -6076,6 +6077,23 @@
     serverTime = GameWorld.GetCurrentTime()
     if not serverTime:
         return
+    
+    clientPack = ChPyNetSendPack.tagMCOpenServerDay()
+    clientPack.Day = DBDataMgr.GetEventTrigMgr().GetValue(ShareDefine.Def_ServerDay)
+    clientPack.IsMixServer = DBDataMgr.GetEventTrigMgr().GetValue(ShareDefine.Def_IsMixServer)
+    clientPack.MixDay = DBDataMgr.GetEventTrigMgr().GetValue(ShareDefine.Def_MixServerDay)
+    clientPack.OpenWeekday = DBDataMgr.GetEventTrigMgr().GetValue(ShareDefine.Def_OpenServerWeekday)
+    clientPack.NowYear = serverTime.year
+    clientPack.NowMonth = serverTime.month
+    clientPack.NowDay = serverTime.day
+    clientPack.NowHour = serverTime.hour
+    clientPack.NowMinute = serverTime.minute
+    clientPack.NowSecond = serverTime.second
+    clientPack.NowMicSecond = serverTime.microsecond
+    clientPack.WeekOfYear = GameWorld.GetWeekOfYear()
+    NetPackCommon.SendFakePack(curPlayer, clientPack)
+    
+    #旧包先保留,之后删除
     gw = GameWorld.GetGameWorld()
     packData = ChPyNetSendPack.tagOpenServerDay()
     packData.Clear()
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py
index 6846c02..6080b81 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py
@@ -11,20 +11,7 @@
 # @version 2.6
 #
 # @note: 处理每周, 每日, 每月事件处理
-# @change: "2015-07-10 16:00" xdh QQ每日礼包
-# @change: "2015-08-13 14:00" ljd 新手卡OnDay
-# @change: "2015-09-18 19:30" hxp 跨服boss状态变更
-# @change: "2015-10-25 17:00" hxp 跨服PK状态变更
-# @change: "2015-11-18 18:30" hxp 跨服王者争霸
-# @change: "2016-02-30 17:00" hxp 领主霸业、恶魔试炼
-# @change: "2016-04-29 18:00" hxp 宠物OnDay
-# @change: "2016-07-13 18:00" hxp 在线赠送寻宝免费次数统计OnHour触发
-# @change: "2016-07-26 17:30" hxp 增加获胜战盟盟主ID变更处理
-# @change: "2016-08-05 19:00" hxp 脚本热更支持
-# @change: "2016-08-29 23:30" hxp 洪荒之力
-# @change: "2016-09-19 10:30" hxp key状态变更时全服玩家人数获取方式修改
-# @change: "2016-10-26 11:00" hxp 签到逻辑修改
-# @change: "2017-03-22 21:00" hxp 二维码红包
+#
 #---------------------------------------------------------------------
 #"""Version = 2017-05-12 18:00""" 
 #---------------------------------------------------------------------
@@ -143,60 +130,20 @@
 import PlayerFuncTeam
 import PlayerMineArea
 import PlayerMail
-import DBDataMgr
 
 import datetime
 import time
-#---------------------------------------------------------------------
 
-#===============================================================================
-# //01 01 新一天的响应#tagMOnDay
-# tagMOnDay       *   GettagMOnDay();
-# 
-# class   IPY_MOnDay
-# {
-# public:
-# 
-#    char *      GetTime();
-# };
-#===============================================================================
-## 世界服务器->每日响应(封包参数)01 01
-#  @param index 玩家索引
-#  @param tick 当前时间
-#  @return None
-#  @remarks 函数详细说明.
-def GameServer_OnDay(index, tick):
-    GameWorld.GetPsycoFunc(__Func_GameServer_OnDay)(index, tick)
-    CheckMachineTick(tick)
-    return
+## 原GameServer通知的
+def GameServer_OnDay(index, tick): return
+def GameServer_OnHour(index, tick): return
+def GameServer_OnWeek(index, tick): return
+def GameServer_OnMonth(index, tick): return
+def GameServer_OnYear(index, tick): return
 
-## 用于防范运维开机时间超过24天导致报错
-#  @param tick 当前时间
-#  @return None
-def CheckMachineTick(tick):
-    #取一张地图测试,在mapserver做逻辑,方便运维观察
-    if GameWorld.GetMap().GetMapID() != 101:
-        return
-    
-    #超过24.8天就会发生游戏逻辑出错,因为tick变成负数
-    if tick/1000.0/60/60/24 >= 22:
-        raise Exception('Start PC > 22 days!!!')
-    
-    return
-
-## 世界服务器->每日响应(封包参数)01 01
-#  @param index 玩家索引
-#  @param tick 当前时间
-#  @return None
-#  @remarks 函数详细说明.
-def __Func_GameServer_OnDay(index, tick):
+def DoLogic_OnDay(tick):
     GameWorld.Log("MapServer -> OnDay!")
     playerManager = GameWorld.GetPlayerManager()
-    #获取每日响应封包
-    pack = IPY_GameWorld.IPY_MOnDay()
-    #同步世界服务器时间
-    SetMapServerTimeFromGameServer(pack.GetTime())
-    
     #处理所有玩家信件的onday事件, 把存在时间+1
     playerManager.ProcessAllPlayerMailOnDay()
     #清空每日日记记录信息
@@ -216,62 +163,20 @@
             continue
         
         PlayerOnDay(curPlayer)
-        # 服务器Onday处理数据,即不能在玩家上线时的Onday触发
-        #PlayerServerDay(curPlayer)
+        PlayerOnDayEx(curPlayer)
     
+    DoLogic_OnDayEx(tick)
     return
 
-def __Func_GameServer_OnDayEx(tick):
+def DoLogic_OnDayEx(tick):
     GameWorld.Log("MapServer -> OnDayEx!")
     
-    DBDataMgr.OnDayEx()
     PlayerMail.OnDayEx()
     PlayerControl.RemoveTimeoutLeaveServerPlayerInfo(tick)
-    
-    playerManager = GameWorld.GetPlayerManager()
-    for i in xrange(playerManager.GetPlayerCount()):
-        curPlayer = playerManager.GetPlayerByIndex(i)
-        
-        if not GameWorld.IsNormalPlayer(curPlayer):
-            continue
-        
-        PlayerOnDayEx(curPlayer)
     return
 
-#---------------------------------------------------------------------
-#===============================================================================
-# #//////////////////////////////////////////////////////////////
-# #//01 06 新一个小时的响应#tagMOnHour
-# #tagMOnHour       *   GettagMOnHour();
-# #
-# #class   IPY_MOnHour
-# #{
-# #public:
-# #
-# #    char *      GetTime();
-# #};
-#===============================================================================
-## 01 06 新一个小时的响应
-#  @param index 玩家索引
-#  @param tick 当前时间
-#  @return None
-#  @remarks 函数详细说明.
-def GameServer_OnHour(index, tick):
-    GameWorld.GetPsycoFunc(__Func_GameServer_OnHour)(index, tick)
-    return
-
-## 01 06 新一个小时的响应
-#  @param index 玩家索引
-#  @param tick 当前时间
-#  @return None
-#  @remarks 函数详细说明.
-def __Func_GameServer_OnHour(index, tick):
+def DoLogic_OnHour(tick):
     GameWorld.Log("MapServer -> OnHour!")
-    #获取每小时响应封包
-    pack = IPY_GameWorld.IPY_MOnHour()
-    time = pack.GetTime()
-    #同步世界服务器时间
-    SetMapServerTimeFromGameServer(time)
     
     #副本OnHour事件
     FBLogic.OnHour(time, tick)
@@ -288,39 +193,9 @@
         PlayerOnHour(curPlayer)
         
     return
-#---------------------------------------------------------------------
-#===============================================================================
-# //01 02 新一个星期的响应#tagMOnWeek
-# tagMOnWeek       *   GettagMOnWeek();
-# 
-# class   IPY_MOnWeek
-# {
-# public:
-# 
-#    char *      GetTime();
-# };
-#===============================================================================
 
-## 世界服务器->每周响应(封包参数) 01 02 新一个星期的响应
-#  @param index 玩家索引
-#  @param tick 当前时间
-#  @return None
-#  @remarks 函数详细说明.
-def GameServer_OnWeek(index, tick):
-    GameWorld.GetPsycoFunc(__Func_GameServer_OnWeek)(index, tick)
-    return
-
-## 世界服务器->每周响应(封包参数) 01 02 新一个星期的响应
-#  @param index 玩家索引
-#  @param tick 当前时间
-#  @return None
-#  @remarks 函数详细说明.
-def __Func_GameServer_OnWeek(index, tick):
+def DoLogic_OnWeek(tick):
     GameWorld.Log("MapServer -> OnWeek!")
-    #获得每周响应封包
-    pack = IPY_GameWorld.IPY_MOnWeek()
-    #同步世界服务器时间
-    SetMapServerTimeFromGameServer(pack.GetTime())
     
     playerManager = GameWorld.GetPlayerManager()
     for i in xrange(playerManager.GetPlayerCount()):
@@ -330,58 +205,14 @@
             continue
         
         PlayerOnWeek(curPlayer)
+        PlayerOnWeekEx(curPlayer)
         
     #副本OnWeek事件响应
     FBLogic.OnWeek(tick)
     return
 
-def __Func_GameServer_OnWeekEx(tick):
-    GameWorld.Log("MapServer -> OnWeekEx!")
-    
-    playerManager = GameWorld.GetPlayerManager()
-    for i in xrange(playerManager.GetPlayerCount()):
-        curPlayer = playerManager.GetPlayerByIndex(i)
-        
-        if not GameWorld.IsNormalPlayer(curPlayer):
-            continue
-        
-        PlayerOnWeekEx(curPlayer)
-        
-    return
-
-#---------------------------------------------------------------------
-#===============================================================================
-# //01 03 新一个月的响应#tagMOnMonth
-# tagMOnMonth       *   GettagMOnMonth();
-# 
-# class   IPY_MOnMonth
-# {
-# public:
-# 
-#    char *      GetTime();
-# };
-#===============================================================================
-
-## 世界服务器->每月响应(封包参数)01 03 新一个月的响应
-#  @param index 玩家索引
-#  @param tick 当前时间
-#  @return None
-#  @remarks 函数详细说明.
-def GameServer_OnMonth(index, tick):
-    GameWorld.GetPsycoFunc(__Func_GameServer_OnMonth)(index, tick)
-    return
-
-## 世界服务器->每月响应(封包参数)01 03 新一个月的响应
-#  @param index 玩家索引
-#  @param tick 当前时间
-#  @return None
-#  @remarks 函数详细说明.
-def __Func_GameServer_OnMonth(index, tick):
+def DoLogic_OnMonth(tick):
     GameWorld.Log("MapServer -> OnMonth!")
-    #获得每月响应封包
-    pack = IPY_GameWorld.IPY_MOnMonth()
-    #同步世界服务器时间
-    SetMapServerTimeFromGameServer(pack.GetTime())
     
     playerManager = GameWorld.GetPlayerManager()
     for i in xrange(playerManager.GetPlayerCount()):
@@ -391,56 +222,12 @@
             continue
         
         PlayerOnMonth(curPlayer)
-    
-    return
-
-def __Func_GameServer_OnMonthEx(tick):
-    GameWorld.Log("MapServer -> OnMonthEx!")
-    
-    playerManager = GameWorld.GetPlayerManager()
-    for i in xrange(playerManager.GetPlayerCount()):
-        curPlayer = playerManager.GetPlayerByIndex(i)
-        
-        if not GameWorld.IsNormalPlayer(curPlayer):
-            continue
-        
         PlayerOnMonthEx(curPlayer)
         
     return
 
-#---------------------------------------------------------------------
-#===============================================================================
-# //01 04 新一年的响应#tagMOnYear
-# tagMOnYear       *   GettagMOnYear();
-# 
-# class   IPY_MOnYear
-# {
-# public:
-# 
-#    char *      GetTime();
-# };
-#===============================================================================
-
-## 世界服务器->每年响应(封包参数)01 04 新一年的响应
-#  @param index 玩家索引
-#  @param tick 当前时间 
-#  @return None
-#  @remarks 函数详细说明.
-def GameServer_OnYear(index, tick):
-    GameWorld.GetPsycoFunc(__Func_GameServer_OnYear)(index, tick)
-    return
-
-## 世界服务器->每年响应(封包参数)01 04 新一年的响应
-#  @param index 玩家索引
-#  @param tick 当前时间 
-#  @return None
-#  @remarks 函数详细说明.
-def __Func_GameServer_OnYear(index, tick):
+def DoLogic_OnYear(tick):
     GameWorld.Log("MapServer -> OnYear")
-    #获得新年响应封包
-    pack = IPY_GameWorld.IPY_MOnYear()
-    #同步世界服务器时间
-    SetMapServerTimeFromGameServer(pack.GetTime())
     
     playerManager = GameWorld.GetPlayerManager()
     for i in range(0, playerManager.GetPlayerCount()):
@@ -1008,6 +795,49 @@
     GameWorld.Log('验证重生点完毕, mapID = %s, cnt = %s'%(mapID, br_Count))
     return
 #---------------------------------------------------------------------
+
+def GMDateTime(curPlayer, eventName):
+    if eventName == 'GMOnHour':
+        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OnHour, 0)
+        return
+    
+    if eventName == 'GMOnDay':
+        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OnHour, 0)
+        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OnDay, 0)
+        #PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OnDayEx, 0)
+        return
+    
+    if eventName == 'GMOnWeek':
+        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OnHour, 0)
+        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OnDay, 0)
+        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OnWeek, 0)
+        #PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OnDayEx, 0)
+        #PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OnWeekEx, 0)
+        return
+    
+    if eventName == 'GMOnMonth':
+        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OnHour, 0)
+        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OnDay, 0)
+        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OnWeek, 0)
+        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OnMonth, 0)
+        #PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OnDayEx, 0)
+        #PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OnWeekEx, 0)
+        #PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OnMonthEx, 0)
+        return
+    
+    if eventName == 'GMOnYear':
+        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OnHour, 0)
+        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OnDay, 0)
+        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OnWeek, 0)
+        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OnMonth, 0)
+        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OnYear, 0)
+        #PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OnDayEx, 0)
+        #PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OnWeekEx, 0)
+        #PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OnMonthEx, 0)
+        return
+    
+    return
+
 ## 更新玩家在线时间(参数 -> 当前玩家)
 #  @param curPlayer 当前玩家
 #  @return None
@@ -1672,21 +1502,6 @@
     elif key == ShareDefine.Def_Notify_WorldKey_CrossDailyActionState % ShareDefine.CrossDailyActionID_YaomoBoss:
         if gameWorldMgr.GetGameWorldDictByKey(key) != value:
             PlayerCrossYaomoBoss.OnYaomoBossStateChange(value, tick)
-            
-    # OnDayEx
-    elif key == ShareDefine.Def_Notify_WorldKey_OnDayEx:
-        if value and gameWorldMgr.GetGameWorldDictByKey(key) != value:
-            __Func_GameServer_OnDayEx(tick)
-            
-    # OnWeekEx
-    elif key == ShareDefine.Def_Notify_WorldKey_OnWeekEx:
-        if value and gameWorldMgr.GetGameWorldDictByKey(key) != value:
-            __Func_GameServer_OnWeekEx(tick)
-            
-    # OnMonthEx
-    elif key == ShareDefine.Def_Notify_WorldKey_OnMonthEx:
-        if value and gameWorldMgr.GetGameWorldDictByKey(key) != value:
-            __Func_GameServer_OnMonthEx(tick)
             
     # 世界等级      
     elif key == ShareDefine.Def_Notify_WorldKey_WorldAverageLv:
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerMail.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerMail.py
index cdcf8db..eb1cf85 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerMail.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerMail.py
@@ -91,7 +91,7 @@
             mailState = mailObj.GetMailState()
             mailItemCount = mailMgr.GetMailItemCount(guid)
             if mailItemCount and mailState != ShareDefine.MailState_Got:
-                #GameWorld.DebugLog("个人邮件有物品邮件未领取不删除! %s" % guid, playerID)
+                #GameWorld.DebugLog("个人邮件有物品未领取不删除! %s" % guid, playerID)
                 continue
             
             mailMgr.DelPersonalMail(playerID, guid)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_GMDateTime.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_GMDateTime.py
deleted file mode 100644
index d3c25a4..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_GMDateTime.py
+++ /dev/null
@@ -1,98 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#---------------------------------------------------------------------
-#
-#---------------------------------------------------------------------
-##@package GY_Query_GMDateTime
-# @todo: GM命令test_onHour , test_OnDay, test_OnWeek
-#
-# @author: panwei
-# @date 2010-03-21
-# @version 1.4
-#
-# @note: GM命令test_onHour , test_OnDay, test_OnWeek
-#---------------------------------------------------------------------
-# @change: "2010-05-12 18:30" zhengyang 添加注释
-# @change: "2010-06-10 17:46" panwei 将写死的任务1调用修改为公共调用
-# @change: "2014-10-28 19:30" hxp 增加test_OnYear
-# @change: "2015-06-17 12:00" ljd 增加test_OnMonth
-#---------------------------------------------------------------------
-#"""Version = 2015-06-17 12:00"""
-#------------------------------------------------------------------------------ 
-#导入
-import ChConfig
-import GameWorld
-import QuestCommon
-import PlayerControl
-#---------------------------------------------------------------------
-#全局变量
-#---------------------------------------------------------------------
-
-#---------------------------------------------------------------------
-#逻辑实现
-## 请求逻辑
-#  @param query_Type 请求类型
-#  @param query_ID 请求的玩家ID
-#  @param packCMDList 发包命令 [str ]
-#  @param tick 当前时间
-#  @return None or ""
-#  @remarks 函数详细说明.
-def DoLogic(query_Type , query_ID , packCMDList , tick):
-    #GameWorld.DebugLog("GY_Query_GMDateTime query_ID=%s,packCMDList=%s" % (query_ID, packCMDList))
-    
-    curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(query_ID)
-    if not curPlayer or curPlayer.IsEmpty():
-        return ''
-    
-    if packCMDList == 'GMOnHour':
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OnHour, 0)
-        return
-    
-    if packCMDList == 'GMOnDay':
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OnHour, 0)
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OnDay, 0)
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OnDayEx, 0)
-        return
-    
-    if packCMDList == 'GMOnWeek':
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OnHour, 0)
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OnDay, 0)
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OnDayEx, 0)
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OnWeek, 0)
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OnWeekEx, 0)
-        return
-    
-    if packCMDList == 'GMOnMonth':
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OnHour, 0)
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OnDay, 0)
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OnDayEx, 0)
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OnWeek, 0)
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OnWeekEx, 0)
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OnMonth, 0)
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OnMonthEx, 0)
-        return
-    
-    if packCMDList == 'GMOnYear':
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OnHour, 0)
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OnDay, 0)
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OnDayEx, 0)
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OnWeek, 0)
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OnWeekEx, 0)
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OnMonth, 0)
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OnMonthEx, 0)
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OnYear, 0)
-        return
-    
-    GameWorld.Log( 'GY_Query_GMDateTime err =%s'%( packCMDList ) )
-    return
-#---------------------------------------------------------------------
-#执行结果
-## 执行结果
-#  @param curPlayer 发出请求的玩家
-#  @param callFunName 功能名称
-#  @param funResult 查询的结果
-#  @param tick 当前时间
-#  @return None
-#  @remarks 函数详细说明.
-def DoResult(curPlayer , callFunName , funResult , tick):
-    return
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyGameData.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyGameData.py
index b6294d7..1eb9ee8 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyGameData.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyGameData.py
@@ -15,7 +15,7 @@
 #"""Version = 2017-09-05 21:30"""
 #-------------------------------------------------------------------------------
 
-g_initGame = False
+g_initGameTime = 0 # 初始化游戏时间戳
 
 g_pyGameDataManager = None
 
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
index e0d4613..f4893a8 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
@@ -18,6 +18,31 @@
 # 游戏默认编码
 Def_Game_Character_Encoding = 'gbk'
 
+# ------------------------- DBEventTrig事件key ------------------------- 
+Def_Server_Year = 'Def_Server_Year' #服务器开服自动逻辑处理 年
+Def_Server_Month = 'Def_Server_Month' #服务器开服自动逻辑处理 月
+Def_Server_Week = 'Def_Server_Week' #服务器开服自动逻辑处理 周
+Def_Server_Day = 'Def_Server_Day' #服务器开服自动逻辑处理 日
+Def_Server_Hour = 'Def_Server_Hour' #服务器开服自动逻辑处理 小时
+Def_ServerWeek = 'ServerWeek' #服务器运行了几周
+Def_ServerDay = 'ServerDay' #服务器运行了几天
+Def_OpenServerWeekday = 'OpenServerWeekday' #开服是周几, 1代表周一
+Def_IsMixServer = 'IsMixServer' #服务器是否是合服服务器
+Def_MixServerDay = 'MixServerDay' #服务器已经合服多少天
+Def_IsMixServerInitOK = 'IsMixServerInitOK' #服务器合服首次启动OK
+Def_LastMixServerDay = 'LastMixServerDay' #上次合服时的开服天数
+#首次开服时间,注意不要用该日期做开服天相关的功能逻辑,如果要用开服天,请用 Def_ServerDay
+''' 原因: 
+因为目前开服天的逻辑大部分是用 Def_ServerDay,当出现服务器宕机超过24小时时,就会导致 Def_ServerDay 与 Def_InitOpenServerTime 不对应
+所以为了功能逻辑和数据的统一性,开服天相关的功能逻辑必须用 Def_ServerDay
+Def_InitOpenServerTime 目前仅用于预先设置开服日期用
+'''
+Def_InitOpenServerTime = 'InitOpenServerTime'
+Def_SetOpenServerTime = 'SetOpenServerTime' # GM工具预定的开服时间
+
+# ------------------------- WorldKey ------------------------- 
+Def_WorldKey_GameWorldInitOK = 'GameWorldInitOK'             #GameWold是否初始化完成OK
+
 #---奇迹, 职业枚举定义---
 (
 PlayerJob_None,     # 无

--
Gitblit v1.8.0