So I’ve been following a tutorial on making a battlegrounds game and there is a part of making a fireball ability. So I copied it and modified some things but it doesn’t float like in the video
This is the video
And this is the result
The script:
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local CharacterConfigurations = require(ReplicatedStorage.SharedModules.Configurations.CharacterConfigurations)
local Events = ReplicatedStorage.Events
local AttackDebounces = {}
local module = {}
local AttackData = nil
for _,v in CharacterConfigurations do
if v.CharacterName == script.Parent.Name then
AttackData = v
break
end
end
module.AttackFunction = function(Player)
if Player.Values.IsAttacking.Value == false and not AttackDebounces[Player] then
AttackDebounces[Player] = true
Player.Values.IsAttacking.Value = true
task.delay(AttackData.Attacks[tonumber(script.Name)].AttackDuriation, function()
Player.Values.IsAttacking.Value = false
end)
local Character = Player.Character
local KnifeAnimation = Character.Humanoid:LoadAnimation(script.ThrowKnifeAnimation) :: AnimationTrack
KnifeAnimation:Play()
local KnifeDagger = nil
KnifeAnimation:GetMarkerReachedSignal("SpawnKnifeDagger"):Connect(function()
KnifeDagger = ReplicatedStorage.Assets.KnifeDagger:Clone()
KnifeDagger.Anchored = true
KnifeDagger.Parent = workspace
for i=1,27 do
KnifeDagger.CFrame = Character["Right Arm"].RightGripAttachment.WorldCFrame
task.wait()
end
end)
KnifeAnimation:GetMarkerReachedSignal("ThrowKnifeDagger"):Connect(function()
KnifeDagger.VectorForce.Force = Vector3.new(0, KnifeDagger.Mass * workspace.Gravity, 0)
KnifeDagger.Anchored = false
KnifeDagger.AssemblyLinearVelocity = (Character.HumanoidRootPart.CFrame.LookVector * 50)
end)
task.delay(AttackData.Attacks[tonumber(script.Name)].AttackDebounce, function()
AttackDebounces[Player] = nil
end)
return true
else
return false
end
end
return module
If you remove the animation will it work then? Looks like your code is throwing the knife when the arm is going down so that is what i believe is causing your issue.

Here is a close look on what’s happening.
I’m using vector force so that it floats like it said in the tutorial but the force does nothing. I also updated the code so that there’s more velocity.
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local CharacterConfigurations = require(ReplicatedStorage.SharedModules.Configurations.CharacterConfigurations)
local AttackHitboxes = require(game.ServerScriptService.Modules.AttackHitboxes)
local Events = ReplicatedStorage.Events
local AttackDebounces = {}
local module = {}
local AttackData = nil
for _,v in CharacterConfigurations do
if v.CharacterName == script.Parent.Name then
AttackData = v
break
end
end
module.AttackFunction = function(Player)
if Player.Values.IsAttacking.Value == false and not AttackDebounces[Player] then
AttackDebounces[Player] = true
Player.Values.IsAttacking.Value = true
task.delay(AttackData.Attacks[tonumber(script.Name)].AttackDuriation, function()
Player.Values.IsAttacking.Value = false
end)
local Character = Player.Character
local KnifeAnimation = Character.Humanoid:LoadAnimation(script.ThrowKnifeAnimation) :: AnimationTrack
KnifeAnimation:Play()
local KnifeDagger = nil
KnifeAnimation:GetMarkerReachedSignal("SpawnKnifeDagger"):Connect(function()
KnifeDagger = ReplicatedStorage.Assets.KnifeDagger:Clone()
KnifeDagger.Anchored = true
KnifeDagger.Parent = workspace
local KnifeDaggerDebounce = false
KnifeDagger.Touched:Connect(function(Hit)
local Humanoid = Hit.Parent:FindFirstChild("Humanoid") or Hit.Parent.Parent:FindFirstChild("Humanoid")
if Humanoid then
if Hit.Parent.Name ~= Player.Name and Hit.Parent.Parent.Name ~= Player.Name then
if not KnifeDaggerDebounce then
KnifeDaggerDebounce = true
AttackHitboxes.CreateHitbox(Character, KnifeDagger.Size, 25, true, Humanoid.Parent.HumanoidRootPart.CFrame)
end
end
end
end)
for i=1,27 do
KnifeDagger.CFrame = Character["Right Arm"].RightGripAttachment.WorldCFrame
task.wait()
end
end)
KnifeAnimation:GetMarkerReachedSignal("ThrowKnifeDagger"):Connect(function()
KnifeDagger.VectorForce.Force = Vector3.new(0, KnifeDagger.Mass * workspace.Gravity, 0)
KnifeDagger.Anchored = false
KnifeDagger:SetNetworkOwner(Player)
KnifeDagger.AssemblyLinearVelocity = (Character.HumanoidRootPart.CFrame.LookVector * 100)
end)
task.delay(AttackData.Attacks[tonumber(script.Name)].AttackDebounce, function()
AttackDebounces[Player] = nil
end)
return true
else
return false
end
end
return module
Try applying more force * 100 isn’t a lot it IS a big number in our eyes but the force’s eyes its not normally i have to do like 10,000 or even 20,000
But if I set it to a high amount, it will go super fast that my eye can’t see.
May i ask why are you adding the Knife’s Mass when in the video it doesn’t do that?
KnifeDagger.VectorForce.Force = Vector3.new(0, KnifeDagger.Mass * workspace.Gravity, 0)
It wasn’t the whole tutorial. It was just a clip.
Try setting the assemblylinearvelocity before setting the vectorforce.force