From 4048a488f8877da8d27c4280b17d86fc131f711b Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期三, 18 十二月 2024 17:30:42 +0800
Subject: [PATCH] 10297 【越南】【英语】【砍树】【tqxbqy】轮回殿-服务端(活动结束邮件补发未领取奖励)
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActLunhuidian.py | 72 +++++++++++++++++++++++++++++++++++-
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py | 1
2 files changed, 71 insertions(+), 2 deletions(-)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
index a231a7b..183311e 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -4217,6 +4217,7 @@
#轮回殿活动
Def_PDict_ActLunhuidianID = "ActLunhuidianID_%s" # 玩家身上的活动ID,唯一标识,取活动开始日期time值,参数:(活动编号)
+Def_PDict_ActLunhuidianSet = "ActLunhuidianSet_%s_%s" # 活动参与设定值,参数:(活动编号, 保存编号)
Def_PDict_ActLunhuidianValue = "ActLunhuidianValue_%s_%s" # 活动当前累计值,参数:(活动编号, 轮回类型)
Def_PDict_ActLunhuidianRound = "ActLunhuidianRound_%s_%s" # 活动当前轮次,参数:(活动编号, 轮回类型)
Def_PDict_ActLunhuidianAward = "ActLunhuidianAward_%s_%s" # 领奖记录,按奖励索引二进制记录是否已领取,参数:(活动编号, 轮回类型)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActLunhuidian.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActLunhuidian.py
index c1135d0..9bc3a02 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActLunhuidian.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActLunhuidian.py
@@ -85,7 +85,7 @@
return
GameWorld.DebugLog("轮回殿活动重置! actNum=%s,cfgID=%s,actID=%s,playerActID=%s,state=%s"
% (actNum, cfgID, actID, playerActID, state), playerID)
-
+ OnGiveUngetAward(curPlayer, actNum)
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ActLunhuidianID % actNum, actID)
if state:
@@ -96,7 +96,8 @@
ctgIDDict = ipyData.GetRoundCTGIDInfo()
shopTypeDict = ipyData.GetRoundShopTypeInfo()
resetCTGIDList, resetShopTypeList = [], []
- for roundType in roundSetDict.keys():
+ for roundType, roundSet in roundSetDict.items():
+ SaveActRoundSet(curPlayer, actNum, roundType, roundSet)
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ActLunhuidianValue % (actNum, roundType), 0)
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ActLunhuidianRound % (actNum, roundType), 1) # 从第1轮开始
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ActLunhuidianAward % (actNum, roundType), 0)
@@ -111,6 +112,73 @@
return True
+def SaveActRoundSet(curPlayer, actNum, roundType, roundSet):
+ ## 保存参与的活动轮回设定,用于活动结束邮件补发奖励
+ # 单次actNum活动最多支持同时开x个轮回类型,一般同个时间的轮回活动最多同时开2个或3个最多了
+ for num in range(20):
+ if curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ActLunhuidianSet % (actNum, num)):
+ continue
+ roundMax = GetRoundSetValue(roundSet, RoundSetIndex_RoundMax)
+ setValue = roundType * 100 + roundMax
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ActLunhuidianSet % (actNum, num), setValue)
+ GameWorld.DebugLog(" 保存轮回殿参与值! actNum=%s,roundType=%s,roundMax=%s,setValue=%s"
+ % (actNum, roundType, roundMax, setValue), curPlayer.GetPlayerID())
+ break
+ return
+
+def OnGiveUngetAward(curPlayer, actNum):
+ ## 补发未领取奖励
+ for num in range(20):
+ setValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ActLunhuidianSet % (actNum, num))
+ if not setValue:
+ continue
+ __DoGiveUngetAwardByMail(curPlayer, actNum, setValue)
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ActLunhuidianSet % (actNum, num), 0)
+ return
+
+def __DoGiveUngetAwardByMail(curPlayer, actNum, setValue):
+ playerID = curPlayer.GetPlayerID()
+ roundType = setValue / 100
+ roundMax = setValue % 100
+ curRound = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ActLunhuidianRound % (actNum, roundType))
+ curValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ActLunhuidianValue % (actNum, roundType))
+ awardState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ActLunhuidianAward % (actNum, roundType))
+ awardIpyDataList = IpyGameDataPY.GetIpyGameDataList("ActLunhuidianAward", roundType)
+ if not awardIpyDataList:
+ return
+
+ mailItemList = []
+ doRound = curRound
+ doValue = curValue
+ doAwardState = awardState
+ while doValue > 0 and doRound <= roundMax:
+ GameWorld.DebugLog("处理补发轮回奖励: doRound=%s,doValue=%s,doAwardState=%s" % (doRound, doValue, doAwardState), playerID)
+ roundValueMax = 0
+ for awardIpyData in awardIpyDataList:
+ needV = awardIpyData.GetNeedValue()
+ aIndex = awardIpyData.GetAwardIndex()
+ awardItemList = awardIpyData.GetAwardItemList()
+ roundValueMax = max(roundValueMax, needV)
+ if doAwardState&pow(2, aIndex):
+ GameWorld.DebugLog(" 已领取该奖励: doRound=%s,aIndex=%s,needV=%s" % (doRound, aIndex, needV), playerID)
+ continue
+ if doValue < needV:
+ GameWorld.DebugLog(" 所需值不达标: doRound=%s,aIndex=%s,needV=%s > %s" % (doRound, aIndex, needV, doValue), playerID)
+ continue
+ mailItemList += awardItemList
+ GameWorld.DebugLog(" 未领取补发奖: doRound=%s,aIndex=%s,needV=%s,%s" % (doRound, aIndex, needV, awardItemList), playerID)
+
+ doRound += 1
+ doValue -= roundValueMax
+ doAwardState = 0
+
+ if not mailItemList:
+ return
+ GameWorld.Log("处理补发轮回奖励完毕: actNum=%s,roundType=%s,roundMax=%s,curRound=%s,curValue=%s,awardState=%s,mailItemList=%s"
+ % (actNum, roundType, roundMax, curRound, curValue, awardState, mailItemList), playerID)
+ PlayerControl.SendMailByKey("LunhuidianUnget", [playerID], mailItemList)
+ return
+
def GetRoundSetValue(roundSet, setIndex): return roundSet[setIndex] if len(roundSet) > setIndex else 0
def AddLunhuidianValue(curPlayer, awardType, awardTypeValue, addValue):
--
Gitblit v1.8.0