Revision Difference
States#522357
<cat>Dev</cat>⤶
<title>Realms / States / Clientside / Serverside</title>⤶
<cat>Dev.GettingStarted</cat>⤶
<title>Realms / States / Clientside / Serverside / Menu</title>⤶
The states or so called realms represent different Lua states.
There are 3 Lua states in Garry's Mod.
# Client
The **Client** state is basically your game client. It handles things such as visual rendering. It can communicate with Server state via the <page>net</page> as an example. A variable set on **Client** state cannot be retrieved on Server state without networking it.
A common issue is to give the client too much freedom, the client should only respond to what the server tells it, and not the other way around.
# Server
The **Server** state handles things on the server; it's the only state used on Dedicated Servers. This handles things like telling entities what to do, controlling weapons/players and all game logic (what happens when and how in gamemodes). It can communicate with Client state via the <page>net</page> as an example. A variable set on **Server** state cannot be retrieved on **Client** state without networking it.
# Menu
The **Menu** state is a hidden and isolated state for the Main Menu. It has some vital functions available to make Main Menu functional and cannot communicate with **Client** or **Server** states. Any Lua ran in this state will run regardless of sv_allowcslua.
# Other
In the wiki you may also see the following pseudo-states:<br/>
Shared (Client and Server)<br/>
Client and Menu<br/>
Shared and Menu (all states - Client, Server and Menu)
These are not an actual states, rather, they signify that the function or hook can be executed in each one of the specified states.
It doesn't necessarily mean the function/hook will return the same values in the different states, or that it does the same thing. For example, the function <page>Entity:GetPos</page> can be called on Server and Client, so it is shared. <page>undo.GetTable</page> is also a shared function, but it works differently on client and server as explained in its description. The <page>math</page> and <page>string</page> on the other hand can be used in all 3 states.