更新
This commit is contained in:
parent
11ddf9fe1f
commit
aa5baf00b5
BIN
excel/cha.xlsx
BIN
excel/cha.xlsx
Binary file not shown.
BIN
excel/enemy.xlsx
BIN
excel/enemy.xlsx
Binary file not shown.
@ -1,5 +1,5 @@
|
||||
[
|
||||
{"id":1,"type":1,"name":1,"attack":83,"hp":400,"walkSpeed":8,"attackSpeed":1,"model":"Thief"},
|
||||
{"id":2,"type":1,"name":2,"attack":30,"hp":300,"walkSpeed":8,"attackSpeed":1,"model":"Thief"},
|
||||
{"id":1000,"type":2,"name":1000,"attack":240,"hp":2000,"walkSpeed":4,"attackSpeed":1,"model":"Thief"}
|
||||
{"id":1000,"type":2,"name":1000,"attack":120,"hp":1000,"walkSpeed":4,"attackSpeed":1,"model":"Thief"}
|
||||
]
|
@ -183,6 +183,7 @@ end
|
||||
|
||||
-- 挑战关卡(挑战副本用另一个函数)
|
||||
function LevelProxy:ChallengeLevel(Player: Player, LevelId: number)
|
||||
print("挑战关卡", LevelId)
|
||||
local LevelData = Utils:GetIdDataFromJson(JsonLevel, LevelId)
|
||||
if not LevelData then warn("Level Data not found", LevelId) return end
|
||||
-- 给前端传数据,做表现
|
||||
@ -259,7 +260,7 @@ function LevelProxy:ChallengeEnd(Player: Player, result: boolean)
|
||||
end
|
||||
|
||||
-- 清除剩余怪物
|
||||
for _, mob in LevelProxy.pData[Player.UserId].Mobs do mob:Died(true) end
|
||||
for _, mob in pairs(LevelProxy.pData[Player.UserId].Mobs) do mob:Died(true) end
|
||||
LevelProxy.pData[Player.UserId].Mobs = {}
|
||||
|
||||
-- 清除玩家表现
|
||||
|
@ -81,13 +81,12 @@ function Mob.new(Player: Player, MobId: number, OnMobDied: ((Player: Player, Mob
|
||||
return self
|
||||
end
|
||||
|
||||
-- IsSkinOnDied:暂时意义不明,忘了之前为啥写了
|
||||
function Mob:Died(IsSkinOnDied: boolean?)
|
||||
-- isChallengeFailed 挑战失败清除怪物传参
|
||||
function Mob:Died(isChallengeFailed: boolean?)
|
||||
MobsProxy:RemoveMob(self.Player, self.Instance)
|
||||
-- if not IsSkinOnDied then
|
||||
-- if self.OnDied then self.OnDied(self.Player, self) end
|
||||
-- end
|
||||
if self.OnDied then self.OnDied(self.Player, self) end
|
||||
if not isChallengeFailed then
|
||||
if self.OnDied then self.OnDied(self.Player, self) end
|
||||
end
|
||||
Character.Died(self)
|
||||
end
|
||||
|
||||
@ -110,7 +109,7 @@ end
|
||||
-- 清除玩家单个怪物
|
||||
function MobsProxy:RemoveMob(Player: Player, MobInstance: Instance)
|
||||
local playerMobsFolder = GetPlayerMobsFolder(Player)
|
||||
if not playerMobsFolder then return end
|
||||
if not playerMobsFolder then warn("playerMobsFolder not found", Player.Name) return end
|
||||
if not MobsProxy.pData[Player.UserId][MobInstance] then warn("Mob not found", MobInstance) return end
|
||||
|
||||
MobsProxy.pData[Player.UserId][MobInstance] = nil
|
||||
|
@ -6,6 +6,7 @@ local ReplicatedStorage = game:GetService("ReplicatedStorage")
|
||||
|
||||
--> Events
|
||||
local BD_ChallengeEnd = ReplicatedStorage.Events.BD_ChallengeEnd
|
||||
local RE_ChallengeBoss = ReplicatedStorage.Events.RE_ChallengeBoss
|
||||
|
||||
--> Dependencies
|
||||
local LevelProxy = require(ServerStorage.Proxy.LevelProxy)
|
||||
@ -31,12 +32,16 @@ function LevelLoop.new(Player: Player, PlayerRole: TypeList.Character)
|
||||
if Player ~= self.Player then return end
|
||||
self:OnChallengeEnd(Player, LevelId)
|
||||
end)
|
||||
self.ConChallengeBoss = RE_ChallengeBoss.OnServerEvent:Connect(function(Player: Player)
|
||||
if Player ~= self.Player then return end
|
||||
self:OnChallengeBoss(Player)
|
||||
end)
|
||||
|
||||
self:AutoChallenge()
|
||||
return self
|
||||
end
|
||||
|
||||
function LevelLoop:AutoChallenge()
|
||||
function LevelLoop:AutoChallenge(ignoreBoss: boolean?)
|
||||
print("AutoChallenge")
|
||||
|
||||
-- TODO: 回退有bug,不能一关一关回退
|
||||
@ -47,7 +52,9 @@ function LevelLoop:AutoChallenge()
|
||||
local LevelId = ProgressFolder:FindFirstChild("Main").Value
|
||||
local FailBossId = ProgressFolder:FindFirstChild("BossFail").Value
|
||||
-- Boss失败了就去挑战上一个关卡
|
||||
if FailBossId == LevelId then
|
||||
if ignoreBoss then
|
||||
LevelId = LevelId
|
||||
elseif FailBossId == LevelId then
|
||||
LevelId = LevelId - 1
|
||||
end
|
||||
|
||||
@ -55,6 +62,7 @@ function LevelLoop:AutoChallenge()
|
||||
end
|
||||
|
||||
function LevelLoop:OnChallengeEnd(Player: Player, LevelId: number, result: boolean)
|
||||
if self.ChallengeBoss then self.ChallengeBoss = nil return end
|
||||
self.TaskAutoChallenge = task.spawn(function()
|
||||
task.wait(3)
|
||||
-- 重置玩家状态(先临时调用角色复活,之后复杂的内容再说)
|
||||
@ -63,11 +71,26 @@ function LevelLoop:OnChallengeEnd(Player: Player, LevelId: number, result: boole
|
||||
end)
|
||||
end
|
||||
|
||||
function LevelLoop:OnChallengeBoss(Player: Player)
|
||||
self.TaskAutoChallenge = task.spawn(function()
|
||||
self.ChallengeBoss = true
|
||||
LevelProxy:ChallengeEnd(self.Player, false)
|
||||
-- 重置玩家状态(先临时调用角色复活,之后复杂的内容再说)
|
||||
task.wait(1)
|
||||
self.PlayerRole:Respawn()
|
||||
self:AutoChallenge(true)
|
||||
end)
|
||||
end
|
||||
|
||||
function LevelLoop:Destroy()
|
||||
if self.TaskAutoChallenge then
|
||||
task.cancel(self.TaskAutoChallenge)
|
||||
self.TaskAutoChallenge = nil
|
||||
end
|
||||
if self.ConChallengeBoss then
|
||||
self.ConChallengeBoss:Disconnect()
|
||||
self.ConChallengeBoss = nil
|
||||
end
|
||||
if self.ConChallengeEnd then
|
||||
self.ConChallengeEnd:Disconnect()
|
||||
self.ConChallengeEnd = nil
|
||||
|
@ -6,7 +6,7 @@ local player = Players.LocalPlayer
|
||||
local camera = workspace.CurrentCamera
|
||||
|
||||
local CAMERA_DISTANCE = 30
|
||||
local CAMERA_HEIGHT = 40
|
||||
local CAMERA_HEIGHT = 35
|
||||
local CAMERA_ANGLE = math.rad(-45)
|
||||
local SCREEN_OFFSET = 5
|
||||
|
||||
|
@ -7,9 +7,13 @@ local UIEnums = require(ReplicatedStorage.Base.UIEnums)
|
||||
|
||||
--> Json
|
||||
local JsonLevel = require(ReplicatedStorage.Json.Level)
|
||||
local JsonForge = require(ReplicatedStorage.Json.Forge)
|
||||
|
||||
local Utils = require(ReplicatedStorage.Tools.Utils)
|
||||
|
||||
--> Events
|
||||
local RE_ChallengeBoss = ReplicatedStorage.Events.RE_ChallengeBoss
|
||||
|
||||
local LocalPlayer = game:GetService("Players").LocalPlayer
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
@ -26,8 +30,16 @@ function MainWindow:Init(UIManager: table, Data: table?)
|
||||
["_btnMainCha"] = 0,
|
||||
["_btnMainAttributeUpgrade"] = 0,
|
||||
|
||||
-- 关卡
|
||||
["_tmpNowLevel"] = 0,
|
||||
["_imgBoss"] = 0,
|
||||
["_btnChallengeBoss"] = 0,
|
||||
|
||||
-- 锻造条
|
||||
["_goForgeBar"] = 0,
|
||||
["_goForgeFill"] = 0,
|
||||
["_tmpForgeMoney"] = 0,
|
||||
["_tmpForgeTime"] = 0,
|
||||
}
|
||||
self.UIRootName = "ui_w_main"
|
||||
self.UIParentName = UIEnums.UIParent.UIRoot
|
||||
@ -35,6 +47,7 @@ function MainWindow:Init(UIManager: table, Data: table?)
|
||||
return self
|
||||
end
|
||||
|
||||
-- 设置关卡显示
|
||||
function MainWindow:SetShowLevel(level: number)
|
||||
self.Variables["_tmpNowLevel"].Text = string.format("第%d关", level)
|
||||
local levelData = Utils:GetIdDataFromJson(JsonLevel, level)
|
||||
@ -45,6 +58,46 @@ function MainWindow:SetShowLevel(level: number)
|
||||
end
|
||||
end
|
||||
|
||||
-- 设置boss挑战按钮显示
|
||||
function MainWindow:SetShowBossChallenge(newValue: number)
|
||||
local playerDataFolder = game.Workspace:WaitForChild("Level"):WaitForChild(LocalPlayer.UserId)
|
||||
local ProgressFolder = playerDataFolder:WaitForChild("Progress")
|
||||
local mainValue = ProgressFolder:FindFirstChild("Main").Value
|
||||
local levelIdValue = playerDataFolder:WaitForChild("Challenge"):WaitForChild("LevelId").Value
|
||||
|
||||
if levelIdValue == mainValue then
|
||||
self.Variables["_btnChallengeBoss"].Visible = false
|
||||
else
|
||||
self.Variables["_btnChallengeBoss"].Visible = (newValue == mainValue)
|
||||
end
|
||||
end
|
||||
|
||||
-- 手动点击按钮,挑战boss
|
||||
function MainWindow:OnClickChallengeBoss()
|
||||
RE_ChallengeBoss:FireServer()
|
||||
|
||||
self.Variables["_btnChallengeBoss"].Visible = false
|
||||
end
|
||||
|
||||
function MainWindow:SetShowForgeBar(nowForgeTime : number, moneyValue: number)
|
||||
local maxForgeId = Utils:GetMaxIdFromJson(JsonForge)
|
||||
local forgeTime = nowForgeTime > maxForgeId and maxForgeId or nowForgeTime
|
||||
local forgeData = Utils:GetIdDataFromJson(JsonForge, forgeTime)
|
||||
|
||||
-- 进度条
|
||||
self.Variables["_goForgeFill"].Size = UDim2.new(math.min(moneyValue / forgeData.cost[2], 1), 0, 1, 0)
|
||||
self.Variables["_tmpForgeMoney"].Text = string.format("%d/%d", moneyValue, forgeData.cost[2])
|
||||
|
||||
-- 右上角红点
|
||||
local timeRecorder = math.ceil(moneyValue / forgeData.cost[2])
|
||||
if timeRecorder > 0 then
|
||||
self.Variables["_tmpForgeTime"].Visible = true
|
||||
self.Variables["_tmpForgeTime"].Text = timeRecorder
|
||||
else
|
||||
self.Variables["_tmpForgeTime"].Visible = false
|
||||
end
|
||||
end
|
||||
|
||||
function MainWindow:OnOpenWindow()
|
||||
UIWindow.OnOpenWindow(self)
|
||||
|
||||
@ -57,22 +110,73 @@ function MainWindow:OnOpenWindow()
|
||||
local attributeUpgradeCon = self.Variables["_btnMainAttributeUpgrade"].Activated:Connect(function()
|
||||
self.UIManager:OpenWindow("AttributeLvupWindow")
|
||||
end)
|
||||
|
||||
local challengeBossCon = self.Variables["_btnChallengeBoss"].Activated:Connect(function()
|
||||
self:OnClickChallengeBoss()
|
||||
end)
|
||||
|
||||
table.insert(self.Connections, createCon)
|
||||
table.insert(self.Connections, chaCon)
|
||||
table.insert(self.Connections, attributeUpgradeCon)
|
||||
table.insert(self.Connections, challengeBossCon)
|
||||
|
||||
-- TODO: 暂时用主关卡数显示,我记得之前这里主要是记录的,Challenge中才是正在挑战的内容
|
||||
-- TODO: 之后LevelProxy也应该挪到ReplicatedStorage下,之前可能是因为觉得Challenge是临时的内容所以放在workspace下,但是逻辑做的不统一
|
||||
local playerDataFolder = game.Workspace:WaitForChild("Level"):WaitForChild(LocalPlayer.UserId)
|
||||
local StatsFolder = playerDataFolder:WaitForChild("Progress")
|
||||
local levelCon = StatsFolder.Main.Changed:Connect(function(newValue)
|
||||
local StatsFolder = playerDataFolder:WaitForChild("Challenge")
|
||||
local ProgressFolder = playerDataFolder:WaitForChild("Progress")
|
||||
|
||||
local levelCon = StatsFolder.LevelId.Changed:Connect(function(newValue)
|
||||
self:SetShowLevel(newValue)
|
||||
self:SetShowBossChallenge(ProgressFolder.BossFail.Value)
|
||||
end)
|
||||
local bossChallengeCon = ProgressFolder.BossFail.Changed:Connect(function(newValue)
|
||||
self:SetShowBossChallenge(newValue)
|
||||
end)
|
||||
|
||||
-- 初始值设置
|
||||
self:SetShowLevel(StatsFolder.Main.Value)
|
||||
self:SetShowLevel(StatsFolder.LevelId.Value)
|
||||
self:SetShowBossChallenge(ProgressFolder.BossFail.Value)
|
||||
|
||||
table.insert(self.Connections, levelCon)
|
||||
table.insert(self.Connections, bossChallengeCon)
|
||||
|
||||
|
||||
-- 货币进度条显示
|
||||
local rePlayerDataFolder = Utils:GetPlayerDataFolder(LocalPlayer)
|
||||
local playerInfoFolder = rePlayerDataFolder:WaitForChild("PlayerInfo")
|
||||
local forgeInstance = playerInfoFolder:WaitForChild("Stats"):WaitForChild("forge")
|
||||
|
||||
local itemFolder = playerInfoFolder:WaitForChild("Items")
|
||||
local hasItem = playerInfoFolder:FindFirstChild("2")
|
||||
|
||||
-- 设置锻造货币变动链接
|
||||
local function SetForgeCostChange()
|
||||
local costChangeCon = hasItem.Changed:Connect(function(newValue)
|
||||
self:SetShowForgeBar(forgeInstance.Value, newValue)
|
||||
end)
|
||||
table.insert(self.Connections, costChangeCon)
|
||||
end
|
||||
|
||||
if hasItem then
|
||||
-- 后续变动设置
|
||||
SetForgeCostChange()
|
||||
-- 初始化设置
|
||||
self:SetShowForgeBar(forgeInstance.Value, hasItem.Value)
|
||||
else
|
||||
-- 没有货币时监听设置
|
||||
local addCon
|
||||
addCon = itemFolder.ChildAdded:Connect(function(child)
|
||||
if child.Name == "2" then
|
||||
self:SetShowForgeBar(forgeInstance.Value, child.Value)
|
||||
addCon:Disconnect()
|
||||
addCon = nil
|
||||
|
||||
SetForgeCostChange()
|
||||
end
|
||||
end)
|
||||
table.insert(self.Connections, addCon)
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user