Skip to content

Character Login Pipeline

What the server loads when a player logs in, and which tables feed it. The query set lives in Player::_LoadFrom / PLAYER_LOGIN_QUERY_* (src/game/Objects/Player.cpp).


Load Order

Step Data Source table(s)
1 Character row: vitals, position, money, appearance characters
2 Home bind (hearthstone point) character_homebind
3 Group membership groups, group_member
4 Honour CP for today character_honor_cp
5 Instance saves & BG data character_instance, character_battleground_data
6 Guild guild_member, guild_rank
7 Skills (+ forgotten skills) character_skills, character_forgotten_skills
8 Auras that persist character_aura
9 Spells character_spell
10 Quest state character_queststatus
11 Reputations character_reputation
12 Inventory items character_inventory → item_instance
13 Open item loot item_loot
14 Spell cooldowns character_spell_cooldown

After the load phase the world sends login packets; online on the character row flips to 1 until logout.


Why It Matters

  • Missing rows (e.g. an inventory entry without its item_instance) are logged as DB errors and skipped, so keep referential integrity.
  • Corrupt position (bad map/coords) triggers a home-bind fallback from character_homebind.
  • Bots reuse the same pipeline when PlayerBot.AllowSaving is enabled (Player Bots).