Core/Creatures: Compute CombatReach and BoundingRadius using DisplayScale
Port From (https://github.com/TrinityCore/TrinityCore/commit/81ea6f54d93ee10b03e6432c6071e0d0983796a2)
This commit is contained in:
@@ -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 DefaultPlayerBoundingRadius = 0.388999998569489f; // player size, also currently used (correctly?) for any non Unit world objects
|
||||||
public const float AttackDistance = 5.0f;
|
public const float AttackDistance = 5.0f;
|
||||||
public const float DefaultPlayerCombatReach = 1.5f;
|
public const float DefaultPlayerCombatReach = 1.5f;
|
||||||
|
public const float DefaultPlayerDisplayScale = 1.0f;
|
||||||
public const float MinMeleeReach = 2.0f;
|
public const float MinMeleeReach = 2.0f;
|
||||||
public const float NominalMeleeRange = 5.0f;
|
public const float NominalMeleeRange = 5.0f;
|
||||||
public const float MeleeRange = NominalMeleeRange - MinMeleeReach * 2; //center to center for players
|
public const float MeleeRange = NominalMeleeRange - MinMeleeReach * 2; //center to center for players
|
||||||
|
|||||||
@@ -282,7 +282,7 @@ namespace Game.AI
|
|||||||
if (ci != null)
|
if (ci != null)
|
||||||
{
|
{
|
||||||
CreatureModel model = ObjectManager.ChooseDisplayId(ci);
|
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}",
|
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);
|
target.GetEntry(), target.GetGUID().ToString(), model.CreatureDisplayID);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -196,16 +196,12 @@ namespace Game.Chat
|
|||||||
[Command("scale", RBACPermissions.CommandModifyScale)]
|
[Command("scale", RBACPermissions.CommandModifyScale)]
|
||||||
static bool HandleModifyScaleCommand(CommandHandler handler, StringArguments args)
|
static bool HandleModifyScaleCommand(CommandHandler handler, StringArguments args)
|
||||||
{
|
{
|
||||||
float Scale;
|
float scale;
|
||||||
Unit target = handler.GetSelectedUnit();
|
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);
|
NotifyModification(handler, target, CypherStrings.YouChangeSize, CypherStrings.YoursSizeChanged, scale);
|
||||||
Creature creatureTarget = target.ToCreature();
|
target.SetObjectScale(scale);
|
||||||
if (creatureTarget)
|
|
||||||
creatureTarget.SetDisplayId(creatureTarget.GetDisplayId(), Scale);
|
|
||||||
else
|
|
||||||
target.SetObjectScale(Scale);
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@@ -1036,8 +1036,7 @@ namespace Game.Chat
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
creature.SetDisplayId(displayId);
|
creature.SetDisplayId(displayId, true);
|
||||||
creature.SetNativeDisplayId(displayId);
|
|
||||||
|
|
||||||
creature.SaveToDB();
|
creature.SaveToDB();
|
||||||
|
|
||||||
|
|||||||
@@ -264,8 +264,7 @@ namespace Game.Entities
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
SetDisplayId(model.CreatureDisplayID, model.DisplayScale);
|
SetDisplayId(model.CreatureDisplayID, true);
|
||||||
SetNativeDisplayId(model.CreatureDisplayID, model.DisplayScale);
|
|
||||||
|
|
||||||
// Load creature equipment
|
// Load creature equipment
|
||||||
if (data == null)
|
if (data == null)
|
||||||
@@ -2003,10 +2002,7 @@ namespace Game.Entities
|
|||||||
|
|
||||||
CreatureModel display = new(GetNativeDisplayId(), GetNativeDisplayScale(), 1.0f);
|
CreatureModel display = new(GetNativeDisplayId(), GetNativeDisplayScale(), 1.0f);
|
||||||
if (Global.ObjectMgr.GetCreatureModelRandomGender(ref display, GetCreatureTemplate()) != null)
|
if (Global.ObjectMgr.GetCreatureModelRandomGender(ref display, GetCreatureTemplate()) != null)
|
||||||
{
|
SetDisplayId(display.CreatureDisplayID, true);
|
||||||
SetDisplayId(display.CreatureDisplayID, display.DisplayScale);
|
|
||||||
SetNativeDisplayId(display.CreatureDisplayID, display.DisplayScale);
|
|
||||||
}
|
|
||||||
|
|
||||||
GetMotionMaster().InitializeDefault();
|
GetMotionMaster().InitializeDefault();
|
||||||
|
|
||||||
@@ -3023,20 +3019,20 @@ namespace Game.Entities
|
|||||||
CreatureModelInfo minfo = Global.ObjectMgr.GetCreatureModelInfo(GetDisplayId());
|
CreatureModelInfo minfo = Global.ObjectMgr.GetCreatureModelInfo(GetDisplayId());
|
||||||
if (minfo != null)
|
if (minfo != null)
|
||||||
{
|
{
|
||||||
SetBoundingRadius((IsPet() ? 1.0f : minfo.BoundingRadius) * scale);
|
SetBoundingRadius((IsPet() ? 1.0f : minfo.BoundingRadius) * scale * GetDisplayScale());
|
||||||
SetCombatReach((IsPet() ? SharedConst.DefaultPlayerCombatReach : minfo.CombatReach) * scale);
|
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);
|
CreatureModelInfo modelInfo = Global.ObjectMgr.GetCreatureModelInfo(modelId);
|
||||||
if (minfo != null)
|
if (modelInfo != null)
|
||||||
{
|
{
|
||||||
SetBoundingRadius((IsPet() ? 1.0f : minfo.BoundingRadius) * GetObjectScale());
|
SetBoundingRadius((IsPet() ? 1.0f : modelInfo.BoundingRadius) * GetObjectScale() * GetDisplayScale());
|
||||||
SetCombatReach((IsPet() ? SharedConst.DefaultPlayerCombatReach : minfo.CombatReach) * GetObjectScale());
|
SetCombatReach((IsPet() ? SharedConst.DefaultPlayerCombatReach : modelInfo.CombatReach) * GetObjectScale() * GetDisplayScale());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3044,7 +3040,7 @@ namespace Game.Entities
|
|||||||
{
|
{
|
||||||
CreatureModel model = GetCreatureTemplate().GetModelByIdx(modelIdx);
|
CreatureModel model = GetCreatureTemplate().GetModelByIdx(modelIdx);
|
||||||
if (model != null)
|
if (model != null)
|
||||||
SetDisplayId(model.CreatureDisplayID, model.DisplayScale);
|
SetDisplayId(model.CreatureDisplayID);
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void SetTarget(ObjectGuid guid)
|
public override void SetTarget(ObjectGuid guid)
|
||||||
|
|||||||
@@ -203,8 +203,7 @@ namespace Game.Entities
|
|||||||
|
|
||||||
GetCharmInfo().SetPetNumber(petInfo.PetNumber, IsPermanentPetFor(owner));
|
GetCharmInfo().SetPetNumber(petInfo.PetNumber, IsPermanentPetFor(owner));
|
||||||
|
|
||||||
SetDisplayId(petInfo.DisplayId);
|
SetDisplayId(petInfo.DisplayId, true);
|
||||||
SetNativeDisplayId(petInfo.DisplayId);
|
|
||||||
uint petlevel = petInfo.Level;
|
uint petlevel = petInfo.Level;
|
||||||
ReplaceAllNpcFlags(NPCFlags.None);
|
ReplaceAllNpcFlags(NPCFlags.None);
|
||||||
ReplaceAllNpcFlags2(NPCFlags2.None);
|
ReplaceAllNpcFlags2(NPCFlags2.None);
|
||||||
@@ -1492,9 +1491,9 @@ namespace Game.Entities
|
|||||||
return base.GetNativeObjectScale();
|
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())
|
if (!IsControlled())
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -5056,8 +5056,7 @@ namespace Game.Entities
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
SetDisplayId(model.DisplayID);
|
SetDisplayId(model.DisplayID, true);
|
||||||
SetNativeDisplayId(model.DisplayID);
|
|
||||||
SetUpdateFieldValue(m_values.ModifyValue(m_unitData).ModifyValue(m_unitData.StateAnimID), Global.DB2Mgr.GetEmptyAnimStateID());
|
SetUpdateFieldValue(m_values.ModifyValue(m_unitData).ModifyValue(m_unitData.StateAnimID), Global.DB2Mgr.GetEmptyAnimStateID());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -157,10 +157,7 @@ namespace Game.Entities
|
|||||||
|
|
||||||
uint display = pet.PacketInfo.DisplayID;
|
uint display = pet.PacketInfo.DisplayID;
|
||||||
if (display != 0)
|
if (display != 0)
|
||||||
{
|
minion.SetDisplayId(display, true);
|
||||||
minion.SetDisplayId(display);
|
|
||||||
minion.SetNativeDisplayId(display);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1870,16 +1870,34 @@ namespace Game.Entities
|
|||||||
|
|
||||||
public virtual float GetNativeObjectScale() { return 1.0f; }
|
public virtual float GetNativeObjectScale() { return 1.0f; }
|
||||||
|
|
||||||
|
public float GetDisplayScale() { return m_unitData.DisplayScale; }
|
||||||
|
|
||||||
public uint GetDisplayId() { return m_unitData.DisplayID; }
|
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);
|
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
|
// Set Gender by modelId
|
||||||
CreatureModelInfo minfo = Global.ObjectMgr.GetCreatureModelInfo(modelId);
|
CreatureModelInfo modelInfo = Global.ObjectMgr.GetCreatureModelInfo(displayId);
|
||||||
if (minfo != null)
|
if (modelInfo != null)
|
||||||
SetGender((Gender)minfo.gender);
|
SetGender((Gender)modelInfo.gender);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void RestoreDisplayId(bool ignorePositiveAurasPreventingMounting = false)
|
public void RestoreDisplayId(bool ignorePositiveAurasPreventingMounting = false)
|
||||||
@@ -1944,11 +1962,6 @@ namespace Game.Entities
|
|||||||
SetDisplayId(GetNativeDisplayId());
|
SetDisplayId(GetNativeDisplayId());
|
||||||
}
|
}
|
||||||
public uint GetNativeDisplayId() { return m_unitData.NativeDisplayID; }
|
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 float GetNativeDisplayScale() { return m_unitData.NativeXDisplayScale; }
|
||||||
|
|
||||||
public bool IsMounted()
|
public bool IsMounted()
|
||||||
|
|||||||
@@ -1334,22 +1334,14 @@ namespace Game
|
|||||||
tuple.Item2.equipement_id_prev = creature.GetCurrentEquipmentId();
|
tuple.Item2.equipement_id_prev = creature.GetCurrentEquipmentId();
|
||||||
tuple.Item2.modelid_prev = creature.GetDisplayId();
|
tuple.Item2.modelid_prev = creature.GetDisplayId();
|
||||||
creature.LoadEquipment(tuple.Item2.equipment_id, true);
|
creature.LoadEquipment(tuple.Item2.equipment_id, true);
|
||||||
if (tuple.Item2.modelid > 0 && tuple.Item2.modelid_prev != tuple.Item2.modelid &&
|
if (tuple.Item2.modelid > 0 && tuple.Item2.modelid_prev != tuple.Item2.modelid && Global.ObjectMgr.GetCreatureModelInfo(tuple.Item2.modelid) != null)
|
||||||
Global.ObjectMgr.GetCreatureModelInfo(tuple.Item2.modelid) != null)
|
creature.SetDisplayId(tuple.Item2.modelid, true);
|
||||||
{
|
|
||||||
creature.SetDisplayId(tuple.Item2.modelid);
|
|
||||||
creature.SetNativeDisplayId(tuple.Item2.modelid);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
creature.LoadEquipment(tuple.Item2.equipement_id_prev, true);
|
creature.LoadEquipment(tuple.Item2.equipement_id_prev, true);
|
||||||
if (tuple.Item2.modelid_prev > 0 && tuple.Item2.modelid_prev != tuple.Item2.modelid &&
|
if (tuple.Item2.modelid_prev > 0 && tuple.Item2.modelid_prev != tuple.Item2.modelid && Global.ObjectMgr.GetCreatureModelInfo(tuple.Item2.modelid_prev) != null)
|
||||||
Global.ObjectMgr.GetCreatureModelInfo(tuple.Item2.modelid_prev) != null)
|
creature.SetDisplayId(tuple.Item2.modelid_prev, true);
|
||||||
{
|
|
||||||
creature.SetDisplayId(tuple.Item2.modelid_prev);
|
|
||||||
creature.SetNativeDisplayId(tuple.Item2.modelid_prev);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user