build 3.3.5a AzerothCore fork 100s of bots 800+ commands repack free forever AI agents → /ai-agents // wow-legends.eu
Guides

AI Chat liveHow the talking bots really work — what's free, what costs credits, and every setting to tune them

WOW Legends bots don't just run combat — they talk. Whisper one and it answers in character, remembers you across days, and has a temper if you push it. That conversation is powered by a real, high-tier language model, not a tiny model bundled in the repack — so the hosted version runs on credits (1 credit = 1 reply). You can also point it at your own model and pay nothing to us. This guide covers exactly how it works and every dial.

What's free, and what uses credits

The single most common question — so let's nail it first.

Free, always

The random general / world chatter bots type as they roam is not the AI — those are fixed canned lines from the database (mod-playerbots' ai_playerbot_texts). They keep the world feeling alive and cost nothing: no credits, no API calls, ever.

Real AI — 1 credit each

Only when a bot answers you does the language model run: a whisper, party/raid or guild reply, or a proximity chime-in. On the hosted AI that's 1 credit per reply; on your own Ollama it's free.

If no AI backend is reachable, bots simply stay silent — no error, no crash. And the HTTP call runs off the main thread, so AI replies never lag your server; the answer just arrives on the next tick.

When & where bots use the AI

Four things make a bot actually think and reply. Everything else is free canned chatter.

TriggerWhat happensSettings
Whisper a botIt replies in character — directed, so it always answers.on when Enabled=1
Party / raid chatA named bot replies directly; otherwise one random group-bot may chime in.PartyChat · PartyAmbientChance
Guild chatA bot replies only when named (guilds are big — no free-for-all).GuildChat
Proximity (/say, /yell)A nearby bot may answer out loud for city/world ambiance; a named one always answers. Uses the cheaper ModelFast tier if you set one.ProximityChat · ProximityRange · ProximityChance
Living Chatter v1.2 · opt-inBots near you narrate their own life and act out two-bot scenes — unprompted, witnessed-only, hard daily budget. Full section below.LivingChatter.* (off by default)

Plain whisper = AI chat. A $-prefixed message is a bot order. So /w Grom hello there talks to the AI (1 credit), while /w Grom $follow or $summon is a command handled by the bot engine — the AI ignores it and no credit is spent. ($ is the AiPlayerbot.CommandPrefix.) Want a chattier open world like the demo realm? Raise ProximityChance / PartyAmbientChance — more ambient AI replies, more credits.

Power it your way — three options

You own the brain. Pick one:

Hosted WL AI easiest

Works out of the box. Grab an API key from your account dashboard, paste it into AiChat.ApiKey — no model setup. Supporters get 2,500 credits included; top up anytime. Metered per reply by the hosted endpoint.

Your own cloud key

OpenAI (GPT-4o, o-series), Anthropic's Claude, or any OpenAI-compatible API. You pay your provider directly, no WL credits. Set Provider / ApiUrl / ApiKey / Model.

Local Ollama free

Runs on your own machine, no key, no cost. Set Provider = "ollama", your OllamaHost/OllamaPort, and a Model you've pulled (e.g. llama3.1).

Quick setup recipes

# Hosted WoW Legends AI — the whole setup:
WowLegends.AiChat.Provider = "openai"
WowLegends.AiChat.ApiUrl   = "https://wow-legends.eu/api/v1/ai/chat/completions"
WowLegends.AiChat.ApiKey   = "wlk_your_key_from_the_dashboard"
WowLegends.AiChat.Model    = ""        # empty = the hosted endpoint chooses

⚠️ Using a reasoning model (e.g. OpenAI's o-series)? Set MaxTokens higher (~2000) or replies can come back empty — the reasoning eats the budget. And keep VerifyTLS = 01 is known to silence AI chat unless the host has a proper CA bundle.

Memory, personality & mood

Remembers you

Each bot keeps your recent exchanges per player, stored in playerbot_ai_chat_memory — so it remembers you across restarts and days. Depth = MemoryTurns (default 12, ceiling 200; higher = more context, more tokens).

Its own voice

Every bot gets its own race + faction persona injected automatically (one cheap line each) on top of the base System prompt. Fully editable per race and side. Replies in the language of your latest message.

Has a temper

Insult a bot and its anger climbs (+2 each). With RudeActions=1, a grouped bot can storm out of your party (LeavePartyAnger) and an ungrouped one can roar in fury (RoarAnger).

Replies are plain text only — the 3.3.5a client can't render emoji (they'd show as ?), so the model is told to skip them.

Per-race & per-faction personas

Every reply is shaped in three layers: the base System rules + that bot's race line + its faction line. Only those two flavour lines are injected per call, so it stays token-cheap. All are editable in mod_wowlegends.conf — rewrite a line to re-flavour a race or side, or set a race to "" to suppress it. These are the shipped defaults:

Per-race WowLegends.AiChat.Race.<Name>

Per-faction WowLegends.AiChat.Faction.<Side>

The base System prompt is editable too — the shared rulebook every bot follows: reply in 1–2 in-character sentences, match the player's language, plain text only (no emoji), and never break character or invent facts. Rewrite any of these to give your whole realm its own voice.

Living Chatter — the world talks around you v1.2 · opt-in

Everything above is bots answering you. Living Chatter is the reverse: bots near you speak unprompted, AI-generated and about their actual life — their zone, class, level, what they're doing right now. A level 12 in Elwynn gripes about wolves, not raids. It comes in three flavours:

It's off by default, because it spends. Every generated line is one AI call — 1 credit on the hosted AI, or your own meter on Ollama / your API key. Three guards keep it affordable: generation is witnessed-only (nothing generates unless a real player is within WitnessRange to read it — an empty realm spends nothing), the intervals throttle the pace, and MaxRequestsPerDay is a hard daily cap across all of Living Chatter. Player whispers are never counted against this budget.

Try it before enabling — the test commands

Two GM commands (account gmlevel 2+) force one sample on demand. They work even while LivingChatter.Enabled = 0 — they bypass the master toggle and cooldowns, but not the daily budget — so you can see what a line costs and reads like before turning it on. Both are in-game only (they pick bots near your character); the full option list for test is ambient and scene.

CommandWhat it doesExample
.aichat test ambientOne AI-generated ambient line from a bot near you, within a few seconds. Tells you if no eligible bot is nearby, AI chat is off, or the budget is spent..aichat test ambient
.aichat test sceneOne two-bot AI-written scene (4 lines, natural pauses) between two same-faction bots near you..aichat test scene
.aichat statsLive telemetry: requests, replies, deliveries, queue/dedupe drops, failures, real provider-reported token usage (today + since start), and the Living Chatter budget state. Works in-game and from the remote console..aichat stats

The Living Chatter settings

Prefix WowLegends.LivingChatter. in mod_wowlegends.conf — defaults as shipped:

KeyDefaultWhat it does
Enabled0Master switch. Off by default — enabling spends credits / API calls.
AmbientIntervalSec120Target gap between ambient lines (minimum 30).
SceneIntervalSec420Target gap between two-bot scenes (minimum 60).
WitnessRange30Yards a real player must be within for anything to generate.
MaxRequestsPerDay600Hard daily cap across all Living Chatter (ambient + scenes + AI greetings).
AiGreetings1Recognition greetings from bots that know you use the AI (instead of canned lines) while Living Chatter is enabled.

Every setting

All keys live in mod_wowlegends.conf under "BOT AI CHAT" and are prefixed WowLegends.AiChat. Changes apply on a worldserver restart or .reload config.

KeyDefaultWhat it does
Enabled1Master on/off for all AI chat.
Provider"openai"Backend: openai (hosted or your own cloud key), ollama (local, free), anthropic.
ApiUrl…/api/v1/ai/chat/completionsEndpoint. Default = hosted WL AI. BYO: OpenAI api.openai.com/v1/chat/completions, Anthropic / Claude api.anthropic.com/v1/messages. Ignored for Ollama.
ApiKey""Your key — the wlk_ dashboard key (hosted) or your provider key (BYO). Empty for Ollama. Keep private.
Model""Empty = the hosted endpoint picks. Required for Ollama / your own cloud (the model name).
ModelFastunsetOptional cheaper model for high-volume ambient chatter (proximity/party chime-ins). Empty = one model for all.
OllamaHost"127.0.0.1"Where Ollama listens (Provider=ollama only).
OllamaPort"11434"Ollama port.
MaxTokens512Reply-length cap for cloud calls. With a reasoning model (e.g. OpenAI o-series) set it higher (~2000) or replies can come back empty.
Temperature0.7Sampling temperature (openai/ollama; anthropic ignores it).
TimeoutMs20000Per-request network timeout (ms).
VerifyTLS0TLS cert verification. Keep 01 breaks AI chat unless the host has a CA bundle.
CooldownSeconds5Per-bot reply cooldown (spam / token guard).
Dedupe1(v1.2) Drop near-repeat bot replies so the same line doesn't come back twice.
Workers2(v1.2) Parallel AI round-trips (1–4) — several bots can answer at once instead of queueing behind one slow reply. Needs a worldserver restart (not just .reload config).
MemoryTurns12Remembered exchanges per (bot, player), persisted. Ceiling 200.
PartyChat1Bots may answer party/raid chat.
GuildChat1Bots may answer guild chat — only when named.
PartyAmbientChance25% chance one group-bot answers an un-addressed party line.
ProximityChat1A nearby bot may answer a real player's say/yell aloud.
ProximityRange20Yards to scan for nearby bots (WoW say range ≈ 20).
ProximityChance12% chance one nearby bot answers an un-addressed say (named always answer).
RudeActions1An angered bot can physically act (rage-quit party / roar).
LeavePartyAnger4Anger level at which a grouped bot storms out (insults +2 each).
RoarAnger6Anger at which an ungrouped bot roars at you.
Systemlong promptBase system prompt / shared rules (1–2 in-character sentences, no emoji, reply in the player's language, never break character).
Race.<Name>baked-inPer-race persona, injected only for that bot's race: Human, Orc, Dwarf, NightElf, Undead, Tauren, Gnome, Troll, BloodElf, Draenei. "" suppresses one.
Faction.Alliance / .Hordebaked-inPer-faction persona, injected for that bot's side.

That's the whole brain. Start with the hosted AI for zero setup, or point it at your own Ollama and chat for free — either way, whisper a bot something and watch it answer. 🐉 Pair it with your permanent Companion, or see the Owner Guide for the rest.