How can I create a dictionary system that stores the velocity of a part, and other values if needed

I’m currently in the process of revamping my time stop system and I want to know how I can store the velocity of a part in a dictionary.

local parts = {} -- I only want to use 1 table.

for _, v in pairs(workspace:GetDescendants()) do
	if v:IsA("BasePart") and not v.Anchored then
		table.insert(parts, v) -- how can I also store the velocity?
		v.Velocity = Vector3.new(0,0,0)
		v.Anchored = true
	end
end

wait(5)

for _, v in pairs(parts) do
        -- how can I re-store the velocity to it's former state?
	v.Anchored = false
end

If multiple parts have the same velocity, it might as well be wise to keep a table under a key, where the key is a velocity (a Vector3), and the table contains all the parts with that corresponding velocity.

This is what I’ve wound up doing, and it seems to work.

local parts = {}

for _, v in pairs(workspace:GetDescendants()) do
	if v:IsA("BasePart") and not v.Anchored then
		table.insert(parts, v)
		if v.Velocity ~= Vector3.new(0,0,0) then
			parts[v] = {Velocity = v.Velocity}
		else
			parts[v] = nil
		end
		v.Anchored = true
		v.Velocity = Vector3.new(0,0,0)
	end
end

for _, part in pairs(parts) do
	if parts[part] then
		part.Velocity = parts[part].Velocity
	end
	part.Anchored = false
end

@royaltoe was a nice help in this.

we talked it over a bit in dms and changed some things:

the code above finds every part in the game and adding them to a table called parts
when a part’s velocity isn’t 0, a table containing the parts velocity to the parts table
(ex:parts[somePart] = {Velocity = somePart.Velocity} )

this means the parts table could end up looking something like this:
parts = {part1, {Velocity = part1's velocity}, part2, part3, etc... }

when we loop through that in the second for loop, we are changing every value’s .Anchored property to false. some of the values in the table are tables which don’t have an anchored property.

bit of an oopsie because this would cause the script to error whenever a part has velocity since tables don’t have an anchored property.

we’re using the part as a key for our dictionary so to fix this, we can remove the table.insert line and get the part by using the key:

local parts = {}

for _, v in pairs(workspace:GetDescendants()) do
	if v:IsA("BasePart") and not v.Anchored then
		--table.insert(parts, v) REMOVED
		if v.Velocity ~= Vector3.new(0,0,0) then
			parts[v] = {Velocity = v.Velocity}
		end

		v.Anchored = true
		v.Velocity = Vector3.new(0,0,0)
	end
end

for part, partInfo in pairs(parts) do
	--if parts[part] then we don't need this because the part will always be in parts since it's the key
		part.Velocity = partInfo.Velocity
	--end
	part.Anchored = false
end
1 Like