From 78eba407c2b7d68096500e9013add9141b13f52c Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期五, 21 九月 2018 23:37:11 +0800
Subject: [PATCH] 3798 【后端】运营活动时间优化,开服日常限时活动定制时间优化
---
ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldActionControl.py | 10
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py | 2
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py | 96 +++++++-----
ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerEventCounter.py | 13 +
ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/SetWorldLV.py | 3
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFlashGiftbag.py | 5
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerSpringSale.py | 5
ServerPython/CoreServerGroup/GameServer/Script/Player/ChPlayer.py | 13 -
ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py | 96 +++++++-----
ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerDBGSEvent.py | 25 +++
ServerPython/CoreServerGroup/GameServer/Script/GameWorld.py | 13 +
ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/ClearOpenServerDay.py | 8
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCostRebate.py | 5
ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldProcess.py | 25 +--
ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFairyCeremony.py | 5
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py | 12 +
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorld.py | 13 +
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerBossReborn.py | 5
ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/SetOpenServerWeekday.py | 8
ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/GetOpenServerDay.py | 5
ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py | 2
21 files changed, 225 insertions(+), 144 deletions(-)
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
index a8171fe..437b971 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
+++ b/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
#------------------------------------------------------
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/ClearOpenServerDay.py b/ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/ClearOpenServerDay.py
index 3fa96c6..76e9dda 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/ClearOpenServerDay.py
+++ b/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))
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/GetOpenServerDay.py b/ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/GetOpenServerDay.py
index 0f6d517..1325f03 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/GetOpenServerDay.py
+++ b/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))
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/SetOpenServerWeekday.py b/ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/SetOpenServerWeekday.py
index 789bdf2..e077d5f 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/SetOpenServerWeekday.py
+++ b/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
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/SetWorldLV.py b/ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/SetWorldLV.py
index eba6af0..9f84d3e 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/SetWorldLV.py
+++ b/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)
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GameWorld.py b/ServerPython/CoreServerGroup/GameServer/Script/GameWorld.py
index 4742007..6992c9c 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/GameWorld.py
+++ b/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 系统时间
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldActionControl.py b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldActionControl.py
index 07dd7b7..ce5664f 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldActionControl.py
+++ b/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:
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldProcess.py b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldProcess.py
index 7f6f5b1..036a7cb 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldProcess.py
+++ b/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)
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/ChPlayer.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/ChPlayer.py
index 3222e6e..e6e8440 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/Player/ChPlayer.py
+++ b/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
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerDBGSEvent.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerDBGSEvent.py
index 82917dc..a75a629 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerDBGSEvent.py
+++ b/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
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerEventCounter.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerEventCounter.py
index 91b793c..b0386b1 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerEventCounter.py
+++ b/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
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFairyCeremony.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFairyCeremony.py
index 1495e8a..1bd55cf 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFairyCeremony.py
+++ b/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:
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py b/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
index 1306ea2..caec547 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
+++ b/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' # 合服天数
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
index a8171fe..437b971 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
+++ b/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
#------------------------------------------------------
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorld.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorld.py
index d6faac5..3498980 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorld.py
+++ b/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格式
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 cf37216..eda9b03 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
+++ b/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
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerBossReborn.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerBossReborn.py
index fb1100f..12184dd 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerBossReborn.py
+++ b/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 = []
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCostRebate.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCostRebate.py
index a393361..b5ee561 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCostRebate.py
+++ b/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 = []
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFlashGiftbag.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFlashGiftbag.py
index 92242fe..87e8612 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFlashGiftbag.py
+++ b/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):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerSpringSale.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerSpringSale.py
index d7bee14..374e2d7 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerSpringSale.py
+++ b/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):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
index 1306ea2..caec547 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
+++ b/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' # 合服天数
--
Gitblit v1.8.0