From eae877b5a46fd8ae4ba36c80010d93fb6fec4d32 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期一, 25 八月 2025 20:14:14 +0800
Subject: [PATCH] 110 【主界面】仙树升级-服务端(增加每日免费减时支持;)

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTree.py         |   42 ++++++++++++++++++++-
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py           |   12 +++++-
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py           |    3 +
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py |    3 +
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py                  |    6 ++
 5 files changed, 60 insertions(+), 6 deletions(-)

diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
index dbb4529..fdcffe8 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -4181,6 +4181,8 @@
 Def_PDict_TreeLVUPState = "TreeLVUPState" # 仙树升级状态;0-未升级;1-升级中
 Def_PDict_TreeLVUPRemainTime = "TreeLVUPRemainTime" # 仙树升级剩余时间,秒
 Def_PDict_TreeLVUPRefreshTime = "TreeLVUPRefreshTime" # 仙树升级上次刷新时间戳
+Def_PDict_TreeFreeTimeCnt = "TreeFreeTimeCnt" # 今日已领取免费减时次数,过天重置
+Def_PDict_TreeFreeTimeLast = "TreeFreeTimeLast" # 今日上次领取免费减时时间戳,过天重置
 
 #任务,每个任务组有且仅有一个进行中的任务
 Def_PDict_TaskIDLast = "TaskIDLast_%s" # 上一次完成的任务ID,参数(任务组)
@@ -5232,7 +5234,9 @@
 Def_RewardType_LunhuidianAward, # 轮回殿奖励 78
 Def_RewardType_RechargeDayAward, # 累充每日奖励 79
 Def_RewardType_FamilyGCZ, # 仙盟攻城战 80
-)= range(81)
+Def_RewardType_ADAward, # 广告奖励 81
+Def_RewardType_TreeFreeTime, # 仙树免费减时 82
+)= range(83)
 
 #boss复活相关活动定义
 BossRebornActIDList = (
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
index f393934..143b4cf 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
@@ -43396,6 +43396,8 @@
                   ("TreeLV", c_ubyte),    # 当前仙树等级
                   ("LVUPState", c_ubyte),    # 0-非升级中;1-升级中
                   ("LVUPRemainTime", c_int),    # 升级剩余时间,秒;当升级中且倒计时为0时可发送B223执行升级包进行升级
+                  ("FreeTimeCnt", c_ubyte),    # 今日已免费减时次数
+                  ("FreeTimeLast", c_int),    # 上次免费减时时间戳
                   ]
 
     def __init__(self):
@@ -43415,6 +43417,8 @@
         self.TreeLV = 0
         self.LVUPState = 0
         self.LVUPRemainTime = 0
+        self.FreeTimeCnt = 0
+        self.FreeTimeLast = 0
         return
 
     def GetLength(self):
@@ -43429,14 +43433,18 @@
                                 SubCmd:%s,
                                 TreeLV:%d,
                                 LVUPState:%d,
-                                LVUPRemainTime:%d
+                                LVUPRemainTime:%d,
+                                FreeTimeCnt:%d,
+                                FreeTimeLast:%d
                                 '''\
                                 %(
                                 self.Cmd,
                                 self.SubCmd,
                                 self.TreeLV,
                                 self.LVUPState,
-                                self.LVUPRemainTime
+                                self.LVUPRemainTime,
+                                self.FreeTimeCnt,
+                                self.FreeTimeLast
                                 )
         return DumpString
 
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
index 2b212c8..11ada8d 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
@@ -3441,6 +3441,9 @@
     # 挂机奖励
     elif rewardType == ChConfig.Def_RewardType_Guaji:
         PlayerGuaji.OnGetGuajiAward(curPlayer, dataEx)
+    # 仙树免费减时
+    elif rewardType == ChConfig.Def_RewardType_TreeFreeTime:
+        PlayerTree.FreeReduceTreeLVTime(curPlayer)
     # 每日免费直购礼包
     elif rewardType == ChConfig.Def_RewardType_DayFreeGoldGift:
         PlayerDailyGiftbag.OnGetDailyFreeGiftbag(curPlayer)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py
index afcdfa2..dee4d3b 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py
@@ -106,6 +106,7 @@
 import PlayerViewCache
 import PlayerMail
 import PlayerHero
+import PlayerTree
 
 import datetime
 import time
@@ -280,7 +281,7 @@
         #------------------------------------------------------------------------------ 
         
         PlayerCoin.OnDay(curPlayer)
-        
+        PlayerTree.PlayerOnDay(curPlayer)
         #成就
         PlayerSuccess.SuccOnDay(curPlayer)
         
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTree.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTree.py
index e104f94..ae4a7e6 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTree.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTree.py
@@ -35,6 +35,11 @@
     SyncTreeInfo(curPlayer)
     return
 
+def PlayerOnDay(curPlayer):
+    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TreeFreeTimeCnt, 0)
+    SyncTreeInfo(curPlayer)
+    return
+
 #// B2 23 仙树升级 #tagCMTreeLVUP
 #
 #struct    tagCMTreeLVUP
@@ -152,7 +157,7 @@
                        % (updLVUPRemainTime, treeLV, LVUPRemainTime, passSeconds, lastRefreshTime), curPlayer.GetPlayerID())
     return
 
-def ReduceTreeLVUPTime(curPlayer, reduceTime):
+def ReduceTreeLVUPTime(curPlayer, reduceTime, isNotify=True):
     ## 减少仙树升级剩余时间,可能是使用道具或其他功能等
     RefreshTreeLVUPTime(curPlayer)
     lvupState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TreeLVUPState)
@@ -165,8 +170,39 @@
     PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TreeLVUPRemainTime, updLVUPRemainTime)
     GameWorld.DebugLog("减少仙树升级剩余时间! updLVUPRemainTime=%s,LVUPRemainTime=%s,reduceTime=%s" 
                        % (updLVUPRemainTime, LVUPRemainTime, reduceTime), curPlayer.GetPlayerID())
-    SyncTreeInfo(curPlayer)
+    if isNotify:
+        SyncTreeInfo(curPlayer)
     return True
+
+def FreeReduceTreeLVTime(curPlayer):
+    ## 仙树免费减时
+    dailyFreeCntMax = IpyGameDataPY.GetFuncCfg("TreeLVUP", 3)
+    freeCDSeconds = IpyGameDataPY.GetFuncCfg("TreeLVUP", 4) * 60 # 免费CD,秒
+    
+    freeTimeCntToday = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TreeFreeTimeCnt)
+    freeTimeLast = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TreeFreeTimeLast)
+    
+    if dailyFreeCntMax and freeTimeCntToday >= dailyFreeCntMax:
+        GameWorld.DebugLog("已达今日免费仙树减时次数! freeTimeCntToday=%s >= %s" % (freeTimeCntToday, dailyFreeCntMax))
+        return
+    
+    curTime = int(time.time())
+    if freeCDSeconds and freeTimeLast and (curTime - freeTimeLast) < freeCDSeconds:
+        GameWorld.DebugLog("免费仙树减时CD未到! passSeconds=%s < %s" % (curTime - freeTimeLast, freeCDSeconds))
+        return
+    
+    reduceTime = IpyGameDataPY.GetFuncCfg("TreeLVUP", 5) * 60
+    if reduceTime <= 0:
+        return
+    
+    if not ReduceTreeLVUPTime(curPlayer, reduceTime, False):
+        return
+    
+    freeTimeCntToday += 1
+    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TreeFreeTimeCnt, freeTimeCntToday)
+    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TreeFreeTimeLast, curTime)
+    SyncTreeInfo(curPlayer)
+    return
 
 def DoTreeLVUP(curPlayer):
     ## 执行仙树升级
@@ -202,5 +238,7 @@
     clientPack.TreeLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TreeLV)
     clientPack.LVUPState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TreeLVUPState)
     clientPack.LVUPRemainTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TreeLVUPRemainTime)
+    clientPack.FreeTimeCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TreeFreeTimeCnt)
+    clientPack.FreeTimeLast = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TreeFreeTimeLast)
     NetPackCommon.SendFakePack(curPlayer, clientPack)
     return

--
Gitblit v1.8.0