🐓 Silly Cockfight
A simple, fun cockfight/animal-fight system for RedM (RDR3) with VORP. Starts via a usable inventory item and spawns two fighters right next to the player. Spectators see names + an HP bar above the animals. 👀
Preview: Video
✨ Features
- 🧰 Start via item (VORP Inventory): using the item triggers the spawn (item name is configurable).
- 🛡️ Server-authoritative mode (optional): server controls turn order, damage, and HP sync → solid for multiplayer/spectators.
- 🎮 Client mode (optional): when disabled, the fight runs locally for the initiator.
- 📛 3D spectator UI: name + HP bar/HP-% above each fighter (up to ~25m distance).
- 🧬 Custom models: random pool or by index (assign fighter A/B).
- 🎲 Name pool: random fighter names from your list.
- ⚖️ Balancing: fixed max HP regardless of animal model + damage as a min/max range.
- ⏱️ Timeout / draw: fight ends as a draw after X minutes (optional).
- 🧹 Auto-cleanup: after a win the animals stay briefly (~2 minutes), then cleanup.
⚙️ Config (config.lua)
🧩 General
-
Config.ServerAuthoritative(true/false)-
true: server controls HP/damage/turn order and syncs values to all clients. -
false: fight runs client-side for the initiator.
-
-
Config.CockfightItem(string)- VORP inventory item name that starts the fight. Default:
"cockf".
- VORP inventory item name that starts the fight. Default:
🐔 Models / Names
-
Config.RoosterModelPick("random" | "byIndex")-
"random": each fighter gets a random model fromConfig.RoosterModels. -
"byIndex": fighter 1 usesRoosterModels[1], fighter 2 usesRoosterModels[2].
-
-
Config.RoosterModels(array)- List of model names (strings), e.g.
"a_c_rooster_01".
- List of model names (strings), e.g.
-
Config.RoosterNames(array)- Name pool; two names are drawn per fight.
⚔️ Balancing
-
Config.RoosterFixedMaxHealth(number)- Fixed max HP for all fighters (important because different animal models have different default HP).
-
Config.AttackDamageMin/Config.AttackDamageMax(number)- Damage per hit as a range. Each hit rolls a random value between min/max.
- Tip: same values = fixed damage (e.g.
1/1).
-
Config.FightTimeoutMinutes(number)- Fight duration in minutes. After that:
Draw. -
0= disable automatic timeout.
- Fight duration in minutes. After that:
💬 Texts / Notifications
-
Config.Texts(table)-
alreadyRunning: shown if a fight is already running -
bettingStart: pre-fight/"betting" text (shown immediately on start) -
fightStart: fight start text (after countdown) -
winnerA/winnerB: winner text with%splaceholder for the name -
draw: draw -
timeoutDraw: draw due to timeout
-
-
Config.TextDuration(table)-
short/long: duration of thevorp:TipBottomnotification in ms
-
📦 Dependencies
- VORP Core or RSGCore (auto-detected at runtime)
-
oxmysql(for auto item setup)
📝 Hinweise
- ⏳ The fight has a ~40 second countdown before it starts (so the “betting” message makes sense).
- 🧠 The script uses invincible + script-controlled HP so animal models don’t randomly one-hit.

