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 226–250 of 301 releases

Oxide Blackmarketv1.4.1

Patch

Fixed

  • Dealer becoming invincible / unkillable / unarrestable - the dealer ped used a huge entity culling radius (50,000) which forced every player on the server into the entity's scope at once. Under OneSync this thrashed ownership migration between players and could leave the dealer in a state where damage and arrest attempts had no effect. The dealer now uses the default culling radius with orphan-mode persistence, so ownership migrates cleanly between nearby players and the dealer remains damageable and arrestable as intended.
  • Dealer initialization no longer reports success when the dealer ped fails to spawn - the failure is now surfaced so you can see it.

Added

  • Structured logging via oxide-logger - money movements, transactions, dealer spawns/kills/arrests, loot collection, reputation changes, admin commands, and security rejections (proximity exploits, invalid input, unauthorized arrest attempts) are now logged through the optional oxide-logger resource. Install oxide-logger to get a full audit trail in your console, file logs, or Discord webhooks. No effect if oxide-logger is not installed.
  • Dirty money metadata mode - new Config.DirtyMoney.useMetadata option lets you store dirty money as the value of a metadata field (default worth) on the configured item rather than stack count. Useful for inventory systems that use marked-bills patterns. Bills are consumed greedily by highest value first, and any change is returned as a new bill.

Changed

  • Removed verbose [oxide-blackmarket] print lines from the arrest flow that were appearing in the console regardless of Config.Debug. All debug output is now gated by Config.Debug or the oxide-logger configuration.

Oxide Weedv1.2.3

Patch

Added

  • New Config.ImageBaseUrl option — set this to a CDN URL (e.g. https://r2.qbox.re/myserver/inventory/) and any item image the inventory bridge can't resolve locally will fall back to that URL. Leave nil to keep current behavior.

Fixed

  • Freeze dryer Collect button not appearing at 0:00 — once a tray's timer hit zero, the UI could still report 0 dried buds until the next background tick (up to 30s). Slots now promote to dried as soon as they're due.
  • Freeze dryer timers drifting from the server clock — remaining time is now anchored to the server's clock, so timers stay accurate after long sessions or if the UI was opened mid-cycle.
  • Freeze dryer panel out of sync — the panel now re-syncs every few seconds and on demand, so missed state updates self-heal instead of requiring a reopen.
  • Freeze dryer bud models not updating from wet to dried — placed buds now correctly switch from semi-transparent (wet) to solid (dried) without needing to reopen the panel.

Changed

  • Freeze dryer tray progress bar now fills smoothly as buds dry instead of only jumping when a slot finishes.
  • Cleaned up unused commented-out items (growing manual, rolling papers, cigarillo wraps, lighter) from the default Germinator store config. Re-add them in shared/config/store.lua if you want them sold.

Oxide Animal Controlv1.1.1

Patch

Added

  • Uniform toggle button in the NUI shift menu (previously only available in the bridge context menu)
  • UI locale support — NUI text now reads from locales/*.json so the shift menu, summary, and call notification can be translated
  • oxide-logger integration for shift events, payouts, fines, ammo resupply, gear issue/return, progression changes, level-ups, timeouts, crew ownership transfers, auto-clock-outs, and admin commands

Changed

  • Config.Debug now defaults to false

Fixed

  • Progression load/save failures and zero-row updates now log warnings/errors instead of failing silently

Oxide Drugsellingv1.1.1

Patch

Added

  • Structured audit logging via oxide-logger — sales, robberies, police dispatches, and progression XP awards are now recorded with player and item identifiers (visible in console, file, and Discord sinks when oxide-logger is installed)

Fixed

  • Other players can now see the NPC walk up to the seller and play the negotiate/accept/reject/robbery animations during a sale. Previously the entire interaction was only visible to the selling player while bystanders saw the NPC continue wandering normally.

Oxide Policev1.1.0

Minor

Added

  • Video Storage tab in the MDT (replaces the Bodycam tab). Now stores bodycam clips and bait car dashcam recordings together, with a source filter for switching between them. Search now matches by name, plate, or recorder.
  • Bait car integration — dashcam clips captured by oxide-baitcar are uploaded to the same library and visible to officers in the MDT.
  • Citizen email notifications for traffic enforcement. Speed camera violations and manually issued citations now email the offender's in-game inbox with the invoice number and amount. Toggle per type in shared/config.lua (Config.CitizenEmail).
  • Hidden characters in the MDT. Admins can hide specific character IDs from MDT search, profiles, and vehicle owner lookups. Optional rank-based bypass lets senior officers still see hidden records. Configure in shared/config/mdt.lua (Config.MDT.hidden).
  • Offline jail time reduction. When enabled, sentences continue counting down for offline players and records auto-release when the timer expires. Configure in shared/config/custody.lua (Config.Custody.ReduceOfflineTime, Config.Custody.SecondsPerMonth).
  • Admin /jail and /unjail commands for placing or releasing a player by ID with permission checks and notifications.

Database

  • Run sql/migrations/001_video_storage.sql to upgrade existing installations. Adds source and metadata columns to police_bodycam_recordings so the table can hold both bodycam and bait car clips.

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 3D Weapon Printingv1.1.1

Patch

Added

  • Independent Durability & Jam Toggles - Durability and jam systems can now be enabled/disabled independently via Config.Durability.enabled and Config.Jam.enabled in shared/config/durability.lua
    • Disable Config.Durability when your inventory already handles weapon decay (ak47_qb_inventory, qs-inventory, codem-inventory, etc.) to avoid double-decay or nil-quality issues
    • When durability is disabled, jam chance falls back to a flat per-shot percentage (Config.Jam.flatChance) instead of the durability-tiered chance table
    • When durability is disabled, weapon metadata no longer writes a durability value

Changed

  • Structured Logging - All internal debug output now routes through the oxide-logger bridge (olink.logger). Servers running oxide-logger get categorized, traceable logs for player actions, printer/bench interactions, crafting, and database operations. No effect on servers without oxide-logger.

Fixed

  • Quality Rounding - Weapon quality metadata is now properly floored to an integer, preventing rare non-numeric quality values from causing issues with downstream inventory systems

Oxide Weedv1.2.2

Patch

Added

  • Structured logging through oxide-logger for every audit-worthy event — plant placement / harvest / death, genetics (strain registration, gender check, pollen, crossbreed), money flows, store purchases, scientist lab reports & cloning, drying / freeze dryer / drying rack state changes, packaging / bagging / brick press output, smoking sessions, ownership rejections, admin commands, and DB failures. Configure Discord or file sinks in oxide-logger's config to receive the audit trail.
  • Player stats card now fully localized — level, XP, "MAX" indicator, and progression milestone labels (Planting & Growing, Street Selling, Lab Reports, Crossbreeding, Seed Cloning, Freeze Dryer) read from your locale file.

Fixed

  • Brick press metadata bug — bricks produced before this version had strain_id set to the strain name and strain_name set to a traits table, breaking strain lookup and downstream genetics on pressed bricks.
  • Seed cloning at the scientist now refunds the player if the clone fails (e.g. inventory full). Previously the player was charged but received nothing.
  • Watering and fertilizing plants, refilling the watering can, filling water containers, and rolling joints/blunts now emit audit events — these inventory and state mutations were previously silent.
  • Database query failures during boot (plants, lamps, equipment, drying slots, heaters) now log a warning instead of failing silently.

Changed

  • Removed the legacy WeedDebug print helper. Debug output now flows through oxide-logger and respects its configured log level / sinks. Setting Config.Debug = true no longer prints to the server console — install oxide-logger and set its level to debug for verbose tracing.

Oxide Newspaperv1.0.1

Patch

Added

  • Newspaper bag prop now attaches to the player's back when a route is picked up and detaches when the shift ends or the route is cleared
  • Structured logging across shifts, deliveries, progression, and the depot builder via o-link.logger for easier troubleshooting and audit trails
  • Server-side validation when a player reports running out of newspapers, preventing false out-of-ammo events while papers are still in inventory

Changed

  • Ammo system rewritten to track a per-shift ammo budget — players can refill the newspaper weapon up to the amount the server issued, eliminating transient "out of ammo" misreports
  • Delivery blip label now uses the localized text from locales/en.json

Fixed

  • Edge cases where the ammo monitor could trigger a false suspension while the player still had newspaper items to reload

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 Weedv1.2.1

Patch

Added

  • Per-snap-point rotation for heater placement on drying racks — Config.Drying.heater.snapOffsets entries can now be { offset = vec3(...), rotation = vec3(...) } to set a rotation delta applied on top of the rack's rotation. Useful for custom drying rack models where the heater needs to face a different direction at each snap. Bare vec3(...) entries continue to work unchanged.

Oxide Pizza Jobv1.0.1

Patch

Fixed

  • Supervisor target zones no longer duplicate when the resource is restarted
  • Uniform system now snapshots appearance before applying the outfit, fixing cases where clothing bridges corrupted the restore data
  • Removed dependency on custom GetIsPlayerDowned bridge function that prevented the resource from working with the original community_bridge

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

Oxide Bankingv2.0.0

Major

Added

  • Cross-framework support via o-link - QBCore, QBX, and ESX are all supported with zero configuration. Framework is auto-detected at runtime.
  • o-link bridge layer - bridge/_loader.lua exposes the olink global plus shared FormatNumber / FormatMoney helpers used by every server module.

Changed

  • NUI Updated - NUI style has been updated along with polishing out previously incomplete features.
  • Server modules split for clarity - server/credit.lua, server/security.lua, server/business.lua, server/interest.lua, server/scheduler.lua, and server/compat.lua are now standalone modules (previously folded into fewer files).
  • Config split into five files - config/config.lua, config/accounts.lua, config/loans.lua, config/interest.lua, config/fees.lua are loaded as shared_scripts for cleaner separation of banking, tier, loan, interest, and fee settings.
  • provides { 'qb-banking' } is now declared in fxmanifest.lua so legacy resources requesting qb-banking resolve to oxide-banking.
  • Inventory access standardized on o-link.inventory - bank card inventory checks and item metadata reads now go through the bridge regardless of the active inventory resource.
  • ATM and branch interaction routed through o-link.target when Config.UseTarget = true, with proximity fallback when false.

Database Migration

Re-run sql/install.sql on existing installations. All statements use IF NOT EXISTS and are safe to re-run — existing data is not touched.

Oxide Vendingv1.5.0

Minor

Changed

  • Updated all progress bar calls to use the new o-link API format (disable, anim, flag instead of disableControls, animation, flags)
  • Added thread yields (Wait(0)) between each data loading step during startup to prevent server hitches on resource start
  • Placement system rewritten to match the standard used by other oxide resources: camera raycast preview with a green/red validity outline, scroll wheel to rotate, E to place, Backspace to cancel, and olink.helptext for on-screen controls. Replaces the two-stage "follow the player" flow.
  • Migrated from community_bridge to o-link — All framework abstraction now uses o-link instead of community_bridge. Dependencies updated to oxmysql, ox_lib, and `o-link
  • NUI locale loader refactored to match the canonical pattern used by oxide-weed / oxide-meth / oxide-drugselling / oxide-weaponprinting. The frontend now fetches locales/{lang}.json dynamically from the NUI side via a new getLocale client callback (returning the ox:locale convar), with automatic English fallback. Replaces the previous Lua-push pattern (SendNUIMessage({action='setLocales', ...})) which filtered and sent nui.* keys at startup. The t() helper now supports both %s and %d positional formatting

Removed

  • Config.Placement.FollowOffset and Config.Placement.RotationSensitivity (no longer used by the new placement system)
  • Unused placement.lock_position, placement.rotate_place, and notify.placement_started locale keys (replaced by placement.controls)
  • Unused DrawText3D helper from client/utils.lua

Oxide Landscapingv1.2.0

Minor

Added

  • SQL migration script (sql/migrate_unified_progression.sql) for migrating existing per-job progression tables into the unified job_progression table — run once across all Oxide job resources
  • Client-side death monitor thread for framework-independent death and respawn detection

Changed

  • Migrated from community_bridge to o-link — all bridge calls, lifecycle events, and dependency references now use o-link APIs
  • Progression data moved from landscapingjob_progression to shared job_progression table with composite (char_id, job) primary key
  • Death/respawn handling replaced framework bridge events with resource-owned oxide:landscapingjob:playerDied / oxide:landscapingjob:playerRespawned server events
  • Company van now initializes fuel to 100% on spawn
  • Shift payout and vehicle fine transactions now include reason strings for audit trails
  • Config.uniformsEnabled now defaults to false
  • Documentation updated for o-link references

Migration Guide

  • Back up your database before updating
  • Run sql/migrate_unified_progression.sql once before starting the updated resource
  • This copies data from landscapingjob_progression into job_progression and removes the old table
  • If you are updating multiple Oxide jobs that use this migration, only run the script once total

Oxide Methv1.2.0

Minor

Added

  • Meth usage system: all bagged meth variants are now usable items with configurable stimulant effects (screen visuals, intensity pulses, FOV surges, speed boost, stamina regen, armour, healing)
  • Per-variant and per-purity effect scaling with full configuration in shared/config/usage.lua
  • Usage cooldown and active-session checks to prevent stacking
  • Client-side usage cleanup on resource stop and player disconnect
  • Session cancellation when players press Escape during cooking, breaking, or bagging minigames — properly releases server-side session locks
  • Vehicle usage restriction: gas mask and equipment items can no longer be used while in a vehicle
  • Configurable fume effects during cooking (Config.FumeEffects) — linger duration, max strength, ramp-up rate, and masked fade rate are now exposed in config
  • Race condition guard on equipment spawning to prevent duplicate entity creation during yielding
  • Frontend locale loader now reads the active language from the ox:locale convar via a getLocale NUI callback and loads the matching locales/<lang>.json, with graceful fallback to English

Fixed

  • Player visibility in drug cameras: removed redundant SetEntityVisible calls that caused the local player to appear invisible to other players during minigames
  • Bagging NUI close now properly cancels pending variant selection and releases server session
  • Equipment spawning no longer leaves phantom entries when all entity models fail to create

Changed

  • Migrated from community_bridge to o-link — all Bridge.* calls replaced with olink.* equivalents, dependency updated in fxmanifest
  • Replaced CanCarryItem pre-checks with AddItem return value validation and proper rollback on failure (cooking, breaking, bagging, drying)
  • Meth table facing offset changed from 0 to 180 degrees

Oxide Weedv1.2.0

Minor

Added

  • Server-side vehicle check — weed items (seeds, equipment, lamps, heaters, scissors, watering can) are now blocked while inside a vehicle
  • Frontend locale loader now reads the active language from the ox:locale convar via a getLocale NUI callback and loads the matching locales/<lang>.json, with graceful fallback to English
  • Spanish locale file (locales/es.json) for the Vue frontend

Changed

  • Migrated from community_bridge to o-link for framework abstraction — all cross-resource calls now use olink.* APIs

Fixed

  • Player model flickering and visibility during camera sequences (brick press, drying rack, crossbreed, freeze dryer, supply store, plant harvest, wild plant harvest) — replaced dual-call visibility toggling with tick-enforced SetLocalPlayerInvisibleLocally
  • Smoking stress relief causing errors on frameworks that don't provide a stress removal function
  • Weed table placement arrow pointing backwards — added facingOffset = 180 to the weed_table config

Oxide 3D Weapon Printingv1.1.0

Minor

Changed

  • o-link Migration - Converted entire resource from community_bridge to o-link bridge across all 16 files
    • Dependency updated from community_bridge to o-link in fxmanifest
    • All Bridge.* API calls replaced with olink.* equivalents
    • Lifecycle events switched to olink:client:playerReady / olink:client:playerUnload
    • Character metadata now uses olink.character.GetMetadata / SetMetadata
  • Rate Limit Tuning - Reduced all action cooldowns for snappier gameplay
    • Placement/removal actions: 3000ms → 1000ms
    • Print/craft/collect actions: 2000–3000ms → 1000ms
    • Blueprint/USB browsing: 1000ms → 500ms
  • Inventory Guard Refactor - Collapsed separate CanCarryItem + AddItem calls into single AddItem return-value checks for printers, benches, and tables, eliminating race conditions between check and action
  • Progress Bar API - Updated field names to match o-link conventions (animation → anim, flags → flag, disableControls → disable)

Oxide Animal Controlv1.1.0

Minor

Added

  • Configurable outfit/uniform system with male and female outfit definitions (shared/config/outfits.lua)
  • Uniform toggle in both NUI shift menu and bridge context menu with Config.uniformsEnabled (default: disabled)
  • Server-side appearance backup and restore on uniform apply/remove
  • Uniform auto-reverts on clock out, death, disconnect, and resource stop
  • Migration script (sql/migrate_unified_progression.sql) for safe data migration from per-job progression tables
  • Transaction reason strings on all payment and fine operations for audit trail

Changed

  • Migrated from community_bridge to o-link bridge across all server and client code
  • Updated fxmanifest dependency from community_bridge to o-link
  • Replaced all Bridge.* API calls with olink.* equivalents
  • Updated lifecycle events to olink:client:playerReady / olink:client:playerUnload
  • Unified progression storage from per-resource animalcontroljob_progression table to shared job_progression table with composite (char_id, job) key

Fixed

  • Vehicle fuel now set to full on spawn

Migration Guide

  • Back up your database before updating
  • Run sql/migrate_unified_progression.sql once before starting the updated resource
  • This copies data from animalcontroljob_progression into job_progression and removes the old table
  • If you are updating multiple Oxide jobs that use this migration, only run the script once total