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

Problems with clone of a model in ReplicatedStorage?

Asked by 9 years ago

I have a button that, when clicked, clones a model from ReplicatedStorage. The clone follows the player's cursor and locks to a grid area. When a certain part of the model is clicked, it is locked into position and no longer follows the cursor.

local mouse = game.Players.LocalPlayer:GetMouse()
local testdesk = game.ReplicatedStorage.TestDesk:Clone()

game:GetService("UserInputService").InputBegan:connect(function(inputObject)
    if inputObject.KeyCode == Enum.KeyCode.R and script.Parent.Rotate.Value == false then
        script.Parent.Rotate.Value = true
    elseif inputObject.KeyCode == Enum.KeyCode.R and script.Parent.Rotate.Value == true then
        script.Parent.Rotate.Value = false --When R is pressed, the model is rotated
    elseif inputObject.KeyCode == Enum.KeyCode.LeftShift or inputObject.KeyCode == Enum.KeyCode.RightShift then
        script.Parent.Parent.Parent.Cancel.Visible = false
        testdesk.Parent = nil
        script.Parent.Parent.Parent.Active.Value = false
    end --When Shift is pressed, the model disappears
end)

script.Parent.MouseButton1Down:connect(function()
    if script.Parent.Parent.Parent.Active.Value == false then
        script.Parent.Parent.Parent.Active.Value = true
        script.Parent.Parent.Parent.Cancel.Visible = true
        testdesk.Parent = workspace
        testdesk.PrimaryPart = testdesk.Primary
        for i,v in pairs (testdesk:GetChildren()) do
            if v.Name ~= "Primary" then
                v.Transparency = .5
                v.CanCollide = false
            end --This makes the model transparent while it follows the cursor
        end
        while script.Parent.Parent.Parent.Active.Value == true do
            if mouse.Target ~= nil then
                if mouse.Target.Name == "Even" and mouse.Target.Parent ~= testdesk and script.Parent.Rotate.Value == true then
                    testdesk:SetPrimaryPartCFrame(mouse.Target.CFrame * CFrame.Angles(0, math.pi/2, 0))
                elseif mouse.Target.Name == "Even" and mouse.Target.Parent ~= testdesk and script.Parent.Rotate.Value == false then
                    testdesk:SetPrimaryPartCFrame(mouse.Target.CFrame * CFrame.Angles(0, 0, 0))
                end --This maintains the model's rotation when it moves on the grid
            end
            wait()
        end
    end
end)

script.Parent.Rotate.Changed:connect(function()
    print("changed")
    testdesk:SetPrimaryPartCFrame(testdesk.Primary.CFrame * CFrame.Angles(0, math.pi/2, 0))
end) --This rotates the model

script.Parent.Parent.Parent.Cancel.MouseButton1Down:connect(function()
    script.Parent.Parent.Parent.Cancel.Visible = false
    testdesk.Parent = nil
    script.Parent.Parent.Parent.Active.Value = false
end) --This has the same effect as pressing the Shift key

testdesk.Primary.ClickDetector.MouseClick:connect(function()
    if script.Parent.Parent.Parent.Active.Value == true then
        script.Parent.Parent.Parent.Cancel.Visible = false
        script.Parent.Visible = false
        script.Parent.Parent.Parent.Active.Value = false
        for i,v in pairs (testdesk:GetChildren()) do
            if v.Name ~= "Primary" then
                v.Transparency = game.ReplicatedStorage.TestDesk:FindFirstChild(v.Name).Transparency
                v.CanCollide = true
            else v.Transparency = 1
            end
        end
    end
end)--This locks the model into position when a certain part is clicked

Here's what the GUI and the model look like:

ScreenGui
    Active (A BoolValue)
    Cancel (A TextButton)
    ScrollingFrame
        DeskButton
            Rotate (A BoolValue)
            Local Script
TestDesk
    A bunch of parts
    Primary (A Part)

The problem here is that since the clone of the model is determined before any events occur, which means that only one clone of the model can exist at any given time. Eventually I will make a script that will allow the player to place multiple desks or other models, and this clone problem is going to make that impossible. How can I fix this without ruining my script?

0
That is simple. When the placing gets done, redo Line 2. Marios2 360 — 9y

1 answer

Log in to vote
0
Answered by 8 years ago

So basically when the player is done placing an item, clone the item again and allow them to place it again.

Ad

Answer this question