我是一名新程序员,一直在与一些朋友一起在 Roblox 上工作。我们一直在尝试制作一款具有有趣战斗系统的游戏,但每次尝试都失败了,尽管我们不准备放弃。
我们尝试用谷歌搜索、在 YouTube 上搜索教程,并尝试了大约一周的时间才使其发挥作用。当我们的目标是制作一个具有最多连击 5 次普通攻击、每 15 秒可以使用一次的技能以及每当击中敌人时就会冲锋的终极技能的战斗系统时,我们几乎无法播放拳击动画。 感谢任何可以提供帮助的人,我觉得我好像有点不知所措,我真的不知道从哪里开始。
如果你能读懂我的代码,你可以使用它: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)