Garry's Mod Wiki

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.⤶ ⤶ ==&lt;span class="client" style="color: white;"&gt;Client&lt;/span&gt;==⤶ ⤶ 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.⤶ ⤶ ==&lt;span class="server" style="color: white;"&gt;Server&lt;/span&gt;==⤶ ⤶ 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.⤶ ⤶ ==&lt;span class="menu" style="color: white;"&gt;Menu&lt;/span&gt;==⤶ ⤶ 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.⤶ ⤶ ==&lt;span class="shared_m" style="color: white;"&gt;Other&lt;/span&gt;==⤶ ⤶ In the wiki you may also see the following pseudo-states:<br/>⤶ &lt;span class="shared"&gt;&nbsp;&lt;/span&gt; Shared (Client and Server)<br/>⤶ &lt;span class="client_m"&gt;&nbsp;&lt;/span&gt; Client and Menu<br/>⤶ &lt;span class="shared_m"&gt;&nbsp;&lt;/span&gt; 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.⤶ ⤶ ⤶