Hello! I recently started to redo my placement system, i have come into a few problems here and there solving them quickly, but this one i'm stumped on. Anybody know why this is happening?
Screenshots
(VERY LONG SCRIPTS INCOMING)
Server Scripts(I have several)
All script is not having problems except BaseHandler(i will include all of them just incase they don't work)
If you need the placement moudule, comment. k thanks bye
Placement module: pastebin(because its so long)
BaseHandler(~100 lines)
local players = game:GetService("Players") local DataStoreService = game:GetService("DataStoreService") local CashStore = DataStoreService:GetDataStore("BaseSave") local plot local function GetPlot(player) for i, plt in pairs(workspace.Plots:GetChildren()) do if plt then if plt.Plot.Owner.Value == player then plot = workspace.Plots:FindFirstChild(plt.Name) break end end end end players.PlayerAdded:Connect(function(plr) local key = "plr-"..plr.UserId local savedata local success, err = pcall(function() savedata = CashStore:GetAsync(key) end) if success then for i, data in pairs(savedata) do if data then local savemodel = game.ReplicatedStorage.Items:FindFirstChild(data.Name) if savemodel then savemodel.PrimaryPart.Transparency = 1 savemodel:SetPrimaryPartCFrame(CFrame.new(data.CFS.X, data.CFS.Y, data.CFS.Z) * CFrame.Angles(0, math.rad(data.CFS.R, 0))) end savemodel.Parent = plot.PlacedObjects end end end if not success then error("Failled to read data: "..tostring(err).." Check line 20 in DataHandler and below to fix problem, if you are a non-developer. Message the developer(s) with a screenshot as SOON AS POSSIBLE") return end end) local function save(plr) wait(1) GetPlot(plr) local key = "plr-"..plr.UserId local save = {} for i, object in pairs(plot.PlacedObjects:GetChildren()) do if object then table.insert(save, { ["Name"] = object.Name; ["CFS"] = { ["X"] = object.PrimaryPart.CFrame.X; ["Z"] = object.PrimaryPart.CFrame.Z; ["Y"] = object.PrimaryPart.CFrame.Y; ["R"] = object.PrimaryPart.Orientation.Y; }; }) end end local success, err = pcall(function() CashStore:SetAsync(key, save) end) if not success then error("(CRITICAL) Failled to over-write data: "..tostring(err).." Check line 53 in BaseHandler and below to fix problem, if you are a non-developer. Message the developer(s) with a screenshot as SOON AS POSSIBLE") return end end game.ReplicatedStorage.Remotes.Save.OnServerEvent:Connect(save)
PlacementServer(17 lines)
game.ReplicatedStorage.Remotes.PlaceObject.OnServerEvent:Connect(function(plr, mdlNm, X, Y, Z, R, location) local model = game.ReplicatedStorage.Items:FindFirstChild(mdlNm):Clone() if plr.leaderstats.Cash.Value >= model.Price.Value then model:SetPrimaryPartCFrame(CFrame.new(X, Y, Z) * CFrame.Angles(0, math.rad(R), 0)) model.PrimaryPart.CanCollide = false model.PrimaryPart.Transparency = 1 model.Parent = location plr.leaderstats.Cash.Value = plr.leaderstats.Cash.Value - model.Price.Value else model:Destroy() model = nil return end end)
DataHandler
local players = game:GetService("Players") local DataStoreService = game:GetService("DataStoreService") local CashStore = DataStoreService:GetDataStore("CashData1") players.PlayerAdded:Connect(function(plr) local stats = Instance.new("Folder") stats.Name = "leaderstats" stats.Parent = plr local cash = Instance.new("IntValue") cash.Name = "Cash" cash.Value = 1000 cash.Parent = stats local key = "plr-"..plr.UserId local savedata local success, err = pcall(function() savedata = CashStore:GetAsync(key) end) if not success then warn("Failled to read data: "..tostring(err).." Check line 20 in DataHandler and below to fix problem, if you are a non-developer. Message the developer(s) with a screenshot as SOON AS POSSIBLE") return end if savedata then cash.Value = savedata.Cash else local key = "plr-"..plr.UserId local save = { ["Cash"] = plr.leaderstats.Cash.Value } local success, err = pcall(function() CashStore:SetAsync(key, save) end) end end) players.PlayerRemoving:Connect(function(plr) local key = "plr-"..plr.UserId local save = { ["Cash"] = plr.leaderstats.Cash.Value } local success, err = pcall(function() CashStore:SetAsync(key, save) end) if not success then warn("Failled to over-write data: "..tostring(err).." Check line 20 in DataHandler and below to fix problem, if you are a non-developer. Message the developer(s) with a screenshot as SOON AS POSSIBLE") return end end)
PlotHandler
local players = game:GetService("Players") local plots = workspace.Plots local function FindPlot(plr) local plotchirden = plots:GetChildren() for i,plt in pairs(plotchirden) do if plt then if plt.Plot.Owner.Value ~= nil then print("Plot owner is: " ..plt.Plot.Owner.Value.Name) else local pltNm = plt.Name game.ReplicatedStorage.Remotes.ClientPlot:FireClient(plr, pltNm) plt.Plot.Owner.Value = plr break end end end end players.PlayerAdded:Connect(FindPlot)
LOCAL SCRIPTS
PlacementClient
local placementMoudule = require(game.ReplicatedStorage.Modules.PlacementModule) local plot local plauer = game.Players.LocalPlayer local mouse = plauer:GetMouse() game.ReplicatedStorage.Remotes.ClientPlot.OnClientEvent:Connect(function(pltNm) plot = workspace.Plots:FindFirstChild(pltNm) end) for i, v in pairs(script.Parent.MainFrame:GetChildren()) do v.MouseButton1Click:Connect(function() placementMoudule:StartPlacement(game.ReplicatedStorage.Items, v.Name, plot.Plot, plot.PlacedObjects) end) end mouse.Button1Down:Connect(function() placementMoudule:PlaceModel(plot.PlacedObjects, game.ReplicatedStorage.Remotes.PlaceObject) end)
GUICLIENTSAVE
script.Parent.MouseButton1Click:Connect(function() game.ReplicatedStorage.Remotes.Save:FireServer() end)
AUTOCLIENTSAVE
local autosavewait = 20 while true do wait(autosavewait) game.ReplicatedStorage.Remotes.Save:FireServer() end