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 276–300 of 301 releases

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

Major

Added

  • Full cannabis cultivation system with 4-stage plant growth
  • 10-trait genetics system with weighted quality calculation
  • Plant gender mechanics with male/female determination at growth stage 2
  • Crossbreeding system combining pollen and seeds to produce hybrid strains
  • Strain registry with procedural name generation (1600+ unique names)
  • Drying rack system with 14 slots per weed table
  • Freeze dryer with 18 trays and 144 total slots (requires level 7)
  • Heater system to accelerate drying (up to 3 per rack, 1.5x multiplier each)
  • Trimming with scissors producing pruned buds and cannabis leaves
  • Bagging via drag-and-drop NUI at the weed table
  • Tiered packaging: 1g, eighth, quarter, half, ounce
  • Joint and blunt rolling with trait-based smoking effects
  • NPC street selling with price negotiation, counter-offers, and risk mechanics
  • Wild plant foraging in configurable polygon zones with respawn timers
  • Supply store NPC (The Germinator) with categorized inventory
  • Scientist NPC (Best Buds Laboratories) for lab reports and seed cloning
  • 10-level progression system with XP rewards for all activities
  • Water container and watering can equipment for efficient hydration
  • Storage tote with stash inventory access
  • Growing manual item with comprehensive NUI guide
  • Admin commands for testing and management
  • Full localization support via locales/en.json
  • Rate limiting on all server callbacks and events
  • Ownership enforcement for placed items
  • Routing bucket support for instanced gameplay

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.1.0

Minor

Added

  • NUI shift menu — new full-screen Vue menu with progression card, stats grid, next-level preview, and action buttons. Togglable via Config.menuStyle ('nui' or 'menu'), so you can keep the original context menu if preferred
  • Per-location menu camera — when the NUI menu opens, a scripted sky camera with a gentle sway effect is shown. Configure camera position, heading, and FOV per location via the menuCamera field in config/locations.lua
  • Work uniform system — players can equip/remove a landscaping uniform from the shift menu. Uniforms auto-revert on clock out, death, or disconnect. Customize outfits in config/outfits.lua
  • ID-based crew invites — players now enter a server ID to invite a crew partner instead of auto-targeting the nearest player. Works in both NUI and context menu modes
  • Crew headshot display — NUI menu shows player headshots with a leader crown indicator when in a crew

Changed

  • Crew invite range increased from 10m to 15m (Config.Crew.inviteRange)
  • All NUI menu strings are now locale-driven — add or override them in locales/en.json under the nui.* keys
  • Uniform apply/remove and crew invite response callbacks are now rate-limited server-side
  • Player clothing is automatically reverted on disconnect if they were wearing a work uniform

Oxide Landscapingv1.0.0

Major

Features

  • Landscaping/mowing gig job with 10 hand-built yards across Los Santos
  • 5-tier progression system (Trainee → Foreman) with increasing pay, speed, and tip chances
  • Company van + mower vehicle system with roof rack attachment
  • Mower blade toggle with speed limiting, particle effects, and 3D positional audio (xsound)
  • Obstacle hazard system with mower damage and on-foot pickup
  • Yard timer with speed bonus and expiry penalty
  • Complaint/suspension system for vehicle destruction and death on shift
  • 2-player crew co-op with invite system and bonus pay
  • Visual yard editor (freecam) for building new yards in-game
  • Coordinate builder admin commands for locations and yards
  • Floating 3D waypoint markers above assigned yards
  • Phone integration for shift updates via SMS/email (Community Bridge)
  • Multi-framework support via Community Bridge (QBCore, ESX, QBox, etc.)

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 Blackmarketv1.2.0

Minor

Added

  • Multi-framework support via Community Bridge - now works with QBCore, ESX, QBox, and more out of the box
  • Universal dispatch alerts - compatible with 17+ dispatch systems (ps-dispatch, cd_dispatch, etc.) via configurable Config.DispatchAlerts
  • Universal phone support - pager emails work with any phone system supported by Community Bridge
  • Universal target support - works with qb-target, ox_target, and any target system supported by Community Bridge
  • Universal inventory support - item images resolve automatically per inventory system, no manual path config needed
  • Universal progress bar support - loot bag searching uses Bridge progress bar (compatible with ox_lib, qb, etc.)
  • Transaction rate-limiting - prevents rapid-fire buy/sell exploit attempts
  • Server-side killer tracking - dealer killer is now identified via weaponDamageEvent on the server, preventing client-side spoofing
  • Distance-based performance scaling - dealer monitoring thread adjusts polling rate based on player distance (2s at 100m+ vs 100ms nearby)
  • Automatic area name resolution - pager messages now resolve location names from GTA natives instead of a hardcoded list
  • Proper cleanup on disconnect - all client state (hit squad, loot bags, NUI, blips) is fully cleaned up on character switch or disconnect
  • Pager cooldown cleanup - server-side pager cooldowns are removed when players disconnect (prevents memory leaks)
  • New dealer spawn locations (Cypress Flats, Davis, Little Seoul, Mirror Park, Banham Canyon, Sandy Shores, Grapeseed, Grand Senora Desert)

Fixed

  • Loot proximity check now validates distance before removing loot from storage, preventing edge case where loot is lost if player is too far
  • Hit squad now targets the actual killer (server-tracked) instead of relying on client-side detection which could miss one-shot kills
  • Reputation tier change events now properly fire to the blip system on every tier transition
  • Admin commands (/setblackmarketrep, /checkblackmarketrep) now validate that the target player is online before executing
  • ESC key detection loop no longer runs at full framerate when shop is closed
  • Selling items now properly triggers tier-up notifications via AddReputationWithNotify

Changed

  • Dependency changed from qb-core to community_bridge - this is the only required dependency now
  • Removed @oxmysql/lib/MySQL.lua dependency - handled by Community Bridge
  • Removed Config.TargetSystem, Config.InventorySystem, Config.InventoryImagePath, Config.PhoneSystem settings - Community Bridge auto-detects these
  • Removed hardcoded Config.AreaNames table - area names are now resolved dynamically from coordinates
  • Removed Config.PoliceDispatchEvent and Config.PoliceAlertChance - replaced by Config.DispatchAlerts table with per-alert-type configuration
  • Dispatch alerts (transaction + proximity) are now configurable with individual chance, message, code, icon, and blip settings
  • Cuff sound effect replaced with native GTA sound (removed InteractSound dependency)
  • Death report distance threshold increased from 50m to 200m to allow any nearby client to report (server validates independently)

Oxide Vendingv1.3.0

Minor

Added

  • Multi-Framework Support — Full support for QBCore, ESX, and Standalone (ox_lib + ox_inventory + ox_target) servers via a new framework bridge system with automatic detection. Configure manually with Config.BridgeOverride or let it auto-detect.
  • Multi-Inventory Support — Auto-detects ak47_qb_inventory, ak47_inventory, ox_inventory, and qb-inventory. No configuration needed — the bridge picks the active inventory system automatically per framework.
  • Account-Wide Business Restriction — New Config.Business.OnePerAccount option to limit players to one business across all characters sharing the same license.
  • Vehicle Placement Check — Players can no longer place vending machines while inside a vehicle.
  • GetNPCSalesStats Export — External scripts can now query NPC sales simulation stats via exports['oxide-vending']:GetNPCSalesStats().

Changed

  • Locale Format — Locales migrated from locales/en.lua to locales/en.json. Custom translations will need to be converted to JSON format.
  • Transaction Safety — Business registration fee is now charged before creation with automatic refund on failure. Revenue collection verifies database success before updating in-memory caches. Warehouse withdrawals roll back on inventory failures.
  • Banking Validation — Withdrawal and deposit amounts are now validated server-side as positive integers.
  • QBx Streamlined — Removed redundant QBx-specific code paths in bridge files; QBx now routes through the same QBCore code paths.
  • Inventory Detection — Config.UseOxInventory is no longer needed. ox_inventory is now auto-detected on all frameworks including ESX.
  • Documentation updated for multi-framework setup, bridge configuration, and framework-specific troubleshooting.

Removed

  • locales/en.lua — Replaced by locales/en.json.

Oxide Vendingv1.2.0

Minor

Added

  • Warehouse System: Business inventory management for bulk storage
    • Purchase and manage a warehouse building for your business
    • Store items in bulk before distributing to vending machines
    • Warehouse state restoration on player reconnect
    • Security measures and access controls
  • Pickup Location Feature: Wholesale orders can now be picked up at designated locations
  • Contract Signing: Business registration now requires signing a contract for immersion

Changed

  • Enhanced vending machine pricing system with improved validation
  • Updated database schema to support warehouse and pickup features
  • Improved NPC sales item configuration and behavior
  • Better user notifications for warehouse operations

Fixed

  • Warehouse callback issues and removed dead code
  • Various warehouse state restoration edge cases

Oxide Bankingv1.3.0

Minor

Added

  • Transaction Limits - Configurable limits for deposits, withdrawals, and transfers to prevent excessive transaction amounts
  • Debug Mode Security - New security settings for debug mode in production environments
    • Auto-timeout for debug sessions
    • Debug action logging
    • Restricted debug access controls
  • Database Connection Resilience - Retry logic with exponential backoff during resource startup
  • SafeExecute Wrapper - Error handling wrapper for scheduled tasks ensures failures don't interrupt execution flow
  • Global FormatNumber Function - Consistent number formatting across all banking operations
  • ox_inventory Support - Item metadata retrieval now supports both qb-inventory and ox_inventory
    • New Config.UseOxInventory option

Changed

  • Rebranded to Oxide Banking - All references updated from QB-Banking-Plus to Oxide Banking
  • Simplified Low Balance Alert - Removed threshold parameter for cleaner API
  • In-Game Day Increment - Now triggers all scheduled daily tasks automatically
  • Enhanced Startup Stability - Player data retrieval during resource restarts handled gracefully

Documentation

  • Added new admin commands to README: /forcecardcleanup, /forcedividends, /pendingloans, /approveloan, /denyloan
  • Updated ADMIN.md with clarifications on day increment behavior
  • Clarified bank_cards export includes hashed PINs for security

Oxide Blackmarketv1.1.0

Minor

Added

  • Target system wrapper for unified interaction with qb-target and ox_target
  • Config.TargetSystem setting to switch between targeting systems
  • Config.InventorySystem setting to support both qb-inventory and qs-inventory
  • Config.InventoryImagePath for configurable item image paths
  • Config.PoliceJobs setting to configure which jobs can arrest dealers
  • Unique loot ID generation for secure loot tracking

Fixed

  • Dealer death processing now prevents duplicate loot drops
  • Item name validation in purchase and sell events

Changed

  • Dealer and loot bag interactions now use unified target system wrapper

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)

Oxide Bankingv1.2.0

Minor

Fixed

  • Config.DailyLimits was not wired - Removed orphaned Config.DailyLimits section (ATMWithdraw, ATMDeposit, Transfer) that was defined but never used for actual transactions
  • Config.Collections wrong path - Fixed Config.Collections references to use correct path Config.Loans.collections
  • Hardcoded fallback values - Removed unnecessary or fallback defaults throughout server code where config values are guaranteed to exist

Changed

  • Card daily limits now tier-based - Bank cards now inherit the player's account tier dailyWithdrawLimit instead of using a separate config value
    • Basic tier: $5,000/day
    • Premium tier: $25,000/day
    • Business tier: $100,000/day
  • Interest calculations - Now use Config.TimeSettings.DaysPerYear consistently without fallbacks
  • Loan rate calculations - Now use Config.Loans.minimumInterestRate instead of hardcoded 1% floor

Added

  • Config.Loans.minimumInterestRate - Configurable minimum interest rate floor for loans (default: 0.01 / 1%)

Documentation

  • Updated docs/CONFIGURATION.md to reflect tier-based daily limits
  • Fixed documentation for Config.Loans.collections path

Oxide Vendingv1.1.0

Minor

Added

  • Machine Competition System: NPCs now prefer cheaper machines when multiple same-type machines are nearby
    • Configurable competition radius (default 500m)
    • Same machine types compete (drinks vs drinks, snacks vs snacks)
    • Per-item price comparison - cheaper items get more NPC sales
    • Probabilistic model - expensive machines still get some sales, just fewer
    • Cross-business only - your own machines don't compete with each other
  • New Config.Competition settings in config/npc_sales.lua:
    • Radius - Competition detection radius
    • MinMultiplier / MaxMultiplier - Bounds for price competitiveness effect
    • CheapestBonus - Extra sales bonus when you have the cheapest price
    • SameOwnerCompetes - Toggle for same-business competition
  • Dashboard Analytics: "Market Competition" section showing:
    • Summary cards: Nearby Competitors, Price Competitiveness %, Best Price Items, Overpriced Items
    • Per-machine breakdown with competitor names and distances
    • Price comparison table with your price, avg competitor price, rank, and suggested prices
    • Color-coded rows: green for cheapest, red for most expensive
  • Server-side competition helpers: GetCompetitors(), CalculateCompetitionMultiplier(), UpdateCompetitionAnalysis()
  • New server callback: oxide-vending:server:getCompetitionAnalysis

Oxide Vendingv1.0.0

Major

Changed

  • Removed statistics/transaction history menus from oxide-menu (use NUI dashboard instead)
  • Debug print statements now properly gated behind Config.Debug flag
  • Cleaned up LoadBusinesses and LoadMachines startup logging

Removed

  • Unused server callbacks: isOwner, getBusinessDashboard, getBusinessTransactionHistory
  • Unused server functions: SyncMachineToNearby, RemoveMachineFromNearby, GetTotalStockCount
  • Unused client helper: UpdateMenuItem
  • Hardcoded debug print statements in dashboard NUI callback

Fixed

  • Transaction history in NUI now correctly shows NPC sales with same styling as player sales
  • Combined "Player Sales" and "NPC Sales" filters into single "Sales" filter for immersion

Oxide Bankingv1.1.0

Minor

Added

  • Vehicle Loan Export System - External scripts (like qb-vehicleshop) can now register and track vehicle loans through the bank
    • RegisterVehicleLoan() - Register a new vehicle loan from external script
    • RecordVehicleLoanPayment() - Record payments made at dealership
    • CloseVehicleLoan() - Close loan as 'paid' or 'repossessed'
    • GetVehicleLoan() - Retrieve loan info by plate
  • Vehicle loans display in bank UI with "Pay at Dealership" label
  • New docs/VEHICLESHOP_INTEGRATION.md - Step-by-step guide for qb-vehicleshop integration
  • Documentation section added to README.md listing all available guides
  • External loan types configuration (Config.Loans.externalTypes)

Changed

  • Vehicle loans are now managed externally by dealership scripts rather than through bank applications
  • Updated LoansTab.js to conditionally show payment buttons (hidden for externally managed loans)
  • Added vehicle icon to loan type icons

Removed

  • Property loan product (not implementable without standardized housing script)
  • Vehicle loan product from bank applications (now handled via exports)

Database

  • Requires notes column in bank_loans table:
    ALTER TABLE `bank_loans` ADD COLUMN `notes` TEXT NULL DEFAULT NULL AFTER `collateral_id`;