99 {
"play", debugPlayCommandTable },
100 {
"send", debugSendCommandTable },
128 {
"debug", debugCommandTable },
152 handler->
PSendSysMessage(
"%02u - %7ums [%s (%f degrees)]", count, cam.timeStamp, cam.locations.ToString().c_str(), cam.locations.GetOrientation() * (180 /
M_PI));
228 data <<
uint8(result);
229 if (failArg1 || failArg2)
230 data <<
uint32(failArg1.value_or(0));
232 data <<
uint32(*failArg2);
268 std::ifstream ifs(
"opcode.txt");
273 std::stringstream parsedStream;
276 char commentToken[2] = {};
277 ifs.get(commentToken[0]);
280 if (commentToken[0] ==
'/')
282 ifs.get(commentToken[1]);
286 if (commentToken[1] ==
'*')
290 ifs.get(commentToken[0]);
293 if (commentToken[0] ==
'*')
295 ifs.get(commentToken[1]);
298 if (commentToken[1] ==
'/')
301 ifs.putback(commentToken[1]);
307 else if (commentToken[1] ==
'/')
310 std::getline(ifs, str);
317 ifs.putback(commentToken[1]);
320 parsedStream.put(commentToken[0]);
325 parsedStream >> opcode;
332 while (!parsedStream.eof() && !parsedStream.fail())
335 parsedStream >> type;
342 if (parsedStream.eof())
345 parsedStream >> val1;
346 if (parsedStream.fail())
350 else if (type ==
"uint16")
352 if (parsedStream.eof())
355 parsedStream >> val2;
356 if (parsedStream.fail())
360 else if (type ==
"uint32")
362 if (parsedStream.eof())
365 parsedStream >> val3;
366 if (parsedStream.fail())
370 else if (type ==
"uint64")
372 if (parsedStream.eof())
375 parsedStream >> val4;
376 if (parsedStream.fail())
380 else if (type ==
"float")
382 if (parsedStream.eof())
385 parsedStream >> val5;
386 if (parsedStream.fail())
390 else if (type ==
"string")
393 parsedStream >> val6;
397 else if (type ==
"appitsguid")
401 else if (type ==
"appmyguid")
405 else if (type ==
"appgoguid")
416 else if (type ==
"goguid")
427 else if (type ==
"myguid")
431 else if (type ==
"itsguid")
435 else if (type ==
"itspos")
441 else if (type ==
"mypos")
449 TC_LOG_ERROR(
"misc",
"Sending opcode that has unknown type '{}'", type);
513 handler->
PSendSysMessage(
"Loot recipient for creature %s (%s, SpawnID %u) is %s",
528 bool listQueue =
false;
529 bool checkAll =
false;
531 if (itemState ==
"unchanged")
533 else if (itemState ==
"changed")
535 else if (itemState ==
"new")
537 else if (itemState ==
"removed")
539 else if (itemState ==
"queue")
541 else if (itemState ==
"check_all")
550 if (!listQueue && !checkAll)
552 itemState =
"The player has the following " + itemState +
" items: ";
563 for (
uint8 j = 0; j < bag->GetBagSize(); ++j)
564 if (
Item* item2 = bag->GetItemByPos(j))
565 if (item2->GetState() == state)
566 handler->
PSendSysMessage(
"bag: 255 slot: %d %s owner: %s", item2->GetSlot(), item2->GetGUID().ToString().c_str(), item2->GetOwnerGUID().ToString().c_str());
568 else if (item->GetState() == state)
569 handler->
PSendSysMessage(
"bag: 255 slot: %d %s owner: %s", item->GetSlot(), item->GetGUID().ToString().c_str(), item->GetOwnerGUID().ToString().c_str());
577 for (
size_t i = 0; i < updateQueue.size(); ++i)
579 Item* item = updateQueue[i];
605 if (updateQueue.empty())
638 handler->
PSendSysMessage(
"The item with slot %d %s has a container (slot: %d, %s) but shouldn't!", item->
GetSlot(), item->
GetGUID().
ToString().c_str(), container->GetSlot(), container->GetGUID().ToString().c_str());
646 if (qp > updateQueue.size())
653 if (updateQueue[qp] ==
nullptr)
660 if (updateQueue[qp] != item)
662 handler->
PSendSysMessage(
"The item with slot %d and %s has a queuepos (%d) that points to another item in the queue (bag: %d, slot: %d, %s)", item->
GetSlot(), item->
GetGUID().
ToString().c_str(), qp, updateQueue[qp]->GetBagSlot(), updateQueue[qp]->GetSlot(), updateQueue[qp]->GetGUID().ToString().c_str());
676 for (
uint8 j = 0; j < bag->GetBagSize(); ++j)
678 Item* item2 = bag->GetItemByPos(j);
704 if (container != bag)
714 if (qp > updateQueue.size())
716 handler->
PSendSysMessage(
"The item in bag %d at slot %d having %s has a queuepos (%d) larger than the update queue size! ", bag->GetSlot(), item2->
GetSlot(), item2->
GetGUID().
ToString().c_str(), qp);
721 if (updateQueue[qp] ==
nullptr)
723 handler->
PSendSysMessage(
"The item in bag %d at slot %d having %s has a queuepos (%d) that points to NULL in the queue!", bag->GetSlot(), item2->
GetSlot(), item2->
GetGUID().
ToString().c_str(), qp);
728 if (updateQueue[qp] != item2)
730 handler->
PSendSysMessage(
"The item in bag %d at slot %d having %s has a queuepos (%d) that points to another item in the queue (bag: %d, slot: %d, %s)", bag->GetSlot(), item2->
GetSlot(), item2->
GetGUID().
ToString().c_str(), qp, updateQueue[qp]->GetBagSlot(), updateQueue[qp]->GetSlot(), updateQueue[qp]->GetGUID().ToString().c_str());
745 for (
size_t i = 0; i < updateQueue.size(); ++i)
747 Item* item = updateQueue[i];
760 handler->
PSendSysMessage(
"queue(%zu): For the item %s, the queuepos doesn't match it's position in the queue!", i, item->
GetGUID().
ToString().c_str());
818 if (threatenedByMe.empty())
823 for (
auto const& pair : threatenedByMe)
845 char const* onlineStr;
846 switch (ref->GetOnlineState())
849 onlineStr =
" [SUPPRESSED]";
852 onlineStr =
" [OFFLINE]";
857 char const* tauntStr;
858 if (unit == fixateVictim)
859 tauntStr =
" [FIXATE]";
861 switch (ref->GetTauntState())
864 tauntStr =
" [TAUNT]";
867 tauntStr =
" [DETAUNT]";
918 handler->
PSendSysMessage(
"- Multi-school threat modifiers (%zu entries):", mods.size());
919 for (
auto const& pair : mods)
926 if (redirectInfo.empty())
930 handler->
PSendSysMessage(
" - %02zu redirects being applied:", redirectInfo.size());
931 for (
auto const& pair : redirectInfo)
934 handler->
PSendSysMessage(
" |-- %02u%% to %s", pair.second, unit ? unit->
GetName().c_str() : pair.first.ToString().c_str());
942 if (redirectRegistry.empty())
946 handler->
PSendSysMessage(
" - %02zu spells may have redirects registered", redirectRegistry.size());
947 for (
auto const& outerPair : redirectRegistry)
950 handler->
PSendSysMessage(
" |-- #%06u %s (%zu entries):", outerPair.first, spell ? spell->
SpellName[0] :
"<unknown>", outerPair.second.size());
951 for (
auto const& innerPair : outerPair.second)
954 handler->
PSendSysMessage(
" |-- %02u%% to %s", innerPair.second, unit ? unit->
GetName().c_str() : innerPair.first.ToString().c_str());
972 Unit* unit = ref.second->GetOther(target);
977 Unit* unit = ref.second->GetOther(target);
1000 if (!passenger || passenger == target)
1005 handler->
PSendSysMessage(
"Unit %u entered vehicle %hhd", entry, *seatId);
1044 std::ostringstream ss;
1045 while (ss.str().size() < 128000)
1046 ss <<
"This is a dummy string to push the packet's size beyond 128000 bytes. ";
1069 handler->
PSendSysMessage(
"Item %u: value at %u is %u", guid, index, value);
1106 unit->HandleEmoteCommand(emote);
1221 currentValue += value;
1278 uint32 value = bit ? 1 << (bit - 1) : 0;
1302 bool unhandledFlag = ((*moveFlags ^ target->
GetUnitMovementFlags()) & ~FlagsWithHandlers) != 0;
1318 *moveFlags &= ~MOVEMENTFLAG_MASK_MOVING;
1351 TC_LOG_INFO(
"sql.dev",
"(@PATH, XX, {:.3f}, {:.3f}, {:.5f}, {:.5f}, 0, 0, 0, 100, 0),", player->
GetPositionX(), player->
GetPositionY(), player->
GetPositionZ(), player->
GetOrientation());
1353 handler->
PSendSysMessage(
"Waypoint SQL written to SQL Developer log");
1379 handler->
PSendSysMessage(
"Transport %s %s", transport->
GetName().c_str(), start ?
"started" :
"stopped");
1388 map =
sMapMgr->FindBaseNonInstanceMap(*mapId);
1393 map = player->GetMap();
1435 if (duration <= 0s || duration >= 30min)
1499 bool daily =
false, weekly =
false, monthly =
false;
1501 daily = weekly = monthly =
true;
1502 else if (arg ==
"DAILY")
1504 else if (arg ==
"WEEKLY")
1506 else if (arg ==
"MONTHLY")
1513 sWorld->ResetDailyQuests();
1518 sWorld->ResetWeeklyQuests();
1523 sWorld->ResetMonthlyQuests();
1538 nearestLoc = bg->GetClosestGraveyard(player);
1542 nearestLoc = bf->GetClosestGraveyard(player);
1552 float distNearest = std::numeric_limits<float>::max();
1559 float dist = (loc->
Loc.
X - x) * (loc->
Loc.
X - x) + (loc->
Loc.
Y - y) * (loc->
Loc.
Y - y) + (loc->
Loc.
Z - z) * (loc->
Loc.
Z - z);
1560 if (dist < distNearest)
1583 bool explain =
false;
1585 if (optArg.holds_alternative<
uint32>())
1586 groupID = optArg.get<
uint32>();
1590 if (groupID && !
sObjectMgr->GetSpawnGroupData(groupID))
1592 handler->
PSendSysMessage(
"There is no spawn group with ID %u.", groupID);
1597 Map const*
const map = player->
GetMap();
1598 char const*
const mapName = map->
GetMapName();
1608 handler->
PSendSysMessage(
"%s's instance script does not manage any spawn groups.", mapName);
1613 std::map<uint32, std::set<std::tuple<bool, uint8, uint8>>> store;
1616 if (groupID && info.SpawnGroupId != groupID)
1627 store[info.SpawnGroupId].emplace(isSpawn, info.BossStateId, info.BossStates);
1630 if (groupID && store.find(groupID) == store.end())
1632 handler->
PSendSysMessage(
"%s's instance script does not manage group '%s'.", mapName,
sObjectMgr->GetSpawnGroupData(groupID)->name.c_str());
1640 for (
auto const& pair : store)
1647 bool isBlocked =
false, isSpawned =
false;
1648 for (
auto const& tuple : pair.second)
1650 bool const isSpawn = std::get<0>(tuple);
1651 uint8 const bossStateId = std::get<1>(tuple);
1653 if (std::get<2>(tuple) & (1 << actualState))
1670 handler->
PSendSysMessage(
" | |-- '%s' could've been %s if boss state %u matched mask 0x%02x; but it is %s -> 0x%02x, which does not match.",
1674 handler->
PSendSysMessage(
" | |=> '%s' is not active due to a blocking rule being matched", groupData->
name);
1676 handler->
PSendSysMessage(
" | |=> '%s' is active due to a spawn rule being matched", groupData->
name);
1678 handler->
PSendSysMessage(
" | |=> '%s' is not active due to none of its rules being matched", groupData->
name);
1689 uint8 stack_array[10] = {};
1692 handler->PSendSysMessage(
"Triggered an array out of bounds read at address %p, value %u",
static_cast<void*
>(stack_array + size), stack_array[size]);
1701 handler->PSendSysMessage(
"Leaked 1 uint8 object at address %p",
static_cast<void*
>(leak));
1708 if (checkIds.empty())
1719 handler->
PSendSysMessage(
"%zu/%zu checks queued for your Warden, they should be sent over the next few minutes (depending on settings)", nQueued, checkIds.size());
1727 sMapMgr->DoForAllMapsWithMapId(mapId.value(),
1728 [handler](
Map* map) ->
void
1730 HandleDebugGuidLimitsMap(handler, map);
1737 [handler](
Map* map) ->
void
1759 sMapMgr->DoForAllMapsWithMapId(mapId.value(),
1760 [handler](
Map* map) ->
void
1762 HandleDebugObjectCountMap(handler, map);
1769 [handler](
Map* map) ->
void
1784 void Visit(std::unordered_map<ObjectGuid, Creature*>& creatureMap)
1786 for (
auto const& p : creatureMap)
1794 void Visit(std::unordered_map<ObjectGuid, T*>&) { }
1798 auto comp = [](std::pair<uint32, uint32>
const& a, std::pair<uint32, uint32>
const& b)
1800 return a.second > b.second;
1804 count = std::min(count,
uint32(set.size()));
1805 std::vector<std::pair<uint32, uint32>> result(count);
1806 std::copy_n(set.begin(), count, result.begin());
1835 handler->
SendSysMessage(
"This command does nothing right now. Edit your local core (cs_debug.cpp) to make it do whatever you need for testing.");
#define MAX_RAID_DIFFICULTY
@ DUNGEON_DIFFICULTY_NORMAL
#define MAX_DUNGEON_DIFFICULTY
DBCStorage< MovieEntry > sMovieStore(MovieEntryfmt)
DBCStorage< WorldSafeLocsEntry > sWorldSafeLocsStore(WorldSafeLocsEntryfmt)
DBCStorage< VehicleEntry > sVehicleStore(VehicleEntryfmt)
MapDifficulty const * GetMapDifficultyData(uint32 mapId, Difficulty difficulty)
DBCStorage< SoundEntriesEntry > sSoundEntriesStore(SoundEntriesfmt)
DBCStorage< MapEntry > sMapStore(MapEntryfmt)
DBCStorage< CinematicSequencesEntry > sCinematicSequencesStore(CinematicSequencesEntryfmt)
std::chrono::seconds Seconds
Seconds shorthand typedef.
#define CENTER_GRID_OFFSET
@ LANG_CHANGE_32BIT_FIELD
@ LANG_COMMAND_OBJNOTFOUND
@ LANG_DEBUG_AREATRIGGER_ON
@ LANG_CINEMATIC_NOT_EXIST
@ LANG_COMMAND_OPCODESENT
@ LANG_COMMAND_NEARGRAVEYARD
@ LANG_SELECT_CHAR_OR_CREATURE
@ LANG_COMMAND_NEARGRAVEYARD_NOTFOUND
@ LANG_DEBUG_AREATRIGGER_OFF
#define TC_LOG_DEBUG(filterType__,...)
#define TC_LOG_ERROR(filterType__,...)
#define TC_LOG_INFO(filterType__,...)
std::vector< FlyByCamera > const * GetFlyByCameras(uint32 cinematicCameraId)
std::optional< T > Optional
Optional helper class to wrap optional values within.
#define INVENTORY_SLOT_BAG_0
Role Based Access Control related classes definition.
@ LINEOFSIGHT_CHECK_GOBJECT
@ WS_WEEKLY_QUEST_RESET_TIME
@ WS_MONTHLY_QUEST_RESET_TIME
@ WS_DAILY_QUEST_RESET_TIME
@ MOVEMENTFLAG_SPLINE_ENABLED
@ MOVEMENTFLAG_WATERWALKING
@ MOVEMENTFLAG_DISABLE_GRAVITY
@ MOVEMENTFLAG_FALLING_SLOW
@ MOVEMENTFLAG_MASK_HAS_PLAYER_STATUS_OPCODE
Movement flags that have change status opcodes associated for players.
bool StringEqualI(std::string_view a, std::string_view b)
bool Utf8ToUpperOnlyLatin(std::string &utf8String)
std::string TimeToHumanReadable(time_t t)
Player * getSelectedPlayer()
WorldSession * GetSession()
virtual LocaleConstant GetSessionDbcLocale() const
Creature * getSelectedCreature()
void SetSentErrorMessage(bool val)
Player * GetPlayer() const
void PSendSysMessage(char const *fmt, Args &&... args)
WorldObject * getSelectedObject()
virtual void SendSysMessage(std::string_view str, bool escapeCharacters=false)
GameObject * GetNearbyGameObject()
static size_t BuildChatPacket(WorldPacket &data, ChatMsg chatType, Language language, ObjectGuid senderGUID, ObjectGuid receiverGUID, std::string_view message, uint8 chatTag, std::string const &senderName="", std::string const &receiverName="", uint32 achievementId=0, bool gmMessage=false, std::string const &channelName="")
std::unordered_map< ObjectGuid, PvPCombatReference * > const & GetPvPCombatRefs() const
std::unordered_map< ObjectGuid, CombatReference * > const & GetPvECombatRefs() const
int32 VisualizeBoundary(Seconds duration, Unit *owner=nullptr, bool fill=false) const
bool hasLootRecipient() const
Player * GetLootRecipient() const
ObjectGuid::LowType GetSpawnId() const
bool Create(ObjectGuid::LowType guidlow, Map *map, uint32 phaseMask, uint32 entry, Position const &pos, CreatureData const *data=nullptr, uint32 vehId=0, bool dynamic=false)
static char const * ToConstant(Enum value)
GOState GetGoState() const
static char const * GetBossStateName(uint8 state)
EncounterState GetBossState(uint32 id) const
std::vector< InstanceSpawnGroupInfo > const *const _instanceSpawnGroups
ItemTemplate const * GetTemplate() const
ItemUpdateState GetState() const
uint16 GetQueuePos() const
ObjectGuid GetOwnerGUID() const
bool IsInUpdateQueue() const
MapStoredObjectTypesContainer & GetObjectsStore()
void LoadGrid(float x, float y)
ObjectGuid::LowType GetMaxLowGuid()
ObjectGuid::LowType GenerateLowGuid()
bool IsSpawnGroupActive(uint32 groupId) const
char const * GetMapName() const
uint32 GetInstanceId() const
size_t GetActiveNonPlayersCount() const
static ObjectGuid const Empty
std::string ToString() const
static Creature * ToCreature(Object *o)
PackedGuid const & GetPackGUID() const
uint32 GetUInt32Value(uint16 index) const
float GetFloatValue(uint16 index) const
void SetFloatValue(uint16 index, float value)
static ObjectGuid GetGUID(Object const *o)
void SetUInt32Value(uint16 index, uint32 value)
uint16 GetValuesCount() const
static Player * ToPlayer(Object *o)
void SendMovieStart(uint32 movieId)
void SendCanTakeQuestResponse(QuestFailedReason msg) const
void SendUpdateWorldState(uint32 variable, uint32 value) const
void SendDirectMessage(WorldPacket const *data) const
void SendSellError(SellResult msg, Creature *creature, ObjectGuid guid, uint32 param) const
Item * GetItemByPos(uint16 pos) const
void DestroyItem(uint8 bag, uint8 slot, bool update)
void SendBuyError(BuyResult msg, Creature *creature, uint32 item, uint32 param) const
Battleground * GetBattleground() const
void SendCinematicStart(uint32 CinematicSequenceId) const
void SendPushToPartyResponse(Player const *player, QuestShareMessages msg) const
void SendEquipError(InventoryResult msg, Item *pItem, Item *pItem2=nullptr, uint32 itemid=0) const
std::vector< Item * > & GetItemUpdateQueue()
Item * GetItemByGuid(ObjectGuid guid) const
std::array< char const *, 16 > SpellName
std::vector< std::pair< ObjectGuid, uint32 > > _redirectInfo
std::array< float, MAX_SPELL_SCHOOL > _singleSchoolModifiers
std::unordered_map< uint32, std::unordered_map< ObjectGuid, uint32 > > _redirectRegistry
auto const & GetThreatenedByMeList() const
bool IsThreatListEmpty(bool includeOffline=false) const
static bool CanHaveThreatList(Unit const *who)
Trinity::IteratorPair< ThreatListIterator, std::nullptr_t > GetSortedThreatList() const
std::unordered_map< std::underlying_type< SpellSchoolMask >::type, float > _multiSchoolModifiers
Unit * GetFixateTarget() const
@ ONLINE_STATE_SUPPRESSED
void EnableMovement(bool enabled)
void Visit(TYPE_CONTAINER &c)
void EnterVehicle(Unit *base, int8 seatId=-1)
uint32 GetUnitMovementFlags() const
ThreatManager & GetThreatManager()
void SetControlled(bool apply, UnitState state)
void StopMoving(bool force=false)
bool SetFeatherFall(bool enable)
bool SetHover(bool enable, bool updateAnimTier=true)
void SetUnitMovementFlags(uint32 f)
float GetCombatReach() const override
bool SetDisableGravity(bool disable, bool updateAnimTier=true)
bool SetSwim(bool enable)
bool SetCanFly(bool enable, bool packetOnly=false)
void ModifyAuraState(AuraStateType flag, bool apply)
bool HasUnitMovementFlag(uint32 f) const
bool SetWalk(bool enable)
uint32 GetExtraUnitMovementFlags() const
bool SetWaterWalking(bool enable)
CombatManager & GetCombatManager()
void SetExtraUnitMovementFlags(uint32 f)
virtual bool IsEngaged() const
ObjectGuid GetTarget() const
virtual size_t DEBUG_ForceSpecificChecks(std::vector< uint16 > const &checks)=0
uint32 GetPhaseMask() const
virtual void SendMessageToSet(WorldPacket const *data, bool self) const
InstanceScript * GetInstanceScript() const
void GetClosePoint(float &x, float &y, float &z, float size, float distance2d=0, float relAngle=0) const
TempSummon * SummonCreature(uint32 entry, Position const &pos, TempSummonType despawnType=TEMPSUMMON_MANUAL_DESPAWN, Milliseconds despawnTime=0s, uint32 vehId=0, uint32 spellId=0, ObjectGuid privateObjectOwner=ObjectGuid::Empty)
std::string const & GetName() const
void PlayDirectMusic(uint32 musicId, Player *target=nullptr)
bool IsWithinLOSInMap(WorldObject const *obj, LineOfSightChecks checks=LINEOFSIGHT_ALL_CHECKS, VMAP::ModelIgnoreFlags ignoreFlags=VMAP::ModelIgnoreFlags::Nothing) const
void DestroyForNearbyPlayers()
Transport * GetTransport() const
void PlayDirectSound(uint32 soundId, Player *target=nullptr)
void PlayDistanceSound(uint32 soundId, Player *target=nullptr)
MovementInfo m_movementInfo
WorldPacket const * Write() override
void SendPacket(WorldPacket const *packet)
Send a packet to the client.
void void SendSetPhaseShift(uint32 phaseShift)
std::unordered_map< uint32, uint32 > creatureIds
std::vector< std::pair< uint32, uint32 > > GetTopCreatureCount(uint32 count)
void Visit(std::unordered_map< ObjectGuid, Creature * > &creatureMap)
void Visit(std::unordered_map< ObjectGuid, T * > &)
static bool HandleDebugSet32BitCommand(ChatHandler *handler, uint32 index, uint8 bit)
static bool HandleDebugSendSetPhaseShiftCommand(ChatHandler *handler, uint32 phaseShift)
static bool HandleDebugThreatListCommand(ChatHandler *handler)
static bool HandleDebugGetItemStateCommand(ChatHandler *handler, std::string itemState)
static bool HandleDebugGetItemValueCommand(ChatHandler *handler, ObjectGuid::LowType guid, uint32 index)
static bool HandleDebugSendLargePacketCommand(ChatHandler *handler)
static void HandleDebugGuidLimitsMap(ChatHandler *handler, Map *map)
static bool HandleDebugSetValueCommand(ChatHandler *handler, uint32 index, Variant< uint32, float > value)
static bool HandleDebugWardenForce(ChatHandler *handler, std::vector< uint16 > checkIds)
static bool HandleDebugRaidResetCommand(ChatHandler *handler, uint32 mapId, Optional< uint8 > difficulty)
static bool HandleDebugMoveflagsCommand(ChatHandler *handler, Optional< uint32 > moveFlags, Optional< uint32 > moveFlagsExtra)
static bool HandleDebugSendChatMsgCommand(ChatHandler *handler, ChatMsg type)
static bool HandleDebugAreaTriggersCommand(ChatHandler *handler)
static bool HandleDebugSendSellErrorCommand(ChatHandler *handler, SellResult error)
static bool HandleDebugGetValueCommand(ChatHandler *handler, uint32 index, bool isInt)
static bool HandleDebugUpdateCommand(ChatHandler *handler, uint32 index, Optional< uint32 > value)
static bool HandleDebugTransportCommand(ChatHandler *handler, std::string operation)
static bool HandleDebugGetLootRecipientCommand(ChatHandler *handler)
static bool HandleDebugLoSCommand(ChatHandler *handler)
static bool HandleDebugPlayMovieCommand(ChatHandler *handler, uint32 movieId)
static bool HandleWPGPSCommand(ChatHandler *handler)
static bool HandleDebugOutOfBounds(ChatHandler *handler)
static bool HandleDebugPlaySoundCommand(ChatHandler *handler, uint32 soundId)
static bool HandleDebugSendOpcodeCommand(ChatHandler *handler)
static bool HandleDebugDummyCommand(ChatHandler *handler)
static bool HandleDebugSendEquipErrorCommand(ChatHandler *handler, InventoryResult error)
static bool HandleDebugThreatInfoCommand(ChatHandler *handler)
static bool HandleDebugSpawnVehicleCommand(ChatHandler *handler, uint32 entry, Optional< uint32 > id)
static bool HandleDebugPlayMusicCommand(ChatHandler *handler, uint32 musicId)
static bool HandleDebugBattlegroundCommand(ChatHandler *)
static bool HandleDebugSendBuyErrorCommand(ChatHandler *handler, BuyResult error)
static bool HandleDebugObjectCountCommand(ChatHandler *handler, Optional< uint32 > mapId)
static bool HandleDebugSendChannelNotifyCommand(ChatHandler *handler, ChatNotify type)
static bool HandleDebugGuidLimitsCommand(ChatHandler *handler, Optional< uint32 > mapId)
static bool HandleDebugCombatListCommand(ChatHandler *handler)
static bool HandleDebugLoadCellsCommand(ChatHandler *handler, Optional< uint32 > mapId, Optional< uint32 > tileX, Optional< uint32 > tileY)
static bool HandleDebugEnterVehicleCommand(ChatHandler *handler, uint32 entry, Optional< int8 > seatId)
static bool HandleDebugSetItemValueCommand(ChatHandler *handler, ObjectGuid::LowType guid, uint32 index, uint32 value)
static bool HandleDebugMemoryLeak(ChatHandler *handler)
static bool HandleDebugMod32ValueCommand(ChatHandler *handler, uint32 index, uint32 value)
static bool HandleDebugItemExpireCommand(ChatHandler *handler, ObjectGuid::LowType guid)
static bool HandleDebugSendQuestInvalidMsgCommand(ChatHandler *handler, QuestFailedReason msg)
static bool HandleDebugQuestResetCommand(ChatHandler *handler, std::string arg)
static bool HandleDebugPlayCinematicCommand(ChatHandler *handler, uint32 cinematicId)
static bool HandleDebugUpdateWorldStateCommand(ChatHandler *handler, uint32 variable, uint32 value)
static void HandleDebugObjectCountMap(ChatHandler *handler, Map *map)
static bool HandleDebugArenaCommand(ChatHandler *)
static bool HandleDebugInstanceSpawns(ChatHandler *handler, Variant< uint32, EXACT_SEQUENCE("explain")> optArg)
static bool HandleDebugNearGraveyard(ChatHandler *handler, Optional< EXACT_SEQUENCE("linked")> linked)
static bool HandleDebugAnimCommand(ChatHandler *handler, Emote emote)
static bool HandleDebugSendSpellFailCommand(ChatHandler *handler, SpellCastResult result, Optional< uint32 > failArg1, Optional< uint32 > failArg2)
static bool HandleDebugSendQuestPartyMsgCommand(ChatHandler *handler, QuestShareMessages msg)
ChatCommandTable GetCommands() const override
static bool HandleDebugBoundaryCommand(ChatHandler *handler, Optional< EXACT_SEQUENCE("fill")> fill, Optional< uint32 > durationArg)
static bool HandleDebugSetAuraStateCommand(ChatHandler *handler, Optional< AuraStateType > state, bool apply)
void AddSC_debug_commandscript()
@ CONFIG_RESPAWN_GUIDALERTLEVEL
@ CONFIG_RESPAWN_GUIDWARNLEVEL
TC_GAME_API Unit * GetUnit(WorldObject const &, ObjectGuid const &guid)
std::vector< ChatCommandBuilder > ChatCommandTable
@ RBAC_PERM_COMMAND_DEBUG
static void VisitAllObjects(WorldObject const *obj, T &visitor, float radius, bool dont_load=true)
bool IsNonRaidDungeon() const
std::string ToString() const
float GetPositionZ() const
float GetOrientation() const
float GetPositionX() const
void GetPosition(float &x, float &y) const
float GetPositionY() const
constexpr bool holds_alternative() const
constexpr decltype(auto) get()