• Sharing PlayerInitialSpawn with Client
    6 replies, posted
Hi, I'm trying to replicate the server hook PlayerInitialSpawn clientside, here is what I have: [code] if ( SERVER ) then hook.Add( "PlayerInitialSpawn", "myscript_sv_hooks_PlayerInitialSpawn", function( ply ) util.AddNetworkString( "myscript_cl_hooks_PlayerInitialSpawn" ); net.Start( "myscript_cl_hooks_PlayerInitialSpawn" ) net.Send( ply ) end ) else net.Receive( "myscript_cl_hooks_PlayerInitialSpawn", function( len, ply ) print( tostring( ply ) .. " " .. tostring( LocalPlayer() ) ) end ) end [/code] But this prints "nil [NULL Entity]"... What can I do, is there a better way than what I'm trying to do? I would like to replicate many server hooks on the client, because I don't understand why they aren't shared :S Thanks in advance.
You're sending an empty message to the player who spawned and then you're trying to use the 2nd parameter on a clientside net.Receive callback which doesn't exist (that's for when the client sends the server a message, it identifies who sent it). [b][url=http://gmodwiki.net/Lua/Libraries/net/WriteEntity]Lua/Libraries/net/WriteEntity[img]http://gmodwiki.net/favicon.ico[/img][/url][/b] Also, put util.AddNetworkString outside the hook callback.
You don't even need to send the player object, it will be nil on client anyway AFAIK ( Because LocalPlayer is nil, the entity for localplayer is not initialized yet. ), make a timer of 0 seconds and use LocalPlayer()
Thanks, but it's still not working correctly: [code] if ( SERVER ) then util.AddNetworkString( "myscript_cl_hooks_PlayerInitialSpawn" ); hook.Add( "PlayerInitialSpawn", "myscript_sv_hooks_PlayerInitialSpawn", function( ply ) net.Start( "myscript_cl_hooks_PlayerInitialSpawn" ) net.WriteEntity( ply ) --net.Send( ply ) net.Broadcast() end ) else net.Receive( "myscript_cl_hooks_PlayerInitialSpawn", function( len ) print( tostring( net.ReadEntity() ) ) end ) end [/code] When I spawn on the server for the first time, it prints "[NULL Entity]". And when another player join the server and spawn for the first time, I see "Player [2][nick]", while he will see "[NULL Entity]" :/ Edit: Ok Robotboy, I was hoping that I would not need to use a timer or some other crappy workaround that I used to use, years ago...
You can use the [URL="http://wiki.garrysmod.com/page/GM/OnEntityCreated"]OnEntityCreated[/URL] hook as well and check if it's the LocalPlayer()
PlayerInitialSpawn is called during Sending Client Info, or just before. The player hasn't fully initialized at this point. You could do a hack and use a timer, or what brandon says; when the entity is created - send the net message. No need to send the player info, just send an empty net message to the client like so: [lua]util.AddNetworkString( "ClientPlayerInitialSpawn" ); net.Start( "ClientPlayerInitialSpawn" ); // Send it to the connecting player, or if everyone needs to know about it net.Send( ply ); // this is the or net.Broadcast( );[/lua] Do not use both Send and Broadcast, one or the other...
Thanks all ;)
Sorry, you need to Log In to post a reply to this thread.