From 64bd5a764af43a7c0214da424204ee08776490de Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期一, 12 八月 2024 19:20:59 +0800
Subject: [PATCH] 10241 【越南】【砍树】【主干】【港台】古宝养成(增加古宝养成活动;任务活动增加古宝寻宝任务类型,任务支持配置循环轮次;)

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActTask.py |   49 ++++++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 46 insertions(+), 3 deletions(-)

diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActTask.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActTask.py
index 27088cf..62a8904 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActTask.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActTask.py
@@ -72,6 +72,7 @@
         __ResetTaskValueByTemplateID(curPlayer, actNum, lastTempID)
         
     PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ActTaskID % actNum, actID)
+    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ActTaskRound % actNum, 0)
     
     if state:
         ipyData = IpyGameDataPY.GetIpyGameData("ActTask", cfgID)
@@ -98,6 +99,7 @@
         PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ActTaskAward % (actNum, keyNum), 0)
         
     PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ActTaskTempID % actNum, templateID)
+    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ActTaskRound % actNum, 1)
     return
 
 def __GetTaskAwardRecordKeyNumMax(templateID, defKeyNum=2):
@@ -161,6 +163,7 @@
         ipyData = IpyGameDataPY.GetIpyGameData("ActTask", cfgID)
         if not ipyData:
             continue
+        roundMax = ipyData.GetRoundMax()
         templateID = ipyData.GetTemplateID()
         
         taskIpyDataList = IpyGameDataPY.GetIpyGameDataList("ActTaskTemp", templateID)
@@ -176,6 +179,8 @@
                 needValueMax = needValue
                 
         curValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ActTaskValue % (actNum, taskType))
+        if roundMax > 1:
+            needValueMax *= roundMax
         if curValue >= needValueMax:
             continue
         
@@ -205,6 +210,7 @@
     ipyData = IpyGameDataPY.GetIpyGameData("ActTask", cfgID)
     if not ipyData:
         return
+    roundMax = ipyData.GetRoundMax()
     templateID = ipyData.GetTemplateID()
     
     taskIpyDataList = IpyGameDataPY.GetIpyGameDataList("ActTaskTemp", templateID)
@@ -240,13 +246,48 @@
     
     GameWorld.SetDictValueByBit(curPlayer, ChConfig.Def_PDict_ActTaskAward, awardIndex, 1, True, [actNum])
     
-    Sync_ActTaskPlayerInfo(curPlayer, actNum)
-    
-    GameWorld.DebugLog("领取任务活动奖励! actNum=%s,cfgID=%s,taskID=%s,awardItemList=%s" % (actNum, cfgID, taskID, awardItemList))
+    roundNum = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ActTaskRound % actNum)
+    GameWorld.DebugLog("领取任务活动奖励! actNum=%s,cfgID=%s,roundNum=%s,taskID=%s,awardItemList=%s" % (actNum, cfgID, roundNum, taskID, awardItemList))
     
     for itemID, itemCount, isAuctionItem in awardItemList:
         ItemControler.GivePlayerItem(curPlayer, itemID, itemCount, isAuctionItem, [IPY_GameWorld.rptItem], event=["ActTask", False, {}])
         
+    # 检查进入下一轮
+    if roundMax > 1 and roundNum < roundMax:
+        roundFinish = True
+        taskMaxValueInfo = {}
+        for taskIpyData in taskIpyDataList:
+            rTaskID = taskIpyData.GetTaskID()
+            rTaskType = taskIpyData.GetTaskType()
+            rNeedValue = taskIpyData.GetNeedValue()
+            if rNeedValue > taskMaxValueInfo.get(rTaskType, 0):
+                taskMaxValueInfo[rTaskType] = rNeedValue
+            rAwardIndex = rTaskID
+            if not GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_PDict_ActTaskAward, rAwardIndex, True, [actNum]):
+                roundFinish = False
+                GameWorld.DebugLog("还有任务未领取,不进入下一轮次! actNum=%s,cfgID=%s,roundNum=%s,rTaskID=%s" % (actNum, cfgID, roundNum, rTaskID))
+                break
+            
+        if roundFinish:
+            nextRound = roundNum + 1
+            GameWorld.DebugLog("本轮任务领取完毕,进入下一轮! nextRound=%s" % (nextRound))
+            for rTaskType, rMaxValue in taskMaxValueInfo.items():
+                curValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ActTaskValue % (actNum, taskType))
+                updValue = max(0, curValue - rMaxValue)
+                PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ActTaskValue % (actNum, taskType), updValue)
+                GameWorld.DebugLog("    更新新一轮任务值! rTaskType=%s,rMaxValue=%s,curValue=%s,updValue=%s" 
+                                   % (rTaskType, rMaxValue, curValue, updValue))
+            Sync_ActTaskPlayerValueInfo(curPlayer, actNum, taskMaxValueInfo.keys())
+            
+            # 任务领奖记录
+            taskAwardKeyNum = __GetTaskAwardRecordKeyNumMax(templateID, 10)
+            for keyNum in range(taskAwardKeyNum + 1):
+                PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ActTaskAward % (actNum, keyNum), 0)
+            GameWorld.DebugLog("    重置新一轮领奖记录! taskAwardKeyNum=%s" % (taskAwardKeyNum))
+            
+            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ActTaskRound % actNum, nextRound)
+            
+    Sync_ActTaskPlayerInfo(curPlayer, actNum)
     return
 
 def Sync_ActTaskPlayerInfo(curPlayer, actNum):
@@ -256,6 +297,7 @@
     
     clientPack = ChPyNetSendPack.tagMCActTaskPlayerInfo()
     clientPack.ActNum = actNum
+    clientPack.RoundNum = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ActTaskRound % actNum)
     clientPack.AwardRecordList = []
     for keyNum in range(keyNumMax + 1):
         clientPack.AwardRecordList.append(curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ActTaskAward % (actNum, keyNum)))
@@ -305,6 +347,7 @@
     actPack.IsDayReset = ipyData.GetIsDayReset()
     actPack.ResetType = ipyData.GetResetType()
     actPack.LimitLV = ipyData.GetLVLimit()
+    actPack.RoundMax = ipyData.GetRoundMax()
     
     actPack.TaskList = []
     for taskIpyData in taskIpyDataList:

--
Gitblit v1.8.0