Realms / States
The states or so called realms represent different Lua states.
There are 3 Lua states in Garry's Mod.
The Client state is basically your game client. It handles things such as visual rendering. It can communicate with Server state via the net 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.
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 net as an example. A variable set on Server state cannot be retrieved on Client state without networking it.
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
These are not an actual states, rather, they signify that the function or hook can be executed in each one of the specified states. In the wiki you may also see the following pseudo-states:
- Shared (Client and Server)
- Client and Menu
- Shared and Menu (all states - Client, Server and Menu)
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 Entity:GetPos can be called on Server and Client, so it is shared. undo.GetTable is also a shared function, but it works differently on client and server as explained in its description. The math and string on the other hand can be used in all 3 states.