From 562f3491c2f87a55fe333d855cd5737223562731 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期五, 25 六月 2021 16:13:47 +0800
Subject: [PATCH] 8921 【主干】【BT2】【后端】H.活动-节日活动-垃圾分类(修复仙匣秘境没有同步大奖已抽次数bug)
---
ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldActionControl.py | 67 ++++++++++++++++++++++-----------
1 files changed, 44 insertions(+), 23 deletions(-)
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldActionControl.py b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldActionControl.py
index bf74fe8..43dd8b1 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldActionControl.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldActionControl.py
@@ -33,6 +33,7 @@
import PlayerFamilyRedPacket
import PlayerFairyCeremony
import PlayerNewFairyCeremony
+import PlayerActGarbageSorting
import PlayerUniversalGameRec
import GameWorldAverageLv
import PlayerFamilyBoss
@@ -234,7 +235,7 @@
GameWorld.Log("加载运营活动: actName=%s,platform=%s,serverGroupID=%s" % (actName, platform, serverGroupID))
curServerActIpyDataList = __GetOperationActionServerIpyDataList(ipyDataMgr, platform, serverGroupID, actName)
GameWorld.Log(" 可处理条数=%s" % (len(curServerActIpyDataList)))
- actNumDisableWeekIpyDataInfo = __GetOperationActionDisableWeekIpyDataInfo(actName, curDateTime, curServerActIpyDataList)
+ actNumDisableWeekIpyDataInfo, disableWeekCfgIDDict = __GetOperationActionDisableWeekIpyDataInfo(actName, curDateTime, curServerActIpyDataList)
for ipyData in curServerActIpyDataList:
@@ -268,7 +269,7 @@
# 开服常规: 开服天 > 日期 > 周x (不受合服天影响,合服活动新增一套独立的活动,还是走运营活动配置)
if actType == ShareDefine.ActType_OpenComm:
actByWeek = (startDateStr.startswith("W") and endDateStr.startswith("W")) # 按周x开
- actByDate = (startDateStr.count("-") == 2 and endDateStr.count("-") == 2) # 按日期开
+ actByDate = (not actByWeek and startDateStr.count("-") == 2 and endDateStr.count("-") == 2) # 按日期开
# 开服天的
if startDateStr.isdigit() and endDateStr.isdigit():
@@ -296,13 +297,13 @@
% (cfgID, startWeekDate, startDateStr, endWeekDate, endDateStr, ymdCfgID, ymdStartDate, ymdEndDate))
continue
+ if cfgID in disableWeekCfgIDDict:
+ GameWorld.Log(" 常规活动,按星期开启的未到开启循环日期或已结束循环日期,不处理! cfgID=%s,startDateStr=%s,endDateStr=%s, %s"
+ % (cfgID, startDateStr, endDateStr, disableWeekCfgIDDict[cfgID]))
+ continue
+
if actByWeek:
- startWeekday = int(startDateStr[1:])
- endWeekday = int(endDateStr[1:])
- startWeekDate = curDateTime + datetime.timedelta(days=(startWeekday - curWeekday))
- endWeekDate = curDateTime + datetime.timedelta(days=(endWeekday - curWeekday))
- startDateStr = "%d-%d-%d" % (startWeekDate.year, startWeekDate.month, startWeekDate.day)
- endDateStr = "%d-%d-%d" % (endWeekDate.year, endWeekDate.month, endWeekDate.day)
+ startDateStr, endDateStr = GameWorld.GetOperationActionDateStr(ipyData)
GameWorld.Log(" 星期X转化为日期: %s ~ %s" % (startDateStr, endDateStr))
curServerOpenDateTime = curDateTime + datetime.timedelta(days=(1 - openServerDay)) # 开服第一天的日期
@@ -594,10 +595,15 @@
def __GetOperationActionDisableWeekIpyDataInfo(actName, curDateTime, curServerActIpyDataList):
## 获取不可用的按星期X开启的配置数据信息,按星期X开启的 活动优先级小于按日期的,当有重叠时以日期的为准
- curWeekday = curDateTime.weekday() + 1 # 今天星期几, 1代表星期1
+ #curWeekday = curDateTime.weekday() + 1 # 今天星期几, 1代表星期1
actNumWeekYMDIpyDataInfo = {} # {actNum:[weekIpyDataList, ymdIpyDatList], ...}
+ disableWeekCfgIDDict = {} # {cfgID:[startDateStr, endDateStr], ...}
+
+ curDateTimeYmdStr = "%d-%d-%d" % (curDateTime.year, curDateTime.month, curDateTime.day)
+ curDateTimeYmd = GameWorld.ChangeStrToDatetime(curDateTimeYmdStr, ChConfig.TYPE_Time_YmdFormat)
for ipyData in curServerActIpyDataList:
+ cfgID = ipyData.GetCfgID()
startDateStr = ipyData.GetStartDate()
endDateStr = ipyData.GetEndDate()
actNum = GetOperationActNum(actName, ipyData)
@@ -613,11 +619,14 @@
# 按星期X的
if startDateStr.startswith("W"):
- startWeekday = int(startDateStr[1:])
- endWeekday = int(endDateStr[1:])
- startWeekDate = curDateTime + datetime.timedelta(days=(startWeekday - curWeekday))
- endWeekDate = curDateTime + datetime.timedelta(days=(endWeekday - curWeekday))
- weekIpyDataList.append([ipyData, startWeekDate, endWeekDate])
+ startDateStr, endDateStr = GameWorld.GetOperationActionDateStr(ipyData)
+ startWeekDate = GameWorld.ChangeStrToDatetime(startDateStr, ChConfig.TYPE_Time_YmdFormat)
+ endWeekDate = GameWorld.ChangeStrToDatetime(endDateStr, ChConfig.TYPE_Time_YmdFormat)
+ if startWeekDate > curDateTimeYmd or curDateTimeYmd > endWeekDate: # 还未开始的循环 or 已经强制结束的循环
+ disableWeekCfgIDDict[cfgID] = [startDateStr, endDateStr]
+ else:
+ weekIpyDataList.append([ipyData, startWeekDate, endWeekDate])
+
# 按日期的
elif startDateStr.count("-") == 2:
ymdIpyData = ipyData
@@ -641,7 +650,7 @@
ymdCfgID = ymdIpyData.GetCfgID()
actNumDisableWeekIpyDataInfo[actNum][cfgID] = [startWeekDate, endWeekDate, ymdCfgID, ymdStartDate, ymdEndDate]
- return actNumDisableWeekIpyDataInfo
+ return actNumDisableWeekIpyDataInfo, disableWeekCfgIDDict
def TransferOperationActDBKeyValue():
''' 服务器启动时调用
@@ -838,10 +847,16 @@
#限时抢购重置购买次数 本次活动每场不能重复
#dayIndex = sendMapServerMsgDict.get(ShareDefine.ActKey_DayIndex, 0)
PlayerStore.ResetFlashSaleBuyCnt(ipyData)
+ elif actName == ShareDefine.OperationActionName_GarbageSorting:
+ PlayerActGarbageSorting.OnActStart(actNum)
+ else:
+ if actName == ShareDefine.OperationActionName_GarbageSorting:
+ PlayerActGarbageSorting.OnActEnd(actNum)
+
else:
GameWorld.Log(" dbActID不变: dbActID=%s,curActID=%s" % (dbActID, curActID))
- if state and actName in ShareDefine.NeedWorldLVOperationActNameList:
+ if ipyData and actName in ShareDefine.NeedWorldLVOperationActNameList:
actWorldLV = PlayerDBGSEvent.GetDBGSTrig_ByKey(dbOperationActWorldLVKey)
sendMapServerMsgDict[ShareDefine.ActKey_WorldLV] = actWorldLV
GameWorld.Log(" 活动世界等级: actWorldLV=%s" % (actWorldLV))
@@ -853,7 +868,13 @@
elif actName == ShareDefine.OperationActionName_BossReborn:
if isReload and ipyData:
GameWorldBoss.SetBossRebornNeedPoint(True)
-
+
+ elif actName == ShareDefine.OperationActionName_HorsePetFeast:
+ if preState != state and state:
+ relatedID = "%s|%s" % (actName, actNum)
+ GameWorld.Log(" 骑宠盛宴开始: relatedID=%s" % (relatedID))
+ GameWorld.SendMapServerMsgEx(ShareDefine.Def_Notify_WorldKey_ActionBossRebornSign % relatedID, int(time.time()))
+
elif actName == ShareDefine.OperationActionName_FairyCeremony:
if isReload and ipyData:
PlayerFairyCeremony.Sync_OperationAction_FairyCeremony(ipyData)
@@ -891,11 +912,11 @@
return
if len(ipyData.GetStartTimeList()) != len(ipyData.GetEndTimeList()):
return
- openServerDay = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_ServerDay) + 1
+ startDateStr, endDateStr = GameWorld.GetOperationActionDateStr(ipyData)
multiExpRateInfo = ChPyNetSendPack.tagGCMultiExpRateInfo()
multiExpRateInfo.Clear()
- multiExpRateInfo.StartDate = GameWorld.GetOperationActionDateStr(ipyData.GetStartDate(), openServerDay)
- multiExpRateInfo.EndtDate = GameWorld.GetOperationActionDateStr(ipyData.GetEndDate(), openServerDay)
+ multiExpRateInfo.StartDate = startDateStr
+ multiExpRateInfo.EndtDate = endDateStr
multiExpRateInfo.ActivityTime = []
for i, startTime in enumerate(ipyData.GetStartTimeList()):
endTime = ipyData.GetEndTimeList()[i]
@@ -924,11 +945,11 @@
##多倍修行点活动信息通知
if not ipyData:
return
- openServerDay = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_ServerDay) + 1
+ startDateStr, endDateStr = GameWorld.GetOperationActionDateStr(ipyData)
multiRealmPointInfo = ChPyNetSendPack.tagGCMultiRealmPointInfo()
multiRealmPointInfo.Clear()
- multiRealmPointInfo.StartDate = GameWorld.GetOperationActionDateStr(ipyData.GetStartDate(), openServerDay)
- multiRealmPointInfo.EndtDate = GameWorld.GetOperationActionDateStr(ipyData.GetEndDate(), openServerDay)
+ multiRealmPointInfo.StartDate = startDateStr
+ multiRealmPointInfo.EndtDate = endDateStr
multiRealmPointInfo.Multiple = ipyData.GetMultiple()
multiRealmPointInfo.LimitLV = ipyData.GetLVLimit()
multiRealmPointInfo.LimitPoint = ipyData.GetPointLimit()
--
Gitblit v1.8.0