Oxide Newspaperv1.0.2
PatchAdded
Config.Blip.enabledoption to hide the depot map blip
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
Config.Blip.enabled option to hide the depot map blipConfig.Blip.enabled option to hide the pizzeria map blipConfig.Dashcam.tabletAnimation in shared/config.lua.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.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.[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.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.shared/config/store.lua if you want them sold.locales/*.json so the shift menu, summary, and call notification can be translatedConfig.Debug now defaults to falseoxide-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)oxide-baitcar are uploaded to the same library and visible to officers in the MDT.shared/config.lua (Config.CitizenEmail).shared/config/mdt.lua (Config.MDT.hidden).shared/config/custody.lua (Config.Custody.ReduceOfflineTime, Config.Custody.SecondsPerMonth)./jail and /unjail commands for placing or releasing a player by ID with permission checks and notifications.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-baitcar.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.Config.UseRemoteController:
baitcar_remote inventory item is the only entry point; /baitcar is not registered and the radial submenu is skipped./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.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.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.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.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.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.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.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.oxide:baitcar:client:event to clients whose job satisfies Config.AllowedJobs, powering the dashboard's real-time feed. Civilians never receive the broadcast.Config.OfficerBlip. Blips auto-attach to vehicles, refresh on job-change and deployment-change events, and clear on resource stop.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).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.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.Config.Durability.enabled and Config.Jam.enabled in shared/config/durability.lua
Config.Durability when your inventory already handles weapon decay (ak47_qb_inventory, qs-inventory, codem-inventory, etc.) to avoid double-decay or nil-quality issuesConfig.Jam.flatChance) instead of the durability-tiered chance tableoxide-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.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.strain_id set to the strain name and strain_name set to a traits table, breaking strain lookup and downstream genetics on pressed bricks.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.o-link.logger for easier troubleshooting and audit trailslocales/en.jsonoxide-dispatch.oxide-police for LEO duty when present).dispatch_alerts, dispatch_responders) and rehydration of active alerts on resource start.Config.AutoExpire) that marks unresolved alerts as expired after a configurable TTL.shared/config/alerts.lua (10-11 Traffic Stop through 10-99 Narcotics, plus panic, 911, 311)./911 / /311 chat commands./replycaller <id> <message> and Civilian.SendReply with caller-side toast.Config.Panic) with F4 keybind, /panic command, off-duty broadcast bypass, auto-waypoint on receive, and per-group title/message strings.Config.Detection).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 <value> command, persisted to character metadata, surfaced on alerts and replies.Config.DispatchHub.RadialEnabled.Config.Heatmap) — cached point density across 24h / 7d / 30d / all-time windows, capped at maxPoints.G) — drops a GPS waypoint on the most recent alert and attaches the player as responding.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/.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)./testdispatch [code] [jobGroup] and /testdispatchmany [count] [jobGroup] [durationSec] (both ACE-gated as command.testdispatch*).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.locales/en.json) covering popup, hub, civilian, responder, and panic strings.oxide-police./padmin): departments, stations, grades, badges, salaries, jail and stripping rules, speedcam ignored jobs.screenshot-basic upload), booking flow, jail sentencing, configurable prison stripping (locker / wipe / whitelist), prison revive cutscene, automatic release on timer.WEAPON_RADAR streamed addon weapon), vehicle radar with front/rear lock, placeable admin-configured speed cameras with configurable fines./bodycams) and CCTV viewer (/cameras) with optional same-department filtering and shared Island_CCTV_ChannelFuzz overlay.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).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./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).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.+policetackle), hands-up (+handsup), headbag, ziptie + scissors, mouth tape, tracking band, wheel clamp, vehicle impound, ticketing.shared/config/objects.lua).+oxidepoliceradio) with channel browser, pma-voice / yaca-voice integration, and per-officer dead state via SetRadioDead export.+oxide_police_vehicle_pa).ox_target zones and a hotkey (Config.Doors.ToggleKey, default L) for the nearest door.locales/en.json) so translators can retitle them without editing shared/config/fleet_catalog.lua.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').Config.Compatibility.es_extended.jobSync), ox_inventory busy state synced with cuffs, common ESX policejob callbacks, and SyncEsxJobs export for manual sync.Config.Compatibility.enabled and Config.Compatibility.debug in shared/config/compat.lua.docs/EXPORTS.md.locales/en.json for the MDT, admin panel, boss panel, custody, prison shop, and notifications.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.GetIsPlayerDowned bridge function that prevented the resource from working with the original community_bridgeweapon_newspaper with limited supply and configurable spare papers for recovering from missesjob_progression tableo-link.clothing (disabled by default in config)olink.menu fallback context menu for servers preferring simplicityConfig.shiftSummary)o-link.phone (configurable via Config.usePhone)/newspapertutorials (toggle), /newspapertutorialreset (reset progress)/newspaperbuilder with full menu-driven workflow and config export/import supportlocales/en.jsono-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.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/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.o-link.inventory - bank card inventory checks and item metadata reads now go through the bridge regardless of the active inventory resource.o-link.target when Config.UseTarget = true, with proximity fallback when false.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.
disable, anim, flag instead of disableControls, animation, flags)Wait(0)) between each data loading step during startup to prevent server hitches on resource startE to place, Backspace to cancel, and olink.helptext for on-screen controls. Replaces the two-stage "follow the player" flow.oxmysql, ox_lib, and `o-linklocales/{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 formattingConfig.Placement.FollowOffset and Config.Placement.RotationSensitivity (no longer used by the new placement system)placement.lock_position, placement.rotate_place, and notify.placement_started locale keys (replaced by placement.controls)DrawText3D helper from client/utils.luacommunity_bridge to o-linksql/migrate_unified_progression.sql) for migrating existing per-job progression tables into the unified job_progression table — run once across all Oxide job resourcescommunity_bridge to o-link — all bridge calls, lifecycle events, and dependency references now use o-link APIslandscapingjob_progression to shared job_progression table with composite (char_id, job) primary keyoxide:landscapingjob:playerDied / oxide:landscapingjob:playerRespawned server eventsConfig.uniformsEnabled now defaults to falsesql/migrate_unified_progression.sql once before starting the updated resourcelandscapingjob_progression into job_progression and removes the old tableshared/config/usage.luaConfig.FumeEffects) — linger duration, max strength, ramp-up rate, and masked fade rate are now exposed in configox:locale convar via a getLocale NUI callback and loads the matching locales/<lang>.json, with graceful fallback to EnglishSetEntityVisible calls that caused the local player to appear invisible to other players during minigamescommunity_bridge to o-link — all Bridge.* calls replaced with olink.* equivalents, dependency updated in fxmanifestCanCarryItem pre-checks with AddItem return value validation and proper rollback on failure (cooking, breaking, bagging, drying)ox:locale convar via a getLocale NUI callback and loads the matching locales/<lang>.json, with graceful fallback to Englishlocales/es.json) for the Vue frontendcommunity_bridge to o-link for framework abstraction — all cross-resource calls now use olink.* APIsSetLocalPlayerInvisibleLocallyfacingOffset = 180 to the weed_table configcommunity_bridge to o-link bridge across all 16 files
community_bridge to o-link in fxmanifestBridge.* API calls replaced with olink.* equivalentsolink:client:playerReady / olink:client:playerUnloadolink.character.GetMetadata / SetMetadataCanCarryItem + AddItem calls into single AddItem return-value checks for printers, benches, and tables, eliminating race conditions between check and actionanimation → anim, flags → flag, disableControls → disable)shared/config/outfits.lua)Config.uniformsEnabled (default: disabled)sql/migrate_unified_progression.sql) for safe data migration from per-job progression tablescommunity_bridge to o-link bridge across all server and client codecommunity_bridge to o-linkBridge.* API calls with olink.* equivalentsolink:client:playerReady / olink:client:playerUnloadanimalcontroljob_progression table to shared job_progression table with composite (char_id, job) keysql/migrate_unified_progression.sql once before starting the updated resourceanimalcontroljob_progression into job_progression and removes the old table