Menu
 

Garry's Mod Lua Scripting

Garry's Mod Lua Scripting Guide

Introduction to Lua scripting for creating custom server functionality and game modes.

Understanding Lua in GMod

Garry's Mod uses Lua as its scripting language. Scripts run in different realms:

  • Server: Runs on server, handles game logic
  • Client: Runs on player's computer, handles UI/rendering
  • Shared: Runs on both server and client

Script Locations

garrysmod/lua/autorun/server/ # Server-side scripts garrysmod/lua/autorun/client/ # Client-side scripts garrysmod/lua/autorun/ # Shared scripts garrysmod/lua/gamemodes/ # Game mode scripts garrysmod/lua/weapons/ # Custom weapons garrysmod/lua/entities/ # Custom entities

Basic Script Structure

-- Comments start with -- print("Hello, GMod!") local playerName = "Player" local playerHealth = 100 function GreetPlayer() print("Welcome, " .. playerName) end GreetPlayer()

Common Hooks

Hooks allow you to run code at specific events:

-- Server-side hook hook.Add("PlayerSpawn", "MySpawnHook", function(ply) print(ply:Nick() .. " has spawned!") ply:SetHealth(150) end) -- Shared hook hook.Add("Think", "MyThinkHook", function() -- Runs every frame end)

Essential Functions

-- Print to console print("Message") -- Send message to player ply:ChatPrint("Hello!") -- Send message to all players for k, v in ipairs(player.GetAll()) do v:ChatPrint("Server Message") end -- Create entity local ent = ents.Create("prop_physics") ent:SetPos(Vector(0, 0, 0)) ent:Spawn()

Creating a Simple Command

hook.Add("PlayerSay", "MyCommandHook", function(ply, text) if text == "!health" then ply:SetHealth(100) ply:ChatPrint("Health restored!") return "" -- Prevent message from showing end end)

Working with Players

-- Get all players local players = player.GetAll() -- Iterate through players for k, ply in ipairs(players) do print(ply:Nick(), ply:SteamID(), ply:GetHealth()) end -- Find player by name local target = player.GetByName("PlayerName") -- Check if player is admin if ply:IsAdmin() then -- Admin-only code end

Best Practices

  • Use local variables for performance
  • Add comments to complex code
  • Test scripts on a local server first
  • Use print() for debugging
  • Avoid expensive operations in Think hooks
  • Clean up entities when no longer needed

Resource: Check the GMod Wiki for complete API documentation.

Learning More

Top