Please help me, I’m also using a clientcast module:
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local RunService = game:GetService("RunService")
local Players = game:GetService("Players")
local Debris = game:GetService("Debris")
local Modules = ReplicatedStorage:WaitForChild("Modules")
local ClientCast = require(Modules:WaitForChild("ClientCast"))
local Tool = script.Parent
local Handle = Tool:WaitForChild("Handle")
local Trail = Handle:WaitForChild("Trail")
local Character = nil
local Player = nil
local Torso = nil
local Humanoid = nil
local Animator = nil
local IdleTrack = nil
local AttackAnimations = {}
local Debounce = {}
local ToolEquipped = false
local SlashCaster = nil
local Cooldown = 1
local Damage = 20
for Count = -0.8, 2.4, .1 do
local DmgPoint = Instance.new("Attachment", Handle)
DmgPoint.Name = "DmgPoint"
DmgPoint.Position = Vector3.new(0, 0, Count)
end
local function CheckIfAlive()
return (((Player and Player.Parent and Character and Character.Parent and Humanoid and Humanoid.Parent and Humanoid.Health > 0 and Torso and Torso.Parent) and true) or false)
end
local function IsTeamMate(Player1, Player2)
return (Player1 and Player2 and not Player1.Neutral and not Player2.Neutral and Player1.TeamColor == Player2.TeamColor)
end
local function Yield(Seconds) -- Custom made function alternative to wait()
local StartTime = tick()
repeat RunService.Heartbeat:Wait() until tick() - StartTime >= Seconds
end
local function TagHumanoid(humanoid, player)
local Creator_Tag = Instance.new("ObjectValue")
Creator_Tag.Name = "creator"
Creator_Tag.Value = player
Debris:AddItem(Creator_Tag, 2)
Creator_Tag.Parent = humanoid
end
local function UntagHumanoid(humanoid)
for i, v in pairs(humanoid:GetChildren()) do
if v:IsA("ObjectValue") and v.Name == "creator" then
v:Destroy()
end
end
end
local function Equipped()
Character = Tool.Parent
Player = Players:GetPlayerFromCharacter(Character)
Humanoid = Character:FindFirstChildOfClass("Humanoid")
Torso = Character:FindFirstChild("Torso") or Character:FindFirstChild("UpperTorso")
Animator = Humanoid:FindFirstChildOfClass("Animator")
if not CheckIfAlive() then
return
end
if Animator then
IdleTrack = Animator:LoadAnimation(Tool.Idle)
AttackAnimations[1] = Animator:LoadAnimation(Tool.Slash)
AttackAnimations[2] = Animator:LoadAnimation(Tool.Overhead)
end
if IdleTrack then
IdleTrack:Play()
end
SlashCaster = ClientCast.new(Handle, RaycastParams.new())
SlashCaster.HumanoidCollided:Connect(function(RaycastResult, humanoid)
if not CheckIfAlive() or not ToolEquipped then
return
end
local RightArm = Character:FindFirstChild("Right Arm") or Character:FindFirstChild("RightHand")
if not RightArm then
return
end
local RightGrip = RightArm:FindFirstChild("RightGrip") or RightArm:FindFirstChild("Handle")
if not RightGrip or (RightGrip.Part0 ~= Handle and RightGrip.Part1 ~= Handle) then
return
end
local character = humanoid.Parent
if character == Character then
return
end
if not humanoid or humanoid.Health == 0 then
return
end
local player = Players:GetPlayerFromCharacter(character)
if player and (player == Player or IsTeamMate(Player, player)) then
return
end
if Debounce[humanoid] then
return
end
Debounce[humanoid] = true
UntagHumanoid(humanoid)
TagHumanoid(humanoid, Player)
humanoid:TakeDamage(Damage)
Handle.Hit:Play()
Yield(Cooldown / 2)
Debounce[humanoid] = false
end)
SlashCaster:SetOwner(Player)
ToolEquipped = true
Handle.Equip:Play()
end
local function Activated()
if not Tool.Enabled or not ToolEquipped or not CheckIfAlive() then
return
end
if AttackAnimations then
AttackAnimations[math.random(1, #AttackAnimations)]:Play()
end
Tool.Enabled = false
SlashCaster:Start()
delay(0.15, function()
Handle.Slash:Play()
Trail.Enabled = true
end)
Yield(Cooldown)
SlashCaster:Stop()
Trail.Enabled = false
Tool.Enabled = true
end
local function Unequipped()
if IdleTrack then
IdleTrack:Stop()
end
if AttackAnimations then
AttackAnimations[1]:Stop()
AttackAnimations[2]:Stop()
end
ToolEquipped = false
SlashCaster:Stop()
end
Tool.Equipped:Connect(Equipped)
Tool.Activated:Connect(Activated)
Tool.Unequipped:Connect(Unequipped)