Weapon components & customization (RSG Core).
Open the customization flow with an item and load selections via inventory or
/loadweapon. Includes camera helpers and menu pages for options.
- rsg-core (framework)
- ox_lib (notifications & locale)
- oxmysql (database)
License: GPL‑3.0
- Open event with item (uses a usable item to start the flow)
- Basic functions
- Functions apply (apply selected components/finishes)
- Load for inventory or command —
/loadweaponand load selection in menu - Main Menu
- Menu for options (components/finishes)
- Function cam (helper camera)
- Event cam (camera events)
- Inspection extras
- Extras others off for command
- Start, Stop resource
✅ Verified in code:
•Config.Gunsmithitem = 'gunsmith'(usable item)
•Config.Gunsmithprop = \p_gunsmithprops09x`(placement prop) •Config.PaymentType = 'cash' | 'bloodmoney'• Server registers the **usable item** and provides **/loadweapon**. • No/w_inspect` command found in this repository.
Config = {} Config.Debug = true Config.PlaceDistance = 5.0 Config.RepairItem = 'weapon_repair_kit' Config.Gunsmithrobbery = 'lockpick' Config.Gunsmithitem = 'gunsmith' Config.Gunsmithprop = `p_gunsmithprops09x` Config.MaxGunsites = 1 Config.MaxWeapon = 1 Config.PaymentType = 'cash' -- or 'bloodmoney' -- Camera offsets Config.distBack = 0.7 Config.distSide = 0.13 Config.distUp = 0.05 Config.distFov = 60.0Use the
gunsmithitem to open the customization flow. Use/loadweaponto reapply saved selections.
| Command | Description |
|---|---|
/loadweapon | Load/reapply current selection to the weapon in hand. |
- Drop
rsg-weaponcompinresources/[rsg]. - Ensure database (oxmysql) is running.
- Add to
server.cfg:ensure ox_lib ensure oxmysql ensure rsg-core ensure rsg-weaponcomp
- Restart the server.
generateTooltipContent(item) { if (!item) { return ""; } let content = `<div class="custom-tooltip"><div class="tooltip-header">${item.label}</div><hr class="tooltip-divider">`; const description = item.info?.description?.replace(/\n/g, "<br>") || item.description?.replace(/\n/g, "<br>") || "No description available."; const renderInfo = (obj, indent = 0) => { let html = ""; for (const [key, value] of Object.entries(obj)) { if (key === "description" || key === "lastUpdate" || key === "componentshash") continue; const padding = " ".repeat(indent * 4); if (typeof value === "object" && value !== null && !Array.isArray(value)) { html += `<div class="tooltip-info"><span class="tooltip-info-key">${padding}${this.formatKey(key)}:</span></div>`; html += renderInfo(value, indent + 1); } else { html += `<div class="tooltip-info"><span class="tooltip-info-key">${padding}${this.formatKey(key)}:</span> ${value}</div>`; } } return html; }; if (item.info && Object.keys(item.info).length > 0) { content += renderInfo(item.info); } content += `<div class="tooltip-description">${description}</div>`; content += `<div class="tooltip-weight"><i class="fas fa-weight-hanging"></i> ${item.weight != null ? (item.weight / 1000).toFixed(1) : "N/A"}kg</div>`; content += `</div>`; return content; }- gum_weapons -- Gum-Core
- rsg-weapons -- BM-Studio
- rsg-weapons -- Rexshack-RedM
- rsg-horses
- rsg-barbers
- rsg-appearance
- vorp_weaponsv2 -- VORPCORE
- qc_weapModifier -- QUANTUM CORE
- marcuzz — 🔗 https://github.com/realmarcuzz/
- rms_dnb — 🔗 https://github.com/RMS-dnb/
- Sadicius — 🔗 https://github.com/Sadicius
- jackp_ (Jewsie) — 🔗 https://github.com/Jewsie/
- artmines — 🔗 https://github.com/Artmines/
- Ashley Inkham (YouTube) — 🔗 https://www.youtube.com/channel/UC_-sYXe5B4qInE_ZGw6DITg
- RexshackGaming / RSG Framework — 🔗 https://github.com/Rexshack-RedM
- RSG / Rexshack‑RedM — adaptation & maintenance
- Community contributors & translators
- License: GPL‑3.0