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

Projectile and gravity effect?

Asked by 4 years ago

i followed the instructions on how to set up blasters and projectiles, but the projectile is still effected by gravity. did i do something wrong? (please forgive the absolute load of script tot read, i don't know what to leave out. script used: -- This script handles blaster events on the client-side of the game

-- How fast the projectile moves local PROJECTILE_SPEED = 400 -- How often a projectile can be made on mouse clicks (in seconds) local LAUNCH_COOLDOWN = 1 -- How far away the projectile is created from the front of the player local PROJECTILE_OFFSET = 50

-- Variables for Roblox services local ContextActionService = game:GetService("ContextActionService") local Players = game:GetService("Players") local ReplicatedStorage = game:GetService("ReplicatedStorage")

-- Variables for RemoteEvents and Functions (see the BlasterHandler Script) local launchProjectile = ReplicatedStorage:WaitForChild("LaunchProjectile") local destroyProjectile = ReplicatedStorage:WaitForChild("DestroyProjectile") local destroyEnemy = ReplicatedStorage:WaitForChild("DestroyEnemy") local ping = ReplicatedStorage:WaitForChild("Ping")

-- Variable to store the basic projectile object local projectileTemplate = ReplicatedStorage:WaitForChild("BlasterProjectile") -- Variable for the player object local player = Players.LocalPlayer

local canLaunch = true

-- Fires when the player clicks the mouse local function onLaunch() -- Only launch if the player's character exists and the blaster isn't on cooldown if player.Character and canLaunch then -- Prevents the player from launching again until the cooldown is done canLaunch = false spawn(function() wait(LAUNCH_COOLDOWN) canLaunch = true end)

    -- Create a new projectile
    local projectile = projectileTemplate:Clone()
    local playerCFrame = player.Character.PrimaryPart.CFrame
    local direction = playerCFrame.LookVector
    projectile.Position = playerCFrame.Position + direction * PROJECTILE_OFFSET
    projectile.Velocity = direction * PROJECTILE_SPEED

    -- Zero out gravity on the projectile so it doesn't fall through the ground
    local mass = projectile:GetMass()
    projectile.VectorForce.Force = Vector3.new(0, 1, 0) * mass * game.Workspace.Gravity

    -- Put the projectile in the workspace
    projectile.Parent = game.Workspace

    -- Tell the server to create a new projectile and send it back to us
    local serverProjectile = launchProjectile:InvokeServer(projectile.Position, projectile.Velocity)
    -- Hide the server copy of the projectile
    serverProjectile.LocalTransparencyModifier = 1

    -- Set up touched event for the projectile
    projectile.Touched:Connect(function(other)
        -- The only collisions we care about are those with enemies and with walls
        if other.Name == "EnemyBall" or other.Name == "Wall" then
            -- Hit an enemy or wall, destroy the projectile and tell the server to destroy its copy
            projectile:Destroy()
            destroyProjectile:FireServer(serverProjectile)

            -- Hit an enemy, destroy it and tell the server to destroy it as well
            if other.Name == "EnemyBall" then
                destroyEnemy:FireServer(other)
                other:Destroy()
            end
        end
    end)
end

end

-- Connect a function to the ping RemoteFunction. This can be empty because all -- the server needs to hear is a response ping.OnClientInvoke = function() end

ContextActionService:BindAction("Launch", onLaunch, false, Enum.UserInputType.MouseButton1)

0
i think the actual thing didnt load correctly, but either way, please tell me if i screwed something up, or forgot something Mark_Lunnar 0 — 4y

Answer this question