Garry's Mod
Garry's Mod

Client-Side vs. Server-Side Scripting

Understand Garry's Mod client-side vs. server-side scripting. Learn where code executes, its authority, and its role in game logic, visuals, and security.

Client-Side vs. Server-Side Scripting

In Garry's Mod, understanding the distinction between client-side and server-side scripting is fundamental for any aspiring developer. This separation dictates where code is executed and what it can affect, ensuring a consistent and secure gameplay experience, especially in multiplayer environments. Misunderstanding this can lead to bugs, exploits, and unexpected behavior.

Server-Side Scripting: Code that runs exclusively on the game server. This is where the authoritative game state is maintained. Server-side scripts handle critical game logic, such as player damage, scoring, inventory management, and the spawning of entities. Because the server is authoritative, client-side attempts to manipulate these aspects are generally ored or rejected. This is crucial for preventing cheating and ensuring fairness.

Client-Side Scripting: Code that runs on each individual player's computer (the client). This type of scripting is responsible for visual elements, user interface (UI) modifications, sound effects, and client-specific gameplay feedback. For example, rendering a custom HUD, playing a sound effect when a weapon fires, or displaying visual effects are all handled client-side. Clients can also send requests to the server, which the server then validates and acts upon.

Here's a table summarizing the key differences:

Feature Server-Side Client-Side
Execution Location Game Server Player's Computer
Authority Authoritative (game state) Non-authoritative (visuals, UI)
Primary Use Game logic, physics, entity management, player data Visuals, HUD, sound, effects, input handling
Cheating Prevention Essential for preventing most cheats Limited; primarily visual/UI cheats

When developing, it's important to use the correct environment for your code. For instance, if you want to create a new weapon that deals damage and affects player health, its core damage logic must be server-side. However, the visual firing effect and sound should be client-side. Garry's Mod provides specific functions and hooks to differentiate between these environments, such as `SERVER` and `CLIENT` boolean variables, and network messages for communication between the two.