Wall is not being destroyed

The wall is not nil, and for some reason even though I call :Destroy() on the function, the wall model is not nil.

image

  20:23:31.824  Wall  -  Client - LocalScript:69
  20:23:31.836    -  Client - LocalScript:70
  20:23:31.837    -  Client - LocalScript:72
  20:23:31.837  Wall  -  Client - LocalScript:73

This is the full script.

--\\ Variables //--
local tool = script.Parent
local handle = tool:WaitForChild("Handle")
local remoteEvent = tool:WaitForChild("RemoteEvent")

local player = game.Players.LocalPlayer
local mouse = player:GetMouse()
local cooldown = false
local equipped = false

local rotation = CFrame.Angles(math.rad(0), math.rad(0), math.rad(0))

local replicatedStorage = game:GetService("ReplicatedStorage")
local contextActionService = game:GetService("ContextActionService")
local wallModel = replicatedStorage:WaitForChild("Assets"):WaitForChild("Trowels"):WaitForChild("Wall")

local visualPlacementModel = nil
--\\ Functions //--
function rotateWall(actionName, inputState, inputObject)
	if inputObject.KeyCode == Enum.KeyCode.Q and inputState == Enum.UserInputState.Begin then
		rotation *= CFrame.Angles(math.rad(0), math.rad(-45), math.rad(0))
		visualPlacementModel:PivotTo(CFrame.new(mouse.Hit.Position) * CFrame.new(0, visualPlacementModel:GetExtentsSize().Y/2, 0) * rotation)
	elseif inputObject.KeyCode == Enum.KeyCode.E and inputState == Enum.UserInputState.Begin then
		rotation *= CFrame.Angles(math.rad(0), math.rad(45), math.rad(0))
		visualPlacementModel:PivotTo(CFrame.new(mouse.Hit.Position) * CFrame.new(0, visualPlacementModel:GetExtentsSize().Y/2, 0) * rotation)
	end
end

mouse.Move:Connect(function()
	if visualPlacementModel and equipped then
		visualPlacementModel:PivotTo(CFrame.new(mouse.Hit.Position) * CFrame.new(0, visualPlacementModel:GetExtentsSize().Y/2, 0) * rotation)
	end
end)

tool.Activated:Connect(function()
	local mouseCFrame = mouse.Hit

	if not cooldown and equipped then
		cooldown = true

		remoteEvent:FireServer(mouseCFrame, rotation)

		task.wait(7)

		cooldown = false
	end
end)

tool.Equipped:Connect(function()
	equipped = true
	print(visualPlacementModel)
	if not visualPlacementModel then
		visualPlacementModel = wallModel:Clone()
		visualPlacementModel.Parent = workspace.Terrain
		for i, v in pairs(visualPlacementModel:GetDescendants()) do
			if v:IsA("BasePart") then
				v.BrickColor = player.TeamColor
				v.CanCollide = false
				v.CanQuery = false
				v.Transparency = 0.5
			end
		end
	end
end)

tool.Unequipped:Connect(function()
	equipped = false
	
	print(visualPlacementModel)
	print(visualPlacementModel:Destroy())
	visualPlacementModel:Destroy()
	print(visualPlacementModel:Destroy())
	print(visualPlacementModel)
end)

contextActionService:BindAction("rotateWall", rotateWall, true, Enum.KeyCode.Q, Enum.KeyCode.E)
2 Likes

The variable still exists, and it’s still referencing an object. Make sure to set the variable to nil, because even if you destroy an object, it still exists in memory since you’re storing it in a variable.

Code:

tool.Unequipped:Connect(function()
	equipped = false

	print(visualPlacementModel)
	visualPlacementModel:Destroy()
	visualPlacementModel = nil
	print(visualPlacementModel)
end)
4 Likes

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.