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 126–142 of 142 releases

Oxide Weedv1.0.3

Patch

Fixed

  • Heat lamps and plants not disappearing after pickup/harvest due to silent entity deletion failures — added fallback cleanup methods
  • "Attempt to index a nil value" error when interacting with a lamp or plant that was already removed server-side
  • Ghost plant models from earlier growth stages persisting after stage transitions — orphaned entities are now retried for deletion and have their interactions stripped immediately
  • Plant water and fertilize interactions crashing if the plant data was removed while the model was still visible
  • Picking up lamps/plants multiple times in quick succession causing desync — interactions are now blocked while a removal is pending
  • Server now notifies the client on lamp removal failure (inventory full, ownership, rate limit) so the interaction unblocks correctly

Oxide Weedv1.0.2

Patch

Added

  • Configurable needs effect toggles for smoking (needsEffects.stressRelief, needsEffects.hungerCost, needsEffects.healing) — disable individually for frameworks without stress, hunger, etc.

Changed

  • Increased default smoking effect duration from 45-90s to 5-10 minutes (densityDurationMin/densityDurationMax)

Fixed

  • Removed unused config values (baseDuration, maxSlots, moldOffset, coughChance, dead selling animations)

Oxide GoPostalv1.0.4

Patch

Fixed

  • Fixed race condition in clock-out callback that allowed duplicate shift payments when spamming the clock-out button — shift state is now cleared before payment processing
  • Added missing active shift validation on clock-out, preventing callbacks from executing without a valid shift

Oxide Weedv1.0.1

Patch

Added

  • Drying Rack - Standalone 4-tray drying rack with 32 slots, unlocks at level 3. Interactive tray-by-tray loading and collection via 3D NUI
  • Brick Press - Compress 10 dried buds of the same strain into a weed brick ($800 base sell price), unlocks at level 8
  • Weed Brick - New sellable item with full quality/trait/generation pricing support
  • Safe Zones - Config-driven polygon zones where planting and equipment placement are blocked, with server-side enforcement and client-side red outline feedback. Define zones using the config file
  • New XP rewards: drying rack load (5 XP/bud), drying rack collect (8 XP/bud), brick press (20 XP)
  • New items: drying_rack, brick_press, weed_brick (must be registered in your framework)
  • New item images: brick_press.png, weed_brick.png
  • Grower's manual updated with drying rack, brick press, and revised equipment progression guidance

Changed

  • Equipment placement now auto-faces away from the player with a directional arrow indicator on the ground
  • Equipment with non-standard model orientation can define facingOffset in config to correct the facing
  • Drying section of grower's manual rewritten to cover all three drying methods (table, rack, freeze dryer)
  • Supply shop manual section updated to reference new equipment tiers
  • Point-in-polygon logic extracted to shared utility for use by both safe zones and wild plants

Fixed

  • Heaters not affecting drying rack drying time (was calling non-existent function instead of WeedDrying.GetDryingMultiplier)

Oxide GoPostalv1.0.2

Patch

Fixed

  • Phone notifications now use email instead of SMS, fixing errors on phone resources (lb-phone, okokPhone, qb-phone, etc.)
  • Players can no longer clock in when the vehicle spawn area is occupied by another player or vehicle
  • Co-op partners now receive vehicle keys so they can open and close van doors
  • Fixed carry prop occasionally failing to attach without blocking the delivery flow

Changed

  • Updated map blip icon and color

Oxide Blackmarketv1.2.2

Patch

Changed

  • Dirty money now supports inventory items - new Config.DirtyMoney table replaces Config.MoneyAccount, allowing dirty money to be handled as either a framework account ('account' mode for ESX) or an inventory item ('item' mode for QBCore/QBX)
  • Transactions now properly fail with user feedback when inventory is full in item mode (buying, selling, and loot collection)
  • Selling items refunds the sold items back if dirty money can't be added to inventory

Removed

  • Config.MoneyAccount - replaced by Config.DirtyMoney table

Oxide GoPostalv1.0.1

Patch

Fixed

  • Fixed "Failed to load data" error when interacting with the GoPostal NPC on ESX, QBCore, and QBX frameworks
  • Player progression now works correctly with all identifier formats (ESX license strings, QBCore citizenids)

Changed

  • char_id column type changed from INT UNSIGNED to VARCHAR(60) to support all framework identifier formats

Migration (existing servers)

If you already have the postaljob_progression table from v1.0.0, run this SQL before updating:

ALTER TABLE postaljob_progression MODIFY char_id VARCHAR(60) NOT NULL;

New installs require no action — the updated sql/install.sql handles this automatically.

Oxide Landscapingv1.0.1

Patch

Added

  • Locale system — all player-facing strings (notifications, progress labels, menu text, level titles, blip labels) are now driven by locale files in locales/ using ox_lib i18n, making the resource fully translatable
  • Split configuration files — the monolithic shared/config.lua has been broken into focused domain files under shared/config/:
    • config/job.lua — Payment, levels, crew, timer, yard tiers, complaints
    • config/vehicles.lua — Company van and mower settings (blades, damage, particles, sound)
    • config/mowing.lua — Grass/obstacle props, detection settings, animations
    • config/visuals.lua — NPC, blips, markers, waypoints, yard editor
    • config/locations.lua — Office locations and yard definitions (~590 lines of coordinate data)
  • Mower breakdown repair-and-resume — new Config.Mower.allowFinishYardOnBreakdown setting (default true) lets players repair a broken mower and continue the current yard instead of forfeiting it. The yard timer pauses during repair and resumes with the remaining time. A complaint is always filed on breakdown regardless of this setting

Changed

  • shared/config.lua now only initializes Config = {} and sets core toggles (Debug, usePhone, MaxSlotsPerLocation)
  • fxmanifest.lua updated to load shared/config/*.lua between config.lua and exported_locations.lua
  • Hardcoded UI strings in config replaced with locale keys (e.g. 'Trainee' → 'level.trainee', 'Landscaping Office' → 'blip.landscaping_office')
  • Mower destruction now always issues a complaint (Config.Complaints.vehicleDestroyPenalty), previously it did not

Oxide Blackmarketv1.2.1

Patch

Added

  • Configurable money account type - new Config.MoneyAccount setting lets you choose which account type is used for all blackmarket transactions (buying, selling, loot drops)
    • ESX: set to 'black_money' for native dirty money
    • QBCore/QBX: set to 'crypto', 'black_money', or whatever your server uses
    • Defaults to 'cash' - existing behavior is unchanged out of the box
  • Police arrest rewards always pay in regular cash regardless of Config.MoneyAccount

Changed

  • Shop UI label updated from "Cash" to "Balance" to reflect configurable account types
  • "Not enough cash" notification updated to "Not enough funds"

Oxide Bankingv1.2.1

Patch

Added

  • Transfer Delays with Expedited Option - External transfers now have configurable processing delays
    • Config.TransferDelays - Configure delay hours for internal/external/wire transfers
    • Expedited transfers available for instant processing (+$25 fee)
    • Pending transfers UI with cancel option
    • New bank_pending_transfers table for tracking delayed transfers
  • Loan Processing Time - Non-instant loans now have configurable processing time
    • Config.LoanApproval.processingTime - Hours before loan is auto-approved (default: 2)
    • New processing status for loans being processed
    • Scheduler processes pending loans hourly
  • Account Audit Trail - Comprehensive audit logging system
    • LogAuditEvent() function for tracking all account operations
    • GetAuditLog() function for querying audit history
    • New bank_audit_log table with category-based filtering
    • Audit logging added to deposits, withdrawals, loan applications, card operations
  • Investment Dividends - Dividend payments for eligible investment products
    • dividendRate and dividendFrequency config options for investment products
    • ProcessDividends() function runs daily via scheduler
    • Real Estate Trust now pays 3% annual dividends every 14 days
    • /forcedividends admin command
    • TriggerDividends export
  • Daily Loan Limit Tracking - Added loans_today column to track daily loan applications
  • New Locale Keys - Added 40+ new localization keys for all new features

Fixed

  • Card Daily Limit Time Inconsistency - Card daily limits now use in-game day counter instead of server time
    • Changed last_reset (DATE) to last_reset_day (INT) in bank_cards table
    • Limits reset properly with in-game day changes
  • Loan Cache/DB Atomicity - Loan payments now wrapped in MySQL transactions
    • Prevents race conditions in concurrent payment scenarios
    • Cache only updates after successful database transaction
    • Automatic refund on transaction failure
  • DB ENUM Mismatch - Added external to bank_loan_payments.payment_type ENUM

Removed

  • ExportTransactionHistory - Removed stub function (not implemented)
  • Foreign Transaction Fees - Removed unused foreignTransaction config from fees

Database Migration

Run the following SQL on existing installations:

-- Add loans_today column
ALTER TABLE `bank_player_accounts`
ADD COLUMN IF NOT EXISTS `loans_today` INT NOT NULL DEFAULT 0 AFTER `daily_transferred`;

-- Update loan status ENUM
ALTER TABLE `bank_loans`
MODIFY COLUMN `status` ENUM('pending', 'pending_approval', 'processing', 'approved', 'active', 'paid', 'defaulted', 'collections', 'denied', 'cancelled') NOT NULL DEFAULT 'pending';

-- Add processing_until column
ALTER TABLE `bank_loans`
ADD COLUMN IF NOT EXISTS `processing_until` DATETIME DEFAULT NULL AFTER `status`;

-- Update payment_type ENUM
ALTER TABLE `bank_loan_payments`
MODIFY COLUMN `payment_type` ENUM('scheduled', 'extra', 'garnishment', 'external') NOT NULL DEFAULT 'scheduled';

-- Add dividend columns
ALTER TABLE `bank_investments`
ADD COLUMN IF NOT EXISTS `last_dividend_day` INT NOT NULL DEFAULT 0 AFTER `current_value`,
ADD COLUMN IF NOT EXISTS `total_dividends` BIGINT NOT NULL DEFAULT 0 AFTER `last_dividend_day`;

-- Fix card daily limit column
ALTER TABLE `bank_cards` DROP COLUMN IF EXISTS `last_reset`;
ALTER TABLE `bank_cards` ADD COLUMN IF NOT EXISTS `last_reset_day` INT NOT NULL DEFAULT 0 AFTER `daily_used`;
UPDATE `bank_cards` SET `last_reset_day` = 0, `daily_used` = 0;

-- Create pending transfers table
CREATE TABLE IF NOT EXISTS `bank_pending_transfers` (
    `id` INT NOT NULL AUTO_INCREMENT,
    `from_citizenid` VARCHAR(50) NOT NULL,
    `to_citizenid` VARCHAR(50) NOT NULL,
    `amount` BIGINT NOT NULL,
    `fee` BIGINT NOT NULL DEFAULT 0,
    `transfer_type` ENUM('internal', 'external', 'wire') NOT NULL,
    `expedited` TINYINT(1) NOT NULL DEFAULT 0,
    `status` ENUM('pending', 'completed', 'cancelled', 'failed') NOT NULL DEFAULT 'pending',
    `scheduled_completion` DATETIME NOT NULL,
    `reason` VARCHAR(255) DEFAULT NULL,
    `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    `completed_at` TIMESTAMP NULL,
    PRIMARY KEY (`id`),
    KEY `idx_status` (`status`),
    KEY `idx_scheduled` (`scheduled_completion`),
    KEY `idx_from` (`from_citizenid`),
    KEY `idx_to` (`to_citizenid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- Create audit log table
CREATE TABLE IF NOT EXISTS `bank_audit_log` (
    `id` BIGINT NOT NULL AUTO_INCREMENT,
    `timestamp` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    `citizenid` VARCHAR(50) DEFAULT NULL,
    `account_name` VARCHAR(50) DEFAULT NULL,
    `action` VARCHAR(50) NOT NULL,
    `category` ENUM('account', 'transaction', 'loan', 'card', 'security', 'admin') NOT NULL,
    `performed_by` VARCHAR(50) NOT NULL,
    `details` JSON DEFAULT NULL,
    `success` TINYINT(1) NOT NULL DEFAULT 1,
    PRIMARY KEY (`id`),
    KEY `idx_timestamp` (`timestamp`),
    KEY `idx_citizenid` (`citizenid`),
    KEY `idx_account` (`account_name`),
    KEY `idx_action` (`action`),
    KEY `idx_performed_by` (`performed_by`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

Oxide Chatv1.0.1

Patch

Fixed

  • Chat no longer disappears when idle in settings modal (removed 5-second preview timeout)
  • Keybinds now work when chat input loses focus:
    • ESC closes chat regardless of input focus state
    • T refocuses the input when clicked away

Changed

  • Emoji picker now follows the "Command Suggestions" position setting (above/below input)
  • Split "Background Opacity" into two separate settings:
    • "Messages Background" - controls chat container/messages area opacity
    • "Input Background" - controls input box, suggestions, and emoji picker opacity
  • Removed "Blur Intensity" slider (blur now fixed at 12px)