-- the modulescript in serverscriptservice
local part = {}
function part.Spawn(player, name, cframe)
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local partExists = ReplicatedStorage.Parts:FindFirstChild(name)
if partExists then
local newPart = partExists:Clone()
newPart.Parent = workspace.Parts
for _, object in newPart:GetDescendants() do
if object:IsA("BasePart") then
object.CollisionGroup = "Tower"
end
end
if newPart.PrimaryPart then
newPart:SetPrimaryPartCFrame(cframe)
else
warn("No PrimaryPart set for", newPart.Name)
end
end
end
return part
-- the script in serverscriptservice
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Events = ReplicatedStorage:WaitForChild("Events")
local SpawnPartEvent = Events:WaitForChild("SpawnPart")
local part = require(script:WaitForChild("PartModule"))
SpawnPartEvent.OnServerEvent:Connect(part.Spawn)
--script inside the button to place the tower
UserInputService.InputBegan:Connect(function(input, processed)
if processed then return end
if partToSpawn and input.UserInputType == Enum.UserInputType.MouseButton1 then
if partToSpawn.PrimaryPart then
print("Sending to server:", partToSpawn.Name)
SpawnPartEvent:FireServer(partToSpawn.Name, partToSpawn.PrimaryPart.CFrame)
partToSpawn:Destroy()
partToSpawn = nil
else
warn("PrimaryPart missing on ghost model")
end
end
end)
please help me i am learning raycasting and its very confusing for me