不知道如何在Roblox Studio中的Lua上制作战斗系统

问题描述 投票:0回答:1

我是一名新程序员,一直在与一些朋友一起在 Roblox 上工作。我们一直在尝试制作一款具有有趣战斗系统的游戏,但每次尝试都失败了,尽管我们不准备放弃。

我们尝试用谷歌搜索、在 YouTube 上搜索教程,并尝试了大约一周的时间才使其发挥作用。当我们的目标是制作一个具有最多连击 5 次普通攻击、每 15 秒可以使用一次的技能以及每当击中敌人时就会冲锋的终极技能的战斗系统时,我们几乎无法播放拳击动画。 感谢任何可以提供帮助的人,我觉得我好像有点不知所措,我真的不知道从哪里开始。

lua roblox
1个回答
0
投票

如果你能读懂我的代码,你可以使用它:P

--Server Script

local re=Instance.new("RemoteEvent",game.ReplicatedStorage)
-- all abilities(except the ultimate)are not on cooldown at start of the game
local ability_cds={
    ["basicAttack"]=1,
    ["r"]=15, -- Skill1 (binded to button r with 15s cooldown)
    ["t"]=60 -- Ultimate ability
}
local ultcd=60 -- ultimate ability default cooldown
local function ultcd_update(player,cd) 
    re:FireClient(player,"t",5) 
end
local ability={
    ["basicAttack"]=function(player,combo)
        local hint=workspace:FindFirstChild"Message"or Instance.new("Hint",workspace)
        hint.Text="basicAttack x"..combo
    end,
    ["r"]=function(player,combo) -- Skill1 (binded to button r with 15s cooldown)
    end,
    ["t"]=function(player) --[[Ultimate ability(charging cd by kill not implemented)
        
ultcd_update(player,5) -- use to decrease ultimate cooldown by 5seconds(example)

]]  
    end
    
    
}
local maxcombo=5
local function useAbility(ability_name,player,combo)
    ability[ability_name](player,combo)
end
local ability_combo,ability_cds2={},{}
re.OnServerEvent:Connect(function(player,ability)
    if not ability or type(ability)~="string"then player:Kick()end
    local cd=ability_cds[ability]
    if not cd then player:Kick()end
    ability_cds2[player.Name]=ability_cds2[player.Name]or table.clone(ability_cds)
    local ability_cds=ability_cds2[player.Name]
    cd=ability_cds[ability]
    -- ultimate charging mechanism override:
    --(ult. cooldown will not decrease every second)
    if ability=="t"and cd==0 then
        ability_cds[ability]=ultcd
        useAbility("t",player,0)
    end
    --
    if cd==0 then return end
    ability_cds[ability]=0
    ability_combo[player.Name]=ability_combo[player.Name]or {}
    ability_combo[player.Name][ability]=ability_combo[player.Name][ability]or 0
    if not(ability_combo[player.Name][ability]+1>maxcombo) then
        ability_combo[player.Name][ability]+=1
        else
        ability_combo[player.Name][ability]=1
        end
    delay(cd,function()
        ability_cds[ability]=cd
        local combo=ability_combo[player.Name][ability]
        delay(cd,function()
            if combo==ability_combo[player.Name][ability]then
                ability_combo[player.Name][ability]=0
            end
            
        end)
    end)
    spawn(function()
        useAbility(ability,player,ability_combo[player.Name][ability])
    end)
end)
-------------------------------------------------------------------

--LocalScript



local player=game.Players.LocalPlayer

--local gui=script.Parent

local char=player.Character
local hum=char:WaitForChild"Humanoid"

local mouse=player:GetMouse()
local re=game.ReplicatedStorage:WaitForChild"RemoteEvent"
local ability_cds={
    ["basicAttack"]=1,
    ["r"]=15, -- Skill1 (binded to button r with 15s cooldown)
    ["t"]=60 -- Ultimate ability
}
re.OnClientEvent:Connect(function(ability,cd)
    local newcd=ability_cds[ability]-cd
    newcd=newcd<0 and 0 or newcd
    ability_cds[ability]=cd
end)
local ultcd=60
local function useAbility(ability)
    local cd=ability_cds[ability]
    -- ultimate ability special charging mechanism
    if ability=="t"then
        if cd==0 then
            ability_cds[ability]=ultcd
            re:FireServer(ability)
        end
        return
    end
    --
    if not cd or cd==0 then return end
    ability_cds[ability]=0
    delay(cd,function()
        ability_cds[ability]=cd
    end)
    re:FireServer(ability)
end
mouse.KeyDown:Connect(function(key)
    useAbility(key:lower())
end)
mouse.Button1Down:Connect(function(key)
    useAbility("basicAttack")
end)

© www.soinside.com 2019 - 2024. All rights reserved.