From be1cd9fd418ed31c5a59ed82f1a14dd18c064611 Mon Sep 17 00:00:00 2001 From: gechangfu Date: Thu, 28 Aug 2025 19:35:27 +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/attribute.xlsx | Bin 14046 -> 14049 bytes excel/cha.xlsx | Bin 15301 -> 15248 bytes .../Json/AttributesUpgrade.json | 11 +- src/ServerStorage/Proxy/EquipmentProxy.luau | 7 +- src/StarterPlayerScripts/UI/UIManager.luau | 3 + .../AttributeLvupShow.luau | 12 ++ .../UI/Windows/ChaWindow/WearingShowOne.luau | 108 ++++++++++++++++++ .../UI/Windows/ChaWindow/init.luau | 12 +- .../Windows/EquipmentDetailWindow/init.luau | 11 +- 9 files changed, 148 insertions(+), 16 deletions(-) create mode 100644 src/StarterPlayerScripts/UI/Windows/ChaWindow/WearingShowOne.luau diff --git a/excel/attribute.xlsx b/excel/attribute.xlsx index 197dc31d5a7dd9ccd2aa1f5a5efceb06873b3f89..bdbc6d1c6679eb0d42db511e7ae35bdaaf21385e 100644 GIT binary patch delta 1963 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 delta 1971 zcmV;k2Tb_kZQgCL-3EUdHg{H10{{Se2mk;N0001ZY%h0ja%*C5Z)+}iZEUPnYj2x8 z82$cA`wxik6q^7^Q0dfg(Hp6qs;+ClRH__sidDeOn1*WFf8S%1>oQGQHHT0`gEY-2QmIUprcshsCOMNd z56v+&`HJp3K$Ym4S;tBkbtazUoA$-l&Nl)Yko(J0Qc-^sNh4lMu-cmX-`YxJM+FBH z8@Kdp#{`A50~P`~P?9Vli}r@d!stX9nsM+b7X3Ug=>sJVuODfj(eiQ6dgR#We_%e6 zDeX4s9XJi|KWhhSBG?%0MhXMo=kXN;`7?QikV9hg^@*HAO!4Tc&P0HpzTxS}jgS{v zaWp}eJDGna*3`$B7Iqz!;K)near_;`2tUX;>146arh*Pl7gBdLbWQrr2u4B2@*RzD zX#H5K{;AlEeOH3jy>-v%s@>&XHI4p()j3~)}?>A?q<%L0ruMJ`Mk`u?Zv zxd6u4o2X9kw_+BW2aMu@Q3{WxiUUUW9wmK40yTeK8?|=zrIdm#ItjP0q5D;!;R+Ig z+DFWDtaR(#VJP4RL!8hylSPc!IcbTVHaJF(bTn2 zGV&m=Q^%UPBgcx|*h#!`5+^fHcbIiJ~@hIL4>>$Bzu7m)h%7lNDD^P zL9l;;?>^a?H<_UkP;^tAS}vX(#%T_!-of^u)>O{fQH!PuF+XC(gY}?w%e}ZKPkS z9kQWH?IC-U!;2pP009600{~D<0|XQR1^}~I3Qz(G##W*~j|%_*E|akgBY)a35Qgt7 z^&KqVlaO#sL|CB(v`D>Jb$hrr&IBytIJM2GRo}g1hr?D#Te=c3#_@df|6@C&hl4E1 z4zv-f%4ig{DS?WsTvV%!e*H3U4Jk2}RXHnF1sOepp%3GaA4YqnH)aiB2@)!k(Y3X8 z8it0iK{6Al8Y+BJC@q=Azkhlanpy+PeUdE0xZUoDl8K5ogjCj)OcmcssB8n# zP%?}9&05svOq2W`oMd{lty^5l8WBrT3VZZWN+eGgt4e9MEYbHN>M~9a8b2|9JLfWf z{-%-?Tq~mr8z4DsG~e1!!X#w;Lb~;T7bfb48g{~M;1w0WPg2youz%t!tn*G-{{nOE z(&<*@8T~bk=96iA^4RLnl76c@o6TCoWHxE_deLx_#Djh(8UCi@Q7&+YohzcD$mk?W z7u_BW$0L7$z6scyS7Tz?@&!uZ7O+S}i94T5r8aKi0;k%DtXT!*_)_C8XB0JAReyrQ zK0;Yyfi5MCTd{*@Tz{6)rLtB@_uStAi&KSGKcVs(d?_c+G5=oNKpN;%ACrH012{zS z;YI!H@!84T-U*}=!X$n6^QqabpCB^Wz*{;@}VYtZ8N(}EMG0bnyc0660rko*?_OL+js6CfT0 zgZl+w<9t5Gvw*k}@P_KaDGB2>spG1?k%VtJUkT$`DK_<=N<-iBKLE1`4|pF14)#P= zNwbA6CINq6OT#b}#oq}B#Kc0iZ`NCWrkjMn{b5!>zER(ZWLtb2o|mL>#LM&${Pbu zrqN(r1vc;`WhvJg+B>Hy#+L6vG8=h^@?y~#$((;LO^G$*AFKqN#PJeKa7-}Aa0d+a zNJJ;3;3HChnz{!Fj-dt#%2`Yzf`7aYjI@6~=#`06R_>_%PN%q2w%~&}x(~J*jcwaT z?W~XC^Ar5GeSGd$4J*~%iUZ11!6`SuTx0T*7b%|9-R){--PWJEs6gBvb6x}wDgNE} zm_9!BzycBY9CS#1R$ga!_qz?slb9^Rcp1iv9a&LwLud2%ZtTVTF4xeIr{Vt+6Hi=) zi6;_D=5#?O#4{l8bF=6$X#)irHg{H1lU6iR1WpP70F!PC8k5E}5F5r;qCbxd001sN z000;O000000000000000n3M4|MFL$IlY1B%lTtM*0jraJH9!GilfE@N0w5@pJ}4HG z5H>0SKa)E)BO4C(L{>=w003A5000pH000000000000000aFcm9J^}EPxHcmO#4`W@ F006BgmZty! diff --git a/excel/cha.xlsx b/excel/cha.xlsx index 3b023d99f1b010414160e3b6774248f4a869a0c5..f88d0ae32289cc8aff60bd89200e8d405795da40 100644 GIT binary patch delta 6509 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 XU+XPNMna-6B1xG-)QAlH4@>_86B;rS delta 6565 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 T`Q#Mv-O#pj*N7j={D%JzSAb%g diff --git a/src/ReplicatedStorage/Json/AttributesUpgrade.json b/src/ReplicatedStorage/Json/AttributesUpgrade.json index 2309175..43fbd99 100644 --- a/src/ReplicatedStorage/Json/AttributesUpgrade.json +++ b/src/ReplicatedStorage/Json/AttributesUpgrade.json @@ -4,10 +4,9 @@ {"id":3,"type":1,"effectAttribute":"swordAtk","cost":[1,300,0],"lvAdd":[10,0],"battleValueLimit":[5,20],"maxLv":null}, {"id":4,"type":1,"effectAttribute":"swordWearBase","cost":[1,300,0],"lvAdd":[10,0],"battleValueLimit":[5,20],"maxLv":null}, {"id":5,"type":1,"effectAttribute":"swordWearSpe","cost":[1,300,0],"lvAdd":[10,0],"battleValueLimit":[5,20],"maxLv":null}, -{"id":10,"type":2,"effectAttribute":"wearNumber","cost":[1,300,0],"lvAdd":[1,1],"battleValueLimit":[5,20],"maxLv":4}, -{"id":11,"type":2,"effectAttribute":"abilityNumber","cost":[1,300,0],"lvAdd":[1,1],"battleValueLimit":[5,20],"maxLv":3}, -{"id":12,"type":2,"effectAttribute":"extraAttributeNumber","cost":[1,300,0],"lvAdd":[1,1],"battleValueLimit":[5,20],"maxLv":3}, -{"id":13,"type":2,"effectAttribute":"elementNumber","cost":[1,300,0],"lvAdd":[1,1],"battleValueLimit":[5,20],"maxLv":4}, -{"id":14,"type":2,"effectAttribute":"elementDefNumber","cost":[1,300,0],"lvAdd":[1,1],"battleValueLimit":[5,20],"maxLv":4}, -{"id":15,"type":2,"effectAttribute":"runeNumber","cost":[1,300,0],"lvAdd":[1,1],"battleValueLimit":[5,20],"maxLv":4} +{"id":10,"type":2,"effectAttribute":"abilityNumber","cost":[1,300,0],"lvAdd":[1,1],"battleValueLimit":[5,20],"maxLv":3}, +{"id":11,"type":2,"effectAttribute":"extraAttributeNumber","cost":[1,300,0],"lvAdd":[1,1],"battleValueLimit":[5,20],"maxLv":3}, +{"id":12,"type":2,"effectAttribute":"elementNumber","cost":[1,300,0],"lvAdd":[1,1],"battleValueLimit":[5,20],"maxLv":4}, +{"id":13,"type":2,"effectAttribute":"elementDefNumber","cost":[1,300,0],"lvAdd":[1,1],"battleValueLimit":[5,20],"maxLv":4}, +{"id":14,"type":2,"effectAttribute":"runeNumber","cost":[1,300,0],"lvAdd":[1,1],"battleValueLimit":[5,20],"maxLv":4} ] \ No newline at end of file diff --git a/src/ServerStorage/Proxy/EquipmentProxy.luau b/src/ServerStorage/Proxy/EquipmentProxy.luau index 616c2b5..799ef49 100644 --- a/src/ServerStorage/Proxy/EquipmentProxy.luau +++ b/src/ServerStorage/Proxy/EquipmentProxy.luau @@ -419,8 +419,11 @@ function EquipmentProxy:WearEquipment(Player: Player, EquipmentId: number, Slot: -- 查看该槽位是否穿戴装备,穿戴就返回 for _, EquipmentData in ArchiveProxy.pData[Player.UserId][STORE_NAME] do if EquipmentData.wearing == Slot then - RE_PlayerTip:FireClient(Player, '该槽位已穿戴装备') - return + -- RE_PlayerTip:FireClient(Player, '该槽位已穿戴装备') + -- return + -- 触发替换逻辑 + self:UnwearEquipment(Player, EquipmentData.id) + RE_PlayerTip:FireClient(Player, '替换装备') end end diff --git a/src/StarterPlayerScripts/UI/UIManager.luau b/src/StarterPlayerScripts/UI/UIManager.luau index f206713..7a51078 100644 --- a/src/StarterPlayerScripts/UI/UIManager.luau +++ b/src/StarterPlayerScripts/UI/UIManager.luau @@ -114,6 +114,9 @@ end -- 关闭窗口 function UIManager:CloseWindow(WindowName: string) if not UIManager.Instances[WindowName] then + -- 打印堆栈(具体对战调用) + -- print("=== 调用堆栈信息 ===") + -- print(debug.traceback("UIManager:CloseWindow() 被调用时的堆栈:")) warn("UIManager:CloseWindow() 窗口不存在:" .. WindowName) return end diff --git a/src/StarterPlayerScripts/UI/Windows/AttributeLvupWindow/AttributeLvupShow.luau b/src/StarterPlayerScripts/UI/Windows/AttributeLvupWindow/AttributeLvupShow.luau index 257abb3..d2169c4 100644 --- a/src/StarterPlayerScripts/UI/Windows/AttributeLvupWindow/AttributeLvupShow.luau +++ b/src/StarterPlayerScripts/UI/Windows/AttributeLvupWindow/AttributeLvupShow.luau @@ -60,9 +60,21 @@ function AttributeLvupShow:Refresh() local nowLv = self:GetNowLv() self.Variables._tmpLv.Text = "Lv." .. nowLv + -- TODO:战斗力计算 + local nowBattleValue = 0 + 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] + end + -- 花费按钮显示 if self.Data.maxLv then self.Variables._btnUpgrade.Text = nowLv >= self.Data.maxLv and "满级" or self.Data.cost[2] + self.Data.cost[3] * (self.Data.maxLv - 1) + + -- 如果满级或者战力限制,不让点击 + if nowLv >= self.Data.maxLv or nowBattleValue < limitBattleValue then self.Variables._btnUpgrade.Interactable = false end -- 属性值显示 local caculateValue = self.Data.lvAdd[1] + self.Data.lvAdd[2] * (self.Data.maxLv - 1) diff --git a/src/StarterPlayerScripts/UI/Windows/ChaWindow/WearingShowOne.luau b/src/StarterPlayerScripts/UI/Windows/ChaWindow/WearingShowOne.luau new file mode 100644 index 0000000..30afca5 --- /dev/null +++ b/src/StarterPlayerScripts/UI/Windows/ChaWindow/WearingShowOne.luau @@ -0,0 +1,108 @@ +local WearingShowOne = {} +WearingShowOne.__index = WearingShowOne + +local ReplicatedStorage = game:GetService("ReplicatedStorage") + +local Utils = require(ReplicatedStorage.Tools.Utils) +local Localization = require(ReplicatedStorage.Tools.Localization) +local JsonEquipment = require(ReplicatedStorage.Json.Equipment) +local JsonItemProp = require(ReplicatedStorage.Json.ItemProp) + +local FolderEquipment = ReplicatedStorage:WaitForChild("Prefabs"):WaitForChild("Equipments") + +local LocalPlayer = game.Players.LocalPlayer + +local CommonFolder = LocalPlayer:WaitForChild("PlayerScripts"):WaitForChild("UI"):WaitForChild("Common") +local EquipmentModelDetail = require(CommonFolder:WaitForChild("EquipmentModelDetail")) +local RuneShow = require(CommonFolder:WaitForChild("RuneShow")) + +function WearingShowOne:Init(data: table) + local self = {} + self.Data = data + self.Variables = { + ["_btnClick"] = 0, + ["_imgBg"] = 0, + ["_imgIcon"] = 0, + ["_tmpQuality"] = 0, + ["_tmpName"] = 0, + ["_imgView"] = 0, + ["__listRuneWearing"] = 0, + } + self.Connections = {} + + setmetatable(self, WearingShowOne) + + return self +end + +function WearingShowOne:Refresh() + -- 槽位为空 + if self.Data.id == nil then + self.Variables._imgIcon.Image = "" + self.Variables._imgBg.Visible = true + self.Variables._tmpQuality.Text = "" + self.Variables._tmpName.Text = "" + else + -- 槽位有装备 + local itemData = Utils:GetIdDataFromJson(JsonItemProp, self.Data.orgId) + self.Variables._imgIcon.Image = Localization:GetImageData(itemData.iconId) + self.Variables._imgBg.Visible = false + self.Variables._tmpQuality.Text = Localization:GetColoredEquipmentQualityDesc(self.Data.quality) + self.Variables._tmpName.Text = Localization:GetLanguageData(itemData.nameId) + + -- 模型展示 + self.taskRotation, self.part, self.viewportCamera = EquipmentModelDetail:ShowDetail(self.Variables["_imgView"], self.Data.orgId, true) + + self.Variables["__listRuneWearing"]:AddComponent(RuneShow) + local runeData = Utils:GetWearingRuneData(self.Data.id) + self.Variables["__listRuneWearing"]:SetData(runeData) + end +end + + +function WearingShowOne:OnInitFinish() + local con = self.Variables._btnClick.MouseButton1Click:Connect(function() + if self.Data == {} then + -- TODO: 之后做提示弹窗 + else + self.TopUI:ShowDetailData(self.Data.id) + end + end) + table.insert(self.Connections, con) + + if self.Data.instance then + local wearingCon = self.Data.instance:GetAttributeChangedSignal("wearing"):Connect(function() + local oldWearing = self.Data.wearing + local newWearing = self.Data.instance:GetAttribute("wearing") + if oldWearing ~= newWearing then + if newWearing > 0 then + self.TopUI:WearRefresh(self.Data) + else + self.TopUI:UnwearRefresh(self.Data) + end + end + end) + table.insert(self.Connections, wearingCon) + end +end + +function WearingShowOne:Destroy() + if self.taskRotation then + task.cancel(self.taskRotation) + self.taskRotation = nil + end + if self.part then + self.part:Destroy() + self.part = nil + end + if self.viewportCamera then + self.viewportCamera:Destroy() + self.viewportCamera = nil + end + for k, v in pairs(self) do + self[k] = nil + end + self = nil +end + +return WearingShowOne \ No newline at end of file diff --git a/src/StarterPlayerScripts/UI/Windows/ChaWindow/init.luau b/src/StarterPlayerScripts/UI/Windows/ChaWindow/init.luau index 60dc902..58b0f33 100644 --- a/src/StarterPlayerScripts/UI/Windows/ChaWindow/init.luau +++ b/src/StarterPlayerScripts/UI/Windows/ChaWindow/init.luau @@ -6,7 +6,7 @@ local UIWindow = require(ReplicatedStorage.Base.UIWindow) local UIEnums = require(ReplicatedStorage.Base.UIEnums) --> Components -local WearingShow = require(script.WearingShow) +local WearingShow = require(script.WearingShowOne) local PackageShow = require(script.PackageShow) --> Dependencies @@ -59,7 +59,9 @@ function ChaWindow:WearRefresh(data: table) self.Variables["__listWeaing"]:AddData("slot"..newSlot, data) -- 关闭装备详情窗口 - self.UIManager:CloseWindow("EquipmentDetailWindow") + if self.UIManager:IsOpened("EquipmentDetailWindow") then + self.UIManager:CloseWindow("EquipmentDetailWindow") + end end function ChaWindow:UnwearRefresh(data: table) @@ -73,7 +75,9 @@ function ChaWindow:UnwearRefresh(data: table) self.Variables["__listWeaing"]:AddData("slot"..oldSlot, self.Data.Wearing["slot"..oldSlot]) -- 关闭装备详情窗口 - self.UIManager:CloseWindow("EquipmentDetailWindow") + if self.UIManager:IsOpened("EquipmentDetailWindow") then + self.UIManager:CloseWindow("EquipmentDetailWindow") + end end function ChaWindow:AddInstanceData(configInstance: Instance, Data: table?) @@ -125,6 +129,8 @@ function ChaWindow:OnOpenWindow() self:SetData(data) local maxSlotNumber = Utils:GetIdDataFromJson(JsonAttributesUpgrade, 10).maxLv + -- 临时只显示1个槽位 + maxSlotNumber = 1 for i = 1, maxSlotNumber do local isExist = false for k, data in pairs(self.Data.Wearing) do diff --git a/src/StarterPlayerScripts/UI/Windows/EquipmentDetailWindow/init.luau b/src/StarterPlayerScripts/UI/Windows/EquipmentDetailWindow/init.luau index 70bc9fe..dcb4248 100644 --- a/src/StarterPlayerScripts/UI/Windows/EquipmentDetailWindow/init.luau +++ b/src/StarterPlayerScripts/UI/Windows/EquipmentDetailWindow/init.luau @@ -187,11 +187,12 @@ function EquipmentDetailWindow:OnOpenWindow() break end end - if isExist then - -- TODO: 提示弹窗,已经穿戴 - else - RE_WearEquipment:FireServer(self.Data.EquipmentUniqueId, 1) - end + -- if isExist then + -- -- TODO: 提示弹窗,已经穿戴 + -- else + -- RE_WearEquipment:FireServer(self.Data.EquipmentUniqueId, 1) + -- end + RE_WearEquipment:FireServer(self.Data.EquipmentUniqueId, 1) end end)