Core/Creatures: Compute CombatReach and BoundingRadius using DisplayScale

Port From (https://github.com/TrinityCore/TrinityCore/commit/81ea6f54d93ee10b03e6432c6071e0d0983796a2)
This commit is contained in:
hondacrx
2023-04-21 18:21:08 -04:00
parent d3297b96a2
commit 19c484dc5a
10 changed files with 50 additions and 58 deletions
+11 -15
View File
@@ -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)
+3 -4
View File
@@ -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;
+1 -2
View File
@@ -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());
}
+1 -4
View File
@@ -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);
}
}
}
+23 -10
View File
@@ -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()