This commit is contained in:
Ggafrik 2025-08-05 00:55:02 +08:00
parent 384bf38b03
commit 2f84f42378
2 changed files with 54 additions and 1 deletions

View File

@ -7,6 +7,7 @@ local ReplicatedStorage = game:GetService("ReplicatedStorage")
--> Events --> Events
local BD_ChallengeEnd = ReplicatedStorage.Events.BD_ChallengeEnd local BD_ChallengeEnd = ReplicatedStorage.Events.BD_ChallengeEnd
local RE_ChallengeBoss = ReplicatedStorage.Events.RE_ChallengeBoss local RE_ChallengeBoss = ReplicatedStorage.Events.RE_ChallengeBoss
local RE_ChallengeLevel = ReplicatedStorage.Events.RE_ChallengeLevel
--> Dependencies --> Dependencies
local LevelProxy = require(ServerStorage.Proxy.LevelProxy) local LevelProxy = require(ServerStorage.Proxy.LevelProxy)
@ -16,6 +17,10 @@ local Utils = require(ReplicatedStorage.Tools.Utils)
--> Json --> Json
local JsonLevel = require(ReplicatedStorage.Json.Level) local JsonLevel = require(ReplicatedStorage.Json.Level)
--> Constants
local SpawnLocation = game.Workspace:WaitForChild("SpawnLocation")
local ChallengeLocation
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
local LevelLoop = {} local LevelLoop = {}
@ -27,6 +32,7 @@ function LevelLoop.new(Player: Player, PlayerRole: TypeList.Character)
self.Player = Player self.Player = Player
self.PlayerRole = PlayerRole self.PlayerRole = PlayerRole
self.TaskAutoChallenge = nil self.TaskAutoChallenge = nil
self.AutoChallenge = false
self.ConChallengeEnd = BD_ChallengeEnd.Event:Connect(function(Player: Player, LevelId: number) self.ConChallengeEnd = BD_ChallengeEnd.Event:Connect(function(Player: Player, LevelId: number)
if Player ~= self.Player then return end 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 if Player ~= self.Player then return end
self:OnChallengeBoss(Player) self:OnChallengeBoss(Player)
end) 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 return self
end 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?) function LevelLoop:AutoChallenge(ignoreBoss: boolean?)
if not self.AutoChallenge then return end
print("AutoChallenge") print("AutoChallenge")
-- TODO: 传送到关卡起点
-- TODO: 回退有bug不能一关一关回退 -- TODO: 回退有bug不能一关一关回退
@ -62,6 +87,7 @@ function LevelLoop:AutoChallenge(ignoreBoss: boolean?)
end end
function LevelLoop:OnChallengeEnd(Player: Player, LevelId: number, result: boolean) 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 if self.ChallengeBoss then self.ChallengeBoss = nil return end
self.TaskAutoChallenge = task.spawn(function() self.TaskAutoChallenge = task.spawn(function()
task.wait(3) task.wait(3)
@ -95,6 +121,10 @@ function LevelLoop:Destroy()
self.ConChallengeEnd:Disconnect() self.ConChallengeEnd:Disconnect()
self.ConChallengeEnd = nil self.ConChallengeEnd = nil
end end
if self.ConChallengeLevel then
self.ConChallengeLevel:Disconnect()
self.ConChallengeLevel = nil
end
self = nil self = nil
end end

View File

@ -13,6 +13,7 @@ local Utils = require(ReplicatedStorage.Tools.Utils)
--> Events --> Events
local RE_ChallengeBoss = ReplicatedStorage.Events.RE_ChallengeBoss local RE_ChallengeBoss = ReplicatedStorage.Events.RE_ChallengeBoss
local RE_ChallengeLevel = ReplicatedStorage.Events.RE_ChallengeLevel
local LocalPlayer = game:GetService("Players").LocalPlayer local LocalPlayer = game:GetService("Players").LocalPlayer
@ -80,6 +81,8 @@ function MainWindow:Init(UIManager: table, Data: table?)
["_btnMainCreate"] = 0, ["_btnMainCreate"] = 0,
["_btnMainCha"] = 0, ["_btnMainCha"] = 0,
["_btnMainAttributeUpgrade"] = 0, ["_btnMainAttributeUpgrade"] = 0,
["_btnStopChallenge"] = 0,
["_btnStartChallenge"] = 0,
-- 关卡 -- 关卡
["_tmpNowLevel"] = 0, ["_tmpNowLevel"] = 0,
@ -157,6 +160,18 @@ function MainWindow:SetShowForgeBar(nowForgeTime : number, moneyValue: number)
end end
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() function MainWindow:OnOpenWindow()
UIWindow.OnOpenWindow(self) UIWindow.OnOpenWindow(self)
@ -172,11 +187,19 @@ function MainWindow:OnOpenWindow()
local challengeBossCon = self.Variables["_btnChallengeBoss"].Activated:Connect(function() local challengeBossCon = self.Variables["_btnChallengeBoss"].Activated:Connect(function()
self:OnClickChallengeBoss() self:OnClickChallengeBoss()
end) 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, createCon)
table.insert(self.Connections, chaCon) table.insert(self.Connections, chaCon)
table.insert(self.Connections, attributeUpgradeCon) table.insert(self.Connections, attributeUpgradeCon)
table.insert(self.Connections, challengeBossCon) table.insert(self.Connections, challengeBossCon)
table.insert(self.Connections, stopChallengeCon)
table.insert(self.Connections, startChallengeCon)
-- TODO: 暂时用主关卡数显示我记得之前这里主要是记录的Challenge中才是正在挑战的内容 -- TODO: 暂时用主关卡数显示我记得之前这里主要是记录的Challenge中才是正在挑战的内容
-- TODO: 之后LevelProxy也应该挪到ReplicatedStorage下之前可能是因为觉得Challenge是临时的内容所以放在workspace下但是逻辑做的不统一 -- TODO: 之后LevelProxy也应该挪到ReplicatedStorage下之前可能是因为觉得Challenge是临时的内容所以放在workspace下但是逻辑做的不统一