RedM Fireworks Installation
Steps 1, 2, 6 and 7 read the same on both frameworks. Steps 3 and 4 are the genuinely framework-specific ones — do the VORP half or the RSG half, never both.
1. Folder placement
Put the folder in resources. It must be named exactly:
rm_fireworksLowercase, with the underscore. The client export is registered under the resource name, so a renamed folder breaks every integration snippet in these docs.
A bracketed parent folder is fine — resources/[custom]/rm_fireworks/fxmanifest.lua does not change the resource name. Confirm fxmanifest.lua sits directly inside rm_fireworks/; if your unzip produced rm_fireworks/rm_fireworks/, move the inner folder up.
2. server.cfg
One line, after your framework resources:
# VORP
ensure vorp_core
ensure vorp_inventory
ensure rm_fireworks# RSG
ensure rsg-core
ensure rsg-inventory
ensure rm_fireworksBoth bridges poll every 500 ms and never give up, so starting early is not permanently broken — but usable items are only registered after detection succeeds, and during that window using an item does nothing. Keep it after the framework and the window is zero.
3. Create the items
Four items ship with the default config, wired to entries 1–4.
| Item | Label | Index | Default show |
|---|---|---|---|
firework_1 | Firework - Burst | 1 | Burst / long / short |
firework_2 | Firework - Ribbon | 2 | Mostly ribbon |
firework_3 | Firework - Points | 3 | Mostly points |
firework_4 | Firework - Mixed | 4 | One of each |
All four ship the same show size
number = 100 and randomWait = {300, 800} are identical across all four — only the effects lists differ. Out of the box the four items are the same show in different colours. Both are per-entry keys you can tune; they are simply not pre-tuned for you. If you advertise them as different show sizes, change them first.
VORP — run the SQL
INSERT INTO `items` (`item`, `label`, `limit`, `can_remove`, `type`, `usable`, `desc`, `weight`) VALUES
('firework_1', 'Firework - Burst', 10, 1, 'item_standard', 1, 'A crate of burst fireworks.', 0.25),
('firework_2', 'Firework - Ribbon', 10, 1, 'item_standard', 1, 'A crate of ribbon fireworks.', 0.25),
('firework_3', 'Firework - Points', 10, 1, 'item_standard', 1, 'A crate of point fireworks.', 0.25),
('firework_4', 'Firework - Mixed', 10, 1, 'item_standard', 1, 'A crate of mixed fireworks.', 0.25);usable must be 1 — 0 means the use button never fires.
Then do a full server restart
vorp_inventory reads the whole items table into memory once when it starts. Rows inserted while it is running are invisible until it starts again. restart rm_fireworks does nothing for this — it does not touch the items table — and this is the single most common "the item does not exist" report.
Run the SQL once. To re-run it safely, delete the old rows first:
DELETE FROM `items` WHERE `item` IN ('firework_1','firework_2','firework_3','firework_4');Schema variations. Newer VORP inventory builds add columns such as groupId, rarityId, durability and metadata. If your database rejects the INSERT with a "field doesn't have a default value" error, add that column and a sensible value to the list — for example metadata set to '{}'. Do not remove columns from the list above.
RSG — add the item entries
Paste inside the items table in rsg-core/shared/items.lua:
['firework_1'] = { name = 'firework_1', label = 'Firework - Burst', weight = 250, type = 'item', image = 'firework_1.png', unique = false, useable = true, shouldClose = true, combinable = nil, description = 'A crate of burst fireworks.' },
['firework_2'] = { name = 'firework_2', label = 'Firework - Ribbon', weight = 250, type = 'item', image = 'firework_2.png', unique = false, useable = true, shouldClose = true, combinable = nil, description = 'A crate of ribbon fireworks.' },
['firework_3'] = { name = 'firework_3', label = 'Firework - Points', weight = 250, type = 'item', image = 'firework_3.png', unique = false, useable = true, shouldClose = true, combinable = nil, description = 'A crate of point fireworks.' },
['firework_4'] = { name = 'firework_4', label = 'Firework - Mixed', weight = 250, type = 'item', image = 'firework_4.png', unique = false, useable = true, shouldClose = true, combinable = nil, description = 'A crate of mixed fireworks.' },Note the RSG spelling: useable, with the e. Watch the trailing comma on the line above your paste point, and paste inside the table — a missing comma breaks every item in the file, not only yours. Restart rsg-core.
4. Icons
install/images/ contains firework_1.png through firework_4.png. These are placeholders — replace them with your own art, keeping the filenames.
| Framework | Destination |
|---|---|
| VORP, current builds | vorp_inventory/html/img/items/ |
VORP, older builds with no items subfolder | vorp_inventory/html/img/ |
| RSG | rsg-inventory/html/images/ |
If you are unsure which VORP build you have, copy to both — the extra copies are harmless. On VORP the filename must match the item value; on RSG it must match the image field. Restart the inventory resource afterwards.
Icons are cosmetic. A missing icon never blocks the sequence.
5. Configure
config/config.lua. The defaults work — nothing here is mandatory for a first boot. Full reference: Configuration.
Four things about that file will otherwise cost you a support ticket:
KeyLabelsis display text only. Changing the key does not change the letter on the plaque, and vice versa. Rebinding means editing both.Language[1]andLanguage[4]are never read. Editing them does nothing.Language[2]is the title in both modes — the plaque reads "Detonator" while you are still walking the fuse out.Effects.soundplays no sound. It is a particle effect.
6. Verify
Both consoles must print the green line
A green rm_fireworks started in the server console and in the client F8 console. Both, with no red errors around them. Server-only means the client scripts did not reach you.
Give yourself an item and use it
| Stage | What you should see |
|---|---|
| Plant | Kneeling animation, then three crate hauls — about 13.9 s |
| Placed | A crate on the ground in front of you |
| Turn | Your ped turns 180° in place — 2 s, no prompt |
| Fuse walk | A spool in your left hand, a rope to the crate, the plaque bottom-centre with a live distance |
| Gate | The use prompt is dimmed until you are 15 m away outdoors, 5 m in an interior |
| Wiring | Press use: wiring animation, spool away, rope handed to the detonator — about 10.6 s |
| Show | Press use again: first burst about 2.6 s later, then 100 rockets |
The item leaves the inventory at the moment of use, not at detonation.
Cancel and refund
Use a second item, then press cancel during the fuse walk. The sequence tears down and the item returns. Check the count before and after.
Multiplayer
With a second player nearby: they see the crate, spool and detonator regardless of any setting — those are networked objects. What SyncFireworks controls is whether they also see the rocket show.
7. If something went wrong
| Symptom | Section |
|---|---|
| No green line in the server console | Troubleshooting → console errors |
| Green lines on both, using the item does nothing | Troubleshooting → the item does nothing |
| Item missing, or has no "use" option | Troubleshooting → the item does nothing |
| Sequence starts, no plaque | Troubleshooting → the prompt never appears |
| Plaque appears, use prompt never lights up | Troubleshooting → Place never lights up |
| Other players see nothing | Troubleshooting → other players |
Check framework state read-only
Do not type ensure vorp_core to find out whether it is running. ensure is not a status query — it starts a stopped resource and restarts a running one, and restarting a core on a live server breaks every resource that depends on it. Read the boot log, or the txAdmin resource list.
Uninstall
- Remove the
ensureline, thenstop rm_fireworks— a clean stop refunds every in-flight item. - Delete the folder.
- Remove the item definitions — the SQL
DELETEabove for VORP, or the four lines fromitems.luafor RSG. Restart afterwards. - Delete the four PNGs from your inventory image folder.
- Remove any command or integration you added to your own resources.
Nothing else is persisted. The resource writes no tables of its own.