How to set up a SA:MP server from scratch
Full setup walkthrough for a San Andreas Multiplayer server: deploy legacy SA:MP 0.3.7 or modern open.mp (recommended), configure server.cfg / config.json, pick a gamemode (freeroam, roleplay, deathmatch, derby), install filterscripts and plugins (streamer, YSI, sscanf, MySQL), set up RCON admin, migrate from legacy SA:MP to open.mp, and fix the common errors.
What you need first
- An active SA:MP plan on Fatality Servers. See our SA:MP hosting plans.
- A legal GTA: San Andreas copy for each player. Clients also install SA:MP or open.mp on top of a SA 1.0 install (the original, not Definitive Edition).
- A basic SFTP client (FileZilla, WinSCP) โ SA:MP is entirely file-based.
- A Pawn compiler if you're authoring custom code (ships with SA:MP / open.mp SDKs).
- For serious RP servers: a MySQL database โ accounts, faction state, vehicles. Our panel can provision one.
Sizing note: SA:MP is ancient and incredibly light. A 200-slot DM or freeroam server barely dents a single CPU core. Roleplay servers are heavier because of MySQL queries and complex gamemodes โ still, 500-slot RP servers rarely exceed 2 GB RAM on open.mp. Your bottleneck will almost always be network I/O, not CPU.
SA:MP vs open.mp
Two options:
- SA:MP (0.3.7-R5) โ the original multiplayer mod by Kalcor. Last updated 2015. Server binary still works, massive legacy codebase, but no fixes for long-standing bugs + exploits.
- open.mp (OpenMultiplayer) โ community-maintained open-source rewrite. Drop-in compatible with almost all SA:MP gamemodes and plugins, fixes thousands of bugs, adds new features (Discord integration, HTTP/JSON client, better anti-cheat). What any new server should run.
open.mp loads unmodified SA:MP .amx gamemodes. 99% of legacy scripts work without changes. A handful of low-level plugins need open.mp-native ports โ the popular ones (streamer, YSI, sscanf, MySQL) have all been ported.
This guide covers both where they differ but defaults to open.mp for new installs.
Deploy the server (1-click)
Our SA:MP template downloads the latest open.mp release (or legacy SA:MP 0.3.7-R5, if chosen), writes a starter config, ships with a default freeroam gamemode, and opens UDP 7777 on your plan's IP.
-
Pick the SA:MP template at checkout
On the SA:MP hosting page, pick a plan sized for your slot count. RP servers want 500-1000 slots; DM and freeroam typically 50-100.
-
Pick engine (open.mp or legacy SA:MP)
Template asks. Pick open.mp unless you have a specific legacy reason.
-
Wait for binaries to pull
open.mp is ~15 MB. SA:MP is ~8 MB. Install is ~30 seconds.
-
Confirm the server is listening
---------- Open Multiplayer ---------- [2026-04-18 12:34:56] Server launched with open.mp version 1.3.0 [2026-04-18 12:34:56] Loaded gamemode 0: grandlarc.amx [2026-04-18 12:34:56] [core] Application initialized [2026-04-18 12:34:56] Started server on 0.0.0.0:7777 [2026-04-18 12:34:56] Query ready, connected to master server.
File layout & where things go
/ โ server root
โโโ omp-server (Linux) or omp-server.exe (Windows) โ open.mp binary
โ OR samp03svr (Linux) / samp-server.exe (Windows) for legacy SA:MP
โโโ config.json โ open.mp config (JSON)
โ OR server.cfg โ legacy SA:MP config (plain key=value)
โโโ gamemodes/ โ compiled .amx gamemodes
โ โโโ <gamemode>.amx
โโโ filterscripts/ โ compiled .amx filterscripts
โ โโโ <script>.amx
โโโ plugins/ โ server plugins (.so Linux / .dll Windows)
โ โโโ streamer.so
โ โโโ sscanf.so
โ โโโ mysql.so
โ โโโ ...
โโโ scriptfiles/ โ runtime data used by gamemodes (accounts, bans, logs)
โโโ components/ โ open.mp native components (legacy uses plugins/)
โโโ qawno/ โ Pawn compiler (for authoring gamemodes)
โโโ include/ โ Pawn .inc header files
โโโ log.txt โ server log (legacy SA:MP)
OR server_log.txt โ open.mp log
Core server.cfg / config.json
open.mp (config.json)
{
"pawn": {
"legacy_plugins": [
"streamer",
"sscanf",
"mysql"
],
"main_scripts": [
"grandlarc 1"
],
"side_scripts": [
"admin 1"
]
},
"rcon": {
"enable": true,
"password": "change-me-rcon",
"allow_teleport": false
},
"network": {
"bind": "",
"port": 7777,
"public_addr": "",
"mtu": 576,
"sleep": 5,
"use_lan_mode": false,
"player_timeout": 10000
},
"max_players": 100,
"sleep": 5,
"name": "My open.mp Server [EU] - Freeroam",
"mode_name": "Grand Larceny",
"website": "https://your-community.com",
"logo_url": "https://your-community.com/logo.png",
"language": "English",
"announce": true,
"game": {
"map": "San Andreas",
"weather": 10,
"gravity": 0.008,
"world_time": 12,
"chat_radius": 200.0,
"player_marker_radius": 250.0,
"player_marker_mode": 1,
"death_drop_amount": 0,
"allow_interior_weapons": true,
"use_entry_exit_markers": true,
"use_all_animations": false
},
"logging": {
"enable": true,
"level": "info",
"timestamp": true
}
}
Legacy SA:MP (server.cfg)
echo Executing Server Config...
lanmode 0
rcon_password change-me-rcon
maxplayers 100
port 7777
hostname My SA:MP Server [EU] - Freeroam
gamemode0 grandlarc 1
filterscripts gl_actions gl_property gl_mapicon
announce 1
query 1
chatlogging 1
weburl www.your-community.com
onfoot_rate 40
incar_rate 40
weapon_rate 40
stream_distance 300.0
stream_rate 1000
maxnpc 0
logtimeformat [%H:%M:%S]
language English
plugins streamer sscanf mysql
Values to know:
hostname/nameโ server browser name. 63 chars.rcon_passwordโ RCON + /rcon login password. Make it strong.maxplayersโ slot count. Max 1000 on open.mp, 500 on classic SA:MP.gamemode0/main_scriptsโ main gamemode to run. The1after the name is the number of rounds before rotating.filterscripts/side_scriptsโ auxiliary scripts loaded alongside the main gamemode.plugins/legacy_pluginsโ plugins to load at startup. Order matters if there are dependencies.announceโ1/true= list on SA:MP master server.
Pick or install a gamemode
Every SA:MP server runs one "gamemode" โ a compiled .amx file that defines what the server actually is. Three scales:
Ship with a sample
open.mp ships with grandlarc (freeroam with property buying). Legacy SA:MP ships with lvdm (Las Venturas deathmatch) and rivershell (team CTF). Fine for smoke-testing; not what most servers actually run.
Download a pre-made gamemode
Community scene has hundreds of free gamemodes. Popular ones:
- Grand Theft Gamemode (GTG) / PPC_Trucking โ career / job-focused freeroam
- Texas Gaming Network (TGN), Southland Roleplay, NGG โ open-source RP gamemodes
- SACNR-style cops & robbers โ dozens of forks on GitHub
- Derby / Stunt / Surf gamemodes โ single-purpose minigame modes
Grab the repo, compile the Pawn source if you got source (pawncc gamemodes/yourmode.pwn), drop the .amx into gamemodes/, set it as the active gamemode in config.
Write your own
SA:MP uses Pawn, a C-like scripting language. Install the Qawno IDE (ships with open.mp) or use VS Code with a Pawn extension. Start from the skeleton base.pwn in open.mp's gamemodes/ folder.
YSI is almost mandatory. Nearly every non-trivial SA:MP gamemode uses the YSI library for commands, dialogs, timers, and more. If a gamemode's .pwn source won't compile with "cannot find y_commands", install YSI into include/.
Filterscripts & plugins
Filterscripts
Filterscripts are auxiliary .amx scripts that run alongside the gamemode. Common use cases: admin command systems, map icons, interiors, vehicle spawners, minigames. Easy to add/remove without recompiling the main gamemode.
-
Drop the
.amxintofilterscripts/ -
Add it to the filterscripts list
Legacy:
filterscripts gl_actions admin antihack(space-separated).open.mp: add to the
side_scriptsarray inconfig.json. -
Restart
Filterscripts load on next startup.
/rcon reloadfs <name>hot-reloads a single filterscript without a full server restart.
Essential plugins
| Plugin | Why | Source |
|---|---|---|
| streamer | Dynamic object / pickup / 3D text streamer โ bypasses SA:MP's hard limits | samp-incognito/samp-streamer-plugin |
| sscanf | Parses complex command arguments into typed values | Y-Less/sscanf |
| MySQL (BlueG) | MySQL driver โ required for any RP server with persistent accounts | pBlueG/SA-MP-MySQL |
| crashdetect | Shows a stack trace when your gamemode crashes โ essential for debugging | Zeex/samp-plugin-crashdetect |
| Pawn.RakNet | Low-level network hooks โ used by some anti-cheat systems | katursis/Pawn.RakNet |
Drop .so (Linux) or .dll (Windows) into plugins/, add the name (without extension) to the plugins list in config, restart.
RCON & admin
SA:MP has a built-in RCON system. Any client can authenticate via in-game chat:
/rcon login <password>
/rcon kick <playerid>
/rcon ban <playerid>
/rcon gmx โ restart gamemode
/rcon exit โ shutdown server
/rcon reloadfs <name> โ reload a filterscript
/rcon loadfs <name>
/rcon unloadfs <name>
/rcon changemode <name> โ switch gamemode
/rcon weather <id>
/rcon gravity <float>
/rcon say "message"
Remote RCON (from outside the game) uses a simple UDP packet protocol โ tools like samp-rcon or SampRCONClient work fine. Our panel has a web console that talks RCON directly.
Building real admin systems
Vanilla RCON is password-only โ anyone with the password has full access. Real servers use a tiered admin system via filterscript or gamemode-integrated admin:
- LuxAdmin / MLA โ free filterscript admin systems, SQLite-backed
- RRP Admin System โ more feature-rich, MySQL-backed
- Many RP gamemodes ship with built-in admin systems tied to account ranks
Connect and test
-
Install the matching client
open.mp server โ open.mp launcher (or SA:MP 0.3.7 client, both compat). Legacy SA:MP server โ SA:MP 0.3.7 client.
-
Add your server by IP
Client menu โ Add โ enter
YOUR-SERVER-IP:7777โ connect. -
Or browse the internet list
With
announceenabled, your server appears on the SA:MP master list within 2-5 minutes of first boot. -
Authenticate as RCON admin
In-game chat:
/rcon login your-rcon-password /rcon kick 0 (test: kicks playerid 0 if online) /rcon gmx (restart gamemode)
Migrating from SA:MP to open.mp
Moving from legacy SA:MP to open.mp is usually a 10-minute job:
-
Back up your current server folder
SFTP download the full server tree โ gamemodes, filterscripts, plugins, scriptfiles.
-
Deploy an open.mp template
Panel โ New server โ open.mp. Or for an in-place upgrade, replace
samp03svrwithomp-serverand deleteserver.cfg. -
Copy gamemode + filterscripts + scriptfiles
Drop your
gamemodes/*.amx,filterscripts/*.amx, andscriptfiles/into the new open.mp install. They load as-is. -
Update plugins to open.mp versions
Download open.mp-compatible builds of streamer, sscanf, MySQL, etc. (all major plugins have been ported). Replace legacy plugins with these.
-
Rebuild config.json from your old server.cfg
Map each
key valueline to the corresponding JSON path. open.mp's docs have a full migration table at open.mp/docs. -
Restart
99% of gamemodes work without a single code change. Watch
server_log.txtfor any "Unknown native" errors โ those identify plugins that didn't port.
Player-facing transition is painless. open.mp's network protocol is SA:MP-compatible โ existing SA:MP 0.3.7 clients can connect to an open.mp server without changes. Over time, players can migrate to the open.mp launcher for the bug fixes and new features.
Common errors and fixes
Server doesn't show on the master list
announce/"announce": trueis off โ enablelanmode 1/"use_lan_mode": trueis on โ turn off- UDP 7777 blocked โ check your panel firewall
- Wait 2-5 minutes for master-list indexing
- Check
server_log.txtforQuery ready, connected to master server.โ absence means master-list connection failed
Players crash on join ("Server closed the connection")
- Client version <-> server version mismatch โ open.mp servers accept 0.3.7 clients but not 0.3z or older
- Missing map content โ if your server uses custom maps via
CreateObject, clients need those models. Use a content-checker filterscript or distribute a custom client pack. - Anti-cheat plugin blocking โ check the plugin's log for what triggered it
"Unknown command" for gamemode commands
Commands come from the gamemode's OnPlayerCommandText or YSI YCMD handlers. If a command isn't working:
- Gamemode didn't load โ check
server_log.txtfor compile errors - Required filterscript isn't in the side scripts list
- You're not logged into your account (some gamemodes gate commands behind login)
Plugin fails to load: "libc.so.6: version 'GLIBC_2.X' not found"
Plugin was built against a newer glibc than your server OS has. Rebuild from source, or grab a plugin version targeting an older glibc.
MySQL plugin errors: "Can't connect to MySQL server on..."
- MySQL credentials wrong in gamemode config
- MySQL host isn't reachable โ use the internal hostname our panel provides for the DB, not the public one (public is for your own admin access)
- MySQL user doesn't have permission for the schema โ check GRANT statements
"AMX Backtrace" / crash spam in log
The gamemode or a filterscript crashed in a native call. If you have crashdetect plugin loaded, the log shows the exact Pawn line. Without it, you're guessing โ install crashdetect before debugging anything serious.
Player count stuck / server feels laggy at 200+ players
- Increase
onfoot_rate,incar_rate,weapon_rateto 40 (bigger = less frequent updates = less bandwidth) - Increase
sleepfrom 5 to 10 โ reduces server CPU usage at the cost of slightly higher latency - Offload heavy logic to MySQL async queries; avoid synchronous queries in hot paths
- Use the streamer plugin for pickups / objects / 3D text โ default limits are low
"Incoming packet: 0xXX" spam
DDoS / query flood. Our plans include DDoS protection that filters most of this automatically. If you're seeing real attack patterns, set mtu 576, enable Pawn.RakNet-based packet filtering, or open a ticket and we'll apply stricter upstream scrubbing.
Stuck on something specific? Email support with your server IP, the last 200 lines of server_log.txt, and your config file โ we'll usually have an answer within the hour.