BattleLuck is a V Rising BepInEx plugin focused on competitive arena-style modes, player state snapshots, zone-driven match flow, optional AI assistance, Discord/webhook integrations, and server-side event control. all thrue configs u can change actions while u r in the game , some actions are working with ai like .ai servant send regionname some not
For comprehensive documentation, see docs/README.md
Covers: Installation, Configuration, Commands, APIs, Troubleshooting, and more.
Additional Resources:
- System Architecture - Detailed system design
- Audit Report - Documentation audit summary
- V Rising Modding - V Rising ECS reference
BattleLuck uses GitHub Actions for automated building and releasing.
Automatically builds the mod on every push to main/master and creates GitHub releases with semantic versioning.
Triggers: Push to main/master, manual dispatch
Publishes releases to Thunderstore when a GitHub release is published.
Setup Required:
- Add
THUNDERSTORE_KEYsecret to your repository settings - Create releases through GitHub UI or manually via workflow dispatch
Getting Thunderstore API Key:
- Go to Thunderstore
- Sign in and go to Settings β API Keys
- Create a new API key
- Add it as
THUNDERSTORE_KEYin your GitHub repository secrets
Automatically checks for NuGet package updates weekly and creates pull requests.
Triggers: Weekly (Sundays), manual dispatch
Version numbers are automatically incremented based on commit messages:
+semver:majoror+semver:breakingβ Major version bump (x.0.0)+semver:minoror+semver:featureβ Minor version bump (0.x.0)+semver:patchor+semver:fixβ Patch version bump (0.0.x)
Example: git commit -m "add new game mode +semver:minor"
| Mode ID | Display Name | Purpose |
|---|---|---|
bloodbath |
Bloodbath | Free-for-all PvP arena |
colosseum |
Colosseum | Duel/ELO-focused arena |
gauntlet |
Gauntlet | PvE wave survival |
siege |
Siege | Objective/team event mode |
trials |
Trials | Timed PvE challenge |
aievent |
AI Event Test | Deterministic AI-flow test mode |
BattleLuck commands are registered through VampireCommandFramework. π = admin only.
| Command | Description |
|---|---|
.ai.event π |
Replay AI event flow (start, score, elimination, end) without entering a zone |
.ai.reload π |
Reload AI configuration and restart service |
.ai.status π |
Show detailed AI assistant status |
.ai.test π |
Test AI assistant with a sample query |
.autotrash π |
Toggle auto-trash for dropped items in mode zones |
.autotrash.status π |
Show auto-trash stats |
.debugabilities π |
Print all discovered AbilityGroup prefabs from the server |
.debugslots π |
Print combat key slot resolution status |
.event.clearburning π |
Remove burning penalty from all players |
.event.end π |
End all sessions for a mode and clear burning |
.event.endall π |
End ALL active sessions and clear all burning |
.event.forceenter π |
Force a player into a mode |
.event.forceexit π |
Force a player out of their current event |
.event.start π |
Start an event mode (teleports you in) |
.event.status π |
Show all active events and player counts |
.freebuild π |
Toggle building restrictions off/on |
.kick π |
Kick player from session |
.pause π |
Pause all active sessions |
.reload π |
Reload configs from disk |
.resume π |
Resume paused sessions |
..scanbufs [filter] π |
Scan live prefabs for buffs |
..scanitems <filter> π |
Scan live prefabs for items |
..scanprefabs <filter> [maxResults] π |
Scan live prefabs matching a filter |
.setwinner π |
Set winner and end session |
..spawntest <prefabGUID> π |
Test-spawn a unit at your position |
..spawnwave <tier> <count> π |
Test-spawn a wave of enemies |
| `..stashnpc [sourceNetId | allteam] [maxDistance] [sameTeam] [minStack] [maxStacks] [itemFilter]` π |
.zoneinfo π |
Show zone stats and player counts |
| Command | Description |
|---|---|
.discoverkits π |
Auto-discover the best weapon/armor/tile/ability prefabs from live game data and export kit.json template |
.exportmods π |
Export all loaded mod data (plugins, prefabs, APIs) to JSON |
.exportplugins π |
Export loaded BepInEx plugin info to JSON |
.exportprefabs π |
Export server live prefab collection to JSON |
.findtiles π |
Search live prefabs for tile/wall/floor building pieces |
.searchprefab π |
Search ALL live prefabs by name pattern (e.g. 'Item_Weapon_Sword', 'AB_Chaos', 'Item_Armor') |
.validateprefabs π |
Check if BattleLuck prefab GUIDs exist in the game's entity map |
| Command | Description |
|---|---|
.force π |
Teleport to mode's zone and auto-start session |
.modeend π |
Force-end all sessions for a mode |
.modeinfo π |
Show mode configuration details |
.modelist π |
List all registered game modes |
.modestart π |
Start a game mode manually |
| Command | Description |
|---|---|
.mutatorclear π |
Clear all mutators |
.mutatordisable π |
Disable a mutator |
.mutatorenable π |
Enable a mutator |
.mutatorlist |
List available mutators |
| Command | Description |
|---|---|
.actions |
Show valid actions for the current mode |
..ai <your question> |
Chat with the AI assistant |
.aistatus |
Show AI assistant status and settings |
.elo |
Show Elo ratings for Colosseum mode |
.exit |
Force exit current zone session |
.help |
Show available BattleLuck commands |
.kit π |
Apply full end-game kit to yourself |
.score |
Show current scoreboard |
.toggleenter |
Enter a zone session. Use: .toggleenter [modeName] |
.toggleleave |
Properly leave the current zone session |
| Command | Description |
|---|---|
.teamaccept |
Accept team invite |
.teamcreate |
Create a team |
.teaminvite |
Invite player to your team |
.teamleave |
Leave your team |
.teamlist |
List all teams |
BattleLuck reads config from config/BattleLuck/.
Each mode folder contains:
session.jsonzones.jsonflow_enter.jsonflow_exit.jsonkit.json
ai_config.json: Google AI + optional sidecar settingsai_logger.json: AI/event logging providers and routingdiscord_bridge.json: Discord interaction bridge server configwebhook.json: BattleLuck webhook listener configspecial_item.json: Special item transformation behaviorkit_grant_rules.json: Item-to-kit reward rules for craft completion hooks
- The Discord bridge is optional and is disabled by default unless
discord_bridge.jsonhasenabled: true. - The AI assistant can run in Gemini-only mode or with sidecar enrichment.
- The sidecar client expects an API root that exposes
GET /healthandPOST /api/query/enrich. - A Superuser chat page URL is not the same thing as a sidecar API base URL.
- Stripe-to-Discord relay support lives in the AI sidecar functions and uses
POST /stripe/discord.
BattleLuck snapshots player state before mode entry and restores it on clean exit, rollback, or penalty-death recovery. The runtime currently captures and restores:
- Position
- Health
- Blood state
- Equipment level values
- Inventory items
- Derived equipped gear slots
- Weapon entries
- Ability slot replacements
- Passive buff-like abilities
- Active buffs
Snapshots are persisted under BepInEx/data/BattleLuck/snapshots/.
Release build output:
bin/Release/net6.0/BattleLuck.dll
Typical build command:
dotnet build BattleLuck.sln -c ReleaseSet VRISING_SERVER_ROOT to your dedicated server path so post-build copy targets resolve cleanly.
Example PowerShell session:
$env:VRISING_SERVER_ROOT = "C:\\Path\\To\\VRisingServer"
dotnet build BattleLuck.sln -c ReleaseThis repository now includes a Thunderstore manifest.json template at the root.
Before publishing, ensure your package zip contains:
BattleLuck.dllmanifest.jsonREADME.mdicon.png(256x256)CHANGELOG.md(recommended)
Follow upload guidance from the V Rising Mod Wiki:
BattleLuck depends on:
- BepInEx (mod loader)
- VampireCommandFramework (command registration and parsing)
Please keep dependency attributions and manifest dependency entries aligned with your released build.
BattleLuck is licensed under MIT. See LICENSE.
Third-party dependency and runtime component notices are documented in THIRD_PARTY_NOTICES.md, including VAutomationCore, VampireCommandFramework, BepInEx, Il2CppInterop, and other referenced components.
- Building restriction bypass is handled by debug-setting toggles in
BuildingRestrictionController. PlaceTileModelSystemPatchonly re-blocks castle heart placement while free-build is active.- If prefab validation fails, prefer live prefab scanning/export over stale hardcoded GUIDs.
- Accessibility in VS Code
- Download directly to project root
- Live Previews
Clone the project
git clone https://link-to-projectGo to the project directory
cd my-projectInstall dependencies
npm installStart the server
npm run start