Agency-Blackmarket V2 Configuration
Un marché noir vivant pour FiveM sur QBCore, Qbox, ESX ou entièrement en standalone.

01Configuration
Installation rapide · config.lua · Agency-Blackmarket V2
--[[ ============================================================================
AGENCY BLACKMARKET V2 · CONFIG
----------------------------------------------------------------------------
Every option in this file does something. Prices, levels, dealers, drop
points and police behaviour are all set here; wording is set in the
locales/ folder or, for your own text that survives updates, in
Config.Text at the bottom.
Coordinates: stand where you want a dealer or a drop and read your
position with any /coords tool, or use the admin page of /ablackmarket,
which saves spots in game without touching this file.
============================================================================ ]]
Config = {}
-- =============================================================================
-- 1. GENERAL
-- =============================================================================
Config.Locale = 'en' -- en de fr es pt it nl pl cs ro tr ru uk sv da fi hu hr el bg hi ja ko zh ar
Config.Debug = false -- extra lines in the server console and F8
-- 'auto' finds QBCore, Qbox or ESX by itself and runs standalone when none of
-- them is installed. Force one with 'qbcore', 'qbox', 'esx' or 'standalone'.
Config.Framework = 'auto'
-- 'auto' | 'ox' | 'qs' | 'framework' (qb-inventory, ps, lj, jpr and ESX)
Config.Inventory = 'auto'
Config.Currency = '$' -- written before every amount
-- Admins: the ACE agency.blackmarket, group.admin, or one of these groups.
Config.AdminGroups = { 'admin', 'god', 'superadmin' }
-- Messages: Agency-Notify when it runs, otherwise the menu's own cards.
-- Set to false to always use the menu's cards.
Config.UseAgencyNotify = true
-- =============================================================================
-- 2. MENU, INTERACTION AND COMMANDS
-- =============================================================================
Config.Menu = {
-- The one command of the resource. Opens your contacts anywhere: level,
-- orders with waypoints, runs, messages, the Companion app and, for
-- admins, the admin page.
command = 'ablackmarket',
key = '', -- default key for the command, '' = none (players can bind one in the GTA settings)
item = nil, -- an item needed to open it anywhere, e.g. 'burnerphone'; nil = no item
scale = 1.0, -- size of the menu, 0.8 to 1.3
}
Config.Interaction = {
key = 38, -- E, see docs.fivem.net/docs/game-references/controls
keyLabel = 'E', -- what the prompt shows
distance = 2.2, -- metres to a dealer or a drop
-- 'auto' uses ox_target or qb-target when one runs, the prompt otherwise.
-- 'ox_target' | 'qb-target' | false (always the prompt)
target = 'auto',
}
-- =============================================================================
-- 3. MONEY
-- =============================================================================
Config.Money = {
-- How dirty money exists on this server:
-- 'auto' ESX: the account below. Qbox: the item below. QBCore: the
-- item below when ox_inventory knows it, marked bills otherwise.
-- Standalone: the script keeps it (see Config.Standalone).
-- 'markedbills' QBCore marked bills, one item carrying its worth
-- 'item' a plain item where one piece is one dollar
-- 'account' an account of the framework (ESX black_money)
-- 'wallet' kept by this script
dirty = 'auto',
markedItem = 'markedbills',
item = 'black_money',
account = 'black_money',
-- What the dealers take, in this order. The player picks in the basket
-- when more than one is allowed. 'dirty' | 'cash' | 'bank'
buyWith = { 'dirty', 'cash' },
-- Agency Pay from Agency Phone. When the phone runs on this server, the
-- basket offers Agency Pay as well, for buying and for orders: the phone
-- opens, the player confirms the payment there and the money comes from
-- his bank account. Nothing to set up; enabled = false hides it.
-- resource the name of the Agency Phone resource
-- timeout seconds the player has to confirm on the phone
agencyPay = { enabled = true, resource = 'agency-phone', timeout = 90 },
}
-- =============================================================================
-- 4. REPUTATION
-- =============================================================================
-- Five levels by default. `rep` is the reputation a level starts at; the
-- rest are the perks of that level:
-- buy % off every purchase
-- sell % more for everything sold
-- launder % the laundry keeps
-- orders open orders at the same time
Config.Reputation = {
levels = {
{ name = 'Street Punk', rep = 0, buy = 0, sell = 0, launder = 25, orders = 1 },
{ name = 'Small Timer', rep = 50, buy = 5, sell = 3, launder = 22, orders = 1 },
{ name = 'Regular', rep = 150, buy = 10, sell = 6, launder = 20, orders = 2 },
{ name = 'Trusted', rep = 300, buy = 15, sell = 9, launder = 17, orders = 2 },
{ name = 'VIP', rep = 500, buy = 20, sell = 12, launder = 15, orders = 3 },
},
-- One point per `per` dollars, at least `min` per deal.
gain = {
buy = { per = 1000, min = 1 },
sell = { per = 1000, min = 1 },
launder = { per = 2500, min = 1 },
pickup = 2, -- extra points for collecting an order
},
-- Points lost for walking out on a dealer.
loss = {
refuseSurcharge = { 3, 8 }, -- said no when the dealer wanted more
refuseCut = { 5, 12 }, -- said no when the fence wanted a cut
},
}
-- =============================================================================
-- 5. DEALERS
-- =============================================================================
-- Every dealer has his own places, his own stock and his own services:
-- buy the market (items from Config.Items in his categories)
-- orders orders for pickup at a drop point
-- sell buys stolen goods (Config.Sell)
-- launder washes dirty money (Config.Launder)
-- jobs hands out courier runs (Config.Jobs)
-- `rotate` minutes until he moves to another of his places, 0 = never.
-- `hours` { from = 20, to = 6 } for night dealers, false = always there.
-- `blip` mode 'always' (everyone), 'known' (players who dealt with him),
-- 'never'. Sprites and colours: docs.fivem.net/docs/game-references/blips
Config.Dealers = {
{
id = 'vince',
label = 'Vince',
role = 'Dealer',
services = { buy = true, orders = true, jobs = true },
categories = { 'pistols', 'smgs', 'shotguns', 'rifles', 'melee', 'ammo', 'armor', 'tools' },
ped = { model = 's_m_y_dealer_01', scenario = 'WORLD_HUMAN_DRUG_DEALER' },
rotate = 120,
hours = false,
blip = { mode = 'always', sprite = 110, color = 1, scale = 0.8, label = 'Contact' },
places = {
vector4(-1318.80, -906.91, 11.31, 200.0),
vector4(-58.95, -1230.97, 28.84, 43.6),
vector4(134.53, -1276.06, 29.32, 291.3),
},
},
{
id = 'marlow',
label = 'Marlow',
role = 'Fence',
services = { sell = true, launder = true, jobs = true },
ped = { model = 'a_m_m_og_boss_01', scenario = 'WORLD_HUMAN_CLIPBOARD' },
-- The washing machine next to him. offset: metres to his right, in
-- front, up. false = laundering happens right where he stands.
laundry = { model = 'prop_washer_01', offset = vector3(1.8, 0.2, 0.0) },
rotate = 180,
hours = false,
blip = { mode = 'known', sprite = 500, color = 1, scale = 0.8, label = 'Fence' },
places = {
vector4(-1143.72, -1547.31, 4.38, 35.4),
vector4(-894.70, -1516.03, 5.02, 109.8),
},
},
}
-- Dealers show up for a player when he is this close, and vanish again past
-- the second value. Their positions never reach players further away.
Config.StreamDistance = { show = 120.0, hide = 160.0 }
-- =============================================================================
-- 6. THE MARKET
-- =============================================================================
Config.Categories = {
{ id = 'pistols', label = 'Pistols', icon = 'pistol' },
{ id = 'smgs', label = 'SMGs', icon = 'smg' },
{ id = 'shotguns', label = 'Shotguns', icon = 'shotgun' },
{ id = 'rifles', label = 'Rifles', icon = 'rifle' },
{ id = 'melee', label = 'Melee', icon = 'melee' },
{ id = 'ammo', label = 'Ammunition', icon = 'ammo' },
{ id = 'armor', label = 'Armor', icon = 'armor' },
{ id = 'tools', label = 'Tools', icon = 'tools' },
}
-- item the item name on QBCore and ESX (weapons: weapon_...)
-- ox the name in ox_inventory when it differs (ammo, armour)
-- price base price, the market moves it up and down (Config.Prices)
-- level reputation level needed to buy it
-- stock pieces per dealer, false = unlimited. Refills with Config.Stock.
-- order true = can be ordered for pickup, 'only' = order only (never over the counter)
-- ammo standalone only: the ammo type a piece gives, and how many rounds
Config.Items = {
-- Pistols
{ item = 'weapon_snspistol', label = 'SNS Pistol', category = 'pistols', price = 2400, level = 1, stock = 8, order = true },
{ item = 'weapon_pistol', label = 'Pistol', category = 'pistols', price = 3000, level = 1, stock = 8, order = true },
{ item = 'weapon_pistol50', label = 'Pistol .50', category = 'pistols', price = 4200, level = 2, stock = 5, order = true },
{ item = 'weapon_revolver', label = 'Heavy Revolver', category = 'pistols', price = 5200, level = 3, stock = 3, order = true },
-- SMGs
{ item = 'weapon_microsmg', label = 'Micro SMG', category = 'smgs', price = 6500, level = 2, stock = 4, order = true },
{ item = 'weapon_minismg', label = 'Mini SMG', category = 'smgs', price = 7200, level = 3, stock = 3, order = true },
{ item = 'weapon_smg', label = 'SMG', category = 'smgs', price = 8500, level = 3, stock = 3, order = true },
-- Shotguns
{ item = 'weapon_sawnoffshotgun', label = 'Sawed-Off Shotgun', category = 'shotguns', price = 7800, level = 3, stock = 3, order = true },
{ item = 'weapon_dbshotgun', label = 'Double Barrel Shotgun', category = 'shotguns', price = 8600, level = 3, stock = 2, order = true },
{ item = 'weapon_pumpshotgun', label = 'Pump Shotgun', category = 'shotguns', price = 9800, level = 4, stock = 2, order = true },
-- Rifles
{ item = 'weapon_compactrifle', label = 'Compact Rifle', category = 'rifles', price = 11000, level = 4, stock = 2, order = true },
{ item = 'weapon_assaultrifle', label = 'Assault Rifle', category = 'rifles', price = 13500, level = 4, stock = 2, order = 'only' },
{ item = 'weapon_carbinerifle', label = 'Carbine Rifle', category = 'rifles', price = 15000, level = 5, stock = 1, order = 'only' },
-- Melee
{ item = 'weapon_bat', label = 'Baseball Bat', category = 'melee', price = 350, level = 1, stock = 10, order = true },
{ item = 'weapon_crowbar', label = 'Crowbar', category = 'melee', price = 400, level = 1, stock = 8, order = true },
{ item = 'weapon_knife', label = 'Knife', category = 'melee', price = 550, level = 1, stock = 10, order = true },
{ item = 'weapon_switchblade', label = 'Switchblade', category = 'melee', price = 750, level = 1, stock = 8, order = true },
{ item = 'weapon_knuckle', label = 'Brass Knuckles', category = 'melee', price = 650, level = 2, stock = 6, order = true },
{ item = 'weapon_machete', label = 'Machete', category = 'melee', price = 950, level = 2, stock = 6, order = true },
-- Ammunition
{ item = 'pistol_ammo', ox = 'ammo-9', label = 'Pistol Ammo', category = 'ammo', price = 80, level = 1, stock = 60, order = true, ammo = { type = 'AMMO_PISTOL', rounds = 12 } },
{ item = 'shotgun_ammo', ox = 'ammo-shotgun', label = 'Shotgun Ammo', category = 'ammo', price = 110, level = 2, stock = 30, order = true, ammo = { type = 'AMMO_SHOTGUN', rounds = 8 } },
{ item = 'smg_ammo', ox = 'ammo-45', label = 'SMG Ammo', category = 'ammo', price = 120, level = 2, stock = 40, order = true, ammo = { type = 'AMMO_SMG', rounds = 20 } },
{ item = 'rifle_ammo', ox = 'ammo-rifle', label = 'Rifle Ammo', category = 'ammo', price = 180, level = 3, stock = 30, order = true, ammo = { type = 'AMMO_RIFLE', rounds = 30 } },
-- Armor
{ item = 'armor', ox = 'armour', label = 'Body Armor', category = 'armor', price = 1200, level = 1, stock = 10, order = true, armour = 50 },
{ item = 'heavyarmor', label = 'Heavy Armor', category = 'armor', price = 2400, level = 3, stock = 5, order = true, armour = 100 },
-- Tools
{ item = 'lockpick', label = 'Lockpick', category = 'tools', price = 180, level = 1, stock = 20, order = true },
{ item = 'advancedlockpick', label = 'Advanced Lockpick', category = 'tools', price = 650, level = 2, stock = 10, order = true },
{ item = 'electronickit', label = 'Electronic Kit', category = 'tools', price = 1800, level = 2, stock = 6, order = true },
{ item = 'drill', label = 'Drill', category = 'tools', price = 2600, level = 3, stock = 4, order = true },
{ item = 'thermite', label = 'Thermite', category = 'tools', price = 3900, level = 4, stock = 3, order = true },
{ item = 'trojan_usb', label = 'Trojan USB', category = 'tools', price = 4800, level = 4, stock = 2, order = 'only' },
}
-- Items your inventory does not know are left out on start, with one line in
-- the server console naming them. Set false to keep them in the menu anyway.
Config.HideUnknownItems = true
-- Where the menu takes item pictures from. 'auto' reads them from the
-- inventory that runs (ox, qs, qb, ps, lj, jpr). A URL of your own works too,
-- e.g. 'https://cdn.example.com/items/' (the file name is added), and false
-- shows the category icons instead.
Config.Images = 'auto'
-- =============================================================================
-- 7. PRICES, STOCK AND FLASH SALES
-- =============================================================================
Config.Prices = {
enabled = true,
interval = 20, -- minutes between two price moves
spread = 15, -- a price stays within this % around its base
step = 6, -- a price moves at most this % per interval
}
Config.Stock = {
enabled = true,
refill = 30, -- minutes between two refills of an item
amount = 2, -- pieces per refill, never above the item's stock
}
Config.FlashSale = {
enabled = true,
chance = 15, -- % per price move that a flash sale starts
items = { 1, 3 }, -- how many items are on sale
discount = { 15, 35 }, -- % off
minutes = 15,
-- Who hears about it in game: 'known' (players who dealt with the dealer
-- before), 'all' or 'none'. The Companion app hears it either way.
notify = 'known',
}
-- =============================================================================
-- 8. HAGGLING
-- =============================================================================
-- Before paying, a player can haggle once: a needle sweeps a bar and he has to
-- stop it in the gold zone. Hitting the middle gives the full discount.
Config.Haggle = {
enabled = true,
discount = { 4, 15 }, -- % off on a hit, the middle of the zone gives the top
zone = 16, -- width of the gold zone in % of the bar at level 1
zoneLevel = 2, -- the zone grows by this % per level above 1
period = 1.1, -- seconds for the needle to cross the bar once
miss = 8, -- % added to this deal after a miss, 0 = the dealer just says no
cooldown = 10, -- minutes before a player may haggle with the same dealer again
}
-- Now and then a dealer wants more before he hands anything over.
Config.Surcharge = {
enabled = true,
chance = 12, -- % of purchases
percent = { 10, 25 }, -- % on top
-- Walking away: reputation loss (Config.Reputation.loss), a chance of a
-- police alert and a chance the dealer leaves his spot.
alert = 25,
leave = 20,
}
-- =============================================================================
-- 9. SELLING TO THE FENCE
-- =============================================================================
Config.Sell = {
-- What the fence pays with: 'dirty' or 'cash'. With cash he keeps `cut` %.
payout = 'dirty',
cut = 15,
-- Now and then the fence wants a cut to keep quiet after a sale.
extortion = { chance = 12, percent = { 10, 20 }, alert = 30 },
items = {
{ item = 'rolex', label = 'Rolex Watch', price = { 700, 1200 }, level = 1 },
{ item = 'goldchain', label = 'Gold Chain', price = { 350, 700 }, level = 1 },
{ item = '10kgoldchain', label = '10k Gold Chain', price = { 900, 1500 }, level = 1 },
{ item = 'diamond_ring', label = 'Diamond Ring', price = { 1100, 1900 }, level = 2 },
{ item = 'goldbar', label = 'Gold Bar', price = { 2000, 3200 }, level = 2 },
{ item = 'laptop', label = 'Laptop', price = { 600, 1100 }, level = 1 },
{ item = 'tablet', label = 'Tablet', price = { 450, 900 }, level = 1 },
{ item = 'security_card_01', label = 'Security Card A', price = { 500, 900 }, level = 2 },
{ item = 'security_card_02', label = 'Security Card B', price = { 900, 1500 }, level = 3 },
{ item = 'cryptostick', label = 'Crypto Stick', price = { 2000, 3500 }, level = 4 },
},
}
-- =============================================================================
-- 10. LAUNDERING
-- =============================================================================
Config.Launder = {
min = 500,
max = 50000, -- per wash
cooldown = 5, -- minutes between two washes of one player
-- How long the machine runs: base seconds plus seconds per 1,000, capped.
time = { base = 8, per1000 = 0.5, max = 45 },
-- The fee comes from the player's level (Config.Reputation.levels.launder).
alert = 20, -- % police alert chance
-- Now and then the fence wants a cut first to keep quiet.
cut = { chance = 12, percent = { 10, 20 } },
}
-- =============================================================================
-- 11. ORDERS AND DROP POINTS
-- =============================================================================
Config.Orders = {
enabled = true,
prep = { 5, 12 }, -- minutes until an order waits at its drop
expire = 90, -- minutes a drop waits before the goods are gone
refund = 50, -- % of an expired order that comes back as dealer credit
maxPieces = 10, -- pieces per order
alert = 30, -- % police alert chance while collecting
pickupSeconds = 3,
-- Ordering without standing at the dealer (menu anywhere and the app) is
-- possible from this level on. false = only at the dealer.
remoteLevel = 2,
-- The bag or crate the goods lie in.
prop = 'prop_cs_heist_bag_02',
-- Drop points. Admins add more in game (/ablackmarket, admin page). With
-- an empty list the places of all dealers serve as drops, never the one a
-- dealer stands at.
drops = {
-- vector4(x, y, z, heading),
},
}
-- =============================================================================
-- 12. RUNS AND MESSAGES
-- =============================================================================
-- Dealers with the `jobs` service hand out courier runs: pick something up
-- at one place and hand it to a contact at another before the time runs out.
-- Paid in dirty money plus reputation. A run can draw the police, and a run
-- that is dropped or too late costs reputation.
Config.Jobs = {
enabled = true,
offers = 3, -- open runs per dealer at a time
refresh = 20, -- minutes until an open run nobody took is replaced
cooldown = 5, -- minutes between two runs of one player
pickupMinutes = 15, -- time to get to the pickup after taking a run
minutes = { 8, 12 }, -- time from the pickup to the contact, more for long routes
seconds = 3, -- picking up and handing over take this long
fail = 6, -- reputation lost for a run that is dropped or too late
alert = { pickup = 10, deliver = 15 }, -- % police alert chance, times the kind's alert
contact = { model = 'g_m_y_famca_01', scenario = 'WORLD_HUMAN_SMOKING' },
blips = {
pickup = { sprite = 478, color = 5 },
deliver = { sprite = 280, color = 2 },
},
-- What there is to move. level = reputation level needed, pay = dirty
-- money, rep = reputation, alert = police chance multiplier, dealers =
-- who hands it out (leave it out for every dealer with `jobs`).
-- A prop the game does not know is replaced by the bag of the drops.
kinds = {
{ id = 'package', label = 'Package', prop = 'prop_cs_package_01', level = 1, pay = { 1200, 2200 }, rep = { 4, 7 }, alert = 1.0 },
{ id = 'cash', label = 'Money bag', prop = 'prop_money_bag_01', level = 2, pay = { 2500, 4000 }, rep = { 6, 10 }, alert = 1.3, dealers = { 'marlow' } },
{ id = 'crate', label = 'Weapon crate', prop = 'prop_box_guncase_01a', level = 3, pay = { 4500, 7000 }, rep = { 9, 14 }, alert = 1.6, dealers = { 'vince' } },
},
-- Where runs start and end: vector4 points of your own. Empty = the drop
-- points (Config.Orders.drops, the ones added in game, or the dealers'
-- free places).
points = {},
minDistance = 300.0, -- metres between pickup and contact, where the points allow it
}
-- The Messages page of /ablackmarket: what the dealers write. Orders waiting
-- at a drop, runs, dealers who moved, flash sales and raids, each with a
-- waypoint where it helps.
Config.Messages = {
enabled = true,
keep = 30, -- messages kept per player
welcome = true, -- new players get a first message from a dealer with his spot
}
-- =============================================================================
-- 13. POLICE
-- =============================================================================
Config.Police = {
jobs = { 'police', 'sheriff', 'bcso', 'sasp', 'state', 'lspd' },
onDutyOnly = true,
minOnline = 0, -- dealers only trade with at least this many officers on duty
blockCops = true, -- officers get nothing from a dealer
nearby = 60.0, -- a dealer leaves when an officer comes this close
away = 15, -- minutes he stays away before he turns up at another place
-- % chance of an alert per action.
alerts = { buy = 10, sell = 15, launder = 20, pickup = 30 }, -- runs: Config.Jobs.alert
-- 'auto' finds ps-dispatch, cd_dispatch, qs-dispatch, rcore_dispatch,
-- core_dispatch, tk_dispatch, lb-tablet or origen_police. 'default' sends
-- a map blip and a message to the officers. 'custom' calls customAlert
-- below. 'none' turns alerts off.
dispatch = 'auto',
-- The title comes from the language file; add title = 'Your text' to set your own.
alert = { code = '10-66', blip = { sprite = 51, color = 1, scale = 1.0, seconds = 120 } },
-- customAlert = function(coords, data) end, -- data = { code, title, message, kind, source }
}
-- Standalone: players with the ACE in Config.Standalone.policeAce count as officers.
-- =============================================================================
-- 14. ACCESS
-- =============================================================================
Config.Access = {
jobs = {}, -- only these jobs may trade, empty = everyone
items = {}, -- items a player must carry to talk to a dealer, e.g. { 'burnerphone' }
}
-- =============================================================================
-- 15. STANDALONE
-- =============================================================================
-- Without QBCore, Qbox or ESX:
-- works: dealers, prices, stock, haggling, reputation, orders, runs,
-- messages, the app. Weapons, ammo and armour go straight to the
-- player.
-- money: 'auto' uses Agency-Banking when it runs, otherwise the script's
-- own wallet (cash and dirty money, admins can top it up with
-- /ablackmarket). 'hooks' uses the functions below.
-- fill in: other items (tools, stolen goods) need the item hooks below;
-- without them those items are left out of the menus.
Config.Standalone = {
money = 'auto', -- 'auto' | 'banking' | 'wallet' | 'hooks'
policeAce = 'agency.police', -- players with this ACE count as officers
adminAce = 'agency.blackmarket',
-- getMoney = function(src, account) return 0 end, -- account: 'cash' | 'bank' | 'dirty'
-- addMoney = function(src, account, amount) return true end,
-- removeMoney = function(src, account, amount) return true end,
-- itemCount = function(src, item) return 0 end,
-- addItem = function(src, item, amount) return true end,
-- removeItem = function(src, item, amount) return true end,
}
-- =============================================================================
-- 16. STORAGE
-- =============================================================================
-- Reputation, stock, orders and the app's devices are saved in the database
-- (table agency_blackmarket, created by itself) when oxmysql runs, otherwise
-- in the server's own key value store. Reputation from V1
-- (blackmarket_reputation) is taken over once, automatically.
Config.Storage = 'auto' -- 'auto' | 'mysql' | 'kvp'
-- =============================================================================
-- 17. COMPANION APP
-- =============================================================================
-- The Agency Companion app (iOS and Android) shows the market, prices, stock
-- and the player's level, orders for pickup, finds the dealers
-- and tells about moved dealers, ready orders, flash sales and raids.
Config.Companion = {
enabled = true,
relay = 'https://api.agencyg.de',
qrSeconds = 300, -- how long a pairing code stays valid
maxDevices = 3, -- phones per player
locateLevel = 1, -- from this level on the app (and the menu) can set a waypoint to a dealer (1 = everyone)
}
-- =============================================================================
-- 18. LOGS
-- =============================================================================
Config.Logs = {
webhook = '', -- a Discord webhook URL, '' = off
console = false, -- also print every deal in the server console (admin actions always are)
events = { buy = true, sell = true, launder = true, orders = true, jobs = true, admin = true },
}
-- =============================================================================
-- 19. YOUR OWN WORDING
-- =============================================================================
-- Any key from locales/en.lua, set here, beats every language file and
-- survives updates. Example: Config.Text = { prompt_talk = 'Talk to {name}' }
Config.Text = {}
02Fichier SQL
Optionnel : la ressource crée ces tables elle-même au démarrage. N'importez ce fichier que si vous préparez la base de données à la main :
-- Agency Blackmarket V2
-- The resource creates this table by itself when oxmysql runs. Run this file
-- only if your database user may not create tables.
CREATE TABLE IF NOT EXISTS `agency_blackmarket` (
`scope` VARCHAR(16) NOT NULL,
`id` VARCHAR(96) NOT NULL,
`data` LONGTEXT NOT NULL,
`updated` INT UNSIGNED NOT NULL DEFAULT 0,
PRIMARY KEY (`scope`, `id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- V1 kept reputation in `blackmarket_reputation`. V2 takes it over once on its
-- first start; the old table can be dropped afterwards:
-- DROP TABLE IF EXISTS `blackmarket_reputation`;
+Bon à savoir
Chaque option de config.lua a un effet, en 19 sections, des dealers jusqu'à vos propres textes. Les emplacements des dealers et les points de dépôt peuvent aussi être ajoutés en jeu sur la page Admin, sans toucher au fichier.
- Dealers
- Config.Dealers définit chaque dealer : ses services (buy, orders, sell, launder), ses catégories, le ped et son scénario, les minutes avant qu'il ne se déplace (rotate), ses horaires, le mode du blip (always, known ou never) et ses emplacements. Le receleur a une machine à laver à côté de lui, placée avec un décalage.
- Objets, prix et stock
- Chaque entrée de Config.Items a un prix de base, le niveau requis, un stock par dealer et indique si elle peut être commandée (true, ou 'only' pour la commande uniquement). Config.Prices définit à quelle fréquence et de combien les prix bougent, Config.Stock à quelle vitesse le stock se remplit et Config.FlashSale à quelle fréquence une vente commence, pour combien d'objets et avec quelle remise.
- Marchandage et suppléments
- Config.Haggle définit la remise, la largeur de la zone dorée et de combien elle grandit par niveau, la vitesse de l'aiguille, la majoration après un échec et le délai d'attente par dealer. Config.Surcharge définit à quelle fréquence un dealer en veut plus, combien, et la probabilité d'une alerte de police ou de son départ quand un joueur refuse.
- Commandes et points de dépôt
- Config.Orders définit le temps de préparation, combien de temps un dépôt attend, la part rendue en crédit, les pièces par commande, la probabilité d'alerte, le niveau pour commander de n'importe où et le modèle du sac. Les points de dépôt vont dans drops ; avec une liste vide, les emplacements de tous les dealers servent de dépôts, jamais celui où se tient un dealer.
- Police
- Config.Police liste les métiers de police, indique si seuls les agents en service comptent, combien doivent être en ligne, si les policiers n'obtiennent rien d'un dealer, la distance qui fait partir un dealer et pour combien de temps, la probabilité d'alerte par action et le système de dispatch.
- Standalone
- Config.Standalone.money choisit Agency-Banking, le portefeuille propre au script ou vos propres hooks pour l'argent. Les hooks d'objets connectent n'importe quel inventaire. Les policiers et les admins sont les joueurs qui ont l'ACE définie dans policeAce et adminAce.
- Courses et messages
- Config.Jobs définit combien de courses chaque dealer propose, à quelle fréquence elles changent, la pause entre deux courses, le temps jusqu'à la récupération et jusqu'au contact, ainsi que la paie, la réputation et le risque de police de chaque type de course. Le service jobs dans Config.Dealers décide qui les confie. Config.Messages active la page Messages, le nombre de messages conservés et le premier message pour les nouveaux joueurs.
- Agency Pay
- Config.Money.agencyPay active ou désactive Agency Pay (activé par défaut), indique la ressource d'Agency Phone et fixe combien de secondes le joueur a pour confirmer sur le téléphone, 90 par défaut. Sans Agency Phone sur le serveur, le panier ne le propose pas.
?Questions fréquentes
Comment ajouter un emplacement de dealer sans modifier le fichier ?
Ouvrez /ablackmarket en tant qu'admin, allez sur la page Admin et utilisez Ajouter ma position sur le dealer, ou ajoutez un point de dépôt dans l'onglet Dépôts. Ces emplacements sont enregistrés et survivent aux redémarrages.
Comment utiliser mes propres textes ?
Placez n'importe quelle clé de locales/en.lua dans Config.Text, par exemple Config.Text = { prompt_talk = 'Talk to {name}' }. Elle l'emporte sur tous les fichiers de langue et survit aux mises à jour.