From ee85c07264f0dbedb35c114e71b102dc2fc116f1 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期一, 25 一月 2021 18:27:45 +0800
Subject: [PATCH] 8710 【开发】【主干】【BT2】根据世界等级配置奖励(七日巡礼周狂欢支持按世界等级配置);

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerWeekParty.py |   56 ++++++++++++++++++++++++++++++++++++++++++--------------
 1 files changed, 42 insertions(+), 14 deletions(-)

diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerWeekParty.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerWeekParty.py
index cdb60de..5d56d19 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerWeekParty.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerWeekParty.py
@@ -67,6 +67,7 @@
     cfgID = actWeekPartyInfo.get(ShareDefine.ActKey_CfgID, 0)
     playerActID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_WeekPartyActID, 0, ChConfig.Def_PDictType_WeekParty)  # 玩家身上的活动ID
     playerWeekPartyID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_WeekPartyID, 0, ChConfig.Def_PDictType_WeekParty)  # 玩家身上的活动配置ID
+    playerWorldLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_WeekPartyWorldLV, 0, ChConfig.Def_PDictType_WeekParty)  # 玩家身上的活动世界等级
     # 活动ID 相同的话不处理
     if actID == playerActID:
         GameWorld.DebugLog("周狂欢活动ID不变,不处理!playerActID=%s" % playerActID, curPlayer.GetPlayerID())
@@ -75,14 +76,16 @@
         return
     # 未领取的奖励邮件发放
     if playerWeekPartyID:
-        __SendWeekPartyMail(curPlayer, playerWeekPartyID)
+        __SendWeekPartyMail(curPlayer, playerWeekPartyID, playerWorldLV)
         
     GameWorld.DebugLog('周狂欢活动重置!')
     curPlayer.ClearNomalDict(ChConfig.Def_PDictType_WeekParty)
     
-    GameWorld.DebugLog("周狂欢变更! state=%s,actID=%s,cfgID=%s,playerWeekPartyID=%s" % (state, actID, cfgID, playerWeekPartyID), playerID)
+    worldLV = actWeekPartyInfo.get(ShareDefine.ActKey_WorldLV, 0)
+    GameWorld.DebugLog("周狂欢变更! state=%s,actID=%s,cfgID=%s,playerWeekPartyID=%s,worldLV=%s" % (state, actID, cfgID, playerWeekPartyID, worldLV), playerID)
     PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_WeekPartyActID, actID, ChConfig.Def_PDictType_WeekParty)
     PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_WeekPartyID, cfgID, ChConfig.Def_PDictType_WeekParty)
+    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_WeekPartyWorldLV, worldLV, ChConfig.Def_PDictType_WeekParty)
     if state:
         CheckWeekPartyActionCnt(curPlayer,  False)
         SyncWeekPartyInfo(curPlayer)
@@ -90,8 +93,7 @@
         
     return True
 
-
-def __SendWeekPartyMail(curPlayer, cfgID):
+def __SendWeekPartyMail(curPlayer, cfgID, playerWorldLV):
     # 未领取的奖励邮件发放
     actBossIpyData = IpyGameDataPY.GetIpyGameData("ActWeekParty", cfgID)
     if not actBossIpyData:
@@ -112,10 +114,11 @@
             canGotCnt = (curTimes - gotTimes) / singleTimes
             if not canGotCnt:
                 continue
-            itemDict = __GetAwardItem(curPlayer, ipyData, canGotCnt)
+            itemDict = __GetAwardItem(curPlayer, ipyData, playerWorldLV, canGotCnt)
             GameWorld.AddDictValue(totalItemDict, itemDict)
     #积分奖励
-    for day, awardDict in actBossIpyData.GetPointAward().items():
+    pointAwardInfo = __GetPointAwardInfo(actBossIpyData.GetPointAward(), playerWorldLV)
+    for day, awardDict in pointAwardInfo.items():
         pointList = awardDict.keys()
         pointList.sort()
         for i, point in enumerate(pointList):
@@ -135,6 +138,8 @@
     PlayerControl.SendMailByKey('SecondWeekReward', [curPlayer.GetID()], totalItemList)
     return
 
+def __GetPointAwardInfo(cfgPointAwardInfo, worldLV):
+    return GameWorld.GetDictValueByRangeKey(cfgPointAwardInfo, worldLV, {})
 
 def AddWeekPartyActionCnt(curPlayer, actionID, addCnt=1, isAdd=True, isCompatible=False, isSync=True):
     '''增加周狂欢相关活动完成次数'''
@@ -238,6 +243,22 @@
 def GetWeekPartyActionAward(curPlayer, day, templateID):
     '''领取周狂欢活动奖励'''
     templateID = GameWorld.ToIntDef(templateID, 0)
+    actWeekPartyInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_WeekParty, {})
+    state = actWeekPartyInfo.get(ShareDefine.ActKey_State, 0)
+    cfgID = actWeekPartyInfo.get(ShareDefine.ActKey_CfgID, 0)
+    if not state or not cfgID:
+        return
+    actBossIpyData = IpyGameDataPY.GetIpyGameData("ActWeekParty", cfgID)
+    if not actBossIpyData:
+        return
+    templateIDList = actBossIpyData.GetTemplateID()
+    if not templateIDList:
+        return
+    if day >= len(templateIDList):
+        return
+    dayTempIDList = templateIDList[day]
+    if templateID not in dayTempIDList:
+        return
     ipyData = IpyGameDataPY.GetIpyGameData('WeekParty', templateID)
     if not ipyData:
         return
@@ -248,7 +269,7 @@
         return
     
     #给奖励
-    awardDict = __GetAwardItem(curPlayer, ipyData)
+    awardDict = __GetAwardItem(curPlayer, ipyData, actWeekPartyInfo.get(ShareDefine.ActKey_WorldLV, 0))
     # 检查背包
     needSpace = len(awardDict)
     packSpace = ItemCommon.GetItemPackSpace(curPlayer, IPY_GameWorld.rptItem, needSpace)
@@ -280,7 +301,8 @@
     curPoint = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_WeekPartyPoint % day, 0, ChConfig.Def_PDictType_WeekParty)
     if curPoint < getPoint:
         return
-    pointAwardDict = actBossIpyData.GetPointAward().get(day, {})
+    pointAwardInfo = __GetPointAwardInfo(actBossIpyData.GetPointAward(), actWeekPartyInfo.get(ShareDefine.ActKey_WorldLV, 0))
+    pointAwardDict = pointAwardInfo.get(day, {})
     pointList = pointAwardDict.keys()
     pointList.sort()
     if getPoint not in pointList:
@@ -304,9 +326,9 @@
     return
 
 
-def __GetAwardItem(curPlayer, ipyData, times=1):
+def __GetAwardItem(curPlayer, ipyData, worldLV, times=1):
     awardDict = {}
-    awardItemList = __GetAwardItemListByJob(curPlayer, ipyData)
+    awardItemList = __GetAwardItemListByJob(curPlayer, ipyData.GetReward(), worldLV)
     for itemID, itemCnt, isbind in awardItemList:
         if not itemID or not itemCnt:
             continue
@@ -314,10 +336,15 @@
         
     return awardDict
 
-def __GetAwardItemListByJob(curPlayer, ipyData):
+def __GetAwardItemListByJob(curPlayer, rewardItemInfo, worldLV):
     ## 根据职业获取对应奖励
-    rewardItemInfo = ipyData.GetReward()
+    if not rewardItemInfo:
+        return []
     if isinstance(rewardItemInfo, dict):
+        keyList = rewardItemInfo.keys()
+        # 配世界等级范围的
+        if isinstance(keyList[0], tuple) and len(keyList[0]) == 2:
+            return __GetAwardItemListByJob(curPlayer, GameWorld.GetDictValueByRangeKey(rewardItemInfo, worldLV), worldLV)
         return rewardItemInfo.get(curPlayer.GetJob(), [])
     return rewardItemInfo
 
@@ -379,7 +406,8 @@
     templateIDList = actBossIpyData.GetTemplateID()
     if not templateIDList:
         return
-    pointAwardDict = actBossIpyData.GetPointAward()
+    worldLV = actWeekPartyInfo.get(ShareDefine.ActKey_WorldLV, 0)
+    pointAwardDict = __GetPointAwardInfo(actBossIpyData.GetPointAward(), worldLV)
     openServerDay = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_ServerDay) + 1
     actInfo = ChPyNetSendPack.tagMCWeekPartyInfo()
     actInfo.Clear()
@@ -423,7 +451,7 @@
         tInfo.SingleTimes = ipyData.GetSingleTimes()
         tInfo.Point = ipyData.GetPoint()
         tInfo.ItemInfo = []
-        awardItemList = __GetAwardItemListByJob(curPlayer, ipyData)
+        awardItemList = __GetAwardItemListByJob(curPlayer, ipyData.GetReward(), worldLV)
         for itemID, itemCnt, isBind in awardItemList:
             awardItem = ChPyNetSendPack.tagMCWeekPartyItem()
             awardItem.ItemID = itemID

--
Gitblit v1.8.0