hxp
2018-09-21 78eba407c2b7d68096500e9013add9141b13f52c
3798 【后端】运营活动时间优化,开服日常限时活动定制时间优化
21个文件已修改
369 ■■■■■ 已修改文件
ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py 96 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/ClearOpenServerDay.py 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/GetOpenServerDay.py 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/SetOpenServerWeekday.py 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/SetWorldLV.py 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/CoreServerGroup/GameServer/Script/GameWorld.py 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldActionControl.py 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldProcess.py 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/CoreServerGroup/GameServer/Script/Player/ChPlayer.py 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerDBGSEvent.py 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerEventCounter.py 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFairyCeremony.py 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py 96 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorld.py 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerBossReborn.py 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCostRebate.py 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFlashGiftbag.py 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerSpringSale.py 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
@@ -311,78 +311,92 @@
#A0 05 同步开服天数 #tagOpenServerDay
class  tagOpenServerDay(Structure):
    Head = tagHead()
    Day = 0    #(WORD Day)// 已开服天数,从0开始
    IsMixServer = 0    #(BYTE IsMixServer)//是否是合服服务器
    MixDay = 0    #(WORD MixDay)// 已合服天数,从0开始
    OpenServerTime = ""    #(char OpenServerTime[19])//开服时间yyyy-MM-dd HH:mm:ss
    data = None
    _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),
                  ]
    def __init__(self):
        self.Clear()
        self.Head.Cmd = 0xA0
        self.Head.SubCmd = 0x05
        self.Cmd = 0xA0
        self.SubCmd = 0x05
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
    def ReadData(self, stringData, _pos=0, _len=0):
        self.Clear()
        _pos = self.Head.ReadData(_lpData, _pos)
        self.Day,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.IsMixServer,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.MixDay,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.OpenServerTime,_pos = CommFunc.ReadString(_lpData, _pos,19)
        return _pos
        memmove(addressof(self), stringData[_pos:], self.GetLength())
        return _pos + self.GetLength()
    def Clear(self):
        self.Head = tagHead()
        self.Head.Clear()
        self.Head.Cmd = 0xA0
        self.Head.SubCmd = 0x05
        self.Cmd = 0xA0
        self.SubCmd = 0x05
        self.Day = 0
        self.IsMixServer = 0
        self.MixDay = 0
        self.OpenServerTime = ""
        self.OpenWeekday = 0
        self.NowYear = 0
        self.NowMonth = 0
        self.NowDay = 0
        self.NowHour = 0
        self.NowMinute = 0
        self.NowSecond = 0
        self.NowMicSecond = 0
        return
    def GetLength(self):
        length = 0
        length += self.Head.GetLength()
        length += 2
        length += 1
        length += 2
        length += 19
        return length
        return sizeof(tagOpenServerDay)
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
        data = CommFunc.WriteWORD(data, self.Day)
        data = CommFunc.WriteBYTE(data, self.IsMixServer)
        data = CommFunc.WriteWORD(data, self.MixDay)
        data = CommFunc.WriteString(data, 19, self.OpenServerTime)
        return data
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''
                                Head:%s,
        DumpString = '''//A0 05 同步开服天数 //tagOpenServerDay:
                                Cmd:%s,
                                SubCmd:%s,
                                Day:%d,
                                IsMixServer:%d,
                                MixDay:%d,
                                OpenServerTime:%s
                                OpenWeekday:%d,
                                NowYear:%d,
                                NowMonth:%d,
                                NowDay:%d,
                                NowHour:%d,
                                NowMinute:%d,
                                NowSecond:%d,
                                NowMicSecond:%d
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.Cmd,
                                self.SubCmd,
                                self.Day,
                                self.IsMixServer,
                                self.MixDay,
                                self.OpenServerTime
                                self.OpenWeekday,
                                self.NowYear,
                                self.NowMonth,
                                self.NowDay,
                                self.NowHour,
                                self.NowMinute,
                                self.NowSecond,
                                self.NowMicSecond
                                )
        return DumpString
m_NAtagOpenServerDay=tagOpenServerDay()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagOpenServerDay.Head.Cmd,m_NAtagOpenServerDay.Head.SubCmd))] = m_NAtagOpenServerDay
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagOpenServerDay.Cmd,m_NAtagOpenServerDay.SubCmd))] = m_NAtagOpenServerDay
#------------------------------------------------------
ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/ClearOpenServerDay.py
@@ -62,8 +62,7 @@
    GameWorld.SendMapServerMsgEx(ShareDefine.Def_Notify_WorldKey_MixServerDay, 0)
    
    curTime = int(time.time())
    PlayerDBGSEvent.SetDBGSTrig_ByKey(PlayerDBGSEvent.Def_InitOpenServerTime, curTime)
    PlayerDBGSEvent.SetDBGSTrig_ByKey(PlayerDBGSEvent.Def_SetOpenServerTime, curTime)
    PlayerDBGSEvent.SetInitOpenServerTime(curTime)
    
    # 重置数据记录及领奖状态
    for campaignType in ShareDefine.Def_Campaign_Type_List:
@@ -103,9 +102,8 @@
    
    if curPlayer:
        PlayerEventCounter.Sync_OpenServerDay(curPlayer)
        GameWorld.DebugAnswer(curPlayer, '开服时间:%s, 星期%s, 天数:%s 是否合服:%s, 合服天数:%s'%\
                              (GameWorld.ChangeTimeNumToStr(PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_InitOpenServerTime)),
                               GameWorldProcess.GetOpenServerWeekday(),
        GameWorld.DebugAnswer(curPlayer, '开服星期%s, 天数:%s 是否合服:%s, 合服天数:%s'%\
                              (GameWorldProcess.GetOpenServerWeekday(),
                               PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_ServerDay) + 1,
                               PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_IsMixServer),
                               PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_MixServerDay) + 1))
ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/GetOpenServerDay.py
@@ -26,9 +26,8 @@
#  @return None
#  @remarks 函数详细说明.
def OnExec(curPlayer, cmdList):
    GameWorld.DebugAnswer(curPlayer, '开服时间:%s, 星期%s, 天数:%s 是否合服:%s, 合服天数:%s'%\
                          (GameWorld.ChangeTimeNumToStr(PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_InitOpenServerTime)),
                           GameWorldProcess.GetOpenServerWeekday(),
    GameWorld.DebugAnswer(curPlayer, '开服星期%s, 天数:%s 是否合服:%s, 合服天数:%s'%\
                          (GameWorldProcess.GetOpenServerWeekday(),
                           PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_ServerDay) + 1,
                           PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_IsMixServer),
                           PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_MixServerDay) + 1))
ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/SetOpenServerWeekday.py
@@ -46,11 +46,9 @@
    openDateTime = curDateTime + datetime.timedelta(days = -diffDays)
    openServerTime = int(time.mktime(openDateTime.timetuple()))
    
    PlayerDBGSEvent.SetDBGSTrig_ByKey(PlayerDBGSEvent.Def_InitOpenServerTime, openServerTime)
    PlayerDBGSEvent.SetDBGSTrig_ByKey(PlayerDBGSEvent.Def_SetOpenServerTime, openServerTime)
    GameWorld.DebugAnswer(curPlayer, "开服时间:%s,星期%s,开服天%s"
                          % (GameWorld.ChangeTimeNumToStr(openServerTime),
                             GameWorldProcess.GetOpenServerWeekday(),
    PlayerDBGSEvent.SetInitOpenServerTime(openServerTime)
    GameWorld.DebugAnswer(curPlayer, "开服星期%s,开服天%s"
                          % (GameWorldProcess.GetOpenServerWeekday(),
                             PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_ServerDay) + 1))
    PlayerEventCounter.Sync_OpenServerDay(curPlayer)
    return
ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/SetWorldLV.py
@@ -54,8 +54,7 @@
    initOpenServerTime = curTime - worldLVIpyData.GetOpenServerSecond()
    if extraTime:
        PlayerDBGSEvent.SetDBGSTrig_ByKey(PlayerDBGSEvent.Def_WorldLVExtraTime, extraTime)
    PlayerDBGSEvent.SetDBGSTrig_ByKey(PlayerDBGSEvent.Def_InitOpenServerTime, initOpenServerTime)
    PlayerDBGSEvent.SetDBGSTrig_ByKey(PlayerDBGSEvent.Def_SetOpenServerTime, initOpenServerTime)
    PlayerDBGSEvent.SetInitOpenServerTime(initOpenServerTime)
    GameWorld.GetGameWorld().SetDict(ShareDefine.Def_Notify_WorldKey_WorldAverageLv, worldLV)
    PlayerDBGSEvent.SetDBGSTrig_ByKey(ShareDefine.Def_Notify_WorldKey_WorldAverageLv, worldLV)
    GameWorld.SendMapServerMsgEx(ShareDefine.Def_Notify_WorldKey_WorldAverageLv, worldLV)
ServerPython/CoreServerGroup/GameServer/Script/GameWorld.py
@@ -535,6 +535,19 @@
    return tagPlayer.GetRealMapID()
#---------------------------------------------------------------------
def GetOperationActionDateStr(dateInfo, openServerDay):
    '''获取运营活动对应日期,存数字代表开服天配置,需要转化为对应的日期
    @param dateInfo: 运营活动表配置的日期信息, 如果是纯数字代表开服天
    @param openServerDay: 当前开服天
    '''
    if not dateInfo.isdigit():
        return dateInfo
    actionServerDay = int(dateInfo)
    curDateTime = datetime.datetime.today()
    actionDateTime = curDateTime + datetime.timedelta(days=(actionServerDay-openServerDay))
    return "%d-%d-%d" % (actionDateTime.year, actionDateTime.month, actionDateTime.day)
##获得系统时间
# @param 无意义
# @return 系统时间
ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldActionControl.py
@@ -477,10 +477,11 @@
        return
    if len(ipyData.GetStartTimeList()) != len(ipyData.GetEndTimeList()):
        return
    openServerDay = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_ServerDay) + 1
    multiExpRateInfo = ChPyNetSendPack.tagGCMultiExpRateInfo()
    multiExpRateInfo.Clear()
    multiExpRateInfo.StartDate = ipyData.GetStartDate()
    multiExpRateInfo.EndtDate = ipyData.GetEndDate()
    multiExpRateInfo.StartDate = GameWorld.GetOperationActionDateStr(ipyData.GetStartDate(), openServerDay)
    multiExpRateInfo.EndtDate = GameWorld.GetOperationActionDateStr(ipyData.GetEndDate(), openServerDay)
    multiExpRateInfo.ActivityTime = []
    for i, startTime in enumerate(ipyData.GetStartTimeList()):
        endTime = ipyData.GetEndTimeList()[i]
@@ -509,10 +510,11 @@
    ##多倍修行点活动信息通知
    if not ipyData:
        return
    openServerDay = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_ServerDay) + 1
    multiRealmPointInfo = ChPyNetSendPack.tagGCMultiRealmPointInfo()
    multiRealmPointInfo.Clear()
    multiRealmPointInfo.StartDate = ipyData.GetStartDate()
    multiRealmPointInfo.EndtDate = ipyData.GetEndDate()
    multiRealmPointInfo.StartDate = GameWorld.GetOperationActionDateStr(ipyData.GetStartDate(), openServerDay)
    multiRealmPointInfo.EndtDate = GameWorld.GetOperationActionDateStr(ipyData.GetEndDate(), openServerDay)
    multiRealmPointInfo.Multiple = ipyData.GetMultiple()
    multiRealmPointInfo.LimitLV = ipyData.GetLVLimit()
    if not curPlayer:
ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldProcess.py
@@ -1208,6 +1208,12 @@
    GameWorld.GetGameWorld().SetDict(ChConfig.Def_WorldKey_IsGameWorldInit, 1)
    #初始化游戏时钟
    GameWorld.GetGameWorld().SetTickTypeCount(ChConfig.TYPE_Tick_Count)
    #初始话开服时间、星期几
    initOpenServerTime = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_InitOpenServerTime)
    openServerWeekday = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_OpenServerWeekday)
    if initOpenServerTime <= 0 or openServerWeekday <= 0:
        #记录首次开发时间(现实时间戳)
        PlayerDBGSEvent.SetInitOpenServerTime(initOpenServerTime if initOpenServerTime else int(time.time()))
    #初始化家族数量
    GameWorld.GetFamilyManager().SetFamilyUpperLimitCount(ChConfig.Def_Family_MaxCnt)
    #排序元宝交易平台
@@ -1225,10 +1231,6 @@
    #事件汇报初始化
    EventReport.InitDllAppID()
    
    initOpenServerTime = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_InitOpenServerTime)
    if initOpenServerTime <= 0:
        #记录首次开发时间(现实时间戳)
        PlayerDBGSEvent.SetDBGSTrig_ByKey(PlayerDBGSEvent.Def_InitOpenServerTime, int(time.time()))
    #ReloadModule.RefreshModuleFileCMTime(True)
    #合服首次启动加载处理
    __DoMixServerInit()
@@ -1322,16 +1324,11 @@
    
    AllMapServerInitOK(tick)
    
    PlayerDBGSEvent.SetDBGSTrig_ByKey(PlayerDBGSEvent.Def_InitOpenServerTime, setOpenServerTime)
    PlayerDBGSEvent.SetInitOpenServerTime(setOpenServerTime)
    return
def GetOpenServerWeekday():
    # 服务器开服时是星期几
    openServerTime = PlayerDBGSEvent.GetDBGSTrig_ByKey( PlayerDBGSEvent.Def_InitOpenServerTime)
    if not openServerTime:
        return 0
    openDatetime = GameWorld.ChangeTimeNumToDatetime(openServerTime)
    return openDatetime.weekday() + 1
## 服务器开服时是星期几
def GetOpenServerWeekday(): return PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_OpenServerWeekday)
## 所有地图服务器初始化成功后(封包注册)
#  @param tick 当前时间
@@ -1371,8 +1368,8 @@
    # 通知开服天数
    openServerDay = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_ServerDay)
    GameWorld.SendMapServerMsgEx(ShareDefine.Def_Notify_WorldKey_ServerDay, openServerDay)
    openServerTime = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_InitOpenServerTime)
    GameWorld.SendMapServerMsgEx(ShareDefine.Def_Notify_WorldKey_InitOpenServerTime, openServerTime)
    openServerWeekday = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_OpenServerWeekday)
    GameWorld.SendMapServerMsgEx(ShareDefine.Def_Notify_WorldKey_OpenServerWeekday, openServerWeekday)
    # 合服状态
    isMixServer = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_IsMixServer)
    GameWorld.SendMapServerMsgEx(ShareDefine.Def_Notify_WorldKey_IsMixServer, isMixServer)
ServerPython/CoreServerGroup/GameServer/Script/Player/ChPlayer.py
@@ -269,19 +269,6 @@
    #PlayerCanGetReward.SynClient_CanGetRewardList(curPlayer)
    return
## 通知首次开服时间
#  @param curPlayer: 玩家实例
#  @return: None
def Sync_InitOpenServerTime(curPlayer):
#    initOpenServerTime = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_InitOpenServerTime)
#    packData = ChPyNetSendPack.tagInitOpenServerTime()
#    packData.Clear()
#    packData.Time = initOpenServerTime
#    NetPackCommon.SendFakePack(curPlayer, packData)
    return
## 运营登陆信息处理
#  @param curPlayer
#  @return None
ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerDBGSEvent.py
@@ -66,6 +66,9 @@
#服务器运行了几天
Def_ServerDay = 'ServerDay'
#开服是周几, 1代表周一
Def_OpenServerWeekday = 'OpenServerWeekday'
#服务器是否是合服服务器
Def_IsMixServer = 'IsMixServer'
@@ -81,9 +84,14 @@
#上次开服天数开启的活动时的时间(Def_ServerDay的值)
Def_ServerLastOpenActionDay = "ServerLastOpenActionDay"
#首次开服时间
#首次开服时间,注意不要用该日期做开服天相关的功能逻辑,如果要用开服天,请用 Def_ServerDay
''' 原因:
因为目前开服天的逻辑大部分是用 Def_ServerDay,当出现服务器宕机超过24小时时,就会导致 Def_ServerDay 与 Def_InitOpenServerTime 不对应
所以为了功能逻辑和数据的统一性,开服天相关的功能逻辑必须用 Def_ServerDay
Def_InitOpenServerTime 目前仅用于预先设置开服日期用
'''
Def_InitOpenServerTime = 'InitOpenServerTime'
Def_SetOpenServerTime = 'SetOpenServerTime' # 设置的开服时间
Def_SetOpenServerTime = 'SetOpenServerTime' # GM工具预定的开服时间
#仙盟联赛当前战斗轮次
Def_FamilyWar_Round = 'FamilyWar_Round'
@@ -149,6 +157,19 @@
#boss复活活动已复活次数
Def_BossRebornCnt = "BossRebornCnt"
def SetInitOpenServerTime(initTime):
    openDatetime = GameWorld.ChangeTimeNumToDatetime(initTime)
    openServerWeekday = openDatetime.weekday() + 1
    SetDBGSTrig_ByKey(Def_InitOpenServerTime, initTime)
    SetDBGSTrig_ByKey(Def_OpenServerWeekday, openServerWeekday)
    GameWorld.Log("设置开服时间: %s(%s), 周%s" % (openDatetime, initTime, openServerWeekday))
    # 需要这个参数主要是GM工具会判断是否有设置过,所以该值一般只有GM命令或工具才能设置
    setOpenServerTime = GetDBGSTrig_ByKey(Def_SetOpenServerTime)
    if setOpenServerTime and setOpenServerTime != initTime:
        SetDBGSTrig_ByKey(Def_SetOpenServerTime, initTime)
        GameWorld.Log("    同步更新 Def_SetOpenServerTime=%s" % initTime)
    return
## 查找事件
#  @param findID 查找的ID
#  @param key 与ID组合成key
ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerEventCounter.py
@@ -285,6 +285,10 @@
#  @param curPlayer: 玩家实例
#  @return: None
def Sync_OpenServerDay(curPlayer):
    # 服务器时间
    serverTime = GameWorld.GetServerTime()
    if not serverTime:
        return
    openDay = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_ServerDay)
    isMixServer = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_IsMixServer)
    mixServerDay = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_MixServerDay)
@@ -293,7 +297,14 @@
    packData.Day = openDay
    packData.IsMixServer = isMixServer
    packData.MixDay = mixServerDay
    packData.OpenServerTime = GameWorld.ChangeTimeNumToStr(PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_InitOpenServerTime))
    packData.OpenWeekday = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_InitOpenServerTime)
    packData.NowYear = serverTime.year
    packData.NowMonth = serverTime.month
    packData.NowDay = serverTime.day
    packData.NowHour = serverTime.hour
    packData.NowMinute = serverTime.minute
    packData.NowSecond = serverTime.second
    packData.NowMicSecond = serverTime.microsecond
    NetPackCommon.SendFakePack(curPlayer, packData)
    return
ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFairyCeremony.py
@@ -88,10 +88,11 @@
    if not ipyData:
        return
    
    openServerDay = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_ServerDay) + 1
    fairyCeremonyInfo = ChPyNetSendPack.tagGCFairyCeremonyInfo()
    fairyCeremonyInfo.Clear()
    fairyCeremonyInfo.StartDate = ipyData.GetStartDate()
    fairyCeremonyInfo.EndtDate = ipyData.GetEndDate()
    fairyCeremonyInfo.StartDate = GameWorld.GetOperationActionDateStr(ipyData.GetStartDate(), openServerDay)
    fairyCeremonyInfo.EndtDate = GameWorld.GetOperationActionDateStr(ipyData.GetEndDate(), openServerDay)
    fairyCeremonyInfo.WorldLV = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_OActWorldLV % ShareDefine.OperationActionName_FairyCeremony)
    fairyCeremonyInfo.LimitLV = ipyData.GetLVLimit()
    if not curPlayer:
ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
@@ -127,7 +127,7 @@
Def_Notify_Separator = '+'
#通知地图服务器并设置该字典值
Def_Notify_WorldKey_InitOpenServerTime = 'InitOpenServerTime'   # 开服时间
Def_Notify_WorldKey_OpenServerWeekday = 'OpenServerWeekday'     # 开服是周几, 1代表周一
Def_Notify_WorldKey_ServerDay = 'ServerDay'               # 开服天数
Def_Notify_WorldKey_IsMixServer = 'IsMixServer'           # 是否合服服务器
Def_Notify_WorldKey_MixServerDay = 'MixServerDay'         # 合服天数
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
@@ -311,78 +311,92 @@
#A0 05 同步开服天数 #tagOpenServerDay
class  tagOpenServerDay(Structure):
    Head = tagHead()
    Day = 0    #(WORD Day)// 已开服天数,从0开始
    IsMixServer = 0    #(BYTE IsMixServer)//是否是合服服务器
    MixDay = 0    #(WORD MixDay)// 已合服天数,从0开始
    OpenServerTime = ""    #(char OpenServerTime[19])//开服时间yyyy-MM-dd HH:mm:ss
    data = None
    _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),
                  ]
    def __init__(self):
        self.Clear()
        self.Head.Cmd = 0xA0
        self.Head.SubCmd = 0x05
        self.Cmd = 0xA0
        self.SubCmd = 0x05
        return
    def ReadData(self, _lpData, _pos=0, _Len=0):
    def ReadData(self, stringData, _pos=0, _len=0):
        self.Clear()
        _pos = self.Head.ReadData(_lpData, _pos)
        self.Day,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.IsMixServer,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.MixDay,_pos = CommFunc.ReadWORD(_lpData, _pos)
        self.OpenServerTime,_pos = CommFunc.ReadString(_lpData, _pos,19)
        return _pos
        memmove(addressof(self), stringData[_pos:], self.GetLength())
        return _pos + self.GetLength()
    def Clear(self):
        self.Head = tagHead()
        self.Head.Clear()
        self.Head.Cmd = 0xA0
        self.Head.SubCmd = 0x05
        self.Cmd = 0xA0
        self.SubCmd = 0x05
        self.Day = 0
        self.IsMixServer = 0
        self.MixDay = 0
        self.OpenServerTime = ""
        self.OpenWeekday = 0
        self.NowYear = 0
        self.NowMonth = 0
        self.NowDay = 0
        self.NowHour = 0
        self.NowMinute = 0
        self.NowSecond = 0
        self.NowMicSecond = 0
        return
    def GetLength(self):
        length = 0
        length += self.Head.GetLength()
        length += 2
        length += 1
        length += 2
        length += 19
        return length
        return sizeof(tagOpenServerDay)
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
        data = CommFunc.WriteWORD(data, self.Day)
        data = CommFunc.WriteBYTE(data, self.IsMixServer)
        data = CommFunc.WriteWORD(data, self.MixDay)
        data = CommFunc.WriteString(data, 19, self.OpenServerTime)
        return data
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''
                                Head:%s,
        DumpString = '''//A0 05 同步开服天数 //tagOpenServerDay:
                                Cmd:%s,
                                SubCmd:%s,
                                Day:%d,
                                IsMixServer:%d,
                                MixDay:%d,
                                OpenServerTime:%s
                                OpenWeekday:%d,
                                NowYear:%d,
                                NowMonth:%d,
                                NowDay:%d,
                                NowHour:%d,
                                NowMinute:%d,
                                NowSecond:%d,
                                NowMicSecond:%d
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.Cmd,
                                self.SubCmd,
                                self.Day,
                                self.IsMixServer,
                                self.MixDay,
                                self.OpenServerTime
                                self.OpenWeekday,
                                self.NowYear,
                                self.NowMonth,
                                self.NowDay,
                                self.NowHour,
                                self.NowMinute,
                                self.NowSecond,
                                self.NowMicSecond
                                )
        return DumpString
m_NAtagOpenServerDay=tagOpenServerDay()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagOpenServerDay.Head.Cmd,m_NAtagOpenServerDay.Head.SubCmd))] = m_NAtagOpenServerDay
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagOpenServerDay.Cmd,m_NAtagOpenServerDay.SubCmd))] = m_NAtagOpenServerDay
#------------------------------------------------------
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorld.py
@@ -590,6 +590,19 @@
    return curTimeStr
#---------------------------------------------------------------------
def GetOperationActionDateStr(dateInfo, openServerDay):
    '''获取运营活动对应日期,存数字代表开服天配置,需要转化为对应的日期
    @param dateInfo: 运营活动表配置的日期信息, 如果是纯数字代表开服天
    @param openServerDay: 当前开服天
    '''
    if not dateInfo.isdigit():
        return dateInfo
    actionServerDay = int(dateInfo)
    curDateTime = datetime.datetime.today()
    actionDateTime = curDateTime + datetime.timedelta(days=(actionServerDay-openServerDay))
    return "%d-%d-%d" % (actionDateTime.year, actionDateTime.month, actionDateTime.day)
##获得服务器系统时间
# @param 无
# @return 返回值. 时间Data格式
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
@@ -5334,13 +5334,23 @@
#  @param curPlayer: 玩家实例
#  @return: None
def Sync_OpenServerDay(curPlayer):
    serverTime = GameWorld.GetCurrentTime()
    if not serverTime:
        return
    gw = GameWorld.GetGameWorld()
    packData = ChPyNetSendPack.tagOpenServerDay()
    packData.Clear()
    packData.Day = gw.GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_ServerDay)
    packData.IsMixServer = gw.GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_IsMixServer)
    packData.MixDay = gw.GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_MixServerDay)
    packData.OpenServerTime = GameWorld.ChangeTimeNumToStr(gw.GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_InitOpenServerTime))
    packData.OpenWeekday = gw.GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_OpenServerWeekday)
    packData.NowYear = serverTime.year
    packData.NowMonth = serverTime.month
    packData.NowDay = serverTime.day
    packData.NowHour = serverTime.hour
    packData.NowMinute = serverTime.minute
    packData.NowSecond = serverTime.second
    packData.NowMicSecond = serverTime.microsecond
    NetPackCommon.SendFakePack(curPlayer, packData)
    return
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerBossReborn.py
@@ -224,10 +224,11 @@
    ipyDataList = IpyGameDataPY.GetIpyGameDataByCondition("BossReborn", {'TemplateID':templateID}, True)
    if not ipyDataList:
        return
    openServerDay = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_ServerDay) + 1
    actInfo = ChPyNetSendPack.tagMCBossRebornInfo()
    actInfo.Clear()
    actInfo.StartDate = actBossIpyData.GetStartDate()
    actInfo.EndtDate = actBossIpyData.GetEndDate()
    actInfo.StartDate = GameWorld.GetOperationActionDateStr(actBossIpyData.GetStartDate(), openServerDay)
    actInfo.EndtDate = GameWorld.GetOperationActionDateStr(actBossIpyData.GetEndDate(), openServerDay)
    actInfo.ResetType = actBossIpyData.GetResetType()
    actInfo.LimitLV = actBossIpyData.GetLVLimit()
    actInfo.TaskInfo = []
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCostRebate.py
@@ -251,9 +251,10 @@
    if not templateIDList:
        return
    
    openServerDay = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_ServerDay) + 1
    actInfo = ChPyNetSendPack.tagMCCostRebateInfo()
    actInfo.StartDate = ipyData.GetStartDate()
    actInfo.EndtDate = ipyData.GetEndDate()
    actInfo.StartDate = GameWorld.GetOperationActionDateStr(ipyData.GetStartDate(), openServerDay)
    actInfo.EndtDate = GameWorld.GetOperationActionDateStr(ipyData.GetEndDate(), openServerDay)
    actInfo.LimitLV = ipyData.GetLVLimit()
    actInfo.IsDayReset = ipyData.GetIsDayReset()
    actInfo.AwardDayInfo = []
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFlashGiftbag.py
@@ -237,9 +237,10 @@
    # 取玩家APPID,混服使用
    appID = GameWorld.GetPlayerPlatform(curPlayer.GetAccID())
    
    openServerDay = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_ServerDay) + 1
    packInfo = ChPyNetSendPack.tagMCFlashGiftbagInfo()
    packInfo.StartDate = flashGiftbagIpyData.GetStartDate()
    packInfo.EndtDate = flashGiftbagIpyData.GetEndDate()
    packInfo.StartDate = GameWorld.GetOperationActionDateStr(flashGiftbagIpyData.GetStartDate(), openServerDay)
    packInfo.EndtDate = GameWorld.GetOperationActionDateStr(flashGiftbagIpyData.GetEndDate(), openServerDay)
    packInfo.AdvanceMinutes = flashGiftbagIpyData.GetAdvanceMinutes()
    packInfo.ActivityTime = []
    for i, startTime in enumerate(startTimeList):
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerSpringSale.py
@@ -111,9 +111,10 @@
        GameWorld.ErrLog("限时特惠开关时间时分配置错误!cfgID=%s" % cfgID)
        return
    
    openServerDay = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_ServerDay) + 1
    packInfo = ChPyNetSendPack.tagMCSpringSaleInfo()
    packInfo.StartDate = springSaleIpyData.GetStartDate()
    packInfo.EndtDate = springSaleIpyData.GetEndDate()
    packInfo.StartDate = GameWorld.GetOperationActionDateStr(springSaleIpyData.GetStartDate(), openServerDay)
    packInfo.EndtDate = GameWorld.GetOperationActionDateStr(springSaleIpyData.GetEndDate(), openServerDay)
    packInfo.AdvanceMinutes = springSaleIpyData.GetAdvanceMinutes()
    packInfo.ActivityTime = []
    for i, startTime in enumerate(startTimeList):
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
@@ -127,7 +127,7 @@
Def_Notify_Separator = '+'
#通知地图服务器并设置该字典值
Def_Notify_WorldKey_InitOpenServerTime = 'InitOpenServerTime'   # 开服时间
Def_Notify_WorldKey_OpenServerWeekday = 'OpenServerWeekday'     # 开服是周几, 1代表周一
Def_Notify_WorldKey_ServerDay = 'ServerDay'               # 开服天数
Def_Notify_WorldKey_IsMixServer = 'IsMixServer'           # 是否合服服务器
Def_Notify_WorldKey_MixServerDay = 'MixServerDay'         # 合服天数