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

How can you store a Vector3 vaule?

I am trying to make a freecam script and make the player stay where the player was standing before that player activated the script. I tried 3 methods but it still says "Unable to cast value to Object".

All comments explaining more of how the script works will be in Method 1. Method 2 and 3 are just modifications of Method 1.

Method 1

Using the actual value (for ex:10, 0, 20)

LocalScript: (in StarterGui in case if your wondering.)

local v = true --This just tells if the player is in FreeCam or not.
local Player = game.Players.LocalPlayer --the player
local player = game.Workspace:WaitForChild(Player.Name) --the player in the Workspace
local playercords = nil --basiclly where the torso was last before it activated FreeCam
local sendinfo = game:GetService('ReplicatedStorage').Reciever -- the RemoteEvent

game:GetService("UserInputService").InputBegan:connect(function(key)
	sendinfo:FireServer(v, key, Player, player, playercords)
	
	sendinfo.OnClientEvent:connect(function(v2, playercords2) --This just changes the variables here so next time it can send the correct coordinates and other stuff.
		v = v2
		playercords = playercords2
	end)
end)

ServerScript: (in ServerScriptService in case if your wondering.)

local remote = game:GetService("ReplicatedStorage").Reciever --da RemoteEvent
remote.OnServerEvent:connect(function(_, v2, key, Player, player, playercords2, name)
	local v = v2
	local playercords = {playercords2} 
	if v and key.KeyCode == Enum.KeyCode.LeftAlt then
		print("Fly mode")
		playercords = player:FindFirstChild("LowerTorso").Position + Vector3.new(0, 2, 0)
		Player.Character = nil
		workspace.CurrentCamera.CameraType = "Fixed"
		v = false
	elseif v and key.KeyCode == Enum.KeyCode.RightAlt then
		Player.Character = nil
		workspace.CurrentCamera.CameraType = "Fixed"
		v = false
	elseif v == false and key.KeyCode == Enum.KeyCode.LeftAlt then
		print("Fall mode")
		workspace.CurrentCamera.CameraType = "Custom"
		Player:LoadCharacter()
		print("Attempting to teleport a player.")
		player:FindFirstChild('LowerTorso').CFrame = CFrame.new(playercords[1])
		
		v = true
	elseif v == false and key.KeyCode == Enum.KeyCode.RightAlt then
		workspace.CurrentCamera.CameraType = "Custom"
		Player:LoadCharacter()
		v = true
	end
	remote:FireClient(name, tostring(v), playercords)
	
end)

Method 2

Using a part and have the LocalScript find the part's position:

LocalScript:

local v = true
local Player = game.Players.LocalPlayer
local player = game.Workspace:WaitForChild(Player.Name)
local playercords = nil
local sendinfo = game:GetService('ReplicatedStorage').Reciever
local name = Player.Name

game:GetService("UserInputService").InputBegan:connect(function(key)
	if key.KeyCode == Enum.KeyCode.LeftAlt or key.KeyCode == Enum.KeyCode.RightAlt then
		sendinfo:FireServer(v, key, Player, player, playercords, name)
		
		sendinfo.OnClientEvent:connect(function(v2, playercords2)
			v = v2
			playercords = playercords2.Position
		end)
	end
end)

ServerScript:

local remote = game:GetService("ReplicatedStorage").Reciever
remote.OnServerEvent:connect(function(_, v2, key, Player, player, playercords2, name)
	local v = v2
	local playercords = {playercords2}
	if v and key.KeyCode == Enum.KeyCode.LeftAlt then
		print("Fly mode")
		playercords = player:FindFirstChild("LowerTorso").Position + Vector3.new(0, 2, 0)
		Player.Character = nil
		workspace.CurrentCamera.CameraType = "Fixed"
		v = false
	elseif v and key.KeyCode == Enum.KeyCode.RightAlt then
		Player.Character = nil
		workspace.CurrentCamera.CameraType = "Fixed"
		v = false
	elseif v == false and key.KeyCode == Enum.KeyCode.LeftAlt then
		print("Fall mode")
		workspace.CurrentCamera.CameraType = "Custom"
		Player:LoadCharacter()
		print('wait')
		wait(10)
		print("Attempting to telerport a player.")
		player:FindFirstChild('LowerTorso').CFrame = CFrame.new(playercords[1])
		
		v = true
	elseif v == false and key.KeyCode == Enum.KeyCode.RightAlt then
		workspace.CurrentCamera.CameraType = "Custom"
		Player:LoadCharacter()
		v = true
	end
	Instance.new("Part").Parent = script.Parent
	Player.PlayerGui.Name = "PlaceHolder"
	Player.PlayerGui.PlaceHolder.Position = Vector3.new(playercords) --The error here says "PlayerGui is not a valid member of Player"
	remote:FireClient(name, tostring(v), script.Parent.PlaceHolder:GetFullName())
	
end)

Method 3

Using a table:

LocalScript:

local v = true
local Player = game.Players.LocalPlayer
local player = game.Workspace:WaitForChild(Player.Name)
local playercords = nil
local sendinfo = game:GetService('ReplicatedStorage').Reciever
local name = Player.Name

game:GetService("UserInputService").InputBegan:connect(function(key)
	if key.KeyCode == Enum.KeyCode.LeftAlt or key.KeyCode == Enum.KeyCode.RightAlt then
		sendinfo:FireServer(v, key, Player, player, playercords, name)
		
		sendinfo.OnClientEvent:connect(function(v2, playercords2)
			v = v2
			playercords = playercords2[1]
		end)
	end
end)

ServerScript:

local remote = game:GetService("ReplicatedStorage").Reciever
remote.OnServerEvent:connect(function(_, v2, key, Player, player, playercords2, name)
	local v = v2
	local playercords = {playercords2}
	if v and key.KeyCode == Enum.KeyCode.LeftAlt then
		print("Fly mode")
		playercords = player:FindFirstChild("LowerTorso").Position + Vector3.new(0, 2, 0)
		Player.Character = nil
		workspace.CurrentCamera.CameraType = "Fixed"
		v = false
	elseif v and key.KeyCode == Enum.KeyCode.RightAlt then
		Player.Character = nil
		workspace.CurrentCamera.CameraType = "Fixed"
		v = false
	elseif v == false and key.KeyCode == Enum.KeyCode.LeftAlt then
		print("Fall mode")
		workspace.CurrentCamera.CameraType = "Custom"
		Player:LoadCharacter()
		print('wait')
		wait(10)
		print("Attempting to telerport a player.")
		player:FindFirstChild('LowerTorso').CFrame = CFrame.new(playercords[1])
		
		v = true
	elseif v == false and key.KeyCode == Enum.KeyCode.RightAlt then
		workspace.CurrentCamera.CameraType = "Custom"
		Player:LoadCharacter()
		v = true
	end
	Instance.new("Part").Parent = script.Parent
	script.Parent.Part.Name = "PlaceHolder"
	script.Parent.PlaceHolder.Position = Vector3.new(playercords)
	remote:FireClient(name, tostring(v), script.Parent.PlaceHolder:GetFullName())
	
end)

1 answer

✓ Accepted answer

If your looking to save a vector3 value that you can get over scripts you could use a Vector3Value instance to save it.

local v = Instance.new("Vector3Value")
v.Value=Vector3.new(0,1,0)
v.Parent=workspace

1 comment

0

Thanks!

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