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!