diff --git a/src/ServerStorage/Proxy/PlayerFightProxy/LevelLoop.luau b/src/ServerStorage/Proxy/PlayerFightProxy/LevelLoop.luau index 4756f64..fd2c4bd 100644 --- a/src/ServerStorage/Proxy/PlayerFightProxy/LevelLoop.luau +++ b/src/ServerStorage/Proxy/PlayerFightProxy/LevelLoop.luau @@ -7,6 +7,7 @@ local ReplicatedStorage = game:GetService("ReplicatedStorage") --> Events local BD_ChallengeEnd = ReplicatedStorage.Events.BD_ChallengeEnd local RE_ChallengeBoss = ReplicatedStorage.Events.RE_ChallengeBoss +local RE_ChallengeLevel = ReplicatedStorage.Events.RE_ChallengeLevel --> Dependencies local LevelProxy = require(ServerStorage.Proxy.LevelProxy) @@ -16,6 +17,10 @@ local Utils = require(ReplicatedStorage.Tools.Utils) --> Json local JsonLevel = require(ReplicatedStorage.Json.Level) +--> Constants +local SpawnLocation = game.Workspace:WaitForChild("SpawnLocation") +local ChallengeLocation + -------------------------------------------------------------------------------- local LevelLoop = {} @@ -27,6 +32,7 @@ function LevelLoop.new(Player: Player, PlayerRole: TypeList.Character) self.Player = Player self.PlayerRole = PlayerRole self.TaskAutoChallenge = nil + self.AutoChallenge = false self.ConChallengeEnd = BD_ChallengeEnd.Event:Connect(function(Player: Player, LevelId: number) if Player ~= self.Player then return end @@ -36,13 +42,32 @@ function LevelLoop.new(Player: Player, PlayerRole: TypeList.Character) if Player ~= self.Player then return end self:OnChallengeBoss(Player) end) + self.ConChallengeLevel = RE_ChallengeLevel.OnServerEvent:Connect(function(Player: Player, isStart: boolean) + if Player ~= self.Player then return end + self:OnChallengeLevel(isStart) + end) - self:AutoChallenge() + -- self:AutoChallenge() return self end +-- 手动挑战关卡 +function LevelLoop:OnChallengeLevel(isStart: boolean) + self.AutoChallenge = isStart + if isStart then + self:AutoChallenge() + else + -- TODO: 传送回城镇 + + LevelProxy:ChallengeEnd(self.Player, false) + end +end + function LevelLoop:AutoChallenge(ignoreBoss: boolean?) + if not self.AutoChallenge then return end print("AutoChallenge") + + -- TODO: 传送到关卡起点 -- TODO: 回退有bug,不能一关一关回退 @@ -62,6 +87,7 @@ function LevelLoop:AutoChallenge(ignoreBoss: boolean?) end function LevelLoop:OnChallengeEnd(Player: Player, LevelId: number, result: boolean) + if not self.AutoChallenge then return end if self.ChallengeBoss then self.ChallengeBoss = nil return end self.TaskAutoChallenge = task.spawn(function() task.wait(3) @@ -95,6 +121,10 @@ function LevelLoop:Destroy() self.ConChallengeEnd:Disconnect() self.ConChallengeEnd = nil end + if self.ConChallengeLevel then + self.ConChallengeLevel:Disconnect() + self.ConChallengeLevel = nil + end self = nil end diff --git a/src/StarterPlayerScripts/UI/Windows/MainWindow/init.luau b/src/StarterPlayerScripts/UI/Windows/MainWindow/init.luau index 8c94c62..7219843 100644 --- a/src/StarterPlayerScripts/UI/Windows/MainWindow/init.luau +++ b/src/StarterPlayerScripts/UI/Windows/MainWindow/init.luau @@ -13,6 +13,7 @@ local Utils = require(ReplicatedStorage.Tools.Utils) --> Events local RE_ChallengeBoss = ReplicatedStorage.Events.RE_ChallengeBoss +local RE_ChallengeLevel = ReplicatedStorage.Events.RE_ChallengeLevel local LocalPlayer = game:GetService("Players").LocalPlayer @@ -80,6 +81,8 @@ function MainWindow:Init(UIManager: table, Data: table?) ["_btnMainCreate"] = 0, ["_btnMainCha"] = 0, ["_btnMainAttributeUpgrade"] = 0, + ["_btnStopChallenge"] = 0, + ["_btnStartChallenge"] = 0, -- 关卡 ["_tmpNowLevel"] = 0, @@ -157,6 +160,18 @@ function MainWindow:SetShowForgeBar(nowForgeTime : number, moneyValue: number) end end +function MainWindow:OnClickChallengeButton(isStart: boolean) + if isStart then + RE_ChallengeLevel:FireServer(true) + self.Variables["_btnStartChallenge"].Visible = false + self.Variables["_btnStopChallenge"].Visible = true + else + RE_ChallengeLevel:FireServer(false) + self.Variables["_btnStartChallenge"].Visible = true + self.Variables["_btnStopChallenge"].Visible = false + end +end + function MainWindow:OnOpenWindow() UIWindow.OnOpenWindow(self) @@ -172,11 +187,19 @@ function MainWindow:OnOpenWindow() local challengeBossCon = self.Variables["_btnChallengeBoss"].Activated:Connect(function() self:OnClickChallengeBoss() end) + local stopChallengeCon = self.Variables["_btnStopChallenge"].Activated:Connect(function() + self:OnClickChallengeButton(false) + end) + local startChallengeCon = self.Variables["_btnStartChallenge"].Activated:Connect(function() + self:OnClickChallengeButton(true) + end) table.insert(self.Connections, createCon) table.insert(self.Connections, chaCon) table.insert(self.Connections, attributeUpgradeCon) table.insert(self.Connections, challengeBossCon) + table.insert(self.Connections, stopChallengeCon) + table.insert(self.Connections, startChallengeCon) -- TODO: 暂时用主关卡数显示,我记得之前这里主要是记录的,Challenge中才是正在挑战的内容 -- TODO: 之后LevelProxy也应该挪到ReplicatedStorage下,之前可能是因为觉得Challenge是临时的内容所以放在workspace下,但是逻辑做的不统一