From fbe9c6468d6e290562ef6ae0028f7829e1dda91d Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期日, 28 四月 2024 12:15:45 +0800
Subject: [PATCH] 10033 【后端】仙树升级系统及砍树产出规则(增加使用仙树升级减时道具,支持自动购买;)

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

diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCutTree.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCutTree.py
index 064e51e..9cdf7b6 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCutTree.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCutTree.py
@@ -293,6 +293,59 @@
     SyncTreeInfo(curPlayer)
     return
 
+#// B2 24 使用仙树升级减时物品 #tagCMUseTreeLVUPTimeItem
+#
+#struct    tagCMUseTreeLVUPTimeItem
+#{
+#    tagHead         Head;
+#    DWORD        UseCount;    // 使用个数
+#    BYTE        IsAutoBuy;    // 不足个数是否自动购买
+#};
+def OnUseTreeLVUPTimeItem(index, clientData, tick):
+    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
+    useCount = clientData.UseCount
+    isAutoBuy = clientData.IsAutoBuy
+    
+    playerID = curPlayer.GetPlayerID()
+    lvupState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TreeLVUPState)
+    LVUPRemainTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TreeLVUPRemainTime)
+    if not lvupState or not LVUPRemainTime:
+        GameWorld.DebugLog("仙树非升级中或剩余时间为0,不需要减少时间! lvupState=%s,LVUPRemainTime=%s" 
+                           % (lvupState, LVUPRemainTime), playerID)
+        return
+    
+    costItemID, reduceSeconds = IpyGameDataPY.GetFuncEvalCfg("TreeLVUP", 2)
+    GameWorld.DebugLog("使用仙树升级减时物品! costItemID=%s,reduceSeconds=%s,useCount=%s" % (costItemID, reduceSeconds, useCount), playerID)
+    if not costItemID or not useCount:
+        return
+    
+    costItemIndexList, bindCnt, unBindCnt = ItemCommon.GetPackItemBindStateIndexInfo(curPlayer, costItemID, useCount)
+    lackCnt = useCount - bindCnt - unBindCnt
+    if lackCnt > 0 and not isAutoBuy:
+        GameWorld.DebugLog("消耗道具不足! costItemID=%s,useCount=%s,bindCnt=%s,unBindCnt=%s,lackCnt=%s" 
+                           % (costItemID, useCount, bindCnt, unBindCnt, lackCnt), playerID)
+        return
+    
+    delCnt = useCount
+    if lackCnt > 0:
+        moneyType = IPY_GameWorld.TYPE_Price_Gold_Money
+        lackCost = ItemCommon.GetAutoBuyItemNeedGold({costItemID:lackCnt})
+        if lackCost <= 0:
+            return
+        GameWorld.DebugLog("自动购买道具: lackCnt=%s,moneyType=%s,lackCost=%s" % (lackCnt, moneyType, lackCost), playerID)
+        infoDict = {ChConfig.Def_Cost_Reason_SonKey:costItemID}
+        if not PlayerControl.PayMoney(curPlayer, moneyType, lackCost, ChConfig.Def_Cost_BuyStoreItem, infoDict):
+            return
+        delCnt -= lackCnt
+        
+    # 扣除消耗
+    if delCnt:
+        ItemCommon.DelCostItemByBind(curPlayer, costItemIndexList, bindCnt, unBindCnt, delCnt, "TreeLVUPTimeItem")
+        
+    reduceTime = reduceSeconds * useCount
+    ReduceTreeLVUPTime(curPlayer, reduceTime)
+    return
+
 def RefreshTreeLVUPTime(curPlayer):
     ## 刷新仙树升级剩余时间
     lvupState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TreeLVUPState)

--
Gitblit v1.8.0