From e48107d424d13c65cf779aa8f57e42447ccf755e Mon Sep 17 00:00:00 2001 From: Ggafrik <906823881@qq.com> Date: Sat, 19 Jul 2025 03:03:02 +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/equipment.xlsx | Bin 8943 -> 9622 bytes excel/item.xlsx | Bin 21027 -> 22691 bytes excel/language.xlsx | Bin 31919 -> 32186 bytes src/ReplicatedStorage/Base/UIList.luau | 29 ++++ src/ReplicatedStorage/Base/UIWindow.luau | 35 +++- src/ReplicatedStorage/Json/Equipment.json | 17 +- src/ReplicatedStorage/Json/ItemProp.json | 34 +++- .../Json/Language_En_US.json | 18 +- src/ReplicatedStorage/Tools/Localization.luau | 8 +- src/ReplicatedStorage/Tools/Utils.luau | 2 +- src/ServerStorage/Proxy/DamageProxy.luau | 2 +- src/ServerStorage/Proxy/HelpProxy.luau | 14 +- .../Proxy/PlayerFightProxy/init.luau | 1 - .../ClientMain/Helper.luau | 2 + .../ClientMain/PerformanceClient/init.luau | 3 + .../UI/Windows/CreateWindow/WeaponItem.luau | 61 +++++++ .../UI/Windows/CreateWindow/init.luau | 160 ++++++++++++++++++ .../UI/Windows/MainWindow/init.luau | 37 ++++ 18 files changed, 408 insertions(+), 15 deletions(-) create mode 100644 src/StarterPlayerScripts/UI/Windows/CreateWindow/WeaponItem.luau create mode 100644 src/StarterPlayerScripts/UI/Windows/CreateWindow/init.luau create mode 100644 src/StarterPlayerScripts/UI/Windows/MainWindow/init.luau diff --git a/excel/equipment.xlsx b/excel/equipment.xlsx index 38ef6220196cf4fa5b24f96c23e32405111527e8..613987b46d17f6a1b24287cf81506eb21fb7c35f 100644 GIT binary patch delta 3919 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 delta 3259 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 diff --git a/excel/item.xlsx b/excel/item.xlsx index dcab07d15a02bb35558d2907826aa043ba9987c0..33740006241582631a78cb9ff3149f9a9beb843c 100644 GIT binary patch delta 8489 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 W5>>A%glw!9b*f5tjZp(}^Zx^@!~TZ#F{ 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 ag%YkDWelP+9rKDemxGgdZVjLHm^l@;w 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 diff --git a/excel/language.xlsx b/excel/language.xlsx index 5c07a9b1340bf742dea5c11cde199f639f8d77a3..4b9fef67ecd532c53d58b68774bdb1eca601d2ec 100644 GIT binary patch delta 6951 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 delta 6684 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 覆盖用 @@ -100,13 +115,21 @@ function UIWindow:OnDataChanged() end function UIWindow:Refresh() end function UIWindow:Destroy() - for _, connection in pairs(self.SignalConnections) do - connection:DisconnectAll() + if self.TopUI then self.TopUI = nil end + + if self.SignalConnections then + for _, connection in pairs(self.SignalConnections) do + connection:DisconnectAll() + end end self.SignalConnections = nil - for _, connection in pairs(self.Connections) do - connection:Disconnect() + if self.Connections then + for _, connection in pairs(self.Connections) do + print("进入断开连接") + + connection:Disconnect() + end end self.Connections = nil diff --git a/src/ReplicatedStorage/Json/Equipment.json b/src/ReplicatedStorage/Json/Equipment.json index 67ca107..a7d7f4d 100644 --- a/src/ReplicatedStorage/Json/Equipment.json +++ b/src/ReplicatedStorage/Json/Equipment.json @@ -1,3 +1,18 @@ [ -{"id":1,"type":1,"name":1,"attributes":[14,200,10,15,200,10,16,100,0],"recycle":10} +{"id":40000,"type":1,"name":40000,"attributes":[14,200,10,15,200,10,16,100,0],"recycle":10}, +{"id":40001,"type":1,"name":40001,"attributes":[14,200,10,15,200,10,16,100,0],"recycle":10}, +{"id":40002,"type":1,"name":40002,"attributes":[14,200,10,15,200,10,16,100,0],"recycle":10}, +{"id":40003,"type":1,"name":40003,"attributes":[14,200,10,15,200,10,16,100,0],"recycle":10}, +{"id":40004,"type":1,"name":40004,"attributes":[14,200,10,15,200,10,16,100,0],"recycle":10}, +{"id":40005,"type":1,"name":40005,"attributes":[14,200,10,15,200,10,16,100,0],"recycle":10}, +{"id":40006,"type":1,"name":40006,"attributes":[14,200,10,15,200,10,16,100,0],"recycle":10}, +{"id":40007,"type":1,"name":40007,"attributes":[14,200,10,15,200,10,16,100,0],"recycle":10}, +{"id":40008,"type":1,"name":40008,"attributes":[14,200,10,15,200,10,16,100,0],"recycle":10}, +{"id":40009,"type":1,"name":40009,"attributes":[14,200,10,15,200,10,16,100,0],"recycle":10}, +{"id":40010,"type":1,"name":40010,"attributes":[14,200,10,15,200,10,16,100,0],"recycle":10}, +{"id":40011,"type":1,"name":40011,"attributes":[14,200,10,15,200,10,16,100,0],"recycle":10}, +{"id":40012,"type":1,"name":40012,"attributes":[14,200,10,15,200,10,16,100,0],"recycle":10}, +{"id":40013,"type":1,"name":40013,"attributes":[14,200,10,15,200,10,16,100,0],"recycle":10}, +{"id":40014,"type":1,"name":40014,"attributes":[14,200,10,15,200,10,16,100,0],"recycle":10}, +{"id":40015,"type":1,"name":40015,"attributes":[14,200,10,15,200,10,16,100,0],"recycle":10} ] \ No newline at end of file diff --git a/src/ReplicatedStorage/Json/ItemProp.json b/src/ReplicatedStorage/Json/ItemProp.json index e2858bd..60ae155 100644 --- a/src/ReplicatedStorage/Json/ItemProp.json +++ b/src/ReplicatedStorage/Json/ItemProp.json @@ -60,5 +60,37 @@ {"id":13105,"type":4,"typeArgs":[],"quality":6,"iconId":66,"nameId":23105,"textId":33105,"buyPrice":[11,60],"sellPrice":[11,60],"use":[],"showPackage":null}, {"id":13106,"type":4,"typeArgs":[],"quality":7,"iconId":67,"nameId":23106,"textId":33106,"buyPrice":[11,70],"sellPrice":[11,70],"use":[],"showPackage":null}, {"id":20000,"type":5,"typeArgs":[],"quality":1,"iconId":1,"nameId":30000,"textId":40000,"buyPrice":[],"sellPrice":[],"use":[],"showPackage":null}, -{"id":30000,"type":6,"typeArgs":[],"quality":1,"iconId":2,"nameId":40000,"textId":50000,"buyPrice":[],"sellPrice":[],"use":[],"showPackage":null} +{"id":30000,"type":6,"typeArgs":[],"quality":1,"iconId":2,"nameId":40000,"textId":50000,"buyPrice":[],"sellPrice":[],"use":[],"showPackage":null}, +{"id":40000,"type":2,"typeArgs":[],"quality":1,"iconId":1,"nameId":40000,"textId":60000,"buyPrice":[],"sellPrice":[],"use":[],"showPackage":null}, +{"id":40001,"type":2,"typeArgs":[],"quality":2,"iconId":2,"nameId":40001,"textId":60001,"buyPrice":[],"sellPrice":[],"use":[],"showPackage":null}, +{"id":40002,"type":2,"typeArgs":[],"quality":3,"iconId":3,"nameId":40002,"textId":60002,"buyPrice":[],"sellPrice":[],"use":[],"showPackage":null}, +{"id":40003,"type":2,"typeArgs":[],"quality":4,"iconId":4,"nameId":40003,"textId":60003,"buyPrice":[],"sellPrice":[],"use":[],"showPackage":null}, +{"id":40004,"type":2,"typeArgs":[],"quality":5,"iconId":5,"nameId":40004,"textId":60004,"buyPrice":[],"sellPrice":[],"use":[],"showPackage":null}, +{"id":40005,"type":2,"typeArgs":[],"quality":6,"iconId":6,"nameId":40005,"textId":60005,"buyPrice":[],"sellPrice":[],"use":[],"showPackage":null}, +{"id":40006,"type":2,"typeArgs":[],"quality":7,"iconId":7,"nameId":40006,"textId":60006,"buyPrice":[],"sellPrice":[],"use":[],"showPackage":null}, +{"id":40007,"type":2,"typeArgs":[],"quality":8,"iconId":8,"nameId":40007,"textId":60007,"buyPrice":[],"sellPrice":[],"use":[],"showPackage":null}, +{"id":40008,"type":2,"typeArgs":[],"quality":9,"iconId":9,"nameId":40008,"textId":60008,"buyPrice":[],"sellPrice":[],"use":[],"showPackage":null}, +{"id":40009,"type":2,"typeArgs":[],"quality":10,"iconId":10,"nameId":40009,"textId":60009,"buyPrice":[],"sellPrice":[],"use":[],"showPackage":null}, +{"id":40010,"type":2,"typeArgs":[],"quality":11,"iconId":11,"nameId":40010,"textId":60010,"buyPrice":[],"sellPrice":[],"use":[],"showPackage":null}, +{"id":40011,"type":2,"typeArgs":[],"quality":12,"iconId":12,"nameId":40011,"textId":60011,"buyPrice":[],"sellPrice":[],"use":[],"showPackage":null}, +{"id":40012,"type":2,"typeArgs":[],"quality":13,"iconId":13,"nameId":40012,"textId":60012,"buyPrice":[],"sellPrice":[],"use":[],"showPackage":null}, +{"id":40013,"type":2,"typeArgs":[],"quality":14,"iconId":14,"nameId":40013,"textId":60013,"buyPrice":[],"sellPrice":[],"use":[],"showPackage":null}, +{"id":40014,"type":2,"typeArgs":[],"quality":15,"iconId":15,"nameId":40014,"textId":60014,"buyPrice":[],"sellPrice":[],"use":[],"showPackage":null}, +{"id":40015,"type":2,"typeArgs":[],"quality":16,"iconId":16,"nameId":40015,"textId":60015,"buyPrice":[],"sellPrice":[],"use":[],"showPackage":null}, +{"id":50000,"type":3,"typeArgs":[],"quality":1,"iconId":1,"nameId":50000,"textId":70000,"buyPrice":[],"sellPrice":[],"use":[],"showPackage":null}, +{"id":50001,"type":3,"typeArgs":[],"quality":2,"iconId":2,"nameId":50001,"textId":70001,"buyPrice":[],"sellPrice":[],"use":[],"showPackage":null}, +{"id":50002,"type":3,"typeArgs":[],"quality":3,"iconId":3,"nameId":50002,"textId":70002,"buyPrice":[],"sellPrice":[],"use":[],"showPackage":null}, +{"id":50003,"type":3,"typeArgs":[],"quality":4,"iconId":4,"nameId":50003,"textId":70003,"buyPrice":[],"sellPrice":[],"use":[],"showPackage":null}, +{"id":50004,"type":3,"typeArgs":[],"quality":5,"iconId":5,"nameId":50004,"textId":70004,"buyPrice":[],"sellPrice":[],"use":[],"showPackage":null}, +{"id":50005,"type":3,"typeArgs":[],"quality":6,"iconId":6,"nameId":50005,"textId":70005,"buyPrice":[],"sellPrice":[],"use":[],"showPackage":null}, +{"id":50006,"type":3,"typeArgs":[],"quality":7,"iconId":7,"nameId":50006,"textId":70006,"buyPrice":[],"sellPrice":[],"use":[],"showPackage":null}, +{"id":50007,"type":3,"typeArgs":[],"quality":8,"iconId":8,"nameId":50007,"textId":70007,"buyPrice":[],"sellPrice":[],"use":[],"showPackage":null}, +{"id":50008,"type":3,"typeArgs":[],"quality":9,"iconId":9,"nameId":50008,"textId":70008,"buyPrice":[],"sellPrice":[],"use":[],"showPackage":null}, +{"id":50009,"type":3,"typeArgs":[],"quality":10,"iconId":10,"nameId":50009,"textId":70009,"buyPrice":[],"sellPrice":[],"use":[],"showPackage":null}, +{"id":50010,"type":3,"typeArgs":[],"quality":11,"iconId":11,"nameId":50010,"textId":70010,"buyPrice":[],"sellPrice":[],"use":[],"showPackage":null}, +{"id":50011,"type":3,"typeArgs":[],"quality":12,"iconId":12,"nameId":50011,"textId":70011,"buyPrice":[],"sellPrice":[],"use":[],"showPackage":null}, +{"id":50012,"type":3,"typeArgs":[],"quality":13,"iconId":13,"nameId":50012,"textId":70012,"buyPrice":[],"sellPrice":[],"use":[],"showPackage":null}, +{"id":50013,"type":3,"typeArgs":[],"quality":14,"iconId":14,"nameId":50013,"textId":70013,"buyPrice":[],"sellPrice":[],"use":[],"showPackage":null}, +{"id":50014,"type":3,"typeArgs":[],"quality":15,"iconId":15,"nameId":50014,"textId":70014,"buyPrice":[],"sellPrice":[],"use":[],"showPackage":null}, +{"id":50015,"type":3,"typeArgs":[],"quality":16,"iconId":16,"nameId":50015,"textId":70015,"buyPrice":[],"sellPrice":[],"use":[],"showPackage":null} ] \ No newline at end of file diff --git a/src/ReplicatedStorage/Json/Language_En_US.json b/src/ReplicatedStorage/Json/Language_En_US.json index fc6931f..3fbf934 100644 --- a/src/ReplicatedStorage/Json/Language_En_US.json +++ b/src/ReplicatedStorage/Json/Language_En_US.json @@ -1,4 +1,20 @@ [ {"id":100006,"text":"Coin+{0}"}, -{"id":100007,"text":"Score+{0}"} +{"id":100007,"text":"Score+{0}"}, +{"id":40000,"text":"测试装备1"}, +{"id":40001,"text":"测试装备2"}, +{"id":40002,"text":"测试装备3"}, +{"id":40003,"text":"测试装备4"}, +{"id":40004,"text":"测试装备5"}, +{"id":40005,"text":"测试装备6"}, +{"id":40006,"text":"测试装备7"}, +{"id":40007,"text":"测试装备8"}, +{"id":40008,"text":"测试装备9"}, +{"id":40009,"text":"测试装备10"}, +{"id":40010,"text":"测试装备11"}, +{"id":40011,"text":"测试装备12"}, +{"id":40012,"text":"测试装备13"}, +{"id":40013,"text":"测试装备14"}, +{"id":40014,"text":"测试装备15"}, +{"id":40015,"text":"测试装备16"} ] \ No newline at end of file diff --git a/src/ReplicatedStorage/Tools/Localization.luau b/src/ReplicatedStorage/Tools/Localization.luau index 5950cbc..055ad1f 100644 --- a/src/ReplicatedStorage/Tools/Localization.luau +++ b/src/ReplicatedStorage/Tools/Localization.luau @@ -32,13 +32,17 @@ local JsonLanguage, JsonImage = Localization:GetLocalizationJson() -- 获取文本Id数据 function Localization:GetLanguageData(Id: number) if not Id then return end - return Utils:GetIdDataFromJson(JsonLanguage, Id).text + local data = Utils:GetIdDataFromJson(JsonLanguage, Id) + if not data then return "" end + return data.text end -- 获取图片Id数据 function Localization:GetImageData(Id: number) if not Id then return end - return Utils:GetIdDataFromJson(JsonImage, Id).sourceId + local data = Utils:GetIdDataFromJson(JsonImage, Id) + if not data then return "" end + return data.sourceId end return Localization \ No newline at end of file diff --git a/src/ReplicatedStorage/Tools/Utils.luau b/src/ReplicatedStorage/Tools/Utils.luau index c943b2a..34454c0 100644 --- a/src/ReplicatedStorage/Tools/Utils.luau +++ b/src/ReplicatedStorage/Tools/Utils.luau @@ -164,7 +164,7 @@ function Utils:GetFlatDirectionAndEndPos(startPos: Vector3, targetPos: Vector3, end function Utils:CreateDataInstance(Player: Player, UniqueId: number, EquipmentData: table, Folder: Instance) - if Player or UniqueId or EquipmentData or Folder then + if not Player or not UniqueId or not EquipmentData or not Folder then warn('创建实例失败: ' , Player.Name, UniqueId, EquipmentData, Folder) return end diff --git a/src/ServerStorage/Proxy/DamageProxy.luau b/src/ServerStorage/Proxy/DamageProxy.luau index 0198d27..6c70367 100644 --- a/src/ServerStorage/Proxy/DamageProxy.luau +++ b/src/ServerStorage/Proxy/DamageProxy.luau @@ -146,7 +146,7 @@ function DamageProxy:TakeDamage(Caster: TypeList.Character, Victim: TypeList.Cha -- 伤害计算 local VictimHealth = Victim:GetAttributeValue("hp") local resultValue, isDied = Victim:ChangeAttributeValue("hp", math.max(0, VictimHealth - Damage)) - print("伤害数据打印", Damage, VictimHealth, resultValue, isDied) + -- print("伤害数据打印", Damage, VictimHealth, resultValue, isDied) if isDied then break end end -- 实际发送数据 diff --git a/src/ServerStorage/Proxy/HelpProxy.luau b/src/ServerStorage/Proxy/HelpProxy.luau index 8ee0dfa..3d657c9 100644 --- a/src/ServerStorage/Proxy/HelpProxy.luau +++ b/src/ServerStorage/Proxy/HelpProxy.luau @@ -3,6 +3,12 @@ local HelpProxy = {} --> Server local ReplicatedStorage = game:GetService("ReplicatedStorage") +--> Tools +local Utils = require(ReplicatedStorage.Tools.Utils) + +--> Json +local JsonItemProp = require(ReplicatedStorage.Json.ItemProp) + --> Events local RE_PlayerHelper = ReplicatedStorage.Events.RE_PlayerHelper @@ -16,7 +22,13 @@ RE_PlayerHelper.OnServerEvent:Connect(function(Player: Player, EventName: string HelpProxy:CleanPlayerData(Player) elseif EventName == "AddItem" then local PlayerInfoProxy = require(script.Parent.PlayerInfoProxy) - PlayerInfoProxy:ChangeItemCount(Player, EventData[1], EventData[2]) + local itemData = Utils:GetIdDataFromJson(JsonItemProp, EventData[1]) + if itemData.type == 3 then + local BookProxy = require(script.Parent.BookProxy) + BookProxy:UnlockBook(Player, EventData[1] - 10000) + else + PlayerInfoProxy:ChangeItemCount(Player, EventData[1], EventData[2]) + end print("添加物品成功", PlayerInfoProxy:GetItemCount(Player, EventData[1])) end end) diff --git a/src/ServerStorage/Proxy/PlayerFightProxy/init.luau b/src/ServerStorage/Proxy/PlayerFightProxy/init.luau index 5a8bee1..3e79da5 100644 --- a/src/ServerStorage/Proxy/PlayerFightProxy/init.luau +++ b/src/ServerStorage/Proxy/PlayerFightProxy/init.luau @@ -109,7 +109,6 @@ function PlayerFightProxy:GetPlayerRole(Player: Player) end function PlayerFightProxy:GetPlayerAI(Player: Player) - print(PlayerFightProxy.pData[Player.UserId]) return PlayerFightProxy.pData[Player.UserId].PlayerAI end diff --git a/src/StarterPlayerScripts/ClientMain/Helper.luau b/src/StarterPlayerScripts/ClientMain/Helper.luau index 4a17961..5d9f989 100644 --- a/src/StarterPlayerScripts/ClientMain/Helper.luau +++ b/src/StarterPlayerScripts/ClientMain/Helper.luau @@ -24,6 +24,8 @@ UserInputService.InputBegan:Connect(function(input, gameProcessed) RE_UpgradeAttributes:FireServer(3) elseif input.KeyCode == Enum.KeyCode.N then RE_UpgradeAttributes:FireServer(4) + elseif input.KeyCode == Enum.KeyCode.KeypadOne then + RE_PlayerHelper:FireServer("AddItem", {math.random(50000, 50015), 1}) end end end) diff --git a/src/StarterPlayerScripts/ClientMain/PerformanceClient/init.luau b/src/StarterPlayerScripts/ClientMain/PerformanceClient/init.luau index 1e294e6..db38889 100644 --- a/src/StarterPlayerScripts/ClientMain/PerformanceClient/init.luau +++ b/src/StarterPlayerScripts/ClientMain/PerformanceClient/init.luau @@ -109,4 +109,7 @@ RE_CleanPlayerPerformance.OnClientEvent:Connect(function(CleanedPlayer: Player) PerformanceClient.pData[UserId] = nil end) +-- 打开默认界面 +UIManager:OpenWindow("MainWindow") + return PerformanceClient \ No newline at end of file diff --git a/src/StarterPlayerScripts/UI/Windows/CreateWindow/WeaponItem.luau b/src/StarterPlayerScripts/UI/Windows/CreateWindow/WeaponItem.luau new file mode 100644 index 0000000..309c4cd --- /dev/null +++ b/src/StarterPlayerScripts/UI/Windows/CreateWindow/WeaponItem.luau @@ -0,0 +1,61 @@ +local WeaponItem = {} +WeaponItem.__index = WeaponItem + +local ReplicatedStorage = game:GetService("ReplicatedStorage") + +local Utils = require(ReplicatedStorage.Tools.Utils) +local Localization = require(ReplicatedStorage.Tools.Localization) +local Signal = require(ReplicatedStorage.Tools.Signal) + +local JsonItemProp = require(ReplicatedStorage.Json.ItemProp) + +function WeaponItem:Init(data: table) + local self = {} + self.Data = data + self.Variables = { + ["_imgIcon"] = 0, + ["_tmpName"] = 0, + ["_tmpQuality"] = 0, + ["_btnClick"] = 0, + ["_imgSelected"] = 0, + } + self.SignalConnections = {} + self.Connections = {} + + setmetatable(self, WeaponItem) + return self +end + +function WeaponItem:SetSelected(isSelected: boolean) + self.Variables._imgSelected.Visible = isSelected +end + +function WeaponItem:Refresh() + local itemData = Utils:GetIdDataFromJson(JsonItemProp, self.Data.OrgId) + self.Variables._imgIcon.Image = Localization:GetImageData(itemData.iconId) + self.Variables._tmpName.Text = Localization:GetLanguageData(itemData.nameId) + self.Variables._tmpQuality.Text = self.Data.Quality +end + +function WeaponItem:OnInitFinish() + -- 点击事件 + local con = self.Variables["_btnClick"].Activated:Connect(function() + self.TopUI:ShowDetailInfo(self.Data) + self:SetSelected(true) + + if self.TopUI.LastActiveItem then + self.TopUI.LastActiveItem:SetSelected(false) + end + self.TopUI.LastActiveItem = self + end) + table.insert(self.Connections, con) +end + +function WeaponItem:Destroy() + for k, v in pairs(self) do + self[k] = nil + end + self = nil +end + +return WeaponItem \ No newline at end of file diff --git a/src/StarterPlayerScripts/UI/Windows/CreateWindow/init.luau b/src/StarterPlayerScripts/UI/Windows/CreateWindow/init.luau new file mode 100644 index 0000000..349f43b --- /dev/null +++ b/src/StarterPlayerScripts/UI/Windows/CreateWindow/init.luau @@ -0,0 +1,160 @@ +--> Services +local ReplicatedStorage = game:GetService("ReplicatedStorage") + +--> Dependencies +local UIWindow = require(ReplicatedStorage.Base.UIWindow) +local UIEnums = require(ReplicatedStorage.Base.UIEnums) + +--> Components +local WeaponItem = require(script.WeaponItem) + +--> Variables +local Utils = require(ReplicatedStorage.Tools.Utils) +local Localization = require(ReplicatedStorage.Tools.Localization) +local Signal = require(ReplicatedStorage.Tools.Signal) + +--> Json +local JsonItemProp = require(ReplicatedStorage.Json.ItemProp) + +--> Events +local RE_Forge = ReplicatedStorage.Events.RE_Forge + +local LocalPlayer = game.Players.LocalPlayer +-------------------------------------------------------------------------------- + +local CreateWindow = {} +CreateWindow.__index = CreateWindow +setmetatable(CreateWindow, {__index = UIWindow}) + +function CreateWindow:Init(UIManager: table, Data: table?) + local self = UIWindow:Init(UIManager, Data) + setmetatable(self, CreateWindow) + self.Variables = { + ["_btnBgClose"] = 0, + + ["_goWeaponPanel"] = 0, + ["_btnClose"] = 0, + + ["__listWeaponPackage"] = 0, + -- 详情面板 + ["_btnCreate"] = 0, + ["_btnMult"] = 0, + ["_imgIcon"] = 0, + ["_tmpName"] = 0, + ["_tmpQuality"] = 0, + ["_toggleAutoRecycle"] = 0, + ["_imgAutoRecycleActive"] = 0, + } + self.MultNumber = 1 + self.AutoRecycle = false + self.UIRootName = "ui_w_create" + self.UIParentName = UIEnums.UIParent.UIRoot + + self.LastActiveItem = nil + + return self +end + +function CreateWindow:ShowDetailInfo(data: table?) + if data then + self.Variables["_imgIcon"].Image = Localization:GetImageData(Utils:GetIdDataFromJson(JsonItemProp, data.OrgId).iconId) + self.Variables["_tmpName"].Text = Utils:GetIdDataFromJson(JsonItemProp, data.OrgId).nameId + self.Variables["_tmpQuality"].Text = Utils:GetIdDataFromJson(JsonItemProp, data.OrgId).quality + else + self.Variables["_imgIcon"].Image = "" + self.Variables["_tmpName"].Text = "" + self.Variables["_tmpQuality"].Text = "" + end +end + +function CreateWindow:OnClickMult() + self.MultNumber += 1 + if self.MultNumber > 10 then self.MultNumber = 1 end + self.Variables["_btnMult"].Text = "x" .. self.MultNumber +end + +function CreateWindow:OnToggleAutoRecycleClick() + self.AutoRecycle = not self.AutoRecycle + self.Variables["_imgAutoRecycleActive"].Visible = self.AutoRecycle +end + +function CreateWindow:OnClickCreate() + if self.LastActiveItem then + local data = self.LastActiveItem.Data + RE_Forge:FireServer(data.OrgId, self.MultNumber) + end +end + +function CreateWindow:OnOpenWindow() + UIWindow.OnOpenWindow(self) + + -- 自己进行数据处理 + local DataFolder = Utils:GetPlayerDataFolder(LocalPlayer):FindFirstChild("Book") + local data = {} + for _, child in DataFolder:GetChildren() do + data[child.Name] = { + OrgId = tonumber(child.Name), + Quality = child:GetAttribute("quality"), + Timestamp = child:GetAttribute("timestamp"), + } + end + self:SetData(data) + + -- 监听数据变化 + local childAddCon = DataFolder.ChildAdded:Connect(function(child) + self.Data[child.Name] = { + OrgId = tonumber(child.Name), + Quality = child:GetAttribute("quality"), + Timestamp = child:GetAttribute("timestamp"), + } + self.Variables["__listWeaponPackage"]:AddData(self.Data[child.Name]) + end) + table.insert(self.Connections, childAddCon) + + -- 点击事件 + local bgCloseCon = self.Variables["_btnBgClose"].Activated:Connect(function() + self.UIManager:CloseWindow(script.Name) + end) + local closeCon = self.Variables["_btnClose"].Activated:Connect(function() + self.UIManager:CloseWindow(script.Name) + end) + local multCon = self.Variables["_btnMult"].Activated:Connect(function() + self:OnClickMult() + end) + local autoRecycleCon = self.Variables["_toggleAutoRecycle"].Activated:Connect(function() + self:OnToggleAutoRecycleClick() + end) + local createCon = self.Variables["_btnCreate"].Activated:Connect(function() + self:OnClickCreate() + end) + + table.insert(self.Connections, bgCloseCon) + table.insert(self.Connections, closeCon) + table.insert(self.Connections, multCon) + table.insert(self.Connections, autoRecycleCon) + table.insert(self.Connections, createCon) + + self.Variables["__listWeaponPackage"]:AddComponent(WeaponItem) + self.Variables["__listWeaponPackage"]:SetData(self.Data) + self.Variables["__listWeaponPackage"]:SetLayoutOrder("OrgId") + + if self.Data then + local minInstance = self.Variables["__listWeaponPackage"]:GetMinLayoutOrderInstance() + self:ShowDetailInfo(minInstance.Data) + + self.LastActiveItem = minInstance + minInstance:SetSelected(true) + else + self:ShowDetailInfo() + end +end + +function CreateWindow:OnCloseWindow() + UIWindow.OnCloseWindow(self) + + self.Variables["__listWeaponPackage"]:Clean() +end + + + +return CreateWindow \ No newline at end of file diff --git a/src/StarterPlayerScripts/UI/Windows/MainWindow/init.luau b/src/StarterPlayerScripts/UI/Windows/MainWindow/init.luau new file mode 100644 index 0000000..b998de6 --- /dev/null +++ b/src/StarterPlayerScripts/UI/Windows/MainWindow/init.luau @@ -0,0 +1,37 @@ +--> Services +local ReplicatedStorage = game:GetService("ReplicatedStorage") + +--> Dependencies +local UIWindow = require(ReplicatedStorage.Base.UIWindow) +local UIEnums = require(ReplicatedStorage.Base.UIEnums) + +-------------------------------------------------------------------------------- + +local MainWindow = {} +MainWindow.__index = MainWindow +setmetatable(MainWindow, {__index = UIWindow}) + +function MainWindow:Init(UIManager: table, Data: table?) + local self = UIWindow:Init(UIManager, Data) + setmetatable(self, MainWindow) + self.Variables = { + ["_btnMainCreate"] = 0, + } + self.UIRootName = "ui_w_main" + self.UIParentName = UIEnums.UIParent.UIRoot + + return self +end + +function MainWindow:OnOpenWindow() + UIWindow.OnOpenWindow(self) + + local createCon = self.Variables["_btnMainCreate"].Activated:Connect(function() + self.UIManager:OpenWindow("CreateWindow") + end) + table.insert(self.Connections, createCon) +end + + + +return MainWindow \ No newline at end of file