3245 【后端】开服限时活动定制;
增加设置开服是星期几的GM命令: SetOpenServerWeekday
| | |
| | | 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; //广播提示信息
|
| | | };
|
| | |
| | | {
|
| | | 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; //是否可进入副本
|
| | |
| | | #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
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | |
| | | import GameWorldMixServerCampaign
|
| | | import PlayerUniversalGameRec
|
| | | import GameWorldActionTeHui
|
| | | import GameWorldProcess
|
| | | import GMCommon
|
| | |
|
| | | import time
|
| | | #---------------------------------------------------------------------
|
| | | ## 执行逻辑
|
| | | # @param curPlayer 当前玩家
|
| | |
| | | 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:
|
| | |
| | | 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
|
| | |
| | | # @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
|
| | | #---------------------------------------------------------------------
|
| | |
| | | # @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
|
| | |
|
New file |
| | |
| | | #!/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
|
| | |
|
| | |
|
| | |
|
| | |
| | | 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))
|
| | |
| | | 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)
|
| | |
| | | import PlayerFamilySWRH
|
| | | import GameWorldBoss
|
| | | import PlayerFairyCeremony
|
| | | import GameWorldProcess
|
| | | import ChPyNetSendPack
|
| | | import NetPackCommon
|
| | |
|
| | |
| | | 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 = [] # [(时,分), ...]
|
| | |
| | | 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)
|
| | |
|
| | |
| | | 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 开启状态
|
| | |
| | | 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("本日日常活动信息加载完毕!")
|
| | |
| | | ## -------------------------------------------------------------------------------------------------
|
| | | 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()):
|
| | |
| | | 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]
|
| | |
| | | # 结束时间属于某一条的开启时间,则不重置,具体状态由另一条决定
|
| | | 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
|
| | |
| | | #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)
|
| | |
| | | #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:
|
| | |
| | | updCanEnter = 0
|
| | | updStateValue = 0
|
| | | elif isUpdate:
|
| | | updCanEnter = fbStateTimeIpyData.GetCanEnter()
|
| | | updStateValue = fbStateTimeIpyData.GetStateValue()
|
| | | updCanEnter = ipyData.GetCanEnter()
|
| | | updStateValue = ipyData.GetStateValue()
|
| | | else:
|
| | | #GameWorld.DebugLog(" 当前时间副本状态不变!")
|
| | | continue
|
| | |
| | |
|
| | | if familyWarRank:
|
| | | GameWorld.Log("解散仙盟,触发更新仙盟联赛排名: delFamilyID=%s,familyWarRank=%s" % (familyID, familyWarRank))
|
| | | PlayerFamily.UpdFamilyWarRank()
|
| | | UpdFamilyWarRank()
|
| | |
|
| | | # 补发未分配的连胜奖励
|
| | | AllotWinRewardBySystem(GetFamilyWarChampionRecData(), True)
|
| | |
| | |
|
| | | # 下周分组定级
|
| | | elif stateValue == FamilyWarState_NextWeekGroupRank:
|
| | | DoLogicFamilyWar_NextWeekGroupRank()
|
| | | pass
|
| | | #废弃该阶段逻辑
|
| | | #DoLogicFamilyWar_NextWeekGroupRank()
|
| | |
|
| | | else:
|
| | | GameWorld.ErrLog("不存在该仙盟联赛状态!stateValue=%s" % stateValue)
|
| | |
| | | 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():
|
| | | ''' 仙盟赛全部比赛结束后逻辑
|
| | | 非最高级别组: 第一名晋级
|
| | |
| | |
|
| | | PlayerDBGSEvent.SetDBGSTrig_ByKey(PlayerDBGSEvent.Def_FamilyWar_Round, 0) # 重置对战轮次
|
| | | PlayerDBGSEvent.SetDBGSTrig_ByKey(PlayerDBGSEvent.Def_FamilyWar_AllOver, 1) # 设置已经处理过总结算
|
| | | |
| | | UpdFamilyWarRank() # 改为比赛结束后默认更新联赛排名
|
| | | return
|
| | |
|
| | | def UpdFamilyWarChampion(championFamilyID):
|
| | |
| | | #事件汇报初始化
|
| | | 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()
|
| | |
| | | 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
|
| | |
| | |
|
| | | "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),
|
| | | ),
|
| | |
| | | "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),
|
| | |
| | | |
| | | 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 # 广播提示信息 |
| | | |
| | |
| | | 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
|
| | |
| | | |
| | | 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 # 是否可进入副本
|
| | |
| | | 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)
|
| | |
| | | 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
|
| | |
| | | packData.Day = openDay
|
| | | packData.IsMixServer = isMixServer
|
| | | packData.MixDay = mixServerDay
|
| | | packData.OpenServerTime = GameWorld.ChangeTimeNumToStr(PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_InitOpenServerTime))
|
| | | NetPackCommon.SendFakePack(curPlayer, packData)
|
| | | return
|
| | |
|
| | |
| | |
|
| | | 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
|
| | |
| | | #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
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|