Help needed with localscript

im following a tutorial on how to make a tower defense game but something is wrong with my script, can someone help?
tutorial: gnomecode tower defense game part 6 at 28:45
its says this in output:

script:

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local RunService = game:GetService("RunService")
local UserInputService = game:GetService("UserInputService")

local events = ReplicatedStorage:WaitForChild("Events")
local towers = ReplicatedStorage:WaitForChild("Towers")
local spawnTowerEvent = events:WaitForChild("SpawnTower")
local camera = workspace.CurrentCamera
local gui = script.Parent

local towerToSpawn = nil

local function MouseRaycast(exclude)
	local mousePosition = UserInputService:GetMouseLocation()
	local mouseRay = camera:ViewportPointToRay(mousePosition.X, mousePosition.Y)
	local raycastParams = RaycastParams.new()
	
	raycastParams.FilterType = Enum.RaycastFilterType.Exclude
	raycastParams.FilterDescendantsInstances = exclude
	
	local raycastResult = workspace:Raycast(mouseRay.Origin, mouseRay.Direction * 1000, raycastParams)
	
	return raycastResult
end

local function AddPlaceholderTower(name)
	
	local towerExists = towers:FindFirstChild(name)
	if towerExists then
		towerToSpawn = towerExists:Clone()
		towerToSpawn.Parent = workspace.Towers
		
		for i, object in ipairs(towerToSpawn:GetDescendants()) do
			if object:IsA("BasePart") then
				object.CollisionGroup = "Tower"
				object.Material = Enum.Material.ForceField
			end
		end
	end
end

gui.Spawn.Activated:Connect(function()
	AddPlaceholderTower("Gnome")
end)

UserInputService.InputBegan:Connect(function(input, processed)
	if processed then
		return
	end
	
	if towerToSpawn then 
		if input.UserInputType == Enum.UserInputType.MouseButton1 then
			spawnTowerEvent=FireServer(towerToSpawn.Name, towerToSpawn.PrimaryPart.CFrame)
		end
	end
end)

RunService.RenderStepped:Connect(function()
	if towerToSpawn then
		local result = MouseRaycast({towerToSpawn})
		if result and result.Instance then
			local x = result.Position.X
			local y = result.Position.Y + towerToSpawn.Humanoid.HipHeight + (towerToSpawn.PrimaryPart.Size.Y / 2)
			local z = result.Position.Z

			local cframe = CFrame.new(x,y,z)
			towerToSpawn:SetPrimaryPartCFrame(cframe)
		end
	end
end)

this is line 53

		spawnTowerEvent = FireServer(towerToSpawn.Name, towerToSpawn.PrimaryPart.CFrame)

I don’t wanna be that guy with extremely short answers, but I think you meant to say this on line 53:

spawnTowerEvent:FireServer(towerToSpawn.Name, towerToSpawn.PrimaryPart.CFrame)

What your code was essentially doing was initializing spawnTowerEvent to the returned value of FireServer, a function that was simply isn’t there.

3 Likes

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