[ESX] & [QBCORE] & [QBOX] Money Print Script

Showcase
MONEY PRINT SCRIPT

Purchase
[QBCore & ESX & QBOX] - Money Print Script

Extracting Ink
Extracting Ink

Custom Minigame (certify printed money sheet)
Custom Minigame

Cutting Money Sheet
Cutting Money Sheet

Features

  • Step-by-Step Printing System: Start by searching abandoned printers or extracting ink to collect black and color ink. Purchase blank sheets and use blueprints to avoid wasting materials.
  • Blueprint System: Buy black blueprints from a dealer or hack a laptop to get rare color blueprints. Each blueprint gives exact ink combinations for better efficiency.
  • Microscope Minigame: Use the microscope to certify your printed money. Complete a custom minigame—pass to upgrade your sheet, but fail and risk losing it.
  • Cutting Table Process: Once certified, take the sheets to the cutting table. Each sheet type has a multiplier that increases its cash value.
  • Admin Placement Menu: Admins can easily place money printers and cutting tables anywhere using the built-in admin menu.
  • Dynamic Shop System: Shop and blueprint dealers work based on in-game time, and pricing can change with dynamic multipliers.
  • Anti-Exploit Protection: Automatic kick for cheating attempts, and restricted zones prevent usage in areas like PD or hospitals.
  • Custom Props & Effects: Includes a custom money printer machine prop and fully synced animations and particle effects.
  • Fully Configurable: All features are customizable through the config file. Adjust item prices, timers, blueprint logic, and more.

Optimization
Full optimized.
0.00 ms

Code is accessible No
Subscription-based No
Lines (approximately) : ~5000
Requirements d3MBA-lib - Support most popular context menus (ox_lib, qb-menu, nh-context) - (ox_inputmenu, qb-input, nh-keyboard) (ox_target, qtarget, qb-target), PolyZone
Support Yes

Other Resources

Config

Config.DebugPolyZone = false -- [true/false] - If you want to see polyzone borders, set it to 'true' (Config.DebugPolyZone = true) 

Config.KickReason = "[d3MBA-moneyprint] | Protection!" -- Kick reason if player try to cheat.

Config.BlacklistZonesDebug = false -- true/flase | Default: false | If you set this to true, you will see the Blacklist Zones in the game (marker).
Config.BlacklistZones = { -- Blacklist zones where player can't do actions. 
    {coords = vector3(453.1656, -985.860, 30.689), radius = 70.0}, -- MRPD 
    {coords = vector3(332.6394, -582.348, 43.224), radius = 70.0}, -- Pillbox Hospital 
    
    -- Add more zones as needed
}

-- Config.JobRequired = "JOB_NAME" -- if you want to disable it just set it to 'false' (Config.JobRequired = false) 
Config.JobRequired = false -- Job name e.g. Config.JobRequired = "moneyprint", make sure you have that job in the your framework(qbcore, esx, qbox...)

-- Particles synchronization   
Config.SyncParticlesWithAllPlayers = { -- If is false particles will see only the player who triggered it. 
    ExtractingInk = true, -- [true/false] - If you want to sync particles with all players, set it to 'true'
    SearchPrinter = true, -- [true/false] - If you want to sync particles with all players, set it to 'true'
}

Config.ShopPed = {
    Use = true, -- [true/false] - Set this to false if you want to disable the shop.

    Account = "cash", -- (bank / cash) | Default: cash | If you set this to bank, you will pay from bank account.

    Model = "a_m_m_og_boss_01", -- https://docs.fivem.net/docs/game-references/ped-models/ - Ped model that will be spawned.
    Pos = vector4(699.2208, 3114.972, 43.092, 267.11), -- Pos = position of shop ped.

    TimeCheck = {
        Use = true, -- (true/false) | Default: true | If you set this to false, shop will be open 24/7. 
        CheckTime = 3, -- Every 3 sec scitpt will check in game time. 
        OpeningTime = 23, -- Shop opening time = 23:00 PM.
        ClosingTime = 07, -- Shop close time = 07:00 AM.
    },  

    OpenShopAfterBuy = false, -- [true/false] If true, script will open shop menu again after player bought something

    DynamicPrices = {
        Use = true, -- [true/false] - If you want to use dynamic prices, set it to 'true'
        PriceMinMultiplier = 0.7, -- Min price multiplier, 70% of original price
        PriceMaxMultiplier = 1.5, -- Max price multiplier, 150% of original price
    },

    Items = {
        -- ItemName = name of item, Price = price of item
        {ItemName = Config.Items.Sheet, Price = 250},
        {ItemName = Config.Items.Microscope, Price = 2500},
        {ItemName = Config.Items.Printer, Price = 500},
        {ItemName = Config.Items.HackingLaptop, Price = 2000},
    }

}

Config.BlueprintPed = {
    Use = true, -- [true/false] - Set this to false if you want to disable the shop.

    Account = "cash", -- (bank / cash) | Default: cash | If you set this to bank, you will pay from bank account.
    
    Model = "a_m_m_og_boss_01", -- https://docs.fivem.net/docs/game-references/ped-models/ - Ped model that will be spawned.
    Pos = vector4(756.7084, -2212.19, 19.963, 267.39), -- Pos = position of shop ped.

    TimeCheck = {
        Use = true, -- (true/false) | Default: true | If you set this to false, shop will be open 24/7. 
        CheckTime = 3, -- Every 3 sec scitpt will check in game time. 
        OpeningTime = 23, -- Shop opening time = 23:00 PM.
        ClosingTime = 07, -- Shop close time = 07:00 AM.
    },  

    OpenShopAfterBuy = false, -- [true/false] If true, script will open shop menu again after player bought something

    DynamicPrices = {
        Use = true, -- [true/false] - If you want to use dynamic prices, set it to 'true'
        PriceMinMultiplier = 0.7, -- Min price multiplier, 70% of original price
        PriceMaxMultiplier = 1.5, -- Max price multiplier, 150% of original price
    },

    Items = {
        -- ItemName = name of item, Price = price of item
        {ItemName = Config.Items.BlackBlueprint1, Price = 250},
        {ItemName = Config.Items.BlackBlueprint2, Price = 500},
        {ItemName = Config.Items.BlackBlueprint3, Price = 1000},

    }
}

Config.HackingLaptop = {
    Prop = "m23_1_prop_m31_laptop_01a", -- Prop = set prop that will be spawned.

    PlacingTime = {
        HackingLaptop = 3,
    }, 

    PickingUpTime = {
        HackingLaptop = 2, -- Time in seconds to pick up the microscope.
    }, 
    
}

Config.PrintMachine = {
    Prop = "d3mba_cash_machine_prop", -- Prop = set prop that will be spawned.

    AnimTime = 3, -- Time in seconds to add/remove/takeout the ink, sheet, and money sheet from the printer.

    PrintingTime = { -- Random time to print the money sheet (in seconds)
        Min = 45, -- Min time in seconds to print the money sheet.
        Max = 70, -- Max time in seconds to print the money sheet.
    },

    BillRecipe = {   
        [Config.Items.PrintedMoneySheet1] = {
            Recipe = {
                [Config.Items.BlackInk] = {14, 20},-- [BILL VALUE] = { [RANGE MIN, RANGE MAX] }
                [Config.Items.ColorInk] = {5, 8},
            }
        },
        [Config.Items.PrintedMoneySheet2] = {
            Recipe = {
                [Config.Items.BlackInk] = {9, 13}, -- [BILL VALUE] = { [RANGE MIN, RANGE MAX] }
                [Config.Items.ColorInk] = {9, 12},
            }
        },  
        [Config.Items.PrintedMoneySheet3] = {
            Recipe = {                
                [Config.Items.BlackInk] = {3, 7}, -- [BILL VALUE] = { [RANGE MIN, RANGE MAX] }
                [Config.Items.ColorInk] = {14, 19},
            }
        },

        -- Add more recipes if needed, make sure that the recipe is in this format.
        -- Don't forget to add the item to the Config.Items (config/items.lua), and your inventory/framework (qbcore/esx)
    },

    BillValue = { -- Bill value of printed money sheet (certified(using microscope) and uncertified)
        -- Cerfified money sheet value
        [Config.Items.CertifiedMoneySheet1] = 20, -- 20$ bill value
        [Config.Items.CertifiedMoneySheet2] = 50, -- 50$ bill value
        [Config.Items.CertifiedMoneySheet3] = 100, -- 100$ bill value
        -- Uncertified money sheet value
        [Config.Items.PrintedMoneySheet1] = 20, -- 20$ bill value
        [Config.Items.PrintedMoneySheet2] = 50, -- 50$ bill value
        [Config.Items.PrintedMoneySheet3] = 100, -- 100$ bill value

        -- Add more bill values if needed, make sure that the item is in the Config.Items (config/items.lua), and your inventory/framework (qbcore/esx)
    }
}

Config.Printer = {
    Prop = { -- Prop = set
        "v_ret_gc_print",
        "v_res_printer",
        "prop_printer_01",
    }, 

    SearchingTime = 5, 

    BlackInk = {
        Chance = 20, -- [1-100] - Chance to get black ink. (20 = 80% chance to get black ink)
        Amount = {Min = 2, Max = 6}, -- Amount of black ink that player can get.
    },

    ColorInk = {
        Chance = 60, -- [1-100] - Chance to get color ink. (60 = 40% chance to get color ink)
        Amount = {Min = 1, Max = 4}, -- Amount of color ink that player can get.
    },
    
    ResetTime = 15, -- ResetTime = time to reset prop in minutes 

    UseMiniGame = true, -- true/false if is true, you will need to play minigame to pick up the kerosene.

}

Config.ExtractingInk = {
    Time = 10, 
    
    BlackInk = {
        Chance = 20, -- [1-100] - Chance to get black ink. (20 = 80% chance to get black ink)
        Amount = {Min = 2, Max = 6}, -- Amount of black ink that player can get.
    },

    ColorInk = {
        Chance = 60, -- [1-100] - Chance to get color ink. (60 = 40% chance to get color ink)
        Amount = {Min = 1, Max = 4}, -- Amount of color ink that player can get.
    }
}

Config.Microscope = {
    Prop = "v_med_microscope", -- Prop = set prop that will be spawned.
    
    PlacingTime = {
        Microscope = 5, -- Time in seconds to place the microscope.
        PrintedMoneySheet = 3, -- Time in seconds to place the printed money sheet.
    }, 

    PickingUpTime = {
        Microscope = 5, -- Time in seconds to pick up the microscope.
        PrintedMoneySheet = 3, -- Time in seconds to pick up the printed money sheet.
        CertifiedMoneySheet = 4, -- Time in seconds to pick up the certified money sheet.
    }, 
    
    Minigame = { -- Minigame settings
        NumberOfRotations = { -- Random number of rotations (between min and max value below)
            Min = 5, -- Min number of rotations
            Max = 8, -- Max number of rotations
        },

        Speed = { -- Random speed of rotation(between min and max value below) 
            Min = 5, -- Min speed of rotation
            Max = 7, -- Max speed of rotation
        },

        ChanceToRemoveItemOnFail = 20, -- [1-100] - Chance to remove item on fail. (20 = 80% chance to remove item on fail) SET TO 0 IF YOU DON'T WANT TO REMOVE ITEM ON FAIL!
    }
}

Config.CuttingTable = {
    Prop = "bkr_prop_fakeid_papercutter", 

    CuttingTime = 44, -- Time in seconds to cut the printed money sheet. (default: 44 seconds)

    BillValueMultiplier = 100, -- Multiplier for the bill value. (e.g. 100 * 100$ = 10000$ (player will get 10000$ (10k$) for cutting the printed money sheet))
}

Config.Rotation = {    
    -- Here you can find key codes: https://docs.fivem.net/docs/game-references/controls/
    RotationCounterClockwise = 189, -- 189 = "ARROW LEFT" key
    RotationClockwise = 190, -- 190 = "ARROW RIGHT" key

    Submit = 38, -- 38 = "E" key
    Cancel = 47, -- 47 = "G" key
    
    Text3D = { -- Position of 3D text that will be displayed when you rotate the object. 
        x = 0.365, -- x = 0.365 | 0.365 = center of the screen | 0.0 = left side of the screen | 1.0 = right side of the screen  
        y = 0.95 -- y = 0.95 | 0.95 = bottom of the screen | 0.0 = top of the screen | 1.0 = bottom of the screen 
    },
}

Items

Config.Items = {

    Sheet = "money_print_sheet",
    BlackInk = "money_print_black_ink",
    ColorInk = "money_print_color_ink",

    Microscope = "money_print_microscope",
    
    Printer = "money_print_printer",

    HackingLaptop = "money_print_hacking_laptop",
    
    BlackBlueprint1 = "money_print_black_blueprint_1", -- Default: Bill value 20$
    BlackBlueprint2 = "money_print_black_blueprint_2", -- Default: Bill value 50$
    BlackBlueprint3 = "money_print_black_blueprint_3", -- Default: Bill value 100$
    -- You can add more blueprints if needed.

    -- ⚠️USE SAME ITEM FORMAT FOR ADDING NEW ITEMS!!!:⚠️
    -- BlackBlueprint4 = "money_print_black_blueprint_4",

    ColorBlueprint1 = "money_print_color_blueprint_1", -- Default: Bill value 20$
    ColorBlueprint2 = "money_print_color_blueprint_2", -- Default: Bill value 50$
    ColorBlueprint3 = "money_print_color_blueprint_3", -- Default: Bill value 100$
    -- You can add more blueprints if needed.
    
    -- ⚠️USE SAME ITEM FORMAT FOR ADDING NEW ITEMS!!!:⚠️
    -- ColorBlueprint4 = "money_print_color_blueprint_4",
    
    PrintedMoneySheet1 = "money_print_printed_money_sheet_1", -- Default: Bill value 20$
    PrintedMoneySheet2 = "money_print_printed_money_sheet_2", -- Default: Bill value 50$
    PrintedMoneySheet3 = "money_print_printed_money_sheet_3", -- Default: Bill value 100$
    -- You can add more printed money sheets if needed.

    -- ⚠️USE SAME ITEM FORMAT FOR ADDING NEW ITEMS!!!:⚠️
    -- PrintedMoneySheet4 = "money_print_printed_money_sheet_4",
    
    CertifiedMoneySheet1 = "money_print_certified_money_sheet_1", -- Default: Bill value 20$
    CertifiedMoneySheet2 = "money_print_certified_money_sheet_2", -- Default: Bill value 50$ 
    CertifiedMoneySheet3 = "money_print_certified_money_sheet_3", -- Default: Bill value 100$
    -- You can add more certified money sheets if needed.

    -- ⚠️USE SAME ITEM FORMAT FOR ADDING NEW ITEMS!!!:⚠️
    -- CertifiedMoneySheet4 = "money_print_certified_money_sheet_4", 
}
1 Like

Nice work :fire:

1 Like