From 28cf96828011304cd74254017a1af7a0cc8df0be Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期一, 10 九月 2018 10:23:35 +0800
Subject: [PATCH] 3245 【后端】开服限时活动定制; 增加设置开服是星期几的GM命令: SetOpenServerWeekday
---
ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldActionControl.py | 135 ++++++++++---
ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py | 100 ++++++++-
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py | 68 ++++--
ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerEventCounter.py | 1
ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/SetWorldLV.py | 3
ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py | 68 ++++--
ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamily.py | 26 --
ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/ClearOpenServerDay.py | 17 +
ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldProcess.py | 12 +
ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldFamilyWar.py | 36 +++
ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/SetOpenServerWeekday.py | 59 +++++
ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/GetOpenServerDay.py | 14
PySysDB/PySysDBG.h | 36 +++
13 files changed, 428 insertions(+), 147 deletions(-)
diff --git a/PySysDB/PySysDBG.h b/PySysDB/PySysDBG.h
index ac7d27f..dfd6d22 100644
--- a/PySysDB/PySysDBG.h
+++ b/PySysDB/PySysDBG.h
@@ -64,8 +64,20 @@
struct tagDailyAction
{
DWORD _DailyID; //活动ID
- BYTE OpenServerDay; //开服第几天开始开启,0为不限制
- char OpenTime; //开启时间
+ dict OpenTimeDict; //开启时间
+ DWORD Duration; //持续时间, 0为不限制
+ dict NotifyInfo; //广播提示信息
+};
+
+//日常活动表定制表
+
+struct tagDailyActionCustom
+{
+ DWORD ID; //ID
+ BYTE _OpenServerWeek; //开服是周几
+ DWORD _OpenServerDay; //开服第几天
+ BYTE DailyID; //日常活动ID
+ list OpenTimeList; //开启时间列表
DWORD Duration; //持续时间, 0为不限制
dict NotifyInfo; //广播提示信息
};
@@ -76,12 +88,26 @@
{
DWORD _ID; //ID
DWORD DataMapID; //所属的玩法数据地图ID
- BYTE OpenServerWeek; //开服X周后开放
- BYTE OpenServerDay; //开服X天后开放
BYTE StartWeekday; //开始星期
BYTE StartHour; //开始时
BYTE StartMinute; //开始分
- BYTE EndWeekday; //结束星期
+ BYTE EndHour; //结束时
+ BYTE EndMinute; //结束分
+ BYTE CanEnter; //是否可进入副本
+ BYTE StateValue; //状态值
+ dict NotifyInfoDict; //广播提示信息
+};
+
+//副本状态时间定制表
+
+struct tagFBStateTimeCustom
+{
+ DWORD ID; //ID
+ BYTE _OpenServerWeek; //开服是周几
+ DWORD _OpenServerDay; //开服第几天
+ DWORD DataMapID; //所属的玩法数据地图ID
+ BYTE StartHour; //开始时
+ BYTE StartMinute; //开始分
BYTE EndHour; //结束时
BYTE EndMinute; //结束分
BYTE CanEnter; //是否可进入副本
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
index 908d399..2d5268a 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
@@ -311,60 +311,78 @@
#A0 05 同步开服天数 #tagOpenServerDay
class tagOpenServerDay(Structure):
- _pack_ = 1
- _fields_ = [
- ("Cmd", c_ubyte),
- ("SubCmd", c_ubyte),
- ("Day", c_ushort), # 已开服天数,从0开始
- ("IsMixServer", c_ubyte), #是否是合服服务器
- ("MixDay", c_ushort), # 已合服天数,从0开始
- ]
+ 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
def __init__(self):
self.Clear()
- self.Cmd = 0xA0
- self.SubCmd = 0x05
+ self.Head.Cmd = 0xA0
+ self.Head.SubCmd = 0x05
return
- def ReadData(self, stringData, _pos=0, _len=0):
+ def ReadData(self, _lpData, _pos=0, _Len=0):
self.Clear()
- memmove(addressof(self), stringData[_pos:], self.GetLength())
- return _pos + self.GetLength()
+ _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
def Clear(self):
- self.Cmd = 0xA0
- self.SubCmd = 0x05
+ self.Head = tagHead()
+ self.Head.Clear()
+ self.Head.Cmd = 0xA0
+ self.Head.SubCmd = 0x05
self.Day = 0
self.IsMixServer = 0
self.MixDay = 0
+ self.OpenServerTime = ""
return
def GetLength(self):
- return sizeof(tagOpenServerDay)
+ length = 0
+ length += self.Head.GetLength()
+ length += 2
+ length += 1
+ length += 2
+ length += 19
+
+ return length
def GetBuffer(self):
- return string_at(addressof(self), self.GetLength())
+ 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
def OutputString(self):
- DumpString = '''//A0 05 同步开服天数 //tagOpenServerDay:
- Cmd:%s,
- SubCmd:%s,
+ DumpString = '''
+ Head:%s,
Day:%d,
IsMixServer:%d,
- MixDay:%d
+ MixDay:%d,
+ OpenServerTime:%s
'''\
%(
- self.Cmd,
- self.SubCmd,
+ self.Head.OutputString(),
self.Day,
self.IsMixServer,
- self.MixDay
+ self.MixDay,
+ self.OpenServerTime
)
return DumpString
m_NAtagOpenServerDay=tagOpenServerDay()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagOpenServerDay.Cmd,m_NAtagOpenServerDay.SubCmd))] = m_NAtagOpenServerDay
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagOpenServerDay.Head.Cmd,m_NAtagOpenServerDay.Head.SubCmd))] = m_NAtagOpenServerDay
#------------------------------------------------------
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/ClearOpenServerDay.py b/ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/ClearOpenServerDay.py
index 99604a1..3fa96c6 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/ClearOpenServerDay.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/ClearOpenServerDay.py
@@ -30,7 +30,10 @@
import GameWorldMixServerCampaign
import PlayerUniversalGameRec
import GameWorldActionTeHui
+import GameWorldProcess
import GMCommon
+
+import time
#---------------------------------------------------------------------
## 执行逻辑
# @param curPlayer 当前玩家
@@ -57,9 +60,10 @@
GameWorld.SendMapServerMsgEx(ShareDefine.Def_Notify_WorldKey_ServerDay, 0)
GameWorld.SendMapServerMsgEx(ShareDefine.Def_Notify_WorldKey_IsMixServer, 0)
GameWorld.SendMapServerMsgEx(ShareDefine.Def_Notify_WorldKey_MixServerDay, 0)
-
- if curPlayer:
- PlayerEventCounter.Sync_OpenServerDay(curPlayer)
+
+ curTime = int(time.time())
+ PlayerDBGSEvent.SetDBGSTrig_ByKey(PlayerDBGSEvent.Def_InitOpenServerTime, curTime)
+ PlayerDBGSEvent.SetDBGSTrig_ByKey(PlayerDBGSEvent.Def_SetOpenServerTime, curTime)
# 重置数据记录及领奖状态
for campaignType in ShareDefine.Def_Campaign_Type_List:
@@ -98,8 +102,11 @@
GMCommon.ActionControlRefresh(tick)
if curPlayer:
- GameWorld.DebugAnswer(curPlayer, '清除开服天数成功, 当前开服天数:%s, 是否合服:%s, 当前合服天数:%s'%\
- (PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_ServerDay) + 1,
+ PlayerEventCounter.Sync_OpenServerDay(curPlayer)
+ GameWorld.DebugAnswer(curPlayer, '开服时间:%s, 星期%s, 天数:%s 是否合服:%s, 合服天数:%s'%\
+ (GameWorld.ChangeTimeNumToStr(PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_InitOpenServerTime)),
+ GameWorldProcess.GetOpenServerWeekday(),
+ PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_ServerDay) + 1,
PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_IsMixServer),
PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_MixServerDay) + 1))
return
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/GetOpenServerDay.py b/ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/GetOpenServerDay.py
index 5223e63..0f6d517 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/GetOpenServerDay.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/GetOpenServerDay.py
@@ -13,8 +13,9 @@
# @change: "2014-12-01 12:30" hxp 增加合服状态及天数
#
#------------------------------------------------------------------------------
-"""Version = 2014-12-01 12:30"""
+#"""Version = 2014-12-01 12:30"""
#------------------------------------------------------------------------------
+import GameWorldProcess
import PlayerDBGSEvent
import GameWorld
#---------------------------------------------------------------------
@@ -25,10 +26,11 @@
# @return None
# @remarks 函数详细说明.
def OnExec(curPlayer, cmdList):
-
- day = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_ServerDay) + 1
- isMixServer = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_IsMixServer)
- mixServerDay = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_MixServerDay) + 1
- GameWorld.DebugAnswer(curPlayer, '当前开服天数:%s, 是否合服:%s, 当前合服天数:%s' % (day, isMixServer, mixServerDay))
+ GameWorld.DebugAnswer(curPlayer, '开服时间:%s, 星期%s, 天数:%s 是否合服:%s, 合服天数:%s'%\
+ (GameWorld.ChangeTimeNumToStr(PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_InitOpenServerTime)),
+ GameWorldProcess.GetOpenServerWeekday(),
+ PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_ServerDay) + 1,
+ PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_IsMixServer),
+ PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_MixServerDay) + 1))
return
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/SetOpenServerWeekday.py b/ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/SetOpenServerWeekday.py
new file mode 100644
index 0000000..789bdf2
--- /dev/null
+++ b/ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/SetOpenServerWeekday.py
@@ -0,0 +1,59 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#-------------------------------------------------------------------------------
+#
+##@package GM.Commands.SetOpenServerWeekday
+#
+# @todo:设置开服是星期几
+# @author hxp
+# @date 2018-09-10
+# @version 1.0
+#
+# 详细描述: 设置开服是星期几
+#
+#-------------------------------------------------------------------------------
+#"""Version = 2018-09-10 10:00"""
+#-------------------------------------------------------------------------------
+import PlayerDBGSEvent
+import PlayerEventCounter
+import GameWorldProcess
+import GameWorld
+
+import datetime
+import time
+
+#-------------------------------------------------------------------------------
+## 执行逻辑
+# @param curPlayer 当前玩家
+# @param cmdList 参数
+# @return None
+# @remarks 函数详细说明.
+def OnExec(curPlayer, cmdList):
+ if not cmdList or cmdList[0] > 7 or cmdList[0] <= 0:
+ GameWorld.DebugAnswer(curPlayer, "SetOpenServerWeekday 星期X(默认上星期)")
+ GameWorld.DebugAnswer(curPlayer, "注:该命令仅用于设置星期几,对其他功能数据不起作用!如开服天等!")
+ return
+
+ weekday = cmdList[0]
+ curOpenWeekday = GameWorldProcess.GetOpenServerWeekday()
+ if weekday == curOpenWeekday:
+ GameWorld.DebugAnswer(curPlayer, "开服时间已经是星期%s" % weekday)
+ return
+
+ curDateTime = GameWorld.GetServerTime()
+ curWeekday = curDateTime.weekday() + 1
+ diffDays = curWeekday + (7 - weekday)
+ 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.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 96da347..eba6af0 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/SetWorldLV.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/SetWorldLV.py
@@ -31,7 +31,7 @@
def OnExec(curPlayer, cmdList):
if not cmdList:
- initOpenServerTime = PlayerDBGSEvent.GetDBGSTrig_ByKey( PlayerDBGSEvent.Def_InitOpenServerTime)
+ initOpenServerTime = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_InitOpenServerTime)
worldLV = GameWorld.GetGameWorld().GetDictByKey(ShareDefine.Def_Notify_WorldKey_WorldAverageLv)
GameWorld.DebugAnswer(curPlayer, "SetWorldLV 世界等级 可选额外秒")
GameWorld.DebugAnswer(curPlayer, "开服时间: %s" % GameWorld.ChangeTimeNumToStr(initOpenServerTime))
@@ -55,6 +55,7 @@
if extraTime:
PlayerDBGSEvent.SetDBGSTrig_ByKey(PlayerDBGSEvent.Def_WorldLVExtraTime, extraTime)
PlayerDBGSEvent.SetDBGSTrig_ByKey(PlayerDBGSEvent.Def_InitOpenServerTime, initOpenServerTime)
+ PlayerDBGSEvent.SetDBGSTrig_ByKey(PlayerDBGSEvent.Def_SetOpenServerTime, 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/GameWorldLogic/GameWorldActionControl.py b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldActionControl.py
index 0298efb..c003942 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldActionControl.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldActionControl.py
@@ -40,6 +40,7 @@
import PlayerFamilySWRH
import GameWorldBoss
import PlayerFairyCeremony
+import GameWorldProcess
import ChPyNetSendPack
import NetPackCommon
@@ -532,32 +533,52 @@
curTime = int(time.time())
curDateStr = GameWorld.ChangeTimeNumToStr(curTime, ChConfig.TYPE_Time_YmdFormat) # 当天日期
- GameWorld.Log("加载本日日常活动信息: %s, weekDay=%s,openServerDay=%s" % (curDateStr, weekDay, openServerDay))
+ openServerWeekday = GameWorldProcess.GetOpenServerWeekday() # 服务器开服时是星期几
+ GameWorld.Log("加载本日日常活动信息: %s, 当前星期%s,开服第%s天,开服是星期%s" % (curDateStr, weekDay, openServerDay, openServerWeekday))
+
+ customDailyIDList = []
+ dailyTimeInfoList = []
+ customIpyDataList = IpyGameDataPY.GetIpyGameDataListNotLog("DailyActionCustom", openServerWeekday, openServerDay)
+ if customIpyDataList:
+ customIDList = []
+ for customIpyData in customIpyDataList:
+ dataID = customIpyData.GetID()
+ dailyID = customIpyData.GetDailyID()
+ if dailyID not in customDailyIDList:
+ customDailyIDList.append(dailyID)
+ dailyTimeInfoList.append([True, customIpyData.GetOpenTimeList(), customIpyData])
+ customIDList.append(dataID)
+ GameWorld.Log(" 本地定制日常活动条数: %s, 配置表ID列表=%s, 定制活动ID列表=%s" % (len(customIpyDataList), customIDList, customDailyIDList))
ipyDataMgr = IpyGameDataPY.IPY_Data()
dailyActionCount = ipyDataMgr.GetDailyActionCount()
for i in xrange(dailyActionCount):
dailyIpyData = ipyDataMgr.GetDailyActionByIndex(i)
dailyID = dailyIpyData.GetDailyID()
- openServerDayLimit = dailyIpyData.GetOpenServerDay()
- if openServerDay < openServerDayLimit:
- GameWorld.Log(" 不是日常活动开启天数: dailyID=%s,openServerDayLimit=%s" % (dailyID, openServerDayLimit))
+ # 是当天开服天定制活动的不处理常规活动
+ if dailyID in customDailyIDList:
+ GameWorld.Log(" 常规活动ID配置是今天的定制活动ID,不处理!: dailyID=%s" % dailyID)
continue
- openTimeDict = eval(dailyIpyData.GetOpenTime())
+ openTimeDict = dailyIpyData.GetOpenTimeDict()
# 没有时间控制的,代表永久开放
if not openTimeDict:
todayActionInfo.append([dailyID])
- GameWorld.Log(" 增加本日日常活动信息: dailyID=%s" % dailyID)
+ GameWorld.Log(" 增加本日常开日常活动信息: dailyID=%s" % dailyID)
continue
#如果星期key中存在 "0" 代表每日都开启
if "0" not in openTimeDict and weekDay not in openTimeDict:
GameWorld.Log(" 不是日常活动开启星期: dailyID=%s,openWeekLimit=%s" % (dailyID, openTimeDict.keys()))
continue
+ openTimeList = openTimeDict["0"] if "0" in openTimeDict else openTimeDict[weekDay]
+ dailyTimeInfoList.append([False, openTimeList, dailyIpyData])
- notifyInfoDict = dailyIpyData.GetNotifyInfo()
+ GameWorld.Log(" -----------------------")
+ for isCustom, openTimeList, ipyData in dailyTimeInfoList:
+ dailyID = ipyData.GetDailyID()
+ notifyInfoDict = ipyData.GetNotifyInfo()
openList = [] # [(时,分), ...]
overList = [] # [(时,分), ...]
@@ -565,7 +586,6 @@
notifyDict = {} # {(时,分):[notifyKey, [参数]], ...}
OpenState = 1 # 定义开启状态为1
- openTimeList = openTimeDict["0"] if "0" in openTimeDict else openTimeDict[weekDay]
for hour, minute in openTimeList:
openTimeStr = "%s %02d:%02d:%02d" % (curDateStr, hour, minute, 0)
@@ -574,7 +594,7 @@
openList.append((openDateTime.hour, openDateTime.minute))
# 精确关闭时间
- overDateTime = openDateTime + datetime.timedelta(minutes=dailyIpyData.GetDuration())
+ overDateTime = openDateTime + datetime.timedelta(minutes=ipyData.GetDuration())
overList.append((overDateTime.hour, overDateTime.minute))
# goon 开启状态
@@ -591,8 +611,8 @@
notifyDict[(notifyDateTime.hour, notifyDateTime.minute)] = notifyInfo
todayActionInfo.append([dailyID, openList, overList, goonStateDict, notifyDict])
- GameWorld.Log(" 增加本日日常活动信息: dailyID=%s,openList=%s,overList=%s,goonStateDict=%s,notifyDict=%s"
- % (dailyID, openList, overList, goonStateDict, notifyDict))
+ GameWorld.Log(" 增加本日日常活动信息: isCustom=%s,dailyID=%s,openList=%s,overList=%s,goonStateDict=%s,notifyDict=%s"
+ % (int(isCustom), dailyID, openList, overList, goonStateDict, notifyDict))
TodayDailyActionInfo = IpyGameDataPY.SetConfigEx(key, [openServerDay, todayActionInfo])
GameWorld.Log("本日日常活动信息加载完毕!")
@@ -675,8 +695,8 @@
## -------------------------------------------------------------------------------------------------
def __GetFBStateEndTimeNotResetIDList():
key = "FBStateEndTimeNotReset" # 结束时间状态不重置为0的数据ID
- FBStateEndTimeNotResetIDList = IpyGameDataPY.GetConfigEx(key)
- if FBStateEndTimeNotResetIDList == None:
+ notResetIDList = IpyGameDataPY.GetConfigEx(key)
+ if notResetIDList == None:
mapStateTimeDict = {}
ipyDataMgr = IpyGameDataPY.IPY_Data()
for i in xrange(ipyDataMgr.GetFBStateTimeCount()):
@@ -684,7 +704,7 @@
dataID = fbStateTimeIpyData.GetID()
dataMapID = fbStateTimeIpyData.GetDataMapID()
startWeekDay, startHour, startMinute = fbStateTimeIpyData.GetStartWeekday(), fbStateTimeIpyData.GetStartHour(), fbStateTimeIpyData.GetStartMinute()
- endWeekDay, endHour, endMinute = fbStateTimeIpyData.GetEndWeekday(), fbStateTimeIpyData.GetEndHour(), fbStateTimeIpyData.GetEndMinute()
+ endWeekDay, endHour, endMinute = startWeekDay, fbStateTimeIpyData.GetEndHour(), fbStateTimeIpyData.GetEndMinute()
startTimeList, endTimeDict = mapStateTimeDict.get(dataMapID, [[], {}])
startTimeList.append([startWeekDay, startHour, startMinute])
endTimeDict[dataID] = [endWeekDay, endHour, endMinute]
@@ -697,42 +717,86 @@
# 结束时间属于某一条的开启时间,则不重置,具体状态由另一条决定
if endTime in startTimeList:
FBStateEndTimeNotResetIDList.append(dataID)
- FBStateEndTimeNotResetIDList = IpyGameDataPY.SetConfigEx(key, FBStateEndTimeNotResetIDList)
- GameWorld.Log("加载副本状态结束时间不需要重置状态值的数据ID列表: %s" % FBStateEndTimeNotResetIDList)
- return FBStateEndTimeNotResetIDList
+ FBStateEndTimeNotResetIDList.sort()
+
+ # 加载定制表
+ customStateTimeDict = {}
+ for i in xrange(ipyDataMgr.GetFBStateTimeCustomCount()):
+ customIpyData = ipyDataMgr.GetFBStateTimeCustomByIndex(i)
+ dataID = customIpyData.GetID()
+ dataMapID = customIpyData.GetDataMapID()
+ openWeek, openDay = customIpyData.GetOpenServerWeek(), customIpyData.GetOpenServerDay()
+ startHour, startMinute = customIpyData.GetStartHour(), customIpyData.GetStartMinute()
+ endHour, endMinute = customIpyData.GetEndHour(), customIpyData.GetEndMinute()
+ startTimeList, endTimeDict = customStateTimeDict.get(dataMapID, [[], {}])
+ startTimeList.append([openWeek, openDay, startHour, startMinute])
+ endTimeDict[dataID] = [openWeek, openDay, endHour, endMinute]
+ customStateTimeDict[dataMapID] = [startTimeList, endTimeDict]
+
+ FBStateEndTimeNotResetCustomIDList = []
+ for dataMapID, timeInfo in customStateTimeDict.items():
+ startTimeList, endTimeDict = timeInfo
+ for dataID, endTime in endTimeDict.items():
+ # 结束时间属于某一条的开启时间,则不重置,具体状态由另一条决定
+ if endTime in startTimeList:
+ FBStateEndTimeNotResetCustomIDList.append(dataID)
+ FBStateEndTimeNotResetCustomIDList.sort()
+
+ notResetIDList = IpyGameDataPY.SetConfigEx(key, [FBStateEndTimeNotResetIDList, FBStateEndTimeNotResetCustomIDList])
+ GameWorld.Log("加载副本状态结束时间不需要重置状态值的数据ID列表:")
+ GameWorld.Log(" 不需要重置的常规ID: %s" % FBStateEndTimeNotResetIDList)
+ GameWorld.Log(" 不需要重置的定制ID: %s" % FBStateEndTimeNotResetCustomIDList)
+ return notResetIDList
def Dispose_FBStateTime():
## 副本状态时间表状态处理, 支持 goon作用,开关服状态不受影响,服务器重新启动会自动变更为所有时间段的状态值
- FBStateEndTimeNotResetIDList = __GetFBStateEndTimeNotResetIDList()
- openServerWeek = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_ServerWeek) + 1
+ FBStateEndTimeNotResetIDList, FBStateEndTimeNotResetCustomIDList = __GetFBStateEndTimeNotResetIDList()
openServerDay = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_ServerDay) + 1
curDateTime = GameWorld.GetServerTime()
curWeekDay, curHour, curMinute = curDateTime.weekday() + 1, curDateTime.hour, curDateTime.minute
curTimeWHM = curWeekDay * 10000 + curHour * 100 + curMinute
- GameWorld.DebugLog("副本状态时间表状态处理...openServerWeek=%s,openServerDay=%s,curWeekDay=%s,curHour=%s,curMinute=%s,FBStateEndTimeNotResetIDList=%s"
- % (openServerWeek, openServerDay, curWeekDay, curHour, curMinute, FBStateEndTimeNotResetIDList))
+ openServerWeekday = GameWorldProcess.GetOpenServerWeekday() # 服务器开服时是星期几
+ GameWorld.DebugLog("副本状态时间表状态处理...开服是星期%s,开服第%s天, 当前星期%s,%s点%s分"
+ % (openServerWeekday, openServerDay, curWeekDay, curHour, curMinute))
+ GameWorld.DebugLog(" FBStateEndTimeNotResetIDList=%s" % (FBStateEndTimeNotResetIDList))
+ GameWorld.DebugLog(" FBStateEndTimeNotResetCustomIDList=%s" % (FBStateEndTimeNotResetCustomIDList))
gameWorld = GameWorld.GetGameWorld()
ipyDataMgr = IpyGameDataPY.IPY_Data()
+
+ customMapIDList = []
+ fbStateTimeInfoList = []
+ customIpyDataList = IpyGameDataPY.GetIpyGameDataListNotLog("FBStateTimeCustom", openServerWeekday, openServerDay)
+ if customIpyDataList:
+ customIDList = []
+ for customIpyData in customIpyDataList:
+ dataID = customIpyData.GetID()
+ dataMapID = customIpyData.GetDataMapID()
+ if dataMapID not in customMapIDList:
+ customMapIDList.append(dataMapID)
+ isCustom, startWeekDay, endWeekDay = True, curWeekDay, curWeekDay
+ fbStateTimeInfoList.append([isCustom, startWeekDay, endWeekDay, customIpyData])
+ customIDList.append(dataID)
+ GameWorld.DebugLog(" 定制副本活动条数: %s, 配置表ID列表=%s" % (len(customIpyDataList), customIDList))
+
for i in xrange(ipyDataMgr.GetFBStateTimeCount()):
fbStateTimeIpyData = ipyDataMgr.GetFBStateTimeByIndex(i)
dataID = fbStateTimeIpyData.GetID()
dataMapID = fbStateTimeIpyData.GetDataMapID()
- openServerWeekLimit = fbStateTimeIpyData.GetOpenServerWeek()
- openServerDayLimit = fbStateTimeIpyData.GetOpenServerDay()
-
- if openServerWeek <= openServerWeekLimit:
- #GameWorld.DebugLog(" 不是副本状态开启周: i=%s,dataMapID=%s,openServerWeekLimit=%s" % (i, dataMapID, openServerWeekLimit))
+ # 是当天开服天定制活动的不处理常规活动
+ if dataMapID in customMapIDList:
continue
+ isCustom, startWeekDay, endWeekDay = False, fbStateTimeIpyData.GetStartWeekday(), fbStateTimeIpyData.GetStartWeekday()
+ fbStateTimeInfoList.append([isCustom, startWeekDay, endWeekDay, fbStateTimeIpyData])
- if openServerDay <= openServerDayLimit:
- #GameWorld.DebugLog(" 不是副本状态开启天数: i=%s,dataMapID=%s,openServerDayLimit=%s" % (i, dataMapID, openServerDayLimit))
- continue
+ for isCustom, startWeekDay, endWeekDay, ipyData in fbStateTimeInfoList:
+ dataID = ipyData.GetID()
+ dataMapID = ipyData.GetDataMapID()
- startWeekDay, startHour, startMinute = fbStateTimeIpyData.GetStartWeekday(), fbStateTimeIpyData.GetStartHour(), fbStateTimeIpyData.GetStartMinute()
- endWeekDay, endHour, endMinute = fbStateTimeIpyData.GetEndWeekday(), fbStateTimeIpyData.GetEndHour(), fbStateTimeIpyData.GetEndMinute()
+ startHour, startMinute = ipyData.GetStartHour(), ipyData.GetStartMinute()
+ endHour, endMinute = ipyData.GetEndHour(), ipyData.GetEndMinute()
# 星期配置0代表每天
if startWeekDay == 0:
startWeekDay = curWeekDay
@@ -743,7 +807,7 @@
#GameWorld.DebugLog(" ID=%s,dataMapID=%s,curTimeWHM=%s,startTimeWHM=%s,endTimeWHM=%s" % (dataID, dataMapID, curTimeWHM, startTimeWHM, endTimeWHM))
# 全服广播key分钟差值对比时间为开始时间, 支持正负时间差
- notifyInfoDict = fbStateTimeIpyData.GetNotifyInfoDict()
+ notifyInfoDict = ipyData.GetNotifyInfoDict()
if notifyInfoDict:
startDateTime = curDateTime + datetime.timedelta(days=(startWeekDay - curWeekDay))
startDateTime = datetime.datetime(startDateTime.year, startDateTime.month, startDateTime.day, startHour, startMinute, 0)
@@ -763,7 +827,8 @@
#GameWorld.DebugLog(" 当前是开始时间!")
# 是结束时间
elif curTimeWHM == endTimeWHM:
- isReset = dataID not in FBStateEndTimeNotResetIDList
+ if (isCustom and dataID not in FBStateEndTimeNotResetCustomIDList) or (not isCustom and dataID not in FBStateEndTimeNotResetIDList):
+ isReset = True
#GameWorld.DebugLog(" 当前是结束时间! isReset=%s,FBStateEndTimeNotResetIDList=%s" % (isReset, FBStateEndTimeNotResetIDList))
# 结束时间是下周
elif endTimeWHM and endTimeWHM <= startTimeWHM:
@@ -777,8 +842,8 @@
updCanEnter = 0
updStateValue = 0
elif isUpdate:
- updCanEnter = fbStateTimeIpyData.GetCanEnter()
- updStateValue = fbStateTimeIpyData.GetStateValue()
+ updCanEnter = ipyData.GetCanEnter()
+ updStateValue = ipyData.GetStateValue()
else:
#GameWorld.DebugLog(" 当前时间副本状态不变!")
continue
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldFamilyWar.py b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldFamilyWar.py
index 3bfd634..d5a9976 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldFamilyWar.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldFamilyWar.py
@@ -223,7 +223,7 @@
if familyWarRank:
GameWorld.Log("解散仙盟,触发更新仙盟联赛排名: delFamilyID=%s,familyWarRank=%s" % (familyID, familyWarRank))
- PlayerFamily.UpdFamilyWarRank()
+ UpdFamilyWarRank()
# 补发未分配的连胜奖励
AllotWinRewardBySystem(GetFamilyWarChampionRecData(), True)
@@ -294,7 +294,9 @@
# 下周分组定级
elif stateValue == FamilyWarState_NextWeekGroupRank:
- DoLogicFamilyWar_NextWeekGroupRank()
+ pass
+ #废弃该阶段逻辑
+ #DoLogicFamilyWar_NextWeekGroupRank()
else:
GameWorld.ErrLog("不存在该仙盟联赛状态!stateValue=%s" % stateValue)
@@ -738,6 +740,34 @@
PlayerFamily.UpdFamilyWarRank()
return
+def UpdFamilyWarRank():
+ '''更新仙盟联赛排名
+ 注意:该逻辑在仙盟联赛周期中不可执行,仅在下周分组定级状态下可更新,由程序控制,在活动结束后结算调用
+ 仙盟联赛新一周期开始时、仙盟解散时 会触发该逻辑
+ '''
+ #gameWorld = GameWorld.GetGameWorld()
+ #state = gameWorld.GetDictByKey(ShareDefine.Def_Notify_WorldKey_FBFuncState % ChConfig.Def_FBMapID_FamilyWar)
+ #if state != GameWorldFamilyWar.FamilyWarState_NextWeekGroupRank:
+ # GameWorld.DebugLog("非下周分组定级阶段不可更新仙盟联赛排名!")
+ # return
+
+ GameWorld.Log("=== 更新仙盟联赛排名 ===")
+
+ familyMgr = GameWorld.GetFamilyManager()
+ sortFamilyIDList = PlayerFamily.GetSortFamilyIDList()
+ for rank, familyID in enumerate(sortFamilyIDList, 1):
+ family = familyMgr.FindFamily(familyID)
+ if not family:
+ continue
+ curRank = PlayerFamily.GetFamilyWarRank(family)
+ if not curRank:
+ break
+ if curRank != rank:
+ PlayerFamily.SetFamilyWarRank(family, rank)
+ GameWorld.Log(" 更新仙盟联赛仙盟排名: familyID=%s,curRank=%s,updRank=%s" % (family.GetID(), curRank, rank))
+
+ return
+
def __DoLogicFamilyWarAllOver():
''' 仙盟赛全部比赛结束后逻辑
非最高级别组: 第一名晋级
@@ -864,6 +894,8 @@
PlayerDBGSEvent.SetDBGSTrig_ByKey(PlayerDBGSEvent.Def_FamilyWar_Round, 0) # 重置对战轮次
PlayerDBGSEvent.SetDBGSTrig_ByKey(PlayerDBGSEvent.Def_FamilyWar_AllOver, 1) # 设置已经处理过总结算
+
+ UpdFamilyWarRank() # 改为比赛结束后默认更新联赛排名
return
def UpdFamilyWarChampion(championFamilyID):
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldProcess.py b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldProcess.py
index 175d242..2a47ecf 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldProcess.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldProcess.py
@@ -1225,10 +1225,10 @@
#事件汇报初始化
EventReport.InitDllAppID()
- initOpenServerTime = PlayerDBGSEvent.GetDBGSTrig_ByKey( PlayerDBGSEvent.Def_InitOpenServerTime)
+ initOpenServerTime = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_InitOpenServerTime)
if initOpenServerTime <= 0:
#记录首次开发时间(现实时间戳)
- PlayerDBGSEvent.SetDBGSTrig_ByKey(PlayerDBGSEvent.Def_InitOpenServerTime , int(time.time()))
+ PlayerDBGSEvent.SetDBGSTrig_ByKey(PlayerDBGSEvent.Def_InitOpenServerTime, int(time.time()))
#ReloadModule.RefreshModuleFileCMTime(True)
#合服首次启动加载处理
__DoMixServerInit()
@@ -1325,6 +1325,14 @@
PlayerDBGSEvent.SetDBGSTrig_ByKey(PlayerDBGSEvent.Def_InitOpenServerTime, setOpenServerTime)
return
+def GetOpenServerWeekday():
+ # 服务器开服时是星期几
+ openServerTime = PlayerDBGSEvent.GetDBGSTrig_ByKey( PlayerDBGSEvent.Def_InitOpenServerTime)
+ if not openServerTime:
+ return 0
+ openDatetime = GameWorld.ChangeTimeNumToDatetime(openServerTime)
+ return openDatetime.weekday() + 1
+
## 所有地图服务器初始化成功后(封包注册)
# @param tick 当前时间
# @return None
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py b/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py
index 7bd60ad..75e262c 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py
@@ -80,8 +80,17 @@
"DailyAction":(
("DWORD", "DailyID", 1),
- ("BYTE", "OpenServerDay", 0),
- ("char", "OpenTime", 0),
+ ("dict", "OpenTimeDict", 0),
+ ("DWORD", "Duration", 0),
+ ("dict", "NotifyInfo", 0),
+ ),
+
+ "DailyActionCustom":(
+ ("DWORD", "ID", 0),
+ ("BYTE", "OpenServerWeek", 1),
+ ("DWORD", "OpenServerDay", 1),
+ ("BYTE", "DailyID", 0),
+ ("list", "OpenTimeList", 0),
("DWORD", "Duration", 0),
("dict", "NotifyInfo", 0),
),
@@ -89,12 +98,23 @@
"FBStateTime":(
("DWORD", "ID", 1),
("DWORD", "DataMapID", 0),
- ("BYTE", "OpenServerWeek", 0),
- ("BYTE", "OpenServerDay", 0),
("BYTE", "StartWeekday", 0),
("BYTE", "StartHour", 0),
("BYTE", "StartMinute", 0),
- ("BYTE", "EndWeekday", 0),
+ ("BYTE", "EndHour", 0),
+ ("BYTE", "EndMinute", 0),
+ ("BYTE", "CanEnter", 0),
+ ("BYTE", "StateValue", 0),
+ ("dict", "NotifyInfoDict", 0),
+ ),
+
+ "FBStateTimeCustom":(
+ ("DWORD", "ID", 0),
+ ("BYTE", "OpenServerWeek", 1),
+ ("DWORD", "OpenServerDay", 1),
+ ("DWORD", "DataMapID", 0),
+ ("BYTE", "StartHour", 0),
+ ("BYTE", "StartMinute", 0),
("BYTE", "EndHour", 0),
("BYTE", "EndMinute", 0),
("BYTE", "CanEnter", 0),
@@ -363,15 +383,34 @@
def __init__(self):
self.DailyID = 0
- self.OpenServerDay = 0
- self.OpenTime = ""
+ self.OpenTimeDict = {}
self.Duration = 0
self.NotifyInfo = {}
return
def GetDailyID(self): return self.DailyID # 活动ID
- def GetOpenServerDay(self): return self.OpenServerDay # 开服第几天开始开启,0为不限制
- def GetOpenTime(self): return self.OpenTime # 开启时间
+ def GetOpenTimeDict(self): return self.OpenTimeDict # 开启时间
+ def GetDuration(self): return self.Duration # 持续时间, 0为不限制
+ def GetNotifyInfo(self): return self.NotifyInfo # 广播提示信息
+
+# 日常活动表定制表
+class IPY_DailyActionCustom():
+
+ def __init__(self):
+ self.ID = 0
+ self.OpenServerWeek = 0
+ self.OpenServerDay = 0
+ self.DailyID = 0
+ self.OpenTimeList = []
+ self.Duration = 0
+ self.NotifyInfo = {}
+ return
+
+ def GetID(self): return self.ID # ID
+ def GetOpenServerWeek(self): return self.OpenServerWeek # 开服是周几
+ def GetOpenServerDay(self): return self.OpenServerDay # 开服第几天
+ def GetDailyID(self): return self.DailyID # 日常活动ID
+ def GetOpenTimeList(self): return self.OpenTimeList # 开启时间列表
def GetDuration(self): return self.Duration # 持续时间, 0为不限制
def GetNotifyInfo(self): return self.NotifyInfo # 广播提示信息
@@ -381,12 +420,9 @@
def __init__(self):
self.ID = 0
self.DataMapID = 0
- self.OpenServerWeek = 0
- self.OpenServerDay = 0
self.StartWeekday = 0
self.StartHour = 0
self.StartMinute = 0
- self.EndWeekday = 0
self.EndHour = 0
self.EndMinute = 0
self.CanEnter = 0
@@ -396,12 +432,38 @@
def GetID(self): return self.ID # ID
def GetDataMapID(self): return self.DataMapID # 所属的玩法数据地图ID
- def GetOpenServerWeek(self): return self.OpenServerWeek # 开服X周后开放
- def GetOpenServerDay(self): return self.OpenServerDay # 开服X天后开放
def GetStartWeekday(self): return self.StartWeekday # 开始星期
def GetStartHour(self): return self.StartHour # 开始时
def GetStartMinute(self): return self.StartMinute # 开始分
- def GetEndWeekday(self): return self.EndWeekday # 结束星期
+ def GetEndHour(self): return self.EndHour # 结束时
+ def GetEndMinute(self): return self.EndMinute # 结束分
+ def GetCanEnter(self): return self.CanEnter # 是否可进入副本
+ def GetStateValue(self): return self.StateValue # 状态值
+ def GetNotifyInfoDict(self): return self.NotifyInfoDict # 广播提示信息
+
+# 副本状态时间定制表
+class IPY_FBStateTimeCustom():
+
+ def __init__(self):
+ self.ID = 0
+ self.OpenServerWeek = 0
+ self.OpenServerDay = 0
+ self.DataMapID = 0
+ self.StartHour = 0
+ self.StartMinute = 0
+ self.EndHour = 0
+ self.EndMinute = 0
+ self.CanEnter = 0
+ self.StateValue = 0
+ self.NotifyInfoDict = {}
+ return
+
+ def GetID(self): return self.ID # ID
+ def GetOpenServerWeek(self): return self.OpenServerWeek # 开服是周几
+ def GetOpenServerDay(self): return self.OpenServerDay # 开服第几天
+ def GetDataMapID(self): return self.DataMapID # 所属的玩法数据地图ID
+ def GetStartHour(self): return self.StartHour # 开始时
+ def GetStartMinute(self): return self.StartMinute # 开始分
def GetEndHour(self): return self.EndHour # 结束时
def GetEndMinute(self): return self.EndMinute # 结束分
def GetCanEnter(self): return self.CanEnter # 是否可进入副本
@@ -774,8 +836,12 @@
self.ipyActionControlLen = len(self.ipyActionControlCache)
self.ipyDailyActionCache = self.__LoadFileData("DailyAction", IPY_DailyAction)
self.ipyDailyActionLen = len(self.ipyDailyActionCache)
+ self.ipyDailyActionCustomCache = self.__LoadFileData("DailyActionCustom", IPY_DailyActionCustom)
+ self.ipyDailyActionCustomLen = len(self.ipyDailyActionCustomCache)
self.ipyFBStateTimeCache = self.__LoadFileData("FBStateTime", IPY_FBStateTime)
self.ipyFBStateTimeLen = len(self.ipyFBStateTimeCache)
+ self.ipyFBStateTimeCustomCache = self.__LoadFileData("FBStateTimeCustom", IPY_FBStateTimeCustom)
+ self.ipyFBStateTimeCustomLen = len(self.ipyFBStateTimeCustomCache)
self.ipyFBLineCache = self.__LoadFileData("FBLine", IPY_FBLine)
self.ipyFBLineLen = len(self.ipyFBLineCache)
self.ipyChinMapCache = self.__LoadFileData("ChinMap", IPY_ChinMap)
@@ -986,8 +1052,12 @@
def GetActionControlByIndex(self, index): return self.ipyActionControlCache[index]
def GetDailyActionCount(self): return self.ipyDailyActionLen
def GetDailyActionByIndex(self, index): return self.ipyDailyActionCache[index]
+ def GetDailyActionCustomCount(self): return self.ipyDailyActionCustomLen
+ def GetDailyActionCustomByIndex(self, index): return self.ipyDailyActionCustomCache[index]
def GetFBStateTimeCount(self): return self.ipyFBStateTimeLen
def GetFBStateTimeByIndex(self, index): return self.ipyFBStateTimeCache[index]
+ def GetFBStateTimeCustomCount(self): return self.ipyFBStateTimeCustomLen
+ def GetFBStateTimeCustomByIndex(self, index): return self.ipyFBStateTimeCustomCache[index]
def GetFBLineCount(self): return self.ipyFBLineLen
def GetFBLineByIndex(self, index): return self.ipyFBLineCache[index]
def GetChinMapCount(self): return self.ipyChinMapLen
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerEventCounter.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerEventCounter.py
index 7479df5..91b793c 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerEventCounter.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerEventCounter.py
@@ -293,6 +293,7 @@
packData.Day = openDay
packData.IsMixServer = isMixServer
packData.MixDay = mixServerDay
+ packData.OpenServerTime = GameWorld.ChangeTimeNumToStr(PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_InitOpenServerTime))
NetPackCommon.SendFakePack(curPlayer, packData)
return
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamily.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamily.py
index 774b981..50c2fcb 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamily.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamily.py
@@ -3345,32 +3345,6 @@
return 0
-def UpdFamilyWarRank():
- '''更新仙盟联赛排名
- 注意:该逻辑在仙盟联赛周期中不可执行,仅在下周分组定级状态下可更新
- 仙盟联赛新一周期开始时、仙盟解散时 会触发该逻辑
- '''
- gameWorld = GameWorld.GetGameWorld()
- state = gameWorld.GetDictByKey(ShareDefine.Def_Notify_WorldKey_FBFuncState % ChConfig.Def_FBMapID_FamilyWar)
- if state != GameWorldFamilyWar.FamilyWarState_NextWeekGroupRank:
- GameWorld.DebugLog("非下周分组定级阶段不可更新仙盟联赛排名!")
- return
-
- familyMgr = GameWorld.GetFamilyManager()
- sortFamilyIDList = GetSortFamilyIDList()
- for rank, familyID in enumerate(sortFamilyIDList, 1):
- family = familyMgr.FindFamily(familyID)
- if not family:
- continue
- curRank = GetFamilyWarRank(family)
- if not curRank:
- break
- if curRank != rank:
- SetFamilyWarRank(family, rank)
- GameWorld.Log("更新仙盟联赛仙盟排名: familyID=%s,rank=%s" % (family.GetID(), rank))
-
- return
-
#// A4 11 一键申请入盟 #tagCGOneKeyJoinFamily
#
#struct tagCGOneKeyJoinFamily
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
index 908d399..2d5268a 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
@@ -311,60 +311,78 @@
#A0 05 同步开服天数 #tagOpenServerDay
class tagOpenServerDay(Structure):
- _pack_ = 1
- _fields_ = [
- ("Cmd", c_ubyte),
- ("SubCmd", c_ubyte),
- ("Day", c_ushort), # 已开服天数,从0开始
- ("IsMixServer", c_ubyte), #是否是合服服务器
- ("MixDay", c_ushort), # 已合服天数,从0开始
- ]
+ 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
def __init__(self):
self.Clear()
- self.Cmd = 0xA0
- self.SubCmd = 0x05
+ self.Head.Cmd = 0xA0
+ self.Head.SubCmd = 0x05
return
- def ReadData(self, stringData, _pos=0, _len=0):
+ def ReadData(self, _lpData, _pos=0, _Len=0):
self.Clear()
- memmove(addressof(self), stringData[_pos:], self.GetLength())
- return _pos + self.GetLength()
+ _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
def Clear(self):
- self.Cmd = 0xA0
- self.SubCmd = 0x05
+ self.Head = tagHead()
+ self.Head.Clear()
+ self.Head.Cmd = 0xA0
+ self.Head.SubCmd = 0x05
self.Day = 0
self.IsMixServer = 0
self.MixDay = 0
+ self.OpenServerTime = ""
return
def GetLength(self):
- return sizeof(tagOpenServerDay)
+ length = 0
+ length += self.Head.GetLength()
+ length += 2
+ length += 1
+ length += 2
+ length += 19
+
+ return length
def GetBuffer(self):
- return string_at(addressof(self), self.GetLength())
+ 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
def OutputString(self):
- DumpString = '''//A0 05 同步开服天数 //tagOpenServerDay:
- Cmd:%s,
- SubCmd:%s,
+ DumpString = '''
+ Head:%s,
Day:%d,
IsMixServer:%d,
- MixDay:%d
+ MixDay:%d,
+ OpenServerTime:%s
'''\
%(
- self.Cmd,
- self.SubCmd,
+ self.Head.OutputString(),
self.Day,
self.IsMixServer,
- self.MixDay
+ self.MixDay,
+ self.OpenServerTime
)
return DumpString
m_NAtagOpenServerDay=tagOpenServerDay()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagOpenServerDay.Cmd,m_NAtagOpenServerDay.SubCmd))] = m_NAtagOpenServerDay
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagOpenServerDay.Head.Cmd,m_NAtagOpenServerDay.Head.SubCmd))] = m_NAtagOpenServerDay
#------------------------------------------------------
--
Gitblit v1.8.0