| | |
| | | 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
|