Scripting HelpersARCHIVE
A little piece of Roblox history. Preserved for everyone, one question at a time.Read about the archive →
COMMUNITY QUESTION

How can you rotate a part using another part's orientation?

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

1 answer

local part1 = --locate your part here local part2 = --locate yourparthere

part1.Orientation = Vector3.new(part2.Orientation)

This discussion is preserved as it was. New answers, comments, and votes are closed.