Scripting Helpers is winding down operations and is now read-only. More info→
Ad
Log in to vote
0

How do I make my fireball launch in a straight line?

Asked by 7 years ago

With the help of a friend, I have a script for a fireball that works pretty well- it does damage upon hitting a humanoid, burns them for a set amount of seconds (dealing more damage) and even has a little explosion when it hits a solid object. However, as you can see here...

https://gfycat.com/TightUnselfishCurlew

My fireball launches a good amount over the head of the player, and dips down. I don't want it to dip down, I want it to move in a straight line towards the direction I click. How could I do this? Here is my code:

local tool = script.Parent
local player = game.Players.LocalPlayer
local mouse = player:GetMouse()
local fire = script:WaitForChild("Fire")
local cooldown = false

local speed = 150
local damage = 50
local cd = 1 -- cooldown (seconds)
local burntime = 4 --(seconds)

tool.Activated:connect(function()
    if not cooldown then
        cooldown = true
        local pos = mouse.Hit.p

        local ball = Instance.new("Part", workspace)
        ball.Shape = "Ball"
        ball.TopSurface = "Smooth"
        ball.BottomSurface = "Smooth"
        ball.Size = Vector3.new(5, 5, 5)
        ball.Position = tool.Handle.Position
        ball.CanCollide = false
        ball.Transparency = 1
        ball.BrickColor = BrickColor.new("Neon orange")
        fire:Clone().Parent = ball
        ball.Fire.Enabled = true

        local direction = (tool:WaitForChild("Handle").Position - pos).Unit
        ball.Velocity = direction * -speed

        wait(.05)

        ball.CanCollide = true

        game:GetService("Debris"):AddItem(ball, 10)

        ball.Touched:connect(function(part)

            local exp = Instance.new("Explosion", workspace)
            exp.Position = ball.Position + ball.CFrame.lookVector * ball.Size
            exp.DestroyJointRadiusPercent = 0
            exp.BlastRadius = 0
            exp.BlastPressure = 0

            ball:Destroy()
            --other stuff
            if part.Parent:FindFirstChild("Humanoid") then
                local h = part.Parent:FindFirstChild("Humanoid")

                coroutine.resume(coroutine.create(function()
                    local f = fire:Clone()
                    f.Parent = h.Parent.Torso
                    f.Enabled = true
                    for i = 1, burntime do
                        if h.Parent:FindFirstChild("Torso") then
                            print("burn")
                            h:TakeDamage(damage/burntime)
                            wait(1)
                        end
                    end
                    if f then f.Enabled = false wait(1) f:Destroy() end
                end))

                if h.Parent:FindFirstChild("Torso") then
                    h.Parent.Torso.Velocity = Vector3.new(0, 0, 0)
                end
            end
        end)

        coroutine.resume(coroutine.create(function()
            wait(cd)
            cooldown = false
        end))

        while ball and wait() do
            ball.Velocity = direction * -speed
        end



    end


end)
0
This is more of a grenade-type script. You have to anchor the projectile then use CFrame for positioning instead of Velocity. The only way I know to avoid the "dip". 1N0body 206 — 7y

Answer this question