Scripting Helpers is winding down operations and is now read-only. More info→
Ad
Log in to vote
1

How can you store a Vector3 vaule?

Asked by 6 years ago

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

Log in to vote
1
Answered by
DanzLua 2879 Moderation Voter Community Moderator
6 years ago

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
0
Thanks! hiimgoodpack 2009 — 6y
Ad

Answer this question