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?
