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

Why is the Guided Rocket Launcher going crazy? [closed]

Asked by 9 years ago

Everytime the Guided Rocket Launches, The camera started getting glitch, Here's the script:

local active
local Tool = script.Parent
local Launcher = Tool.Handle

local Rocket = Instance.new("Part")
Rocket.Locked = true
Rocket.BackSurface = 3
Rocket.BottomSurface = 3
Rocket.FrontSurface = 3
Rocket.LeftSurface = 3
Rocket.RightSurface = 3
Rocket.TopSurface = 3
Rocket.Size = Vector3.new(1, 2.5, 1)
Rocket.BrickColor = BrickColor.new(23)
Rocket.FormFactor = 3


local rocketMesh = Instance.new("SpecialMesh")
rocketMesh.MeshId = "http://www.roblox.com/asset/?id=31601976"
rocketMesh.TextureId = "http://www.roblox.com/asset/?id=31601599"
rocketMesh.Parent = Rocket

local debris = game:GetService("Debris")

local swooshSound
local explosionSound

local vCharacter
local vPlayer

function blow(hit, missile)
    active = false
    game.Workspace.CurrentCamera.CameraSubject = game.Players.LocalPlayer.Character.Humanoid
game.Workspace.CurrentCamera.CameraType = "Custom"
    if missile  == nil then return end
    if swooshSound then swooshSound:stop() end
    explosion = Instance.new("Explosion")
    explosion.Position = missile.Position
    -- find instigator tag
    local creator = missile:FindFirstChild("creator")
    explosion.Hit:connect(function(part, distance) onPlayerBlownUp(part, distance, creator) end)
    explosion.Parent = game.Workspace   
    if explosionSound then explosionSound:Play() end
    wait(.1)
    if missile then missile:Remove() end
end

function onPlayerBlownUp(part, distance, creator)
    if part.Name == "Head" or part.Name == "Torso" then 
        local humanoid = part.Parent.Humanoid
        tagHumanoid(humanoid, creator)
    end
end

function tagHumanoid(humanoid, creator)
    -- tag does not need to expire if all explosions lethal 
    if creator ~= nil then
        local new_tag = creator:clone()
        new_tag.Parent = humanoid       
    end
end

function fire(vTarget)
    local vCharacter = Tool.Parent  
    local vHandle = Tool:findFirstChild("Handle")
    if vHandle == nil then
        print("Handle not found")
        return 
    end
    local direction = vTarget - vHandle.Position
    direction = computeDirection(direction)
    local missile = Rocket:clone()
    local pos = vHandle.Position + (direction * 10.0)       
    missile.CFrame = CFrame.new(pos,  pos + direction) * CFrame.Angles(math.pi/2, 0, 0)

    local creator_tag = Instance.new("ObjectValue")

    local vPlayer = game.Players:GetPlayerFromCharacter(vCharacter)

    if vPlayer == nil then
        print("Player not found")
    else
        if (vPlayer.Neutral == false) then -- nice touch
            missile.BrickColor = vPlayer.TeamColor
        end
    end

    local floatForce = Instance.new("BodyForce")
    floatForce.force = Vector3.new(0, missile:GetMass() * 196.1, 0.0)
    floatForce.Parent = missile

    missile.Velocity = computeDirection(Tool.Parent.Humanoid.TargetPoint - missile.Position) * 20.0

    creator_tag.Value = vPlayer
    creator_tag.Name = "creator"
    creator_tag.Parent = missile    

    missile.Parent = game.Workspace

    if swooshSound then swooshSound:Play() end

    missile.Touched:connect(function(hit) blow(hit, missile) end)

    debris:AddItem(missile, 100.0)
    local cam = workspace.CurrentCamera
cam.CameraSubject = missile
cam.CameraType = "Follow"
active = true
while(active) do
    direction =  computeDirection(Tool.Parent.Humanoid.TargetPoint - missile.Position)
    missile.Velocity = direction * 20.0

    --The below line of code wasn't in the tutorial.  It's optional and just points the missile in the right direction
    missile.CFrame = CFrame.new(missile.Position,  missile.Position + direction) * CFrame.Angles(math.pi/2, 0, 0)
    wait()
end
end

function computeDirection(vec)
    local lenSquared = vec.magnitude * vec.magnitude
    local invSqrt = 1 / math.sqrt(lenSquared)
    return Vector3.new(vec.x * invSqrt, vec.y * invSqrt, vec.z * invSqrt)
end

Tool.Enabled = true
function onActivated()
    if not Tool.Enabled then
        return
    end

    Tool.Enabled = false

    local character = Tool.Parent;
    local humanoid = character.Humanoid
    if humanoid == nil then
        print("Humanoid not found")
        return 
    end

    swooshSound = Launcher:FindFirstChild("Swoosh")
    explosionSound = Launcher:FindFirstChild("Explosion")

    local targetPos = humanoid.TargetPoint

    fire(targetPos)

    wait(7)

    Tool.Enabled = true
end


script.Parent.Activated:connect(onActivated)


Closed as Too Broad by MrNicNac

This question has been closed because it is too broad and is generally unanswerable. Please ask a more specific question.

Why was this question closed?