Revision Difference
States#512874
<cat>Dev</cat>⤶
⤶
The states or so called realms represent different Lua states.⤶
⤶
There are 3 Lua states in Garry's Mod.⤶
⤶
==<span class="client" style="color: white;">Client</span>==⤶
⤶
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.⤶
⤶
==<span class="server" style="color: white;">Server</span>==⤶
⤶
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.⤶
⤶
==<span class="menu" style="color: white;">Menu</span>==⤶
⤶
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.⤶
⤶
==<span class="shared_m" style="color: white;">Other</span>==⤶
⤶
In the wiki you may also see the following pseudo-states:<br/>⤶
<span class="shared"> </span> Shared (Client and Server)<br/>⤶
<span class="client_m"> </span> Client and Menu<br/>⤶
<span class="shared_m"> </span> 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.⤶
⤶
⤶