aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/common/Debugging/Errors.cpp17
-rw-r--r--src/common/Debugging/Errors.h12
-rw-r--r--src/server/game/AI/CoreAI/UnitAI.cpp8
-rw-r--r--src/server/game/AI/CoreAI/UnitAI.h2
-rw-r--r--src/server/game/Entities/Creature/Creature.cpp9
-rw-r--r--src/server/game/Entities/Creature/Creature.h2
-rw-r--r--src/server/game/Entities/Creature/TemporarySummon.cpp25
-rw-r--r--src/server/game/Entities/Creature/TemporarySummon.h7
-rw-r--r--src/server/game/Entities/GameObject/GameObject.cpp8
-rw-r--r--src/server/game/Entities/GameObject/GameObject.h2
-rw-r--r--src/server/game/Entities/Item/Container/Bag.cpp7
-rw-r--r--src/server/game/Entities/Item/Container/Bag.h6
-rw-r--r--src/server/game/Entities/Item/Item.cpp12
-rw-r--r--src/server/game/Entities/Item/Item.h2
-rw-r--r--src/server/game/Entities/Object/Object.cpp16
-rw-r--r--src/server/game/Entities/Object/Object.h4
-rw-r--r--src/server/game/Entities/Object/Position.cpp7
-rw-r--r--src/server/game/Entities/Object/Position.h2
-rw-r--r--src/server/game/Entities/Pet/Pet.cpp9
-rw-r--r--src/server/game/Entities/Pet/Pet.h2
-rw-r--r--src/server/game/Entities/Player/Player.cpp7
-rw-r--r--src/server/game/Entities/Player/Player.h3
-rw-r--r--src/server/game/Entities/Transport/Transport.cpp7
-rw-r--r--src/server/game/Entities/Transport/Transport.h2
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp13
-rw-r--r--src/server/game/Entities/Unit/Unit.h2
-rw-r--r--src/server/game/Maps/Map.cpp18
-rw-r--r--src/server/game/Maps/Map.h4
-rw-r--r--src/server/game/Spells/Auras/SpellAuras.cpp19
-rw-r--r--src/server/game/Spells/Auras/SpellAuras.h2
-rw-r--r--src/server/game/Spells/Spell.cpp9
-rw-r--r--src/server/game/Spells/Spell.h2
32 files changed, 226 insertions, 21 deletions
diff --git a/src/common/Debugging/Errors.cpp b/src/common/Debugging/Errors.cpp
index fd46575c237..fc4ecb5f2c8 100644
--- a/src/common/Debugging/Errors.cpp
+++ b/src/common/Debugging/Errors.cpp
@@ -59,8 +59,8 @@ namespace
int32 length = vsnprintf(nullptr, 0, format, len);
va_end(len);
- formatted.resize(length + 1);
- vsnprintf(&formatted[0], length + 1, format, args);
+ formatted.resize(length);
+ vsnprintf(&formatted[0], length, format, args);
return formatted;
}
@@ -69,20 +69,20 @@ namespace
namespace Trinity
{
-void Assert(char const* file, int line, char const* function, char const* message)
+void Assert(char const* file, int line, char const* function, std::string debugInfo, char const* message)
{
- std::string formattedMessage = StringFormat("\n%s:%i in %s ASSERTION FAILED:\n %s\n", file, line, function, message);
+ std::string formattedMessage = StringFormat("\n%s:%i in %s ASSERTION FAILED:\n %s\n", file, line, function, message) + debugInfo + '\n';
fprintf(stderr, "%s", formattedMessage.c_str());
fflush(stderr);
Crash(formattedMessage.c_str());
}
-void Assert(char const* file, int line, char const* function, char const* message, char const* format, ...)
+void Assert(char const* file, int line, char const* function, std::string debugInfo, char const* message, char const* format, ...)
{
va_list args;
va_start(args, format);
- std::string formattedMessage = StringFormat("\n%s:%i in %s ASSERTION FAILED:\n %s\n", file, line, function, message) + FormatAssertionMessage(format, args) + '\n';
+ std::string formattedMessage = StringFormat("\n%s:%i in %s ASSERTION FAILED:\n %s\n", file, line, function, message) + FormatAssertionMessage(format, args) + '\n' + debugInfo + '\n';
va_end(args);
fprintf(stderr, "%s", formattedMessage.c_str());
@@ -138,3 +138,8 @@ void AbortHandler(int sigval)
}
} // namespace Trinity
+
+std::string GetDebugInfo()
+{
+ return "";
+}
diff --git a/src/common/Debugging/Errors.h b/src/common/Debugging/Errors.h
index 202efa9c370..799012ab453 100644
--- a/src/common/Debugging/Errors.h
+++ b/src/common/Debugging/Errors.h
@@ -20,11 +20,12 @@
#define TRINITYCORE_ERRORS_H
#include "Define.h"
+#include <string>
namespace Trinity
{
- DECLSPEC_NORETURN TC_COMMON_API void Assert(char const* file, int line, char const* function, char const* message) ATTR_NORETURN;
- DECLSPEC_NORETURN TC_COMMON_API void Assert(char const* file, int line, char const* function, char const* message, char const* format, ...) ATTR_NORETURN ATTR_PRINTF(5, 6);
+ DECLSPEC_NORETURN TC_COMMON_API void Assert(char const* file, int line, char const* function, std::string debugInfo, char const* message) ATTR_NORETURN;
+ DECLSPEC_NORETURN TC_COMMON_API void Assert(char const* file, int line, char const* function, std::string debugInfo, char const* message, char const* format, ...) ATTR_NORETURN ATTR_PRINTF(6, 7);
DECLSPEC_NORETURN TC_COMMON_API void Fatal(char const* file, int line, char const* function, char const* message, ...) ATTR_NORETURN ATTR_PRINTF(4, 5);
@@ -38,6 +39,8 @@ namespace Trinity
} // namespace Trinity
+TC_COMMON_API std::string GetDebugInfo();
+
#if TRINITY_COMPILER == TRINITY_COMPILER_MICROSOFT
#define ASSERT_BEGIN __pragma(warning(push)) __pragma(warning(disable: 4127))
#define ASSERT_END __pragma(warning(pop))
@@ -50,7 +53,8 @@ namespace Trinity
#define EXCEPTION_ASSERTION_FAILURE 0xC0000420L
#endif
-#define WPAssert(cond, ...) ASSERT_BEGIN do { if (!(cond)) Trinity::Assert(__FILE__, __LINE__, __FUNCTION__, #cond, ##__VA_ARGS__); } while(0) ASSERT_END
+#define WPAssert(cond, ...) ASSERT_BEGIN do { if (!(cond)) Trinity::Assert(__FILE__, __LINE__, __FUNCTION__, GetDebugInfo(), #cond, ##__VA_ARGS__); } while(0) ASSERT_END
+#define WPAssert_NODEBUGINFO(cond, ...) ASSERT_BEGIN do { if (!(cond)) Trinity::Assert(__FILE__, __LINE__, __FUNCTION__, "", #cond, ##__VA_ARGS__); } while(0) ASSERT_END
#define WPFatal(cond, ...) ASSERT_BEGIN do { if (!(cond)) Trinity::Fatal(__FILE__, __LINE__, __FUNCTION__, ##__VA_ARGS__); } while(0) ASSERT_END
#define WPError(cond, msg) ASSERT_BEGIN do { if (!(cond)) Trinity::Error(__FILE__, __LINE__, __FUNCTION__, (msg)); } while(0) ASSERT_END
#define WPWarning(cond, msg) ASSERT_BEGIN do { if (!(cond)) Trinity::Warning(__FILE__, __LINE__, __FUNCTION__, (msg)); } while(0) ASSERT_END
@@ -58,8 +62,10 @@ namespace Trinity
#ifdef PERFORMANCE_PROFILING
#define ASSERT(cond, ...) ((void)0)
+#define ASSERT_NODEBUGINFO(cond, ...) ((void)0)
#else
#define ASSERT WPAssert
+#define ASSERT_NODEBUGINFO WPAssert_NODEBUGINFO
#endif
#define ABORT WPAbort
diff --git a/src/server/game/AI/CoreAI/UnitAI.cpp b/src/server/game/AI/CoreAI/UnitAI.cpp
index 01c7dd6997f..9386122d552 100644
--- a/src/server/game/AI/CoreAI/UnitAI.cpp
+++ b/src/server/game/AI/CoreAI/UnitAI.cpp
@@ -250,6 +250,14 @@ void UnitAI::SortByDistance(std::list<Unit*> list, bool ascending)
list.sort(Trinity::ObjectDistanceOrderPred(me, ascending));
}
+std::string UnitAI::GetDebugInfo() const
+{
+ std::stringstream sstr;
+ sstr << std::boolalpha
+ << "Me: " << (me ? me->GetDebugInfo() : "NULL");
+ return sstr.str();
+}
+
DefaultTargetSelector::DefaultTargetSelector(Unit const* unit, float dist, bool playerOnly, bool withTank, int32 aura)
: me(unit), m_dist(dist), m_playerOnly(playerOnly), except(!withTank ? unit->GetThreatManager().GetCurrentVictim() : nullptr), m_aura(aura)
{
diff --git a/src/server/game/AI/CoreAI/UnitAI.h b/src/server/game/AI/CoreAI/UnitAI.h
index a15a15fe199..b736e3835a5 100644
--- a/src/server/game/AI/CoreAI/UnitAI.h
+++ b/src/server/game/AI/CoreAI/UnitAI.h
@@ -327,6 +327,8 @@ class TC_GAME_API UnitAI
// Called when a game event starts or ends
virtual void OnGameEvent(bool /*start*/, uint16 /*eventId*/) { }
+ virtual std::string GetDebugInfo() const;
+
private:
UnitAI(UnitAI const& right) = delete;
UnitAI& operator=(UnitAI const& right) = delete;
diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp
index 88f434d0cd2..cf0cb59a91a 100644
--- a/src/server/game/Entities/Creature/Creature.cpp
+++ b/src/server/game/Entities/Creature/Creature.cpp
@@ -3217,3 +3217,12 @@ bool Creature::IsEscortNPC(bool onlyIfActive)
return ai->IsEscortNPC(onlyIfActive);
return false;
}
+
+std::string Creature::GetDebugInfo() const
+{
+ std::stringstream sstr;
+ sstr << Unit::GetDebugInfo() << "\n"
+ << "AIName: " << GetAIName() << " ScriptName: " << GetScriptName()
+ << " WaypointPath: " << GetWaypointPath() << " SpawnId: " << GetSpawnId();
+ return sstr.str();
+}
diff --git a/src/server/game/Entities/Creature/Creature.h b/src/server/game/Entities/Creature/Creature.h
index b3c04f1fed1..05e2e32c6ef 100644
--- a/src/server/game/Entities/Creature/Creature.h
+++ b/src/server/game/Entities/Creature/Creature.h
@@ -361,6 +361,8 @@ class TC_GAME_API Creature : public Unit, public GridObject<Creature>, public Ma
void AtEnterCombat() override;
void AtExitCombat() override;
+ std::string GetDebugInfo() const override;
+
protected:
bool CreateFromProto(ObjectGuid::LowType guidlow, uint32 entry, CreatureData const* data = nullptr, uint32 vehId = 0);
bool InitEntry(uint32 entry, CreatureData const* data = nullptr);
diff --git a/src/server/game/Entities/Creature/TemporarySummon.cpp b/src/server/game/Entities/Creature/TemporarySummon.cpp
index ae215d7e2c4..fed8100aa53 100644
--- a/src/server/game/Entities/Creature/TemporarySummon.cpp
+++ b/src/server/game/Entities/Creature/TemporarySummon.cpp
@@ -271,6 +271,15 @@ void TempSummon::RemoveFromWorld()
Creature::RemoveFromWorld();
}
+std::string TempSummon::GetDebugInfo() const
+{
+ std::stringstream sstr;
+ sstr << Creature::GetDebugInfo() << "\n"
+ << std::boolalpha
+ << "TempSummonType : " << std::to_string(GetSummonType()) << " Summoner: " << GetSummonerGUID().ToString();
+ return sstr.str();
+}
+
Minion::Minion(SummonPropertiesEntry const* properties, Unit* owner, bool isWorldObject)
: TempSummon(properties, owner, isWorldObject), m_owner(owner)
{
@@ -327,6 +336,15 @@ bool Minion::IsGuardianPet() const
return IsPet() || (m_Properties && m_Properties->Category == SUMMON_CATEGORY_PET);
}
+std::string Minion::GetDebugInfo() const
+{
+ std::stringstream sstr;
+ sstr << TempSummon::GetDebugInfo() << "\n"
+ << std::boolalpha
+ << "Owner: " << (GetOwner() ? GetOwner()->GetGUID().ToString() : "");
+ return sstr.str();
+}
+
Guardian::Guardian(SummonPropertiesEntry const* properties, Unit* owner, bool isWorldObject) : Minion(properties, owner, isWorldObject)
, m_bonusSpellDamage(0)
{
@@ -363,6 +381,13 @@ void Guardian::InitSummon()
}
}
+std::string Guardian::GetDebugInfo() const
+{
+ std::stringstream sstr;
+ sstr << Minion::GetDebugInfo();
+ return sstr.str();
+}
+
Puppet::Puppet(SummonPropertiesEntry const* properties, Unit* owner)
: Minion(properties, owner, false) //maybe true?
{
diff --git a/src/server/game/Entities/Creature/TemporarySummon.h b/src/server/game/Entities/Creature/TemporarySummon.h
index 55b62610426..e2e385ba73a 100644
--- a/src/server/game/Entities/Creature/TemporarySummon.h
+++ b/src/server/game/Entities/Creature/TemporarySummon.h
@@ -49,10 +49,12 @@ class TC_GAME_API TempSummon : public Creature
Unit* GetSummoner() const;
Creature* GetSummonerCreatureBase() const;
ObjectGuid GetSummonerGUID() const { return m_summonerGUID; }
- TempSummonType const& GetSummonType() { return m_type; }
+ TempSummonType GetSummonType() const { return m_type; }
uint32 GetTimer() const { return m_timer; }
SummonPropertiesEntry const* const m_Properties;
+
+ std::string GetDebugInfo() const override;
private:
TempSummonType m_type;
uint32 m_timer;
@@ -79,6 +81,8 @@ class TC_GAME_API Minion : public TempSummon
bool IsSpiritWolf() const { return GetEntry() == PET_SPIRIT_WOLF; } // Spirit wolf from feral spirits
bool IsGuardianPet() const;
+
+ std::string GetDebugInfo() const override;
protected:
Unit* const m_owner;
float m_followAngle;
@@ -104,6 +108,7 @@ class TC_GAME_API Guardian : public Minion
int32 GetBonusDamage() const { return m_bonusSpellDamage; }
float GetBonusStatFromOwner(Stats stat) const { return m_statFromOwner[stat]; }
void SetBonusDamage(int32 damage);
+ std::string GetDebugInfo() const override;
protected:
int32 m_bonusSpellDamage;
float m_statFromOwner[MAX_STATS];
diff --git a/src/server/game/Entities/GameObject/GameObject.cpp b/src/server/game/Entities/GameObject/GameObject.cpp
index 188a8935d8f..50b67e73a43 100644
--- a/src/server/game/Entities/GameObject/GameObject.cpp
+++ b/src/server/game/Entities/GameObject/GameObject.cpp
@@ -2565,3 +2565,11 @@ GameObjectModel* GameObject::CreateModel()
{
return GameObjectModel::Create(Trinity::make_unique<GameObjectModelOwnerImpl>(this), sWorld->GetDataPath());
}
+
+std::string GameObject::GetDebugInfo() const
+{
+ std::stringstream sstr;
+ sstr << WorldObject::GetDebugInfo() << "\n"
+ << "SpawnId: " << GetSpawnId() << " GoState: " << std::to_string(GetGoState()) << " ScriptId: " << GetScriptId() << " AIName: " << GetAIName();
+ return sstr.str();
+}
diff --git a/src/server/game/Entities/GameObject/GameObject.h b/src/server/game/Entities/GameObject/GameObject.h
index 4d28a4b362c..18323ef222b 100644
--- a/src/server/game/Entities/GameObject/GameObject.h
+++ b/src/server/game/Entities/GameObject/GameObject.h
@@ -285,6 +285,8 @@ class TC_GAME_API GameObject : public WorldObject, public GridObject<GameObject>
void AIM_Destroy();
bool AIM_Initialize();
+ std::string GetDebugInfo() const override;
+
protected:
GameObjectModel* CreateModel();
void UpdateModel(); // updates model in case displayId were changed
diff --git a/src/server/game/Entities/Item/Container/Bag.cpp b/src/server/game/Entities/Item/Container/Bag.cpp
index 0d5311a4064..9fea39eed2d 100644
--- a/src/server/game/Entities/Item/Container/Bag.cpp
+++ b/src/server/game/Entities/Item/Container/Bag.cpp
@@ -245,3 +245,10 @@ Item* Bag::GetItemByPos(uint8 slot) const
return nullptr;
}
+
+std::string Bag::GetDebugInfo() const
+{
+ std::stringstream sstr;
+ sstr << Item::GetDebugInfo();
+ return sstr.str();
+}
diff --git a/src/server/game/Entities/Item/Container/Bag.h b/src/server/game/Entities/Item/Container/Bag.h
index f7b3edaee3b..15dcbfe5521 100644
--- a/src/server/game/Entities/Item/Container/Bag.h
+++ b/src/server/game/Entities/Item/Container/Bag.h
@@ -27,16 +27,14 @@
class TC_GAME_API Bag : public Item
{
public:
-
Bag();
~Bag();
void AddToWorld() override;
void RemoveFromWorld() override;
- bool Create(ObjectGuid::LowType guidlow, ObjectGuid::LowType itemid, Player const* owner) override;
+ bool Create(ObjectGuid::LowType guidlow, uint32 itemid, Player const* owner) override;
- void Clear();
void StoreItem(uint8 slot, Item* pItem, bool update);
void RemoveItem(uint8 slot, bool update);
@@ -59,6 +57,8 @@ class TC_GAME_API Bag : public Item
void BuildCreateUpdateBlockForPlayer(UpdateData* data, Player* target) const override;
+ std::string GetDebugInfo() const override;
+
protected:
// Bag Storage space
diff --git a/src/server/game/Entities/Item/Item.cpp b/src/server/game/Entities/Item/Item.cpp
index c5091a35cab..f5cac785acc 100644
--- a/src/server/game/Entities/Item/Item.cpp
+++ b/src/server/game/Entities/Item/Item.cpp
@@ -992,7 +992,7 @@ Item* Item::CreateItem(uint32 itemEntry, uint32 count, Player const* player /*=
if (count > proto->GetMaxStackSize())
count = proto->GetMaxStackSize();
- ASSERT(count != 0 && "pProto->Stackable == 0 but checked at loading already");
+ ASSERT_NODEBUGINFO(count != 0 && "pProto->Stackable == 0 but checked at loading already");
Item* item = NewItemOrBag(proto);
if (item->Create(sObjectMgr->GetGenerator<HighGuid::Item>().Generate(), itemEntry, player))
@@ -1197,3 +1197,13 @@ void Item::SetCount(uint32 value)
}
}
}
+
+std::string Item::GetDebugInfo() const
+{
+ std::stringstream sstr;
+ sstr << Object::GetDebugInfo() << "\n"
+ << std::boolalpha
+ << "Owner: " << GetOwnerGUID().ToString() << " Count: " << GetCount()
+ << " BagSlot: " << std::to_string(GetBagSlot()) << " Slot: " << std::to_string(GetSlot()) << " Equipped: " << IsEquipped();
+ return sstr.str();
+}
diff --git a/src/server/game/Entities/Item/Item.h b/src/server/game/Entities/Item/Item.h
index ccdd04d40ec..7ee26ee9eba 100644
--- a/src/server/game/Entities/Item/Item.h
+++ b/src/server/game/Entities/Item/Item.h
@@ -202,6 +202,8 @@ class TC_GAME_API Item : public Object
void RemoveFromObjectUpdate() override;
uint32 GetScriptId() const { return GetTemplate()->ScriptId; }
+
+ std::string GetDebugInfo() const override;
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 1bc6a777097..a9a9c78c0bb 100644
--- a/src/server/game/Entities/Object/Object.cpp
+++ b/src/server/game/Entities/Object/Object.cpp
@@ -939,6 +939,13 @@ bool Object::PrintIndexError(uint32 index, bool set) const
return false;
}
+std::string Object::GetDebugInfo() const
+{
+ std::stringstream sstr;
+ sstr << GetGUID().ToString() + " Entry " << GetEntry();
+ return sstr.str();
+}
+
void MovementInfo::OutDebug()
{
TC_LOG_DEBUG("misc", "MOVEMENT INFO");
@@ -3473,6 +3480,15 @@ float WorldObject::GetMapHeight(float x, float y, float z, bool vmap/* = true*/,
return GetMap()->GetHeight(GetPhaseMask(), x, y, z, vmap, distanceToSearch);
}
+std::string WorldObject::GetDebugInfo() const
+{
+ std::stringstream sstr;
+ sstr << WorldLocation::GetDebugInfo() << "\n"
+ << Object::GetDebugInfo() << "\n"
+ << "Name: " << GetName();
+ return sstr.str();
+}
+
template TC_GAME_API void WorldObject::GetGameObjectListWithEntryInGrid(std::list<GameObject*>&, uint32, float) const;
template TC_GAME_API void WorldObject::GetGameObjectListWithEntryInGrid(std::deque<GameObject*>&, uint32, float) const;
template TC_GAME_API void WorldObject::GetGameObjectListWithEntryInGrid(std::vector<GameObject*>&, uint32, float) const;
diff --git a/src/server/game/Entities/Object/Object.h b/src/server/game/Entities/Object/Object.h
index e19602f97ff..76824c2719e 100644
--- a/src/server/game/Entities/Object/Object.h
+++ b/src/server/game/Entities/Object/Object.h
@@ -173,6 +173,8 @@ class TC_GAME_API Object
DynamicObject* ToDynObject() { if (GetTypeId() == TYPEID_DYNAMICOBJECT) return reinterpret_cast<DynamicObject*>(this); else return nullptr; }
DynamicObject const* ToDynObject() const { if (GetTypeId() == TYPEID_DYNAMICOBJECT) return reinterpret_cast<DynamicObject const*>(this); else return nullptr; }
+ virtual std::string GetDebugInfo() const;
+
protected:
Object();
@@ -508,6 +510,8 @@ class TC_GAME_API WorldObject : public Object, public WorldLocation
float GetMapWaterOrGroundLevel(float x, float y, float z, float* ground = nullptr) const;
float GetMapHeight(float x, float y, float z, bool vmap = true, float distanceToSearch = 50.0f) const; // DEFAULT_HEIGHT_SEARCH in map.h
+ std::string GetDebugInfo() const override;
+
// Event handler
EventProcessor m_Events;
diff --git a/src/server/game/Entities/Object/Position.cpp b/src/server/game/Entities/Object/Position.cpp
index 57ebeebfbf1..9cdf7da54fe 100644
--- a/src/server/game/Entities/Object/Position.cpp
+++ b/src/server/game/Entities/Object/Position.cpp
@@ -218,3 +218,10 @@ ByteBuffer& operator<<(ByteBuffer& buf, Position::ConstStreamer<Position::Packed
buf.appendPackXYZ(streamer.Pos->GetPositionX(), streamer.Pos->GetPositionY(), streamer.Pos->GetPositionZ());
return buf;
}
+
+std::string WorldLocation::GetDebugInfo() const
+{
+ std::stringstream sstr;
+ sstr << "MapID: " << m_mapId << " " << Position::ToString();
+ return sstr.str();
+}
diff --git a/src/server/game/Entities/Object/Position.h b/src/server/game/Entities/Object/Position.h
index a0303410206..6dc76698032 100644
--- a/src/server/game/Entities/Object/Position.h
+++ b/src/server/game/Entities/Object/Position.h
@@ -193,6 +193,8 @@ class WorldLocation : public Position
uint32 GetMapId() const { return m_mapId; }
uint32 m_mapId;
+
+ std::string GetDebugInfo() const;
};
TC_GAME_API ByteBuffer& operator<<(ByteBuffer& buf, Position::ConstStreamer<Position::XY> const& streamer);
diff --git a/src/server/game/Entities/Pet/Pet.cpp b/src/server/game/Entities/Pet/Pet.cpp
index bd0ec1affae..06838cbc9cb 100644
--- a/src/server/game/Entities/Pet/Pet.cpp
+++ b/src/server/game/Entities/Pet/Pet.cpp
@@ -1977,3 +1977,12 @@ std::string Pet::GenerateActionBarData() const
return oss.str();
}
+
+std::string Pet::GetDebugInfo() const
+{
+ std::stringstream sstr;
+ sstr << Guardian::GetDebugInfo() << "\n"
+ << std::boolalpha
+ << "PetType: " << std::to_string(getPetType());
+ return sstr.str();
+}
diff --git a/src/server/game/Entities/Pet/Pet.h b/src/server/game/Entities/Pet/Pet.h
index 1d758452b86..b5c2dcf2d91 100644
--- a/src/server/game/Entities/Pet/Pet.h
+++ b/src/server/game/Entities/Pet/Pet.h
@@ -147,6 +147,8 @@ class TC_GAME_API Pet : public Guardian
Player* GetOwner() const;
+ std::string GetDebugInfo() const override;
+
protected:
uint32 m_happinessTimer;
PetType m_petType;
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index 9d398ad1d0f..7de2017eb4b 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -26617,3 +26617,10 @@ void Player::RemoveSocial()
sSocialMgr->RemovePlayerSocial(GetGUID());
m_social = nullptr;
}
+
+std::string Player::GetDebugInfo() const
+{
+ std::stringstream sstr;
+ sstr << Unit::GetDebugInfo();
+ return sstr.str();
+}
diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h
index 98f952bc0e3..3577eea21e4 100644
--- a/src/server/game/Entities/Player/Player.h
+++ b/src/server/game/Entities/Player/Player.h
@@ -1940,7 +1940,6 @@ class TC_GAME_API Player : public Unit, public GridObject<Player>
void UpdateSpeakTime();
bool CanSpeak() const;
- void ChangeSpeakTime(int utime);
/*********************************************************/
/*** VARIOUS SYSTEMS ***/
@@ -2152,6 +2151,8 @@ class TC_GAME_API Player : public Unit, public GridObject<Player>
std::string GetMapAreaAndZoneString() const;
std::string GetCoordsMapAreaAndZoneString() const;
+ std::string GetDebugInfo() const override;
+
protected:
// Gamemaster whisper whitelist
GuidList WhisperList;
diff --git a/src/server/game/Entities/Transport/Transport.cpp b/src/server/game/Entities/Transport/Transport.cpp
index 52ef320b886..1f6ee40b587 100644
--- a/src/server/game/Entities/Transport/Transport.cpp
+++ b/src/server/game/Entities/Transport/Transport.cpp
@@ -767,3 +767,10 @@ void Transport::BuildUpdate(UpdateDataMapType& data_map)
ClearUpdateMask(true);
}
+
+std::string Transport::GetDebugInfo() const
+{
+ std::stringstream sstr;
+ sstr << GameObject::GetDebugInfo();
+ return sstr.str();
+}
diff --git a/src/server/game/Entities/Transport/Transport.h b/src/server/game/Entities/Transport/Transport.h
index 6faa61ed723..39eb34f1b37 100644
--- a/src/server/game/Entities/Transport/Transport.h
+++ b/src/server/game/Entities/Transport/Transport.h
@@ -100,6 +100,8 @@ class TC_GAME_API Transport : public GameObject, public TransportBase
TransportTemplate const* GetTransportTemplate() const { return _transportInfo; }
+ std::string GetDebugInfo() const override;
+
private:
void MoveToNextWaypoint();
float CalculateSegmentPos(float perc);
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index 3326a734577..54a15dd384c 100644
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -888,7 +888,7 @@ bool Unit::HasBreakableByDamageCrowdControlAura(Unit* excludeCasterChannel) cons
{
Player* he = duel_wasMounted ? victim->GetCharmer()->ToPlayer() : victim->ToPlayer();
- ASSERT(he && he->duel);
+ ASSERT_NODEBUGINFO(he && he->duel);
if (duel_wasMounted) // In this case victim == mount
victim->SetHealth(1);
@@ -13458,3 +13458,14 @@ float Unit::GetCollisionHeight() const
float const collisionHeight = scaleMod * modelData->CollisionHeight * modelData->Scale * displayInfo->scale;
return collisionHeight == 0.0f ? DEFAULT_COLLISION_HEIGHT : collisionHeight;
}
+
+std::string Unit::GetDebugInfo() const
+{
+ std::stringstream sstr;
+ sstr << WorldObject::GetDebugInfo() << "\n"
+ << std::boolalpha
+ << "IsAIEnabled: " << IsAIEnabled() << " DeathState: " << std::to_string(getDeathState())
+ << " UnitMovementFlags: " << GetUnitMovementFlags() << " ExtraUnitMovementFlags: " << GetExtraUnitMovementFlags()
+ << " Class: " << std::to_string(getClass());
+ return sstr.str();
+}
diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h
index 67b9b886b49..17a4099f9a0 100644
--- a/src/server/game/Entities/Unit/Unit.h
+++ b/src/server/game/Entities/Unit/Unit.h
@@ -1676,6 +1676,8 @@ class TC_GAME_API Unit : public WorldObject
virtual void Whisper(uint32 textId, Player* target, bool isBossWhisper = false);
float GetCollisionHeight() const override;
+
+ std::string GetDebugInfo() const override;
protected:
explicit Unit (bool isWorldObject);
diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp
index 921f982b5a5..46e2479e5d7 100644
--- a/src/server/game/Maps/Map.cpp
+++ b/src/server/game/Maps/Map.cpp
@@ -4660,3 +4660,21 @@ void Map::UpdateAreaDependentAuras()
}
}
}
+
+std::string Map::GetDebugInfo() const
+{
+ std::stringstream sstr;
+ sstr << std::boolalpha
+ << "Id: " << GetId() << " InstanceId: " << GetInstanceId() << " Difficulty: " << std::to_string(GetDifficulty())
+ << " HasPlayers: " << HavePlayers();
+ return sstr.str();
+}
+
+std::string InstanceMap::GetDebugInfo() const
+{
+ std::stringstream sstr;
+ sstr << Map::GetDebugInfo() << "\n"
+ << std::boolalpha
+ << "ScriptId: " << GetScriptId() << " ScriptName: " << GetScriptName();
+ return sstr.str();
+}
diff --git a/src/server/game/Maps/Map.h b/src/server/game/Maps/Map.h
index f6fdc2af2e6..ceff28fc9b8 100644
--- a/src/server/game/Maps/Map.h
+++ b/src/server/game/Maps/Map.h
@@ -624,6 +624,8 @@ class TC_GAME_API Map : public GridRefManager<NGridType>
_updateObjects.erase(obj);
}
+ virtual std::string GetDebugInfo() const;
+
private:
void LoadMapAndVMap(int gx, int gy);
@@ -917,6 +919,8 @@ class TC_GAME_API InstanceMap : public Map
uint32 GetMaxResetDelay() const;
virtual void InitVisibilityDistance() override;
+
+ std::string GetDebugInfo() const override;
private:
bool m_resetAfterUnload;
bool m_unloadWhenEmpty;
diff --git a/src/server/game/Spells/Auras/SpellAuras.cpp b/src/server/game/Spells/Auras/SpellAuras.cpp
index 249af19cbcf..e004a05db76 100644
--- a/src/server/game/Spells/Auras/SpellAuras.cpp
+++ b/src/server/game/Spells/Auras/SpellAuras.cpp
@@ -265,8 +265,8 @@ void AuraApplication::ClientUpdate(bool remove)
uint8 Aura::BuildEffectMaskForOwner(SpellInfo const* spellProto, uint8 availableEffectMask, WorldObject* owner)
{
- ASSERT(spellProto);
- ASSERT(owner);
+ ASSERT_NODEBUGINFO(spellProto);
+ ASSERT_NODEBUGINFO(owner);
uint8 effMask = 0;
switch (owner->GetTypeId())
{
@@ -295,7 +295,7 @@ uint8 Aura::BuildEffectMaskForOwner(SpellInfo const* spellProto, uint8 available
Aura* Aura::TryRefreshStackOrCreate(AuraCreateInfo& createInfo)
{
- ASSERT(createInfo.Caster || createInfo.CasterGUID);
+ ASSERT_NODEBUGINFO(createInfo.Caster || createInfo.CasterGUID);
if (createInfo.IsRefresh)
*createInfo.IsRefresh = false;
@@ -393,7 +393,7 @@ Aura* Aura::Create(AuraCreateInfo& createInfo)
effMask = createInfo._targetEffectMask;
effMask = Aura::BuildEffectMaskForOwner(createInfo._spellInfo, effMask, createInfo._owner);
- ASSERT(effMask);
+ ASSERT_NODEBUGINFO(effMask);
Unit* unit = createInfo._owner->ToUnit();
aura->ToUnitAura()->AddStaticApplication(unit, effMask);
@@ -401,7 +401,7 @@ Aura* Aura::Create(AuraCreateInfo& createInfo)
}
case TYPEID_DYNAMICOBJECT:
createInfo._auraEffectMask = Aura::BuildEffectMaskForOwner(createInfo._spellInfo, createInfo._auraEffectMask, createInfo._owner);
- ASSERT(createInfo._auraEffectMask);
+ ASSERT_NODEBUGINFO(createInfo._auraEffectMask);
aura = new DynObjAura(createInfo);
break;
@@ -2573,6 +2573,15 @@ void Aura::CallScriptAfterEffectProcHandlers(AuraEffect const* aurEff, AuraAppli
}
}
+std::string Aura::GetDebugInfo() const
+{
+ std::stringstream sstr;
+ sstr << std::boolalpha
+ << "Id: " << GetId() << " Caster: " << GetCasterGUID().ToString()
+ << "\nOwner: " << (GetOwner() ? GetOwner()->GetDebugInfo() : "NULL");
+ return sstr.str();
+}
+
UnitAura::UnitAura(AuraCreateInfo const& createInfo)
: Aura(createInfo)
{
diff --git a/src/server/game/Spells/Auras/SpellAuras.h b/src/server/game/Spells/Auras/SpellAuras.h
index 10e8765c65f..b790e35fcb4 100644
--- a/src/server/game/Spells/Auras/SpellAuras.h
+++ b/src/server/game/Spells/Auras/SpellAuras.h
@@ -266,6 +266,8 @@ class TC_GAME_API Aura
std::vector<AuraScript*> m_loadedScripts;
+ virtual std::string GetDebugInfo() const;
+
private:
AuraScript* GetScriptByName(std::string const& scriptName) const;
void _DeleteRemovedApplications();
diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp
index 62cbb663891..8c19863a5db 100644
--- a/src/server/game/Spells/Spell.cpp
+++ b/src/server/game/Spells/Spell.cpp
@@ -7994,6 +7994,15 @@ void Spell::CancelGlobalCooldown()
m_caster->ToUnit()->GetSpellHistory()->CancelGlobalCooldown(m_spellInfo);
}
+std::string Spell::GetDebugInfo() const
+{
+ std::stringstream sstr;
+ sstr << std::boolalpha
+ << "Id: " << GetSpellInfo()->Id << " OriginalCaster: " << m_originalCasterGUID.ToString()
+ << " State: " << getState();
+ return sstr.str();
+}
+
namespace Trinity
{
diff --git a/src/server/game/Spells/Spell.h b/src/server/game/Spells/Spell.h
index 691bddf43f7..8b94b176eff 100644
--- a/src/server/game/Spells/Spell.h
+++ b/src/server/game/Spells/Spell.h
@@ -558,6 +558,8 @@ class TC_GAME_API Spell
Spell** m_selfContainer; // pointer to our spell container (if applicable)
+ std::string GetDebugInfo() const;
+
protected:
bool HasGlobalCooldown() const;
void TriggerGlobalCooldown();