transfer) used lowercase column names (guid, currency, quantity) that
match a different fork's schema but not TrinityCore's character_currency
table, which uses PascalCase (CharacterGuid, Currency, Quantity) as
seen in CHAR_SEL_PLAYER_CURRENCY / CHAR_UPD_PLAYER_CURRENCY /
CHAR_REP_PLAYER_CURRENCY / CHAR_DEL_PLAYER_CURRENCY at the top of the
file. mysql_stmt_prepare rejected both statements at startup with
"Unknown column 'pc.guid' in 'on clause'" / "Unknown column 'guid'
in 'where clause'", taking the tc_characters pool down.
CHAR_SEL_ACCOUNT_CHARACTER_CURRENCIES: pc.currency -> pc.Currency,
pc.quantity -> pc.Quantity, ON c.guid = pc.guid ->
ON c.guid = pc.CharacterGuid.
CHAR_UPD_PLAYER_CURRENCY_QUANTITY: SET quantity -> SET Quantity,
WHERE guid -> WHERE CharacterGuid, currency -> Currency.
User feedback: the textureKit string is already in DB2 (Campaign.UiTextureKitID
-> UiTextureKit.KitPrefix); don't duplicate it in a fabricated world-config
column.
- Add UiTextureKit.db2 loader (struct, LoadInfo, store, LOAD_DB2 call,
HOTFIX_SEL_UI_TEXTURE_KIT enum + statement, ui_texture_kit hotfix table).
Schema: ID + KitPrefix string (FieldCount=1 per UiTextureKitMeta,
LayoutHash 0x4740638A at build 12.0.5.67186).
- MajorFactionMgr:
* Drop MajorFactionConfig::TextureKit (std::string).
* Add MajorFactionConfig::RenownCampaignID (uint32) - Campaign.db2 FK.
* Validate FK against sCampaignStore at LoadWorldData time; clear with
error log if the campaign row is missing.
* Add GetRenownCampaignID(factionId) and GetTextureKitPrefix(factionId).
GetTextureKitPrefix walks the canonical Blizzard chain:
faction -> renownCampaignId
-> Campaign.UiTextureKitID
-> UiTextureKit.KitPrefix
and returns the string the client uses as the atlas-name suffix
(e.g. "MajorFaction-DragonscaleExpedition").
- World data: 2026_05_16_01_world.sql rewritten. Column textureKit
replaced by renownCampaignId. Values pulled per-faction from the JSON
research files (campaign.id / campaign_id field):
DF: 166/197/189/174/203/231
TWW 11.0: 238/236/237/239
TWW 11.1+: 264/267/268
Midnight: 270 (shared 17-chapter)/267 (shared)
Plunderstorm/Gallagio/RitualSites: 0 (no associated campaign)
This was the user-observed redundancy: we had loaded 3 campaign DB2s
(Campaign, CampaignXQuestLine, CampaignXCondition - all wired) but
were not consuming Campaign.UiTextureKitID. Now wired.
- implemented JoiningTheAlliance = 30987;
- implemented TheAllianceWay = 30988;
- implemented AnOldPitFighter = 30989;
- code compiles without any errors or warnings - checked against TC pipelines
- the sql file adds new spawns - feel free to update the CGUID with the current last used GUID if needed.
!!! Please do not remove my credits from my files.
- improved the base script to avoid npc not properly terminating combat on player massive damage or edge case leading to npc death - on live the npc never gets under 20% hp
- added also auras for flame blessings being cast on the player during the combat phase - there is a bug with the Auras NOT showing but they get applied and work properly.
- EnterEvadeMode is now properly handled and the npc also despawns correctly at the end of the combat phase.
missing/in-memory-created door GO templates previously had no Data10/goober.spell
that caused the client cast to be rejected or the door not to activate
now the generated door GO templates include the correct housing door spell
plate). Remove armor subclass restriction in CanTransmogrifyItemWithItem
while preserving slot compatibility and weapon category rules. Replace
CanUseItem check in transmog handler with faction/race-only gating.
Quest package items now learn appearances for all armor types.
Replace the narrow reagent-only / warbound-only auto-deposit handlers
with the modern "Deposit All" behaviour the warband bank UI expects:
- Each tab's BagSlotFlags::Priority<Equipment|Consumables|TradeGoods|
Junk|QuestItems|Reagents> are persisted in {character,account}_bank_
tab_settings.depositFlags. The handler now classifies every eligible
inventory item (Player::GetItemAutoDepositCategory) and routes it
to the first tab whose flags match (Player::PickAutoDepositTab),
falling back to the first tab without any priority filter, then to
any tab without DisableAutoSort ("Cleanup: Ignore this tab").
- Player::GetItemsForBankAutoDeposit collects eligible inventory
items per bank type, applying the warband bank's
"Include tradeable reagents" toggle (CVar bankAutoDepositReagents)
when bank == Account.
CMSG_AUTO_DEPOSIT_ACCOUNT_BANK actually carries that toggle on the
wire (verified against build 12.0.5.67186 client serializer): 1 bit
IncludeReagents, then the banker GUID. The previous Read() consumed
the GUID byte-aligned and silently mis-parsed when the bit was set.
Add the IncludeReagents field and read it first.
✅ Only creates new bot characters if there's space available (< 10 characters per account)
✅ Gracefully skips creation when account is full instead of failing with repeated errors
✅ Logs appropriate debug messages when accounts are full