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

Why won't my Velocity Script work? Again...

Hello! After some testing and trial and error, I have come up with this script with a little help from last time. i am attempting to have a gui frame pop up when the player goes at a speed of -210 downwards. (or Y) However When I test it, this comes up in the output: 15:39:21.548 - Workspace.Player.LocalScript:3: attempt to compare two userdata values I don't quite understand this. Here is the script

s = script.Parent
while true do
		if game.Players.LocalPlayer.Character:FindFirstChild("Torso").Velocity <= Vector3.new(CurrentXValue,-210,CurrentZValue) then
	game.Players.LocalPlayer.PlayerGui.BlackoutGUI.Frame.Visible = true
	else
		game.Players.LocalPlayer.PlayerGui.BlackoutGUI.Frame.Visible = false
	end
end

NOTE! i have a script that inserts this local script into the player already so all I need his help with this one.

Thank you! I hope I can get an analysis of what I am doing wrong!

~Minikitkat

2 answers

✓ Accepted answer

A userdata value is a C object, or, in other words, some ROBLOX object.

Userdata include ROBLOX instances, CFrames, BrickColors, Color3s, and Vector3s.

For technical reasons, Lua is unable to report which type of ROBLOX object something is in an error -- only report that it is indeed a userdata (hence the not-so-clear error message)


In this case, it is a Vector3 values (.Velocity and Vector3.new(...)). You're trying to compare (using less than or equal to, <=) them.

You can't meaningfully compare vector3s -- there's no way to say one position in space is "bigger" than another (math can show this more rigorously).


Since you're interested in comparing the .y value, just do that instead:

if Torso.Velocity.y <= -210 then

You type out game.Players.LocalPlayer 3 times in your script. At that point, I would definitely suggest you make a variable to save yourself issues from having to type out something long (and/or mis-type something long), e.g.,

local player = game.Players.LocalPlayer

toward the top of your script.

1 comment

1

Yay! This worked!!! Thank you!

You should keep in mind that while loops should have a wait() to avoid the client from crashing.

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