Core Configuration
Configuration is split across configs_settings/ (loaded in order via fxmanifest):
- • config.lua — core settings, binders, sleeves, auto rarity, label skins
- • configcards.lua — all card definitions
- • configshop.lua — shop, sell shop, grading shop, TC machine, CVG/sell pricing
- • configbooster.lua — booster boxes & packs + rarityRules (see Booster Packs doc)
- • configcollector.lua — Collector NPC
Global Settings
Config = {
Debug = false, -- enable dev logs and test commands
Target = true, -- true for ox_target / qb-target
Language = 'English', -- locale for UI and notifications
ShowPlayerButton = true,-- show cards to nearby players
EffectsEnabled = true, -- visual shaders/holo animations
BrandURL = 'www.j-g.com', -- URL displayed in shop UI headers
CVGBrandText = 'cvg', -- text shown on graded slab labels
}Core Features
- • Debug: Developer commands and logging
- • Target: Bridge target vs drawtext interactions
- • Language: 13 supported languages
- • ShowPlayerButton: Card sharing with nearby players
- • BrandURL: Store URL shown in shop UI headers
- • CVGBrandText: Custom text on graded slab labels
Visual System
- • EffectsEnabled: Global visual effects toggle
- • RarityColors: Custom color schemes per rarity
- • HighRarity: Enhanced effects for premium tiers
- • GradingCase: Custom grading case images
Debug Mode Features
- • Enables all developer commands (testjimgcardsall, testjimgcardscreenshot, etc.)
- • Shows detailed console logging for troubleshooting
- • Activates auto-capture screenshot system for inventory icons
- • Enables card preview commands for testing all rarities and brands
Target System
- • true: Uses Bridge target system (third-eye interactions)
- • false: Uses on-screen prompts with E key
- • Affects shop/sell NPC interactions and grading shop access
🍀 Pity System
Prevents long dry streaks by gently boosting rare pulls after failures.
Pity Configuration
Config.Pity = {
enabled = false, -- Recommended off for production
thresholds = { -- Packs without rarity before boost
Rare = 5,
Epic = 8,
Legendary = 12,
Holo = 10
},
boosts = { -- Multiplier when threshold met
Rare = 2.0,
Epic = 2.5,
Legendary = 3.0,
Holo = 2.5
},
raiseMax = false -- Ensure boosted rarities have max >= 1
}Pity Mechanics
- • enabled: Toggle pity system (recommended: false for production)
- • thresholds: Packs opened before boost triggers
- • boosts: Multiplier applied when threshold is met
- • raiseMax: Ensures boosted rarities have at least max ≥ 1
Example: If Rare base chance is 1% and threshold is met, new chance becomes 2%.
🔍 Condition & CVG Grading Potential
Every pull rolls condition (1–100) which drives CVG grading value and sell price.
- • Strict (recommended): CVG 5–8 common; CVG 10 is legendary
- • Balanced: Smoother curve for casual servers
- • Generous: High‑quality pulls common; good for short events
Condition Degradation
Cards lose condition each time they are shown to another player, creating natural wear over time.
Config.Condition = {
degradeOnUse = true, -- cards lose condition when shown
degradeAmount = 2, -- percentage points lost per use
}- • degradeOnUse: When true, showing a card to another player reduces its condition
- • degradeAmount: How many condition points are removed per show (default: 2)
- • Condition cannot drop below 1
- • Graded slabs are protected from degradation
Config.Condition = {
enabled = true, -- Must remain true for economy
preset = 'strict', -- strict/balanced/generous
presets = {
-- Strict: Lower conditions more common (CVG 5-8 average)
strict = {
[0]=12, [10]=12, [20]=10, [30]=9, [40]=8, [50]=7,
[60]=6, [70]=5, [80]=3, [90]=2, [100]=1
},
-- Balanced: Even distribution across all conditions
balanced = {
[0]=2, [10]=3, [20]=5, [30]=7, [40]=9, [50]=10,
[60]=10, [70]=9, [80]=7, [90]=5, [100]=3
},
-- Generous: Higher conditions more common (CVG 8-10 frequent)
generous = {
[0]=1, [10]=2, [20]=3, [30]=4, [40]=5, [50]=7,
[60]=9, [70]=12, [80]=16, [90]=19, [100]=22
}
}
}Important: Keep Config.Condition.enabled = true; disabling makes all cards 100% condition and breaks the economy.
🏪 Complete Shop System
Trading Card Shop (Config.Shop)
- • 8 brands with 3 pack types each (24 total items)
- • Category-based organization for easy browsing
- • Cooldown system prevents spam purchases (1 second)
- • Max basket items: 60 per transaction
- • Location: vector4(-143.78, 229.86, 93.94, 358.3)
Sell Shop (Config.SellShop)
- • Stable pricing: basePrice × condition multiplier (0.92–1.08)
- • 847 card entries with individual basePrice values
- • CVG slab tab with grade multipliers (see Metadata & Grading)
- • Bulk sell buttons: Sell All Cards / Sell All CVG (v1.1.8)
- • Optional hourly jitter: add Config.SellShop.dynamic in configshop.lua if desired
TC Machine (Config.TcMachine)
- • Vending prop at 12 map locations (disabled by default)
- • Buy from Config.Shop.items; sell from Config.SellShop.items
- • Independent from shop/sell/grading peds — each has its own enabled flag
- • Supports CVG slab selling and bulk sell (v1.1.8)
- • Requires oxmysql, community_bridge, and jim_g_trading_cards_props (start props before main script)
Buy Shop Configuration
Config.Shop = {
enabled = true, -- toggle shop on/off
currency = 'cash', -- payment currency
location = vector4(-143.78, 229.86, 93.94, 358.3), -- ped position
pedModel = 'u_m_y_rsranger_01', -- ped model
scenario = 'WORLD_HUMAN_CLIPBOARD', -- ped animation
blipenabled = false, -- map blip
blipname = 'Trading Card Shop', -- blip name
blipid = 52, scale = 0.4, blipcolor = 5, -- blip settings
cooldownSeconds = 1, -- anti-spam cooldown
maxBasketItems = 60, -- purchase limit
items = {
-- 24 total items across 8 brands
{ item = 'jg_warlords_pack', price = 1000, category = 'JG Warlords Series' },
{ item = 'empty_grading_case', price = 10000, category = 'Accessories' }
-- ... all items with prices and categories
}
}Sell Shop Configuration
Config.SellShop = {
enabled = true,
currency = 'cash',
location = vector4(-14.61, -152.91, 55.83, 339.91),
blipenabled = true,
sellPricing = {
conditionMultMin = 0.92, -- multiplier at 0% condition
conditionMultMax = 1.08, -- multiplier at 100% condition
minPayout = 1,
slabMaxVsUngraded = 2.35, -- CVG cap vs ungraded sell
},
items = {
{ item = 'grading_case', basePrice = 0 }, -- required for CVG sells
{ item = 'card_grizzlethorn', basePrice = 1 },
-- ... 847 cards in configshop.lua
}
}📝 CVG Grading Shop
- • Time-based grading: higher timeSec for Legendary makes grading feel high‑stakes
- • OriginalArt: highest price to maintain prestige (9000 cash, 15 seconds)
- • CVG System: submit cards for professional grading with realistic wait times
- • Requires empty grading case item for submission
CVG Grading Configuration
Config.GradingShop = {
enabled = true, -- toggle grading shop
currency = 'cash', -- payment currency
location = vector4(-1.8, -157.57, 55.45, 340.88), -- ped position
pedModel = 's_m_m_lathandy_01', -- ped model
scenario = 'WORLD_HUMAN_CLIPBOARD', -- ped animation
blipenabled = true, -- map blip
blipname = 'Card Grader Shop', -- blip name
blipid = 52, blipscale = 0.4, blipcolor = 46, -- blip settings
prices = {
Normal = { price = 500, timeSec = 6 }, -- Fastest, cheapest
Uncommon = { price = 1200, timeSec = 8 },
Rare = { price = 2500, timeSec = 9 },
Epic = { price = 4000, timeSec = 10 },
Legendary = { price = 6000, timeSec = 12 }, -- High value
Holo = { price = 8000, timeSec = 14 },
OriginalArt = { price = 9000, timeSec = 15 } -- Premium tier
}
}Grading Case Images
Config.GradingCase = {
case_pack = 'jim_g_trading_cards_grading_pack.webp',
case_label = 'jim_g_trading_cards_grading_pack_label.webp',
case_texture = 'jim_g_trading_cards_grading_pack_t.webp'
}🛡️ Card Sleeves (v1.1.5+)
Card sleeves (card_sleeves) protect individual cards from condition loss when using or showing cards. Configure in config.lua under Config.Sleeves.
Config.Sleeves = {
enabled = true,
item = 'card_sleeves',
overlayImage = 'card_sleeve_overlay.webp',
fullProtect = true, -- true = block all condition wear while sleeved
protectPercent = 0.60, -- if fullProtect false: reduces wear by this fraction
returnSleeve = true -- return sleeve item when card is sold/graded/collector hand-in
}- • Apply a sleeve in inventory — sets metadata
sleeved = true - • Sleeve overlay renders on card view; click to remove sleeve
- •
fullProtect = trueblocks wear on direct card use and Show Player (v1.1.7+) - • Grading removes sleeve; returns sleeve item if
returnSleeve = true - • Sell shop and Collector hand-in can return the sleeve per config
🏷️ CVG Label Skins (v1.1.5+)
Custom label artwork for graded slabs (grading_case). Configure in config.lua under Config.CVGLabelSkins. Label items are sold in the shop under the CVG labels category.
Config.CVGLabelSkins = {
star_galaxy = {
name = 'Star Galaxy',
item = 'cvg_label_star_galaxy',
labelImage = 'cvg_label_star_galaxy.webp',
textColor = '#eede00ff',
outlineColor = '#21002eff'
},
-- 19 total skins in default config
}Player flow
- Buy a label item from the Trading Card Shop
- Use the label on an existing graded slab
- Slab UI updates with custom label art and colors
Default skins
Star Galaxy, Color Shift, P & B Mix, Mellow Sky, Aetheric Sigil, Arcane Circle, Astral Dragon, Celestial Gear, Cosmic Phoenix, Elemental Fusion, Glacial Inferno, Golden Valley, Katana Street, Mecha Hangar, Nebula Drift, Nebula Fox, Sage Alignment, Solaris Runes, Winter Shrine.
📦 Pack & Binder System
Rarity rules define gacha behavior and binders provide collection management:
Pack Types
- • Regular Packs: lower packGate odds for Rare+
- • Mythic Packs: improved Rare/Epic/Legendary odds
- • Legendary Packs: best odds; some include guaranteedcards
Full rarityRules reference: Booster Packs & Rarity
Binder Features
- • Auto-Position: Cards go to predefined slots
- • Brand Enforcement: Single brand per binder
- • Duplicate Check: Prevent duplicate cards
- • Checklist: Track collection progress
Binder Configuration
Config.Binders = {
{ item = 'jg_warlords_book', themebook = 'Dark', brand = 'jg_warlords' },
{ item = 'jg_shin_genesis_book', themebook = 'Neon_Cyan', brand = 'jg_shin_genesis' },
{ item = 'jg_void_ether_book', themebook = 'Forest_Green', brand = 'jg_void_ether' },
{ item = 'jg_sands_of_eternity_book', themebook = 'Gold_Black', brand = 'jg_sands_of_eternity' },
{ item = 'ammunation_elite_book', themebook = 'Crimson_Black', brand = 'ammunation_elite' },
{ item = 'full_throttle_book', themebook = 'Glacier_Blue', brand = 'full_throttle' },
{ item = 'ls_legends_book', themebook = 'Emerald_Stone', brand = 'ls_legends' },
{ item = 'ls_landmark_book', themebook = 'Steel_Grey', brand = 'ls_landmark' }
}
-- Binder Settings
Config.BindersDuplicatesCheck = true -- Prevent duplicates
Config.BindersChecklistEnabled = true -- Show collection progress
Config.BindersEnforceBrand = true -- Single brand enforcement
Config.BindersAutoPosition = true -- Auto-slot positioningAvailable Themes (18 Total)
Dark Themes
- • Dark, Dark_Blue, Midnight_Purple
- • Steel_Grey, Crimson_Black, Black
Colorful Themes
- • Vibrant, Vibrant_Pink, Neon_Cyan
- • Sunset_Orange, Forest_Green, Ocean_Teal
Special Themes
- • Light, Gold_Black, Azure_Black
- • Sandstone, Glacier_Blue, Plum_Rose, Emerald_Stone
🎨 Visuals & UI Configuration
Rarity colors define tier identity and visual effects control card appearance.
Visual Effects System
- • EffectsEnabled: Global toggle for all effects
- • HighRarity: Enhanced effects for premium tiers
- • RarityColors: Custom color schemes per rarity
- • GradingCase: Custom grading case images
Player Interaction
- • ShowPlayerButton: Share cards with nearby players
- • Target: Bridge target vs drawtext interactions
- • Language: 13 supported languages
- • Debug: Developer tools and commands
Rarity Color Configuration
Config.RarityColors = {
['Normal'] = '#9ca3af', -- Gray
['Uncommon'] = '#22c55e', -- Green
['Rare'] = '#3b82f6', -- Blue
['Epic'] = '#a855f7', -- Purple
['Legendary'] = '#ffd700', -- Gold
['Holo'] = '#60a5fa', -- Cyan
['OriginalArt'] = '#232527ff' -- Black
}
Config.HighRarity = {
['Normal'] = false,
['Uncommon'] = false,
['Rare'] = true,
['Epic'] = true,
['Legendary'] = true,
['Holo'] = true,
['OriginalArt'] = true,
}
Config.EffectsEnabled = true📦 Booster Box System
Booster boxes provide bulk value — each box contains 6 packs of the matching type. All 8 brands have 3 box tiers (24 total boxes).
Regular Boxes
- • Contains 6 regular packs
- • Regular packs — gated rarities via packGate (Rare+ possible on regular packs)
- • Best value for collection building
Mythic Boxes
- • Contains 6 mythic packs
- • Chance at Rare/Epic cards
- • Mid-tier investment option
Legendary Boxes
- • Contains 6 legendary packs
- • All rarities possible
- • Premium tier with guaranteed high-rarity cards
📊 Economy Details
Sell Pricing (v1.1.6+)
- • Payout = basePrice × condition multiplier × (CVG grade factor if slab)
- • UI preview matches server payout (deterministic)
- • Optional dynamic jitter: add SellShop.dynamic with changePercent > 0
Shop Daily Stock (v1.1.6+)
- • Per-item dailyStock on booster boxes in Config.Shop.items
- • Global restock: dailyStockRestockHours (default 12)
- • Sold-out badges update when stock data arrives
CVG Case Splitter
Players can break open graded slabs to retrieve the original card inside.
Config.CVGCaseSplitter = {
consumeOnUse = true -- splitter item is consumed when used
}- • Splits a graded CVG slab back into the raw card
- • Card retains its original condition and metadata
- • CVG grade and serial are removed
- • When consumeOnUse is true, the splitter item is destroyed after use
💡 Economy Strategy
- • Pity system can inflate markets; tune carefully
- • Keep grading_case available to sink money and maintain economy
- • Cohesive branding: booster pack brand must match Config.Cards.brand
- • Condition matters: never disable condition system
- • Rarity gates control distribution and prevent flooding
- • Rarity gates control distribution — see Booster Packs & Rarity doc
- • Prestige items: keep OriginalArt and Legendary extremely rare
- • Condition degradation adds natural wear, increasing demand for fresh pulls
- • CVG case splitter creates strategic choices: keep the slab or free the card
🎯 Next Steps
After completing the core configuration: