diff options
-rw-r--r-- | src/server/game/Entities/Creature/Creature.cpp | 16 | ||||
-rw-r--r-- | src/server/game/Entities/Creature/Creature.h | 2 | ||||
-rw-r--r-- | src/server/game/Entities/GameObject/GameObject.cpp | 11 | ||||
-rw-r--r-- | src/server/game/Entities/GameObject/GameObject.h | 2 | ||||
-rw-r--r-- | src/server/game/Entities/Item/Item.cpp | 18 | ||||
-rw-r--r-- | src/server/game/Entities/Item/Item.h | 4 | ||||
-rw-r--r-- | src/server/game/Entities/Object/Object.h | 6 |
7 files changed, 37 insertions, 22 deletions
diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp index 7f975625c50..748e1ac26ee 100644 --- a/src/server/game/Entities/Creature/Creature.cpp +++ b/src/server/game/Entities/Creature/Creature.cpp @@ -2836,18 +2836,12 @@ uint32 Creature::UpdateVendorItemCurrentCount(VendorItem const* vItem, uint32 us } // overwrite WorldObject function for proper name localization -std::string const & Creature::GetNameForLocaleIdx(LocaleConstant loc_idx) const +std::string Creature::GetNameForLocaleIdx(LocaleConstant locale) const { - if (loc_idx != DEFAULT_LOCALE) - { - uint8 uloc_idx = uint8(loc_idx); - CreatureLocale const* cl = sObjectMgr->GetCreatureLocale(GetEntry()); - if (cl) - { - if (cl->Name.size() > uloc_idx && !cl->Name[uloc_idx].empty()) - return cl->Name[uloc_idx]; - } - } + if (locale != DEFAULT_LOCALE) + if (CreatureLocale const* cl = sObjectMgr->GetCreatureLocale(GetEntry())) + if (cl->Name.size() > locale && !cl->Name[locale].empty()) + return cl->Name[locale]; return GetName(); } diff --git a/src/server/game/Entities/Creature/Creature.h b/src/server/game/Entities/Creature/Creature.h index e0e61591b8f..afd07d44053 100644 --- a/src/server/game/Entities/Creature/Creature.h +++ b/src/server/game/Entities/Creature/Creature.h @@ -177,7 +177,7 @@ class TC_GAME_API Creature : public Unit, public GridObject<Creature>, public Ma uint32 GetScriptId() const; // override WorldObject function for proper name localization - std::string const& GetNameForLocaleIdx(LocaleConstant locale_idx) const override; + std::string GetNameForLocaleIdx(LocaleConstant locale) const override; void setDeathState(DeathState s) override; // override virtual Unit::setDeathState diff --git a/src/server/game/Entities/GameObject/GameObject.cpp b/src/server/game/Entities/GameObject/GameObject.cpp index 6ff7cd66cd4..151f9419d51 100644 --- a/src/server/game/Entities/GameObject/GameObject.cpp +++ b/src/server/game/Entities/GameObject/GameObject.cpp @@ -2189,15 +2189,12 @@ uint32 GameObject::GetScriptId() const } // overwrite WorldObject function for proper name localization -std::string const & GameObject::GetNameForLocaleIdx(LocaleConstant loc_idx) const +std::string GameObject::GetNameForLocaleIdx(LocaleConstant locale) const { - if (loc_idx != DEFAULT_LOCALE) - { - uint8 uloc_idx = uint8(loc_idx); + if (locale != DEFAULT_LOCALE) if (GameObjectLocale const* cl = sObjectMgr->GetGameObjectLocale(GetEntry())) - if (cl->Name.size() > uloc_idx && !cl->Name[uloc_idx].empty()) - return cl->Name[uloc_idx]; - } + if (cl->Name.size() > locale && !cl->Name[locale].empty()) + return cl->Name[locale]; return GetName(); } diff --git a/src/server/game/Entities/GameObject/GameObject.h b/src/server/game/Entities/GameObject/GameObject.h index ec210bdd8ab..81bd5f1e340 100644 --- a/src/server/game/Entities/GameObject/GameObject.h +++ b/src/server/game/Entities/GameObject/GameObject.h @@ -117,7 +117,7 @@ class TC_GAME_API GameObject : public WorldObject, public GridObject<GameObject> int64 GetPackedWorldRotation() const { return m_packedRotation; } // overwrite WorldObject function for proper name localization - std::string const& GetNameForLocaleIdx(LocaleConstant locale_idx) const override; + std::string GetNameForLocaleIdx(LocaleConstant locale) const override; void SaveToDB(); void SaveToDB(uint32 mapid, std::vector<Difficulty> const& spawnDifficulties); diff --git a/src/server/game/Entities/Item/Item.cpp b/src/server/game/Entities/Item/Item.cpp index de2ec3eb209..e0d19a8b86b 100644 --- a/src/server/game/Entities/Item/Item.cpp +++ b/src/server/game/Entities/Item/Item.cpp @@ -498,6 +498,15 @@ bool Item::Create(ObjectGuid::LowType guidlow, uint32 itemId, ItemContext contex return true; } +std::string Item::GetNameForLocaleIdx(LocaleConstant locale) const +{ + ItemTemplate const* itemTemplate = GetTemplate(); + if (ItemNameDescriptionEntry const* suffix = sItemNameDescriptionStore.LookupEntry(_bonusData.Suffix)) + return Trinity::StringFormat("%s %s", itemTemplate->GetName(locale), suffix->Description->Str[locale]); + + return itemTemplate->GetName(locale); +} + // Returns true if Item is a bag AND it is not empty. // Returns false if Item is not a bag OR it is an empty bag. bool Item::IsNotEmptyBag() const @@ -2810,9 +2819,11 @@ void BonusData::Initialize(ItemTemplate const* proto) if (AzeriteEmpoweredItemEntry const* azeriteEmpoweredItem = sDB2Manager.GetAzeriteEmpoweredItem(proto->GetId())) AzeriteTierUnlockSetId = azeriteEmpoweredItem->AzeriteTierUnlockSetID; + Suffix = 0; CanDisenchant = (proto->GetFlags() & ITEM_FLAG_NO_DISENCHANT) == 0; CanScrap = (proto->GetFlags4() & ITEM_FLAG4_SCRAPABLE) != 0; + _state.SuffixPriority = std::numeric_limits<int32>::max(); _state.AppearanceModPriority = std::numeric_limits<int32>::max(); _state.ScalingStatDistributionPriority = std::numeric_limits<int32>::max(); _state.AzeriteTierUnlockSetPriority = std::numeric_limits<int32>::max(); @@ -2869,6 +2880,13 @@ void BonusData::AddBonus(uint32 type, int32 const (&values)[3]) else if (Quality < static_cast<uint32>(values[0])) Quality = static_cast<uint32>(values[0]); break; + case ITEM_BONUS_SUFFIX: + if (values[1] < _state.SuffixPriority) + { + Suffix = static_cast<uint32>(values[0]); + _state.SuffixPriority = values[1]; + } + break; case ITEM_BONUS_SOCKET: { uint32 socketCount = values[0]; diff --git a/src/server/game/Entities/Item/Item.h b/src/server/game/Entities/Item/Item.h index d32eafacb2c..f9839baa41f 100644 --- a/src/server/game/Entities/Item/Item.h +++ b/src/server/game/Entities/Item/Item.h @@ -92,6 +92,7 @@ struct BonusData int32 RelicType; int32 RequiredLevelOverride; int32 AzeriteTierUnlockSetId; + uint32 Suffix; bool CanDisenchant; bool CanScrap; bool HasFixedLevel; @@ -104,6 +105,7 @@ struct BonusData private: struct { + int32 SuffixPriority; int32 AppearanceModPriority; int32 ScalingStatDistributionPriority; int32 AzeriteTierUnlockSetPriority; @@ -178,6 +180,8 @@ class TC_GAME_API Item : public Object virtual bool Create(ObjectGuid::LowType guidlow, uint32 itemId, ItemContext context, Player const* owner); + std::string GetNameForLocaleIdx(LocaleConstant locale) const override; + ItemTemplate const* GetTemplate() const; BonusData const* GetBonus() const { return &_bonusData; } diff --git a/src/server/game/Entities/Object/Object.h b/src/server/game/Entities/Object/Object.h index 987118d9bb2..30879ce1194 100644 --- a/src/server/game/Entities/Object/Object.h +++ b/src/server/game/Entities/Object/Object.h @@ -160,6 +160,8 @@ class TC_GAME_API Object virtual void ClearUpdateMask(bool remove); + virtual std::string GetNameForLocaleIdx(LocaleConstant locale) const = 0; + virtual bool hasQuest(uint32 /* quest_id */) const { return false; } virtual bool hasInvolvedQuest(uint32 /* quest_id */) const { return false; } virtual void BuildUpdate(UpdateDataMapType&) { } @@ -420,9 +422,9 @@ class TC_GAME_API WorldObject : public Object, public WorldLocation InstanceScript* GetInstanceScript(); std::string const& GetName() const { return m_name; } - void SetName(std::string const& newname) { m_name=newname; } + void SetName(std::string newname) { m_name = std::move(newname); } - virtual std::string const& GetNameForLocaleIdx(LocaleConstant /*locale_idx*/) const { return m_name; } + std::string GetNameForLocaleIdx(LocaleConstant /*locale*/) const override { return m_name; } float GetDistance(WorldObject const* obj) const; float GetDistance(Position const &pos) const; |