aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Entities/Item/Item.cpp10
-rw-r--r--src/server/game/Entities/Item/Item.h3
-rw-r--r--src/server/game/Entities/Object/Object.cpp40
-rw-r--r--src/server/game/Entities/Object/Object.h13
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp30
-rw-r--r--src/server/game/Entities/Unit/Unit.h10
6 files changed, 98 insertions, 8 deletions
diff --git a/src/server/game/Entities/Item/Item.cpp b/src/server/game/Entities/Item/Item.cpp
index 6efc320d3d2..ed17cf4154c 100644
--- a/src/server/game/Entities/Item/Item.cpp
+++ b/src/server/game/Entities/Item/Item.cpp
@@ -257,6 +257,16 @@ Item::Item()
m_paidExtendedCost = 0;
}
+inline Bag* Item::ToBag()
+{
+ return dynamic_cast<Bag*>(this);
+}
+
+inline const Bag* Item::ToBag() const
+{
+ return dynamic_cast<const Bag*>(this);
+}
+
bool Item::Create(uint32 guidlow, uint32 itemid, Player const* owner)
{
Object::_Create(guidlow, 0, HIGHGUID_ITEM);
diff --git a/src/server/game/Entities/Item/Item.h b/src/server/game/Entities/Item/Item.h
index c2b18badf9b..fc77edd1204 100644
--- a/src/server/game/Entities/Item/Item.h
+++ b/src/server/game/Entities/Item/Item.h
@@ -347,6 +347,9 @@ class Item : public Object
void BuildUpdate(UpdateDataMapType&);
+ Bag* ToBag();
+ const Bag* ToBag() const;
+
private:
std::string m_text;
uint8 m_slot;
diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp
index 203b6a3e1b6..9ad66051119 100644
--- a/src/server/game/Entities/Object/Object.cpp
+++ b/src/server/game/Entities/Object/Object.cpp
@@ -1135,6 +1135,46 @@ bool Object::PrintIndexError(uint32 index, bool set) const
return false;
}
+inline Unit* Object::ToUnit()
+{
+ return dynamic_cast<Unit*>(this);
+}
+
+inline const Unit* Object::ToUnit() const
+{
+ return dynamic_cast<const Unit*>(this);
+}
+
+inline Player* Object::ToPlayer()
+{
+ return dynamic_cast<Player*>(this);
+}
+
+inline const Player* Object::ToPlayer() const
+{
+ return dynamic_cast<const Player*>(this);
+}
+
+inline Creature* Object::ToCreature()
+{
+ return dynamic_cast<Creature*>(this);
+}
+
+inline const Creature* Object::ToCreature() const
+{
+ return dynamic_cast<const Creature*>(this);
+}
+
+inline Item* Object::ToItem()
+{
+ return dynamic_cast<Item*>(this);
+}
+
+inline const Item* Object::ToItem() const
+{
+ return dynamic_cast<const Item*>(this);
+}
+
bool Position::HasInLine(const Unit * const target, float distance, float width) const
{
if (!HasInArc(M_PI, target) || !target->IsWithinDist3d(m_positionX, m_positionY, m_positionZ, distance))
diff --git a/src/server/game/Entities/Object/Object.h b/src/server/game/Entities/Object/Object.h
index 6a6ed7ca10a..af0c7fb76c5 100644
--- a/src/server/game/Entities/Object/Object.h
+++ b/src/server/game/Entities/Object/Object.h
@@ -116,6 +116,7 @@ class CreatureAI;
class ZoneScript;
class Unit;
class Transport;
+class Item;
typedef UNORDERED_MAP<Player*, UpdateData> UpdateDataMapType;
@@ -320,10 +321,14 @@ class Object
// FG: some hacky helpers
void ForceValuesUpdateAtIndex(uint32);
- Player* ToPlayer(){ if (GetTypeId() == TYPEID_PLAYER) return reinterpret_cast<Player*>(this); else return NULL; }
- const Player* ToPlayer() const { if (GetTypeId() == TYPEID_PLAYER) return (const Player*)((Player*)this); else return NULL; }
- Creature* ToCreature(){ if (GetTypeId() == TYPEID_UNIT) return reinterpret_cast<Creature*>(this); else return NULL; }
- const Creature* ToCreature() const {if (GetTypeId() == TYPEID_UNIT) return (const Creature*)((Creature*)this); else return NULL; }
+ Unit* ToUnit();
+ const Unit* ToUnit() const;
+ Player* ToPlayer();
+ const Player* ToPlayer() const;
+ Creature* ToCreature();
+ const Creature* ToCreature() const;
+ Item* ToItem();
+ const Item* ToItem() const;
protected:
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index 6f39eb63af8..240a4e290cf 100644
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -16740,6 +16740,36 @@ uint32 Unit::GetRemainingDotDamage(uint64 caster, uint32 spellId, uint8 effectIn
return amount;
}
+inline Pet* Unit::ToPet()
+{
+ return dynamic_cast<Pet*>(this);
+}
+
+inline const Pet* Unit::ToPet() const
+{
+ return dynamic_cast<const Pet*>(this);
+}
+
+inline Totem* Unit::ToTotem()
+{
+ return dynamic_cast<Totem*>(this);
+}
+
+inline const Totem* Unit::ToTotem() const
+{
+ return dynamic_cast<const Totem*>(this);
+}
+
+inline TempSummon* Unit::ToTempSummon()
+{
+ return dynamic_cast<TempSummon*>(this);
+}
+
+inline const TempSummon* Unit::ToTempSummon() const
+{
+ return dynamic_cast<const TempSummon*>(this);
+}
+
void CharmInfo::SetIsCommandAttack(bool val)
{
m_isCommandAttack = val;
diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h
index de919cccec2..7958fe055dc 100644
--- a/src/server/game/Entities/Unit/Unit.h
+++ b/src/server/game/Entities/Unit/Unit.h
@@ -1980,10 +1980,12 @@ class Unit : public WorldObject
virtual bool isBeingLoaded() const { return false;}
bool IsDuringRemoveFromWorld() const {return m_duringRemoveFromWorld;}
- Pet* ToPet(){ if (isPet()) return reinterpret_cast<Pet*>(this); else return NULL; }
- Totem* ToTotem(){ if (isTotem()) return reinterpret_cast<Totem*>(this); else return NULL; }
- TempSummon* ToTempSummon() { if (isSummon()) return reinterpret_cast<TempSummon*>(this); else return NULL; }
- const TempSummon* ToTempSummon() const { if (isSummon()) return reinterpret_cast<const TempSummon*>(this); else return NULL; }
+ Pet* ToPet();
+ const Pet* ToPet() const;
+ Totem* ToTotem();
+ const Totem* ToTotem() const;
+ TempSummon* ToTempSummon();
+ const TempSummon* ToTempSummon() const;
protected:
explicit Unit ();