301 releases · 35 resources

Changelog

What changed in every Oxide Studios resource, release by release. Read these before you update: migration steps and database changes are listed with each version.

Showing 1–25 of 37 releases

Oxide Methv2.0.0

Major

Added

  • Cook: pour each chemical into its share and fill the pot, then keep the burner knob in the warm, react and finish heat bands. The server scores the cook, and purity comes from how well you did.
  • Break: crack the 12-cell slab with the hammer, then scrape up shards in three sizes. A second hit on a cell turns it to dust.
  • Bag: weigh shards on a scale and heat-seal each bag between 0.8 and 1.0 g.
  • Lab tiers: the Lab Bench (meth_bench, level 4, two per player) and Cook Rig (meth_rig, level 7, one per player) join the folding table. Each is easier to keep in the heat band and smells less.
  • Propane: labs run on a propane_cylinder. One cylinder lasts 20 cooks on a table, 10 on a bench and 6 on a rig. A part-used cylinder keeps its level when it is disconnected.
  • Residue: every cook leaves residue that costs up to 15 purity until the lab is scrubbed. A lab at 25 residue or more (three cooks on a table) must be scrubbed before it can be packed up.
  • Fume extractor (meth_fume_extractor, level 3): cuts the police alert chance at its lab to about a third and stops nearby players smelling the cook.
  • A lab without an extractor smells while it cooks: players within 6 m notice it, and on-duty police within 12 m.
  • Crystallizer: a new dark-gray cabinet with two glass doors that open replaces the game's chiller, with the same 18 slots. Trays slide out and show wet, drying and dried in their variant's colour. The optional heater (meth_heater, level 5) mounts on its side and dries trays 1.5× faster.
  • Police seizure: an on-duty officer can seize a lab or crystallizer in 10 seconds. The equipment and its parts are destroyed, trays in a crystallizer go to the officer as evidence, and the owner is told.
  • Chemical supplier: a ped sells the base chemicals, baggies, propane and lab gear for cash (gear from its meth level), and swaps any used propane cylinder for a full one for $60. Set it up under Store in /meth settings or in shared/config/store.lua.
  • New additives Lithium Strips (level 8) and Methylamine (level 9), and new variants Desert Glass and Black Diamond, with their own colour and effects.
  • Progression: XP by purity grade, first-time and best-purity bonuses, perks at levels 6 to 10, variant mastery, daily and weekly goals, master ranks with perk picks, and signature recipes that sell for up to 15% more through Oxide Drug Selling and lose reputation when police seize the owner's equipment. A station cap, gang influence and copying XP to a skills system are available and off by default.
  • A Cook app with level and goals widgets on Oxide Phone and Oxide Tablet.
  • Level-up banner and XP pop-ups. The stage header, prompts and pop-ups are panels players place on Oxide HUD, and Config.UseHudAccent uses the HUD's accent colour.
  • Nearby players see the bottle being poured, the pot, flame, slab, shards, scale, bag, sealer and the hammer or scraper while someone works. The gas mask shows as a respirator that everyone sees.
  • A status tag over each lab and crystallizer shows its propane, residue, extractor and drying trays.
  • Using meth plays a smoking animation with a pipe and lighter.
  • Admin commands /meth setxp <amount> [id] and /meth unregister <signature>. New exports PriceFor and GetPlayerRank.
  • 15 new sections in /meth settings, in the new Labs, Progression and Economy categories.
  • New models for the stove and knob, flames, slab, shards, pot liquid, bags, sealer, respirator, bench, rig, extractor, cylinder, heater, residue grime, the crystallizer and its doors, and the crystallizer trays.

Changed

  • The cook, break and bag minigames are replaced by the ones above, and the crystallizer has a new shelf scene. The server now works out purity, shards and bag weights.
  • The burner phase of a cook lasts 40 seconds instead of 20. Propane burns when the cook starts; ingredients are taken when the burner is lit.
  • XP: cook 30 (was 25), break 15 per tray (was 30 per session), bag 10 (was 15). Cook, dry and bag XP are multiplied by the purity grade (Dirty 0.5 to Pure 1.5), and break XP by how cleanly the slab broke.
  • /meth stats opens the new Cook Profile instead of the short stats card.
  • The police alert chance depends on the lab tier and the fume extractor. Alerts are still off by default.
  • The "Cooked" total, now "Bagged" in the Cook Profile, counts sealed bags instead of shards.
  • A lab can't be packed up with its extractor or propane fitted, or at 25 residue or more. A crystallizer can't be packed up with its heater fitted or trays inside.
  • /meth kit also gives a propane cylinder.
  • The portable stove model is replaced by the new stove with a separate knob, and the old stove model no longer ships.
  • An additive's optimal range now widens or narrows the heat band.
  • The variants' Value multiplier, which nothing used, is removed.
  • The SetSetting export refuses a change while settings are still loading at startup, and refuses config-file-only keys such as UseHudAccent and SceneAnims, returning false. Before, a change made while settings loaded could be lost.
  • Settings save errors can be translated (settings_error_* in locales/en.json).

Fixed

  • A function inside a customized config no longer stops oxide-meth's settings from loading. The function is ignored and the server console names it.
  • /meth settings says why a change wasn't saved instead of "value rejected". A failed reset shows an error instead of nothing.
  • Screens no longer show "%%", as in "86%% Pure".
  • Edits to Config.SceneAnims in the config file apply again after the first start.
  • The hammer no longer lies on its side, and crystallizer trays sit on their shelves instead of sinking into or floating above them.
  • Pours stream from the bottle's mouth.
  • A table can no longer be packed up while someone is working at it.
  • Packing up a crystallizer no longer destroys the trays inside; it waits until they are collected.
  • Crystallizer trays update for everyone who can see them, not only players within 50 m.
  • The purity penalty per level in /meth settings no longer shows "Level 0–9" and saves again.
  • Placing equipment in third person works inside shipping containers and under low roofs.

Documentation

  • Installation, configuration, features, admin, exports and troubleshooting guides cover the rebuilt stages, labs, supplier, seizure and progression, and say which o-link version each optional part needs.

Migration Guide

  • Update oxide-drugselling to 2.2.0 at the same time. Without it, Desert Glass and Black Diamond baggies can't be sold, and signature baggies get no price bonus and earn no reputation.
  • o-link 1.12.1 or newer is needed for the Oxide HUD panels, and 1.11.0 or newer for the Cook app on Oxide Phone. Everything else runs on older o-link.
  • Add the 11 new items and their images: meth_bench, meth_rig, meth_fume_extractor, meth_heater, propane_cylinder, lithium_strips, methylamine, crystal_meth_desert_glass, crystal_meth_black_diamond, meth_baggy_desert_glass, meth_baggy_black_diamond. For ox_inventory, copy them from items/ox_inventory_items.lua.
  • On qb-inventory (QBCore), set useable = true on meth_bench, meth_rig, meth_baggy_desert_glass and meth_baggy_black_diamond, and unique = true on liquid_meth_tray, crystallized_meth_tray, every crystal_meth item, every meth_baggy item and propane_cylinder.
  • Seven new database tables are created on the first start, and are also in sql/install.sql. No SQL to run by hand.
  • On the first start, saved settings still at their 1.7.0 defaults move once to the new ones: cook time, XP rewards, hammer and pour poses, use animation, stove and tray models. Values you changed are kept; a Break reward you changed is now paid per tray. The premium additives and variants, with their colours and effects, are added to your saved lists, and the Value multiplier is removed. Crystallizers move to the new cabinet and come back where they stood.
  • Tables placed before this update have no propane. Connect a propane_cylinder before cooking, or turn Propane off under Lab Upkeep in /meth settings.
  • Use this release's config files rather than your 1.7.0 copies. Several sections were replaced, labs.lua, crystallizer.lua, production.lua and store.lua are new, and a 1.7.0 equipment.lua names the old stove, which no longer ships.
  • Merge the new keys into custom locales. Restart the server after adding the items.

Oxide Pest Controlv1.0.0

Major

Added

  • A pest control gig job for QBCore, Qbox and ESX (needs o-link 1.11.0 or newer, ox_lib and oxmysql). Clock in at the Bugstars depot, take the company van and answer calls about cockroaches, rats and wasps at houses, restaurants and warehouses. No framework job or items to set up.
  • Dispatch with call cards (E accept, Backspace reject), a call timer, a weighted pest mix and Cancel Current Task. Three missed or rejected calls end the shift.
  • 12 properties (4 houses, 4 restaurants, 4 warehouses), 6 with wasp nest spots.
  • UV inspection: cockroach and rat calls start as "Pest complaint". Find droppings, gnaw holes, grease marks, the burrow and the harbourage with the UV torch. A findings card then names the pest, the nest and the treatment. Hints shrink as the technician levels up.
  • Treatments: a backpack sprayer for cockroaches (wide fan or long stream, tank refills at the van), bait stations for rats, glue traps on cockroach trails, and wasp nests foamed and bagged from a stepladder (level 3+). Stings cost health and money.
  • Pet bowls and vegetable beds from level 2: spraying them brings a complaint and a charge.
  • Gear comes from the van's rear doors, and the van only offers what the next step needs. Everything goes back in the van when a call ends.
  • Filing a report at the van ends each call. Unfinished work pays less, adds a complaint and brings a customer callback.
  • On-screen stage and findings cards, distance markers and key prompts. Hold H for the job waypoint. Other players see the gear and the spraying.
  • 19 first-time tutorials (/pestcontrol tutorials, /pestcontrol tutorialreset).
  • Two-player crews: a shared van and calls, each member paid on their own level and streak plus a 15% co-op bonus. The partner keeps the van if the leader leaves.
  • Five levels (Trainee Technician to Master Exterminator) with higher pay and tips. Restaurants unlock at level 2; warehouses and wasp calls at level 3. Daily streak bonus.
  • Pay: base pay plus distance, speed and find bonuses, level, streak and tips. Van damage, treatment charges, a gas fee and tax come off at clock-out. Summary as a pop-up or a phone message (Config.shiftSummary).
  • No lost pay: shifts ended by going down, missed calls, the complaint limit or a restart are paid. A player who disconnects or logs out is paid at their next login.
  • Complaints and a 30-minute suspension at three. A call reached faster than a vehicle could drive there (Config.Calls.maxTravelSpeed) pays no distance or speed bonus.
  • In-game settings editor, /pestcontrol settings (admins): every setting with Reset to default, applied live, with Place in world buttons. Depots can be edited during shifts.
  • In-world property editor (area, spray runs, sign spots, wasp nests, no-spray zones) that blocks saving a layout a call can't use.
  • Shift menu with a camera view you frame in world, or a simple context menu (Config.menuStyle).
  • Admin tools: /pestcontrol level <level>, Force pest (Config.DebugForceSpecies) and debug logging.
  • Phone messages and an incoming-call ring on supported phones (Config.usePhone).
  • Works with Oxide HUD (free): players move or hide the stage and findings cards in the /hud editor, and the cards follow the HUD accent (Config.UseHudAccent). Without Oxide HUD, or while it is stopped, the cards use HUD → Card positions (Config.HudLayout).
  • Optional uniforms (off by default) and model replacements (Config.ModelSwaps).
  • Custom props included (tank, wand, bait station, glue trap, wasp nest, sign models).
  • Server exports: IsOnShift, GetSetting, SetSetting, GetInfo, GetShift, GetProgression, SetUpdateHandler.
  • Database tables are created automatically; nothing to import. Restart the whole server after installing so the props load.

Oxide Firev1.0.0

Major

First release.

Added

  • A fire department built in game. Grades, salaries, uniforms, gear-room loadouts and a setup checklist per department in /fire admin. Badge numbers are given automatically; bosses edit badges and callsigns from the management desktop. Hire and dismiss with /fire hire and /fire dismiss, or from the boss desktop, where a hire is a job offer the player accepts.
  • Stations with clock-in points, a call board, personal lockers, a gear room and a management desk. Clock in at a clock-in point. /fire duty clocks out anywhere, and clocks in anywhere when Require station clock-in is turned off.
  • Radio channels with oxide-radio. Departments own numbered channels with a rank requirement and an optional duty requirement, set up in /fire admin → Radio. Firefighters are tuned to their department's default channel when they clock in.
  • Persistent apparatus. Engines, ladders, brush units, rescues and chief cars, bought from a catalog, taken out of station bays and kept in the world across restarts. Engines, ladders and brush units carry water, foam and hose outlets, and every unit has an equipment compartment. Each catalog entry has a vehicle type: Car, Bike, Quad, Boat, Helicopter or Plane. The catalog ships an engine (firetruk) and a chief car (lguard). Add your own fire vehicles in /fire settings, and set hose outlet positions for add-on trucks in /fire admin → Models.
  • Synced fires that every player sees the same way, with Casual, Standard and Realistic difficulty. On Standard and Realistic, smouldering hot spots come back unless they are soaked or pulled apart with the axe.
  • Hot spot markers. Each smouldering spot shows burnt ash, embers and a faint glow, steams when it is soaked, and breaks up when it is pulled apart with the axe. Change it or turn it off in Config.Fire.hotspot.
  • Vehicle, brush and structure fire calls at incident sites and wildfire zones, from an automatic call generator, with dispatch alerts. Build sites with the incident editor in /fire admin → Incident Sites: fly around the site and place its spot, fire points, victim spots and a vehicle fire's wreck. Problems are shown before you save.
  • Hoses with jet, fog and foam patterns that cool every burning spot the water reaches. Also hydrants from the map (plus any you list in Config.Hydrants.extra), supply lines, fire extinguishers, and the water cannon on the stock firetruk. Water pushes props, vehicles and people.
  • Breathing air (SCBA). A backpack and mask every player sees, an air timer, a head-out warning and a low-air alarm others can hear, refilled at the gear room or an apparatus. Smoke hurts anyone breathing it without a mask, or gives them smoke inhalation with oxide-medical.
  • Rescue carries and drags for downed players, and victim search in structure fires, with an alert to medics and a handoff to them.
  • Station life. A station bell for new calls, phone page-outs, paid rig checks, and lightning that starts brush fires with oxide-weather.
  • Firefighting feedback. Points for knocking spots down, deductions for mistakes, and a fire card showing how far the fire is knocked down. Feedback only, never paid, and it can be switched off.
  • Treasury, payroll and back pay. The treasury is a bank account (starting at 30,000) or a department balance, and it never goes below zero. A payout the bank refuses goes back into the treasury. Unpaid back pay stays owed for 30 days.
  • Admin tools. Live incidents (start, stop and spread fires), the call generator, and /fire writeoff <plate> for a unit lost where the server can't see it.
  • /fire settings edits department, duty, payroll, station, apparatus, call, safety and station-life settings in game, saved in the database. Fire, hose and tool tuning stays in the config files.
  • Works with Oxide HUD (free). Players move or hide the firefighting panels in /hud, and the panels take the server's accent colour (Config.UseHudAccent). Without Oxide HUD they sit where Config.HudLayout puts them.
  • Optional integrations:
    • oxide-dispatch or another dispatch resource. Without one, firefighters get a notification and a map blip.
    • oxide-weather, for wind, rain and lightning.
    • Phone page-outs.
    • oxide-tablet, for the Fire Command app.
    • Banking resources, for department treasuries.
    • EMS jobs, for rescue handoffs.
    • oxide-medical, for smoke inhalation.
    • g-multijob, with multi-department enrollment on.
  • Exports to start, read and clear fires, start calls, report lightning, and read stats and settings. See docs/EXPORTS.md.
  • Runs on QBCore, Qbox and ESX. The database tables are created on first start.

Before you start

  • Add a fire job to your framework with the department's name. Register the scba item and copy its image; itemimages/ox_inventory_items.lua has the ox_inventory entry. See docs/INSTALLATION.md.
  • On ESX, use an inventory o-link supports, not ESX's built-in one.
  • Use banking accounts is on by default. Without a supported banking resource, turn it off in /fire settings, or the treasury stays at 0 and no salaries are paid.
  • Restart the whole server after installing, so the nozzle, couplings and SCBA backpack load.
  • Needs o-link 1.12.1 or newer.

Oxide HUDv1.0.0

Major

Added

  • First release of oxide-hud, a free player HUD that every player builds for themselves in game.
  • Runs on QBCore, Qbox and ESX through o-link 1.12.0 or newer. No database and no items to set up.
  • In-game editor (/hud): add, drag, resize, snap to a grid and to other blocks, align and space, group, lock and hide, with undo and redo and keyboard shortcuts.
  • 66 pieces of data: health, armour, hunger, thirst, stress, oxygen and stamina; speed, RPM, gear, fuel, engine and body health, throttle, odometer and 14 vehicle lamps; aircraft and boat instruments; cash, bank, server ID and character name; weapon, ammo and clip; street, area and heading; voice, radio and the clock; and the player's own text.
  • 13 styles with their own options: ring, bar, shape, dial, value, indicator, compass, tape, artificial horizon, scale, voice, image and decor.
  • Groups that lay blocks out in rows, columns, grids, honeycombs, rings or stacks, with frames behind them, closing the gap when a block hides.
  • Rules on every block: hide above or below a value, warning and critical levels, and a pulse, starting from Config.AutoHide.
  • 42 templates: status sets, player and finance cards, location boxes, ID cards, weapon panels, and speedometers for every vehicle: Sweep, Ghost, Instrument and Rail for cars and bikes, Helm for boats and submarines, Glass for helicopters and planes, plus a Classic set of eleven more.
  • New players get the speedometer that fits each vehicle: Sweep in cars and on bikes, Helm on water, Glass in the air.
  • A layout on foot, one in a vehicle, and one per vehicle type (car, bike, boat, submarine, helicopter, plane), each following the one above it until changed.
  • Sample data in the editor (driving, flying, boating, armed, underwater, low needs, on the radio and more) to place blocks without leaving the editor.
  • Server accent colour with an optional lock (Config.Theme), and each player's own accent and data colours.
  • Saved layouts and share codes for the whole HUD or one group.
  • A server default HUD from a share code (Config.DefaultLayout) that every player who never edited their HUD follows, and an optional editing lock (Config.LockEditing).
  • Layouts pinned to the screen's edges and sized to its height, so a HUD looks the same at every resolution.
  • Hides by itself at character select, in the pause menu, while dead or downed, and while another script's menu has the mouse; GTA's own street and area names return while it is hidden.
  • Other resources' notifications, progress bars, job timers and cards are placed clear of the HUD; players can move them, hide them while editing or switch them off in game.
  • Speed units (Config.SpeedUnit), boat and aircraft units (Config.Units), stall and pull up warnings (Config.Flight), an optional server logo (Config.ServerLogo) and reserved screen areas (Config.ReservedAreas).
  • Reads voice from pma-voice or SaltyChat, fuel from most fuel resources and the seatbelt from qbx_seatbelt or qb-smallresources, all optional.
  • Developer API: olink.hud.AddPanel places any resource's panels around the HUD, with a complete example in docs/API.md.
  • English locale (locales/en.json) covering every HUD and editor text.

Glitchv1.0.0

MajorOxide Phone

Added

  • First release of oxide-glitch, the live streaming app that comes with Oxide Phone. Runs inside oxide-phone on QBCore, QBX and ESX through o-link (1.11.0 or newer).
  • Browse live channels, most watched first, in seven categories, with a Following tab and search.
  • Channels with an avatar, banner, bio, followers, tier and Partner check mark, live or offline with the last stream's figures.
  • Watching: the live picture from the streamer's phone with the chat below, real and simulated messages in one, emotes, badges, slow mode, followers-only mode and alerts for follows, subs and cheers.
  • Support a streamer with follows, monthly subscriptions paid from the bank (Config.Money.subPrice) and cheers. The streamer gets the money less a platform cut that falls as their tier rises.
  • Going live with a title and a category, the front or back camera and the microphone, and a dashboard with real and simulated viewers, earnings, follows, subs, cheers, a hype meter, alerts and chat moderation tools.
  • Streaming as a job: a simulated audience reacts to what the streamer does in the city and pays ads, subs and cheers into a pending balance cashed out to the bank, with hourly and daily caps, a minimum stream length and no pay while AFK.
  • Three tiers (Streamer, Affiliate and Partner) earned with followers, average viewers and streams, each paying more. Admins can grant or remove Partner.
  • A follow counts once per character, and a ban covers the character on every account.
  • Notifications for lives, subs and cheers that reach only the phone logged in to the account.
  • Moderation: reports on channels and chat messages, an admin queue in the app, bans that keep accounts out of chat and off streams, and /glitch. Every admin action is logged.
  • Evidence for police Forensics: real chat, follows, subs, cheers, deleted messages and cash-outs. A phone police hold opens Glitch read-only.
  • Database tables are created automatically at first start; sql/migrations/ ships for reference.
  • English locale (locales/en.json).

Hookrv1.0.0

MajorOxide Phone

Added

  • First release of oxide-hookr, the swipe-to-match dating app that comes with Oxide Phone. Runs inside oxide-phone on QBCore, QBX and ESX through o-link (1.11.0 or newer).
  • Profiles with up to 6 photos from the phone's Photos or Camera, a bio, interests and prompts, who players are and who they want to see, an age range (18+) and a distance. Profiles can be paused.
  • Discover: a deck of cards to drag or tap through, with likes, Super Likes and rewinds under daily limits.
  • A match when the like is mutual, then a chat with text and photos, read receipts and live updates. Unmatch, block and report are one tap away.
  • Notifications for new matches and messages that open the right chat, follow the phone's preview settings and reach only the phone logged in to the account. Profiles can be shared to Messages as hookr:// links.
  • Uses the phone's accounts: a SIM gets one the first time Hookr opens, with a password, log out, switching account and logging in on another phone.
  • Distances by area only, never the exact spot, refreshed at most every five minutes.
  • Evidence for police Forensics: profile changes, swipes, matches, messages (unsent ones too), blocks and reports. A phone police hold opens Hookr read-only.
  • Moderation in the app and with /hookr: the report queue with the reported chat, removing photos or profiles, banning and unbanning. Every action is logged.
  • Database tables are created automatically at first start; sql/migrations/ ships for reference.
  • English locale (locales/en.json).

Leakdv1.0.0

MajorOxide Phone

Added

  • First release of oxide-leakd, the photo and video sharing app that comes with Oxide Phone. Runs inside oxide-phone on QBCore, QBX and ESX through o-link (1.11.0 or newer).
  • Home: a row of stories, then posts from people you follow. A post is up to 10 photos or one video, with likes, comments, saves and sharing to a chat or the phone's share sheet. Captions have tappable @mentions and #hashtags.
  • Stories for 24 hours, watched full screen, with who watched them and replies that go to Direct.
  • Reels: video posts one screen at a time.
  • Search: popular posts, accounts and hashtag pages.
  • Profiles with posts, reels, tagged posts and saved posts, followers and following, and private accounts that approve new followers.
  • Direct: one-to-one chats with text, photos, shared posts and story replies, read receipts and live updates.
  • Live: go live with the phone's camera. Followers are told, viewers anywhere on the map watch, comment and send hearts, and a private account's lives are for its approved followers.
  • Blocking hides profiles, posts, stories, lives, comments, likes and tags both ways.
  • A verified badge, given by admins.
  • Notifications for likes, comments, follows, mentions, messages and lives that open the right screen and reach only the phone logged in to the account. A like, follow or tag taken back and given again notifies at most once every two days.
  • Evidence for police Forensics: posts, edits, deletes, comments, likes, follows, messages, stories and live comments. A phone police hold opens Leakd read only.
  • Moderation in the app and with /leakd: reports on posts, comments, stories and accounts, removing content, bans, ending lives and the verified badge. Every action is logged.
  • Database tables are created automatically at first start; sql/migrations/ ships for reference.
  • English locale (locales/en.json).

Oxide Phonev1.0.0

Major

Added

  • First release of oxide-phone. Three apps come with it, each its own resource with its own changelog: Hookr (oxide-hookr), Leakd (oxide-leakd) and Glitch (oxide-glitch). The apps are optional.
  • Runs on QBCore, QBX and ESX through o-link (1.11.0 or newer). Needs ox_lib, oxmysql and OneSync; pma-voice for calls.
  • Phones are inventory items, each its own device: contacts, texts, mail, photos and the home screen stay with the phone when it changes hands.
  • Players can carry several phones: a call rings only the phone that holds the number, and texts, mail and app notifications reach only the phone they are for.
  • SIM cards carry the number: registered SIMs, free with a new phone by default, and burner SIMs that belong to nobody.
  • Lost and stolen SIMs: the registered owner reports a number from any phone and gets a replacement with the same number, free by default (Config.Sim.replacementCost).
  • Find Phone in Settings: locate, lock with a message on the lock screen (Lost Lock) or erase your phones from any phone you use.
  • Passcode lock with a lockout after wrong guesses, and an optional battery with Low Power that charges in a vehicle, with a powerbank item or at charging stations.
  • No-signal areas you draw, optional no signal indoors, and Airplane Mode (emergency calls still go through).
  • The phone's own model in the hand in four colours.
  • Charging stations you place in game from /phone settings: phones charge while players stand nearby, or on one of three pads where the phone lies in its colour until anyone (or only its owner) takes it. Stations built with your own map tools can be added too.
  • Calls through pma-voice: ringing heard nearby, recents, favourites, keypad, hold, call waiting, conference calls of up to five, voicemail with greetings, blocked numbers and hidden caller ID.
  • Messages: direct and group texts with photos, videos, voice messages, places and live locations, polls, contacts and drawings, plus reactions, replies, edits, unsend, read receipts and typing.
  • Texts and mail to a phone that is off or out of signal wait and arrive later.
  • Mail: an inbox per phone with addresses and aliases, attachments, drafts, scheduled sending and undo. Other resources can mail players, even offline ones.
  • Camera with photo, video, time-lapse and portrait modes, filters, zoom, flash, timer and the selfie camera; players can walk with the camera up.
  • Photos: library, albums, shared albums, a map of places, a Hidden album behind the passcode, Recently Deleted, an editor and video trimming.
  • Photo and video storage through Fivemanage, S3-compatible storage (such as Cloudflare R2) or your own service, picked in /phone settings with its key in server.cfg.
  • Notes, Calculator (with a scientific mode), Clock (alarms on the game clock, stopwatch and timer) and Maps (search, saved places, parked car and turn-by-turn directions).
  • Wallet: send and request money between phone numbers through your framework's bank, with payment cards in Messages, per-transfer and daily limits, and refunds when a transfer can't arrive.
  • Store: players get apps with a short simulated download (Config.Store.simulateInstalls), and you can preinstall any app for everyone (Config.Store.preinstalled).
  • Dark Chat: anonymous chat rooms by handle, with photos.
  • Feed: public posts with photos or a video, hashtags, mentions, replies, quotes, reposts, likes, bookmarks, follows, trending hashtags, a verified badge (/phone feedverify), player reports and admin moderation.
  • Gigs app for the Oxide gig jobs: what to do now, pay so far, and start locations on a map with Set GPS and Show on Maps; shift updates arrive as notifications.
  • Home screen with pages, a dock, folders, widgets and widget stacks, All Apps, search, five wallpapers plus your own images, Quick Controls, an app switcher and modes (Do Not Disturb, Sleep, Driving, Work).
  • Wallpapers from image links: players paste an https image link for the home screen, the lock screen or both, from sites you approve (Config.Home.wallpaperLinks).
  • Clock widget in six styles (City, Analog, Digital, Float, Solar and World Clock), small or medium, picked per widget in edit mode.
  • Notifications with banners, a notification list, badges, eight ringtones and six text tones, and the phone rising from the pocket while put away.
  • Sharing Nearby: photos, contacts, notes, places and Feed posts to a player standing next to you.
  • 911 and 311 from the Phone app or the lock screen, to your dispatch resource or to the jobs you choose (Config.Emergency).
  • Police and evidence: seize, lodge, return or destroy phones with a custody log, search authorizations, extraction reports that include recently deleted content, carrier records and traces, all in the Forensics app.
  • Extraction reports attach to an oxide-police case when it runs, or go to your own MDT through an export.
  • Counterplay: Erase All Content, and a phone_wiper item that removes content for good.
  • Other resources can send mail, texts and notifications, and put their own apps and widgets on the phone with its accounts, photos, camera, location, links, live streams and evidence (docs/BUILDING-APPS.md).
  • Stock QBCore scripts that send qb-phone mail keep working, and an optional layer answers common LB-Phone exports.
  • Admin commands under /phone: look up a phone, remove a passcode or an app password, set a battery level, report a SIM lost or give a replacement, and list or end live streams.
  • Live settings editor (/phone settings) for nearly every option, saved in the database.
  • Database tables are created automatically at first start; sql/install.sql and sql/migrations/ ship for manual installs.
  • Optional integrations with oxide-police, oxide-dispatch, oxide-drugselling, oxide-banking, oxide-tablet and the Oxide gig jobs.
  • English locale (locales/en.json).

Oxide Drugsellingv2.0.0

Major

Added

  • Corner selling — start anywhere with /corner or the radial menu's "Work corner". Buyers come to you on foot or by car until you walk away, run out, or sit idle. Set up in Config.Corners.
  • TrapFone trap phone (trap_phone item, or bind a key to /trapphone) — clients text orders, you haggle on the keypad, then book a hand-off or a dead drop for an in-game time.
  • Phone clients come from street sales, corner sales and referrals, each with their own personality, budget, trust and hours. Good product and punctual meets build trust; bad batches, lateness and no-shows lose it.
  • Phone reputation tiers (Nobody up to Kingpin) raise the order rate, client slots and how far buyers will stretch on price.
  • Hand-offs: the buyer walks over or pulls up at a street meet point near their home.
  • Dead drops: leave the package at a drop spot, the client collects it and leaves cash (or pays instantly with Config.Drops.payout = 'instant'). Anyone who finds the package or cash can take it. Ten spots in south Los Santos ship as defaults; place your own with /drugselling drops.
  • Phone battery (charges in vehicles or with the trap_charger item), trap_sim SIM swaps for a clean number, PIN lock, silent mode, no-signal areas (Config.DeadZones), and a destroy option that wipes the phone for good.
  • Players can text each other between trap phones.
  • Heat — selling raises heat on the area, the dealer, the corner and the phone number. High heat means more refusals, more police calls and more robberies. It cools over time and survives restarts. Config.Heat.
  • Witnesses — nearby pedestrians can call the police on a sale, and a crowd makes buyers back off. Config.Witnesses.
  • Time of day — buyers are more willing at night and scarcer in the morning. Config.TimeOfDay.
  • Seized phone evidence — police who take a dealer's phone can extract it and read contacts, messages and booked meets, trace another number to a rough area, and send the report to a case. Config.Evidence.
  • Evidence reports attach to oxide-police cases out of the box. Other MDTs can use Config.OnPhoneExamined or a bridge file (see docs/EVIDENCE_BRIDGE_DEV.md).
  • Stings — police use the sting_phone item to post an undercover buy that reaches a hot dealer as a normal client. The meet or drop seizes the goods and alerts police. Officers also get a heat map. Config.Stings.
  • Bulk buyers — at Plug and Kingpin reputation, big buyers order in person with two bodyguards, and may rob a dealer they don't trust. Config.Bulk.
  • Party pills, capsules, bars, blues and percs can be sold, priced by oxide-pills.
  • New export_multiplier pricing type lets a drug's own resource set its sale prices.
  • In-game settings menu (/drugselling settings, admin only): edit every setting live, place drop spots and draw no-signal areas in the world, no restart needed.
  • Admin commands /drugselling corners, /drugselling drops, /drugselling kit [id] (gives a trap phone, SIM, charger and sting phone) and /drugselling heat.
  • Config.ModelSwaps replaces any model your game build doesn't have.
  • Server exports for settings, heat, phone lookups and evidence reports — see docs/EXPORTS.md.
  • Config.OnDrugSold and the oxide-drugselling:drugSold event now fire for every kind of sale, with a new method field (street, corner, phone, drop, bulk).
  • A "Paid $X for N x item" notification after every paid sale.

Changed

  • BREAKING: oxmysql is now required, and so is o-link 1.9.1 or newer.
  • BREAKING: settings now live in the database. The config files fill it on first start; after that, change settings with /drugselling settings. Config.Drugs stays file-only.
  • BREAKING: sale money now goes to your framework's dirty money by default (Config.DirtyMoney.mode = 'auto': marked bills on QBCore, the black_money item on QBX, the black_money account on ESX).
  • New Config.Selling.onDutyOnly (on by default): only on-duty officers count toward minPoliceOnline and receive alerts.
  • Restyled sell panel with keyboard controls, price steps around the fair price, stock counts, and a robbery result screen.
  • Buyer cooldowns now apply per buyer, with a new "Try someone else" message.
  • The negotiation accept chance, counter-offer lifetime and robber's weapon are now settings (negotiateAcceptChance, counterExpiry, robberyWeapon).

Fixed

  • Police alerts, buyer cooldowns, level requirements and robbery rolls can no longer be skipped with a modified game client.
  • A sale can no longer be priced against a better-paying buyer standing nearby, or re-offered to the same buyer for a better roll.
  • A modified client can no longer use sale animations to freeze or arm other players' entities.
  • Drugs are returned if the payout fails, for example when the inventory is too full.
  • Refunded items keep their strain and quality details.
  • Robberies now report what was actually taken.

Documentation

  • New docs/ADMIN.md (commands and settings menu) and docs/EVIDENCE_BRIDGE_DEV.md (connecting another MDT). Every other doc was rewritten for 2.0.0.

Migration Guide

  1. Install oxmysql and update o-link to 1.9.1 or newer. In server.cfg, start both before oxide-drugselling.
  2. Database tables are created automatically on first start. To create them by hand instead, run sql/install.sql.
  3. Register the new items trap_phone, trap_sim, trap_charger and sting_phone in your inventory. ox_inventory users can paste items/ox_inventory_items.lua, and the icons are in items/. See docs/INSTALLATION.md.
  4. Replace your 1.2.0 config files with the new ones and copy your own edits across before the first start. After that, the files only fill in settings the database doesn't have yet — use /drugselling settings.
  5. To keep paying sales in clean cash, set Config.DirtyMoney to mode = 'account', account = 'cash' before the first start.
  6. If your police have no duty toggle and you use minPoliceOnline, turn off onDutyOnly, or no officers will count.
  7. If you translated locales/en.json, start again from the new file. Many keys were added and a few were removed.

Oxide Pillsv1.0.0

Major

Added

  • First release of oxide-pills.
  • Runs on QBCore, QBX and ESX through o-link. ESX needs ox_inventory.
  • A full pill lab: mill, blend, press, sort and pack, each worked by hand at its own station.
  • 17 placeable stations: a lab workbench with 2 machine slots, 11 benchtop machines and 5 floor machines, all kept through restarts.
  • A hidden quality profile for every batch (potency, integrity, imprint, finish and consistency) that only a light box reading reveals.
  • A mortar and pestle ground by circling the mouse, and a blade grinder you pulse and knock clean.
  • A stand mixer loaded by hand: pour each ingredient for as long as you want it in the bowl.
  • A hand-cranked press where your pace is the skill, and an electric press with four speeds.
  • Die residue that builds as you press and is scrubbed off with a brush, and die wear that follows the die set.
  • Tray sorting: throw out crumbled, capped, chipped, picked, blurred and patchy tablets before the batch is counted.
  • Five product lines: Party Pills, NOVA Bars, VELA Blues, AXIA Percs and AURA Capsules.
  • Counterfeit VELA Blues and AXIA Percs, judged on how well they pass for the real thing.
  • A die engraver for cutting tooling to a product line and stamping its face.
  • Player brands: a unique name and one of 8 symbols pressed onto party pills, with a reputation that sales build and overdoses and seizures damage.
  • Hand-filled baggies, labelled pharmacy bottles and sealed blister cards, each protecting pills differently.
  • Granulating sieve, drum tumbler, ball mill, pan coater and hardness tester for better batches.
  • A capsule filling board for AURA Capsules: spread, tamp and cap 30 shells at a time.
  • A rotary press worked by a crew of up to three (feeder, sorter and packer), or by one player alone.
  • Dust from milling and pressing, with a wearable dust mask and a placeable dust collector.
  • Mystery powder that only a reagent test kit can identify, and that can turn out to be fentanyl.
  • Usable pills with effects per product line, and overdoses from batches that are too strong or from taking too many.
  • Pills that break in crashes, falls and over time; broken tablets can be ground back down.
  • Street sales through oxide-drugselling 2.0.0 or newer, priced by four buyer types who each judge a batch differently.
  • A pharma delivery run that pays per blister card and launders dirty money at each drop.
  • Pill ID lookup for brands and counterfeit imprints, with police evidence logging and an optional press serial trail.
  • 10-level progression that unlocks stations and product lines, shows more detailed readings as players climb, and adds two level-10 perks.
  • An in-character Pressing Manual item (pill_manual) covering the whole trade.
  • Single /pills command: /pills stats and /pills pillid for players, and /pills settings, /pills kit, /pills setlevel and /pills traytest for admins.
  • Live settings editor (/pills settings): change settings in game with no restart, and draw placement zones in the world.
  • Blocked or allowed placement zones, and a per-item job and gang usage whitelist.
  • Optional police alerts for each production stage and delivery handoff, off by default.
  • Optional Pill ID tablet app with oxide-tablet, overdose conditions with oxide-medical, and territory bonuses with oxide-gangs.
  • Model replacements for older game builds (Config.ModelSwaps).
  • 59 inventory items with icons, and a ready-to-paste items/ox_inventory_items.lua.
  • Database tables are created automatically at boot; sql/install.sql ships for manual installs.
  • English locale (locales/en.json) covering every notification, prompt and menu.

Oxide Weatherv1.0.0

Major
  • Initial public release of oxide-weather.
  • One server-synced clock and sky for every player, run from the game clock or mirrored from real time (/weather clock).
  • Day and night that pass at different speeds (/weather timescale <day> [night]), a clock you can freeze (/weather freeze), and per-region time offsets.
  • Fifteen weather types with weighted transitions and a forecast queue you can read ahead of time and edit from the admin panel.
  • Weather regions: six starting zones (Los Santos, Sandy Shores, Paleto Bay, Mount Chiliad, Fort Zancudo, Cayo Perico) with five climate profiles and smooth blending where regions meet.
  • In-game zone editor (/weather zones) to draw, edit and delete regions on the map without touching files.
  • Seasons that advance with the game calendar, follow the real-world month, or stay where you put them, each with its own temperature and snow profile.
  • Christmas and Halloween presets toggled with one command (/weather christmas, /weather halloween).
  • Temperature per location shaped by altitude, coast, time of day and weather, shown in °C or °F.
  • Snow that builds up during snowfall and melts as it warms, with ground cover, vehicle tracks and footprints.
  • Moving storm fronts that cross the map on a heading, up to eight at once, spawned automatically or by hand (/weather front).
  • Lightning near the player, flickering lights, and region-wide power cuts with scheduled outages (/weather blackout).
  • Fog and storm visibility effects that fade in and out and ease off at night and in snow.
  • Severe weather alerts at three levels (advisory, watch, warning) worked out from each region's forecast and any storm heading its way.
  • Weather app and home-screen widget for oxide-tablet with forecast, live radar and alerts pages, plus tablet notifications for new alerts.
  • Weazel News weather report export for news roleplay.
  • Live admin panel (/weather) covering conditions, forecast, radar, power, scenes and fronts in one window.
  • Real-world weather mode (/weather realworld) that mirrors a real city's weather, temperature, wind and hourly forecast through Open-Meteo, with no API key needed and an option to follow the city's local time.
  • Chat commands for the essentials: /weather set, /weather time, /weather dynamic, /weather forecast, /weather season and /weather inspect.
  • Scene locks that freeze weather, time, wind, blackout and snow for one player or for everyone (/weather lock, /weather unlock).
  • Shelter and exposure queries for other resources, worked out from drawn covered areas, an upward probe, interiors and vehicles.
  • Road conditions on a 500 m grid: wetness after rain and ice below freezing, drying and thawing over time.
  • Live settings editor (/weather settings) that changes settings in game and saves them to the database.
  • Everything survives a restart: clock, weather, forecasts, regions, season, snow cover, storms and outages are saved to oxide_weather_state.
  • Database tables are created automatically at first start; sql/install.sql ships for manual installs.
  • Runs on QBCore, QBX and ESX through o-link, with the weather bridge namespace plus 62 server and 28 client exports for other scripts.
  • English locale (locales/en.json) covering every notification, command, panel and app screen.

Oxide Tabletv1.0.0

Major
  • Initial public release of oxide-tablet.
  • A tablet players carry in their inventory, opened with the item, a keybind or /tablet open; the item requirement can be turned off.
  • Other resources put their screens on the tablet as apps, and those apps appear on their own once both resources are running.
  • Ships with its own App Store, Settings and Maps apps.
  • Every tablet is its own device: a 15-digit IMEI saved on the item, keeping its name, home screen, apps and settings when it changes hands.
  • Battery that drains while the tablet is out and recharges while it is put away, at rates you set; a flat tablet will not open until it has charged.
  • Held tablet prop and animation other players can see, and the tablet puts itself away on death, on going down, or when the item leaves the player's inventory.
  • More than one item can open the tablet, and an item can be locked to a fixed list of apps for a work-issued device.
  • Home screen with up to 5 pages and a dock of up to 6 apps, drag-and-drop editing, an App Library for hidden apps, and per-tablet renaming.
  • Calendar and ID widgets in small and medium sizes, plus widgets other resources add in small, medium and large.
  • Eight built-in wallpapers, plus your own images placed in the wallpapers/ folder.
  • App Store where players install the apps they qualify for, with a preinstall list, or turned off so every available app installs itself.
  • Apps can be limited to certain jobs, gangs or on-duty players by the resource that adds them.
  • Maps app with places you add, the blips players already have on their map, name and icon overrides, search, GPS waypoints and a drawn route.
  • Settings app for players: Do Not Disturb, banners, sound, volume, per-app mutes, larger text, bold text, reduced motion, renaming and resets.
  • Notifications with banners, a tray under the status bar, app badge counts and a notification sound you can replace.
  • Notification bubbles at the corner of the screen while the tablet is put away.
  • Live settings editor (/tablet settings) that changes settings in game and saves them to the database, most applying with no restart.
  • Admin commands to factory-reset a tablet by IMEI (/tablet wipe) and send test notifications (/tablet notify), plus /tablet device and /tablet resethome for players.
  • Layouts, installed apps and player settings are saved with the tablet, or with the character when no tablet item is involved, and survive a restart.
  • Database tables are created automatically at first start; sql/install.sql ships for manual installs.
  • Runs on QBCore, QBX and ESX through o-link 1.8.0 or newer, with the tablet bridge namespace plus 16 client and 10 server exports for other scripts.
  • Developer guide for building apps and widgets, including a host shim that puts an existing NUI page on the tablet.
  • English locale (locales/en.json) covering every notification, command and screen.

Oxide Gangsv1.0.0

Major

Added

  • First release of oxide-gangs.
  • Gang registry stored in your database, mirrored into QBCore and Qbox so existing scripts keep reading gangs normally. On ESX this becomes the gang system.
  • Gang creation requests: players fill in a form, staff approve or deny from the admin panel or from chat.
  • Owner-built request form — add, remove and reorder the questions players answer in /gangs settings.
  • Per-gang rank ladder with twelve permissions, editable by the gang's own bosses.
  • Gang dashboard (/gangs dashboard) with overview, roster, ranks, applications, treasury, garage, territory, wars, leaderboard and a boss-only activity log.
  • Staff admin panel (/gangs admin) to create, edit, fund and disband gangs, review requests, place bases, manage fleets, draw territories and force-end wars.
  • Recruiting by nearby in-person invite (/gangs accept) or by written application (/gangs apply).
  • Shared gang treasury with a full transaction history, rank-gated deposits and withdrawals, and optional delegation to a banking account.
  • Gang bases with a member-only map blip, an inventory stash and a garage point with multiple vehicle spawn bays.
  • Gang vehicle fleet that keeps mods, fuel and damage between sessions and can be returned by any member with garage rights.
  • Territory system: 34 pre-drawn Los Santos districts, influence earned from drug sales, base use and presence, hourly anti-farm caps, and decay that scales with how much turf a gang holds.
  • Contest windows measured in real hours, so turf never flips from one gunfight.
  • Member-only turf map painted onto the minimap and the pause map in each owning gang's color.
  • Gang wars with matched treasury stakes, validated kill scoring, king-of-the-hill capture points, ceasefires and a clock settle. Winner takes the pot.
  • Server-wide gang leaderboard ranking wins, turf held and total influence.
  • Optional police alerts for contested turf, takeovers, war starts and capture points.
  • Optional private radio channel per gang when oxide-radio is installed.
  • Optional Gang Intel tab in the oxide-police MDT showing gangs, turf and wars.
  • Optional gang standing in oxide-blackmarket — selling on your own turf pays extra reputation.
  • Territory economy modifiers that tune yield, growth, sale price and buyer density for the Oxide drug resources.
  • Live settings editor (/gangs settings) — change nearly every setting in game, no restart and no file editing.
  • Database tables are created automatically at boot; sql/install.sql ships for manual installs.
  • English locale (locales/en.json) covering every notification, command, panel and menu.

Oxide Chatv2.0.0

Major

Added

  • Custom chat channels: build your own slash-command channels (job radios, staff chat, gang chat) with per-channel styling, aliases, scope (members / global / broadcast / proximity), job or admin restriction, minimum grade, on-duty requirement, and cooldown — all in Config.ChatChannels or live in-game
  • In-game server settings editor (/chat settings, admin only): configuration is now edited live and saved to the database, no file edits or restarts needed after setup
  • Friends & block list: /friend add [id] / /friend remove [id] plus a friends panel in the chat UI with requests, online status, and blocking; blocking stops private messages in both directions
  • Inline images & GIFs: pasted image links embed in any message type (allowed hosts set via Config.ImageHosts), plus a Discord-style GIF picker powered by Giphy (add set oxide:chat:giphy_key your-key to server.cfg); images have their own cooldown and optional job/admin restriction
  • @mentions: type @ to autocomplete online player names; mentions are highlighted, including your own name when someone mentions you
  • Chat category tabs above the message list (All / Local / Global / Job / PMs by default), fully configurable via Config.Categories; players can hide the tab bar
  • Automatic announcements: a rotating list of server-wide broadcasts on a timer (Config.AutoBroadcasts), in order or random, skipped while the server is empty, toggled live with /chat autobroadcast on|off
  • Announcements support an optional heading with Title | Body syntax
  • 10 chat style presets (Bubbles, Discord, Timeline, Masonry, Compact, Cards, Float, Panel, Retro, Glass) plus new appearance options: chat height, 12/24-hour timestamps, message density, and a private-message color
  • Integration API for other resources: read or change any chat setting at runtime (GetSetting / SetSetting) and query or manage the friends & block list from your own scripts — see docs/EXPORTS.md

Changed

  • BREAKING: new required dependencies o-link and oxmysql — update your server.cfg start order (see docs/INSTALLATION.md)
  • BREAKING: Config.ChatTypes was replaced by Config.ChatChannels, one list that styles the built-in message types and defines custom channels; the default job radios (/lspd, /medic, /mechanic) are now ordinary channel rows you can edit, remove, or copy
  • Admin commands consolidated under /chat: /announce → /chat announce, /clearchat → /chat clear, /testchat → /chat test; player customization opens with /chat customize
  • Admin commands now use the standard framework admin check, so stock QBCore/QBX/ESX admin setups work without extra ACE configuration
  • Chat position and size are now per-player settings (the fixed Config.UI position/width/height options were removed)

Fixed

  • Sending while on cooldown now tells you how long to wait instead of silently dropping the message
  • Command suggestions correctly mark optional vs required arguments and refresh reliably when other resources start

Migration Guide

  1. In server.cfg, make sure oxmysql and o-link start before oxide-chat.
  2. Database tables are created automatically on first start. To import them manually instead, run sql/install.sql (fresh install) or sql/migrations/0001_friends_and_blocks.sql + sql/migrations/0002_settings.sql (existing install).
  3. If you had customized Config.ChatTypes, re-apply those styles as rows in Config.ChatChannels — or just edit them in-game via /chat settings.
  4. After the first start, settings live in the database; change them with /chat settings in-game. config/main.lua only supplies defaults for keys the database doesn't have yet.
  5. Players who used a removed style preset are automatically switched to the new Bubbles preset.

Oxide EMSv1.0.0

Major

First release.

Added

  • EMS department builder. Departments, facilities, grades, garages, uniforms, radio channels and the supply shop are all created in-game through /ems admin and stored in the database — there is no list of hospitals to edit in a config file. A department's internal name is the framework job name, so hiring a medic sets their job the way your framework expects.
  • Two facility types. Hospitals handle emergencies: beds, hospital respawn, x-ray machines and operating tables. Doctor's offices handle walk-ins: a reception bell that pages on-duty staff, plus lockers, a supply shop and clock-in. Both types share clock-in, personal lockers, the management desk and the supply shop.
  • Interaction points are placed in-world. Every clock-in spot, bed, locker, management desk, supply counter, reception desk, x-ray machine and operating table is placed by walking to it and picking the spot. Beds show a preview patient lying in place, and x-ray screens and surgery monitors show a live preview quad you can resize with the arrow keys before you save.
  • Field care pipeline. Examine a patient to open a diagnosis overlay with a scripted camera, seven clickable body regions and the patient's vitals. Badly hurt patients cannot be revived on the street — they have to be stabilized, transported and revived at a hospital bed.
  • Stabilize, then transport. Stabilizing pauses the patient's bleedout timer. Bleeding wounds must be treated before a stabilization takes. A stabilized patient can be loaded into an ambulance seat or wheeled on the stretcher, and can climb out of a stopped vehicle themselves if their medic disconnects.
  • Stretcher. Take the stretcher out of the back of an ambulance, drag it to the patient, load them, wheel them back and load the stretcher with the patient still on it.
  • Treatment as a surgery minigame. Every treatment — in the field, at the clinic and on the operating table — runs a timed keypress sequence. The result is graded: a clean run cures the condition, a middling run cures it but leaves a complication, and a bad run fails and can make things worse. The sequence and the score are both generated and re-checked on the server.
  • X-ray machines. Place a machine, position a patient on it, run a scan and the result appears on an in-world screen for everyone standing nearby — a skeleton highlight plus a findings list of fractures and retained bullets.
  • Operating tables with a live monitor. Place a patient on the table and the in-world monitor shows their name, blood type, condition list and an ECG driven by their real pulse — flatlining when it should.
  • Hospital beds. Beds heal to full over a configurable time. A medic can check a downed patient in as the revive; with nobody on duty, patients (or a bystander) can check them in themselves, subject to a fee and a stabilization requirement.
  • Hospital respawn. Place a respawn point at any hospital and players who give up and respawn wake up at the nearest one, behind a fade-out cutscene. Works on every framework.
  • Duty, payroll and treasury. Clock in at a facility, draw a salary on an interval, and let a department boss run the roster, treasury, back pay and fleet from a desktop-style management panel. Salaries can come out of the department treasury or straight from the framework.
  • Department fleet. Vehicles are individual, persistent rows. Checked-out vehicles survive a server restart, keep their fuel and damage, and re-link to the medic when they clock back in. Bosses buy new vehicles and recover wrecks from the treasury.
  • Uniforms. Bosses and admins build uniforms in-game from what they are currently wearing, choosing exactly which clothing slots the uniform owns. Everything outside those slots stays the medic's own clothes, and uniforms revert automatically on clock-out.
  • Supply shop. A department-scoped catalog. Rows with no rank requirement are public self-service; rows with one require an on-duty medic at that rank or above. Sales go to the department treasury.
  • Dispatch alerts. Automatic alerts when a player goes down or dies, a distress keybind (G) for downed players, /911e for anyone, a clinic reception page and a bed-request alert when a patient tries to check in while EMS is staffed.
  • Radio channels. Departments own numbered channels with a rank requirement and an optional duty requirement. Medics are tuned to their department's default channel automatically at clock-in.
  • Medical bag. A usable kit item that unpacks into field supplies.
  • Station markers. Hold H to see in-world cards pointing at the nearest interaction points that are useful to you — reception desks if you are a civilian, clock-in points if you are a medic.
  • In-game settings editor. /ems settings opens a searchable editor for every setting in the resource. Changes are stored in the database and take effect without a restart.
  • Runs on QBCore, ESX and Qbox. oxide-ems replaces qb-ambulancejob, esx_ambulancejob and qbx_ambulancejob, and keeps the surfaces third-party resources depend on working: the hospital:* events radial menus and police "officer down" relays use, the stock medical items, the stock admin commands, and the QBCore doctor-count callback. On Qbox, qbx_medical stays in charge of the death loop; on QBCore and ESX, oxide-ems runs it.
  • Multi-department support. With AllowMultiDepartment on, one character can be enrolled in several EMS departments at once, each with its own rank and badge, following whichever job they currently have active. Mirrors into g-multijob when it is installed.

Notes

  • Run sql/install.sql before first start.
  • Register the four EMS items (medical_bag, medical_bandage, medical_splint, medical_surgical_kit) in your inventory and copy the images from itemimages/. See Installation.
  • The stretcher prop is streamed from the resource, which means a full server restart after installing — restart oxide-ems is not enough for the prop to load.
  • Disable the ambulance job that shipped with your framework before starting oxide-ems.

Oxide Medicalv1.0.0

Major

First release.

Added

  • A persistent medical record per character. Blood type, a DNA hash, an immune stat and the full list of active injuries and illnesses, stored in the database and reloaded on login. Untreated conditions survive a disconnect and a server restart.
  • Four kinds of condition. Fractures (13 types across the body), wounds (gunshot, laceration, retained bullet), diseases (influenza, wound infection, pneumonia, hepatitis) and sicknesses (nausea, fever, dizziness, dehydration, food poisoning, cardiac arrest) — each with its own severity, effects, cure and catalog entry you can edit.
  • Injuries come from what actually hit you. The game's own damage events are classified by weapon and by the bone that was struck: a shotgun to the leg is a different injury from a knife to the arm. Repeated hits on the same spot make the existing injury worse rather than stacking up duplicates, and bullet wounds roll for a retained bullet that only a surgeon can take out.
  • Injuries you can feel. Broken legs make you limp and slow you down, broken arms make your aim drift, bleeding wounds leave blood on the ground behind you, and illnesses make you cough, retch and sway. Everything is driven off the condition list, so it clears the moment you are treated.
  • A vitals simulation. Pulse, blood pressure and blood oxygen are derived every couple of seconds from the injuries a player is carrying and a blood-volume model that drains while they bleed and recovers while they are on their feet. Severe blood loss collapses the pulse; a collapsed pulse becomes cardiac arrest, which drops the player and can only be brought back by a medic.
  • Diseases that get worse over time. Each disease moves through timed stages, growing in severity and picking up new symptoms as it goes. Curing one grants a temporary immunity window so a player isn't reinfected the moment they recover.
  • Diseases that spread. Contagious diseases pass to players standing nearby, with masks on either side cutting the chance and a healthy immune system resisting it.
  • Ways to get ill without being shot. Standing out in the rain can give you a cold; a dirty wound can turn septic; going hungry or staying stressed erodes your immunity until something takes hold; low thirst brings on dehydration that clears when you drink.
  • Vague symptom notifications. Players are told something is wrong, never what — "your chest aches with every breath", not "you have fractured ribs". Working out the diagnosis is the medic's job. Every line is in a config file you can rewrite.
  • Self-treatment for the simple things. Bandages stop bleeding, splints set an arm, antibiotics and antivirals cure illnesses. The serious injuries — a broken spine, a cracked skull, a retained bullet, pneumonia — are marked medic-only and refuse to be self-treated, which is what gives a hospital something to do.
  • Damage over time from untreated injuries. Severe conditions drain health on a tick until they are treated, applied so that reaching zero routes through your server's normal death handling.
  • Godmode-aware. The whole system suspends for a player in godmode automatically, with no dependency on the admin resource that sets it, and resumes the moment it is turned off. Any resource can suspend it deliberately too.
  • A full admin toolkit under /med: inspect a record, list conditions, add, treat, remove and clear them, read and set the immune stat, inspect and manipulate vitals, list catalog types, fire a notification, hand out a cure, and run eleven end-to-end scenario simulations.
  • A built-in self-test. /med test exercises the whole export surface against a live player — records, conditions, expiry, treatment, offline reads, vitals and cardiac arrest — and reports pass/fail per check.
  • A complete integration surface for other resources: fifteen server exports, two client exports, an o-link medical namespace, a replicated statebag view of every player's condition, a separate vitals statebag, and events for every condition change.
  • Blood evidence handoff. Bleeding from falls, fire, blades and animal attacks emits an event carrying the character's DNA, which a police resource can turn into forensic evidence. Firearm blood is deliberately left alone so it isn't dropped twice.
  • Runs on QBCore, ESX and Qbox through o-link, with no direct calls to any framework.

Notes

  • Run sql/install.sql before first start.
  • Register the three cure items (antacid, antibiotics, antiviral) in your inventory, plus medical_bandage and medical_splint if you are not already installing oxide-ems. See Installation.
  • oxide-medical has no configuration UI and no database-backed settings — everything is tuned in shared/config.lua and shared/config/, and changes need a resource restart.

Oxide Radiov1.0.0

Major

Added

  • One handheld radio for the whole server, built on top of pma-voice: a single radio item (Config.Item, Config.RequireItem) opens the radio for every player, with access to restricted channels decided by job rather than by a special item
  • Open (civilian) frequencies: any whole number in the Config.MinFrequency–Config.MaxFrequency range (1–9999 by default) is tunable by anyone holding a radio
  • Restricted job channels (Config.JobChannels): frequencies reserved for specific jobs, gated by case-sensitive job name, minimum grade (minRank), and an optional on-duty requirement (dutyOnly); restricted channels may sit on any frequency, not just the open dial range
  • Runtime channel registration for other resources through the RegisterChannel / UnregisterChannel exports (used by oxide-police and oxide-ems): owner-scoped, shadow any config channel on the same frequency, and released automatically when the owning resource stops
  • Server-authoritative access control, enforced at the pma-voice layer so a modded client cannot force itself onto a restricted or encrypted channel; access is re-checked on job change, duty change, and on a periodic sweep (Config.RevalidateInterval), removing players who lose access
  • Channel encryption: any open frequency can be password-locked by a player tuned to it; passwords are 6–32 characters, stored salted and hashed server-side, and never sent to other clients. Five wrong attempts triggers a five-minute lockout tracked per character that survives reconnect. The lock creator or a server admin can change or remove the lock
  • TeamSpeak-style channel browser inside the panel showing every active channel and its members, scoped to the viewer — restricted channels reveal members only to qualifying jobs, encrypted channels hide members until unlocked
  • On-screen roster overlay of who is on your current channel, with Discord-style live speaking indicators, badge tags, and a downed indicator; toggled with a rebindable keybind (Config.OverlayKey, default U), shown only when Config.ShowRoster is on, and repositionable from the panel
  • Per-character radio display names (stored in radio_prefs), shown on rosters in place of the character name
  • Per-client radio preferences: mic-click sound (Default / On / Off, driving pma-voice's own setting), starred favorite frequencies, and remembered encryption passwords
  • Roster tags for integrators via the SetMemberTag export (oxide-police feeds officer badge numbers) and a downed flag via the SetRadioDead export or automatically through o-link death events — no hard dependency on any death or police resource
  • Automatic integration with oxide-police / oxide-ems: when installed, their department channels register themselves and officers auto-join their default channel at clock-on with their badge on the roster
  • Admin commands under /radio: /radio settings opens the live settings menu, /radio unlock <frequency> force-removes encryption from a frequency
  • Live database-backed configuration through /radio settings — after the first start, settings are edited in-game with no file edits or restarts; the transmit and hold animations remain config-only in shared/config.lua
  • Server exports for integrators: RegisterChannel, UnregisterChannel, GetChannels, GetPlayerChannel, JoinChannel, LeaveChannel, SetRadioDead, SetMemberTag, GetSetting, SetSetting
  • Framework-agnostic through o-link (QBCore / QBX / ESX / Oxide Core) and localizable via locales/*.json
  • Graceful behavior without pma-voice: the radio UI still works, but no voice is transmitted and players see a "voice unavailable" banner; voice availability also respects the voice_enableRadios convar

Oxide Shopsv1.0.0

Major
  • Initial public release of oxide-shops.
  • 61 ready-to-use shops placed at familiar GTA locations out of the box: 22 general stores (24/7 supermarkets, LTD Gasoline, Rob's Liquor, hardware stores), 11 Ammunation gun stores, 15 clothing stores, 7 barbershops, 4 tattoo parlors, 1 pawn shop, and 1 auction house.
  • Retail stores where players buy from a stocked catalog of 28 everyday items (food, drink, tools, medical supplies, equipment), with a configurable sales tax on every purchase (Config.TaxRate, default 5%).
  • Weapon stores stocking 40 firearms, melee weapons, throwables, and body armor, shown with a rotating 3D weapon preview and on-screen weapon stats. Players can register their unregistered firearms for a flat fee (Config.WeaponRegistrationFee, default $500).
  • Pawn shops that buy players' items at dynamic prices which drop as more of an item is sold and recover over time.
  • Barbershops with a seated styling scene, charging per category the customer actually changes: haircut, hair color, facial hair, eyebrows, and eye color.
  • Tattoo parlors with a seated application scene and 10 GTA tattoo collections, with separate apply and removal pricing.
  • Mask shops and clothing stores; clothing pricing is set per slot across 14 outfit and accessory slots.
  • Auction house where players list items or vehicles for timed auctions of 1, 6, 12, or 24 hours, with bidding, instant buyouts, and listing/completion fees. Each player can keep up to 10 active listings. Winners and sellers who are offline when an auction ends receive their items, refunds, and payouts automatically on their next login.
  • Player-owned shops: players can buy a shop and run it as a business — own up to 3 shops (Config.MaxShopsPerPlayer), set their own retail prices, keep a shop balance, deposit and withdraw funds, and restock inventory from a wholesale supplier for profit.
  • Automatic restocking that tops a player-owned store back up to a per-item target from wholesale on a timer (Config.AutoRestock), drawing down the shop's balance until it runs out.
  • Shop resale between players (Config.AllowResale): an owner can list their shop for sale from the management screen; the next player to buy it at the shop takes over ownership, and the seller is paid the sale price minus a fee (Config.ResaleFeePercent), including a payout that waits for them if they are offline.
  • Player-owned service shops (barber, tattoo, mask, clothing) consume supplies as they serve customers — hair_product, tattoo_ink, mask_blank, and fabric — and refuse service when empty until the owner restocks from wholesale. Static (server-run) shops are unlimited.
  • Per-shop access control: restrict any shop to a specific job, a minimum job rank, and on-duty players only, and optionally hide its map blip.
  • /shop admin opens an admin panel to create shops from a template picker, edit and delete them, reclaim a player-owned shop, adjust balances, change prices and stock, place shop peds, blips, and barber/tattoo chairs in the world, and set the camera framing for each tattoo.
  • /shop settings opens a live in-game settings editor. Most configuration is stored in the database and can be changed on the fly without editing files or restarting the server.
  • Works on QBCore, ESX, and QBX (and custom frameworks) through the o-link bridge, with no framework-specific setup.
  • Full localization: every notification and menu label is loaded from locales/en.json — copy it to another language code and translate to localize the resource.
  • Ships its database schema in sql/install.sql (shops, inventory, transaction history, tattoos, and auction tables), created automatically on first start.

Oxide Cocainev1.0.0

Major

Added

  • Full cocaine production pipeline: harvest, stomp, soak, cook, bag, press
  • Wild coca bush harvesting across configurable polygon zones with per-bush yield and respawn timers
  • Free-walking pool stomp minigame with alkali and water pours and a four-stage leaf prop
  • Passive soak extractor with restart-safe timers persisted to the database
  • Interactive stove cook with a 6-key cycling temperature minigame and optimal-range purity scoring
  • Overheat-explosion and cold-ruin failure states on the cook
  • Crack as a second cook ("stepping on it") from powder cocaine
  • Cutting agents on the crack cook: every batch takes one or two cuts that stretch it into more product at the cost of purity
  • Eight configurable, level-gated cutting agents (baking soda, cornstarch, baby laxative, creatine, caffeine powder, benzocaine, lidocaine, levamisole)
  • Live in-world preview of the selected cut floating above the stove while picking
  • 5 purity grades (Pure, High, Mid, Low, Dirty) carried through every stage via item metadata
  • Spoon-and-baggy bagging minigame with per-grade and mixed-grade (lowest-grade) bagging
  • Brick press for compressing bulk cocaine into pressed kilos, gated to level 5
  • Usable bagged cocaine and crack with sniff/smoke styles, purity-scaled stimulant effects, stress relief, and comedown
  • 10-level progression with XP rewards for all production activities; leveling reduces the cook purity penalty and unlocks the brick press
  • In-game illustrated cocaine manual that teaches the full system
  • Four placeable stations (Coca Pool, Coca Extractor, Cook Table, Brick Press) with equipment ownership enforcement
  • Safe-zone polygon system blocking equipment placement, and vehicle-use restriction
  • Server exports: GetPlayerLevel, GetPlayerProgression, AddXP, AddSold
  • Admin commands /cokekit and /setcokelvl, and the player command /cokestats
  • Rate limiting on all server callbacks and events, session locking, and routing-bucket support
  • Shared drugs_progression and drug_equipment tables compatible with other Oxide drug resources
  • Custom streamed props for the kiddie pool, its leaf stages, and the seven cutting agents
  • Full localization support via locales/en.json
  • QBCore, QBX, and ESX support through o-link

Oxide Dealershipsv1.0.0

Major

Added

  • NPC and player-owned dealerships. Four NPC dealerships (cars, boats, aircraft, trucks) are ready on install, and players can buy and run for-sale lots themselves.
  • 3D browsing catalog. Customers browse the lineup at the greeter, rotate each vehicle in a cinematic preview, and try preset paint colors before buying.
  • Test drives. Players take a vehicle for a timed spin and it returns automatically when the timer ends or they step out.
  • Flexible payment methods. Buy with cash, bank, or any custom currency a lot chooses to accept, including inventory items such as a VIP token.
  • In-house financing. Put money down and pay off the rest over time, with payments pulled automatically from the bank, missed-payment tracking, and repossession after repeated misses.
  • My Contracts panel. /myloans lets players see active loans, make a payment, or pay one off in full.
  • Vehicle trade-ins. Customers hand over a vehicle for instant value, taken as cash or applied toward a new purchase.
  • Used inventory. Repossessed and traded vehicles re-list on the used lot keeping their real plate.
  • Management tablet. Owners and staff open a windowed dashboard (/managedealership) at the lot to run the business in-game.
  • Stock and pricing. Owners list models, order stock at wholesale, and set their own retail prices.
  • Employees and commission. Owners hire managers and salespeople who earn a commission cut on sales they close while on the lot.
  • In-person contract sales. A salesperson picks a vehicle and a nearby customer, sets the terms, and sends a contract the buyer signs.
  • Promo codes. Admins create global or shop-scoped discount codes; owners can optionally run their own.
  • Showroom displays. Display vehicles can slowly rotate on a turntable, and a hold-key card shows a car's stats, price, and finance teaser.
  • Job-restricted lots. Limit a dealership's self-serve greeter to specific jobs.
  • In-character emails. Receipts, finance agreements, employment notices, and financing reminders arrive as phone emails when a phone resource is connected.
  • Admin dashboard and commands. A full in-game admin panel (/dealership admin) plus 19 /dealership commands create and manage every dealership without editing config files.
  • Optional credit-based financing. With oxide-banking connected, interest rates follow a player's credit score and a missed-payment invoice is sent on default.
  • IsCatalogOpen client export. Other resources (such as a custom HUD) can check whether a player has the browsing catalog open, for example to hide the HUD while browsing.

Oxide Multicharv2.0.0

Major

Added

  • 3D scene-based character selection: players hover and click their characters in a rendered location instead of picking from a list.
  • Floating info card above each character showing their name, cash, bank, and job.
  • Multiple selection scenes (Apartment, Garage, Pier, Sinner Street), selectable in-screen and remembered between sessions.
  • Built-in appearance editor for new characters (face, hair, makeup, eyes, clothing, accessories, and tattoos) on supported clothing resources. Configurable with Config.CustomCreator.
  • Sky-view spawn picker: after choosing a character, the camera flies over the map and players click a marker to choose where to spawn. Configurable with Config.SpawnSelector.
  • Spawn at your last logged-off location, or at any property your character owns.
  • Free starter apartment for new characters on supported housing systems. Configurable with Config.StarterApartment.
  • Extra character slots for VIPs, donators, or staff by permission or player ID, on top of the base slot count. Configurable with Config.SlotGrants.
  • Option to pause or whitelist character creation. Configurable with Config.AllowCreation and Config.CreationAce.
  • Name rules: block duplicate names on the same account and reserve specific words. Configurable with Config.NameRules.
  • Scene display modes: keep each player's last scene, pick a random one, or always use the default. Configurable with Config.Scenes.mode.
  • Server announcements shown on the selection screen. Configurable with Config.Announcements.
  • Player-selectable accent color for the menu, saved per machine.
  • /logout command to return to character selection, configurable with Config.Logout.

Changed

  • The resource is now fully framework-agnostic through o-link, so the same build works on QBCore, ESX, and QBX without code changes.

Oxide Baitcarv1.0.0

Major

Added

  • Initial public release of oxide-baitcar.
  • Chip deployment flow: baitcar_chip inventory item, server-side validation that the officer is physically inside the target vehicle, automobile-only check, plate-uniqueness check, per-officer deployment cap (Config.MaxDeploymentsPerOfficer, default 3), and Config.InstallDurationMs cancellable progress bar with the mini@repair / fixing_a_ped animation.
  • Two mutually-exclusive operating modes selected by Config.UseRemoteController:
    • Remote controller (default): the baitcar_remote inventory item is the only entry point; /baitcar is not registered and the radial submenu is skipped.
    • Dashboard: /baitcar opens the Vue dashboard and the o-link radial provider gets a Bait Car root entry with Open Manager and Watch Nearest Dashcam actions.
  • Vue 3 / Vite frontend serving both the dashboard and the remote controller views, plus a dashcam HUD overlay and the recorder bridge.
  • Live dashcam viewer with a layered camera profile system (Config.Dashcam.ByModel > Config.Dashcam.ByClass > Config.Dashcam.Default), per-frame heading tracking, optional timecycle modifier for a CCTV look, and configurable exit keys.
  • /baitcardashcamtune admin command gated on the command ACE: spawns a chosen vehicle, attaches the live dashcam, exposes WASD / QE / RF / arrow-key / scroll bindings (with Shift for fine mode), and copies a paste-ready Config.Dashcam.<slot>.<key> Lua snippet to the clipboard on commit.
  • Remote actions, every one of them server-authoritative, statebag-synced, and audited: door lock / unlock, engine kill / restore, four steering modes (off / lock / left / right, using SetVehicleSteerBias), speed limiter at Config.SpeedLimitMph, headlight strobe at Config.StrobeIntervalMs cadence, vehicle alarm with auto-renewal across GTA's natural alarm expiry, and one-shot horn pulses driven by a nonce-bearing oxide:baitcar:horn statebag scoped to entity-aware clients.
  • Drive-off trigger detection: configurable speed (Config.TriggerSpeedMps) and duration (Config.TriggerDurationMs) thresholds, anti-spoof check that the source is the actual driver, LEO immunity, one-shot per deployment, optional Config.FakeWantedLevel applied to the suspect, and Config.Dispatch payload forwarded to olink.dispatch.CreateAlert.
  • Entry dispatch alert (Config.NotifyOfficerOnEntry + Config.EntryDispatch): broadcasts an olink.dispatch.CreateAlert payload to every responder in the configured job list the first time a non-LEO sits in the driver seat, with a per-plate 30-second rate-limit window. Lower-priority defaults than the trigger alert (10-66 vs 10-16) since the suspect may still walk away. Routes through Config.DispatchJobs like the trigger alert, so server-wide responders see entries — not just the deploying officer.
  • Civilian counterplay: Config.RemovalToolItem (default screwdriver) is registered as a usable inventory item. Used outside a vehicle it silently no-ops; used inside any seat of any vehicle it runs a cancellable Config.RemovalDurationMs progress bar and a Config.RemovalSuccessChance roll. The server re-verifies the source is seated in the vehicle before processing (trust boundary against modded clients). The same ambiguous "found nothing" message fires for non-bait vehicles, failed rolls, not-in-vehicle rejects, and rate-limited calls so the item can't be used as a bait-car detector.
  • Dashcam clip recording integrated with oxide-police: F8 hotkey (Config.Recording.hotkey) while the dashcam is open, configurable max duration / bitrate / thumbnail capture, Fivemanage or Discord upload selectable via Config.Recording.provider, and clips persisted into police_bodycam_recordings so they appear in the MDT Video Storage tab. Pipeline gated on GetResourceState('oxide-police') == 'started' and silently no-ops without oxide-police.
  • Per-event audit log table baitcar_events: 20 logged event types covering install, every state toggle, trigger, civilian removal, decommission, and horn pulse. Indexed on officer_charid, plate, and event_type. Coords and arbitrary extras stored as JSON columns.
  • Officer-only live event feed: every audit row is also broadcast as oxide:baitcar:client:event to clients whose job satisfies Config.AllowedJobs, powering the dashboard's real-time feed. Civilians never receive the broadcast.
  • Officer-side map blips on every active deployment, configurable via Config.OfficerBlip. Blips auto-attach to vehicles, refresh on job-change and deployment-change events, and clear on resource stop.
  • Per-source rate limiting (server/ratelimit.lua) on every civilian-facing endpoint: vehicle search (3 s window), entry notify (1.5 s), trigger (1.5 s), and the three video-upload callbacks (2–5 s windows).
  • Structured logging through olink.logger for every gameplay path, with distinct categories for install, lock, engine, steering, speed limit, strobe, alarm, horn, trigger, entry, search, dispatch, recording, dashcam, dashcam tuner, statebag, radial, security, and errors.
  • Hot-restart safe initialization: clients re-evaluate BaitCar.IsAllowed() immediately on resource start if the player is already loaded, instead of waiting for the next olink:client:playerReady (which only fires on initial character load).
  • o-link capability fallbacks: every namespace used (framework, character, job, notify, inventory, target, progressbar, menu, input, radial, dispatch, logger) is checked via olink.supports(...) before use; missing capabilities log a warning and degrade gracefully instead of crashing.

Oxide Dispatchv1.0.0

Major

Added

  • Initial release of oxide-dispatch.
  • Real-time job-targeted alert broadcast with optional on-duty filter (defers to oxide-police for LEO duty when present).
  • MySQL persistence (dispatch_alerts, dispatch_responders) and rehydration of active alerts on resource start.
  • Auto-expiry sweeper (Config.AutoExpire) that marks unresolved alerts as expired after a configurable TTL.
  • 22-code dispatch catalog in shared/config/alerts.lua (10-11 Traffic Stop through 10-99 Narcotics, plus panic, 911, 311).
  • Civilian 911/311 system with anonymous-by-default broadcasting, configurable category lists, radial menu, and /911 / /311 chat commands.
  • Two-way civilian replies via /replycaller <id> <message> and Civilian.SendReply with caller-side toast.
  • Panic / responder-needs-backup subsystem (Config.Panic) with F4 keybind, /panic command, off-duty broadcast bypass, auto-waypoint on receive, and per-group title/message strings.
  • Automatic crime detection (shooting, drive-by, melee, explosion, death, optional vehicle theft) with weapon hash blacklist and geographic zone blacklist (Config.Detection).
  • Per-group responder statuses (Config.ResponderStatuses) — distinct status lists for police (Code-4, 10-7, etc.), EMS (En Route, On Scene, Transporting), fire (Returning), and a _default list for custom groups.
  • Callsign management — radial Set Callsign action, /callsign <value> command, persisted to character metadata, surfaced on alerts and replies.
  • Dispatch Hub UI — full-screen overview with active alerts list, map view, and optional 30-day heatmap. Master-switched via Config.DispatchHub.RadialEnabled.
  • Heatmap subsystem (Config.Heatmap) — cached point density across 24h / 7d / 30d / all-time windows, capped at maxPoints.
  • Per-responder-group radial submenu (Officer / Paramedic / Firefighter) with status toggles, Set Callsign, and Panic items.
  • Accept-latest-alert keybind (G) — drops a GPS waypoint on the most recent alert and attaches the player as responding.
  • Server exports: CreateAlert, GetActiveAlerts, GetAlert, RespondToAlert, StopResponding, UpdateResponderStatus, CloseAlert, SetCallsign, SetOfficerStatus, GetOfficerStatus, TriggerPanic.
  • o-link dispatch namespace adapter (server + client) registered in o-link/modules/dispatch/oxide-dispatch/.
  • Legacy compatibility shims:
    • qb-core — listens for police:server:policeAlert (server) and optionally police:client:policeAlert (client) with keyword-to-code resolution and configurable rate limit.
    • es_extended — listens for esx_policejob:alert, esx_policejob:policeAlert, esx_outlawalert:policeNotify, esx_outlawalert:outlawNotify, and esx_phone:send (police number).
  • Admin commands: /testdispatch [code] [jobGroup] and /testdispatchmany [count] [jobGroup] [durationSec] (both ACE-gated as command.testdispatch*).
  • Optional oxide-police integration adapter (PoliceLookup) — publishes per-player oxide-dispatch:isLEO (boolean) and oxide-dispatch:responderGroup (string|nil) statebags, reads oxide-police's police_departments table for dynamic LEO job discovery, periodic refresh + per-player resync on playerReady / jobChanged. Falls back cleanly to Config.ResponderGroups.police.jobs when oxide-police is missing.
  • English locale (locales/en.json) covering popup, hub, civilian, responder, and panic strings.

Oxide Policev1.0.0

Major

Added

  • Initial public release of oxide-police.
  • Full department builder with runtime in-game admin panel (/padmin): departments, stations, grades, badges, salaries, jail and stripping rules, speedcam ignored jobs.
  • Per-station configuration: clock-in zone, armory, garage / fleet, evidence locker, helipad, mugshot booth, jail cells, holding cells, station bell, trash bin.
  • MDT with dashboard, case management, charges catalog, fines, warrants, BOLOs, criminal records, dispatch overlay, live officer locations, plate / person search.
  • Custody pipeline: cuffs (front/rear), escort, search, vehicle put-in / take-out, mugshot capture (with screenshot-basic upload), booking flow, jail sentencing, configurable prison stripping (locker / wipe / whitelist), prison revive cutscene, automatic release on timer.
  • Prison economy: mining, cleaning, and electrical prisoner jobs with money / item rewards; admin-configured prison shop with paid catalog and a free meal at configurable meal windows.
  • Field tools: handheld speed radar (WEAPON_RADAR streamed addon weapon), vehicle radar with front/rear lock, placeable admin-configured speed cameras with configurable fines.
  • Evidence registry: blood, bullet, and fingerprint drops with auto-cleanup, GSR check, vehicle fingerprint capture, weapon ballistics catalog, evidence camera item, per-station evidence locker.
  • Bodycam viewer (/bodycams) and CCTV viewer (/cameras) with optional same-department filtering and shared Island_CCTV_ChannelFuzz overlay.
  • Bodycam clip recording: officers watching another officer's feed can capture clips that upload to Fivemanage (using FIVEMANAGE_MEDIA_API_KEY) or post to a Discord webhook. Auto-records once per watch session and exposes a manual hotkey (+bodycamrec, default F6). Configured via Config.Bodycam.recording.* in shared/config/bodycam.lua (provider, max duration, framerate, bitrate, audio capture, hotkey, thumbnail capture, Discord webhook + size cap, auto-record toggle, manual cooldown).
  • MDT bodycam roster: list, attach to case, delete, and viewer with playback. Boss-configurable per-department bodycam_view_all_min_rank overrides the same-department roster filter for senior ranks. Recordings are stored in police_bodycam_recordings with the recorder, wearer, department, trigger type (auto / manual), duration, provider, video URL, and optional thumbnail / case attachment.
  • Armory shop NUI with Loadouts / Items tabs (modeled on the prison shop). Officers can buy whole loadouts or individual items; pricing is per-item inside a loadout (admins set prices in /padmin → Loadouts; the bundle total is derived). Funding source is per department, toggled by the boss in the boss menu (armory_treasury_funded column). Armory pulls are commitment-based: items stay in the officer's inventory across clock-out and disconnect (no auto-strip, no manual return).
  • Department treasury with automatic payroll on Config.SalaryInterval. With Config.PlayerManagement = true (default) salaries debit the department treasury and unpaid ticks accrue in police_unpaid_payroll for boss settlement; set to false to revert to direct framework salary payouts.
  • Field actions: tackle (+policetackle), hands-up (+handsup), headbag, ziptie + scissors, mouth tape, tracking band, wheel clamp, vehicle impound, ticketing.
  • Placeable scene props with carry mode: cones, barriers, road poles, spike strips (configurable in shared/config/objects.lua).
  • Police radio (+oxidepoliceradio) with channel browser, pma-voice / yaca-voice integration, and per-officer dead state via SetRadioDead export.
  • Megaphone item with handheld and vehicle PA modes (+oxide_police_vehicle_pa).
  • Door lock control with ox_target zones and a hotkey (Config.Doors.ToggleKey, default L) for the nearest door.
  • 100+ pre-loaded charges across traffic, public order, property, violent, weapons, drug, financial, and miscellaneous categories.
  • Fleet catalog ships with Patrol, Pursuit, Tactical, and Motorcycle categories; category labels are locale-driven (locales/en.json) so translators can retitle them without editing shared/config/fleet_catalog.lua.
  • QBCore compatibility shim: police:GetCops, police:GetDutyPlayers, police:server:IsPoliceForcePresent, police:server:isPlayerDead, police:IsSilencedWeapon, police:server:UpdateCurrentCops, police:SetCopCount broadcast for QB robbery scripts, and exports['qb-policejob']:IsHandcuffed() via provide('qb-policejob').
  • ESX compatibility shim: optional ESX job sync (Config.Compatibility.es_extended.jobSync), ox_inventory busy state synced with cuffs, common ESX policejob callbacks, and SyncEsxJobs export for manual sync.
  • Global compatibility toggles Config.Compatibility.enabled and Config.Compatibility.debug in shared/config/compat.lua.
  • Server exports for cross-resource integration: duty / officer queries, department / treasury management, MDT warrant and BOLO checks, criminal records, jail apply, mugshot capture and lookup, custody control, evidence GSR / fingerprint, vehicle fingerprint lookup. Full reference in docs/EXPORTS.md.
  • Locale-driven UI strings via locales/en.json for the MDT, admin panel, boss panel, custody, prison shop, and notifications.

Oxide Newspaperv1.0.0

Major

Added

  • Vue 3 + Vite + Tailwind frontend with shift menu, route HUD, ammo display, shift summary, tutorial overlays, and waypoint overlay
  • Route-based delivery flow: players pick up a generated house route at the depot, ride a company BMX, and throw newspapers at marked house targets
  • Throwable delivery mechanic using weapon_newspaper with limited supply and configurable spare papers for recovering from misses
  • 5-tier progression system (Paper Carrier through Route Legend) with persistent database tracking via unified job_progression table
  • Route timer system with per-house time limits, speed bonus for fast completion, and penalty for late routes
  • Detailed pay breakdown: base pay, distance bonus, streak bonus, tips, speed bonus, and tax deductions
  • Daily streak bonus system for consecutive shift days
  • Complaint and suspension system for bike loss, death on shift, and running out of newspapers mid-route
  • Bike loss handling with cash fine, complaint filing, route clearing, and forced return to depot flow
  • Uniform system wired through o-link.clothing (disabled by default in config)
  • NUI shift menu with cinematic camera and sway animation per location
  • olink.menu fallback context menu for servers preferring simplicity
  • Shift summary delivered via NUI popup or notification text (configurable via Config.shiftSummary)
  • Phone integration for shift event notifications via o-link.phone (configurable via Config.usePhone)
  • 9-step tutorial system with KVP persistence covering route pickup, throwing, misses, ammo management, late routes, and leveling
  • Player commands: /newspapertutorials (toggle), /newspapertutorialreset (reset progress)
  • Admin depot builder: /newspaperbuilder with full menu-driven workflow and config export/import support
  • Server-side anti-teleport validation based on delivery distance
  • Rate limiting on all server callbacks and events
  • Automatic cleanup on disconnect, character unload, death, and resource restart
  • 2 pre-configured depots with 80 delivery zones
  • Localization support via locales/en.json