Configuration
SB AntiCheat uses a centralised Lua configuration system. The main file is shared/config.lua.
| File | What it's for |
|---|---|
shared/config.lua |
Main settings: framework, punishments, every detection, anti-spam limits, panel, logging. |
shared/models.lua |
Model lists and the object whitelist. |
shared/trustedresource.lua |
Resources allowed to request short detection bypasses. |
shared/safeevents.lua |
Server events protected from executors. |
server_config.lua |
Discord webhooks, bot token and screenshot webhook. |
locale/*.lua |
Ban and kick screen text. |
⚠️ Keep secrets out of
shared/. Everything inshared/is downloaded by every player, so webhook URLs and tokens belong inserver_config.lua.
Lua
SB = {}
SB.framework = "qbcore" -- "qbcore" | "esx" | "standalone"
SB.locale = "en" -- "en" | "es" | "de" | "fr" | "pt" | "it"
SB.serverName = "SB AntiCheat" -- Shown on ban/kick screens and Discord embeds
SB.debugMode = false -- true = detects everyone including whitelisted staff. DISABLE ON PRODUCTION SERVERS
SB.panelCommand = "sbac" -- In game command to open the admin panel
SB.notifyType = "qb" -- "qb" | "okok" | "sbnotify"
SB.useTxAdmin = true -- true = only txAdmin permission holders can use the panel and bypass detections. false = use SB.staffPermissions
SB.staffPermissions = {
-- "license:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
}
SB.playerInfo = {
showIp = true,
showLicense = true,
showSteam = true,
showFivem = true,
showDiscord = true,
showCitizenId = true,
}
SB.punishment = {
action = "ban", -- "log" | "kick" | "ban" (used when a detection is set to true)
showReason = true,
appealServer = "https://discord.gg/yourserver",
banByIp = true,
}
SB.antiResourceStop = true
SB.antiResourceStart = true
SB.whitelistedResources = {
"screencapture",
}
SB.screenshots = {
-- fiveManageToken and webhook are set in server_config.lua
onDetection = true,
periodic = false, -- Leave off on large or slow servers
periodicEvery = 60000,
}
-- Discord webhooks and bot token are set in server_config.lua
SB.mustHaveIdentifier = {
license = true,
fivem = true,
discord = false,
steam = false,
}
SB.vpnBlock = {
enabled = false,
checkUrl = "http://ip-api.com/json/%s?fields=proxy,vpn,hosting",
}
SB.heartbeat = {
sendEvery = 10000,
kickAfter = 30000,
retries = 5,
randomiseName = true,
}
SB.eventFlood = {
windowMs = 5000,
clientEvents = {}, -- ["eventName"] = maxCount
serverEvents = {},
}
SB.clientChecks = {
reportCooldown = 50,
bannedPeds = true,
bannedPedsDelete = true,
bannedVehicles = true,
bannedVehiclesDelete = true,
bannedWeapons = "ban",
bannedWeaponsRemove = true,
bannedPlateText = true,
noClip = true,
superJump = true,
fastRun = true,
teleporting = "log",
teleportThreshold = 350,
godMode = true,
objectAttach = true,
deadAnims = {
{ "anim@heists@ornate_bank@hostages@hit", "hit_react_die_loop_ped_b" },
-- { "dict_here", "anim_name_here" },
},
damageMod = true,
defenseMod = true,
explosiveBullets = true,
infiniteAmmo = true,
infiniteAmmoWhitelist = {
GetHashKey("weapon_fireextinguisher"),
GetHashKey("weapon_petrolcan"),
GetHashKey("weapon_hazardcan"),
},
infiniteCombatRoll = true,
infiniteStamina = false,
magicBullet = false,
maxModifier = 1.15,
smallPed = true,
spectating = true,
maxArmour = -1,
invisible = false,
nightVision = true,
thermalVision = true,
modMenuNatives = true,
tazeCheat = true,
fakeWeaponInHand = true,
minimap = false,
playerBlips = false,
plateSwap = false,
physicsGun = false,
vehicleSpeedCheat = false,
vehicleNoClip = false,
vehicleTeleport = true,
citizenAiFiles = true,
protectGlobals = true,
godmodeSync = true,
superSpeed = true,
rapidFire = false,
entitySpam = true,
networkEventFlood = true,
spawnProtectionBypass = true,
fallingThroughMap = "log",
abruptHealthIncrease = true,
noBleed = false,
}
SB.serverChecks = {
bannedExplosionTypes = true,
modifiedExplosions = true,
blockUnknownExplosions = true,
useObjectWhitelist = true,
nonWhitelistedObject = "log",
blacklistedObjects = "ban",
blacklistedObjectsDeleteAndPunish = true,
useBlacklistedObjects = true,
blacklistedParticles = true,
maxReportsPerWindow = 3,
weaponSpawn = true,
weaponRemove = true,
trainCage = true,
moneySpike = "log",
moneySpikeAmount = 500000,
moneySpikeWindow = 60,
resourceInjection = true,
invalidModel = true,
spectatorAbuse = true,
infiniteRagdoll = false,
remoteKill = true,
godmodeSync = true,
menuOpenNative = true,
}
SB.antiSpam = {
vehicles = true,
peds = true,
objects = true,
explosions = true,
interval = 10000,
maxVehicles = 6,
maxPeds = 8,
maxObjects = 5,
maxExplosions = 5,
checkNearbyPlayers = true,
nearbyPlayerDistance = 50.0,
safeExplosionTypes = {
[0]=true, [2]=true, [3]=true, [6]=true, [7]=true, [8]=true, [9]=true, [10]=true,
[13]=true, [15]=true, [17]=true, [22]=true, [23]=true, [24]=true, [28]=true,
[34]=true, [38]=true, [39]=true, [45]=true, [49]=true, [50]=true, [61]=true,
},
}
SB.screenScan = {
enabled = true,
scanEvery = 10,
flagWords = {
-- Keyword list is defined in shared/config.lua. Add or remove terms there.
},
}
SB.panel = {
enabled = true,
allowHeal = true,
allowRevive = true,
allowArmour = true,
allowSpectate = true,
allowKick = true,
allowBan = true,
allowUnban = true,
}
SB.logging = {
logJoins = true,
logLeaves = true,
logDetections = true,
logAdminActions = true,
logWhitelist = true,
}💡 The full
shared/config.luafile has every detection and the complete OCR keyword list. Only the main settings are shown here; open the file for the rest.
Framework
Lua
SB.framework = "qbcore" -- "qbcore" | "esx" | "standalone"Server name
Lua
SB.serverName = "SB Roleplay"Shown on ban messages and Discord embeds.
Language
Lua
SB.locale = "en"Supported: en, es, de, fr, pt, it. Each maps to a file in locale/.
Debug mode
Lua
SB.debugMode = falseDebug mode adds console output and detects whitelisted staff too. Turn it on while troubleshooting and leave it off on production servers.
Last updated 2026-11-08
