From 24a1bb63314ac04b27c6eedc88e2d0766718be3e Mon Sep 17 00:00:00 2001 From: hondacrx Date: Sun, 26 Apr 2020 01:04:13 -0400 Subject: [PATCH] Core/Items: Add helper function to get item name including suffix Port From (https://github.com/TrinityCore/TrinityCore/commit/ecdf3d1a141af4cc0c1ced1bd23e8148ed3a2000) --- Source/Game/Entities/Creature/Creature.cs | 10 +++++----- Source/Game/Entities/GameObject/GameObject.cs | 11 +++++----- Source/Game/Entities/Item/Item.cs | 20 +++++++++++++++++++ Source/Game/Entities/Object/WorldObject.cs | 2 +- 4 files changed, 31 insertions(+), 12 deletions(-) diff --git a/Source/Game/Entities/Creature/Creature.cs b/Source/Game/Entities/Creature/Creature.cs index b149a9f38..c6f0695ee 100644 --- a/Source/Game/Entities/Creature/Creature.cs +++ b/Source/Game/Entities/Creature/Creature.cs @@ -2506,19 +2506,19 @@ namespace Game.Entities return vCount.count; } - public override string GetName(LocaleConstant locale_idx = LocaleConstant.enUS) + public override string GetName(LocaleConstant locale = LocaleConstant.enUS) { - if (locale_idx != LocaleConstant.enUS) + if (locale != LocaleConstant.enUS) { CreatureLocale cl = Global.ObjectMgr.GetCreatureLocale(GetEntry()); if (cl != null) { - if (cl.Name.Length > (byte)locale_idx && !string.IsNullOrEmpty(cl.Name[(byte)locale_idx])) - return cl.Name[(byte)locale_idx]; + if (cl.Name.Length > (int)locale && !cl.Name[(int)locale].IsEmpty()) + return cl.Name[(int)locale]; } } - return base.GetName(locale_idx); + return base.GetName(locale); } public virtual byte GetPetAutoSpellSize() { return 4; } diff --git a/Source/Game/Entities/GameObject/GameObject.cs b/Source/Game/Entities/GameObject/GameObject.cs index 2ba6607bc..9f986e44e 100644 --- a/Source/Game/Entities/GameObject/GameObject.cs +++ b/Source/Game/Entities/GameObject/GameObject.cs @@ -2085,18 +2085,17 @@ namespace Game.Entities return GetGoInfo().ScriptId; } - public override string GetName(LocaleConstant loc_idx = LocaleConstant.enUS) + public override string GetName(LocaleConstant locale = LocaleConstant.enUS) { - if (loc_idx != LocaleConstant.enUS) + if (locale != LocaleConstant.enUS) { - byte uloc_idx = (byte)loc_idx; GameObjectLocale cl = Global.ObjectMgr.GetGameObjectLocale(GetEntry()); if (cl != null) - if (cl.Name.Length > uloc_idx && !string.IsNullOrEmpty(cl.Name[uloc_idx])) - return cl.Name[uloc_idx]; + if (cl.Name.Length > (int)locale && !cl.Name[(int)locale].IsEmpty()) + return cl.Name[(int)locale]; } - return base.GetName(loc_idx); + return base.GetName(locale); } public void UpdatePackedRotation() diff --git a/Source/Game/Entities/Item/Item.cs b/Source/Game/Entities/Item/Item.cs index e8bf001e3..758fc7a96 100644 --- a/Source/Game/Entities/Item/Item.cs +++ b/Source/Game/Entities/Item/Item.cs @@ -106,6 +106,16 @@ namespace Game.Entities return true; } + public override string GetName(LocaleConstant locale = LocaleConstant.enUS) + { + ItemTemplate itemTemplate = GetTemplate(); + var suffix = CliDB.ItemNameDescriptionStorage.LookupByKey(_bonusData.Suffix); + if (suffix != null) + return $"{itemTemplate.GetName(locale)} {suffix.Description[locale]}"; + + return itemTemplate.GetName(locale); + } + public bool IsNotEmptyBag() { Bag bag = ToBag(); @@ -2861,6 +2871,7 @@ namespace Game.Entities CanDisenchant = !proto.GetFlags().HasAnyFlag(ItemFlags.NoDisenchant); CanScrap = proto.GetFlags4().HasAnyFlag(ItemFlags4.Scrapable); + _state.SuffixPriority = int.MaxValue; _state.AppearanceModPriority = int.MaxValue; _state.ScalingStatDistributionPriority = int.MaxValue; _state.AzeriteTierUnlockSetPriority = int.MaxValue; @@ -2914,6 +2925,13 @@ namespace Game.Entities else if ((uint)Quality < values[0]) Quality = (ItemQuality)values[0]; break; + case ItemBonusType.Suffix: + if (values[1] < _state.SuffixPriority) + { + Suffix = (uint)values[0]; + _state.SuffixPriority = values[1]; + } + break; case ItemBonusType.Socket: { uint socketCount = (uint)values[0]; @@ -2994,6 +3012,7 @@ namespace Game.Entities public int RelicType; public int RequiredLevelOverride; public uint AzeriteTierUnlockSetId; + public uint Suffix; public bool CanDisenchant; public bool CanScrap; public bool HasFixedLevel; @@ -3001,6 +3020,7 @@ namespace Game.Entities struct State { + public int SuffixPriority; public int AppearanceModPriority; public int ScalingStatDistributionPriority; public int AzeriteTierUnlockSetPriority; diff --git a/Source/Game/Entities/Object/WorldObject.cs b/Source/Game/Entities/Object/WorldObject.cs index 1493108a0..0655d749c 100644 --- a/Source/Game/Entities/Object/WorldObject.cs +++ b/Source/Game/Entities/Object/WorldObject.cs @@ -1681,7 +1681,7 @@ namespace Game.Entities public virtual ushort GetMovementAnimKitId() { return 0; } public virtual ushort GetMeleeAnimKitId() { return 0; } - public virtual string GetName(LocaleConstant locale_idx = LocaleConstant.enUS) { return _name; } + public virtual string GetName(LocaleConstant locale = LocaleConstant.enUS) { return _name; } public void SetName(string name) { _name = name; } public ObjectGuid GetGUID() { return m_guid; }