Summary
Server owners currently have no official way to distribute required client-side resources (custom ASI plugins, CLEO scripts, textures, models) to players. Players either miss required files and get a degraded experience, or server owners resort to forum posts and manual instructions.
This proposal adds a Server Resources system — similar to FastDL in Garry’s Mod or resource sync in FiveM — directly into the open.mp launcher.
Problem
• Servers that require custom client mods have no reliable distribution channel
• Players join with missing or outdated files, causing visual glitches or missing features
• Server owners resort to Discord pins, forum posts, or third-party installers
• No integrity checking — players may have modified local files that differ from the server’s expected versions
Proposed Solution
A two-part system: a resource manifest published by the server, and automatic sync in the launcher before connecting.
Part 1 — Resource Manifest (server side)
Each server optionally publishes a JSON manifest at a URL declared in its SA:MP rules (via AddServerRule in Pawn):
// On the server (gamemode)
AddServerRule("omp_resources", "https://cdn.myserver.com/resources.json");
```
The manifest format:
```
{
"version": 1,
"resources": [
{
"name": "myserver_hud.asi",
"url": "https://cdn.myserver.com/files/myserver_hud.asi",
"sha256": "a3f1c2...",
"version": "1.2.0",
"destination": "modloader",
"required": true
},
{
"name": "myserver_vehicles.txd",
"url": "https://cdn.myserver.com/files/myserver_vehicles.txd",
"sha256": "b7e9d1...",
"version": "3.0.1",
"destination": "models/txd",
"required": false
}
]
}
```
### Fields:
• destination — relative path inside GTA:SA folder (modloader, cleo, models/txd, models/dff)
• required — if true, launcher warns and blocks connecting if file is missing or hash doesn’t match
• sha256 — integrity check, compared against local file hash before downloading
##Part 2 — Launcher behavior (client side)
When a player clicks Connect on a server that has omp_resources in its rules:
1. Launcher fetches the manifest URL
2. Compares each resource against local files (path + SHA-256 hash)
3. Shows a dialog:
• ✓ All files up to date → connect immediately
• ⬇ N files need download → show list + “Download and Connect” button
• Required files missing → “Download required” (can’t skip), optional files can be skipped
4. Downloads missing/outdated files with a per-file progress bar
5. Files are placed in the correct GTA:SA subdirectory
6. Launcher proceeds to connect
Optional UX addition: a dedicated Server Resources sub-tab in the server detail panel showing the resource list and local sync status at a glance.
##Security considerations
Only files declared in the manifest are downloaded
• SHA-256 hash verification before the file is moved into place — corrupted or tampered downloads are rejected
• Files are placed only in declared destination paths within the GTA:SA folder — no arbitrary write paths
• The manifest URL must use HTTPS
• Server owners are responsible for their CDN content — this is consistent with how SA:MP already works (servers can inject Pawn scripts into clients)
##Why this belongs in the launcher
The launcher is the only component that:
• Knows the local GTA:SA path
• Has file system access before the game starts
• Already queries server rules via UDP before connecting
• Has the user’s attention at the exact right moment (pre-connect)
This cannot be done inside the game client itself without significant complexity.
##Implementation notes
Manifest URL read from server rules (already fetched during server query)
• File download: Rust reqwest crate (already in Cargo.toml as a dependency)
• Hash verification: Rust sha2 crate
• Frontend: modal dialog + progress bars in React, consistent with existing join modal
• No new backend infrastructure required for server owners — any static file hosting works (CDN, GitHub Releases, S3, even a simple nginx)
###Prior art
Garry’s Mod FastDL — server-declared file server, client downloads before map load
• FiveM / RedM — full resource streaming system built into the client
• Counter-Strike — sv_downloadurl for custom content
• MTA:SA — built-in resource download system
All major SA-adjacent multiplayer mods have solved this problem. SA:MP never did. This is an opportunity for open.mp to set a new standard.
## Willingness to contribute
I have a working UI prototype of both the client-side resource sync flow and the owner-side manifest configuration panel. I am willing to implement this and submit a PR. Looking for team feedback on:
1. Whether omp_resources server rule is the right mechanism, or if there’s a better hook
2. Preferred approach for the download dialog UX
3. Any security concerns I may have missed
Summary
Server owners currently have no official way to distribute required client-side resources (custom ASI plugins, CLEO scripts, textures, models) to players. Players either miss required files and get a degraded experience, or server owners resort to forum posts and manual instructions.
This proposal adds a Server Resources system — similar to FastDL in Garry’s Mod or resource sync in FiveM — directly into the open.mp launcher.
Problem
Proposed Solution
A two-part system: a resource manifest published by the server, and automatic sync in the launcher before connecting.
Part 1 — Resource Manifest (server side)
Each server optionally publishes a JSON manifest at a URL declared in its SA:MP rules (via AddServerRule in Pawn):