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

Why is this dragger glitch happening?

Asked by
Bisoph 5
6 years ago

I've been trying to remake those early Roblox construction games. I know that the old construction tools only work with Experimental Mode, so I made mines from scratch. Unfortunately, there is a problem when you release your mouse. Sometimes it the brick creates the joints but it teleports up and disconnects some other bricks. I don't know how to explain it without pictures.

Here is a snippet of the client script:

local function mouseDown()
    local target = mouse.Target
    if canSelect(target) then -- checks if the target exists and if the target isn't locked or too far away
        local point = mouse.hit:toObjectSpace(target.CFrame).p
        if trySelection(target) then -- sets the selection to the model the part is in
            local objects = {}
            collectBaseParts(currentSelection, objects) -- gets the selection + the target if it is a base part
            --table.foreachi(objects, print) -- debugging
            local s, msg = pcall(function()
                dragger = Instance.new('Dragger')
                dragger:MouseDown(target, point, objects)
                mouse.Icon = 'rbxasset://textures/grabrotatecursor.png'
                --tool.Enabled = false
            end)
            if not s then
                warn(msg)
            end
        end
    end
end

local function mouseUp()
    --tool.Enabled = true
    mouse.Icon = 'rbxasset://textures/grabcursor.png'
    pcall(function()
        dragger:MouseUp()
        selection.Adornee = nil
        lasso.Part = nil
        dragger = nil
    end)
    if currentSelection and workspace.FilteringEnabled then -- checks if the selection exists and if there is filtering enabled
        if currentSelection:IsA('BasePart') then -- tells the server to place the part in the desired location
            tool:WaitForChild('PlaceParts'):InvokeServer(currentSelection, currentSelection.CFrame)
        elseif currentSelection:IsA('Model') then -- tells the server to place all the parts in the model  in the desired locations
            for i, obj in ipairs(currentSelection:GetDescendants()) do
                if obj:IsA('BasePart') then
                    tool:WaitForChild('PlaceParts'):InvokeServer(obj, obj.CFrame)
                end
            end
        end
    end -- if no filtering enabled it doesn't send the server the message because the server already got it
    currentSelection = nil
end

Here is the server script:

tool = script.Parent

tool.PlaceParts.OnServerInvoke = function(player, part, cframe)
    pcall(function()
        part.CFrame = cframe
    end)
end

Is this a problem with the dragger tool, or a problem with the code?

Answer this question