Garry's Mod Wiki

Revision Difference

GM:PlayerInitialSpawn#560950

<function name="PlayerInitialSpawn" parent="GM" type="hook"> <description> Called when the player spawns for the first time. See <page>GM:PlayerSpawn</page> for a hook called every player spawn. <note>This hook is called before the player has fully loaded, when the player is still in seeing the `Starting Lua` screen. For example, trying to use the <page>Entity:GetModel</page> function will return the default model (`models/player.mdl`).</note> ⤶ <note>You can send <page>net</page> messages starting from the player_activate event (see <page>Game_Events</page>).</note>⤶ ⤶ <warning>Due to the above note, sending <page>net</page> messages to the spawned player in this hook are highly unreliable, and they most likely won't be received (more information here: https://github.com/Facepunch/garrysmod-requests/issues/718). ⤶ ⤶ Workaround without networking:⤶ ```⤶ local load_queue = {}⤶ ⤶ hook.Add( "PlayerInitialSpawn", "myAddonName/Load", function( ply )⤶ load_queue[ ply ] = true⤶ end )⤶ ⤶ hook.Add( "SetupMove", "myAddonName/Load", function( ply, _, cmd )⤶ if load_queue[ ply ] and not cmd:IsForced() then⤶ load_queue[ ply ] = nil⤶ ⤶ myAddon:OnPlayerNetReady( ply ) -- Send what you need here!⤶ end⤶ end )⤶ ```⤶ ⤶ ⤶ With networking:⤶ ```⤶ -- CLIENT⤶ hook.Add( "InitPostEntity", "Ready", function()⤶ net.Start( "cool_addon_client_ready" )⤶ net.SendToServer()⤶ end )⤶ ```⤶ ```⤶ -- SERVER⤶ util.AddNetworkString( "cool_addon_client_ready" )⤶ ⤶ net.Receive( "cool_addon_client_ready", function( len, ply )⤶ -- Send what you need here!⤶ end )⤶ ```⤶ </warning>⤶ ⤶ <warning>Due to the above note, sending <page>net</page> messages to the spawned player in this hook are highly unreliable, and they most likely won't be received (more information here: https://github.com/Facepunch/garrysmod-requests/issues/718).</warning>⤶ ⤶ <note>If you look for a highly reliable way to send early <page>net</page> messages to a player on connection, consider using [player_activate](gameevent/player_activate) or [OnRequestFullUpdate](gameevent/OnRequestFullUpdate) game events.</note>⤶ </description> <realm>Server</realm> <args> <arg name="player" type="Player">The player who spawned.</arg> <arg name="transition" type="boolean">If `true`, the player just spawned from a map transition.</arg> </args> </function> <example> <description>Prints the name of the player joining.</description> <code> function GM:PlayerInitialSpawn(ply) print( ply:Nick() .. " joined the server." ) end -- That way you are overriding the default hook. -- You can use hook.Add to make more functions get called when this event occurs. hook.Add( "PlayerInitialSpawn", "some_unique_name", function( ply ) print( ply:Nick() .." joined the game." ) end) </code> <output> ``` Player1 joined the game. ``` </output> </example>