Teleporting Players

How would I teleport a player in glua? all I could think of is



ply:SetPos(Vector(5262.6, 6252.5, 62616.2)) << Not real made up!


My script is:



DermaButton.DoClick = function ( ply )
	newpos = ("-2721.942627, -1785.375122, -139.968750")
	ply = LocalPlayer()
	ply:SetPos(Vector( newpos ))
end


I obviously have changed it to have no newpos var and just put the position inside the SetPos but that didn’t work either!
There is no errors in my code and have no clue why its not working.
Please help

So you are trying to teleport player clientside? Lol.
You should really learn difference between serverside functions and clientside functions, because you are basically trying to teleport player without having such powers (ergo, you are not a server).
Errors do not appear because you are testing it on singleplayer, try testing it on SRCDS or multiplayer.

In other words, Entity:SetPos() is a serverside function and cannot be used clientside (unless it’s something like a CLuaEmitter ofc), so do not run it in stuff like derma menus.

This is in multiplayer, 2. Thanks for saying that its server side but how would I put a button from clientside to server? So I put a usermessage hook? or what?

I would suggest using net library.
Usermessages are net’s predecessor.

Sorry, I’m on phone but client-side
[LUA]
net.Start ( “MyCoolMessage” )
net.SendToServer ()
[/LUA]

server-side
[LUA]
util.AddNetworkString ( “MyCoolMessage” )

net.Receive ( “MyCoolMessage”, function ( messageLength, ply )
print( "message received, sent by " … ply:Nick() )
–set their pos and such
end )
[/LUA]

Getting this error



Warning: Unhandled usermessage 'VendorOpen'


This is my full code I have done:
ServerSide:



AddCSLuaFile( "cl_init.lua" )
AddCSLuaFile( "shared.lua" )

include( 'shared.lua' )


local SPAWN_POS = Vector(-2410.784424, -598.148560, -131.968750)
local SPAWN_ANG = Angle(0, 180, 0)


local function SpawnNPC()
	timer.Simple(5,function()
		local npc = ents.Create("ammo_vendor")
		npc:SetPos(SPAWN_POS)
		npc:SetAngles(SPAWN_ANG)
		npc:Spawn()
	end)

end
hook.Add("InitPostEntity","SpawnVendorNPC", SpawnNPC)


function ENT:Initialize( )
	self:SetModel( "models/props_interiors/VendingMachineSoda01a.mdl" )
 	self:SetHullType( HULL_HUMAN )
	self:SetUseType( SIMPLE_USE )
	self:SetHullSizeNormal( )
	self:SetSolid( SOLID_BBOX )
	self:CapabilitiesAdd( CAP_ANIMATEDFACE || CAP_USE_SHOT_REGULATOR || CAP_TURN_HEAD || CAP_AIM_GUN )
	self:SetMaxYawSpeed( 5000 )
	local PhysAwake = self.Entity:GetPhysicsObject( )
	if PhysAwake:IsValid( ) then
		PhysAwake:Wake( )
	end 
end

function ENT:OnTakeDamage( dmg ) 
	return false
end

function ENT:AcceptInput( name, activator, caller )
    if ( name == "Use" && IsValid( activator ) && activator:IsPlayer( ) ) then
	umsg.Start("VendorOpen",activator)
    umsg.End()
    end
end


util.AddNetworkString ( "Teleport" )

net.Receive ( "Teleport", function ( messageLength, ply )
print( "message received, sent by " .. ply:Nick() )
	newpos = ("-2721.942627, -1785.375122, -139.968750")
	ply = LocalPlayer()
	ply:SetPos(Vector( newpos ))
end )


ClientSide:



include( 'shared.lua' )


function OpenMenu( ply )
local base = vgui.Create( "DFrame" )
base:SetPos( 80,50 )
base:SetSize( 600, 400 )
base:SetTitle( "Ammo Vendor Created By - PabloSky11400" )
base:SetVisible( true )
base:SetDraggable( true )
			function base:Paint( w, h )
	draw.RoundedBox( 0, 0, 0, w, h, Color( 0, 0, 255, 100 ) )
		surface.SetDrawColor( Color(0,150,255,255) )
		surface.DrawRect( 0, 0, self:GetWide(), self:GetTall() )
		
		surface.SetDrawColor( Color(0,0,0,255) )
		surface.DrawRect( 2, 2, self:GetWide()-4, self:GetTall()-4 )
	end
base:ShowCloseButton( true )



// Buttons
local DermaButton = vgui.Create( "DButton" )
DermaButton:SetParent( base ) -- Set parent to our "DermaPanel"
DermaButton:SetText( "Change RP Name" )
DermaButton:SetPos( 10, 30 )
DermaButton:SetSize( 880, 20 )
			function DermaButton:Paint( w, h )
	draw.RoundedBox( 0, 0, 0, w, h, Color( 0, 0, 255, 100 ) )
		surface.SetDrawColor( Color(0,150,255,255) )
		surface.DrawRect( 0, 0, self:GetWide(), self:GetTall() )
		
		surface.SetDrawColor( Color(0,0,0,255) )
		surface.DrawRect( 2, 2, self:GetWide()-4, self:GetTall()-4 )
	end
DermaButton.OnCursorEntered = function ()
surface.PlaySound( "ui/buttonrollover.wav" )
function DermaButton:Paint( w, h )
	draw.RoundedBox( 0, 0, 0, w, h, Color( 0, 0, 255, 255 ) )
		surface.SetDrawColor( Color(0,150,255,255) )
		surface.DrawRect( 0, 0, self:GetWide(), self:GetTall() )
		
		surface.SetDrawColor( Color(0,0,255,255) )
		surface.DrawRect( 2, 2, self:GetWide()-4, self:GetTall()-4 )
	end
end
DermaButton.OnCursorExited = function ()
function DermaButton:Paint( w, h )
	draw.RoundedBox( 0, 0, 0, w, h, Color( 0, 0, 255, 255 ) )
		surface.SetDrawColor( Color(0,150,255,255) )
		surface.DrawRect( 0, 0, self:GetWide(), self:GetTall() )
		
		surface.SetDrawColor( Color(0,0,0,255) )
		surface.DrawRect( 2, 2, self:GetWide()-4, self:GetTall()-4 )
	end
end
DermaButton.DoClick = function ( ply )
	net.Start ( "Teleport" )
	net.SendToServer ()
end
end
usermessage.Hook("VendorOpen",OpenMenu)


[editline]28th December 2013[/editline]

I know my script is messy and not polished or anything but don’t shout at me please:P! Im new to this!

That’s because you are using usermessage to open the menu and appearently you removed it from serverside code.