So I have here this incomplete datastore saving module and it has a lot of extra stuff, but on line 141 it gets the saved rotation and sets a new part's rotation to the saved rotation. It sometimes works for parts, but other times it gives me very skewed values that aren't even close the original part's rotation.
local DataStoreService = game:GetService("DataStoreService")
local D_Version = 0
local ServerDataStore = DataStoreService:GetDataStore("TestGameData"..D_Version)
local collectionservice = game:GetService("CollectionService")
local objectBuilder = require(game.ServerScriptService.objectBuilder)
local Server = "Server::Test0"
local seperator = "|"
local serverdata = {}
function seperateData(data)
local function filterElement(str)
local element = ""
for i = 1,string.len(str) do
if string.sub(str,i,i) ~= seperator then
element = element..string.sub(str,i,i)
else
local tempdata = data
data = ""
for j = i+1,string.len(str) do
data = data..string.sub(tempdata,j,j)
end
break
end
end
return element
end
local transformedData = {}
local Type = string.sub(data,1,1)
data = string.sub(data,2,string.len(data))
if Type == "R" then
local name = filterElement(data)
local cframe = filterElement(data)
local amount = filterElement(data)
local regen = filterElement(data)
data = {Type,name,cframe,amount,regen}
elseif Type == "B" then
local name = filterElement(data)
local cframe = filterElement(data)
local owner = filterElement(data)
local health = filterElement(data)
data = {Type,name,cframe,owner,health}
end
return data
end
function seperateCFrame(cframe)
local localSeperator = ","
local storageTable = {}
local element = ""
local count = 0
print(cframe)
for i = 1,string.len(cframe) do
if string.sub(cframe,i,i) ~= localSeperator then
element = element..string.sub(cframe,i,i)
end
if string.sub(cframe,i,i) == localSeperator or i >= string.len(cframe) then
count = count + 1
print("Element: "..element)
table.insert(storageTable,element)
element = ""
i = i + 1
end
if count >= 6 then
break
end
end
return storageTable
end
function getTag(tag)
if tag == "B" then return "Building" end
if tag == "R" then return "Resource" end
if tag == "I" then return "Item" end
end
local module = {}
-- Resource Helper: Type|Name|CFrame|Amount|Regen|
module.addResource = function(resource)
local stringElement = "R"..
resource.Name..seperator..
tostring(resource.CFrame)..seperator..
tostring(resource.Configuration.Amount.Value)..seperator..
tostring(resource.Configuration.Regen.Value)
table.insert(serverdata,stringElement)
end
-- Building Helper: Type|Name|CFrame|Owner|Health
module.addBuilding = function(building)
local stringElement = "B"..
building.Name..seperator..
tostring(building.PrimaryPart.Position)..", "..
tostring(building.PrimaryPart.Orientation)..seperator..
tostring(building.Configuration.Owner.Value)..seperator..
tostring(building.BuildingHumanoid.Health)
table.insert(serverdata,stringElement)
end
module.removeObject = function(obj)
for i,v in pairs(serverdata) do
local data = seperateData(v)
if data[2] == obj.Name then
table.remove(serverdata,i)
end
end
end
module.saveServer = function()
local data = ServerDataStore:GetAsync(Server)
local newdata = serverdata
if not data then
ServerDataStore:SetAsync(Server, newdata)
else
local function updateValue(oldValue)
return newdata
end
ServerDataStore:UpdateAsync(Server,updateValue)
end
warn("server data was successfully saved")
end
module.loadServer = function()
local data = ServerDataStore:GetAsync(Server)
for i,v in pairs(data) do
local elementData = seperateData(v)
-- Building
if elementData[1] == "B" then
local model = objectBuilder.buildObject(elementData[2])
model.Name = elementData[2]
collectionservice:AddTag(model,getTag(elementData[1]))
model.Parent = game.Workspace
local cframe = seperateCFrame(elementData[3])
local partCFrame = CFrame.new(cframe[1],cframe[2],cframe[3])
local rotation = CFrame.Angles(math.rad(cframe[4]),math.rad(cframe[5]),math.rad(cframe[6]))
partCFrame = partCFrame * rotation
model:SetPrimaryPartCFrame(partCFrame)
end
end
warn("server data was successfully loaded")
end
return module
