Pepper Fight Club
Boxing and fight career with its own combat system – a story in 12 chapters, an academy with 46 lessons, a pro ranking, training, an underground with police raids, a PvP arena, tournaments and betting for ESX, QBCore and Qbox.
Overview
Pepper Fight Club turns fist fights into a career: from the backyard in Davis to the world title. Fights use the script's own combat system – the server decides every hit. Players follow a story in 12 parts (prologue, chapters 1–10, epilogue), learn every technique in the academy, climb the pro ranking, fight in the underground and face each other in the arena.
Everything runs through a tablet (F7 or /fightclub). Admins set up the locations once with the /fcsetup
assistant and manage everything else in the /fcadmin window.
Note: All coordinates that ship with the script are approximations. Check the locations once on your server – the
/fcsetupassistant walks you through all 36 steps.
Features
- Own combat system, the server decides every hit: jab, cross, hooks, uppercut, kicks, clinch, guard, slips, parries, counters, combos, stamina and finishers – with latency compensation for fair PvP
- 4 fighting styles: street fighting, boxing, kickboxing, freestyle
- Knockdowns with a referee count and a get-up mini-game, rounds, a corner with tactics, three judges
- Story career in 12 parts with cutscenes, a trainer, a promoter and a rival – choices lead to 3 different endings
- Academy with 46 lessons in 8 modules and 4 exams: you learn every technique before you can use it in a fight
- Pro career: a ranking of 50 boxers, licenses, training camps, press conferences and 5 titles
- Underground: 8 venues with 56 fighters, bosses, rivals, reputation, a cage and belts – or a legal league via the config
- PvP arena: challenges with stakes, Elo seasons, a champion belt, tournaments, fight nights and NPC show fights
- Betting with fixed odds, a player pool and live bets in the corner
- Police raids with heat per venue, a built-in alert or your own dispatch integration
- 17 training stations with mini-games, injuries, doctors and nutrition
- 29 items for ox_inventory with ready-made images, sponsors, manager, cutman, daily and weekly tasks, 58 achievements
- Your own gym (6 gyms to buy) and fight teams of up to 6 members
- Levels 1–100 with unlocks, prestige up to tier 10 and a signature move
- First-time setup assistant
/fcsetupand admin window/fcadminwith 11 tabs - Arrange the HUD freely: position (drag or fixed spot) and size of every HUD element in the admin window
- Pause the career: objective and waypoints disappear until the player continues
- German & English, open config, locales, bridges and install files
Requirements
| Dependency | Required/optional | Used for | Link |
|---|---|---|---|
| FiveM server build ≥ 7290 | required | declared in fxmanifest.lua as /server:7290 |
https://runtime.fivem.net/artifacts/fivem/build_server_windows/master/ |
| OneSync | required | server-side combat system, instances, spectators | https://docs.fivem.net/docs/scripting-reference/onesync/ |
| ESX Legacy, QBCore or Qbox | required (one of them) | money, jobs, names, admin groups – Config.Framework = 'auto' detects it |
https://github.com/esx-framework/esx_core |
| ox_lib | required | UI building blocks, callbacks | https://github.com/overextended/ox_lib |
| oxmysql | required | database (MySQL/MariaDB, 18 tables fc_*) |
https://github.com/overextended/oxmysql |
| ox_inventory | required | 29 items (tablet, wraps, gloves …) | https://github.com/overextended/ox_inventory |
| ox_target | optional | interacting with characters – without it a hint + key E is used |
https://github.com/overextended/ox_target |
| RTX Gym (Realistic or Basic Gym System) | optional | training in the RTX gym raises Fight Club stats, fights give RTX combat XP (Config.RtxGym). With the Basic Gym (rtx_gym) the Fight Club reads the stats via exports.rtx_gym:GetAllStats and takes over the training progress (the first time also existing stats, capped; Config.RtxGym.ToFightClub.basic) |
– |
Combat animations included: The Fight Club ships with overhauled melee animations (Wolf Fire Modz, FiveM pack by Popcorn Roleplay, included with permission). They replace GTA's animations for all unarmed fights on the server and only show in third person – first person is blocked during fights (Config.CombatAnimations). If you already run another melee animation pack, remove one of them. Credits and license: install/LICENSE-ANIMATIONS.txt.
Installation
- Download the resource from the Cfx.re Portal (Granted Assets)
- Extract it to
resources/[pepper]/pepper_fightclub– do not rename it - Add the items: paste the contents of
install/ox_items_en.lua(orinstall/ox_items_de.lua) intoox_inventory/data/items.lua– inside the table, right before the very last closing}. Do not add anotherreturn { - Copy the images: all images from
install/images/toox_inventory/web/images/ - Start it in your
server.cfgafter the dependencies and grant the admin permission:
ensure oxmysql
ensure ox_lib
ensure es_extended # or qb-core / qbx_core
ensure ox_inventory
# ensure ox_target # optional – without ox_target players interact with E
ensure pepper_fightclub
add_ace group.admin pepper.fightclub.admin allow
- Database: the script creates its 18 tables (
fc_*) on start. Without CREATE permission, importinstall/pepper_fightclub.sqlfirst - Start the server – the console shows a green line
Pepper Fight Club v… started (framework: …) - In game, run
/fcsetupas an admin and place the locations (see First-time setup)
First test
- As admin run
/fcsetupand set at least the first steps (backyard) withE– or pause withX - Press
F7(or/fightclub): the tablet opens with profile, story and academy - Walk to the starting character at the backyard and begin the career – the first fight shows the key help and fight HUD
/fcquitaborts a fight,/fcwiperesets your test save
Configuration
| File | Contents |
|---|---|
config/config.lua |
language, framework, admin permission, commands, keys, interaction, story, money, dispatch, movement mode |
config/combat.lua |
combat system, styles, techniques, combos, finishers, rules, AI |
config/fighters.lua · config/venues.lua |
opponents and fights · underground venues |
config/academy.lua · config/pro.lua |
lessons and exams · pro ranking, titles, training camps |
config/training.lua · config/health.lua |
stations and gyms · injuries, nutrition, doping |
config/arena.lua · config/betting.lua |
PvP, season, tournaments, fight nights · betting |
config/underground.lua |
heat, raids, flyers, legal mode |
config/items.lua · config/economy.lua |
items · shops, sponsors, tasks, achievements, gym, team, prestige |
config/locations.lua · config/setup.lua |
locations and rings · first-time setup |
config/story.lua · config/story_late.lua |
story chapters and scenes |
config/progression.lua |
level curve, stats, ranks |
config/server.lua |
Discord webhook for logs, version notice, protection limits against macros and fixed fights (ServerConfig.Protection) – never sent to clients |
locales/de · locales/en |
all texts |
Important options:
| Option | Default | Meaning |
|---|---|---|
Config.Locale |
'de' |
language (de / en), applies to all players |
Config.Framework |
'auto' |
auto, esx, qbcore, qbox, standalone |
Config.AdminAllowCommandAce |
false |
true = anyone with the ACE command is a Fight Club admin |
Config.Commands |
fightclub, fcquit, … |
names of the player commands |
Config.Keys |
see controls | combat keys (FiveM control IDs) · tablet = default F7 |
Config.Interaction |
'auto' |
ox_target if started, otherwise a prompt + E · 'target' · 'key' |
Config.MovementMode |
'strafe' |
combat movement: 'strafe' = fighting stance, facing the opponent · 'assist' = normal movement, view turns smoothly towards the opponent |
Config.Story.Enabled |
true |
story career on / off |
Config.Story.Instanced |
true |
scenes and chapter fights in their own instance (routing bucket) |
Config.Story.AllowSkip |
true |
skip scenes with BACKSPACE |
Config.Story.StartNpc · StartLoc |
'lil_d' · 'backyard_promoter' |
character and place where the career starts · StartNpc = nil = can also be started in the tablet |
Config.Story.AllowPause |
true |
players may pause their career (/fcpause, tablet, Pops) |
Config.Hud.Layout |
{} |
start values for position and size of the HUD elements (in game: /fcadmin → HUD) |
Config.Underground.enabled |
true |
false = legal mode: no heat, no raids, no dirty money, "League" instead of "Underground" |
Config.Combat.AutoSpectate |
false |
true = all players nearby get the fight HUD automatically (not recommended on RP servers) |
Config.Combat.SpectateHint |
true |
players near a fight get a hint about /fcwatch |
Config.Combat.RingWalls |
true |
invisible walls at rings with ropes · per ring with walls = false |
Config.Money.account |
'cash' |
account for purses (cash / bank) |
Config.Money.black |
'auto' |
dirty money: ESX account black_money, item markedbills on QBCore / Qbox · 'account', 'markedbills', 'cash' |
Config.Economy.PayoutAccount · PayAccount |
'bank' · 'cash_then_bank' |
economy payouts · payment method for purchases |
Config.Dispatch.mode |
'builtin' |
raid alert: 'builtin' = message + map blip for on-duty police · 'event' = your own event · 'none' |
Config.Dispatch.jobs |
police, sheriff |
jobs that count as police |
Config.Setup.Enabled · AutoPrompt |
true · true |
first-time setup on · remind admins |
Config.Progression.GlobalXpMultiplier |
1.0 |
levelling speed |
Config.Economy.PayoutMultiplier |
1.0 |
scales economy payouts (sponsors, jobs, tasks, achievements, gym) |
Almost every module has its own Enabled switch (e.g. Config.Training, Config.Arena, Config.Betting,
Config.Pro). Restart the resource after every change.
First-time setup
On the first start – as long as no location has been placed – the script reminds every admin of the open setup when they
log in and every 10 minutes after that. Start it with /fcsetup.
The assistant asks for 36 locations in the order of the game: the backyard and Muscle Beach, the underground venues, the pro career halls, the arena, the training gyms, the shop and dealer, the 6 player gyms and the running routes. The current step is shown on the left of the screen, and you can walk around normally.
| Key | Function |
|---|---|
E |
place the location here (your position and facing direction) |
G |
teleport to the suggestion |
BACKSPACE |
skip the step – the suggestion stays |
X |
pause – /fcsetup continues at the same step |
- Moving along: a ring takes everything that belongs to it – characters, stations, props within range. Running routes rotate with their start point. For rings, a red preview shows size and direction; stand in the middle and face the ring direction
- Locations placed by hand are never overwritten by the assistant
/fcsetup restartstarts over,/fcsetup stoppauses- Later:
/fcadmin→ Setup tab lists all steps with their status and redoes single steps. Change single locations under/fcadmin→ Places (teleport there, set "here", reset) - Export:
/fcexport(or Export in the Places tab) prints all changed locations as Lua lines to the server console and F8 – to copy intoconfig/locations.lua
Placed locations are stored in the database and apply immediately, without a restart.
Arranging the HUD
/fcadmin → HUD tab sets position and size of the HUD elements for all players: fight HUD, story objective,
notifications, key hints, level up, pads & run, training stations, live bets and raid alert. In the list you change the size
in 10 % steps. Open editor shows every element as a frame over the game: drag a frame freely (snaps to the screen
center), pick one of 9 fixed spots, size via slider or mouse wheel (50–200 %), then Save. The layout is stored in the
database and applies immediately. Start values for new servers live in Config.Hud.Layout.
Player guide
Tablet
F7 or /fightclub opens the tablet. Every player can rebind the key in the GTA settings under Key Bindings → FiveM. At
level 2 every player receives the Fight Club tablet item once; using it opens the tablet too.
At the start there are the tabs Home, Career, Academy, Profile, Controls. With higher levels Training, Box-Rec, Underground, Arena, Bets, Heat, Shop, Contracts, Tasks, Gym & Team and Achievements are added. The Home tab shows the next unlocks.
Combat controls
| Key | Function |
|---|---|
| Left mouse button | light punch (jab / swing) |
| Right mouse button | heavy punch (cross / haymaker) |
A / D + left mouse button |
left / right hook |
S + left mouse button |
body shot |
S + right mouse button |
uppercut |
CTRL (hold) |
guard |
SPACE |
dodge · get up after a knockdown |
A / D + SPACE |
slip |
F |
shove / special punch, kicks in kickboxing |
G |
clinch (freestyle) |
Q |
taunt |
E |
finisher when your adrenaline is full · in dialogs: next line |
BACKSPACE |
skip scene |
Which technique a key triggers depends on your style and the lessons you have passed – the Controls tab in the tablet
shows the bindings of your server. /fcquit forfeits a running fight.
Story
The career starts in the backyard in Davis and leads through Delgado's Boxing Gym at Muscle Beach to the world title fight. Prologue, 10 chapters and epilogue tell the story with cutscenes, conversations, messages in the tablet and chapter fights. Choices – for example about the underground, doping or fixed fights – change your honor and lead to one of 3 endings. Between chapters you need levels; the Career tab shows the next goal and what you can do until then. Scenes at the gym don't start on their own – there you get "[E] Continue story".
The career starts with Lil' D in the backyard (map marker "Start career"), not in the tablet. Players who have something
else to do pause the career in the tablet, with Pops or with /fcpause: objective, waypoints and scenes disappear until
they resume – progress is saved.
Academy
The Academy tab holds 46 lessons in 8 modules: drills, pads, rhythm, running routes, sparring with a goal and rules knowledge. A technique can only be used in a fight once its lesson is passed. On top come 4 exams: admission test, amateur license (from level 8), pro license (from level 35) and master exam (from level 98), a daily plan with 3 tasks and the trust of your trainers.
Box-Rec and pro career
The Box-Rec tab shows your record, the ranking of 50 boxers and the promoters' offers. Wins move you up, the purse depends on your rank. Your rank opens the 5 titles: Los Santos, San Andreas, North America, world title and unified world champion – with training camp, press conference and ring walk.
Training and health
17 training stations (punching bag, push-ups, running routes, shadow boxing and more) in the Muscle Beach, backyard and cellar gyms improve your stats with a mini-game; each session costs training energy. Fights leave bruises and sometimes injuries – they heal over time, at a doctor or with items such as an ice pack or a bandage.
Underground
8 venues: Backyard, Parking Garage, Cellar Hole, Harbor Hall, Junkyard Cage, Quarry, VIP Rooftop and The Pit. You accept fight offers from the promoter, and every venue has a ranking, reputation, a boss, rivals and a belt. Purses are paid out as dirty money here (configurable). Every fight raises the venue's heat – if it gets too high, a raid follows: after the warning there is time to leave the zone; whoever stays pays a fine and is banned from the underground for a while. On-duty police officers cannot fight or bet at underground venues.
The backyard opens after the prologue, every other venue opens in chapter 4 when Sal Marino makes his offer. In
legal mode (Config.Underground.enabled = false) the underground is called "league": no heat, no raids, and the story
tells chapter 4 to match – Sal offers his own show league instead of illegal fights.
Arena
In the arena players fight each other: free challenges (from level 5, optionally with a stake), ranked fights with an Elo
rating and a monthly season (from level 20), a queue with an NPC opponent when nobody is free, tournaments with 4, 8 or
16 slots, fight nights with a fight card and a champion belt. Watch other public fights and show fights with /fcwatch.
Betting
Bets only work on site: at the bookmaker, in the tablet or with /fcbet near a ring. Fights with NPCs have fixed odds,
PvP fights a player pool. With higher levels you unlock method, live and round bets as well as higher limits. Bets give no
XP.
Economy
The sports shop sells gloves, protective gear, food and first aid, the underground dealer has more. Gear wears down and can be repaired at the shop. On top come sponsor contracts, a manager, a cutman, promoter jobs, daily and weekly tasks, 58 achievements with selectable titles, from level 70 your own gym (buy or rent, with upgrades) and from level 72 a fight team.
Prestige
From level 100 you can prestige and start again at level 1 – your techniques stay, you get a star and points for small perks. Up to 10 prestige tiers are possible. At level 100 you also choose your signature move. The Hall of Fame takes players with level 100, a world title or prestige.
Commands and permissions
Commands
Players
| Command | Function |
|---|---|
/fightclub (F7) |
open the tablet |
/fcquit |
forfeit the running fight or lesson |
/fcduel <ID> |
offer a friendly fight (player nearby) |
/fcaccept |
accept a friendly fight |
/fcwatch |
watch a public fight or show fight nearby – again = stop |
/fcpause |
pause / resume the career |
/fcchallenge <ID> [stake] |
ranked challenge · /fcchallenge free <ID> [stake] free challenge · /fcchallenge yes / no to answer |
/fcqueue |
join / leave the queue at the arena venue |
/fcbet |
betting slip for fights nearby (key can be bound freely) |
The names are set in Config.Commands (config/config.lua) and Config.Arena.Commands (config/arena.lua).
Admin
| Command | Function |
|---|---|
/fcadmin |
admin window: Places, HUD, Setup, Players, Fights, Pro career, Venues, Health, Arena, Underground, Economy |
/fcsetup |
start / continue the first-time setup · restart from the start · stop pause |
/fcsetpos <place> |
set a location to your position |
/fcresetpos <place> |
reset a location to the config value |
/fctp <place> |
teleport to a location |
/fcorte |
list all location names (* = changed) |
/fcexport |
print changed locations as Lua lines (server console + F8) |
/fcxp <amount> [ID] |
give XP |
/fclevel <level> [ID] |
set the level |
/fcunlock <technique|all> [ID] |
unlock techniques |
/fcstory reset | <chapter> [step] [ID] |
reset the story or jump to a chapter (e.g. chapter5) |
/fcfight <fight> |
start a fight from Config.Fights |
/fcexam [exam] [ID] |
reset an exam (default: admission test) |
/fcwipe [ID] |
delete all Fight Club data of a player |
/fcmove strafe|assist |
switch the combat movement mode for yourself (testing) |
/fcanimstyle [overhaul|classic] |
switch the combat animation style for yourself (comparison; no argument toggles) |
/fcengine [native|scripted] |
combat engine for new fights: GTA melee or own combat system (until restart) |
/fcdebug |
combat debug display on / off |
Without [ID] a command applies to yourself. The server checks admin commands on every call.
Permissions
A player is an admin if one of these applies:
- ACE permission
pepper.fightclub.admin(Config.AdminAce) – the reliable way on every framework - a framework group from
Config.AdminGroups(defaultadmin,superadmin,god) - only with
Config.AdminAllowCommandAce = true: anyone with the general ACE permissioncommand(default off – on many servers moderators have it too)
add_ace group.admin pepper.fightclub.admin allow
add_ace identifier.license:YOUR_LICENSE pepper.fightclub.admin allow
For developers
Exports
-- Server
exports.pepper_fightclub:getProfile(src) -- profile (name, level, rank, stats, record, honor, styles, techniques) or nil
exports.pepper_fightclub:isInFight(src) -- true while the player is fighting
exports.pepper_fightclub:getProRank(src) -- place in the pro ranking (1–50, 51 = unranked) or nil
exports.pepper_fightclub:getProLicense(src) -- 'none' | 'amateur' | 'pro' or nil
exports.pepper_fightclub:openBetting(src, venue) -- open the betting slip for a player
-- Client
exports.pepper_fightclub:openBetting(venue) -- open the betting slip (venue = venue ID or nil = fights nearby)
useItem is the export for ox_inventory: the item templates in install/ already reference it
(server = { export = 'pepper_fightclub.useItem' }). You don't need to call it yourself.
Hooks for jail and police scripts
Server events – listen with AddEventHandler, not with RegisterNetEvent:
AddEventHandler('pepper_fightclub:raid', function(data) end)
-- data = { venue, phase, coords, police, players = { src, … } }
AddEventHandler('pepper_fightclub:arrestZoneLeft', function(src, venue) end)
-- player left the zone in time
AddEventHandler('pepper_fightclub:raidCaught', function(src, venue, info) end)
-- player was still in the zone when the raid ended · info = { fine, police, banUntil, late }
With Config.Dispatch.mode = 'event' the script calls TriggerEvent(Config.Dispatch.event, data) on an alert
(default pepper_fightclub:dispatch, data = { coords, title, message, code }) – connect your dispatch script there.
Whether fines are handed out automatically when real police respond is set by Config.Underground.Raid.fineWithPolice
(default false: with real police, they or your jail script take over).
The internal events between modules (Fight.Bus) are not a public interface and may change.
Framework integration
bridge/server/esx.lua, qbcore.lua, qbox.lua and standalone.lua provide money, jobs, names and admin groups,
bridge/client/frameworks.lua the notifications. All bridges are open.
Troubleshooting
| Problem | Solution |
|---|---|
| The resource doesn't start, the console names a missing dependency | oxmysql, ox_lib and ox_inventory must start before pepper_fightclub, OneSync must be on, server build 7290 or newer |
| Console: "Datenbank konnte nicht vorbereitet werden" (database could not be prepared) | check oxmysql or import install/pepper_fightclub.sql manually |
/fcadmin: no permission |
add the ACE line from "Permissions" and restart the server |
| Items without an image or unknown | check installation steps 3 and 4, then restart ox_inventory |
| A character stands in a wall, a ring is crooked | /fcadmin → Places → "here", or redo the step under Setup |
| No "[E]" at a character | check Config.Interaction; with ox_target the target menu appears instead |
/fcexport prints nothing |
no locations have been changed yet |
FAQ
Who can use /fcadmin and /fcsetup?
Anyone with the ACE permission pepper.fightclub.admin or in a group from Config.AdminGroups. The general command permission only counts with Config.AdminAllowCommandAce = true.
The resource doesn't start – what do I check first?
oxmysql, ox_lib and ox_inventory must start before pepper_fightclub, OneSync must be on and the server build must be 7290 or newer. The console names the missing dependency.
The database tables are missing.
The script creates its 18 tables (fc_*) on start. If your database user has no CREATE permission, import install/pepper_fightclub.sql manually.
Items are unknown or have no image.
Paste the content of install/ox_items_en.lua (or install/ox_items_de.lua) inside the table in ox_inventory/data/items.lua, copy the images from install/images/ to ox_inventory/web/images/ and restart ox_inventory.
The locations don't match my map.
The shipped coordinates are approximations. /fcsetup sets all locations in order, /fcadmin → Places single ones. They are stored in the database; /fcexport lets you copy them into the config.
Does it work without ox_target?
Yes. Without ox_target characters show a hint and players interact with E (Config.Interaction = 'auto').
Can I change the fight keys?
Yes, in Config.Keys (config/config.lua) using FiveM control IDs – e.g. guard 36 (CTRL) or dodge 22 (space). Players change the tablet key F7 themselves in the GTA settings under Key Bindings → FiveM.
Can I turn off the underground?
Yes: Config.Underground.enabled = false is legal mode – no heat, no raids, no dirty money, "league" instead of "underground". The story scenes still talk about the underground.
What about the police?
On-duty officers can't fight or bet at underground venues, off-duty they can (Config.Underground.AllowOffDuty). During a raid the script alerts the police – built in or via your dispatch script (Config.Dispatch.mode). With too few officers on duty a "raid light" runs without real police.
How do I set the progression speed?
Config.Progression.GlobalXpMultiplier (default 1.0) scales all XP, Config.Economy.PayoutMultiplier the payouts of sponsors, jobs, tasks, achievements and gyms.
How do I change texts or switch to English?
Config.Locale = 'en' in config/config.lua – the language applies to all players. All texts are open in locales/de/*.json and locales/en/*.json, the items in install/ox_items_en.lua.
What about performance?
The server only computes combat while a fight is running. Characters, rings and markers are created locally and by distance. We only state a resmon value once it has been measured.
What happens on a restart?
Running fights and scenes end. Level, story, lessons, locations, rankings and items are stored in the database or inventory.
How do I install an update?
Replace the pepper_fightclub folder and back up your changes to config/ and locales/ first. Set locations and HUD layout live in the database and are kept; new items are listed in CHANGELOG.md.
Support
Open a ticket on Discord: https://discord.gg/6NaFJWKDYu (category "Script Support") – link your purchase with /verify first. German or English.
Permanently tested on the Pepper Scripts dev server.
Changelog
Current version: 1.0.4 (2026-10-25). All changes are listed on the updates page and in CHANGELOG.md inside the resource.
Found a mistake? Report it on Discord.