diff options
Diffstat (limited to 'src/server')
| -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,  | 
