I edited my fireball script and everything is much better now than before. The only problem is that when I set the ButtonDown value to true, the print function works perfectly, but the BodyGyro CFrame to update in the for i loop doesn't change. Can anyone fix this?
The server script. The local script just invokes a RemoteFunction deletes the BodyGyro and BodyPosition.
game.ReplicatedStorage.BlazeInvoke.OnServerInvoke = function(plr, MouseHit)
print("Working!")
--Variables--
local char = plr.Character
print(char)
local RootPart = char:WaitForChild("HumanoidRootPart")
local animation = script:WaitForChild("Animation")
local hum = char.Humanoid
animTrack = hum:LoadAnimation(animation)
local hitdebounce = false
script.ButtonDown.Value = true
circle = game.ReplicatedStorage.MagicItems.MagicCircles.BlazeMagic.BlazeCircle:Clone()
circle.Size = Vector3.new(10,10,10)
circle.Parent = game.Workspace.CustomDebris
circle.Anchored = false
circle.CanCollide = false
circle.Transparency = 1
circle.CFrame = char.HumanoidRootPart.CFrame * CFrame.new(1.5,0,-2)
local Weld = Instance.new("Weld")
Weld.Parent = circle
Weld.Part0 = circle
Weld.Part1 = RootPart
Weld.C0 = CFrame.new(1.5,0,-2)
bp = Instance.new("BodyPosition")
bp.Parent = char.Torso
bp.MaxForce = Vector3.new(math.huge,math.huge,math.huge)
bp.Position = char.Torso.Position
bp.Name = "TorsoPosition"
bg = Instance.new("BodyGyro")
bg.D = 100
bg.Parent = char.Torso
bg.MaxTorque = Vector3.new(math.huge,math.huge,math.huge)
bg.CFrame = CFrame.new(char.Torso.Position, MouseHit)
bg.Name = "MouseGyro"
if script.ButtonDown.Value == true then
for i = 1, 110 do
bg.CFrame = CFrame.new(char.Torso.Position, MouseHit)
print("Changing BG CFrame")
wait(2)
end
end
end

2 comments
try setting the P or Power property of the BodyGyro
in the for i loop or before it? if so what would that do? is it not strong enough to work? because it works without the for i loop. the character smoothly faces the mouse. i just want it to follow it like that for a certain amount of time