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.AllowSavingis enabled (Player Bots).