build 3.3.5a AzerothCore fork 100s of bots 800+ commands repack free forever // 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

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.

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).
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.