Hey Guys so i have a placement datastore and stuff And R To rotate by 90 Degrees but. Whenever you rejoin it saves the placement but it does not save your rotation when you rejoin it rotates by 90 degrees and then you rejoin again it rotates by 180 degrees and keep on adding 90 degrees to it Here is the script.
local players = game:GetService("Players") local DataStoreService = game:GetService("DataStoreService") local DataStore = DataStoreService:GetDataStore("DatBaseV2") local function GetPlot(plr) for i, plt in pairs(workspace.Plots:GetChildren()) do if plt then if plt.Plot.Owner.Value == plr then return workspace.Plots:FindFirstChild(plt.Name) end end end end local function Save(plr) local key = "plr-"..plr.UserId wait(0.1) local plot = GetPlot(plr) local save = {} for i, obj in pairs(plot.PlacedObjects:GetChildren()) do if obj then table.insert(save, { ["Name"] = obj.Name, ["CFS"] = { ["X"] = plot.Plot.CFrame:ToObjectSpace(CFrame.new(obj.PrimaryPart.CFrame.p)).X; ["Y"] = plot.Plot.CFrame:ToObjectSpace(CFrame.new(obj.PrimaryPart.CFrame.p)).Y; ["Z"] = plot.Plot.CFrame:ToObjectSpace(CFrame.new(obj.PrimaryPart.CFrame.p)).Z; ["R"] = obj.PrimaryPart.Orientation.Y } }) end end local success, err = pcall(function() DataStore:SetAsync(key, save) end) if not success then warn("Failed to over-write data( "..tostring(err)) return end end local function Load(plr) wait(1) local plot = GetPlot(plr) local key = "plr-"..plr.UserId local savedData local success, err = pcall(function() savedData = DataStore:GetAsync(key) end) if not success then warn("Failed to read data( "..tostring(err)) return end if savedData then for i, data in pairs(savedData) do if data then local SaveModel = game.ReplicatedStorage.Models:FindFirstChild(data.Name):Clone() if SaveModel then SaveModel.PrimaryPart.Transparency = 1 SaveModel:SetPrimaryPartCFrame(plot.Plot.CFrame * CFrame.new(data.CFS.X,data.CFS.Y,data.CFS.Z) * CFrame.Angles(0,math.rad(data.CFS.R), 0) ) SaveModel.Parent = plot.PlacedObjects end end end else Save(plr) end end game.ReplicatedStorage.Events.Save.OnServerEvent:Connect(Save) players.PlayerAdded:Connect(Load) players.PlayerRemoving:Connect(Save)
EDIT: Try this:
SaveModel:SetPrimaryPartCFrame(CFrame.new(data.CFS.X,data.CFS.Y,data.CFS.Z) * CFrame.Angles(0,math.rad(data.CFS.R), 0) )