Hello! Thanks for clicking on this question. I'm trying to make a ladder placement tool. When the player equips the tool and clicks somewhere on the ground, the ladder is supposed to appear on the ground, and it's supposed to become visible and anchored. The problem is, it won't place the ladder... it just places a block. I've provided the scripts, the children of the tool, and the link to the tool. Thanks!

https://www.roblox.com/library/2267143474/Ladder-placement-not-working

Tool:
--NOT A SCRIPT JUST THE LAYOUT OF THE TOOL
Ladder placement -- tool name
    Handle
        Mesh
    placementone--script
    placementtwo--script

placementone--script

updateInterval = 0.4

function update()
    updateInterval = updateInterval * .9

end

function onTouched(hit)
    local weld = Instance.new("Weld")
    weld.Part0 = script.Parent
    weld.Part1 = hit
    local temp = CFrame.new((script.Parent.Position + hit.Position) * 0.5)
    weld.C0 = script.Parent.CFrame:inverse() * temp
    weld.C1 = hit.CFrame:inverse() * temp
    weld.Parent = script.Parent
    connection:disconnect()
    while updateInterval > .1 do
    wait(updateInterval)
    update()

    end
end

connection = script.Parent.Touched:connect(onTouched)

placementtwo--script

Tool = script.Parent
VELOCITY = 85 

local Pellet = Instance.new("Part")
Pellet.Locked = true
Pellet.BackSurface = 0
Pellet.BottomSurface = 0
Pellet.FrontSurface = 0
Pellet.LeftSurface = 0
Pellet.RightSurface = 0
Pellet.TopSurface = 0
Pellet.Shape = 0
Pellet.Size = Vector3.new(1,1,1)
Pellet.BrickColor = BrickColor.new(2)
script.Parent.placementone:clone().Parent = Pellet
script.Parent.Handle.Mesh:clone().Parent = Pellet

function fire(mouse_pos)



    local vCharacter = Tool.Parent
    local vPlayer = game.Players:playerFromCharacter(vCharacter)

    local head = vCharacter:findFirstChild("Head")
    if head == nil then return end

    local dir = mouse_pos - head.Position
    dir = computeDirection(dir)

    local launch = head.Position + 5 * dir

    local delta = mouse_pos - launch

    local dy = delta.y

    local new_delta = Vector3.new(delta.x, 0, delta.z)
    delta = new_delta

    local dx = delta.magnitude
    local unit_delta = delta.unit


    local g = (-9.81 * 20)

    local theta = computeLaunchAngle( dx, dy, g)

    local vy = math.sin(theta)
    local xz = math.cos(theta)
    local vx = unit_delta.x * xz
    local vz = unit_delta.z * xz


    local missile = Pellet:clone()




    missile.Position = launch
    missile.Velocity = Vector3.new(vx,vy,vz) * VELOCITY

    missile.placementone.Disabled = false

    local creator_tag = Instance.new("ObjectValue")
    creator_tag.Value = vPlayer
    creator_tag.Name = "creator"
    creator_tag.Parent = missile

    missile.Parent = game.Workspace

end


function computeLaunchAngle(dx,dy,grav)

    local g = math.abs(grav)
    local inRoot = (VELOCITY*VELOCITY*VELOCITY*VELOCITY) - (g * ((g*dx*dx) + (2*dy*VELOCITY*VELOCITY)))
    if inRoot <= 0 then
        return .25 * math.pi
    end
    local root = math.sqrt(inRoot)
    local inATan1 = ((VELOCITY*VELOCITY) + root) / (g*dx)

    local inATan2 = ((VELOCITY*VELOCITY) - root) / (g*dx)
    local answer1 = math.atan(inATan1)
    local answer2 = math.atan(inATan2)
    if answer1 < answer2 then return answer1 end
    return answer2
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

    local targetPos = humanoid.TargetPoint

    fire(targetPos)

    wait(.2)

    Tool.Enabled = true
end

script.Parent.Activated:connect(onActivated)

1 comment

0

"script.Parent.Bomb:clone().Parent = Pellet" what is "Bomb" ?