From 19c484dc5ae3c47fe3ee8cfd988e40341482860a Mon Sep 17 00:00:00 2001 From: hondacrx Date: Fri, 21 Apr 2023 18:21:08 -0400 Subject: [PATCH] Core/Creatures: Compute CombatReach and BoundingRadius using DisplayScale Port From (https://github.com/TrinityCore/TrinityCore/commit/81ea6f54d93ee10b03e6432c6071e0d0983796a2) --- Source/Framework/Constants/SharedConst.cs | 1 + Source/Game/AI/SmartScripts/SmartScript.cs | 2 +- Source/Game/Chat/Commands/ModifyCommands.cs | 12 +++----- Source/Game/Chat/Commands/NPCCommands.cs | 3 +- Source/Game/Entities/Creature/Creature.cs | 26 +++++++--------- Source/Game/Entities/Pet.cs | 7 ++--- Source/Game/Entities/Player/Player.cs | 3 +- Source/Game/Entities/Unit/Unit.Pets.cs | 5 +--- Source/Game/Entities/Unit/Unit.cs | 33 ++++++++++++++------- Source/Game/Events/GameEventManager.cs | 16 +++------- 10 files changed, 50 insertions(+), 58 deletions(-) diff --git a/Source/Framework/Constants/SharedConst.cs b/Source/Framework/Constants/SharedConst.cs index f2e0f1c84..d64c0c588 100644 --- a/Source/Framework/Constants/SharedConst.cs +++ b/Source/Framework/Constants/SharedConst.cs @@ -223,6 +223,7 @@ namespace Framework.Constants public const float DefaultPlayerBoundingRadius = 0.388999998569489f; // player size, also currently used (correctly?) for any non Unit world objects public const float AttackDistance = 5.0f; public const float DefaultPlayerCombatReach = 1.5f; + public const float DefaultPlayerDisplayScale = 1.0f; public const float MinMeleeReach = 2.0f; public const float NominalMeleeRange = 5.0f; public const float MeleeRange = NominalMeleeRange - MinMeleeReach * 2; //center to center for players diff --git a/Source/Game/AI/SmartScripts/SmartScript.cs b/Source/Game/AI/SmartScripts/SmartScript.cs index 836547b64..d714cca6f 100644 --- a/Source/Game/AI/SmartScripts/SmartScript.cs +++ b/Source/Game/AI/SmartScripts/SmartScript.cs @@ -282,7 +282,7 @@ namespace Game.AI if (ci != null) { CreatureModel model = ObjectManager.ChooseDisplayId(ci); - target.ToCreature().SetDisplayId(model.CreatureDisplayID, model.DisplayScale); + target.ToCreature().SetDisplayId(model.CreatureDisplayID); Log.outDebug(LogFilter.ScriptsAi, "SmartScript.ProcessAction. SMART_ACTION_MORPH_TO_ENTRY_OR_MODEL: Creature entry {0}, GuidLow {1} set displayid to {2}", target.GetEntry(), target.GetGUID().ToString(), model.CreatureDisplayID); } diff --git a/Source/Game/Chat/Commands/ModifyCommands.cs b/Source/Game/Chat/Commands/ModifyCommands.cs index 46cc68f9b..2dd4e175b 100644 --- a/Source/Game/Chat/Commands/ModifyCommands.cs +++ b/Source/Game/Chat/Commands/ModifyCommands.cs @@ -196,16 +196,12 @@ namespace Game.Chat [Command("scale", RBACPermissions.CommandModifyScale)] static bool HandleModifyScaleCommand(CommandHandler handler, StringArguments args) { - float Scale; + float scale; Unit target = handler.GetSelectedUnit(); - if (CheckModifySpeed(args, handler, target, out Scale, 0.1f, 10.0f, false)) + if (CheckModifySpeed(args, handler, target, out scale, 0.1f, 10.0f, false)) { - NotifyModification(handler, target, CypherStrings.YouChangeSize, CypherStrings.YoursSizeChanged, Scale); - Creature creatureTarget = target.ToCreature(); - if (creatureTarget) - creatureTarget.SetDisplayId(creatureTarget.GetDisplayId(), Scale); - else - target.SetObjectScale(Scale); + NotifyModification(handler, target, CypherStrings.YouChangeSize, CypherStrings.YoursSizeChanged, scale); + target.SetObjectScale(scale); return true; } return false; diff --git a/Source/Game/Chat/Commands/NPCCommands.cs b/Source/Game/Chat/Commands/NPCCommands.cs index df33ae132..34032590b 100644 --- a/Source/Game/Chat/Commands/NPCCommands.cs +++ b/Source/Game/Chat/Commands/NPCCommands.cs @@ -1036,8 +1036,7 @@ namespace Game.Chat return false; } - creature.SetDisplayId(displayId); - creature.SetNativeDisplayId(displayId); + creature.SetDisplayId(displayId, true); creature.SaveToDB(); diff --git a/Source/Game/Entities/Creature/Creature.cs b/Source/Game/Entities/Creature/Creature.cs index 817d906a8..e10d634e6 100644 --- a/Source/Game/Entities/Creature/Creature.cs +++ b/Source/Game/Entities/Creature/Creature.cs @@ -264,8 +264,7 @@ namespace Game.Entities return false; } - SetDisplayId(model.CreatureDisplayID, model.DisplayScale); - SetNativeDisplayId(model.CreatureDisplayID, model.DisplayScale); + SetDisplayId(model.CreatureDisplayID, true); // Load creature equipment if (data == null) @@ -2003,10 +2002,7 @@ namespace Game.Entities CreatureModel display = new(GetNativeDisplayId(), GetNativeDisplayScale(), 1.0f); if (Global.ObjectMgr.GetCreatureModelRandomGender(ref display, GetCreatureTemplate()) != null) - { - SetDisplayId(display.CreatureDisplayID, display.DisplayScale); - SetNativeDisplayId(display.CreatureDisplayID, display.DisplayScale); - } + SetDisplayId(display.CreatureDisplayID, true); GetMotionMaster().InitializeDefault(); @@ -3023,20 +3019,20 @@ namespace Game.Entities CreatureModelInfo minfo = Global.ObjectMgr.GetCreatureModelInfo(GetDisplayId()); if (minfo != null) { - SetBoundingRadius((IsPet() ? 1.0f : minfo.BoundingRadius) * scale); - SetCombatReach((IsPet() ? SharedConst.DefaultPlayerCombatReach : minfo.CombatReach) * scale); + SetBoundingRadius((IsPet() ? 1.0f : minfo.BoundingRadius) * scale * GetDisplayScale()); + SetCombatReach((IsPet() ? SharedConst.DefaultPlayerCombatReach : minfo.CombatReach) * scale * GetDisplayScale()); } } - public override void SetDisplayId(uint modelId, float displayScale = 1f) + public override void SetDisplayId(uint modelId, bool setNative = false) { - base.SetDisplayId(modelId, displayScale); + base.SetDisplayId(modelId, setNative); - CreatureModelInfo minfo = Global.ObjectMgr.GetCreatureModelInfo(modelId); - if (minfo != null) + CreatureModelInfo modelInfo = Global.ObjectMgr.GetCreatureModelInfo(modelId); + if (modelInfo != null) { - SetBoundingRadius((IsPet() ? 1.0f : minfo.BoundingRadius) * GetObjectScale()); - SetCombatReach((IsPet() ? SharedConst.DefaultPlayerCombatReach : minfo.CombatReach) * GetObjectScale()); + SetBoundingRadius((IsPet() ? 1.0f : modelInfo.BoundingRadius) * GetObjectScale() * GetDisplayScale()); + SetCombatReach((IsPet() ? SharedConst.DefaultPlayerCombatReach : modelInfo.CombatReach) * GetObjectScale() * GetDisplayScale()); } } @@ -3044,7 +3040,7 @@ namespace Game.Entities { CreatureModel model = GetCreatureTemplate().GetModelByIdx(modelIdx); if (model != null) - SetDisplayId(model.CreatureDisplayID, model.DisplayScale); + SetDisplayId(model.CreatureDisplayID); } public override void SetTarget(ObjectGuid guid) diff --git a/Source/Game/Entities/Pet.cs b/Source/Game/Entities/Pet.cs index 628283365..c765c4b2c 100644 --- a/Source/Game/Entities/Pet.cs +++ b/Source/Game/Entities/Pet.cs @@ -203,8 +203,7 @@ namespace Game.Entities GetCharmInfo().SetPetNumber(petInfo.PetNumber, IsPermanentPetFor(owner)); - SetDisplayId(petInfo.DisplayId); - SetNativeDisplayId(petInfo.DisplayId); + SetDisplayId(petInfo.DisplayId, true); uint petlevel = petInfo.Level; ReplaceAllNpcFlags(NPCFlags.None); ReplaceAllNpcFlags2(NPCFlags2.None); @@ -1492,9 +1491,9 @@ namespace Game.Entities return base.GetNativeObjectScale(); } - public override void SetDisplayId(uint modelId, float displayScale = 1f) + public override void SetDisplayId(uint modelId, bool setNative = false) { - base.SetDisplayId(modelId, displayScale); + base.SetDisplayId(modelId, setNative); if (!IsControlled()) return; diff --git a/Source/Game/Entities/Player/Player.cs b/Source/Game/Entities/Player/Player.cs index e35d12df9..d48a7097d 100644 --- a/Source/Game/Entities/Player/Player.cs +++ b/Source/Game/Entities/Player/Player.cs @@ -5056,8 +5056,7 @@ namespace Game.Entities return; } - SetDisplayId(model.DisplayID); - SetNativeDisplayId(model.DisplayID); + SetDisplayId(model.DisplayID, true); SetUpdateFieldValue(m_values.ModifyValue(m_unitData).ModifyValue(m_unitData.StateAnimID), Global.DB2Mgr.GetEmptyAnimStateID()); } diff --git a/Source/Game/Entities/Unit/Unit.Pets.cs b/Source/Game/Entities/Unit/Unit.Pets.cs index 3e1f5f2f9..ea24dac27 100644 --- a/Source/Game/Entities/Unit/Unit.Pets.cs +++ b/Source/Game/Entities/Unit/Unit.Pets.cs @@ -157,10 +157,7 @@ namespace Game.Entities uint display = pet.PacketInfo.DisplayID; if (display != 0) - { - minion.SetDisplayId(display); - minion.SetNativeDisplayId(display); - } + minion.SetDisplayId(display, true); } } } diff --git a/Source/Game/Entities/Unit/Unit.cs b/Source/Game/Entities/Unit/Unit.cs index 2c702a614..6db787721 100644 --- a/Source/Game/Entities/Unit/Unit.cs +++ b/Source/Game/Entities/Unit/Unit.cs @@ -1870,16 +1870,34 @@ namespace Game.Entities public virtual float GetNativeObjectScale() { return 1.0f; } + public float GetDisplayScale() { return m_unitData.DisplayScale; } + public uint GetDisplayId() { return m_unitData.DisplayID; } - public virtual void SetDisplayId(uint modelId, float displayScale = 1f) + public virtual void SetDisplayId(uint displayId, bool setNative = false) { - SetUpdateFieldValue(m_values.ModifyValue(m_unitData).ModifyValue(m_unitData.DisplayID), modelId); + float displayScale = SharedConst.DefaultPlayerDisplayScale; + + if (IsCreature() && !IsPet()) + { + CreatureModel model = ToCreature().GetCreatureTemplate().GetModelWithDisplayId(displayId); + if (model != null) + displayScale = model.DisplayScale; + } + + SetUpdateFieldValue(m_values.ModifyValue(m_unitData).ModifyValue(m_unitData.DisplayID), displayId); SetUpdateFieldValue(m_values.ModifyValue(m_unitData).ModifyValue(m_unitData.DisplayScale), displayScale); + + if (setNative) + { + SetUpdateFieldValue(m_values.ModifyValue(m_unitData).ModifyValue(m_unitData.NativeDisplayID), displayId); + SetUpdateFieldValue(m_values.ModifyValue(m_unitData).ModifyValue(m_unitData.NativeXDisplayScale), displayScale); + } + // Set Gender by modelId - CreatureModelInfo minfo = Global.ObjectMgr.GetCreatureModelInfo(modelId); - if (minfo != null) - SetGender((Gender)minfo.gender); + CreatureModelInfo modelInfo = Global.ObjectMgr.GetCreatureModelInfo(displayId); + if (modelInfo != null) + SetGender((Gender)modelInfo.gender); } public void RestoreDisplayId(bool ignorePositiveAurasPreventingMounting = false) @@ -1944,11 +1962,6 @@ namespace Game.Entities SetDisplayId(GetNativeDisplayId()); } public uint GetNativeDisplayId() { return m_unitData.NativeDisplayID; } - public void SetNativeDisplayId(uint displayId, float displayScale = 1f) - { - SetUpdateFieldValue(m_values.ModifyValue(m_unitData).ModifyValue(m_unitData.NativeDisplayID), displayId); - SetUpdateFieldValue(m_values.ModifyValue(m_unitData).ModifyValue(m_unitData.NativeXDisplayScale), displayScale); - } public float GetNativeDisplayScale() { return m_unitData.NativeXDisplayScale; } public bool IsMounted() diff --git a/Source/Game/Events/GameEventManager.cs b/Source/Game/Events/GameEventManager.cs index 754c76b88..14ec9e685 100644 --- a/Source/Game/Events/GameEventManager.cs +++ b/Source/Game/Events/GameEventManager.cs @@ -1334,22 +1334,14 @@ namespace Game tuple.Item2.equipement_id_prev = creature.GetCurrentEquipmentId(); tuple.Item2.modelid_prev = creature.GetDisplayId(); creature.LoadEquipment(tuple.Item2.equipment_id, true); - if (tuple.Item2.modelid > 0 && tuple.Item2.modelid_prev != tuple.Item2.modelid && - Global.ObjectMgr.GetCreatureModelInfo(tuple.Item2.modelid) != null) - { - creature.SetDisplayId(tuple.Item2.modelid); - creature.SetNativeDisplayId(tuple.Item2.modelid); - } + if (tuple.Item2.modelid > 0 && tuple.Item2.modelid_prev != tuple.Item2.modelid && Global.ObjectMgr.GetCreatureModelInfo(tuple.Item2.modelid) != null) + creature.SetDisplayId(tuple.Item2.modelid, true); } else { creature.LoadEquipment(tuple.Item2.equipement_id_prev, true); - if (tuple.Item2.modelid_prev > 0 && tuple.Item2.modelid_prev != tuple.Item2.modelid && - Global.ObjectMgr.GetCreatureModelInfo(tuple.Item2.modelid_prev) != null) - { - creature.SetDisplayId(tuple.Item2.modelid_prev); - creature.SetNativeDisplayId(tuple.Item2.modelid_prev); - } + if (tuple.Item2.modelid_prev > 0 && tuple.Item2.modelid_prev != tuple.Item2.modelid && Global.ObjectMgr.GetCreatureModelInfo(tuple.Item2.modelid_prev) != null) + creature.SetDisplayId(tuple.Item2.modelid_prev, true); } } });