Fixitfy
GüncellemelerDokümanlarHaritaYorumlar
Upload Service
Tanıtım
Giriş yapMağazaya göz at
Fixitfy Studio

RedM ve FiveM roleplay sunucuları için scriptler, haritalar ve araçlar.

Rockstar ortağı · resmi Cfx.re satıcısı
mağaza
  • Tüm ürünler
  • RedM
  • FiveM
  • Ücretsiz
kaynaklar
  • Dokümantasyon
  • Güncellemeler
  • Harita
  • Yorumlar
stüdyo
  • Hakkımızda
  • Ekip
  • Ortaklar
  • İletişim
© 2026 Fixitfy Studio
Kullanım koşullarıGizlilikİadeler
Ödemeler Tebex ile · teslimat Cfx Keymaster üzerinden

changelog · 40 scripts · 68 releases

Every release, script by script.

The full version history of each script, read from the GitHub repositories the in-game update check uses. Most recently updated first.

RedM repository on GitHub↗FiveM repository on GitHub↗
All90RedM50FiveM40

40 scripts

  • FX-Gpsv1.0.0
  • FX-Gameplaycamv1.0.1
  • FX-Foodpacketv1.0.1
  • FX-Mapsappv1.0.1
  • FX-Interactionsv1.0.1
  • FX-3dmapv1.0.0
  • FX-Acv1.0.0
  • FX-Adminv1.2.2
  • FX-Animposv1.0.0
  • FX-Chatv1.0.1
  • FX-Companyappv1.0.0
  • FX-Djv2.0.0
  • FX-Dronev1.0.0
  • FX-Fishingv1.0.5
  • FX-Foodjobsv1.0.0
  • FX-Garageappv1.0.0
  • FX-Garagesv1.0.1
  • FX-Gocartv1.0.0
  • FX-Hackerv1.0.0
  • FX-Hudv1.0.2
  • FX-Lbphone-Billingv1.0.0
  • FX-Lbphone-Fansappv1.0.0
  • FX-Lbphone-Musicv1.0.0
  • FX-Lbphone-Rentalappv1.0.0
  • FX-Loadingscreenv1.0.0
  • FX-Metubeappv1.0.0
  • FX-Multicharacterv1.0.1
  • FX-Musicappv1.0.1
  • FX-Npccontrolv1.0.0
  • FX-Ownedshopsv1.0.0
  • FX-Policebadgev1.0.1
  • FX-Scalev1.0.0
  • FX-Showroomv1.0.1
  • FX-Soundv1.1.0
  • FX-Stashv1.0.1
  • FX-Tattoosv1.0.2
  • FX-Tradersv1.0.1
  • FX-Uwuv1.0.1
  • FX-Weapondamagev1.0.1
  • FX-Weedv1.0.1

FX-Gps

FiveM

fx-gps · 1 release · updated 8 days ago

Product page →View on GitHub ↗
  1. v1.0.0latest
    • First public release of fx-3dmap-redm

FX-Gameplaycam

FiveM

fx-gameplaycam · 2 releases · updated 3 weeks ago

Product page →View on GitHub ↗
  1. v1.0.1latest
    • Resmon values have been optimized.

    Files changed: client/utils.lua · client/main.lua · client/camera.lua

  2. v1.0.0
    • First public release of fx-gameplaycam — free gameplay camera (photo mode) with built-in abuse protection (standalone).

FX-Foodpacket

FiveM

fx-foodpacket · 2 releases · updated 3 weeks ago

Product page →View on GitHub ↗
  1. v1.0.1latest
    • Fixed ox_inventory use issues.
  2. v1.0.0
    • First public release of fx-foodpacket — pack food and drinks into a single carryable item (QBCore / Qbox / ESX).

FX-Mapsapp

FiveM

fx-mapsapp · 1 release · updated 4 weeks ago

Product page →View on GitHub ↗
  1. v1.0.1latest
    • First public release of fx-mapsapp — Share Maps: a maps and live friend location sharing app for LB-Phone and Cylex Phone.

FX-Interactions

FiveM

fx-interactions · 1 release · updated 7 weeks ago

Product page →View on GitHub ↗
  1. v1.0.1latest
    • First public release of fx-interactions — client-side interaction prompts and 3D text for coordinates, entities and models (framework-independent).

FX-3dmap

FiveM

fx-3dmap · 1 release

View on GitHub ↗
  1. v1.0.0latest
    • First public release of fx-3dmap — interactive 3D world map, location editor and personal pins.

FX-Ac

FiveM

fx-ac · 1 release

View on GitHub ↗
  1. v1.0.0latest
    • First public release of fx-ac — server-side anticheat: crash vector detection, risk scoring, bans and evidence.

FX-Admin

FiveM

fx-admin · 5 releases

Product page →View on GitHub ↗
  1. v1.2.2latest
    • Fixed: the Discord page hung on its loading spinner forever once the bot had run its first command. A local variable in the usage-statistics block shadowed the panel's translation helper, so every label in that block threw instead of returning text, and the exception aborted the page render before any HTML reached the screen. The block is skipped while all counters are still zero, which is why the page opened normally on a fresh install and only broke after the first command - or the first denied attempt - was recorded.
    • Fixed: a ban lifted in txAdmin stayed banned in fx-admin when the revoke happened while the server was down. The live revoke event is only heard by a running server, and the periodic import skipped revoked actions instead of reconciling them, so the mirrored row survived every later sync and the player stayed banned by fx-admin alone. The import now deletes a mirrored ban whose txAdmin action has been revoked and tombstones the id so a later run cannot restore it. Matching is on the txAdmin action id and never on license - the bans table also holds bans fx-admin issued itself, and a license match would delete those too. The number cleaned up is reported as its own count in the import summary the admin sees, the console and the activity log.
    • Fixed: giving a vehicle to an online player reported "player not found". The call fails for two different reasons - the player's character data could not be read, or the spawn code is not in the vehicle catalogue - and it returns which one it was, but the panel threw that away and always showed the player error. An admin whose add-on car was simply missing from config_cars.lua was sent looking for a player who was standing right in front of them. The panel now reports the vehicle as not found when that is the real reason. The same call behind Discord's give-vehicle command compared the reason against a value the function never returns, so every failure there read as a player-data problem; it now names the spawn code it could not resolve and points at config_cars.lua.
    • New: an Activity tab on the Job and Gang Management pages. Pick a team and a window of 1, 3, 7, 14 or 30 days and it answers how many DIFFERENT members were online in it, how long each of them was on, how many separate days each showed up, and the day-by-day shape of the whole crew - enough to decide whether a gang has earned the business it is holding, and to see when one has gone quiet. Every playtime flush now also writes a per-day row carrying the job AND gang the character held at that moment, so someone who has since left still counts for the days they were a member and someone who joined yesterday does not retroactively inflate the crew - counting from today's roster gets both of those backwards. New table fx_admin_activity_daily, created automatically on start and also listed in setup/sql/fx_admin.sql; new config keys Config.Playtime.TeamActivity and Config.Playtime.ActivityKeepDays. There is nothing to backfill from: history starts the day this update is installed, so a 7 day window is only complete after 7 days.
    • Fixed: turning a Discord command's reason requirement off in the panel had no effect - admins kept being asked for a reason on /revive and others they had already switched off. The reason option is appended after a command's own arguments, and Discord refuses any command whose required options do not all come before the optional ones. /item, /weapon, /job, /gang and /teleport each carry an optional argument, so with a required reason all five produced a payload Discord rejects. A bot registers the whole command set in one call, so those five took the entire batch down with them and no setting from the panel ever reached Discord - including the ones on commands that were perfectly valid by themselves. Options are now ordered required-first before they are handed to the bot, so the payload stays valid whatever the reason is set to. Re-register the bot's slash commands once after updating; Discord keeps the old definitions until it is told otherwise.
    • Fixed: once the setup wizard had run, editing config.lua or config_server.lua did nothing for any setting the wizard manages - server name, framework, inventory, locale, theme, database tables, every webhook, the Discord bot token and guild, the bridge settings and the Discord panel owners. setup.json was applied over the config on every start, so the file plainly showed the value the owner wanted while the panel used another one, and nothing anywhere said so. The two are merged now instead of one overwriting the other: fx-admin remembers what the config file held when the two last agreed, so an edit to the file is recognised as an edit and wins, and the wizard's copy is updated to match. Change it in the panel and the panel wins, as before. Whichever side moved, both end up holding the same value. On the first start after this update neither side can be called newer, so the wizard still wins that round and every key where the two disagree is listed in the console instead of being dropped in silence - edit that line again and it takes over.
    • Fixed: a god could be missing a permission a moderator had. Permissions were read only from the group a player literally holds, with no inheritance between the tiers. The default config compensates by merging the three action lists by hand, but config.lua is customer-editable and kept across updates, so every action added in a later release is missing from an older config forever - which is how a server ends up with watchscreen listed for admin but not god, and a god-level admin who cannot open Monitor while a moderator can. god now inherits everything admin has and admin everything mod has, worked out at start from whatever the config lists. Inheritance can only add what a lower tier already holds, so it cannot hand out an action that was removed from every role, and a custom group still stands on its own list.
    • Fixed: Open Inventory silently did nothing. Every branch reported success whether or not the inventory resource had answered, and the caller discarded the result and wrote an Open Inventory line to the log regardless - so a failed open was indistinguishable from a working one from both the admin's side and the audit trail's. The real outcome is returned now and the admin is told which inventory failed and why: resource not running, export not answered, or the inventory script refusing that player. qs-inventory had no player-inventory branch at all and did nothing on every server running it; it is supported now. On qb-inventory and ps-inventory the fallback event was sent to the target player carrying their own id - it goes to the admin now, since it is the admin's screen that has to open, and the server export is tried first where the build has one.
    • New: items can be removed one at a time from the inventory viewer. Hover a slot and the delete button sits beside Detay. It appears only while the character is online, because removal runs through the live inventory script, and only for roles that may already wipe an inventory - it destroys items, so it sits behind the same permission rather than a weaker one. Works on tgiann-inventory, ox_inventory, qb-inventory, ps-inventory and qs-inventory, and both the success and the failure are logged with the item and amount.
    • Config.ServerOwner entries that could not be read were dropped in silence, which is the hardest possible way to find out an owner id has a typo: the file lists the person, the panel does not know them, and nothing explains why. Rejected lines are printed on start now, with the accepted formats and a pointer to the fxowner console command, which prints the real identifiers of everyone online ready to paste.
    • New: Cylex Phone is supported alongside lb-phone. The phone page reads whichever one's tables are actually in the database, decided at runtime rather than from a config key, so a server that switches phones only needs a restart. Number and account search, the Twitter, Instagram, Foffy (Cylex's short-video app, shown in the TikTok tab), Frogly marketplace and Yellow Pages feeds, post deletion and changing a character's number all work on both. Cylex keys everything on identifier and tag and holds the number once in cylex_phone_userdata, so each query joins back to it; likes and comments live in their own tables and are counted. Two fields have no Cylex equivalent and come back empty rather than invented: follower counts, and Frogly listings have no separate title, so the listing text fills it.
    • Fixed: the phone page printed the full failing SQL statement on every single lookup when the tables it reads do not exist - six errors per search, forever, on any server not running that phone script. A missing table is a permanent condition, so it is now reported once, by name, with a line saying which phone those tables belong to, and that query is skipped from then on.
    • Fixed: deleting or transferring a vehicle reported success even when the plate matched no row at all. Both ran their statement without waiting for it and returned true unconditionally, so a typo, an already-deleted vehicle or a plate stored with different padding produced a green 'vehicle deleted' toast and a clean line in the audit log while the database was untouched. Both now wait for the result and report 'vehicle not found' when nothing matched, and the log says FAILED with the plate.
    • Fixed: a Discord bot token set in config_server.lua was ignored once the setup wizard had run. The wizard writes an empty string for every optional field that was skipped, and that blank counted as a value and overwrote the config. A blank on one side now means 'not set here' rather than 'unset it everywhere', so whichever side holds the token is the one that is used - the same for the guild id and every webhook. Clearing a value therefore has to be done in the config file, not only in the wizard.
    • Fixed: giving or taking money from a character opened on the Characters page edited the database row instead of the live session. The drawer marks a row as OFFLINE whenever it was opened from a list that carries no server id - which is every row on that page, including characters whose owner is connected right then - and the money handler trusted that. The players row was updated while the running session kept its own copy: the panel showed the new balance, the HUD and the inventory kept showing the old one, and the framework wrote its in-memory value back over the edit at logout, quietly undoing it. The citizenid is now resolved against who is actually connected, so a live player always takes the live path. Changing a name or a phone number already worked this way.
    • Money and Give Item said nothing at all when the framework refused the change: the success branch was skipped and no other branch existed, so a failure looked like a success with a missing toast. Both report the failure now and write it to the audit log. Adding money through QBCore also returns its real result instead of an unconditional true.
    • Fixed: watching a player cost them most of their frame rate - 140 down to 30-40 on the reports. The capture page rendered the game texture through WebGL on every requestAnimationFrame, which in NUI fires as fast as the game itself renders, to feed a stream that samples 20 frames a second. Seven eighths of that work was discarded, and it was spent on the GPU the game is already using. The render is now gated to the capture rate, so a 140 fps player paints 20 frames a second instead of 140. Nothing about the stream changes: captureStream samples the canvas whenever it is painted.
    • The video stream took noticeably long to appear when the capture page missed its opening message: the first retry was two seconds behind, so the viewer sat on a black frame for all of it. The first re-send now comes after 700ms and later attempts keep the original two-second spacing, where the delay is no longer a missed message but something actually wrong.
    • Fixed: Save Car registered the vehicle as owned but never put it in a garage. Give Vehicle hands the car to whichever garage adapter is active in garages.lua; Save Car stopped at the ownership row, so on any script that keeps its own state table - fx-garages among them - the vehicle existed on paper and in no garage, and its owner could not take it out anywhere. Save Car now runs the same handover, waits for the ownership row to exist first so the garage can resolve the plate, and shows the same warning as Give Vehicle when no garage script could take it.
    • New console command fxadmin_regarage, the one-off recovery for vehicles the old Save Car left owned but in no garage. It hands every owned vehicle back to the active garage adapter; cars the script already holds are left exactly as they are. Report-only by default, fxadmin_regarage uygula to run it, and it refuses on any adapter that has not declared rerunSafe - handing a vehicle to a MarkStored-style adapter a second time would rewrite its garage column and move cars their owners had parked elsewhere. The fx-garages adapter declares it, because storeVehicleByPlate is idempotent by design. garages.lua is customer-editable and kept across updates, so a server still running its own copy has to add rerunSafe = true to that adapter before the command will run - it says so rather than doing anything.
    • New console command fxadmin_watchrelay: probes the screen-watch relay from the game server and says which half is at fault. HTTP 0 in the log is the only thing an owner used to see, and it reads like a relay fault when it usually is not - 0 means no reply arrived at all (DNS, outbound 443, or a certificate chain this server refuses), while any real HTTP number means the relay answered and the problem is the key or the address. It probes once without the key and once with, so those two cases cannot be confused, and prints what to check for each. Worth knowing because the fallback is not free: without the relay every video chunk travels base64-encoded through server events, which is what puts the sync thread into hitch warnings.
    • The net-event fallback for screen watching now lowers frame rate and width as well as bitrate. Without the relay every chunk is base64-encoded and carried through server events, which costs the watched player and the server far more than the same picture does over HTTP - and dropping only the bitrate left the encoder a full-rate, full-width stream to compress, so most of the saving was on paper. Two new keys under Config.Watch set what the fallback runs at: NetEventFps (default 10) and NetEventWidth (default 640). Quality is handed back in full the moment the relay comes up. Servers with HttpOnly on are unaffected: there is no net-event video path there.

    Files changed: ui/app.js · ui/search.js · ui/style.css · ui/capture.js · client/watch.lua · server/txadmin.lua · server/setup.lua · server/permissions.lua · server/owner.lua · server/phone.lua · server/actions.lua · shared/setup.lua · framework/inventory.lua · framework/frameworks.lua · garages.lua · server/vehicles.lua · server/playtime.lua · server/discord/commands.lua · client/main.lua · locales/*.json · config.lua · setup/sql/fx_admin.sql · fxmanifest.lua

  2. v1.2.1
    • txAdmin ban sync now reads txAdmin's live playersDB.json on hosts that sandbox file access to the resource folder. Symlink playersDB.json to fx-admin/txdata_players.json and the panel reads the real file - no copy to refresh, no stale snapshot. Lua's file API follows the link even inside the sandbox, which is what makes this work where an absolute path is refused.
    • Fixed: a symlinked txdata_players.json made the import fail completely. FiveM's virtual file system ignores a Windows reparse point, so the only reader fx-admin used could not see the link, and the import reported the file as missing while the data sat right there. Reading now goes through Lua's file API first and falls back to the virtual file system, so both a symlink and a plain copy work.
    • New config key: Config.TxAutoSyncMinutes (default 120) re-imports txAdmin bans on a timer. Bans issued while fx-admin is running already arrive instantly through txAdmin's events; the timer closes the gap for bans issued while fx-admin was stopped. Every import is deduplicated by txAdmin action id, so a repeat run adds only genuinely new bans and the console stays quiet unless something changed.
    • New config key: Config.TxImportLive (default auto) states whether the in-resource file is a symlink to live data or a static copy. A symlink is detected automatically and skips the staleness check; a copy keeps it, so an old snapshot can still never restore bans that were lifted after it was taken. Set it explicitly only if the detection guesses wrong.
    • fxadmin_txpath now ends with a VERDICT line naming the source that will actually be used and whether it counts as live or a copy. It also reports the byte count of the in-resource file, whether it parses as txAdmin data, and the date of the newest record it contains - enough to tell a working symlink from a stale copy at a glance.
    • Fixed: a double slash in the resource path (resources//[folder]/fx-admin, as some hosts report it) was carried into every candidate path fx-admin built and logged, breaking the directory walk that locates txData. The path is normalised before it is used.
    • The four places that each read txAdmin's ban file their own way - the startup check, the panel import, fxadmin_txrepair and the new timer - now share one reader, so they can no longer disagree about which source is available or whether it is live.

    Files changed: server/txadmin.lua · config_server.lua · fxmanifest.lua · setup/integration/txadmin.md

  3. v1.2.0
    • Ambulance / death-system bridge: revive and full heal now go through whichever medical script the server runs, instead of only restoring health on the ped. Wasabi Advanced Ambulance is supported in both v1 and v2 (folder named wasabi_ambulance, wasabi_ambulance_v2 or wasabi_ambulancev2), alongside the existing qb-ambulancejob, Renewed-Ambulance and esx_ambulancejob.
    • Fixed: on servers running Wasabi, revive reported success and did nothing. The panel, the /revive keybind and the Discord /revive and /revive-all commands all restored health while Wasabi kept its own death state, so the player stayed down and was told they had been revived. Wasabi revives from the server through an export, not from the client, so the whole flow was moved server side.
    • Fixed: full heal left Wasabi players capped and still bleeding. Wasabi derives max health from limb damage and keeps injuries server side, so healing the ped alone could not clear them. Heal now clears injuries and limb health through the script, and no longer writes health from the client where Wasabi owns that value.
    • New config key: Config.Ambulance (default auto) pins the medical script - auto, wasabi, qb, renewed, esx or none.
    • Fixed: CK History could not find older records. The list only ever carried the newest 200 rows and the search box filtered those rows in the browser, so a CK outside that window read as 'not found' in the panel even though the backup was still in the database and still restorable. Search and the status tabs now run as SQL on the server, so every record is reachable regardless of the list window.
    • CK History search accepts Discord ID, Steam hex and license as well as name, citizenid, job and the admin who performed the CK. The backup table stores only citizenid and license, so a Discord ID or Steam hex is resolved through the identifier ledger first - the Discord lookup also scans online players, so an account never written to the ledger is still found.
    • Fixed: the counters above CK History showed the list length instead of the real totals, so Total CK Records sat pinned at the 200 ceiling and told the admin that was all of them. They are now counted across the whole table.
    • CK History selection survives a new search. The restore basket keeps the record itself, not just its id, so selecting one character and then searching for another no longer drops the first from the basket.

    Files changed: framework/ambulance.lua · server/actions.lua · client/teleport.lua · server/discord/commands.lua · server/ckbackup.lua · ui/app.js · locales/*.json · config.lua · fxmanifest.lua · setup/README.md

Show 2 older releasesHide older releasesv1.0.0–v1.1.0
  1. v1.1.0
    • New Gang Management page: the full Job Management toolset - bulk and per-selection removal, transfer to another gang, grade reset, single and bulk CK with backup and restore, member list with online/offline filter, search and CSV export - now works on gangs too. Jobs and gangs are two separate pages under the Jobs & Gangs nav group.
    • Jobs and gangs share ONE code path instead of duplicated code. Every layer (framework, database, business logic, UI) takes a kind parameter that is either job or gang, so a later fix lands on both sides at once. Omitting it means job, so nothing that called these functions before had to change.
    • Gang operations write to players.gang through SetGang using the gang JSON schema (no payment/onduty fields). Counts, personnel queries and the reset/transfer UPDATEs all pick their column from the category, and the count cache is now per category - one shared cache would have let gang counts overwrite job counts.
    • Discord logs are category-aware. Gang operations can go to their own Config.GangLogsWebhook and fall back to JobLogsWebhook then LogsWebhook. Embed title, field names (Old Gang / New Gang) and footer follow the category, and CK records from this page are tagged gangck so CK History and the restore log label them correctly.
    • Recent Actions is filtered per category: the job page no longer shows gang operations and vice versa. Entries written before this release carry no category field and are treated as job, so existing history stays intact.
    • New config keys: Config.JobManagement.GangResetTarget (default "none") is the gang a removed member is moved to, and Config.GangLogsWebhook (empty = falls back to the job webhook). Config.JobManagement.HistoryLimit is shared between job and gang history - raise it if both sides are used heavily.
    • ESX has no gang concept, so the Gang Management page stays empty there and every gang operation is rejected with a nogang error instead of silently touching the player job.
    • Fixed: the jobmgmt.hard_grade_desc locale string was cut off mid-sentence in both tr and en, so the final grade-reset confirmation showed half a sentence.

    Files changed: framework/jobs.lua · server/jobs.lua · server/database.lua · server/ckbackup.lua · ui/app.js · ui/search.js · locales/tr.json · locales/en.json · config.lua · config_server.lua · fxmanifest.lua

  2. v1.0.0
    • First public release of fx-admin — modern, themed, optimized admin panel for QBCore, Qbox and ESX.

FX-Animpos

FiveM

fx-animpos · 1 release

View on GitHub ↗
  1. v1.0.0latest
    • First public release of fx-animpos — standalone animation positioning with personal pose memory and a shared community pose library.

FX-Chat

FiveM

fx-chat · 2 releases

Product page →View on GitHub ↗
  1. v1.0.1latest
    • Idle CPU fixed. The client key loop ran at Wait(0), so it burned a frame slot on every player forever and the resource never dropped below 0.01 ms in the resource monitor even with the chat closed. It now polls at 100 ms while the chat is closed and 50 ms while it is open, which reads as 0.00 ms idle. Nothing was removed: the T fallback that opens the chat when another resource disables the controls (death screens, handcuffs, animations) and the raw-ESC emergency close both work exactly as before.
    • Fixed: closing the chat with ESC while the open key was still held reopened it instantly. The key now has to be released once before it counts as a new press.
    • The input box fades in when the chat opens (0.16s), so the slower key poll comes across as an animation instead of a delay.
    • UPGRADING: drop in the three files below. No config change, no new setting — configs/ and locales/ are untouched.

    Files changed: fxmanifest.lua · client/main.lua · html/css/style.css

  2. v1.0.0
    • First public release of fx-chat — chat system with command suggestions, a general chat window, roleplay actions and job channels (QBCore / standalone).

FX-Companyapp

FiveM

fx-companyapp · 1 release

View on GitHub ↗
  1. v1.0.0latest
    • First public release of fx-companyapp — company management app for LB Phone and Cylex Phone: employees, ranks, company funds and audit log.

FX-Dj

FiveM

fx-dj · 2 releases

Product page →View on GitHub ↗
  1. v2.0.0latest
    • The panel is completely new. Everything a DJ touches was rebuilt: a home screen, a full-size 'Now Playing' page with cover art and live palette, search, queue, playlists, favourites, recently played, soundboard, stage effects, song requests, the door and the equalizer — all in one console with a collapsible sidebar and eight themes.
    • THE NOTCH — walk the club while you DJ. Click the notch on top of the panel and it slides away, leaving a dock strip with the playing track, a seekable bar, transport, volume and a crowd-dance button. You are dropped straight into free look: the mouse turns the camera, W A S D walk, and the screen blur lifts so you can actually see where you are going. Press G to open the cursor and click the strip, press it again to hand the mouse back to the camera. A badge next to the notch always spells out the current mode and the key. Config.Panel.FreeLookKey picks the key and is NOT a RegisterKeyMapping — nothing is added to the player's key-bind list and nothing can clash with another resource.
    • /djdev — the in-game venue editor. Type it as god/admin and build a whole venue without touching config.lua: several DJ points per venue, speaker cabinets, props, spotlight/laser/smoke/particle points, the door zone, jobs and gangs, audio type and per-venue acoustics. Placement uses a real gizmo with an orbit camera, grid snap, surface snap and per-axis handles. Saving applies to every player instantly — no restart, no reconnect. Venues from config.lua are never touched; the database simply overlays them and 'Revert to config' undoes everything.
    • EQUALIZER — a real 10-band parametric EQ per venue with presets, a live curve and saved settings. Needs fx-sound 1.1.0 or newer; on an older fx-sound the section hides itself and audio keeps playing normally.
    • PORTABLE SPEAKERS — four inventory items (shelf speaker, boombox, PA cabinet, tower). Drop one anywhere and it behaves like a full DJ point: queue, panel, playlists, equalizer. They can be linked into one rig, attached to a vehicle, and survive a server restart.
    • STUDIO — record your own beat from the soundboard pads in game, loop it and save it to the venue.
    • MULTI-CABINET PA. One signal, many cabinets — the track is not played twice, a single source is fanned out to one panner per cabinet and summed, the way a real rig works. No drift, no comb filtering, and no dead spot in the gap between two speakers. Level is compensated across the cabinets so standing in the middle of five of them does not clip.
    • AUDIO REALISM — walls and floors muffle the music instead of it carrying through solid geometry, and stepping outside the venue drops it to the 'music leaking through the door' sound. Transitions glide instead of stepping: volume changes ramp over ~450 ms and the muffle sweeps in octaves, so crossing a wall no longer clicks.
    • HUD HIDING — the panel and /djdev hide your HUD while open and put it back when they close, including if the resource is stopped. fx-hud is wired out of the box and any other HUD is one line in Config.Hud, using either an export or an event.
    • YOUTUBE WITHOUT A SIDECAR. The default playback mode runs a hidden YouTube player in the player's own game client, so nothing is resolved on your server: no yt-dlp, no cookies, no PO tokens, no 403s. Search and playlist import default to the same no-setup path. The old yt-dlp resolver is still there if you want it.
    • SQL is now a single file. sql/install.sql is safe to run as many times as you like, on a fresh install or on top of any older version — tables are created only if missing and columns added by later versions are checked for before they are added. The separate update_*.sql files are gone.
    • UPGRADING FROM 1.0.0: replace the whole resource folder, then run sql/install.sql once. Keep your own config.lua if you like — every booth in it keeps working — but the file gained several new sections (Config.Panel, Config.Hud, Config.Speakers, Config.Sound.Occlusion, Config.NuiWatchdog), so copying your booths into the new config.lua is the cleaner path. fx-sound 1.1.0 or newer is required for the equalizer.

    Files changed: the whole resource folder (this is a full rewrite) · sql/install.sql (run it once — replaces every update_*.sql)

  2. v1.0.0
    • First public release of fx-dj — DJ and club music system with synchronised 3D audio, YouTube and Spotify playlists (QBCore).

FX-Drone

FiveM

fx-drone · 1 release

View on GitHub ↗
  1. v1.0.0latest
    • First public release of fx-drone — server-authoritative police surveillance drone with FLIR, spotlight, target lock, taser and location marks.

FX-Fishing

FiveM

fx-fishing · 6 releases

Product page →View on GitHub ↗
  1. v1.0.5latest
    • ox_inventory FIX - using a fishing rod did nothing on some ox_inventory servers. ox only runs a use handler for items that declare one; without it the item is silently ignored. The 5 rods and diving_suit in setup/items/ox_inventory.lua now ship with client = { event = 'fx-fishing:client:oxUseItem' }. ACTION REQUIRED: ox_inventory servers must re-paste those 6 item definitions into ox_inventory/data/items.lua. Note this is 'event', not 'export' - an export would also set consume = 1 and delete the rod on first use.
    • The client bridge now accepts three use paths (ox client.event, ox_inventory:usedItem as a fallback, and the qb/qbx/esx usable item) with a 750 ms debounce, so no setup can trigger a cast twice. diving_suit is routed through the same point, which also fixes the suit being equipped and unequipped in one click on ox.
    • PANEL FIX - the career panel opened empty for some players, showing raw locale keys (nav_market, GUIDE_RODS, page_market_sub) and empty shop lists. The NUI init message was sent on a fixed 500 ms timer and was lost whenever the browser had not finished loading, which only happened on slower machines or busy servers. The UI now announces itself with a uiReady callback and the data is sent on demand, re-sent if the ping is missed, and re-checked every time the panel opens.
    • CRASH FIX - a missing command name in the config made RegisterCommand throw 'native 0x5FA79B0F: Argument at index 0 was null', which killed the rest of that client file (the diving system in particular). Command registration is now nil-safe: an empty name is skipped with a console warning, and setting a command key to false disables it silently on purpose.
    • Framework and inventory auto-detection no longer depend on the server.cfg order. A resource that is still 'starting' is now recognised, and detection is retried for 20 seconds. Previously, starting fx-fishing before ox_inventory made every item operation silently fail.
    • Notifications are never dropped any more: if no framework is detected, or it arrives late, the message falls back to ox_lib instead of disappearing. A failed server callback now reports that the server did not respond instead of leaving the player with no feedback.
    • New diagnostics - 'fxfishdiag' (server console) prints the detected framework, inventory and the state of every related resource; '/fxfishdebug' (F8) checks every item against ox_inventory and reports whether client.event is wired; '/fxfishtest' (F8) bypasses the inventory and starts a cast directly, which separates an item-definition problem from a server-side one. On ox, missing item definitions are also listed in red on start.
    • Config.Debug now logs the full item-use to cast flow in F8. Setup documentation was updated with the ox_inventory use-handler requirement and a diagnosis walkthrough.

    Files changed: bridge/framework/cl_framework.lua · bridge/framework/sv_framework.lua · bridge/inventory/cl_inventory.lua · bridge/inventory/sv_inventory.lua · client/utils.lua · client/main.lua · client/npc.lua · client/nui.lua · client/boat.lua · client/diving.lua · server/diving.lua · config/config.lua · config/config_diving.lua · locale/locales/tr.lua · locale/locales/en.lua · ui/js/app.js · setup/items/ox_inventory.lua · fxmanifest.lua

  2. v1.0.4
    • SECURITY/EXPLOIT FIX: a crew dive multiplied the crate count by the crew size at mission start, but nothing ever checked whether the crew actually dived. A player could invite members, leave them standing at the shop, dive alone and loot every extra crate plus the crew XP bonus by himself.
    • Crew crates are now gated live: at any moment only site.crateCount x (members currently diving inside the mission area) crates can be opened. The rest stay locked until the crew shows up. The check runs on every crate search, so members who leave mid-dive re-lock the remaining crates.
    • The crew XP multiplier now follows the number of members actually present at the site instead of the roster size.
    • New Config.Diving.Team.Presence block tunes the check: area tolerance (radiusPad), whether being underwater is required, and a grace period (graceSec, default 120s) so tank swaps, deaths and short trips to the surface never lock a legitimate crew out. Set enabled = false to restore the old behaviour.
    • Solo and crew dives are now separate. The Dive Sites tab ALWAYS starts a solo mission: no crate multiplier, no XP bonus, and only your own zone cooldown is spent. Crew missions are started from the My Crew tab. Previously any dive started while in a crew of 2 or more silently became a crew mission and burnt every member's zone cooldown.
    • Crew members without manage rights can now start their own solo dive from the Dive Sites tab; they used to be rejected with a no-permission error.
    • Starting a dive while another mission is already active now shows a clear message instead of reporting your own name as being busy elsewhere.

    Files changed: server/diving.lua · config/config_diving.lua · locale/locales/tr.lua · locale/locales/en.lua · fxmanifest.lua

  3. v1.0.3
    • Removed the illegal-fishing "caught" penalty entirely: no more automatic item seizure and no player-facing "caught" notification.
    • The heat/suspicion system and its HUD bar are unchanged; crossing the catch-chance threshold now only sends a dispatch alert to police, who handle the rest via roleplay (they can already search the player's inventory).
    • Removed the now-unused Config.Illegal.seizePercentOnCaught setting and the illegal_caught_feeling locale string.

    Files changed: server/illegal.lua · config/config_illegal.lua · locale/locales/tr.lua · locale/locales/en.lua · fxmanifest.lua

Show 3 older releasesHide older releasesv1.0.0–v1.0.2
  1. v1.0.2
    • New NUI catch minigame system replacing the ox_lib skill check — 4 types ship in the UI: timing (sweep bar), tension (hold-to-reel with inertia), sequence (W/A/S/D series) and reel (spinning ring).
    • Minigame type is chosen by the server owner via Config.Minigame.Type, with an optional random mode (Config.Minigame.Random) and per-species overrides (Config.Minigame.PerFish).
    • Difficulty presets (easy / medium / hard / expert) are read from each species' existing skillCheck entry and can be fine-tuned per minigame type via Config.Minigame.PerType — tension gets its own softer curve.
    • Catch quality (0-1) is validated server-side and scales the reward: up to +25% XP and a weight roll biased toward the species' upper band (Config.Minigame.QualityBonus).
    • Safety timeout added: if the NUI sends no result within Config.Minigame.TimeoutMs, the fish escapes.
    • The legacy ox_lib skillCheck is still available with Config.Minigame.enabled = false.

    Files changed: client/minigame.lua · client/main.lua · server/main.lua · config/config.lua · ui/index.html · ui/js/minigame.js · ui/css/style.css · locale/locales/tr.lua · locale/locales/en.lua · fxmanifest.lua

  2. v1.0.1
    • Hourly dynamic market: price multipliers now change on the hour (xx:00) and are deterministic — a server restart no longer resets prices and every player sees the same price.
    • Treasure (diving) prices are now connected to the same market engine on their own independent curve (Config.Diving.Market).
    • New countdown banner above the market panels: server time, next update time, time left and an hourly progress line (highlighted during the last 5 minutes).
    • Open panels refresh themselves on the hourly tick, including the sell-tab estimates.
    • Market exclusions are now configurable via Config.Career.Market.exclude instead of being hard-coded; the old 5-minute random-walk behaviour is still available with mode = "interval".

    Files changed: server/market.lua · server/career.lua · server/diving.lua · client/nui.lua · client/diving.lua · config/config_career.lua · config/config_diving.lua · ui/js/app.js · ui/css/style.css · locale/locales/tr.lua · locale/locales/en.lua · fxmanifest.lua

  3. v1.0.0
    • First public release of fx-fishing — Fishing & Scuba Diving System (QBCore / Qbox / ESX).

FX-Foodjobs

FiveM

fx-foodjobs · 1 release

View on GitHub ↗
  1. v1.0.0latest
    • First public release of fx-foodjobs — restaurants, cafes and bars with stations, registers, orders and an in-game editor.

FX-Garageapp

FiveM

fx-garageapp · 1 release

View on GitHub ↗
  1. v1.0.0latest
    • First public release of fx-garageapp — My Vehicles phone app: vehicles, garages and valet for fx-garages.

FX-Garages

FiveM

fx-garages · 2 releases

Product page →View on GitHub ↗
  1. v1.0.1latest
    • NEW — a garage can now be deleted from the /garagedev panel. Every garage in the Nearby list has a Sil button next to Duzenle; the first click turns it into Onayla / Vazgec, so a misclick cannot remove a garage. The delete itself was already fully built on the server side — permission re-check, revision guard, audit trail and live sync were all there — but the panel had no button and no way to send that intent, so deleting a garage meant typing /garagedev delete <id> and knowing the id. Pressing Escape cancels a pending confirmation, and the editor session stays open afterwards so several garages can be removed one after another.
    • Fixed the map blip of a deleted garage staying on every player's map until they reconnected. The removal was broadcast as a zone delta, and a zone delta only reaches players inside the roughly 225 m subscription window — but blips are map-wide and are fetched once and then held on the client, so everyone further away kept seeing a blip for a garage that no longer existed. Deletion is now announced to all players separately. The announcement carries a single garage id and the client drops just that one blip, so it does not make every player re-request the whole blip index.
    • What happens on delete is unchanged and still follows Config.GarageDev.allowHardDelete. Left at the default false, the garage is switched off rather than erased, so the vehicles stored there keep their garage_id and the change can be undone; set to true the row is deleted, but only when the garage holds no stored vehicles — otherwise the request is refused instead of quietly losing the vehicles. Either way the garage, its markers and its blip disappear for everyone immediately, with no restart.
    • Dropped the experimental use_experimental_fxv2_oal flag from fxmanifest.lua. It swapped Lua's native calls for an experimental faster path, and FiveM still labels that path experimental: it changes the return types of natives and breaks on any native whose declared argument types are wrong. The resource now runs on the same standard Lua runtime as every other resource, which is the safer place to be for the small amount of native-call time it costs back. Nothing in the resource depended on it.
    • UPGRADING: locales/*.json is escrow_ignored, so your own translation files are kept and will not contain the new notice_disable_ok line. Nothing breaks without it — the message falls back to notice_delete_ok, which you already have. Copy the new line over from the shipped locale file if you want the disabled case worded separately from the deleted one.

    Files changed: client/garagedev.lua · client/zones.lua · server/garagedev.lua · shared/constants.lua · web/build/assets/index-BkzBC3Gf.js · web/build/assets/index-BCKR9ykb.css · locales/*.json · fxmanifest.lua

  2. v1.0.0
    • First public release of fx-garages — server-authoritative garage system with in-game editor, real parking and vehicle showroom (QBCore / Qbox / ESX Legacy).

FX-Gocart

FiveM

fx-gocart · 1 release

View on GitHub ↗
  1. v1.0.0latest
    • First public release of fx-gocart — go-kart rental, racing, leagues and business system (QBCore).

FX-Hacker

FiveM

fx-hacker · 1 release

View on GitHub ↗
  1. v1.0.0latest
    • First public release of fx-hacker — server-authoritative hacking and phone-hack minigame system.

FX-Hud

FiveM

fx-hud · 3 releases

Product page →View on GitHub ↗
  1. v1.0.2latest
    • NEW — Config.Branding: the colours of the server name, the character name, the ID badge and the UTC stamp are now set from the config instead of the stylesheet. The flowing gradient that runs through the server name and the character name takes its colour stops, its speed and its step interval from there, and can be switched off entirely; with it off no timer is created at all, which is the lightest the interface gets. Every colour left empty falls back to the theme, so only what you fill in changes. The ID badge and the UTC stamp are drawn as two layers — a coloured tint over a dark base — and both layers are exposed, so setting the two tints to transparent gives you a flat background. Picking the black-and-white theme still overrides everything, as it should.
    • The HUD is noticeably lighter on the client. The status loop asked the framework for the full player table five times a second, and because that call crosses the resource boundary it serialised the whole table — inventory and metadata included — on every single tick. Hunger and thirst now read from a cache that qb-core and qbx_core refresh themselves whenever player data changes, so the expensive call happens once at login instead of continuously. Servers whose players carry full inventories will see the biggest difference.
    • Values that drift constantly — compass heading, engine RPM, vehicle heading, drift angle and aircraft altitude — no longer send a message to the interface on every tick. Each one now has a small threshold and is only sent once it has moved far enough to be visible on screen. This is where the time actually goes in a HUD: every update is a JSON message into the browser process, which costs far more than reading a game native. Speed is deliberately left out of this, since it is the number players actually read.
    • Two loops that ran every frame — hiding GTA's own HUD components, and blocking the Z key from expanding the radar — were merged into one. Both still run every frame because the natives they use require it, but a frame loop costs something simply by existing, so one loop instead of two removes that overhead outright. With both features switched off in the config, no frame loop is created at all.
    • The Refresh Rate setting in the menu now applies inside vehicles. The vehicle loop had its interval hard-coded, so a player who chose Low to save frames still received sixteen updates a second while driving — the heaviest loop in the resource was ignoring the one setting meant to control it. Real is unchanged from before; the default now runs at ten updates a second, which is still smooth.
    • Street name, area and postal code are now looked up on a fixed timer instead of every third tick. Because it counted ticks, choosing the highest refresh rate made these expensive lookups run more than three times as often rather than less, which is the opposite of what that setting is for.
    • Config.Default entries that quietly did nothing now work: refreshRate, streamerMode, cinematic, postalOnMap, marker3D and focusRP were only ever read from a player's saved settings, so whatever you set in the config was ignored for anyone who had never opened the menu. refreshRate is worth singling out — it happened to match Config.UpdateMs, so the two disagreed silently the moment either one was changed.
    • Removed Config.Spotify. It was not referenced anywhere in the script, and because config.lua is a shared script it also loads on the client — a clientSecret pasted there would have been shipped to every player who connects.
    • Database writes are cheaper. Vehicle mileage was written with one query per plate, so eighty cars in traffic meant eighty round trips in a row; it is now a single batched statement, split into chunks. With that in place the write interval was raised from 30 to 180 seconds. Only changed records are ever written, and a clean restart or a player disconnect still writes immediately, so the only exposure is a hard crash — and at most three minutes of mileage.
    • Fixed the periodic save never running when the database falls back to KVP. The loop sat behind two early exits in the startup thread, so a server without oxmysql — or one where the tables could not be prepared — only saved on player disconnect and on resource stop.
    • UPGRADING: config.lua is escrow_ignored, so your own file is kept and will not contain the new keys. Nothing breaks without them — Config.Branding simply falls back to the built-in colours and animation, and the old flushInterval of 30 still works, it just writes more often than it needs to now that mileage is batched. To use the new colour options, copy the Config.Branding block over from the new config.lua and raise Config.Database.flushInterval to 180. Config.Spotify can be deleted from your file; it is ignored either way.

    Files changed: c/utils.lua · c/main.lua · c/minimap.lua · c/player.lua · c/vehicle.lua · framework/qb.lua · framework/qbox.lua · s/db.lua · ui/assets/main.js · ui/assets/style.css · config.lua · fxmanifest.lua

  2. v1.0.1
    • The weapon widget now shows the item picture and the item label from your inventory instead of the generic weapon drawing, so a pistol looks like the pistol your players see in their bag.
    • The image folder is found on its own, no setup needed: tgiann-inventory (inventory_images/images), ox_inventory (read from the inventory:imagepath convar, so a moved folder or a CDN still works), qb-inventory, qs-inventory, lj-inventory, ps-inventory (html/images) and codem-inventory (html/itemimages). Anything else can be added as one line under Config.Weapon.imageSources.
    • Mixed .png and .webp item pictures in the same inventory are handled. Both extensions are tried and the first one that loads wins; the working folder and extension are then remembered, so switching weapons does not retry the misses. If an item has no picture at all, the built-in drawing stays — the widget never shows a broken image.
    • The label follows the same rule: it is read from ox_inventory or from your shared items list, so a renamed weapon item reads the same in the HUD as it does in the inventory. Custom weapons your framework knows about are picked up automatically.
    • New console command /fxweaponimg prints the detected image folder, the resolved item name and every URL that was tried for the weapon in hand. Use it if a picture does not appear — it tells you whether the folder, the item name or the file itself is the problem.
    • The ammo counter now reads magazine / spare instead of magazine / total. A freshly loaded pistol used to read 12 / 12 because the game counts the rounds in the magazine as part of the total; it now reads 12 / 0 and the spare count drops as magazines are used. The bar under the counter follows the magazine, so it stays meaningful when the spare count reaches zero.
    • Ammo is now read continuously while a weapon is drawn, including while the inventory or pause menu is open, and every frame during a reload. Previously the counter froze whenever the HUD was hidden, so ammo taken from the inventory did not show up until the first shot was fired.
    • The weapon panel can now be moved and scaled in the layout editor like every other widget. It was missing from the editor's element list, so it could not be selected at all and stayed where it was when the money panel was moved, which is how it ended up sitting on top of the cash and bank rows. It is also forced visible while the editor is open, so it can be placed without drawing a weapon first.
    • Fixed the ammo bar stretching across the whole top-right column and drawing over the money rows. It was being positioned against that column instead of the weapon panel it belongs to.
    • GTA's own weapon icon and ammo counter in the top right is now hidden, so the ammo is not shown twice on screen. It is on by default and can be turned back on with the new Config.HideGtaUI.weaponAmmo setting.
    • The minimap no longer shows up on the character selection and loading screens. It was being switched off four times a second, which is not enough against a character selection resource that switches it back on every frame; it is now held off every frame until the player is loaded, and again after a logout.
    • Pressing Z no longer blows the minimap up to full screen. GTA expands the radar on that key by itself, so a keybind change was not enough; the control is now blocked every frame. Config.Minimap.bigMapKey now ships as false, and the new Config.Minimap.blockBigMapKey turns the block on and off.
    • UPGRADING: config.lua is escrow_ignored, so your own file is kept and will not have the new keys. Both features still work without touching it — the inventory list falls back to the built-in one, and the Z block turns itself on only if no big map key is set. To disable the Z block while keeping your key, or to add your own inventory folder, copy Config.Weapon.itemImage / imageSources and Config.Minimap.blockBigMapKey over from the new config.lua.

    Files changed: c/weapon.lua · c/minimap.lua · s/main.lua · ui/index.html · ui/assets/main.js · ui/assets/style.css · config.lua · fxmanifest.lua

  3. v1.0.0
    • First public release of fx-hud — Miami Neon, all-in-one FiveM HUD (QBCore / ESX / QBox / Standalone).

FX-Lbphone-Billing

FiveM

fx-lbphone-billing · 1 release

View on GitHub ↗
  1. v1.0.0latest
    • First public release of fx-lbphone-billing — invoice / billing app for LB Phone with Discord webhook logging (QBCore / Qbox / ESX).

FX-Lbphone-Fansapp

FiveM

fx-lbphone-fansapp · 1 release

View on GitHub ↗
  1. v1.0.0latest
    • First public release of fx-lbphone-fansapp — Fans, creator subscription & content app for LB Phone (QBCore / Qbox / ESX).

FX-Lbphone-Music

FiveM

fx-lbphone-music · 1 release

View on GitHub ↗
  1. v1.0.0latest
    • First public release of fx-lbphone-music — music streaming application for LB Phone.

FX-Lbphone-Rentalapp

FiveM

fx-lbphone-rentalapp · 1 release

View on GitHub ↗
  1. v1.0.0latest
    • First public release of fx-lbphone-rentalapp — peer-to-peer vehicle rental app for LB Phone (QBCore / Qbox / ESX).

FX-Loadingscreen

FiveM

fx-loadingscreen · 1 release

View on GitHub ↗
  1. v1.0.0latest
    • First public release of fx-loadingscreen — premium loading screen with character showcase, music player and an in-game editor.

FX-Metubeapp

FiveM

fx-metubeapp · 1 release

View on GitHub ↗
  1. v1.0.0latest
    • First public release of fx-metubeapp — MeTube: YouTube-style app with synced TV and cinema screens.

FX-Multicharacter

FiveM

fx-multicharacter · 2 releases

Product page →View on GitHub ↗
  1. v1.0.1latest
    • Qbox and ESX are now supported alongside QBCore. Everything framework specific moved into a new framework/ folder, one file per core, and the right one is picked automatically on start. The console prints which it chose, for example [fx-multicharacter] framework: qb (qb-core).
    • Qbox: written against the qbx_core exports and ox_lib callbacks. Qbox moved the licence out of the players table into users at some point and not every install has players.cid, so instead of assuming, the script inspects the database once on start and builds its character queries from what is actually there. It prints the result, for example Qbox schema: licence in users, slot from charinfo.cid. Starting items stay with qbx_core/ox_inventory.
    • ESX: ESX has no built-in idea of multiple characters, so the adapter uses the identifier-prefix convention (char1:licence, char2:licence) and loads the chosen one through esx:onPlayerJoined — the same mechanism esx_multicharacter uses. That means esx_multicharacter has to be removed, and the script warns in the console if it sees it running. The users columns are mapped onto the character data the rest of the script expects (firstname, lastname, dateofbirth to birthdate, sex to gender, accounts to cash/bank). Nationality has no ESX column, so that field is discarded.
    • ESX deletion only removes the users row and the saved appearance. Anything else keyed by identifier — owned_vehicles, properties, licences — is deliberately left alone rather than guessed at. framework/esx.lua marks the spot to add your own deletes, and setup/integration/framework.md explains it.
    • The framework adapters are escrow_ignored, so you can adjust them for your own build without waiting for an update. framework/esx.lua marks the four spots most likely to need it.
    • The clothing resource is now detected on its own: illenium-appearance, fivem-appearance or qb-appearance. If one with a different API is found instead (qb-clothing, esx_skin, skinchanger, bl_appearance, rcore_clothing, ak47_clothing) the console names it and points at the adapter to edit, rather than silently skipping the editor. Config.AppearanceResource now defaults to 'auto'; naming a resource still works and turns detection off.
    • Config.Huds now takes exports as well as events, so HUDs that expose ShowHud/HideHud instead of firing events work without a bridge resource. fx-hud and mHud ship preconfigured. Export calls are wrapped so a HUD that renamed its export cannot break the spawn flow.
    • qb-core is no longer a hard dependency in fxmanifest.lua. It had to go, otherwise the resource would refuse to start on an ESX or Qbox server. Detection retries for 30 seconds, so a core that starts after this resource is fine.
    • UPGRADING: config.lua is escrow_ignored, so your own file is kept and will not have the new keys. Nothing breaks — the old Config.Framework = 'qb-core' is recognised and mapped to the QBCore adapter automatically, and a missing Config.CoreResource is handled. To take the new behaviour, copy these two lines over from the new config.lua: Config.Framework = 'auto' (now 'auto' | 'qb' | 'qbx' | 'esx') and Config.CoreResource = '' (only needed if you renamed your core resource). Also worth copying: the fx-hud entry in Config.Huds, and Config.AppearanceResource = 'auto'.
    • UPGRADING: fxmanifest.lua must be replaced, not merged — the new framework/ files are listed in shared_scripts and in escrow_ignore.

    Files changed: fxmanifest.lua · framework/bridge.lua · framework/init.lua · framework/qb.lua · framework/qbox.lua · framework/esx.lua · shared/locale.lua · appearance.lua · client/main.lua · server/main.lua · server/editor.lua · config.lua · setup/README.md · setup/integration/framework.md

  2. v1.0.0
    • First public release of fx-multicharacter — cinematic multicharacter selection for QBCore with an in-game scene editor.

FX-Musicapp

FiveM

fx-musicapp · 2 releases

Product page →View on GitHub ↗
  1. v1.0.1latest
    • Renamed the resource from fx-lbphone-music to fx-musicapp.
    • Adding a song to a playlist from any tab now places it at the top of the list instead of the end.
  2. v1.0.0
    • First public release of fx-lbphone-music — music streaming application for LB Phone.

FX-Npccontrol

FiveM

fx-npccontrol · 1 release

View on GitHub ↗
  1. v1.0.0latest
    • First public release of fx-npccontrol — NPC and traffic density control with server-side protection against invisible, armed and ghost NPCs (standalone, OneSync).

FX-Ownedshops

FiveM

fx-ownedshops · 1 release

Product page →View on GitHub ↗
  1. v1.0.0latest
    • First public release of fx-ownedshops — player-owned shops with employees, orders, deliveries and finance (QBCore).

FX-Policebadge

FiveM

fx-policebadge · 2 releases

Product page →View on GitHub ↗
  1. v1.0.1latest
    • Fixed ox_inventory use issues.
  2. v1.0.0
    • First public release of fx-policebadge — item-based LEO badge - animated, shown to the player in front of you (QBCore / Qbox / ESX).

FX-Scale

FiveM

fx-scale · 1 release

View on GitHub ↗
  1. v1.0.0latest
    • First public release of fx-scale — ped height and body scaling with an orbit camera, live ruler and presets.

FX-Showroom

FiveM

fx-showroom · 2 releases

Product page →View on GitHub ↗
  1. v1.0.1latest
    • This release touches almost every file, so replace the whole folder rather than picking single files out of the list below. Keep your own config.lua, config_cars.lua, locales/ and bridge/ — all four are escrow_ignored and your edits survive.
    • SECURITY FIX: the test drive registered whatever network id the client sent it, and deleted that entity server-side when the drive ended. A crafted payload could therefore make the server delete an entity the player did not own. The reported entity is now verified to exist, to be a vehicle, to carry a plate this resource issued, and to be within 50m of the reporting player, with a per-player cap.
    • Hardened every admin write: vehicle meta is limited to a 17-field whitelist with type, length and range checks (NaN and infinity are rejected), categories are sanitised, and all privileged events are rate limited per player.
    • Multi-framework support: Qbox and ESX now work alongside QBCore, plus a standalone mode, detected automatically. Qbox has no GetCoreObject(), so permissions and player lookups go through the qbx_core exports; ESX gets its own table and column mapping (owned_vehicles / users / identifier). Set Config.Framework if detection ever picks the wrong one.
    • Full localisation: every string the player or admin sees now comes from locales/ — English and Turkish ship with the resource, 188 keys each. Missing keys fall back to English, never to a raw key. Console output stays English on purpose.
    • Performance: the client used to send two or three NUI messages every frame. They are now batched into one message and only sent when a value actually changes, so an idle camera sends nothing. The 285-vehicle catalogue is cached instead of being rebuilt on every menu open.
    • The ownership panel resolves owners in two queries instead of one per row, and understands the ESX schema, including legacy tables where the model is stored inside the props JSON rather than in its own column.
    • Optional integrations (target, vehicle keys, fuel, notifications, weather sync) moved into bridge/, which is escrow_ignored. Each is a single documented function, so an unsupported keys or fuel resource can be wired in without touching the rest of the script.
    • Added setup/README.md: numbered installation steps, admin permission setup for each framework, an integration table, how to add a language, a verification checklist and troubleshooting.
    • Removed the showroom-location subsystem, which was written to disk and sent to the interface but never read anywhere, along with its two server events and json/showrooms.json. Delete that file when you update. Also removed eight unused NUI callbacks, the unused Config.TestDrive.AllowedCategories and Config.Viewer.pickPadding settings, and the browser-only demo block from the interface.
    • UPGRADING: two new settings were added to config.lua — Config.Locale ("en" or "tr") and Config.Framework ("auto"). Since config.lua is escrow_ignored your existing file is kept, so add them by hand. Without them the resource still starts, defaulting to English with automatic framework detection.

    Files changed: bridge/framework.lua · bridge/server.lua · bridge/client.lua · shared/locale.lua · locales/en.lua · locales/tr.lua · server/main.lua · client/utils.lua · client/camera.lua · client/rotation.lua · client/vehicle.lua · client/customization.lua · client/threads.lua · client/preview.lua · client/ui.lua · client/main.lua · client/testdrive.lua · client/nui.lua · client/world.lua · ui/index.html · ui/js/app.js · ui/js/api.js · ui/js/admin.js · ui/css/main.css · setup/README.md · config.lua · fxmanifest.lua

  2. v1.0.0
    • First public release of fx-showroom — vehicle showroom and donate management system with a cinematic preview (QBCore).

FX-Sound

FiveM

fx-sound · 2 releases

Product page →View on GitHub ↗
  1. v1.1.0latest
    • New SetPositions export: one sound can now be anchored at SEVERAL points at once (multi-cabinet PA). The engine fans the single media source out into one panner per point and sums them, exactly like a real rig feeding N cabinets from one amp signal.
    • This replaces the two broken ways of covering a large area. Playing the same track N times needs N media elements, and those never stay sample-locked - the drift between them is audible as echo and comb filtering. Teleporting a single panner to the nearest cabinet is no better: while it slides between cabinets the source is briefly far from everyone and the whole field dips, and standing between two cabinets locks the sound to just one of them. Summing one signal across many panners has neither problem - no second copy so no drift, no delay between arms so no comb filtering, and contributions add so there is no dropout in the gaps. The nearest cabinet still dominates, which keeps localisation correct.
    • A point may carry a heading, which makes that cabinet DIRECTIONAL - full level in front, cone.outerGain behind - instead of an omnidirectional floating point. The cone defaults to { inner = 100, outer = 300, outerGain = 0.5 } and is tunable per call.
    • SetSpatial now accepts a list of points as well as a single one, so the whole fan-out is rebuilt when a sound comes back to 3D. Previously going 2D tore every arm off the graph and only the first was ever restored.
    • SetDistance now applies to every cabinet in a rig instead of only the first one.
    • Fully backward compatible: no existing export changed its signature or behaviour. Passing a single point to SetPositions is identical to SetPosition.

    Files changed: client/main.lua · html/engine.js · html/nui.js · fxmanifest.lua

  2. v1.0.0
    • First public release of fx-sound — 3D spatial Web Audio engine with real low-pass filtering and bass-boost EQ.

FX-Stash

FiveM

fx-stash · 2 releases

Product page →View on GitHub ↗
  1. v1.0.1latest
    • Fixed: a job-restricted stash could reject every player with that job. Two separate causes stacked on top of each other. First, the rule inputs in the admin panel only wrote their value to the draft on blur — typing a job name and pressing Save without clicking elsewhere sent an empty name, and the server silently drops rules with a blank name, so the stash ended up with zero rules and nobody matched. Second, even a correctly saved rule was matched case-sensitively against the framework's job name, so a rule saved as "Police" never matched qb-core's "police". Both are fixed: every rule input now writes on every keystroke, and job/gang matching is case-insensitive on the server. Turning on Config.Debug now also logs the exact job, grade and rule count involved when access is denied, so a mismatch is visible in the console instead of a bare "no access" notification.
    • Fixed: qb-core builds where job.grade or gang.grade is a plain number instead of a {level=...} table crashed the access check instead of reading the grade. Both shapes are now accepted.
    • Fixed: a stash created while the owner was inside a routing bucket (an instance) could not be opened by anyone, including its creator. The admin panel always reported bucket 0 for the current position, so the stash was saved with bucket 0, and the server-side proximity check compares the player's real bucket against the stash's stored bucket. The bucket is no longer taken from the client at all — the server stamps the creator's actual routing bucket when the stash is created.
    • New admin panel: a tablet-style shell replaces the old flat panel, and creating or editing a stash is now a 5-step wizard (Basics, Capacity, Access, Location, Summary) with per-step validation instead of one long form. Each access type shows what it does before you fill in rules, and the final step shows every setting for one last check before saving.
    • Fixed: the edit screen had no way to change a stash's coordinates at all — the field simply did not exist, so "move this stash" meant delete and recreate it. The new Location step has a coordinate card with the current X/Y/Z/heading and three ways to set it: your current position, manual entry, or the new laser picker.
    • New: a laser coordinate picker — aim at any point in the world (ground or object) and a crosshair HUD shows the live X/Y/Z and distance to it, confirm with E or cancel with Backspace. This sits alongside the existing prop/ped drag-placement flow and does not replace it.
    • FiveM's NUI does not support the CSS backdrop-filter property, so every panel, modal, toast and HUD badge that relied on it for its blurred-glass look rendered as a flat, un-blurred tint instead (or, if the tint was removed, as a floating shape with no glass effect at all). All backdrop-filter usage is removed and replaced with the game's own native screen blur (TriggerScreenblurFadeIn/Out), guarded the same way fx-admin's panel is: a running fade is cancelled before the opposite one starts, so rapidly opening and closing the panel cannot leave the blur stuck on screen. Blur turns on when the panel opens and off during prop/ped placement, the laser picker and the object picker, so the world stays clear while you are looking at it.
    • Removed the full-page dark scrim behind the panel and behind every modal (the stash wizard, import, confirm and object-picker dialogs) — with the panel already blurring the game behind it, the extra tint read as a black curtain covering the whole screen. Depth now comes from the game blur alone; panel and cards keep their own border and shadow.
    • Fixed several inputs in the wizard (job/gang/identifier rule fields, the custom model field, the ped scenario field) rendering as an unstyled white browser default box instead of the themed input — they were missing a type attribute, and the CSS only matched input[type=text] explicitly. The selector now covers any input regardless of type, so a missing type attribute can no longer slip through unstyled again.
    • Fixed the rule-row delete button not lining up with its input fields, and the identifier rule row giving most of its width to the type dropdown instead of the value field. Added a visible focus ring on inputs, and gave every theme's input field its own background distinct from button/chip surfaces — inputs previously used the same surface color as buttons and were only visible by their border.
    • Fixed the scrollbar thumb being nearly invisible in the Light theme (and low-contrast in the others) — it used the same faint color as borders. The thumb now uses each theme's muted-text color, which stays readable against both light and dark surfaces, with a hover and active state.
    • Security: all data coming from the client is now validated on the server before use, through a new central guard module. Stash name, weight, slots, category, access rules, coordinates and world data are type-checked, range-clamped and whitelisted rather than written to the database as-is; money deposit/withdraw amounts and target server IDs are rejected outright (not clamped) when out of range, so a negative or absurd amount can no longer be silently coerced into a valid one. Opening a stash and depositing/withdrawing money now re-checks the player's actual server-side distance to the stash instead of trusting the client's claim of being nearby. Every player-facing net event and callback is rate-limited. Every call into another resource's export is wrapped so a missing or broken target inventory/target system cannot crash fx-stash.
    • Cleanup: removed a leftover frameworks.lua at the resource root from an unrelated RedM project (VORP/RSG references, never loaded by this resource's manifest) and the internal development spec setup.md. Added a proper setup/ folder (SQL install script, ace-permission snippet, custom-inventory integration guide) and marked config.lua, config_server.lua, framework/*.lua and locales/*.json as escrow_ignore so they stay editable after purchase.
    • All server-facing exports that return a stash object now return a copy, not a live reference into the internal cache, so another resource can no longer mutate fx-stash's state by editing the object it got back.

    Files changed: config.lua · config_server.lua · shared/constants.lua · shared/utils.lua · shared/locale.lua · framework/frameworks.lua · framework/inventory.lua · framework/custom.lua · framework/target.lua · server/guard.lua · server/access.lua · server/cache.lua · server/stash.lua · server/callbacks.lua · server/admin.lua · server/members.lua · server/exports.lua · server/logs.lua · server/database.lua · client/world.lua · client/stash.lua · client/nui.lua · client/admin.lua · client/preview.lua · client/raycast.lua · client/utils.lua · ui/index.html · ui/app.js · ui/style.css · locales/*.json · fxmanifest.lua · setup/README.md · setup/sql/install.sql · setup/integration/permissions.cfg · setup/integration/custom-inventory.md

  2. v1.0.0
    • First public release of fx-stash — premium personal & shared stash system (QBCore / Qbox / ESX).

FX-Tattoos

FiveM

fx-tattoos · 3 releases

Product page →View on GitHub ↗
  1. v1.0.2latest
    • Fixed leg tattoos not displaying correctly.
    • Fixed tattoos carrying over to the next character when switching characters without disconnecting (e.g. via fx-multicharacter/qb-multicharacter). The player's tattoo cache and citizenid binding are now reset on every character load, so a new character no longer reads or briefly shows the previous character's tattoos.

    Files changed: fxmanifest.lua · config.lua · server/store.lua · server/shop.lua

  2. v1.0.1
    • Full localization. Config.Locale now actually works: every text a player sees — the whole menu, notifications, body zone names, the map blip, the /tattoos chat suggestion and even the transaction labels in your framework's money log — comes from the new locales/ folder. Ships with 10 languages: tr (default), en, de, fr, es, pt-br, pl, it, nl, ar.
    • Half of the menu was hardcoded in Turkish regardless of settings; that is gone. Any key missing from a language falls back to English, so a partial translation never leaves a blank text. Adding your own language is copying locales/en.lua and translating it — the folder is escrow_ignored.
    • Percent values follow the language too (tr shows %50, everyone else 50%), and the confirmation dialogs, capacity line and search texts are all translated.
    • Config.Camera.DragSensitivity now actually does something — the UI was using its own hardcoded value and ignoring the setting.
    • config.lua rewritten with short one-line comments so it is actually scannable. Config.Text, Config.ZoneLabels, Config.Blip.Name and Config.NewTattoos.Label were removed — those texts live in the locales now. No default value or behavior changed.
    • UPGRADING: replace the whole resource folder. If you keep your own edited config.lua, it still works untouched — the removed text tables are simply ignored and your Config.Locale value picks the language (your old file has "en", set it to the language you want). If you customized any texts, move them into the matching keys in locales/<language>.lua.

    Files changed: fxmanifest.lua · config.lua · locales/ (new folder, 10 languages) · shared/locale.lua (new) · client/shop.lua · client/nui.lua · client/bucket.lua · server/shop.lua · server/bucket.lua · ui/index.html · ui/app.js · README.md

  3. v1.0.0
    • First public release of fx-tattoos — server-validated tattoo shop, illenium-appearance compatible (QBCore / Qbox / ESX).

FX-Traders

FiveM

fx-traders · 2 releases

Product page →View on GitHub ↗
  1. v1.0.1latest
    • When a player is turned away by a trader, the console line now also shows the detail behind the refusal — for a job requirement that is the job name the server actually read from the player. Until now that detail only went to the Discord webhook, so a server without a webhook configured had no way to see why the panel would not open.
    • Turn on Config.Debug in config/config.lua and walk up to the NPC once: the console prints 'erisim reddedildi: <id> | <trader> | job_not_allowed | meslek: <job>', which tells you whether the job name in your config matches the one the framework reports.
    • UPGRADING: replace client/, server/, shared/, web/ and fxmanifest.lua only. Keep your own config/ folder (traders, config, currencies, webhooks) — overwriting it replaces your traders with the shipped examples.

    Files changed: server/logs.lua · fxmanifest.lua

  2. v1.0.0
    • First public release of fx-traders — fully config-driven NPC trading system with stock, cooldowns and history (QBCore).

FX-Uwu

FiveM

fx-uwu · 2 releases

Product page →View on GitHub ↗
  1. v1.0.1latest
    • Fixed a freeze in the /plushdev placement editor: pressing Sil (Delete) on a point locked the panel on screen with the mouse cursor stuck, and restarting the resource did not clear it - the admin had to reconnect. The delete button asked for confirmation through a browser dialog, which the FiveM interface layer cannot draw, so the panel stopped responding while waiting for an answer that never came. Deleting now asks inside the panel itself.
    • Placement mode can now always be closed with ESC. The key is handled by the script rather than the panel, so an interface problem can no longer leave an admin locked behind a cursor with no way out. Typing in a text box is unaffected.
    • While placement mode is open the panel and the script exchange a heartbeat. If the panel stops answering for any reason, placement mode closes itself and releases the mouse instead of leaving the admin stuck.
    • Deleting the last remaining point no longer breaks the panel.
    • Deleting a point is now instant. Previously the whole list was destroyed and every prop reloaded from scratch, which could stall the panel for several seconds on larger lists.
    • After a delete the panel now states that the change only becomes permanent once KAYDET (Save) is pressed, so points are no longer thought to be gone when they are still in the config.

    Files changed: client/dev_shop.lua · html/dev.html · fxmanifest.lua

  2. v1.0.0
    • First public release of fx-uwu — UwU Cafe - shoulder plushies, roaming cats and an in-game shop placement editor (QBCore).

FX-Weapondamage

FiveM

fx-weapondamage · 2 releases

Product page →View on GitHub ↗
  1. v1.0.1latest
    • Fixed the damage adjustment issue — the values set in the panel now apply correctly in game.
    • Replace every file in the resource folder for this update.

    Files changed: the whole resource folder — replace every file

  2. v1.0.0
    • First public release of fx-weapondamage — combat tuning workstation with a live test bench (QBCore / Qbox / ESX).

FX-Weed

FiveM

fx-weed · 2 releases

Product page →View on GitHub ↗
  1. v1.0.1latest
    • Sales can now be paid in cash, bank or black money. Set it per dealer with the new currency key in config/sales.lua, and override it per product. Black money is handed to the player as an inventory item instead of landing in an account, so illegal income stays dirty until it is laundered.
    • Leaving currency out keeps the old behaviour exactly: existing configs keep paying cash and need no changes.
    • The black money item name is yours to set through the new Config.Items.blackMoney key (default black_money). fx-weed does not create that item - it has to already exist in your inventory resource.
    • If a player's inventory is too full to receive a black money payout, the sale is refused before anything is taken and the player keeps the product. There is no state where goods are removed without payment.
    • An invalid currency value is reported in the server console and falls back to cash instead of failing silently. On start fx-weed also warns if black money is configured without an inventory bridge, or if cash/bank is configured on a standalone server.
    • The same currency field works in config/shops.lua for buying, so players can spend black money on seeds and tools. Exception: with tgiann-inventory the shop window and its payment are handled by tgiann itself, so the setting does not reach it. Dealer sales are unaffected.
    • Sale history now records which currency was used. The database updates itself on first start - there is no SQL to run.

    Files changed: server/currency.lua · server/sales_service.lua · server/shop_service.lua · server/repository.lua · shared/constants.lua · shared/sales_setup.lua · config/shared.lua · config/sales.lua · config/shops.lua · locales/tr.lua · locales/en.lua · setup/sql/install.sql · setup/README.md · fxmanifest.lua

  2. v1.0.0
    • First public release of fx-weed — Fixitfy Weed Growing System (QBCore / Qbox / ESX / Standalone).