From ddc480baf399e9e0c87406c2c6738e04dbe6da86 Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期四, 20 六月 2019 12:01:03 +0800 Subject: [PATCH] 7394 【2.0】【后端】雷罚BOSS(副本中只有一个玩家时离线副本关闭逻辑优化) --- ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldActionControl.py | 539 +++++++++++++++++++++++------------------------------------ 1 files changed, 208 insertions(+), 331 deletions(-) diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldActionControl.py b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldActionControl.py index 3c5ea40..1dfac90 100644 --- a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldActionControl.py +++ b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldActionControl.py @@ -20,15 +20,9 @@ import ChConfig import datetime import GameWorld -import ReadChConfig import PlayerControl import ShareDefine -#import PlayerExam import PlayerDBGSEvent -#import PlayerManorWar -#import GameWorldShopItem -#import GameWorldActionTeHui -import GameWorldAverageLv import CrossRealmPK import GameWorldFamilyWar import PlayerFamilyParty @@ -39,6 +33,10 @@ import PlayerFamilyRedPacket import PlayerFairyCeremony import PlayerNewFairyCeremony +import PlayerUniversalGameRec +import GameWorldAverageLv +import PlayerFamilyBoss +import PlayerHorsePetBoss import GameWorldProcess import ChPyNetSendPack import NetPackCommon @@ -93,7 +91,9 @@ ipyData = operationActionDict[ShareDefine.OperationActionName_FeastRedPacket][0] if ipyData: PlayerFamilyRedPacket.Sync_FeastRedPacket(ipyData, curPlayer) - + # 幸运鉴宝活动进行中 + if ShareDefine.OperationActionName_LuckyTreasure in operationActionDict: + PlayerUniversalGameRec.SendUniversalGameRecInfo(curPlayer, ShareDefine.Def_UniversalGameRecType_LuckyTreasure) return def SendMapServerOperationActionState(): @@ -122,11 +122,13 @@ key = "OperationActionInfo" openServerDay = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_ServerDay) + 1 + isMixServer = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_IsMixServer) + mixServerDay = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_MixServerDay) + 1 OperationActionInfo = IpyGameDataPY.GetConfigEx(key) serverTime = GameWorld.GetServerTime() curHour = serverTime.hour reloadSignHour = 0 if curHour < 5 else 5 - reloadSign = "%s_%s" % (openServerDay, reloadSignHour) + reloadSign = [openServerDay, isMixServer, mixServerDay, reloadSignHour] if OperationActionInfo and OperationActionInfo[OperationAction_ReloadSign] == reloadSign: #GameWorld.DebugLog("已经加载过本日运营活动处理信息!openServerDay=%s" % openServerDay) return False, OperationActionInfo @@ -136,19 +138,21 @@ curDateTime = datetime.datetime.strptime(curDateTimeStr, ChConfig.TYPE_Time_Format) customMaxServerDay = IpyGameDataPY.GetFuncCfg("OperationAction", 1) # 定制运营活动最大开服天 + maxCustomServerDayMix = IpyGameDataPY.GetFuncCfg("MixServer", 1) # 定制运营活动最大合服天 operationActionDict = {} mapServerOperationActionDict = {} - serverID = GameWorld.GetServerID() + serverGroupID = GameWorld.GetServerGroupID() ipyDataMgr = IpyGameDataPY.IPY_Data() - GameWorld.Log("===== 加载本日运营活动信息: %s, serverID=%s,openServerDay=%s,customMaxServerDay=%s,reloadSign=%s =====" - % (curDateTime, serverID, openServerDay, customMaxServerDay, reloadSign)) + GameWorld.Log("===== 加载本日运营活动信息: %s, serverGroupID=%s,openServerDay=%s,customMaxServerDay=%s,isMixServer=%s,mixServerDay=%s,maxCustomServerDayMix=%s,reloadSign=%s =====" + % (curDateTime, serverGroupID, openServerDay, customMaxServerDay, isMixServer, mixServerDay, maxCustomServerDayMix, reloadSign)) for actName in ShareDefine.OperationActionNameList: # 取出本活动所属本服ID的所有配置 - curServerActIpyDataList = __GetOperationActionServerIpyDataList(ipyDataMgr, serverID, actName) - GameWorld.Log("加载运营活动: actName=%s,可处理条数=%s" % (actName, len(curServerActIpyDataList))) + GameWorld.Log("加载运营活动: actName=%s" % (actName)) + curServerActIpyDataList = __GetOperationActionServerIpyDataList(ipyDataMgr, serverGroupID, actName) + GameWorld.Log(" 可处理条数=%s" % (len(curServerActIpyDataList))) needStartList = [] # [startDateTime, ...] needEndList = [] # [endDateTime, ...] needNotifyDict = {} # {notifyDateTime:[notifyKey, [参数]], ...} @@ -156,11 +160,13 @@ # 注意:每个活动配置会有多个活动时间点,但是有且只能生效一条活动配置,换句话说就是每个活动配置时间不允许交叉 for ipyData in curServerActIpyDataList: + serverGroupIDList = [] if not hasattr(ipyData, "ServerGroupIDList") else ipyData.GetServerGroupIDList() + serverGroupIDListExcept = [] if not hasattr(ipyData, "ServerGroupIDListExcept") else ipyData.GetServerGroupIDListExcept() cfgID = ipyData.GetCfgID() startDateStr = ipyData.GetStartDate() endDateStr = ipyData.GetEndDate() - GameWorld.Log(" cfgID=%s,mark=%s,serverIDList=%s,startDateStr=%s,endDateStr=%s,openServerDay=%s,curDateTime=%s" - % (cfgID, ipyData.GetActMark(), ipyData.GetServerIDList(), startDateStr, endDateStr, openServerDay, curDateTime)) + GameWorld.Log(" cfgID=%s,serverGroupIDList=%s,Except=%s,startDateStr=%s,endDateStr=%s,openServerDay=%s,isMixServer=%s,mixServerDay=%s,maxCustomServerDayMix=%s,curDateTime=%s" + % (cfgID, serverGroupIDList, serverGroupIDListExcept, startDateStr, endDateStr, openServerDay, isMixServer, mixServerDay, maxCustomServerDayMix, curDateTime)) # 按开服天开的 if startDateStr.isdigit() and endDateStr.isdigit(): startServerDay, endServerDay = int(startDateStr), int(endDateStr) @@ -173,6 +179,20 @@ startDateStr = "%d-%d-%d" % (openServerDateTime.year, openServerDateTime.month, openServerDateTime.day) endDateStr = "%d-%d-%d" % (endServerDateTime.year, endServerDateTime.month, endServerDateTime.day) GameWorld.Log(" 开服天转化为日期: %s ~ %s" % (startDateStr, endDateStr)) + elif startDateStr.startswith("Mix") and endDateStr.startswith("Mix"): + if not isMixServer: + GameWorld.Log(" 非合服服务器,不处理! cfgID=%s,%s ~ %s" % (cfgID, startDateStr, endDateStr)) + continue + startMixServerDay, endMixServerDay = int(startDateStr[3:]), int(endDateStr[3:]) + #结束日可能还需要处理广播之类,所以这里需要+1 + if mixServerDay > endMixServerDay + 1: + GameWorld.Log(" 当前合服天超过活动结束合服天,不处理! cfgID=%s,%s ~ %s < mixServerDay(%s)" % (cfgID, startDateStr, endDateStr, mixServerDay)) + continue + openServerDateTime = curDateTime + datetime.timedelta(days=(startMixServerDay-mixServerDay)) + endServerDateTime = curDateTime + datetime.timedelta(days=(endMixServerDay-mixServerDay)) + startDateStr = "%d-%d-%d" % (openServerDateTime.year, openServerDateTime.month, openServerDateTime.day) + endDateStr = "%d-%d-%d" % (endServerDateTime.year, endServerDateTime.month, endServerDateTime.day) + GameWorld.Log(" 合服天转化为日期: %s ~ %s" % (startDateStr, endDateStr)) elif actName not in ShareDefine.FeastOperationActionNameList: if openServerDay <= customMaxServerDay: GameWorld.Log(" 按日期开的在开服定制限制天内,不处理! cfgID=%s,%s ~ %s,openServerDay=%s" % (cfgID, startDateStr, endDateStr, openServerDay)) @@ -184,6 +204,18 @@ GameWorld.Log(" 按日期开的开始日期在开服定制限制天内,不处理! cfgID=%s,curStartDateTime=%s,customMaxServerDateTime=%s" % (cfgID, curStartDateTime, customMaxServerDateTime)) continue + if isMixServer: + if mixServerDay <= maxCustomServerDayMix: + GameWorld.Log(" 按日期开的在合服定制限制天内,不处理! cfgID=%s,%s ~ %s,mixServerDay=%s" % (cfgID, startDateStr, endDateStr, mixServerDay)) + continue + mixStartServerDateTime = curDateTime + datetime.timedelta(days=(1-mixServerDay)) # 合服第一天的日期 + customMaxServerDateTime = curDateTime + datetime.timedelta(days=(maxCustomServerDayMix-mixServerDay)) + curStartDateTime = datetime.datetime.strptime("%s %02d:%02d:%02d" % (startDateStr, customMaxServerDateTime.hour, customMaxServerDateTime.minute, + customMaxServerDateTime.second), ChConfig.TYPE_Time_Format) + if mixStartServerDateTime <= curStartDateTime <= customMaxServerDateTime: + GameWorld.Log(" 按日期开的开始日期在合服定制限制天内,不处理! cfgID=%s,mixStartServerDateTime=%s,curStartDateTime=%s,customMaxServerDateTime=%s" % (cfgID, mixStartServerDateTime, curStartDateTime, customMaxServerDateTime)) + continue + if hasattr(ipyData, "GetStartTimeList") and hasattr(ipyData, "GetEndTimeList"): startHMStrList = ipyData.GetStartTimeList() endHMStrList = ipyData.GetEndTimeList() @@ -239,9 +271,9 @@ isEnd = (curDateTime == endDayDate) # 每天按时段开启的,支持多时段 - else: - if startDayDate <= curDateTime <= endDayDate: - isEnd = (curDateTime == endDayDate) + elif startDayDate <= curDateTime <= endDayDate: + isEnd = (curDateTime == endDayDate) + if not isEnd: for hmIndex, startHMStr in enumerate(startHMStrList): endHMStr = endHMStrList[hmIndex] # 每天开的, 实际开关时间只取今天的日期; 这里有个问题,全服广播的时间不是今天的, 暂不做支持,之后真有这种需求再说 @@ -315,6 +347,9 @@ if not activityIpyData or (isActivity and not isEnd): activityIpyData = ipyData activityInfoDict = {ShareDefine.ActKey_CfgID:cfgID} + if actName == ShareDefine.OperationActionName_LoginAward: + #活动每天的世界等级 + activityInfoDict[ShareDefine.ActKey_WorldLVList] = GameWorldAverageLv.GetWorldLVListByTime(startDayDate, (endDayDate - startDayDate).days) if startDayDate <= curDateTime < endDayDate: dayIndex = 0 @@ -350,50 +385,42 @@ return True, OperationActionInfo -def __GetOperationActionServerIpyDataList(ipyDataMgr, serverID, actName): +def __GetOperationActionServerIpyDataList(ipyDataMgr, serverGroupID, actName): ## 获取运营活动本服务器对应的配置数据列表 if not hasattr(ipyDataMgr, "Get%sCount" % actName): GameWorld.ErrLog("没有该运营活动类型对应活动时间表! actName=%s" % actName) return [] - # 所有配置先按活动标识归组 - platform = GameWorld.GetPlatform() - actGroupDict = {} # {ActMark:{ServerIDTuple:[ipyData, ...], ...}, ...} + curServerActIpyDataList = [] actCfgCount = getattr(ipyDataMgr, "Get%sCount" % actName)() for cfgIndex in xrange(actCfgCount): - ipyData = getattr(ipyDataMgr, "Get%sByIndex" % actName)(cfgIndex) - actMark = ipyData.GetActMark() - platformList = [] if not hasattr(ipyData, "GetPlatformList") else ipyData.GetPlatformList() - if platformList and platform not in platformList: - GameWorld.Log("非本平台活动,不取!platform=%s,platformList=%s,actName=%s,cfgID=%s" % (platform, platformList, actName, ipyData.GetCfgID())) - continue - serverIDTuple = tuple(ipyData.GetServerIDList()) + ipyData = getattr(ipyDataMgr, "Get%sByIndex" % actName)(cfgIndex) + serverGroupIDList = [] if not hasattr(ipyData, "ServerGroupIDList") else ipyData.GetServerGroupIDList() + serverGroupIDListExcept = [] if not hasattr(ipyData, "ServerGroupIDListExcept") else ipyData.GetServerGroupIDListExcept() - serverIpyDataDict = actGroupDict.get(actMark, {}) - ipyDataList = serverIpyDataDict.get(serverIDTuple, []) - ipyDataList.append(ipyData) - serverIpyDataDict[serverIDTuple] = ipyDataList - actGroupDict[actMark] = serverIpyDataDict - - # 取出所属本服ID的所有配置 - curServerActIpyDataList = [] - for actMark, serverIpyDataDict in actGroupDict.items(): - generalIpyDataList = [] - isGeneral = True - for serverIDTuple, ipyDataList in serverIpyDataDict.items(): - if not serverIDTuple: - generalIpyDataList = ipyDataList - continue - for serverIDInfo in serverIDTuple: - if (isinstance(serverIDInfo, int) and serverIDInfo == serverID) \ - or ((isinstance(serverIDInfo, list) or isinstance(serverIDInfo, tuple)) \ - and len(serverIDInfo) == 2 and serverIDInfo[0] <= serverID <= serverIDInfo[1]): - curServerActIpyDataList += ipyDataList - isGeneral = False + # 排除的服务器组ID列表 + if serverGroupIDListExcept: + isExcept = False + for serverGroupIDInfo in serverGroupIDListExcept: + if (isinstance(serverGroupIDInfo, int) and serverGroupIDInfo == serverGroupID) \ + or ((isinstance(serverGroupIDInfo, list) or isinstance(serverGroupIDInfo, tuple)) \ + and len(serverGroupIDInfo) == 2 and serverGroupIDInfo[0] <= serverGroupID <= serverGroupIDInfo[1]): + isExcept = True break - if isGeneral: - curServerActIpyDataList += generalIpyDataList + if isExcept: + continue + + if not serverGroupIDList: + curServerActIpyDataList.append(ipyData) + else: + for serverGroupIDInfo in serverGroupIDList: + if (isinstance(serverGroupIDInfo, int) and serverGroupIDInfo == serverGroupID) \ + or ((isinstance(serverGroupIDInfo, list) or isinstance(serverGroupIDInfo, tuple)) \ + and len(serverGroupIDInfo) == 2 and serverGroupIDInfo[0] <= serverGroupID <= serverGroupIDInfo[1]): + curServerActIpyDataList.append(ipyData) + break + return curServerActIpyDataList def Dispose_OperationActionState(reloadRefresh=False): @@ -587,9 +614,12 @@ # 获取本日待处理的日常活动信息 key = "TodayDailyActionInfo" openServerDay = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_ServerDay) + 1 + isMixServer = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_IsMixServer) + mixServerDay = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_MixServerDay) + 1 + loadSign = [openServerDay, isMixServer, mixServerDay] TodayDailyActionInfo = IpyGameDataPY.GetConfigEx(key) - if TodayDailyActionInfo and TodayDailyActionInfo[0] == openServerDay: - #GameWorld.DebugLog("已经加载过本日日常活动处理信息!openServerDay=%s" % openServerDay) + if TodayDailyActionInfo and TodayDailyActionInfo[0] == loadSign: + #GameWorld.DebugLog("已经加载过本日日常活动处理信息!loadSign=%s" % loadSign) return TodayDailyActionInfo[1] todayActionInfo = [] @@ -601,16 +631,20 @@ openServerWeekday = GameWorldProcess.GetOpenServerWeekday() # 服务器开服时是星期几 curMaxCustomServerDay = IpyGameDataPY.GetFuncCfg("OperationAction", 1) - openServerWeekday + 1 # 最大有效定制开服天 + maxCustomServerDayMix = IpyGameDataPY.GetFuncCfg("MixServer", 1) GameWorld.Log("===== 加载今天日常活动信息 =====") - GameWorld.Log(" 开服是星期%s, 开服第%s天, 当前星期%s" % (openServerWeekday, openServerDay, weekDay)) - GameWorld.Log(" 最大有效定制开服天: %s" % (curMaxCustomServerDay)) + GameWorld.Log("开服是星期%s, 开服第%s天, 当前星期%s" % (openServerWeekday, openServerDay, weekDay)) + GameWorld.Log("最大有效定制开服天: %s" % (curMaxCustomServerDay)) + GameWorld.Log("是否合服: %s, 合服天: %s, 最大定制合服天: %s" % (isMixServer, mixServerDay, maxCustomServerDayMix)) customDailyIDList = [] dailyTimeInfoList = [] # 暂固定前2周定制有效, 为方便GM命令测试,这里用开服天做判断,不用开服周 if openServerDay <= curMaxCustomServerDay: customIpyDataList = IpyGameDataPY.GetIpyGameDataListNotLog("DailyActionCustom", openServerWeekday) - GameWorld.Log(" 本周定制的日常活动条数: %s" % len(customIpyDataList)) + if not customIpyDataList: + customIpyDataList = [] + GameWorld.Log(" 本周定制的开服日常活动条数: %s" % len(customIpyDataList)) customIDList = [] todayCustomIDList = [] for customIpyData in customIpyDataList: @@ -621,12 +655,28 @@ customIDList.append(dataID) if customIpyData.GetOpenServerDay() == openServerDay: todayCustomIDList.append(dataID) - isCustom = True - dailyTimeInfoList.append([isCustom, customIpyData.GetOpenTimeList(), customIpyData]) - GameWorld.Log(" 增加本日日常活动信息: isCustom=%s,dailyID=%s,dataID=%s" % (isCustom, dailyID, dataID)) - GameWorld.Log(" 本周定制的日常配置表ID列表: %s" % (customIDList)) - GameWorld.Log(" 本周定制的日常活动ID列表: %s" % (customDailyIDList)) - GameWorld.Log(" 今天定制的日常表ID列表=%s" % (todayCustomIDList)) + customType = 1 + dailyTimeInfoList.append([customType, customIpyData.GetOpenTimeList(), customIpyData]) + GameWorld.Log(" 增加本日开服日常活动信息: customType=%s,dailyID=%s,dataID=%s" % (customType, dailyID, dataID)) + GameWorld.Log(" 本周定制的开服日常配置表ID列表: %s" % (customIDList)) + GameWorld.Log(" 本周定制的开服日常活动ID列表: %s" % (customDailyIDList)) + GameWorld.Log(" 今天定制的开服日常表ID列表=%s" % (todayCustomIDList)) + elif isMixServer and mixServerDay <= maxCustomServerDayMix: + todayCustomIDList = [] # 今天定制的数据表ID + ipyDataMgr = IpyGameDataPY.IPY_Data() + for i in xrange(ipyDataMgr.GetDailyActionCustomMixCount()): + customIpyData = ipyDataMgr.GetDailyActionCustomMixByIndex(i) + dataID = customIpyData.GetID() + dailyID = customIpyData.GetDailyID() + if dailyID not in customDailyIDList: + customDailyIDList.append(dailyID) + if customIpyData.GetMixServerDay() == mixServerDay: + todayCustomIDList.append(dataID) + customType = 2 + dailyTimeInfoList.append([customType, customIpyData.GetOpenTimeList(), customIpyData]) + GameWorld.Log(" 增加本日合服日常活动信息: customType=%s,dailyID=%s,dataID=%s" % (customType, dailyID, dataID)) + GameWorld.Log(" 定制的合服日常活动ID列表: %s" % (customDailyIDList)) + GameWorld.Log(" 今天定制的合服日常表ID列表=%s" % (todayCustomIDList)) else: GameWorld.Log(" 超过最大定制开服天,不定制,走常规日常配置!") @@ -654,10 +704,11 @@ 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]) + customType = 0 + dailyTimeInfoList.append([customType, openTimeList, dailyIpyData]) GameWorld.Log(" -----------------------") - for isCustom, openTimeList, ipyData in dailyTimeInfoList: + for customType, openTimeList, ipyData in dailyTimeInfoList: dailyID = ipyData.GetDailyID() notifyInfoDict = ipyData.GetNotifyInfo() @@ -692,11 +743,11 @@ notifyDict[(notifyDateTime.hour, notifyDateTime.minute)] = notifyInfo todayActionInfo.append([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)) + GameWorld.Log(" 增加本日限时日常活动信息: customType=%s,dailyID=%s,openList=%s,overList=%s,goonStateDict=%s,notifyDict=%s" + % (customType, dailyID, openList, overList, goonStateDict, notifyDict)) - TodayDailyActionInfo = IpyGameDataPY.SetConfigEx(key, [openServerDay, todayActionInfo]) - GameWorld.Log("本日日常活动信息加载完毕!") + TodayDailyActionInfo = IpyGameDataPY.SetConfigEx(key, [loadSign, todayActionInfo]) + GameWorld.Log("本日日常活动信息加载完毕! loadSign=%s" % loadSign) GameWorld.Log("=============================================================") return TodayDailyActionInfo[1] @@ -806,7 +857,7 @@ FBStateEndTimeNotResetIDList.append(dataID) FBStateEndTimeNotResetIDList.sort() - # 加载定制表 + # 加载开服定制表 customStateTimeDict = {} for i in xrange(ipyDataMgr.GetFBStateTimeCustomCount()): customIpyData = ipyDataMgr.GetFBStateTimeCustomByIndex(i) @@ -829,18 +880,45 @@ FBStateEndTimeNotResetCustomIDList.append(dataID) FBStateEndTimeNotResetCustomIDList.sort() - notResetIDList = IpyGameDataPY.SetConfigEx(key, [FBStateEndTimeNotResetIDList, FBStateEndTimeNotResetCustomIDList]) + # 加载合服定制表 + customMixStateTimeDict = {} + for i in xrange(ipyDataMgr.GetFBStateTimeCustomMixCount()): + customIpyData = ipyDataMgr.GetFBStateTimeCustomMixByIndex(i) + dataID = customIpyData.GetID() + dataMapID = customIpyData.GetDataMapID() + openMixDay = customIpyData.GetMixServerDay() + startHour, startMinute = customIpyData.GetStartHour(), customIpyData.GetStartMinute() + endHour, endMinute = customIpyData.GetEndHour(), customIpyData.GetEndMinute() + startTimeList, endTimeDict = customMixStateTimeDict.get(dataMapID, [[], {}]) + startTimeList.append([openMixDay, startHour, startMinute]) + endTimeDict[dataID] = [openMixDay, endHour, endMinute] + customMixStateTimeDict[dataMapID] = [startTimeList, endTimeDict] + + FBStateEndTimeNotResetCustomMixIDList = [] + for dataMapID, timeInfo in customMixStateTimeDict.items(): + startTimeList, endTimeDict = timeInfo + for dataID, endTime in endTimeDict.items(): + # 结束时间属于某一条的开启时间,则不重置,具体状态由另一条决定 + if endTime in startTimeList: + FBStateEndTimeNotResetCustomMixIDList.append(dataID) + FBStateEndTimeNotResetCustomMixIDList.sort() + + notResetIDList = IpyGameDataPY.SetConfigEx(key, [FBStateEndTimeNotResetIDList, FBStateEndTimeNotResetCustomIDList, FBStateEndTimeNotResetCustomMixIDList]) GameWorld.Log("加载副本状态结束时间不需要重置状态值的数据ID列表:") - GameWorld.Log(" 不需要重置的常规ID: %s" % FBStateEndTimeNotResetIDList) - GameWorld.Log(" 不需要重置的定制ID: %s" % FBStateEndTimeNotResetCustomIDList) + GameWorld.Log(" 不需要重置的常规常规ID: %s" % FBStateEndTimeNotResetIDList) + GameWorld.Log(" 不需要重置的开服定制ID: %s" % FBStateEndTimeNotResetCustomIDList) + GameWorld.Log(" 不需要重置的合服定制ID: %s" % FBStateEndTimeNotResetCustomMixIDList) return notResetIDList def __GetTodayFBStateTimeInfo(): key = "TodayFBStateTimeInfo" openServerDay = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_ServerDay) + 1 + isMixServer = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_IsMixServer) + mixServerDay = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_MixServerDay) + 1 + loadSign = [openServerDay, isMixServer, mixServerDay] TodayFBStateTimeInfo = IpyGameDataPY.GetConfigEx(key) - if TodayFBStateTimeInfo and TodayFBStateTimeInfo[0] == openServerDay: - #GameWorld.DebugLog("已经加载过本日副本状态处理信息!openServerDay=%s" % openServerDay) + if TodayFBStateTimeInfo and TodayFBStateTimeInfo[0] == loadSign: + #GameWorld.DebugLog("已经加载过本日副本状态处理信息!loadSign=%s" % loadSign) return TodayFBStateTimeInfo[1] openServerDay = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_ServerDay) + 1 @@ -853,9 +931,11 @@ return [] curMaxCustomServerDay = IpyGameDataPY.GetFuncCfg("OperationAction", 1) - openServerWeekday + 1 # 最大有效定制开服天 + maxCustomServerDayMix = IpyGameDataPY.GetFuncCfg("MixServer", 1) GameWorld.Log("===== 加载今天副本状态时间表 =====") - GameWorld.Log(" 开服是星期%s, 开服第%s天, 当前星期%s,%s点%s分 !" % (openServerWeekday, openServerDay, curWeekDay, curHour, curMinute)) - GameWorld.Log(" 最大有效定制开服天: %s" % (curMaxCustomServerDay)) + GameWorld.Log("开服是星期%s, 开服第%s天, 当前星期%s,%s点%s分 !" % (openServerWeekday, openServerDay, curWeekDay, curHour, curMinute)) + GameWorld.Log("最大有效定制开服天: %s" % (curMaxCustomServerDay)) + GameWorld.Log("是否合服: %s, 合服天: %s, 最大定制合服天: %s" % (isMixServer, mixServerDay, maxCustomServerDayMix)) ipyDataMgr = IpyGameDataPY.IPY_Data() @@ -864,7 +944,9 @@ # 暂固定前2周定制有效, 为方便GM命令测试,这里用开服天做判断,不用开服周 if openServerDay <= curMaxCustomServerDay: customIpyDataList = IpyGameDataPY.GetIpyGameDataListNotLog("FBStateTimeCustom", openServerWeekday) - GameWorld.Log(" 本周定制的副本活动条数: %s" % len(customIpyDataList)) + if not customIpyDataList: + customIpyDataList = [] + GameWorld.Log(" 本周定制的开服副本活动条数: %s" % len(customIpyDataList)) customIDList = [] # 本周定制的数据表ID todayCustomIDList = [] # 今天定制的数据表ID for customIpyData in customIpyDataList: @@ -875,12 +957,28 @@ customIDList.append(dataID) if customIpyData.GetOpenServerDay() == openServerDay: todayCustomIDList.append(dataID) - isCustom, startWeekDay, endWeekDay = True, curWeekDay, curWeekDay - fbStateTimeInfoList.append([isCustom, startWeekDay, endWeekDay, customIpyData]) - GameWorld.Log(" 今天要处理的副本状态配置: 是否定制=%s,dataID=%s" % (isCustom, dataID)) - GameWorld.Log(" 本周定制的配置表ID列表: %s" % (customIDList)) - GameWorld.Log(" 本周定制的副本地图列表: %s" % (customMapIDList)) - GameWorld.Log(" 今天定制的表ID列表=%s" % (todayCustomIDList)) + customType, startWeekDay, endWeekDay = 1, curWeekDay, curWeekDay + fbStateTimeInfoList.append([customType, startWeekDay, endWeekDay, customIpyData]) + GameWorld.Log(" 今天要处理的开服副本状态配置: customType=%s,dataID=%s" % (customType, dataID)) + GameWorld.Log(" 本周定制的开服副本表ID列表: %s" % (customIDList)) + GameWorld.Log(" 本周定制的开服副本地图列表: %s" % (customMapIDList)) + GameWorld.Log(" 今天定制的开服副本表ID列表=%s" % (todayCustomIDList)) + elif isMixServer and mixServerDay <= maxCustomServerDayMix: + todayCustomIDList = [] # 今天定制的数据表ID + ipyDataMgr = IpyGameDataPY.IPY_Data() + for i in xrange(ipyDataMgr.GetFBStateTimeCustomMixCount()): + customIpyData = ipyDataMgr.GetFBStateTimeCustomMixByIndex(i) + dataID = customIpyData.GetID() + dataMapID = customIpyData.GetDataMapID() + if dataMapID not in customMapIDList: + customMapIDList.append(dataMapID) + if customIpyData.GetMixServerDay() == mixServerDay: + todayCustomIDList.append(dataID) + customType, startWeekDay, endWeekDay = 2, curWeekDay, curWeekDay + fbStateTimeInfoList.append([customType, startWeekDay, endWeekDay, customIpyData]) + GameWorld.Log(" 今天要处理的合服副本状态配置: customType=%s,dataID=%s" % (customType, dataID)) + GameWorld.Log(" 定制的合服副本地图列表: %s" % (customMapIDList)) + GameWorld.Log(" 今天定制的合服副本表ID列表=%s" % (todayCustomIDList)) else: GameWorld.Log(" 超过最大定制开服天,不定制,走常规副本状态时间!") @@ -894,43 +992,43 @@ GameWorld.Log(" dataID=%s,dataMapID=%s, 在本周定制的副本地图列表里,不处理!" % (dataID, dataMapID)) continue # 暂不支持跨天的活动 - isCustom, startWeekDay, endWeekDay = False, fbStateTimeIpyData.GetStartWeekday(), fbStateTimeIpyData.GetStartWeekday() + customType, startWeekDay, endWeekDay = 0, fbStateTimeIpyData.GetStartWeekday(), fbStateTimeIpyData.GetStartWeekday() if curWeekDay != startWeekDay: - GameWorld.Log(" dataID=%s,dataMapID=%s, 不是本天的副本活动,不处理!curWeekDay=%s,startWeekDay=%s" + GameWorld.Log(" dataID=%s,dataMapID=%s, 不是本天的副本活动,不处理! curWeekDay=%s,startWeekDay=%s" % (dataID, dataMapID, curWeekDay, startWeekDay)) continue - fbStateTimeInfoList.append([isCustom, startWeekDay, endWeekDay, fbStateTimeIpyData]) - GameWorld.Log(" 今天要处理的副本状态配置: 是否定制=%s,dataID=%s" % (isCustom, dataID)) + fbStateTimeInfoList.append([customType, startWeekDay, endWeekDay, fbStateTimeIpyData]) + GameWorld.Log(" 今天要处理的副本状态配置: customType=%s,dataID=%s" % (customType, dataID)) - TodayFBStateTimeInfo = IpyGameDataPY.SetConfigEx(key, [openServerDay, fbStateTimeInfoList]) - GameWorld.Log("本日副本活动状态信息加载完毕!") + TodayFBStateTimeInfo = IpyGameDataPY.SetConfigEx(key, [loadSign, fbStateTimeInfoList]) + GameWorld.Log("本日副本活动状态信息加载完毕! loadSign=%s" % loadSign) GameWorld.Log("=============================================================") return TodayFBStateTimeInfo[1] def Dispose_FBStateTime(): ## 副本状态时间表状态处理, 支持 goon作用,开关服状态不受影响,服务器重新启动会自动变更为所有时间段的状态值 - - FBStateEndTimeNotResetIDList, FBStateEndTimeNotResetCustomIDList = __GetFBStateEndTimeNotResetIDList() - openServerDay = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_ServerDay) + 1 + FBStateEndTimeNotResetIDList, FBStateEndTimeNotResetCustomIDList, FBStateEndTimeNotResetCustomMixIDList = __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 - 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)) + #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.DebugLog(" FBStateEndTimeNotResetCustomMixIDList=%s" % (FBStateEndTimeNotResetCustomMixIDList)) gameWorld = GameWorld.GetGameWorld() fbStateTimeInfoList = __GetTodayFBStateTimeInfo() - for isCustom, startWeekDay, endWeekDay, ipyData in fbStateTimeInfoList: + for customType, startWeekDay, endWeekDay, ipyData in fbStateTimeInfoList: dataID = ipyData.GetID() dataMapID = ipyData.GetDataMapID() - GameWorld.DebugLog(" isCustom=%s,dataID=%s,dataMapID=%s" % (isCustom, dataID, dataMapID)) + #GameWorld.DebugLog(" customType=%s,dataID=%s,dataMapID=%s" % (customType, dataID, dataMapID)) startHour, startMinute = ipyData.GetStartHour(), ipyData.GetStartMinute() endHour, endMinute = ipyData.GetEndHour(), ipyData.GetEndMinute() # 星期配置0代表每天 @@ -963,7 +1061,9 @@ #GameWorld.DebugLog(" 当前是开始时间!") # 是结束时间 elif curTimeWHM == endTimeWHM: - if (isCustom and dataID not in FBStateEndTimeNotResetCustomIDList) or (not isCustom and dataID not in FBStateEndTimeNotResetIDList): + if (customType == 1 and dataID not in FBStateEndTimeNotResetCustomIDList) \ + or (customType == 2 and dataID not in FBStateEndTimeNotResetCustomMixIDList) \ + or (not customType and dataID not in FBStateEndTimeNotResetIDList): isReset = True #GameWorld.DebugLog(" 当前是结束时间! isReset=%s,FBStateEndTimeNotResetIDList=%s" % (isReset, FBStateEndTimeNotResetIDList)) # 结束时间是下周 @@ -1088,21 +1188,6 @@ GameWorld.SendMapServerMsgEx(ShareDefine.Def_Notify_WorldKey_FBOpenRecord, fbOpenRecord) return -## 处理重开服务器后, 活动继续开启逻辑根据天数 -# @param tick 当前时间 -# @return None -def Dispose_Action_GoOn_ByDay(tick): - #已固定在每整分钟触发,故暂不需要时间间隔控制 - #if not GameWorld.SetWorldDictKey(ChConfig.TYPE_ActionOpenAndCloseByDayCountGoOn, tick): - # #间隔未到 - # return - - if GameWorld.IsCrossServer(): - return - - Dispose_ActionGoOnByDayKey() - return - ## 当前时间与指定时间比较 # @param curTime 当前服务器时间 # @param timeInfo 指定时间 [[3,4(星期几)], 年,月,日,时,分] @@ -1163,21 +1248,6 @@ # @return 返回值无意义 # @remarks def __DoLogic_GameServer_ActionState(dictName, isOpen): - #=============================================================================================== - # #领地争夺战 - # if dictName == ShareDefine.Def_Notify_WorldKey_ManorWar: - # PlayerManorWar.ManorWar_ChangeState(isOpen) - # #答题活动 - # elif dictName == ShareDefine.Def_Notify_WorldKey_Game_EXAM: - # PlayerExam.Exam_ChangeState(isOpen) - # #特惠活动 - # elif dictName in ShareDefine.TeHuiTypeKeyDict.values(): - # GameWorldActionTeHui.OnTeHuiActionChange(dictName, isOpen) - # #商店状态变更 - # elif dictName.startswith(ShareDefine.Def_Notify_WorldKey_ShopState[:-2]): - # GameWorldShopItem.OnShopStateChange(dictName, isOpen) - #=============================================================================================== - #仙盟宴会 if dictName == ShareDefine.Def_Notify_WorldKey_FBFuncState % ChConfig.Def_FBMapID_FamilyParty: PlayerFamilyParty.FamilyPartyStateChange(isOpen) @@ -1196,206 +1266,13 @@ #跨服PK elif dictName == ShareDefine.Def_Notify_WorldKey_DailyActionState % ShareDefine.DailyActionID_CrossReamPK: CrossRealmPK.OnCrossRealmPKDailyActionStateChange(isOpen) + #仙盟BOSS + elif dictName in [ShareDefine.Def_Notify_WorldKey_DailyActionState % ShareDefine.DailyActionID_FamilyBoss1]: + PlayerFamilyBoss.OnAllFamilyBossStateChange(isOpen) + #骑宠BOSS + elif dictName in [ShareDefine.Def_Notify_WorldKey_DailyActionState % ShareDefine.DailyActionID_HorsePetBoss]: + PlayerHorsePetBoss.OnHorsePetBossStateChange(isOpen) + return #------------------------------------------------------------------------------- - -## 根据活动开启的活动事件OnDay -# @param None: -# @return: None -def DoLogic_ActionByDayKeyOnDay(): - openServerDay = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_ServerDay) - isMixServer = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_IsMixServer) - mixServerDay = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_MixServerDay) - repeatDayInfo = ReadChConfig.GetEvalChConfig('ActionControlByDayKeyRepeat') - startRepeatOpenDay, startRepeatMixDay, repeatList = repeatDayInfo - # 不是循环阶段 - if openServerDay < startRepeatOpenDay or (isMixServer and mixServerDay < startRepeatMixDay): - GameWorld.Log("没有正式进入周期循环,不处理!") - return - - Def_RepeatOrderKey = PlayerDBGSEvent.Def_TeHuiRepeatOrderKey - Def_RepeatNumKey = PlayerDBGSEvent.Def_TeHuiRepeatNumKey - - # 强制更新一次世界等级 - GameWorldAverageLv.OpenWorldAverageLv() - - repeatOrder = PlayerDBGSEvent.GetDBGSTrig_ByKey(Def_RepeatOrderKey) - repeatOrder = "" if not repeatOrder else str(repeatOrder) - preRepeatNum = PlayerDBGSEvent.GetDBGSTrig_ByKey(Def_RepeatNumKey) - preRepeatNum = "" if not preRepeatNum else str(preRepeatNum) - worldAverageLV = PlayerDBGSEvent.GetDBGSTrig_ByKey(ShareDefine.Def_Notify_WorldKey_WorldAverageLv) - GameWorld.Log("处理周期循环: openServerDay=%s,isMixServer=%s,mixServerDay=%s" % (openServerDay, isMixServer, mixServerDay)) - GameWorld.Log(" startRepeatOpenDay=%s,startRepeatMixDay=%s,repeatOrder=%s,preRepeatNum=%s,worldAverageLV=%s" - % (startRepeatOpenDay, startRepeatMixDay, repeatOrder, preRepeatNum, worldAverageLV)) - - # 开始循环 - if openServerDay == startRepeatOpenDay or (isMixServer and mixServerDay == startRepeatMixDay): - repeatOrder = "" - for i, repeatInfo in enumerate(repeatList, 1): - if i > 9: - break - needWorldAverageLV = repeatInfo[0] - if worldAverageLV < needWorldAverageLV: - continue - repeatOrder = "%s%s" % (repeatOrder, i) - PlayerDBGSEvent.SetDBGSTrig_ByKey(Def_RepeatOrderKey, GameWorld.ToIntDef(repeatOrder)) - GameWorld.Log(" 开始循环, 生成循环编号顺序: %s" % repeatOrder) - - # 还没全部开始循环,则判断是否有动态新插入的循环 - elif len(repeatOrder) < len(repeatList): - GameWorld.Log(" 还没全部开始循环,判断是否有动态新插入的循环..") - for i, repeatInfo in enumerate(repeatList, 1): - if i > 9: - break - if str(i) in repeatOrder: # 已经在循环里的不处理 - continue - needWorldAverageLV = repeatInfo[0] - if worldAverageLV < needWorldAverageLV: - continue - - # 插入新循环 - if preRepeatNum in repeatOrder: - insertIndex = repeatOrder.index(preRepeatNum) - repeatOrder = repeatOrder[:insertIndex + 1] + str(i) + repeatOrder[insertIndex + 1:] - else: - repeatOrder = str(i) - PlayerDBGSEvent.SetDBGSTrig_ByKey(Def_RepeatOrderKey, GameWorld.ToIntDef(repeatOrder)) - GameWorld.Log(" 编号%s, needWorldAverageLV=%s,插入循环,更新循环编号顺序: %s" % (i, needWorldAverageLV, repeatOrder)) - break - - if not repeatOrder: - GameWorld.Log(" 没有可循环的活动!") - return - - # 进入下一天循环编号 - if preRepeatNum and preRepeatNum in repeatOrder: - nextRepeatIndex = repeatOrder.index(preRepeatNum) + 1 - nextRepeatIndex = 0 if nextRepeatIndex >= len(repeatOrder) else nextRepeatIndex - else: - nextRepeatIndex = 0 - nextRepeatNum = GameWorld.ToIntDef(repeatOrder[nextRepeatIndex]) - PlayerDBGSEvent.SetDBGSTrig_ByKey(Def_RepeatNumKey, nextRepeatNum) - if nextRepeatNum <= 0 or nextRepeatNum > len(repeatList): - GameWorld.Log(" 下一个循环编号错误!nextRepeatNum=%s" % nextRepeatNum) - return - - GameWorld.Log(" 过天变更循环活动状态, nextRepeatNum=%s" % nextRepeatNum) - - gameWorld = GameWorld.GetGameWorld() - nextRepeatDict = repeatList[nextRepeatNum - 1][1] - for dictName, signID in nextRepeatDict.items(): - # 已经是这个值不处理 - if gameWorld.GetDictByKey(dictName) == signID: - #GameWorld.DebugLog(" 已经是这个值不处理dictName=%s,signID=%s" % (dictName,signID)) - continue - - # 默认当前的0点开始到当天的23点59分 - curDay, beginDay, beginH, beginM, endDay, endH, endM = 0, 0, 0, 0, 0, 23, 59 - __ChangeDA_ActionSign(gameWorld, dictName, signID, curDay, beginDay, beginH, beginM, endDay, endH, endM) - - return - - - -## 处理重开服务器后, 活动继续开启逻辑根据天数key -# @param None -# @return None -def Dispose_ActionGoOnByDayKey(): - if GameWorld.IsCrossServer(): - return - GameWorld.DebugLog("处理特惠状态信息...") - openServerDay = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_ServerDay) - isMixServer = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_IsMixServer) - mixServerDay = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_MixServerDay) - allActionGoOnInfo = ReadChConfig.GetEvalChConfig("ActionControlByDayKeyGoOn") - - if not isMixServer: - __DoActionGoOnByDayKeyCheck(allActionGoOnInfo[0], openServerDay) - else: - __DoActionGoOnByDayKeyCheck(allActionGoOnInfo[1], mixServerDay) - - return - - -## 按天开启可循环活动检查 -# @param controlList: -# @return: None -def __DoActionGoOnByDayKeyCheck(goOnList, curDay): - curTime = GameWorld.GetServerTime() - gameWorld = GameWorld.GetGameWorld() - for goOnControl in goOnList: - beginDay, beginH, beginM = goOnControl[0] - endDay, endH, endM = goOnControl[1] - if curDay < beginDay or curDay > endDay: - #活动不在这一时间段 - #GameWorld.DebugLog("活动不在这一时间段curDay=%s < beginDay=%s or curDay > endDay=%s" - # % (curDay,beginDay,endDay)) - continue - - dictName = goOnControl[2] # 字典名 - signID = goOnControl[3] # 标记 - - # 已经是这个值不处理 - if gameWorld.GetDictByKey(dictName) == signID: - #GameWorld.DebugLog("已经是这个值不处理dictName=%s,signID=%s" % (dictName,signID)) - continue - - beginTime = ['-', '-', '-', '-', beginH, beginM] - endTime = ['-', '-', '-', '-', endH, endM] - #还没开始 - if curDay == beginDay and CompareActTime(curTime, beginTime) == ChConfig.Def_Cmp_Lower: - #GameWorld.DebugLog("还没开始...") - continue - - #已经结束 - if curDay == endDay and CompareActTime(curTime, endTime) == ChConfig.Def_Cmp_Greater: - #GameWorld.DebugLog("已经结束...") - continue - - __ChangeDA_ActionSign(gameWorld, dictName, signID, curDay, beginDay, beginH, beginM, endDay, endH, endM) - - return - -def __ChangeDA_ActionSign(gameWorld, dictName, signID, curDay, beginDay, beginH, beginM, endDay, endH, endM): - # 计算开始及结束日期 - beginTime, endTime = GetBeginEndTimeByDay(dictName, curDay, beginDay, beginH, beginM, endDay, endH, endM) - - actionID = int(time.time()) - GameWorld.Log('活动状态变更: dictName=%s,signID=%s,beginTime=%s,endTime=%s,actionID=%s' - % (dictName, signID, beginTime, endTime, actionID)) - - #潜规则:在ChConfig活动相关设置中,提取了字典名 - gameWorld.SetDict(dictName, signID) - gameWorld.SetDict(ShareDefine.Def_Notify_WorldKey_DayAction_BeginTime % dictName, beginTime) - gameWorld.SetDict(ShareDefine.Def_Notify_WorldKey_DayAction_EndTime % dictName, endTime) - # 标记活动唯一id - actionIDKey = ShareDefine.Def_Notify_WorldKey_DayAction_ID % dictName - gameWorld.SetDict(actionIDKey, actionID) - - #通知Mapserver,设置字典 - GameWorld.SendMapServerMsgEx(actionIDKey, actionID) - GameWorld.SendMapServerMsgEx(dictName, signID) - - #处理GameServer活动逻辑 - __DoLogic_GameServer_ActionState(dictName, signID) - return - -## 获取开启结束时间 -# @param tick -# @return None -def GetBeginEndTimeByDay(dictName, curDay, beginDay, beginH, beginM, endDay, endH, endM): - beginDiffDays = max(0, curDay - beginDay) - beginDateTime = GameWorld.GetDatetimeBySubDays(beginDiffDays) - beginDateTimeStr = str(beginDateTime).split(".")[0] - beginDateTimeStr = "%s %02d:%02d:00" % (beginDateTimeStr[:10], beginH, beginM) - beginTimeNum = GameWorld.ChangeTimeStrToNum(beginDateTimeStr, ChConfig.TYPE_Time_Format) - - endDiffDays = max(0, endDay - curDay) - endDateTime = GameWorld.GetDatetimeByDiffDays(endDiffDays) - endDateTimeStr = str(endDateTime).split(".")[0] - endDateTimeStr = "%s %02d:%02d:59" % (endDateTimeStr[:10], endH, endM) - endTimeNum = GameWorld.ChangeTimeStrToNum(endDateTimeStr, ChConfig.TYPE_Time_Format) - return beginTimeNum, endTimeNum - - -- Gitblit v1.8.0