Skip to content

AlsoNotMehh/AccountBound

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

AccountBound

AccountBound is an AzerothCore module for WotLK 3.3.5a that shares selected collections and progression systems between eligible characters on the same game account.

It combines achievements, mounts, companion pets, titles, reputations, professions and friends into one module with one configuration file. Every category can be enabled, disabled and filtered independently.

Features

  • Account-wide achievements with faction conversion support.
  • Account-wide mounts with riding, class and faction requirement checks.
  • Account-wide vanity companion pets.
  • Account-wide titles with faction conversion support.
  • Account-wide reputations that only copy higher standings.
  • Account-wide profession ranks, skill progress and recipes.
  • Configurable primary-profession limit up to all 11 WotLK professions.
  • Account-wide friend lists and friend notes.
  • Per-category startup backfill for existing realms.
  • Silent SQL synchronization without learned-spell or collection spam.
  • Character creation seeding before the character's first login.
  • Per-category ID allow lists and block lists.
  • One master switch and one module configuration file.
  • Uses AzerothCore's existing character tables.
  • No custom SQL tables are required.

Compatibility

  • AzerothCore WotLK 3.3.5a
  • AzerothCore master
  • mod-playerbots/azerothcore-wotlk
  • Built as a normal source module under modules/
  • Tested with a Release worldserver build on Windows

The module uses hooks currently available in AzerothCore. Stock AzerothCore does not require a core patch.

Silent Database Synchronization

AccountBound writes shared data directly to AzerothCore's existing character tables. It does not call learnSpell() or replay achievements, titles, reputation gains or friend notifications during login.

The synchronization lifecycle is:

  1. StartupBackfill migrates characters that already exist before players can log in.
  2. SyncOnCreate seeds a new character after its initial database save and before its first login.
  3. Normal gameplay hooks persist newly earned data to the other characters on the account.
  4. The target character loads the already-persisted rows during its next normal login.

This prevents login spam. If a requirement changes while a character is already online, such as gaining a higher riding rank, the newly eligible rows are stored immediately and become visible after one relog.

Installation

Clone the repository into the AzerothCore modules directory:

cd azerothcore-wotlk/modules
git clone https://github.com/AlsoNotMehh/AccountBound.git

Re-run CMake and rebuild worldserver.

Copy:

modules/AccountBound/conf/AccountBound.conf.dist

to:

configs/modules/AccountBound.conf

Restart worldserver.

The startup log should contain:

Using modules configuration:
> AccountBound.conf

Quick Config

The master switch controls the entire module:

AccountBound.Enable = 1

Each system has an independent switch:

AccountBound.Achievements.Enable = 1
AccountBound.Mounts.Enable = 1
AccountBound.Pets.Enable = 1
AccountBound.Titles.Enable = 1
AccountBound.Reputations.Enable = 1
AccountBound.Professions.Enable = 1
AccountBound.Friends.Enable = 1

Set any category to 0 to keep it character-specific.

Shared Data

Category Shared data
Achievements Completed achievements and completion date
Mounts Learned mount spells
Pets Vanity companion and minipet spells
Titles Known character titles
Reputations Highest eligible standing and reputation flags
Professions Ranks, current/max skill and learned recipes
Friends Friend list entries and notes

The module intentionally does not share quests, inventory, gold, currencies, honor, arena rating, instance lockouts, cooldowns, talents, glyphs, action bars, mail, auctions or hunter stable pets.

Those systems contain character-specific progression, ownership or class data and should not be merged automatically.

ID Filters

Achievements, mounts, pets, titles and reputations support:

AccountBound.CATEGORY.AllowList = all
AccountBound.CATEGORY.BlockList = ""

Replace CATEGORY with:

Achievements
Mounts
Pets
Titles
Reputations

AllowList = all permits every valid entry.

AllowList = none permits no entries.

A comma-separated allow list shares only those IDs:

AccountBound.Mounts.AllowList = 458,470,6648

The block list always wins:

AccountBound.Mounts.AllowList = all
AccountBound.Mounts.BlockList = 48778,54729

Converted Horde or Alliance equivalents must also pass the configured filter.

Achievements

Recommended defaults:

AccountBound.Achievements.Enable = 1
AccountBound.Achievements.SyncOnCreate = 1
AccountBound.Achievements.SyncRealmFirst = 0
AccountBound.Achievements.SyncHidden = 0
AccountBound.Achievements.ConvertFactionSpecific = 1

Realm First achievements are excluded by default because they represent a specific character or realm race.

Faction-specific achievements are converted with AzerothCore's faction-change mapping when ConvertFactionSpecific = 1.

Achievements are inserted into character_achievement. They are never replayed through the live achievement reward path, so the module does not resend announcements, mail, items or title notifications.

Mounts

Recommended defaults:

AccountBound.Mounts.Enable = 1
AccountBound.Mounts.SyncOnCreate = 1
AccountBound.Mounts.RespectFactionRestrictions = 1
AccountBound.Mounts.ConvertFactionSpecific = 1
AccountBound.Mounts.RequireRiding = 1
AccountBound.Mounts.RequireClass = 1

The module discovers mount spells from spell data and item templates.

It can enforce:

  • Riding skill requirements.
  • Class restrictions for class mounts.
  • Horde and Alliance restrictions.
  • Same-faction restrictions for class mounts.

Invalid shared mount rows can be cleaned at startup:

AccountBound.Mounts.CleanupInvalid = 1

Companion Pets

The pets category shares vanity companions only:

AccountBound.Pets.SyncOnCreate = 1
AccountBound.Pets.IncludeCompanionSkillLine = 1
AccountBound.Pets.IncludeMinipetSummons = 1

It detects WotLK companion skill-line spells and custom summons using SUMMON_TYPE_MINIPET.

Hunter stable pets, permanent combat pets and pet talent data are not shared.

Titles

Recommended defaults:

AccountBound.Titles.Enable = 1
AccountBound.Titles.SyncOnCreate = 1
AccountBound.Titles.SyncOnSave = 1
AccountBound.Titles.SyncRealmFirst = 0
AccountBound.Titles.ConvertFactionSpecific = 1

Realm First reward titles are excluded by default. Faction-specific titles are converted using AzerothCore's faction-change title mappings.

Reputations

Recommended public-realm defaults:

AccountBound.Reputations.Enable = 1
AccountBound.Reputations.SyncOnCreate = 1
AccountBound.Reputations.SyncOnChange = 1
AccountBound.Reputations.SameFactionOnly = 1
AccountBound.Reputations.ConvertFactionSpecific = 1

Reputation sync is monotonic: it copies a standing only when it improves the target character. It never lowers another character's standing.

Base reputation differences for race and class are respected. Cross-faction sharing can convert supported faction pairs.

Professions

The default configuration allows all 11 WotLK primary professions:

AccountBound.Professions.MaxPrimaryProfessions = 11
AccountBound.Professions.Primary.AllowList = all
AccountBound.Professions.Primary.BlockList = ""

Accepted English profession names:

alchemy, blacksmithing, enchanting, engineering, herbalism,
inscription, jewelcrafting, leatherworking, mining, skinning, tailoring

Accepted Spanish aliases:

alquimia, herreria, encantamiento, ingenieria, herboristeria,
inscripcion, joyeria, peleteria, mineria, desuello, sastreria

Skill IDs are also accepted:

171,164,333,202,182,773,755,165,186,393,197

Example:

AccountBound.Professions.Primary.AllowList = alchemy, enchanting, tailoring
AccountBound.Professions.MaxPrimaryProfessions = 3

Strict allow-list enforcement is disabled by default:

AccountBound.Professions.Primary.EnforceAllowedList = 0

Warning: enabling it can remove blocked professions from existing characters.

Account-wide profession settings:

AccountBound.Professions.SyncOnCreate = 1
AccountBound.Professions.SyncSkillProgress = 1
AccountBound.Professions.SyncProfessionRanks = 1
AccountBound.Professions.SyncRecipes = 1
AccountBound.Professions.SyncSkillGrantedSpells = 1
AccountBound.Professions.IncludeSecondaryProfessions = 1
AccountBound.Professions.RequireRecipeSkill = 1

Custom recipe spells can be explicitly allowed or blocked:

AccountBound.Professions.SpellAllowList = 900001,900002
AccountBound.Professions.SpellBlockList = 20219,20222

Friends

The friends category mirrors the normal character friend list across every character on an account:

AccountBound.Friends.SyncOnCreate = 1
AccountBound.Friends.SyncOnlineChanges = 1
AccountBound.Friends.SyncIntervalSeconds = 3

Friend notes are shared. Characters belonging to the same account are removed from the friend list to avoid self-friend entries.

Cross-faction friends are allowed by default:

AccountBound.Friends.SameFactionOnly = 0

Startup Backfill

Every progression category has a StartupBackfill setting.

Example:

AccountBound.Achievements.StartupBackfill = 1
AccountBound.Mounts.StartupBackfill = 1
AccountBound.Pets.StartupBackfill = 1
AccountBound.Titles.StartupBackfill = 1
AccountBound.Reputations.StartupBackfill = 1
AccountBound.Professions.StartupBackfill = 1
AccountBound.Friends.StartupBackfill = 1

For an existing realm:

  1. Back up the characters database.
  2. Enable the categories you want.
  3. Enable their startup backfill options.
  4. Start worldserver once.
  5. Wait for every AccountBound startup message.
  6. Stop worldserver.
  7. Set the startup backfill options back to 0.
  8. Start the server normally.

Backfill uses idempotent inserts or monotonic updates, but it can touch many rows on a large realm.

Version 1.1 replaces the old SyncOnLogin options with SyncOnCreate. Existing custom configuration files should be updated to use the new keys.

Safe Public-Realm Defaults

AccountBound.Enable = 1

AccountBound.Achievements.SyncRealmFirst = 0
AccountBound.Achievements.SyncHidden = 0

AccountBound.Mounts.RespectFactionRestrictions = 1
AccountBound.Mounts.RequireRiding = 1
AccountBound.Mounts.RequireClass = 1

AccountBound.Titles.SyncRealmFirst = 0

AccountBound.Reputations.SameFactionOnly = 1
AccountBound.Reputations.SyncUnpairedCrossFaction = 0

AccountBound.Professions.Primary.EnforceAllowedList = 0
AccountBound.Professions.RequireRecipeSkill = 1

AccountBound.Friends.StartupBackfill = 1

After the initial migration, keep every broad StartupBackfill option disabled.

Database Tables Used

The module uses normal AzerothCore tables:

characters
character_achievement
character_spell
character_skills
character_reputation
character_social

No custom tables or SQL installation files are required.

Troubleshooting

If the module is not loaded:

  • Confirm the folder is modules/AccountBound.
  • Re-run CMake after adding the module.
  • Rebuild worldserver.
  • Confirm configs/modules/AccountBound.conf exists.
  • Confirm AccountBound.Enable = 1.

If a mount is not shared:

  • Confirm the spell passes AllowList and BlockList.
  • Check riding, class and faction requirements.
  • Check RequireRiding, RequireClass and RespectFactionRestrictions.

If a profession recipe is not shared:

  • Confirm the profession is allowed.
  • Confirm SyncRecipes = 1.
  • Confirm the target has sufficient skill when RequireRecipeSkill = 1.
  • Add custom recipes to SpellAllowList.

If data was inserted while the target character was already online:

  • Relog once so AzerothCore reloads the updated character tables.

If startup takes longer than normal:

  • Disable broad StartupBackfill options after the initial migration.

Files

AccountBound/
  conf/
    AccountBound.conf.dist
  src/
    AccountBound.h
    Achievements.cpp
    Friends.cpp
    Mounts.cpp
    Pets.cpp
    Professions.cpp
    Reputations.cpp
    Titles.cpp
    loader.cpp
  CHANGELOG.md
  LICENSE
  README.md

License

AccountBound is distributed under GPL-2.0 to match the AzerothCore core license.

About

Configurable account-wide achievements, mounts, pets, titles, reputations, professions and friends for AzerothCore WotLK.

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages