Hello i make my combat system v3 but i need your opinion in my script
--[[
How to use ?
CLIENT----
if not game:IsLoaded() then game.Loaded:Wait() end
local UserInputService = game:GetService("UserInputService")
local ReplicatedStrorage = game:GetService("ReplicatedStorage")
local combatModule = require(ReplicatedStrorage.CombatModule)
local function onInputService(input: InputObject)
if input.UserInputType == Enum.UserInputType.MouseButton1 then
combatModule.onAttack(1)
end
end
UserInputService.InputBegan:Connect(onInputService)
Server-----
local ReplicatedStrorage = game:GetService("ReplicatedStorage")
local combatModule = require(ReplicatedStrorage.CombatModule)
combatModule.onDamage()
]]
local RunService = game:GetService("RunService")
local template = script.Template
local takeDamageEvent = template.TakeDamageEvent
local index = 0
local cooldown = false
local connect, touchHit
type combatInfo = {animdId: string, part: string}
local combatInfo = {
{animdId = "rbxassetid://17265480831", part = "Right Arm"},
{animdId = "rbxassetid://17265488397", part = "Left Arm"},
{animdId = "rbxassetid://17265491575", part = "Right Leg"}
}
local function getIndexCombatInfo()
index = index%#combatInfo + 1
return combatInfo[index]
end
local function onTouched(hit: BasePart, humanoidRootPart: BasePart)
if hit.Name ~= "HumanoidRootPart" and hit ~= humanoidRootPart then return end
if hit.CanTouch then hit.CanTouch = false end
touchHit = hit
takeDamageEvent:FireServer(hit.Parent.Humanoid)
end
local function onStoppedAnimation(animTrack: AnimationTrack)
animTrack.Stopped:Wait()
if touchHit then touchHit.CanTouch = true end
connect:Disconnect()
cooldown = false
end
local function onPlayAnimation(t: combatInfo, speed: number, character: Model)
local animation = Instance.new("Animation")
local touchingPart = character:FindFirstChild(t.part):: BasePart
local humanoid = character.Humanoid
local animTrack
animation.AnimationId = t.animdId
animTrack = humanoid:LoadAnimation(animation)
animTrack:Play(nil, nil, speed)
connect = touchingPart.Touched:Connect(function(hit)
onTouched(hit, character.HumanoidRootPart)
end)
onStoppedAnimation(animTrack)
end
local function onAttack(speed: number?)
assert(RunService:IsClient(), "You can call this function only server")
local player = game.Players.LocalPlayer
local character = player.Character
if not cooldown then cooldown = true else return end
if not speed then speed = 1 end
local t = getIndexCombatInfo()
onPlayAnimation(t, speed, character)
end
local function onDamage()
assert(RunService:IsServer(), "You can call this function only server")
takeDamageEvent.OnServerEvent:Connect(function(player: Player, otherHumanoid: Humanoid)
otherHumanoid:TakeDamage(10)
end)
end
return {
onAttack = onAttack,
onDamage = onDamage
}