[PAID] [RELEASE] Paintball

:camera_flash:Preview / Showcase:
https://www.youtube.com/watch?v=bYVZJJmPItw

(QBCORE/QBOX) Buy Escrowed - $25.00

(QBCORE/QBOX) Buy Unlocked - $50.00

:rocket: Features

  • Built for QBCore & QBox – Fully compatible with both popular frameworks.
  • Supports ox_target, qb-target, and qtarget – Seamless interaction with all major targeting systems.
  • Compatible with qb-inventory & ox_inventory – Works out of the box with the most used inventory systems (easily implement others).
  • Sleek Vue 3 UI – Fast, modern, and highly responsive interface.
  • Lobby System – Host, join, and customize games with up to 12 players.
  • Player Customization – Avatars, calling cards, loadouts & more to personalize the experience.
  • Scoreboard & Kill Feed – Real-time stat tracking and alerts.
  • Optional Item Requirement – Restrict lobby start to specific items.
  • Victory & Defeat Cinematics – Fully customizable outcomes.
  • Multiple Maps – Mirror Park, Grove Street, Shipment, Pier, and more.
  • Developer Friendly – Fully modular and extendable.
  • Optimized & Secure – Runs clean, even in high-pop servers.
  • Spectate Menu – Watch ongoing games without interrupting gameplay.
  • Leaderboard – Track top players and stats over time.

:wrench: Configuration Highlights

  • Map Customization – Adjust spawn points, victory conditions, weapons, and radius per map.
  • Enhanced Experience – Enable props, loading screens, custom emotes, or blips.
  • Access Control – Control lobby access with an optional item requirement.
  • Fully Configurable – Easily modify UI, starting location, or revive logic.
Screenshots


Config

Config = {
    Maps = {
        [0] = "Mirror Park",
        [1] = "Grove Street",
        [2] = "Pier",
        [3] = "Shipment",
        [4] = "Construction",
        [5] = "LSGF"
    },
    DefaultAvatar = 'https://i.scdn.co/image/ab67616100005174e03a98785f3658f0b6461ec4',
    DefaultCallingCard = 'https://static.wikia.nocookie.net/callofduty/images/2/24/Toxic_calling_card_BO3.png',
    Guns = {
        ['SPECIAL CARBINE'] = "weapon_specialcarbine",
        ['CARBINE MK2'] = 'weapon_specialcarbine_mk2',
        ['AK47'] = "weapon_assaultrifle",
        ['CARBINE RIFLE'] = "weapon_carbinerifle",
        ['CARBINE RIFLE MK2'] = "weapon_carbinerifle_mk2",
        ['DEAGLE'] = "weapon_pistol50",
        ['MICRO SMG'] = "weapon_microsmg",
        ['PDW'] = "weapon_combatpdw", 
        ['SMG'] = "weapon_smg",
        ['TEC9'] = "weapon_machinepistol", 
        ['MINI SMG'] = "weapon_minismg",
        ['HEAVY PISTOL'] = "weapon_heavypistol",
        ['COMBAT PISTOL'] = "weapon_combatpistol",
        ['AP PISTOL'] = "weapon_appistol",
        ['USP45'] = "weapon_sp45",
        ['PUMP SHOTGUN'] = "weapon_pumpshotgun",
        ['MARKSMAN RIFLE'] = "weapon_marksmanrifle_mk2",
        ['GUSENBERG'] = "weapon_gusenberg",
        ['ASSAULT SMG'] = "weapon_assaultsmg",
        ['SAWNOFF SHOTGUN'] = "weapon_sawnoffshotgun",
        ['ASSAULT SHOTGUN'] = "weapon_assaultshotgun",
        ['PUMP SHOTGUN MK2'] = "weapon_pumpshotgun_mk2",
        ['GLOCK 22'] = "weapon_glock22",
        ['UZI'] = "weapon_uzi", 
        ['STECH AP'] = "weapon_fnx45",
        ['COLT PISTOL'] = "weapon_colt",
    },
    WinningEmote = 'e bloodwalk2',
    Coords = {
        ['Mirror Park'] = {
            centerCoords = vector3(1346.97, -570.25, 74.36),
            esb = {
                [1] = vector4(1408.36, -608.09, 74.39, 227.66),
                [2] = vector4(1408.73, -606.85, 74.40, 226.99),
                [3] = vector4(1409.10, -605.61, 74.41, 226.99),
                [4] = vector4(1409.47, -604.37, 74.42, 226.99),
                [5] = vector4(1409.84, -603.13, 74.43, 226.99),
                [6] = vector4(1410.21, -601.89, 74.44, 226.99)
            },
            gsf = {
                [1] = vector4(1297.23, -510.59, 71.03, 64.59),
                [2] = vector4(1296.99, -511.47, 71.01, 56.57),
                [3] = vector4(1296.71, -512.12, 70.97, 60.65),
                [4] = vector4(1296.45, -512.85, 70.95, 60.65),
                [5] = vector4(1296.19, -513.52, 70.93, 60.65),
                [6] = vector4(1295.93, -514.19, 70.91, 60.65)
            },
            winnerCoords = { 
                [1] = vector4(1367.24, -579.90, 74.38, 59.78),
                [2] = vector4(1368.25, -577.50, 74.38, 92.55),
                [3] = vector4(1365.58, -582.26, 74.38, 27.08),
            },
            cameraCoords = vector4(1363.68, -577.82946777344, 75.06746673584, 239.57577514648),
            looserCoords = vector4(1355.44, -572.98284912109, 73.013000488281, 239.57577514648),
            radiusInfo = {
                shape = 1,
                length = 200.0,
                width = 200.0,
            },
            bombSpawns = {
                -- [1] = vector4(1367.96, -548.05, 74.34, 69.20),
                -- [1] = vector4(1311.17, -593.10, 72.93, 150.96),
                [1] = vector4(1342.51, -598.70, 74.70, 144.33) 
            },
            bombCameraCoords = {
                -- [1] = vector4(1310.98, -579.25, 78.32, 204.67),
                [1] = vector4(1351.79, -593.83, 74.36, 110.02),
            },
            sndCameraCoords = vector4(1362.61, -576.47, 84.42, 67.39)
        },
        ['Grove Street'] = {
            centerCoords = vector4(47.23, -1891.56, 21.90, 228.13),
            esb = {
                [1] = vector4(10.26, -1830.02, 24.88, 40.92),
                [2] = vector4(11.26, -1828.87, 24.87, 48.88),
                [3] = vector4(12.14, -1827.89, 24.87, 48.88),
                [4] = vector4(12.95, -1826.97, 24.87, 48.88),
                [5] = vector4(13.71, -1826.11, 24.89, 49.15),
                [6] = vector4(14.67, -1824.99, 24.92, 49.93),
            },
            gsf = {
                [1] = vector4(87.88, -1971.60, 20.75, 49.07),
                [2] = vector4(88.60, -1970.78, 20.75, 49.07),
                [3] = vector4(89.70, -1969.53, 20.75, 49.07),
                [4] = vector4(90.75, -1968.34, 20.75, 49.07),
                [5] = vector4(91.87, -1967.06, 20.75, 49.07),
                [6] = vector4(93.03, -1965.76, 20.75, 49.07),
            },
            cameraCoords = vector4(98.10, -1934.14, 20.86, 229.54),
            looserCoords = vector4(84.82, -1923.33, 20.83, 240.66),
            winnerCoords = {
                [1] = vector4(100.18, -1935.96, 20.80, 44.65),
                [2] = vector4(101.23, -1934.53, 20.80, 65.84),
                [3] = vector4(98.86, -1937.20, 20.80, 25.17)
            },
            radiusInfo = {
                shape = 1,
                length = 200.0,
                width = 200.0,
            },
        },
        ['Pier'] = {
            centerCoords = vector4(-1655.84, -1085.28, 13.15, 228.30),
            esb = {
                [1] = vector4(-1711.45, -1111.54, 13.15, 106.73),
                [2] = vector4(-1711.01, -1113.20, 13.15, 100.25),
                [3] = vector4(-1711.09, -1115.14, 13.15, 99.50),
                [4] = vector4(-1710.38, -1116.95, 13.15, 108.06),
                [5] = vector4(-1710.29, -1118.53, 13.15, 100.04),
                [6] = vector4(-1710.66, -1120.62, 13.15, 87.70),
            },
            gsf = {
                [1] = vector4(-1609.57, -1019.27, 13.11, 325.57),
                [2] = vector4(-1610.86, -1018.27, 13.12, 326.36),
                [3] = vector4(-1612.42, -1017.29, 13.13, 322.72),
                [4] = vector4(-1613.64, -1016.04, 13.13, 324.48),
                [5] = vector4(-1615.04, -1015.06, 13.13, 324.49),
                [6] = vector4(-1616.54, -1013.99, 13.13, 322.05),
            },
            cameraCoords = vector4(-1843.75, -1223.62, 13.53, 139.21),
            looserCoords = vector4(-1831.91, -1212.97, 13.02, 139.31),
            winnerCoords = {
                [1] = vector4(-1845.26, -1225.57, 13.02, 323.92),
                [2] = vector4(-1847.00, -1224.51, 13.02, 305.92),
                [3] = vector4(-1843.96, -1226.92, 13.02, 323.92)
            },
            radiusInfo = {
                shape = 1,
                length = 200.0,
                width = 200.0,
            },
        },
        ['Shipment'] = {
            centerCoords = vector4(1123.45, -2854.62, 8.93, 180.01),
            esb = {
                [1] = vector4(1139.14, -2873.23, 8.05, 42.58),
                [2] = vector4(1138.11, -2875.33, 8.05, 40.92),
                [3] = vector4(1140.35, -2871.66, 8.05, 65.54),
                [4] = vector4(1130.71, -2877.18, 8.05, 350.66),
                [5] = vector4(1140.58, -2865.31, 8.05, 80.59),
                [6] = vector4(1139.69, -2862.17, 8.05, 89.12),
            },
            gsf = {
                [1] = vector4(1102.71, -2839.19, 8.05, 270.09),
                [2] = vector4(1102.68, -2837.37, 8.05, 270.79),
                [3] = vector4(1102.81, -2835.57, 8.05, 259.13),
                [4] = vector4(1103.13, -2833.56, 8.05, 239.40),
                [5] = vector4(1105.62, -2835.44, 8.05, 222.54),
                [6] = vector4(1105.40, -2838.43, 8.05, 258.82),
            },
            cameraCoords = vector4(1133.82, -2854.45, 13.19, 270.59),
            looserCoords = vector4(1131.74, -2853.45, 8.05, 262.42),
            winnerCoords = {
                [1] = vector4(1138.33, -2854.38, 13.52, 90.74),
                [2] = vector4(1138.32, -2851.46, 13.52, 106.43),
                [3] = vector4(1138.42, -2857.26, 13.52, 65.73)
            },
            radiusInfo = {
                shape = 1,
                length = 75.0,
                width = 75.0,
            },
        },
        ['Construction'] = {
            centerCoords = vector4(84.70, -379.50, 40.72, 42.49),
            esb = {
                [1] = vector4(112.90, -343.61, 43.15, 130.67),
                [2] = vector4(111.72, -342.63, 43.20, 155.18),
                [3] = vector4(109.67, -341.57, 43.27, 149.74),
                [4] = vector4(107.31, -340.49, 43.33, 156.42),
                [5] = vector4(115.04, -348.60, 42.67, 95.59),
                [6] = vector4(114.56, -352.01, 42.60, 73.99),
            },
            gsf = {
                [1] = vector4(11.74, -450.24, 39.92, 155.40),
                [2] = vector4(14.13, -450.80, 39.92, 161.19),
                [3] = vector4(16.04, -451.40, 39.92, 163.36),
                [4] = vector4(3.07, -447.50, 39.82, 227.21),
                [5] = vector4(1.80, -450.08, 39.83, 253.15),
                [6] = vector4(1.53, -452.75, 39.91, 270.95),
            },
            cameraCoords = vector4(50.29, -393.94, 72.87, 237.69),
            looserCoords = vector4(37.20, -388.54, 73.94, 238.01),
            winnerCoords = {
                [1] = vector4(53.58, -396.07, 73.94, 58.50),
                [2] = vector4(1138.32, -2851.46, 13.52, 106.43),
                [3] = vector4(54.01, -393.70, 73.94, 81.59)
            },
            radiusInfo = {
                shape = 1,
                length = 225.0,
                width = 225.0,
            },
        },
        ['LSGF'] = {
            centerCoords = vector4(2478.12, -384.07, 94.40, 85.87),
            esb = {
                [1] = vector4(2511.09, -318.09, 92.99, 44.26),
                [2] = vector4(2509.46, -319.26, 92.99, 39.61),
                [3] = vector4(2508.14, -320.39, 92.99, 39.77),
                [4] = vector4(2506.71, -321.54, 92.99, 33.48),
                [5] = vector4(2505.92, -323.00, 92.99, 34.95),
                [6] = vector4(2504.62, -323.96, 92.99, 36.74),
            },
            gsf = {
                [1] = vector4(2491.74, -459.00, 92.99, 4.06),
                [2] = vector4(2490.20, -459.11, 92.99, 3.37),
                [3] = vector4(2488.09, -458.92, 92.99, 355.37),
                [4] = vector4(2486.04, -458.51, 92.99, 345.73),
                [5] = vector4(2484.52, -456.81, 92.99, 335.09),
                [6] = vector4(2482.74, -455.75, 92.99, 323.59),
            },
            cameraCoords = vector4(2508.77, -383.56, 94.03, 90.05),
            looserCoords = vector4(2517.06, -383.81, 93.14, 92.10),
            winnerCoords = {
                [1] = vector4(2504.93, -383.72, 94.12, 269.96),
                [2] = vector4(2505.04, -386.39, 94.12, 281.05),
                [3] = vector4(2504.99, -380.69, 94.12, 243.59)
            },
            radiusInfo = {
                shape = 1,
                length = 250.0,
                width = 250.0,
            },
        },
    },
    ReturnSpawn = vector4(-1664.35, -1068.78, 12.76, 276.54), -- Spawn point to return to after the game ends
    ReviveEvent = 'hospital:client:Revive', -- Event to revive the player
    RequireItem = false, -- If true, the host will need to have the item in their inventory to start a game
    RequiredItem = 'comiccoinlow', -- Item Name
    RequiredItemAmount = 1, -- Per Player
    OneShotHeadshots = false, -- Set to true when your server is running one tap headshots
    RadioItem = 'radio',
    OxyItem = 'oxy',
    ArmourItem = 'armour',
    GiveItem = function(src, item, amount, metaData) -- Your method of giving the item to the player (called from server-side.)
        -- ox_inventory:
        exports['ox_inventory']:AddItem(src, item, amount, metaData)
        
        -- qb-inventory:
        -- exports['qb-inventory']:AddItem(src, item, 1, false, metaData)
    end,
    GetItemCount = function(src, item) -- Your method of getting the item count from the player (called from server-side.)
        -- ox_inventory:
        local itemCount = exports['ox_inventory']:GetItemCount(src, item)
        
        return itemCount
    end,
    RemoveItem = function(src, item, amount) -- Your method of removing the item from the player (called from server-side.)
        -- ox_inventory:
        exports['ox_inventory']:RemoveItem(src, item, amount)
        
        -- qb-inventory:
        -- exports['qb-inventory']:RemoveItem(src, item, 1, false, metaData)
    end,
    ReturnInventory = function(src) -- Your method of returning the inventory to the player (called from server-side.)
        -- ox_inventory:
        exports['ox_inventory']:ReturnInventory(src)
        
    end,
    ConfiscateInventory = function(src) -- Your method of confiscating the inventory from the player (called from server-side.)
        -- ox_inventory:
        exports['ox_inventory']:ConfiscateInventory(src)
    end,
    TargetSystem = 'qb-target', -- Target System to use. Options: qb-target, ox_target, qtarget
    StartingLocation = vector4(-286.83865356445, -1919.7049560547, 29.946039199829, 140.23429870605), -- Starting location for the game
}

Code is accessible No
Subscription-based No
Lines (approximately) 1400
Requirements qb-core/qbox/ox_target/qb-target/qtarget/qb-inventory/ox_inventory/infinite-handler
Support Yes