From 5bfc01acefbc48431229ee9e4e237ca527d9e4ac Mon Sep 17 00:00:00 2001 From: daixiawu Date: Fri, 10 Apr 2026 13:54:25 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B3=95=E5=85=B8=E6=95=88=E6=9E=9C=E5=AE=9E?= =?UTF-8?q?=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Unity/Assets/Scripts/TH1_Data/PlayerData.cs | 9 +++++++-- .../Assets/Scripts/TH1_Logic/Action/PlayerActionLogic.cs | 6 ++++-- .../Scripts/TH1_UI/View/Info/UIInfoHeroPickedRowMono.cs | 4 +++- 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/Unity/Assets/Scripts/TH1_Data/PlayerData.cs b/Unity/Assets/Scripts/TH1_Data/PlayerData.cs index 7f88e8000..2ca860cad 100644 --- a/Unity/Assets/Scripts/TH1_Data/PlayerData.cs +++ b/Unity/Assets/Scripts/TH1_Data/PlayerData.cs @@ -1568,13 +1568,18 @@ namespace RuntimeData } //获取英雄的升级费用值 - public int GetHeroFinishTaskCost(GiantType giant) + public int GetHeroFinishTaskCost(GiantType giant, float discount = 1f) { foreach (var heroType in HeroList) if (heroType.GiantType == giant) { if(GetHeroTask(giant,out var task)) - return task.GetFinishCost() * ((int)heroType.UnitLevel + 1) ; + { + var baseCost = task.GetFinishCost() * ((int)heroType.UnitLevel + 1); + if (discount < 1f && discount > 0f) + return Mathf.CeilToInt(baseCost * discount); + return baseCost; + } } return 0; } diff --git a/Unity/Assets/Scripts/TH1_Logic/Action/PlayerActionLogic.cs b/Unity/Assets/Scripts/TH1_Logic/Action/PlayerActionLogic.cs index 783eea553..4f7c40f15 100644 --- a/Unity/Assets/Scripts/TH1_Logic/Action/PlayerActionLogic.cs +++ b/Unity/Assets/Scripts/TH1_Logic/Action/PlayerActionLogic.cs @@ -558,7 +558,8 @@ namespace TH1_Logic.Action { var player = actionParams.PlayerData; var heroD = player.PlayerHeroData; - var cost = heroD.GetHeroFinishTaskCost(_actionId.GiantType); + player.GetHeroCostDiscount(actionParams.MapData, out var discount); + var cost = heroD.GetHeroFinishTaskCost(_actionId.GiantType, discount); var can = heroD.ForceFinishHeroTask(_actionId.GiantType); if (can) { @@ -590,7 +591,8 @@ namespace TH1_Logic.Action //Step #4 如果是玩家,检查文化值是否够 if (actionParams.PlayerData == actionParams.MapData.PlayerMap.SelfPlayerData) { - var cost = heroD.GetHeroFinishTaskCost(_actionId.GiantType); + player.GetHeroCostDiscount(actionParams.MapData, out var discount); + var cost = heroD.GetHeroFinishTaskCost(_actionId.GiantType, discount); if (cost > actionParams.PlayerData.PlayerCultureInfo.PlayerCulture) return false; } diff --git a/Unity/Assets/Scripts/TH1_UI/View/Info/UIInfoHeroPickedRowMono.cs b/Unity/Assets/Scripts/TH1_UI/View/Info/UIInfoHeroPickedRowMono.cs index 3716351e9..99dac0c65 100644 --- a/Unity/Assets/Scripts/TH1_UI/View/Info/UIInfoHeroPickedRowMono.cs +++ b/Unity/Assets/Scripts/TH1_UI/View/Info/UIInfoHeroPickedRowMono.cs @@ -193,7 +193,9 @@ namespace TH1_UI.View.Info var taskFinishedDesc = Table.Instance.TextDataAssets.HeroTaskFinishedDesc; var finished = task.CheckFinished(Main.MapData, Main.MapData.PlayerMap.SelfPlayerData); - var cost = task.GetFinishCost() * (giantLevel + 1); + var selfPlayer = Main.MapData.PlayerMap.SelfPlayerData; + selfPlayer.GetHeroCostDiscount(Main.MapData, out var discount); + var cost = selfPlayer.PlayerHeroData.GetHeroFinishTaskCost(giantType, discount); ForceFinishCost.text = cost.ToString(); ForceFinishCost.color = Color.red; ForceFinishButton.onClick.RemoveAllListeners();