aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Entities/Creature
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2013-06-11 17:28:16 +0200
committerShauren <shauren.trinity@gmail.com>2013-06-11 17:28:16 +0200
commit9ec22fffa00135cd776afebe2899bf54fb52f15f (patch)
tree8435e279131052c9c50ec929868f3b698a194c3d /src/server/game/Entities/Creature
parentef15fe8ed28cb2d65574e8c5c755d39f8a06a994 (diff)
Core/Objects: Object scale will now also affect bounding radius and combat reach fields
Diffstat (limited to 'src/server/game/Entities/Creature')
-rw-r--r--src/server/game/Entities/Creature/Creature.cpp26
-rw-r--r--src/server/game/Entities/Creature/Creature.h3
2 files changed, 26 insertions, 3 deletions
diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp
index 3727e19bc2d..9077e045cef 100644
--- a/src/server/game/Entities/Creature/Creature.cpp
+++ b/src/server/game/Entities/Creature/Creature.cpp
@@ -330,9 +330,6 @@ bool Creature::InitEntry(uint32 entry, uint32 /*team*/, const CreatureData* data
SetName(normalInfo->Name); // at normal entry always
- SetFloatValue(UNIT_FIELD_BOUNDINGRADIUS, minfo->bounding_radius);
- SetFloatValue(UNIT_FIELD_COMBATREACH, minfo->combat_reach);
-
SetFloatValue(UNIT_MOD_CAST_SPEED, 1.0f);
SetSpeed(MOVE_WALK, cinfo->speed_walk);
@@ -340,6 +337,7 @@ bool Creature::InitEntry(uint32 entry, uint32 /*team*/, const CreatureData* data
SetSpeed(MOVE_SWIM, 1.0f); // using 1.0 rate
SetSpeed(MOVE_FLIGHT, 1.0f); // using 1.0 rate
+ // Will set UNIT_FIELD_BOUNDINGRADIUS and UNIT_FIELD_COMBATREACH
SetObjectScale(cinfo->scale);
SetFloatValue(UNIT_FIELD_HOVERHEIGHT, cinfo->HoverHeight);
@@ -2555,3 +2553,25 @@ void Creature::UpdateMovementFlags()
else
RemoveUnitMovementFlag(MOVEMENTFLAG_SWIMMING);
}
+
+void Creature::SetObjectScale(float scale)
+{
+ Unit::SetObjectScale(scale);
+
+ if (CreatureModelInfo const* minfo = sObjectMgr->GetCreatureModelInfo(GetDisplayId()))
+ {
+ SetFloatValue(UNIT_FIELD_BOUNDINGRADIUS, minfo->bounding_radius * scale);
+ SetFloatValue(UNIT_FIELD_COMBATREACH, minfo->combat_reach * scale);
+ }
+}
+
+void Creature::SetDisplayId(uint32 modelId)
+{
+ Unit::SetDisplayId(modelId);
+
+ if (CreatureModelInfo const* minfo = sObjectMgr->GetCreatureModelInfo(modelId))
+ {
+ SetFloatValue(UNIT_FIELD_BOUNDINGRADIUS, minfo->bounding_radius * GetFloatValue(OBJECT_FIELD_SCALE_X));
+ SetFloatValue(UNIT_FIELD_COMBATREACH, minfo->combat_reach * GetFloatValue(OBJECT_FIELD_SCALE_X));
+ }
+}
diff --git a/src/server/game/Entities/Creature/Creature.h b/src/server/game/Entities/Creature/Creature.h
index b3372fc8c56..d96cbd0eb26 100644
--- a/src/server/game/Entities/Creature/Creature.h
+++ b/src/server/game/Entities/Creature/Creature.h
@@ -454,6 +454,9 @@ class Creature : public Unit, public GridObject<Creature>, public MapCreature
void AddToWorld();
void RemoveFromWorld();
+ void SetObjectScale(float scale);
+ void SetDisplayId(uint32 modelId);
+
void DisappearAndDie();
bool Create(uint32 guidlow, Map* map, uint32 phaseMask, uint32 Entry, uint32 vehId, uint32 team, float x, float y, float z, float ang, const CreatureData* data = NULL);