diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/database/Database/Implementation/HotfixDatabase.cpp | 7 | ||||
-rw-r--r-- | src/server/database/Database/Implementation/HotfixDatabase.h | 4 | ||||
-rw-r--r-- | src/server/game/Chat/ChatCommands/ChatCommandArgs.cpp | 3 | ||||
-rw-r--r-- | src/server/game/Chat/HyperlinkTags.cpp | 69 | ||||
-rw-r--r-- | src/server/game/Chat/Hyperlinks.cpp | 42 | ||||
-rw-r--r-- | src/server/game/Chat/Hyperlinks.h | 92 | ||||
-rw-r--r-- | src/server/game/DataStores/DB2LoadInfo.h | 17 | ||||
-rw-r--r-- | src/server/game/DataStores/DB2Stores.cpp | 2 | ||||
-rw-r--r-- | src/server/game/DataStores/DB2Stores.h | 1 | ||||
-rw-r--r-- | src/server/game/DataStores/DB2Structure.h | 12 | ||||
-rw-r--r-- | src/server/game/Miscellaneous/SharedDefines.h | 1 |
11 files changed, 246 insertions, 4 deletions
diff --git a/src/server/database/Database/Implementation/HotfixDatabase.cpp b/src/server/database/Database/Implementation/HotfixDatabase.cpp index d3fa897ea76..37826e5341d 100644 --- a/src/server/database/Database/Implementation/HotfixDatabase.cpp +++ b/src/server/database/Database/Implementation/HotfixDatabase.cpp @@ -237,6 +237,13 @@ void HotfixDatabaseConnection::DoPrepareStatements() PREPARE_LOCALE_STMT(HOTFIX_SEL_BARBER_SHOP_STYLE, "SELECT ID, DisplayName_lang, Description_lang FROM barber_shop_style_locale" " WHERE (`VerifiedBuild` > 0) = ? AND locale = ?", CONNECTION_SYNCH); + // BattlePetAbility.db2 + PrepareStatement(HOTFIX_SEL_BATTLE_PET_ABILITY, "SELECT ID, Name, Description, IconFileDataID, PetTypeEnum, Cooldown, BattlePetVisualID, Flags" + " FROM battle_pet_ability WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_BATTLE_PET_ABILITY, "SELECT MAX(ID) + 1 FROM battle_pet_ability", CONNECTION_SYNCH); + PREPARE_LOCALE_STMT(HOTFIX_SEL_BATTLE_PET_ABILITY, "SELECT ID, Name_lang, Description_lang FROM battle_pet_ability_locale" + " WHERE (`VerifiedBuild` > 0) = ? AND locale = ?", CONNECTION_SYNCH); + // BattlePetBreedQuality.db2 PrepareStatement(HOTFIX_SEL_BATTLE_PET_BREED_QUALITY, "SELECT ID, MaxQualityRoll, StateMultiplier, QualityEnum FROM battle_pet_breed_quality" " WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH); diff --git a/src/server/database/Database/Implementation/HotfixDatabase.h b/src/server/database/Database/Implementation/HotfixDatabase.h index a926f045989..f43b85fae5a 100644 --- a/src/server/database/Database/Implementation/HotfixDatabase.h +++ b/src/server/database/Database/Implementation/HotfixDatabase.h @@ -154,6 +154,10 @@ enum HotfixDatabaseStatements : uint32 HOTFIX_SEL_BARBER_SHOP_STYLE_MAX_ID, HOTFIX_SEL_BARBER_SHOP_STYLE_LOCALE, + HOTFIX_SEL_BATTLE_PET_ABILITY, + HOTFIX_SEL_BATTLE_PET_ABILITY_MAX_ID, + HOTFIX_SEL_BATTLE_PET_ABILITY_LOCALE, + HOTFIX_SEL_BATTLE_PET_BREED_QUALITY, HOTFIX_SEL_BATTLE_PET_BREED_QUALITY_MAX_ID, diff --git a/src/server/game/Chat/ChatCommands/ChatCommandArgs.cpp b/src/server/game/Chat/ChatCommands/ChatCommandArgs.cpp index 8989a5a2cba..e4b0d7b4d2c 100644 --- a/src/server/game/Chat/ChatCommands/ChatCommandArgs.cpp +++ b/src/server/game/Chat/ChatCommands/ChatCommandArgs.cpp @@ -118,6 +118,7 @@ struct SpellInfoVisitor value_type operator()(Hyperlink<conduit> soulbindConduit) const { return operator()((*soulbindConduit)->SpellID); } value_type operator()(Hyperlink<enchant> enchant) const { return enchant; } value_type operator()(Hyperlink<mawpower> mawPower) const { return operator()((*mawPower)->SpellID); } + value_type operator()(Hyperlink<mount> const& mount) const { return mount->Spell; } value_type operator()(Hyperlink<pvptal> pvpTalent) const { return operator()((*pvpTalent)->SpellID); } value_type operator()(Hyperlink<spell> spell) const { return spell->Spell; } value_type operator()(Hyperlink<talent> talent) const { return operator()((*talent)->SpellID); } @@ -127,7 +128,7 @@ struct SpellInfoVisitor }; ChatCommandResult Trinity::Impl::ChatCommands::ArgInfo<SpellInfo const*>::TryConsume(SpellInfo const*& data, ChatHandler const* handler, std::string_view args) { - Variant<Hyperlink<apower>, Hyperlink<conduit>, Hyperlink<enchant>, Hyperlink<mawpower>, Hyperlink<pvptal>, Hyperlink<spell>, Hyperlink<talent>, Hyperlink<trade>, uint32> val; + Variant<Hyperlink<apower>, Hyperlink<conduit>, Hyperlink<enchant>, Hyperlink<mawpower>, Hyperlink<mount>, Hyperlink<pvptal>, Hyperlink<spell>, Hyperlink<talent>, Hyperlink<trade>, uint32> val; ChatCommandResult result = ArgInfo<decltype(val)>::TryConsume(val, handler, args); if (!result || (data = val.visit(SpellInfoVisitor()))) return result; diff --git a/src/server/game/Chat/HyperlinkTags.cpp b/src/server/game/Chat/HyperlinkTags.cpp index 49965411986..e12a519f67d 100644 --- a/src/server/game/Chat/HyperlinkTags.cpp +++ b/src/server/game/Chat/HyperlinkTags.cpp @@ -97,6 +97,14 @@ bool Trinity::Hyperlinks::LinkTags::achievement::StoreTo(AchievementLinkData& va return (t.TryConsumeTo(val.Criteria[0]) && t.TryConsumeTo(val.Criteria[1]) && t.TryConsumeTo(val.Criteria[2]) && t.TryConsumeTo(val.Criteria[3]) && t.IsEmpty()); } +bool Trinity::Hyperlinks::LinkTags::api::StoreTo(ApiLinkData& val, std::string_view text) +{ + HyperlinkDataTokenizer t(text, true); + if (!(t.TryConsumeTo(val.Type) && t.TryConsumeTo(val.Name) && t.TryConsumeTo(val.Parent) && t.IsEmpty())) + return false; + return true; +} + bool Trinity::Hyperlinks::LinkTags::apower::StoreTo(ArtifactPowerLinkData& val, std::string_view text) { HyperlinkDataTokenizer t(text); @@ -134,6 +142,17 @@ bool Trinity::Hyperlinks::LinkTags::battlepet::StoreTo(BattlePetLinkData& val, s && t.IsEmpty(); } +bool Trinity::Hyperlinks::LinkTags::battlePetAbil::StoreTo(BattlePetAbilLinkData& val, std::string_view text) +{ + HyperlinkDataTokenizer t(text); + uint32 battlePetAbilityId; + if (!t.TryConsumeTo(battlePetAbilityId)) + return false; + return (val.Ability = sBattlePetAbilityStore.LookupEntry(battlePetAbilityId)) + && t.TryConsumeTo(val.MaxHealth) && t.TryConsumeTo(val.Power) && t.TryConsumeTo(val.Speed) + && t.IsEmpty(); +} + bool Trinity::Hyperlinks::LinkTags::conduit::StoreTo(SoulbindConduitRankEntry const*& val, std::string_view text) { HyperlinkDataTokenizer t(text); @@ -156,6 +175,32 @@ bool Trinity::Hyperlinks::LinkTags::currency::StoreTo(CurrencyLinkData& val, std return true; } +bool Trinity::Hyperlinks::LinkTags::dungeonScore::StoreTo(DungeonScoreLinkData& val, std::string_view text) +{ + HyperlinkDataTokenizer t(text); + if (!t.TryConsumeTo(val.Score) || !t.TryConsumeTo(val.Player) || !val.Player.IsPlayer() + || !t.TryConsumeTo(val.PlayerName) || !t.TryConsumeTo(val.PlayerClass) || !t.TryConsumeTo(val.AvgItemLevel) + || !t.TryConsumeTo(val.PlayerLevel) || !t.TryConsumeTo(val.RunsThisSeason) + || !t.TryConsumeTo(val.BestSeasonScore) || !t.TryConsumeTo(val.BestSeasonNumber)) + return false; + + if (t.IsEmpty()) + return true; + + for (uint32 i = 0; i < 10; ++i) + { + DungeonScoreLinkData::Dungeon& dungeon = val.Dungeons.emplace_back(); + if (!t.TryConsumeTo(dungeon.MapChallengeModeID) || !sMapChallengeModeStore.LookupEntry(dungeon.MapChallengeModeID)) + return false; + if (!t.TryConsumeTo(dungeon.CompletedInTime) || !t.TryConsumeTo(dungeon.KeystoneLevel)) + return false; + if (t.IsEmpty()) + return true; + } + + return false; +} + bool Trinity::Hyperlinks::LinkTags::enchant::StoreTo(SpellInfo const*& val, std::string_view text) { HyperlinkDataTokenizer t(text); @@ -359,6 +404,17 @@ bool Trinity::Hyperlinks::LinkTags::mawpower::StoreTo(MawPowerEntry const*& val, return !!(val = sMawPowerStore.LookupEntry(mawPowerId)) && t.IsEmpty(); } +bool Trinity::Hyperlinks::LinkTags::mount::StoreTo(MountLinkData& val, std::string_view text) +{ + HyperlinkDataTokenizer t(text); + uint32 spellId; + if (!t.TryConsumeTo(spellId) || !((val.Spell = sSpellMgr->GetSpellInfo(spellId, DIFFICULTY_NONE)))) + return false; + if (!t.TryConsumeTo(val.DisplayId) || !sCreatureDisplayInfoStore.LookupEntry(val.DisplayId)) + return false; + return t.TryConsumeTo(val.Customizations) && t.IsEmpty(); +} + bool Trinity::Hyperlinks::LinkTags::pvptal::StoreTo(PvpTalentEntry const*& val, std::string_view text) { HyperlinkDataTokenizer t(text); @@ -400,6 +456,19 @@ bool Trinity::Hyperlinks::LinkTags::talent::StoreTo(TalentEntry const*& val, std return true; } +bool Trinity::Hyperlinks::LinkTags::talentbuild::StoreTo(TalentBuildLinkData& val, std::string_view text) +{ + HyperlinkDataTokenizer t(text); + uint32 chrSpecializationId; + if (!t.TryConsumeTo(chrSpecializationId)) + return false; + if (!(val.Spec = sChrSpecializationStore.LookupEntry(chrSpecializationId))) + return false; + if (!t.TryConsumeTo(val.Level) || !t.TryConsumeTo(val.ImportString)) + return false; + return true; +} + bool Trinity::Hyperlinks::LinkTags::trade::StoreTo(TradeskillLinkData& val, std::string_view text) { HyperlinkDataTokenizer t(text); diff --git a/src/server/game/Chat/Hyperlinks.cpp b/src/server/game/Chat/Hyperlinks.cpp index 1e35f68b485..2d991fd05bf 100644 --- a/src/server/game/Chat/Hyperlinks.cpp +++ b/src/server/game/Chat/Hyperlinks.cpp @@ -217,6 +217,23 @@ struct LinkValidator<LinkTags::battlepet> }; template <> +struct LinkValidator<LinkTags::battlePetAbil> +{ + static bool IsTextValid(BattlePetAbilLinkData const& data, std::string_view text) + { + for (LocaleConstant i = LOCALE_enUS; i < TOTAL_LOCALES; i = LocaleConstant(i + 1)) + if (data.Ability->Name[i] == text) + return true; + return false; + } + + static bool IsColorValid(BattlePetAbilLinkData const&, HyperlinkColor c) + { + return c == CHAT_LINK_COLOR_BATTLE_PET_ABIL; + } +}; + +template <> struct LinkValidator<LinkTags::conduit> { static bool IsTextValid(SoulbindConduitRankEntry const* rank, std::string_view text) @@ -497,14 +514,28 @@ struct LinkValidator<LinkTags::mawpower> }; template <> +struct LinkValidator<LinkTags::mount> +{ + static bool IsTextValid(MountLinkData const& data, std::string_view text) + { + return LinkValidator<LinkTags::spell>::IsTextValid(data.Spell, text); + } + + static bool IsColorValid(MountLinkData const&, HyperlinkColor c) + { + return c == CHAT_LINK_COLOR_SPELL; + } +}; + +template <> struct LinkValidator<LinkTags::outfit> { - static bool IsTextValid(std::string const&, std::string_view) + static bool IsTextValid(std::string_view, std::string_view) { return true; } - static bool IsColorValid(std::string const&, HyperlinkColor c) + static bool IsColorValid(std::string_view, HyperlinkColor c) { return c == CHAT_LINK_COLOR_TRANSMOG; } @@ -658,15 +689,20 @@ static bool ValidateLinkInfo(HyperlinkInfo const& info) { using namespace LinkTags; TryValidateAs(achievement); + TryValidateAs(api); TryValidateAs(apower); TryValidateAs(azessence); TryValidateAs(area); TryValidateAs(areatrigger); TryValidateAs(battlepet); + TryValidateAs(battlePetAbil); + TryValidateAs(clubFinder); + TryValidateAs(clubTicket); TryValidateAs(conduit); TryValidateAs(creature); TryValidateAs(creature_entry); TryValidateAs(currency); + TryValidateAs(dungeonScore); TryValidateAs(enchant); TryValidateAs(gameevent); TryValidateAs(gameobject); @@ -680,6 +716,7 @@ static bool ValidateLinkInfo(HyperlinkInfo const& info) TryValidateAs(journal); TryValidateAs(keystone); TryValidateAs(mawpower); + TryValidateAs(mount); TryValidateAs(outfit); TryValidateAs(player); TryValidateAs(pvptal); @@ -687,6 +724,7 @@ static bool ValidateLinkInfo(HyperlinkInfo const& info) TryValidateAs(skill); TryValidateAs(spell); TryValidateAs(talent); + TryValidateAs(talentbuild); TryValidateAs(taxinode); TryValidateAs(tele); TryValidateAs(title); diff --git a/src/server/game/Chat/Hyperlinks.h b/src/server/game/Chat/Hyperlinks.h index 35d7db3412f..8adb96187f9 100644 --- a/src/server/game/Chat/Hyperlinks.h +++ b/src/server/game/Chat/Hyperlinks.h @@ -27,7 +27,9 @@ struct AchievementEntry; struct ArtifactPowerRankEntry; struct AzeriteEssenceEntry; +struct BattlePetAbilityEntry; struct BattlePetSpeciesEntry; +struct ChrSpecializationEntry; struct CurrencyContainerEntry; struct CurrencyTypesEntry; struct GarrAbilityEntry; @@ -65,6 +67,13 @@ namespace Trinity::Hyperlinks std::array<uint32, 4> Criteria = { }; }; + struct ApiLinkData + { + std::string_view Type; + std::string_view Name; + std::string_view Parent; + }; + struct ArtifactPowerLinkData { ArtifactPowerRankEntry const* ArtifactPower = nullptr; @@ -90,6 +99,14 @@ namespace Trinity::Hyperlinks uint32 DisplayId = 0; }; + struct BattlePetAbilLinkData + { + BattlePetAbilityEntry const* Ability = nullptr; + uint32 MaxHealth = 0; + uint32 Power = 0; + uint32 Speed = 0; + }; + struct CurrencyLinkData { CurrencyTypesEntry const* Currency = nullptr; @@ -98,6 +115,28 @@ namespace Trinity::Hyperlinks CurrencyContainerEntry const* Container = nullptr; }; + struct DungeonScoreLinkData + { + uint32 Score = 0; + ObjectGuid Player; + std::string_view PlayerName; + uint8 PlayerClass = 0; + uint32 AvgItemLevel = 0; + uint8 PlayerLevel = 0; + uint32 RunsThisSeason = 0; + uint32 BestSeasonScore = 0; + uint32 BestSeasonNumber = 0; + + struct Dungeon + { + uint32 MapChallengeModeID = 0; + bool CompletedInTime = false; + uint32 KeystoneLevel = 0; + }; + + std::vector<Dungeon> Dungeons; + }; + struct GarrisonFollowerLinkData { GarrFollowerEntry const* Follower = nullptr; @@ -171,6 +210,13 @@ namespace Trinity::Hyperlinks std::array<uint32, 4> Affix = { }; }; + struct MountLinkData + { + SpellInfo const* Spell = nullptr; + uint32 DisplayId = 0; + std::string_view Customizations; + }; + struct QuestLinkData { ::Quest const* Quest = nullptr; @@ -183,6 +229,13 @@ namespace Trinity::Hyperlinks GlyphPropertiesEntry const* Glyph = nullptr; }; + struct TalentBuildLinkData + { + ChrSpecializationEntry const* Spec = nullptr; + uint32 Level = 0; + std::string_view ImportString; + }; + struct TradeskillLinkData { ObjectGuid Owner; @@ -268,7 +321,9 @@ namespace Trinity::Hyperlinks make_base_tag(title, uint32); // client format - make_base_tag(outfit, std::string const&); // some sort of weird base91 derived encoding + make_base_tag(clubFinder, ObjectGuid); + make_base_tag(clubTicket, std::string_view); + make_base_tag(outfit, std::string_view); // some sort of weird base91 derived encoding #undef make_base_tag struct TC_GAME_API achievement @@ -278,6 +333,13 @@ namespace Trinity::Hyperlinks static bool StoreTo(AchievementLinkData& val, std::string_view text); }; + struct TC_GAME_API api + { + using value_type = ApiLinkData const&; + static constexpr std::string_view tag() { return "api"; } + static bool StoreTo(ApiLinkData& val, std::string_view text); + }; + struct TC_GAME_API apower { using value_type = ArtifactPowerLinkData const&; @@ -299,6 +361,13 @@ namespace Trinity::Hyperlinks static bool StoreTo(BattlePetLinkData& val, std::string_view text); }; + struct TC_GAME_API battlePetAbil + { + using value_type = BattlePetAbilLinkData const&; + static constexpr std::string_view tag() { return "battlePetAbil"; } + static bool StoreTo(BattlePetAbilLinkData& val, std::string_view text); + }; + struct TC_GAME_API conduit { using value_type = SoulbindConduitRankEntry const*; @@ -313,6 +382,13 @@ namespace Trinity::Hyperlinks static bool StoreTo(CurrencyLinkData& val, std::string_view text); }; + struct TC_GAME_API dungeonScore + { + using value_type = DungeonScoreLinkData const&; + static constexpr std::string_view tag() { return "dungeonScore"; } + static bool StoreTo(DungeonScoreLinkData& val, std::string_view text); + }; + struct TC_GAME_API enchant { using value_type = SpellInfo const*; @@ -376,6 +452,13 @@ namespace Trinity::Hyperlinks static bool StoreTo(MawPowerEntry const*& val, std::string_view text); }; + struct TC_GAME_API mount + { + using value_type = MountLinkData const&; + static constexpr std::string_view tag() { return "mount"; } + static bool StoreTo(MountLinkData& val, std::string_view text); + }; + struct TC_GAME_API pvptal { using value_type = PvpTalentEntry const*; @@ -404,6 +487,13 @@ namespace Trinity::Hyperlinks static bool StoreTo(TalentEntry const*& val, std::string_view text); }; + struct TC_GAME_API talentbuild + { + using value_type = TalentBuildLinkData const&; + static constexpr std::string_view tag() { return "talentbuild"; } + static bool StoreTo(TalentBuildLinkData& val, std::string_view text); + }; + struct TC_GAME_API trade { using value_type = TradeskillLinkData const&; diff --git a/src/server/game/DataStores/DB2LoadInfo.h b/src/server/game/DataStores/DB2LoadInfo.h index 87cd89de28f..8757dfd0570 100644 --- a/src/server/game/DataStores/DB2LoadInfo.h +++ b/src/server/game/DataStores/DB2LoadInfo.h @@ -635,6 +635,23 @@ struct BarberShopStyleLoadInfo static constexpr DB2LoadInfo Instance{ Fields, 8, &BarberShopStyleMeta::Instance, HOTFIX_SEL_BARBER_SHOP_STYLE }; }; +struct BattlePetAbilityLoadInfo +{ + static constexpr DB2FieldMeta Fields[8] = + { + { false, FT_INT, "ID" }, + { false, FT_STRING, "Name" }, + { false, FT_STRING, "Description" }, + { true, FT_INT, "IconFileDataID" }, + { true, FT_BYTE, "PetTypeEnum" }, + { false, FT_INT, "Cooldown" }, + { false, FT_SHORT, "BattlePetVisualID" }, + { false, FT_BYTE, "Flags" }, + }; + + static constexpr DB2LoadInfo Instance{ Fields, 8, &BattlePetAbilityMeta::Instance, HOTFIX_SEL_BATTLE_PET_ABILITY }; +}; + struct BattlePetBreedQualityLoadInfo { static constexpr DB2FieldMeta Fields[4] = diff --git a/src/server/game/DataStores/DB2Stores.cpp b/src/server/game/DataStores/DB2Stores.cpp index 5800ccd1642..99b13a10860 100644 --- a/src/server/game/DataStores/DB2Stores.cpp +++ b/src/server/game/DataStores/DB2Stores.cpp @@ -77,6 +77,7 @@ DB2Storage<AzeriteUnlockMappingEntry> sAzeriteUnlockMappingStore("Azer DB2Storage<BankBagSlotPricesEntry> sBankBagSlotPricesStore("BankBagSlotPrices.db2", &BankBagSlotPricesLoadInfo::Instance); DB2Storage<BannedAddonsEntry> sBannedAddonsStore("BannedAddons.db2", &BannedAddonsLoadInfo::Instance); DB2Storage<BarberShopStyleEntry> sBarberShopStyleStore("BarberShopStyle.db2", &BarberShopStyleLoadInfo::Instance); +DB2Storage<BattlePetAbilityEntry> sBattlePetAbilityStore("BattlePetAbility.db2", &BattlePetAbilityLoadInfo::Instance); DB2Storage<BattlePetBreedQualityEntry> sBattlePetBreedQualityStore("BattlePetBreedQuality.db2", &BattlePetBreedQualityLoadInfo::Instance); DB2Storage<BattlePetBreedStateEntry> sBattlePetBreedStateStore("BattlePetBreedState.db2", &BattlePetBreedStateLoadInfo::Instance); DB2Storage<BattlePetSpeciesEntry> sBattlePetSpeciesStore("BattlePetSpecies.db2", &BattlePetSpeciesLoadInfo::Instance); @@ -679,6 +680,7 @@ uint32 DB2Manager::LoadStores(std::string const& dataPath, LocaleConstant defaul LOAD_DB2(sBankBagSlotPricesStore); LOAD_DB2(sBannedAddonsStore); LOAD_DB2(sBarberShopStyleStore); + LOAD_DB2(sBattlePetAbilityStore); LOAD_DB2(sBattlePetBreedQualityStore); LOAD_DB2(sBattlePetBreedStateStore); LOAD_DB2(sBattlePetSpeciesStore); diff --git a/src/server/game/DataStores/DB2Stores.h b/src/server/game/DataStores/DB2Stores.h index 314556b8239..c508a02f0b1 100644 --- a/src/server/game/DataStores/DB2Stores.h +++ b/src/server/game/DataStores/DB2Stores.h @@ -60,6 +60,7 @@ TC_GAME_API extern DB2Storage<AzeritePowerEntry> sAzeritePowe TC_GAME_API extern DB2Storage<BankBagSlotPricesEntry> sBankBagSlotPricesStore; TC_GAME_API extern DB2Storage<BannedAddonsEntry> sBannedAddonsStore; TC_GAME_API extern DB2Storage<BarberShopStyleEntry> sBarberShopStyleStore; +TC_GAME_API extern DB2Storage<BattlePetAbilityEntry> sBattlePetAbilityStore; TC_GAME_API extern DB2Storage<BattlePetBreedQualityEntry> sBattlePetBreedQualityStore; TC_GAME_API extern DB2Storage<BattlePetBreedStateEntry> sBattlePetBreedStateStore; TC_GAME_API extern DB2Storage<BattlePetSpeciesEntry> sBattlePetSpeciesStore; diff --git a/src/server/game/DataStores/DB2Structure.h b/src/server/game/DataStores/DB2Structure.h index 37c798fcf52..410988e1ef7 100644 --- a/src/server/game/DataStores/DB2Structure.h +++ b/src/server/game/DataStores/DB2Structure.h @@ -448,6 +448,18 @@ struct BarberShopStyleEntry uint8 Data; // real ID to hair/facial hair }; +struct BattlePetAbilityEntry +{ + uint32 ID; + LocalizedString Name; + LocalizedString Description; + int32 IconFileDataID; + int8 PetTypeEnum; + uint32 Cooldown; + uint16 BattlePetVisualID; + uint8 Flags; +}; + struct BattlePetBreedQualityEntry { uint32 ID; diff --git a/src/server/game/Miscellaneous/SharedDefines.h b/src/server/game/Miscellaneous/SharedDefines.h index b55a2d32254..874a5d6dfd5 100644 --- a/src/server/game/Miscellaneous/SharedDefines.h +++ b/src/server/game/Miscellaneous/SharedDefines.h @@ -5913,6 +5913,7 @@ enum ChatLinkColors : uint32 CHAT_LINK_COLOR_ENCHANT = 0xffffd000, // orange CHAT_LINK_COLOR_ACHIEVEMENT = 0xffffff00, CHAT_LINK_COLOR_ARTIFACT_POWER = 0xff71d5ff, + CHAT_LINK_COLOR_BATTLE_PET_ABIL = 0xff4e96f7, CHAT_LINK_COLOR_GARR_ABILITY = 0xff4e96f7, CHAT_LINK_COLOR_INSTANCE_LOCK = 0xffff8000, CHAT_LINK_COLOR_JOURNAL = 0xff66bbff, |