From fdf4e8f53d3a804c3809fe4f39ac043721bebb21 Mon Sep 17 00:00:00 2001 From: Ggafrik <906823881@qq.com> Date: Thu, 28 Aug 2025 23:38:53 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- excel/language.xlsx | Bin 27452 -> 27522 bytes .../Json/Language_En_US.json | 2 ++ .../Json/Language_Zh_CN.json | 2 ++ src/ReplicatedStorage/Tools/BattleUtils.luau | 24 ++++++++++++++++++ .../AttributeLvupShow.luau | 21 ++++++++++++--- .../UI/Windows/AttributeLvupWindow/init.luau | 14 +++++++++- 6 files changed, 59 insertions(+), 4 deletions(-) create mode 100644 src/ReplicatedStorage/Tools/BattleUtils.luau diff --git a/excel/language.xlsx b/excel/language.xlsx index c0b5a2632b71c858e416594c9f4a6e6a56db5360..637f9eb9deb60b2ae9b0bbd0e3cff6d09a5bae3b 100644 GIT binary patch delta 9722 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 M+G8VzTfGGS50#NzeE{o=8yaHfIL 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

CjRtE=-ltzOhAqc% z7#N;J_iP-eJ=}_TH1Z6TAN=?z(_y8KhE-JW;r`rr%S?cXh=2AULGUcqVLw1XmMp~o z?tp-SA%H%y{`b`bskCGw`S;o0|6j);f~*5xK`^Y?V67k`R&+%Fb4$;Hfq`zR`0IrZ z@w1{J`S)G~1B3fl6}k^f5Mn5Z2N}0wgxe8?D1nF}_#ke$Ju&E^3fwPoh>8RQq#wix z=OzI?q=w*Iv%$hZWUa;FQ{TfR7!oq8zJ-NjfzF8p1Km^wLkaWerv?@VMhy-I2K)c% jv}OnyvlfBXgJ9T*APAYkz(6w0$RM^hFOVcGo(KLH7R@&) diff --git a/src/ReplicatedStorage/Json/Language_En_US.json b/src/ReplicatedStorage/Json/Language_En_US.json index 1266631..2d71da9 100644 --- a/src/ReplicatedStorage/Json/Language_En_US.json +++ b/src/ReplicatedStorage/Json/Language_En_US.json @@ -46,6 +46,8 @@ {"id":1011,"text":"祝福:出现{0}属性的概率+{1}"}, {"id":1012,"text":"祝福:出现{0}技能的概率+{1}"}, {"id":1013,"text":"祝福:出现{0}晶石的概率+{1}"}, +{"id":1020,"text":"战力:{0}"}, +{"id":1021,"text":"所需战力:{0}"}, {"id":1200,"text":"该装备无符文槽位"}, {"id":20000,"text":"普攻"}, {"id":20001,"text":"剑气"}, diff --git a/src/ReplicatedStorage/Json/Language_Zh_CN.json b/src/ReplicatedStorage/Json/Language_Zh_CN.json index 1266631..2d71da9 100644 --- a/src/ReplicatedStorage/Json/Language_Zh_CN.json +++ b/src/ReplicatedStorage/Json/Language_Zh_CN.json @@ -46,6 +46,8 @@ {"id":1011,"text":"祝福:出现{0}属性的概率+{1}"}, {"id":1012,"text":"祝福:出现{0}技能的概率+{1}"}, {"id":1013,"text":"祝福:出现{0}晶石的概率+{1}"}, +{"id":1020,"text":"战力:{0}"}, +{"id":1021,"text":"所需战力:{0}"}, {"id":1200,"text":"该装备无符文槽位"}, {"id":20000,"text":"普攻"}, {"id":20001,"text":"剑气"}, diff --git a/src/ReplicatedStorage/Tools/BattleUtils.luau b/src/ReplicatedStorage/Tools/BattleUtils.luau new file mode 100644 index 0000000..7271af4 --- /dev/null +++ b/src/ReplicatedStorage/Tools/BattleUtils.luau @@ -0,0 +1,24 @@ +local BattleUtils = {} + +local ReplicatedStorage = game:GetService("ReplicatedStorage") +local JsonAttributes = require(ReplicatedStorage.Json.Attributes) +local Utils = require(ReplicatedStorage.Tools.Utils) + +function BattleUtils:GetPlayerBattleValue(player) + local character = player.Character + if not character then warn("character not found") return 0 end + + local attributes = character:FindFirstChild("Attributes") + if not attributes then warn("attributes not found") return 0 end + + local battleValue = 0 + for attributeKey, attributeValue in attributes:GetAttributes() do + local attributeData = Utils:GetSpecialKeyDataFromJson(JsonAttributes, "effectAttribute", attributeKey) + if not attributeData then continue end + battleValue += math.floor(attributeValue / attributeData.battleValue[1] * attributeData.battleValue[2]) + end + + return battleValue +end + +return BattleUtils \ No newline at end of file diff --git a/src/StarterPlayerScripts/UI/Windows/AttributeLvupWindow/AttributeLvupShow.luau b/src/StarterPlayerScripts/UI/Windows/AttributeLvupWindow/AttributeLvupShow.luau index 273b9b4..65ccfee 100644 --- a/src/StarterPlayerScripts/UI/Windows/AttributeLvupWindow/AttributeLvupShow.luau +++ b/src/StarterPlayerScripts/UI/Windows/AttributeLvupWindow/AttributeLvupShow.luau @@ -7,6 +7,7 @@ local Utils = require(ReplicatedStorage.Tools.Utils) local Localization = require(ReplicatedStorage.Tools.Localization) local JsonAttributesUpgrade = require(ReplicatedStorage.Json.AttributesUpgrade) local JsonAttributes = require(ReplicatedStorage.Json.Attributes) +local BattleUtils = require(ReplicatedStorage.Tools.BattleUtils) local RE_UpgradeAttributes = ReplicatedStorage.Events.RE_UpgradeAttributes @@ -18,6 +19,7 @@ function AttributeLvupShow:Init(data: table) self.Variables = { ["_imgIcon"] = 0, ["_tmpAttributeName"] = 0, + ["_tmpBattleValueRequire"] = 0, ["_tmpValue"] = 0, ["_tmpLv"] = 0, ["_btnUpgrade"] = 0, @@ -61,12 +63,16 @@ function AttributeLvupShow:Refresh() self.Variables._tmpLv.Text = "Lv." .. nowLv -- TODO:战斗力计算 - local nowBattleValue = 0 + local nowBattleValue = BattleUtils:GetPlayerBattleValue(LocalPlayer) local limitBattleValue if nowLv == 0 then limitBattleValue = attributesUpgradeData.battleValueLimit[1] else - limitBattleValue = attributesUpgradeData.battleValueLimit[1] + math.min(nowLv, self.Data.maxLv - 1) * attributesUpgradeData.battleValueLimit[2] + if self.Data.maxLv then + limitBattleValue = attributesUpgradeData.battleValueLimit[1] + math.min(nowLv, self.Data.maxLv - 1) * attributesUpgradeData.battleValueLimit[2] + else + limitBattleValue = attributesUpgradeData.battleValueLimit[1] + (nowLv - 1) * attributesUpgradeData.battleValueLimit[2] + end end -- 花费按钮显示 @@ -94,7 +100,14 @@ function AttributeLvupShow:Refresh() end -- 战力限制不让点 - if nowBattleValue < limitBattleValue then self.Variables._btnUpgrade.Interactable = false end + if nowBattleValue < limitBattleValue then + self.Variables._btnUpgrade.Interactable = false + self.Variables._tmpBattleValueRequire.TextColor3 = Color3.fromRGB(255, 55, 55) + else + self.Variables._tmpBattleValueRequire.TextColor3 = Color3.fromRGB(0, 0, 0) + end + + self.Variables._tmpBattleValueRequire.Text = Localization:FormatString(Localization:GetLanguageData(1021), limitBattleValue) end function AttributeLvupShow:OnInitFinish() @@ -109,6 +122,8 @@ function AttributeLvupShow:OnInitFinish() -- TODO: 检查货币是否充足 RE_UpgradeAttributes:FireServer(self.Data.id) end + self.TopUI:UpdateBattleValue() + self:Refresh() end) table.insert(self.Connections, con) diff --git a/src/StarterPlayerScripts/UI/Windows/AttributeLvupWindow/init.luau b/src/StarterPlayerScripts/UI/Windows/AttributeLvupWindow/init.luau index ecf4b69..046fa9c 100644 --- a/src/StarterPlayerScripts/UI/Windows/AttributeLvupWindow/init.luau +++ b/src/StarterPlayerScripts/UI/Windows/AttributeLvupWindow/init.luau @@ -1,10 +1,13 @@ --> Services local ReplicatedStorage = game:GetService("ReplicatedStorage") +local Players = game:GetService("Players") --> Dependencies local UIWindow = require(ReplicatedStorage.Base.UIWindow) local UIEnums = require(ReplicatedStorage.Base.UIEnums) local Utils = require(ReplicatedStorage.Tools.Utils) +local BattleUtils = require(ReplicatedStorage.Tools.BattleUtils) +local Localization = require(ReplicatedStorage.Tools.Localization) --> Components local AttributeLvupShow = require(script.AttributeLvupShow) @@ -12,6 +15,9 @@ local AttributeLvupShow = require(script.AttributeLvupShow) --> Json local JsonAttributesUpgrade = require(ReplicatedStorage.Json.AttributesUpgrade) +--> LocalPlayer +local LocalPlayer = Players.LocalPlayer + -------------------------------------------------------------------------------- local AttributeLvupWindow = {} @@ -28,6 +34,7 @@ function AttributeLvupWindow:Init(UIManager: table, Data: table?) ["__listBaseAttributes"] = 0, ["_tmpSpecialTitle"] = 0, ["_tmpBaseTitle"] = 0, + ["_tmpBattleValue"] = 0, ["__moneyCoin"] = 0, @@ -40,6 +47,10 @@ function AttributeLvupWindow:Init(UIManager: table, Data: table?) return self end +function AttributeLvupWindow:UpdateBattleValue() + self.Variables["_tmpBattleValue"].Text = Localization:FormatString(Localization:GetLanguageData(1020), BattleUtils:GetPlayerBattleValue(LocalPlayer)) +end + function AttributeLvupWindow:OnOpenWindow() UIWindow.OnOpenWindow(self) @@ -57,7 +68,8 @@ function AttributeLvupWindow:OnOpenWindow() self:SetData(data) - + self:UpdateBattleValue() + self.Variables["__listSpecialAttributes"]:AddComponent(AttributeLvupShow) self.Variables["__listBaseAttributes"]:AddComponent(AttributeLvupShow) self.Variables["__listSpecialAttributes"]:SetData(self.Data.Special)