aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Entities
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
parentef15fe8ed28cb2d65574e8c5c755d39f8a06a994 (diff)
Core/Objects: Object scale will now also affect bounding radius and combat reach fields
Diffstat (limited to 'src/server/game/Entities')
-rw-r--r--src/server/game/Entities/Creature/Creature.cpp26
-rw-r--r--src/server/game/Entities/Creature/Creature.h3
-rw-r--r--src/server/game/Entities/Pet/Pet.cpp13
-rw-r--r--src/server/game/Entities/Pet/Pet.h2
-rw-r--r--src/server/game/Entities/Player/Player.cpp8
-rw-r--r--src/server/game/Entities/Player/Player.h9
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp10
-rw-r--r--src/server/game/Entities/Unit/Unit.h2
8 files changed, 52 insertions, 21 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);
diff --git a/src/server/game/Entities/Pet/Pet.cpp b/src/server/game/Entities/Pet/Pet.cpp
index 0af3fab8434..f6693ba2260 100644
--- a/src/server/game/Entities/Pet/Pet.cpp
+++ b/src/server/game/Entities/Pet/Pet.cpp
@@ -2078,3 +2078,16 @@ Player* Pet::GetOwner() const
{
return Minion::GetOwner()->ToPlayer();
}
+
+void Pet::SetDisplayId(uint32 modelId)
+{
+ Guardian::SetDisplayId(modelId);
+
+ if (!isControlled())
+ return;
+
+ if (Unit* owner = GetOwner())
+ if (Player* player = owner->ToPlayer())
+ if (owner->ToPlayer()->GetGroup())
+ owner->ToPlayer()->SetGroupUpdateFlag(GROUP_UPDATE_FLAG_PET_MODEL_ID);
+}
diff --git a/src/server/game/Entities/Pet/Pet.h b/src/server/game/Entities/Pet/Pet.h
index c7e4e850ae3..e0afef2b8e3 100644
--- a/src/server/game/Entities/Pet/Pet.h
+++ b/src/server/game/Entities/Pet/Pet.h
@@ -46,6 +46,8 @@ class Pet : public Guardian
void AddToWorld();
void RemoveFromWorld();
+ void SetDisplayId(uint32 modelId);
+
PetType getPetType() const { return m_petType; }
void setPetType(PetType type) { m_petType = type; }
bool isControlled() const { return getPetType() == SUMMON_PET || getPetType() == HUNTER_PET; }
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index a7d37dd870f..a6ec2371837 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -965,8 +965,7 @@ bool Player::Create(uint32 guidlow, CharacterCreateInfo* createInfo)
uint8 powertype = cEntry->powerType;
- SetFloatValue(UNIT_FIELD_BOUNDINGRADIUS, DEFAULT_WORLD_OBJECT_SIZE);
- SetFloatValue(UNIT_FIELD_COMBATREACH, 1.5f);
+ SetObjectScale(1.0f);
setFactionForRace(createInfo->Race);
@@ -5125,8 +5124,6 @@ void Player::BuildPlayerRepop()
StopMirrorTimers(); //disable timers(bars)
- SetFloatValue(UNIT_FIELD_BOUNDINGRADIUS, float(1.0f)); //see radius of death player?
-
// set and clear other
SetByteValue(UNIT_FIELD_BYTES_1, 3, UNIT_BYTE1_FLAG_ALWAYS_STAND);
}
@@ -16985,8 +16982,7 @@ bool Player::LoadFromDB(uint32 guid, SQLQueryHolder *holder)
_LoadIntoDataField(fields[61].GetCString(), PLAYER_EXPLORED_ZONES_1, PLAYER_EXPLORED_ZONES_SIZE);
_LoadIntoDataField(fields[64].GetCString(), PLAYER__FIELD_KNOWN_TITLES, KNOWN_TITLES_SIZE*2);
- SetFloatValue(UNIT_FIELD_BOUNDINGRADIUS, DEFAULT_WORLD_OBJECT_SIZE);
- SetFloatValue(UNIT_FIELD_COMBATREACH, 1.5f);
+ SetObjectScale(1.0f);
SetFloatValue(UNIT_FIELD_HOVERHEIGHT, 1.0f);
// load achievements before anything else to prevent multiple gains for the same achievement/criteria on every loading (as loading does call UpdateAchievementCriteria)
diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h
index 1c0fa4ea93d..b05a08446c0 100644
--- a/src/server/game/Entities/Player/Player.h
+++ b/src/server/game/Entities/Player/Player.h
@@ -1063,7 +1063,7 @@ class Player : public Unit, public GridObject<Player>
friend void Item::AddToUpdateQueueOf(Player* player);
friend void Item::RemoveFromUpdateQueueOf(Player* player);
public:
- explicit Player (WorldSession* session);
+ explicit Player(WorldSession* session);
~Player();
void CleanupsBeforeDelete(bool finalCleanup = true);
@@ -1071,6 +1071,13 @@ class Player : public Unit, public GridObject<Player>
void AddToWorld();
void RemoveFromWorld();
+ void SetObjectScale(float scale)
+ {
+ Unit::SetObjectScale(scale);
+ SetFloatValue(UNIT_FIELD_BOUNDINGRADIUS, scale * DEFAULT_WORLD_OBJECT_SIZE);
+ SetFloatValue(UNIT_FIELD_COMBATREACH, scale * DEFAULT_COMBAT_REACH);
+ }
+
bool TeleportTo(uint32 mapid, float x, float y, float z, float orientation, uint32 options = 0);
bool TeleportTo(WorldLocation const &loc, uint32 options = 0);
bool TeleportToBGEntryPoint();
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index 326f41b2e0e..3995c9ed661 100644
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -14512,16 +14512,6 @@ bool Unit::IsPolymorphed() const
void Unit::SetDisplayId(uint32 modelId)
{
SetUInt32Value(UNIT_FIELD_DISPLAYID, modelId);
-
- if (GetTypeId() == TYPEID_UNIT && ToCreature()->isPet())
- {
- Pet* pet = ToPet();
- if (!pet->isControlled())
- return;
- Unit* owner = GetOwner();
- if (owner && (owner->GetTypeId() == TYPEID_PLAYER) && owner->ToPlayer()->GetGroup())
- owner->ToPlayer()->SetGroupUpdateFlag(GROUP_UPDATE_FLAG_PET_MODEL_ID);
- }
}
void Unit::RestoreDisplayId()
diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h
index 707c42fe035..4b2d9ccd64a 100644
--- a/src/server/game/Entities/Unit/Unit.h
+++ b/src/server/game/Entities/Unit/Unit.h
@@ -1921,7 +1921,7 @@ class Unit : public WorldObject
void UpdateInterruptMask();
uint32 GetDisplayId() const { return GetUInt32Value(UNIT_FIELD_DISPLAYID); }
- void SetDisplayId(uint32 modelId);
+ virtual void SetDisplayId(uint32 modelId);
uint32 GetNativeDisplayId() const { return GetUInt32Value(UNIT_FIELD_NATIVEDISPLAYID); }
void RestoreDisplayId();
void SetNativeDisplayId(uint32 modelId) { SetUInt32Value(UNIT_FIELD_NATIVEDISPLAYID, modelId); }