From 5a0157d6388bf849498760563c57014be8b17122 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期三, 12 三月 2025 14:55:51 +0800
Subject: [PATCH] 10416 【英文】【bt】【GM】【砍树】登录基金和幻境基金 完成后可以重置购买

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerZhanling.py |   57 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 57 insertions(+), 0 deletions(-)

diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerZhanling.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerZhanling.py
index 809079f..ad3e140 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerZhanling.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerZhanling.py
@@ -50,6 +50,7 @@
 
 def OnPlayerLogin(curPlayer):
     for zhanlingType in ZhanlingTypeList:
+        CheckZhanlingAllFinish(curPlayer, zhanlingType) # 因为是后面加的功能,为了处理线上玩家及兼容之后可能修改配置等,故上线默认检查一次
         if zhanlingType == ZhanlingType_Login:
             value1 = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ZhanlingValue1 % zhanlingType)
             if not value1:
@@ -57,6 +58,23 @@
                 PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ZhanlingValue1 % zhanlingType, firstLoginTime)
                 GameWorld.DebugLog("设置登录战令首次登录时间: %s" % firstLoginTime, curPlayer.GetPlayerID())
         SyncZhanlingInfo(curPlayer, zhanlingType)
+    return
+
+def OnDay(curPlayer):
+    resetZhanlingDict = IpyGameDataPY.GetFuncEvalCfg("Zhanling", 4, {})
+    for zhanlingTypeStr, cdDays in resetZhanlingDict.items():
+        zhanlingType = int(zhanlingTypeStr)
+        finishTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ZhanlingFinishTime % zhanlingType)
+        if not finishTime:
+            GameWorld.DebugLog("战令奖励未全部领取,不重置! zhanlingType=%s" % zhanlingType, curPlayer.GetPlayerID())
+            continue
+        passDays = GameWorld.GetDiff_Day(int(time.time()), finishTime)
+        if passDays < cdDays:
+            GameWorld.DebugLog("战令重置CD天未到,不重置! zhanlingType=%s,passDays=%s < %s, finishTime=%s" 
+                               % (zhanlingType, passDays, cdDays, GameWorld.ChangeTimeNumToStr(finishTime)), curPlayer.GetPlayerID())
+            continue
+        ResetZhanling(curPlayer, int(zhanlingTypeStr))
+        
     return
 
 def OnActiviteByCTGID(curPlayer, ctgID):
@@ -109,6 +127,10 @@
     elif zhanlingType in ZhanlingValue1TypeList:
         backValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ZhanlingValue1 % zhanlingType)
         PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ZhanlingValue1 % zhanlingType, 0)
+    elif zhanlingType == ZhanlingType_Login:
+        firstLoginTime = int(time.time())
+        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ZhanlingValue1 % zhanlingType, firstLoginTime)
+        GameWorld.DebugLog("重置登录战令首次登录时间: %s" % firstLoginTime, curPlayer.GetPlayerID())
     GameWorld.Log("重置战令: zhanlingType=%s,backValue=%s,state=(%s to %s) stateH=(%s to %s)" 
                   % (zhanlingType, backValue, state, updState, stateH, updStateH), curPlayer.GetPlayerID())
     
@@ -119,6 +141,8 @@
         PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ZhanlingReward % (zhanlingType, keyNum), 0)
         PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ZhanlingRewardH % (zhanlingType, keyNum), 0)
         PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ZhanlingRewardFree % (zhanlingType, keyNum), 0)
+        
+    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ZhanlingFinishTime % zhanlingType, 0)
     SyncZhanlingInfo(curPlayer, zhanlingType)
     return
 
@@ -267,7 +291,39 @@
         ItemControler.GivePlayerItem(curPlayer, itemID, itemCount, isAuctionItem, [IPY_GameWorld.rptItem])
     ItemControler.NotifyGiveAwardInfo(curPlayer, itemList, "Zhanling")
     
+    if str(zhanlingType) in IpyGameDataPY.GetFuncEvalCfg("Zhanling", 4, {}):
+        CheckZhanlingAllFinish(curPlayer, zhanlingType)
     return
+
+def CheckZhanlingAllFinish(curPlayer, zhanlingType):
+    ## 判断战令类型是否所有奖励已领取
+    
+    if curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ZhanlingFinishTime % zhanlingType):
+        return True
+    
+    ipyDataList = IpyGameDataPY.GetIpyGameDataByCondition("Zhanling", {"ZhanlingType":zhanlingType}, True)
+    if not ipyDataList:
+        return
+    
+    for ipyData in ipyDataList:
+        rewardIndex = ipyData.GetRewardIndex()
+        
+        if ipyData.GetZLRewardItemListH() and not GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_PDict_ZhanlingRewardH, rewardIndex, True, [zhanlingType]):
+            GameWorld.DebugLog("还有高级战令奖励未领取! zhanlingType=%s,rewardIndex=%s" % (zhanlingType, rewardIndex), curPlayer.GetPlayerID())
+            return
+        
+        if ipyData.GetZLRewardItemList() and not GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_PDict_ZhanlingReward, rewardIndex, True, [zhanlingType]):
+            GameWorld.DebugLog("还有普通战令奖励未领取! zhanlingType=%s,rewardIndex=%s" % (zhanlingType, rewardIndex), curPlayer.GetPlayerID())
+            return
+        
+        if ipyData.GetFreeRewardItemList() and not GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_PDict_ZhanlingRewardFree, rewardIndex, True, [zhanlingType]):
+            GameWorld.DebugLog("还有免费战令奖励未领取! zhanlingType=%s,rewardIndex=%s" % (zhanlingType, rewardIndex), curPlayer.GetPlayerID())
+            return
+        
+    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ZhanlingFinishTime % zhanlingType, int(time.time()))
+    SyncZhanlingInfo(curPlayer, zhanlingType)
+    GameWorld.DebugLog("设置战令已全部领取完毕! zhanlingType=%s" % (zhanlingType), curPlayer.GetPlayerID())
+    return True
 
 def SyncZhanlingInfo(curPlayer, zhanlingType, ipyDataList=None):
     
@@ -292,6 +348,7 @@
     clientPack.ZhanlingType = zhanlingType
     clientPack.IsActivite = 1 if curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ZhanlingState)&pow(2, zhanlingType) else 0
     clientPack.IsActiviteH = 1 if curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ZhanlingStateH)&pow(2, zhanlingType) else 0
+    clientPack.AllFinishTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ZhanlingFinishTime % zhanlingType)
     clientPack.Value1 = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ZhanlingValue1 % zhanlingType)
     clientPack.RewardList = rewardList
     clientPack.RewardCount = len(clientPack.RewardList)

--
Gitblit v1.8.0