Hi guys. im kinda new here. Been looking for a roblox help fourm for a while now and found this site. weird verification thingy .... o.0!
Anyway My Problem: i've written a script that clones a part or a model depending on how a user configures it.
The script checks for 2 things,the checks are as follows:
1) check if the script can find the model to be cloned
2) (Optional) Check to see if the user wants to use a button to clone the model with ie: click a ClickDetector/ touch a Part or using one of the Gui Element buttons to clone the model.
If the user hasn't got a button, the script will use a 5 sec timer to check for the spawn point of the model to be cloned to see if its clear. If its not then just sleep.
The problem im having is when you touch a part in the workspace it keeps saying the spawn point is not clear when in reality i've removed the model from the workspace!
For the life of me im unsure what is going on but when you dont specify a button the script works as intended! But with a button it seems to think the model is still at the spawn point... o.0!
i know in the past this would work but am i calling the Touch event wrong or do i need to envoke the server from local script inside the button or player? im confused lol
The code i wrote (in full!) is below
Code:
--// name of your model or part you want to clone local Model_Or_Part_Name = "Observation Tower" --// change this to the button your using (optional!) local Button_Name = "Part" local CloneMETime = 5 --// in seconds! local CloneDisableTime = 5 --// time to disable the button in seconds, this is to stop spamming of the button (if set!) --// this is for your button if its touchable ingame! local TouchedColor = Color3.fromRGB(0,0,0) --[[ ############################################################################################################## #################### Don't change anything below this unless you know what your are doing!#################### ############################################################################################################## ]] local OriginalColor = TouchedColor local model = (function() local Chk = script.Parent:FindFirstChild(Model_Or_Part_Name) if(Chk == nil) then error("Error: Model_Or_Part_Name Varable is not set\n replace [\" Model_Or_Part_Name \"] With the name of the model or part you want to clone on Line 1 and try again!") end return Chk end)() local btn = (function() local Chk = script.Parent:FindFirstChild(Button_Name) if(Chk == nil) then warn("Error: Button_Name Varable is not set\n \t replace \"Button\" With the name of the Button you want to use and try again!") return nil end if(Chk:IsA("BasePart") == true) then OriginalColor = Chk.Color end return Chk end)() local Debounce = false local Cpy = model:Clone() local ModelPosition,ModelSize = (function() local isModel = model:IsA("Model") if(isModel == true) then local Bonding_BoxCFrame, Bonding_Box = model:GetBoundingBox() return Bonding_BoxCFrame.Position,Bonding_Box else return model.Position, model.Size end end)() local function isAreaEmpty() --// the following code is taken from the roblox wiki --// https://developer.roblox.com/en-us/api-reference/function/WorldRoot/FindPartsInRegion3 --// Just modified to work with models and Parts local SA = ModelPosition - (0.5 * (ModelSize*0.95)) local SB = ModelPosition + (0.5 * (ModelSize*0.95)) return workspace:IsRegion3Empty(Region3.new(SA, SB)) end local function Cloneit(Model) local C = Cpy:Clone() C.Parent = workspace C:MakeJoints() end local function DoTheDeed() local isClear = isAreaEmpty() if(Debounce == false) then Debounce = true if(isClear == true) then if(btn ~= nil and btn:IsA("BasePart") == true) then btn.Color = TouchedColor end print("Quick Spawn point is Clear \n Spawning clone...") Cloneit(Cpy) else if(btn ~= nil and btn:IsA("BasePart") == true) then btn.Color = Color3.fromRGB(255,0,0) end print("Spawn point is NOT clear waiting for spawn point to become clear...") end wait(CloneDisableTime) if(btn ~= nil and btn:IsA("BasePart") == true) then btn.Color = OriginalColor end Debounce = false end end local Hooked_Up = false if(btn ~= nil) then if(btn:IsA("BasePart") == true) then btn.Touched:connect(function(part) local isHuman = (part ~= nil and part.Parent:FindFirstChildOfClass("Humanoid") ~= nil) and true or false if(isHuman == true) then --// something with a humanoid has touched this button! --// lets try to make a clone of my model! DoTheDeed() end end) Hooked_Up = true end if(btn:IsA("ClickDetector") == true) then btn.MouseClick:connect(function(playerWhoClickedME) print(playerWhoClickedME.." Clicked me! \n spawning model!") DoTheDeed() end) Hooked_Up = true end if(btn:IsA("GuiButton") == true or btn:IsA("TextButton") == true or btn:IsA("ImageButton") == true)then btn.MouseButton1Click:Connect(DoTheDeed) btn.TouchTap:Connect(DoTheDeed) Hooked_Up = true end end if(Hooked_Up == true) then print("Model Cloner is Ready for operation!") else warn("Model Cloner couldn\'t find a suitible button\n Running Checker every ",CloneMETime," secs") while true do DoTheDeed() wait(CloneMETime) end end
Any help would be appreciated!