Progression
10-level business progression system for Oxide Vending with XP, milestones, and rewards.
Overview
Businesses progress through 10 levels by meeting both XP thresholds and revenue milestones. Higher levels unlock more machines, employees, machine types, and provide economic bonuses.
Leveling Requirements
To advance to the next level, a business must meet BOTH:
- XP Threshold - Earned from daily actions
- Revenue Milestone - Total lifetime revenue
Both requirements must be met simultaneously.
Level Progression Table
| Lvl | Name | XP Req | Revenue Req | Machines | Employees | Types | NPC Boost | Wholesale Discount |
|---|---|---|---|---|---|---|---|---|
| 1 | Newcomer | 0 | $0 | 3 | 1 | drinks | 0% | 0% |
| 2 | Vendor | 500 | $5,000 | 4 | 2 | +snacks | 5% | 2% |
| 3 | Supplier | 1,500 | $15,000 | 5 | 2 | - | 8% | 4% |
| 4 | Distributor | 3,500 | $35,000 | 6 | 3 | +general | 12% | 6% |
| 5 | Merchant | 6,500 | $65,000 | 7 | 3 | - | 15% | 8% |
| 6 | Retailer | 11,000 | $110,000 | 8 | 4 | +electronics | 18% | 10% |
| 7 | Entrepreneur | 18,000 | $180,000 | 9 | 4 | - | 22% | 12% |
| 8 | Tycoon | 28,000 | $280,000 | 10 | 5 | - | 25% | 14% |
| 9 | Mogul | 42,000 | $420,000 | 12 | 6 | - | 28% | 16% |
| 10 | Vending King | 60,000 | $600,000 | 15 | 8 | - | 35% | 20% |
Machine Type Unlocks
| Level | Types Available |
|---|---|
| 1 | drinks |
| 2 | drinks, snacks |
| 4 | drinks, snacks, general |
| 6 | drinks, snacks, general, electronics |
Pricing Range by Level
Higher levels can set more aggressive prices:
| Level | Min Markup | Max Markup |
|---|---|---|
| 1 | 0.90x | 1.5x |
| 2-3 | 0.85x | 1.8x - 2.0x |
| 4-7 | 0.80x | 2.2x - 2.8x |
| 8-9 | 0.80x | 3.0x |
| 10 | 0.75x | 3.0x |
XP Sources
Sales
| Action | XP Earned |
|---|---|
| Player Sale | 10 + (0.1 × sale amount) |
| NPC Sale | 5 + (0.1 × sale amount) |
Example: A $50 player sale earns 10 + (0.1 × 50) = 15 XP
Operations
| Action | XP Earned |
|---|---|
| Stock Items | 3 + (0.5 × quantity) |
| Collect Revenue | 5 + (0.02 × amount) |
| Wholesale Order | 15 |
| Repair Machine | 20 |
Example: Stocking 20 items earns 3 + (0.5 × 20) = 13 XP
Business Growth
| Action | XP Earned |
|---|---|
| Place Machine | 100 |
| Hire Employee | 50 |
Daily Bonus
| Component | XP |
|---|---|
| Base Bonus | 25 |
| Streak Bonus | 5 × streak days |
| Max Streak | 7 days |
Example: Day 5 streak = 25 + (5 × 5) = 50 XP
Milestone Bonuses
One-time XP grants for reaching achievements:
Revenue Milestones
| Milestone | Value | XP Reward |
|---|---|---|
| First $1,000 | $1,000 | 100 |
| $10,000 Earned | $10,000 | 250 |
| $50,000 Club | $50,000 | 500 |
| Six Figures | $100,000 | 1,000 |
| Half Million | $500,000 | 2,500 |
| Millionaire | $1,000,000 | 5,000 |
Sales Milestones
| Milestone | Value | XP Reward |
|---|---|---|
| 100 Sales | 100 | 150 |
| 500 Sales | 500 | 400 |
| 1,000 Sales | 1,000 | 800 |
| 5,000 Sales | 5,000 | 1,500 |
Machine Milestones
| Milestone | Value | XP Reward |
|---|---|---|
| 3 Machines | 3 | 150 |
| 5 Machines | 5 | 300 |
| 10 Machines | 10 | 600 |
Employee Milestones
| Milestone | Value | XP Reward |
|---|---|---|
| First Employee | 1 | 100 |
| Team of 5 | 5 | 250 |
Level Rewards
Max Machines
The maximum number of vending machines a business can have placed:
| Levels | Max Machines |
|---|---|
| 1 | 3 |
| 2 | 4 |
| 3 | 5 |
| 4 | 6 |
| 5 | 7 |
| 6 | 8 |
| 7 | 9 |
| 8 | 10 |
| 9 | 12 |
| 10 | 15 |
Max Employees
The maximum number of employees a business can hire:
| Levels | Max Employees |
|---|---|
| 1 | 1 |
| 2-3 | 2 |
| 4-5 | 3 |
| 6-7 | 4 |
| 8 | 5 |
| 9 | 6 |
| 10 | 8 |
NPC Revenue Boost
Percentage bonus on all NPC sale revenue:
| Level | Boost |
|---|---|
| 1 | 0% |
| 2 | 5% |
| 3 | 8% |
| 4 | 12% |
| 5 | 15% |
| 6 | 18% |
| 7 | 22% |
| 8 | 25% |
| 9 | 28% |
| 10 | 35% |
Example: A level 10 business earns $100 × 1.35 = $135 from an NPC sale.
Wholesale Discount
Percentage discount on wholesale orders:
| Level | Discount |
|---|---|
| 1 | 0% |
| 2 | 2% |
| 3 | 4% |
| 4 | 6% |
| 5 | 8% |
| 6 | 10% |
| 7 | 12% |
| 8 | 14% |
| 9 | 16% |
| 10 | 20% |
Example: A level 10 business pays $100 × 0.80 = $80 for wholesale.
Daily Bonus System
How It Works
- Each business can claim one daily bonus per day
- Claiming on consecutive days builds a streak
- Streak adds bonus XP (5 per streak day)
- Streak caps at 7 days
- Missing a day resets the streak to 1
Claiming
Through the dashboard or programmatically:
exports['oxide-vending']:ClaimDailyBonus(source, businessId)
Streak Calendar
| Day | Base XP | Streak Bonus | Total |
|---|---|---|---|
| 1 | 25 | +5 | 30 |
| 2 | 25 | +10 | 35 |
| 3 | 25 | +15 | 40 |
| 4 | 25 | +20 | 45 |
| 5 | 25 | +25 | 50 |
| 6 | 25 | +30 | 55 |
| 7+ | 25 | +35 | 60 |
Dashboard Integration
The Overview tab displays a progression card showing:
- Current level badge and name
- XP progress bar toward next level
- Revenue progress bar toward next milestone
- Daily bonus button with streak tracking
- Current rewards summary
- Level-up overlay animation
Admin Commands
| Command | Description |
|---|---|
/vendingsetlevel [businessId] [level] | Set business level (1-10) |
/vendingdebug progression init | Create records for all businesses |
/vendingdebug progression create [businessId] | Create record for specific business |
/vendingdebug progression status | View progression status |
/vendingdebug daily [businessId] | Debug daily bonus state |
Exports
-- Get current level
local level = exports['oxide-vending']:GetBusinessLevel(businessId)
-- Get full progression data
local prog = exports['oxide-vending']:GetBusinessProgression(businessId)
-- Grant XP
local success, leveledUp = exports['oxide-vending']:AddXP(businessId, amount, source, notifySource)
-- Track revenue
local leveledUp = exports['oxide-vending']:AddRevenue(businessId, amount)
-- Check limits
local maxMachines = exports['oxide-vending']:GetMaxMachines(businessId)
local maxEmployees = exports['oxide-vending']:GetMaxEmployees(businessId)
-- Check unlocks
local unlocked = exports['oxide-vending']:IsMachineTypeUnlocked(businessId, 'electronics')
local warehouseUnlocked = exports['oxide-vending']:IsWarehouseUnlocked(businessId)
-- Get economic bonuses
local discount = exports['oxide-vending']:GetWholesaleDiscount(businessId)
local boost = exports['oxide-vending']:GetNPCRevenueBoost(businessId)
local minPrice, maxPrice = exports['oxide-vending']:GetPricingRange(businessId, itemName)
-- Daily bonus
local success, xp, streak = exports['oxide-vending']:ClaimDailyBonus(source, businessId)
Configuration
See config/progression.lua for full configuration:
Config.Progression = {
Enabled = true,
Levels = { ... },
XPSources = { ... },
Milestones = { ... },
Notifications = {
showXPGain = true,
xpGainThreshold = 25, -- Min XP to show notification
levelUpSound = true,
levelUpAnimation = true,
milestoneNotify = true,
},
}
Disabling Progression
Set Config.Progression.Enabled = false to disable the system:
- All machine types become available
- Business uses base limits from
Config.Business - No XP or level tracking
- Warehouse always available (if enabled)