Home Lab · Game Servers

Making a solo VMaNGOS server feel alive

VMaNGOS ships with a real, compiled-in playerbot AI system -- 15,000+ lines of it, most people never find out how much is actually in there. This is what's really built, what's genuinely missing, the in-game commands to drive it today, and the companion-crew pattern that grew into a full LLM-driven living-chat system.

Core  VMaNGOS, patch 1.12 "Drums of War" Hardware  Raspberry Pi 5 Why  A solo server that still feels like it has people in it
OVERVIEW

The goal: a world that doesn't feel empty

A solo private server has one obvious problem -- nobody else is in it. VMaNGOS (a Vanilla/1.12 MaNGOS fork) turns out to already have a real answer to that baked into the binary, not a rumor or a half-finished mod. The approach here was to actually read the source before building anything, rather than assume a feature exists or guess at what's missing.

i

Everything below is source-grounded Every "built" claim traces back to reading PlayerBots/ in the core source tree directly -- class hierarchy, function names, in-game commands -- not documentation, not assumption. Where something's genuinely unverified, it says so.

STEP 1

What's already compiled in

core/src/game/PlayerBots/ is a real, dedicated bot AI system -- 15,620 lines across 6 files. Not a stub, not a config flag with nothing behind it.

  • PlayerBotAIBase class every bot type builds on.
  • CombatBotBaseAIShared per-class combat logic -- full rotation coverage for all 9 classic classes.
  • PartyBotAIGroup/raid play -- raid-icon-aware, dungeon-state-aware.
  • BattleBotAI3,400+ lines dedicated to battlegrounds, plus a 2,100-line waypoint map.
  • PopulateAreaBotAIWhat "RandomBot" actually runs -- ambient crowd-filler at fixed points, not a leveler.
!

The one that surprised me The config file's own comment for RandomBot says "no AI, you have to code one and assign it" -- and it's right. PopulateAreaBotAI spawns bots at three hardcoded coordinate sets outside capital cities to look like foot traffic. It does not quest, path between zones, or gain XP. If you want bots that actually level themselves up around the world, that class is not it -- that would be new development, not a flag to flip.

STEP 2

Per-feature status

Checked against the actual code rather than assumed. "Built" means it's implemented and just needs enabling or populating. "Partial" means the scaffolding exists but quality is unverified until you actually watch it run. "Gap" means the code genuinely isn't there.

FeatureStatusNotes
Filling 40-man raidsBuiltRaid-icon-aware party AI, unlimited bot count. Bottleneck is having a character roster, not code.
Tank / Healer / DPS rolesBuiltExplicit role-awareness across all 9 classes.
Bots leveling soloGapSee the RandomBot callout above -- would need a real questbot AI layer.
Trade/general chat banterGapZero chat-generation code exists anywhere in the bot system today. Design spec below, not yet built.
Auction house stocked at fair pricesBuiltSeparate, older subsystem (AHBot) -- the engine's there, needs a better item/price catalog.
Dungeon completionPartialReal dungeon-context awareness in code; combat quality on actual boss mechanics unverified without playtesting.
Open-world PvPPartialFound reactive combat only (fights when attacked) -- no evidence of bots roaming to hunt the opposing faction.
BattlegroundsBuiltThe most mature system found -- covers every battleground that exists at this patch level.
Smart raid/dungeon rotationsPartialComprehensive per-class code exists; "exists" isn't the same as "good enough," needs playtesting.
STEP 3

Using bots in-game

A full, mature GM command suite already exists for driving party bots -- no external tooling needed to start using any of this. Requires an account with SEC_ADMINISTRATOR access.

Spawn and organize a group
.partybot add tank
.partybot add healer
.partybot add dps
.partybot add dps
# tank/healer/dps auto-pick a faction-appropriate class (Paladin only
# offered Alliance-side, Shaman only Horde-side -- matches real game rules)
!

Bots can't be added mid-instance .partybot add is blocked entirely once you're inside a dungeon. Add the group before you go in, not after.

Directing them once you're fighting

CommandWhat it does
.partybot setrole <role>Set role on the currently target-selected bot.
.partybot pullMage-pull-style opener.
.partybot attackstart / attackstopManual combat direction.
.partybot aoeToggle AoE rotation mode.
.partybot ccmark <icon> / focusmark <icon>Assign crowd-control or focus-fire to a specific raid target icon.
.partybot clearmarksClear all icon assignments.
.partybot cometomeRegroup bots on your position.
.partybot usegobjectBots interact with a game object -- relevant for lever/quest-item dungeon mechanics.
.partybot pausePause bot AI.

A separate .bot command group also exists (add/add_all/ranadd/start/stop/delete/info/reload) -- appears related to RandomBot management, not investigated in as much depth as the party-bot suite above.

STEP 4

Building a persistent companion crew

Ad-hoc .partybot add bots get randomly rolled and forgotten. For bots you actually want to recognize and grow attached to, there's a better mechanism.

Load a specific, already-existing character as a bot
.partybot load <charactername>
# the character must exist and be offline -- this is a real character
# with real gear/inventory/level, not a scripted illusion
.partybot setrole tank # (or healer / dps, after target-selecting them)

The pattern: create a handful of characters normally through the client -- exact race, gender, and class chosen deliberately, not randomly rolled -- gear and level them like any other character over time, then bring the whole crew along with .partybot load whenever you're playing your main. A tank, a healer, and two or three DPS covers most 5-man content and gives you a real nucleus to build toward raid content later.

Why this beats a purely simulated companion Because they're real characters, you can actually gear them, watch them level, and have them mean something over a long playthrough -- not a cosmetic follower with a fixed stat block.

STEP 5

The tunable config surface

Between mangosd.conf/realmd.conf and the config-relevant database tables, there are over 560 individual settings on a VMaNGOS install -- most of them infrastructure plumbing you'll never touch. The categories that actually matter for a "living world" server:

  • Bot systemsRandomBot / PartyBot / BattleBot / PlayerBot toggles and limits.
  • Rates & progressionXP, loot, gold, reputation, and respec-cost multipliers.
  • Anticheat / WardenCommonly loosened on private servers to avoid false-positive bans.
  • GM accessWhat an admin account can do and how visible it is.
  • Auction house botOn/off + interval; the real per-item catalog lives in the database.

Also worth knowing if you're building tooling against this: neither mangosd nor realmd rewrites its own config file on shutdown, so a straightforward write the file, then restart the service is safe -- verified by checking file modification times across multiple restarts, not assumed. Some other game server config files (Palworld's, notably) silently overwrite edits on shutdown; this core doesn't.

STEP 6

The living-chat system, now live

This section used to be a design spec sitting on the shelf. It isn't anymore -- ambient trade/general chatter, reactive responses, a persistent LLM-driven companion crew, and three standalone oracle NPCs are all live in-game today. Full writeup moved to its own pages so this one doesn't get overloaded:

Building an LLM Companion Crew Into VMaNGOS /wiki/vmangos-companion-chat-technical.html VMaNGOS Companion Crew — Meet The Cast /wiki/vmangos-companion-chat-functional.html

Two pieces of the original design held up exactly as planned: ambient chat as injected text with no real character behind it, and reactive chat by tailing VMaNGOS's own plain-text chat log for trigger words -- both fully viable without touching the core binary. What changed from the original spec: the companion crew and the standalone oracles are real, named characters voiced by a self-hosted LLM, not phrase-bank archetypes -- richer than originally planned, at the cost of needing a few small, deliberate core patches the phrase-bank version never would have.

The content line held too: early-2000s trade chat gatekeeping, ninja-loot rage-bait, and confidently wrong people are all fair game at full intensity. Real slurs or hate speech are not, regardless of "historical accuracy" framing -- that boundary hasn't moved.

WHAT'S NEXT

Sequencing

  • Read the source instead of guessing what's built vs. missing
  • Confirm the GM command suite as the immediate path to testing bots live
  • Enable ambient capital-city crowd-filling as a lightweight substitute for full solo-leveling AI
  • Playtest an actual dungeon run with a party-bot group to verify AI quality claims
  • Build a proper character-creation/roster tool -- serves both raid-filling and a persistent companion crew
  • Curate the auction house with a realistic, level-appropriate item catalog
  • Build the living-chat system once the above is settled

Open-world PvP and deeper battleground-AI tuning (Alterac Valley's objective handling and Warsong Gulch flag-carrier tactics both looked thinner than the rest of the system on inspection) are parked for later -- not because they're uninteresting, just not the current priority.