49 std::span<ChatCommandBuilder const>
GetCommands()
const override
74 {
"go", goCommandTable },
118 for (
auto const& pair :
sObjectMgr->GetAllCreatureData())
120 if (pair.second.id != *cId)
124 spawnpoint = &pair.second;
158 for (
auto const& pair :
sObjectMgr->GetAllGameObjectData())
160 if (pair.second.id != *goId)
164 spawnpoint = &pair.second;
233 std::shared_ptr<TerrainInfo> terrain =
sTerrainMgr.LoadTerrain(mapId);
245 if (questData.holds_alternative<
uint32>())
247 questID = questData.get<
uint32>();
268 x = data.
Points.front().X;
269 y = data.
Points.front().Y;
270 z = data.
Points.front().Z;
292 std::shared_ptr<TerrainInfo> terrain =
sTerrainMgr.LoadTerrain(mapId);
332 if (x < 0 || x > 100 || y < 0 || y > 100 || !areaEntry)
397 std::shared_ptr<TerrainInfo> terrain =
sTerrainMgr.LoadTerrain(mapId);
401 return DoTeleport(handler, { x, y, *z, o.value_or(0.0f) }, mapId);
422 ticket->TeleportTo(player);
429 loc.
RelocateOffset({ dX, dY.value_or(0.0f), dZ.value_or(0.0f), dO.value_or(0.0f) });
440 std::multimap<uint32, std::tuple<uint16, char const*, char const*>> matches;
441 for (
auto const& pair :
sObjectMgr->GetInstanceTemplates())
444 std::string
const& scriptName =
sObjectMgr->GetScriptName(pair.second.ScriptId);
446 for (std::string_view label : labels)
451 matches.emplace(count,
decltype(matches)::mapped_type(pair.first, mapName, scriptName.c_str()));
460 auto it = matches.crbegin(), end = matches.crend();
461 uint32 const maxCount = it->first;
462 if ((++it) != end && it->first == maxCount)
468 while (((++it) != end) && (it->first == maxCount));
473 it = matches.crbegin();
474 uint32 const mapId = std::get<0>(it->second);
475 char const*
const mapName = std::get<1>(it->second);
486 if (player->
TeleportTo(exit->Loc.GetMapId(), exit->Loc.GetPositionX(), exit->Loc.GetPositionY(), exit->Loc.GetPositionZ(), exit->Loc.GetOrientation() +
M_PI))
493 uint32 const parentMapId = exit->Loc.GetMapId();
524 std::multimap<uint32, CreatureTemplate const*, std::greater<uint32>> matches;
525 std::unordered_map<uint32, std::vector<CreatureData const*>> spawnLookup;
528 for (
auto const& pair :
sObjectMgr->GetCreatureTemplates())
533 for (std::string_view label : needles)
539 matches.emplace(count, &data);
540 spawnLookup.try_emplace(data.
Entry);
544 if (!matches.empty())
547 for (
auto const& pair :
sObjectMgr->GetAllCreatureData())
550 auto it = spawnLookup.find(data.
id);
551 if (it != spawnLookup.end())
552 it->second.push_back(&data);
556 Trinity::Containers::EraseIf(matches, [&spawnLookup](
decltype(matches)::value_type
const& pair) {
return spawnLookup[pair.second->Entry].empty(); });
568 auto it = matches.cbegin(), end = matches.cend();
569 uint32 const maxCount = it->first;
570 if ((++it) != end && it->first == maxCount)
576 while (((++it) != end) && (it->first == maxCount));
582 std::vector<CreatureData const*>
const& spawns = spawnLookup[boss->
Entry];
585 if (spawns.size() > 1)
590 uint32 const mapId = spawn->mapId;
606 if (!player->
TeleportTo({ mapId, spawn->spawnPoint }))
DB2Storage< MapEntry > sMapStore("Map.db2", &MapLoadInfo::Instance)
DB2Storage< TaxiNodesEntry > sTaxiNodesStore("TaxiNodes.db2", &TaxiNodesLoadInfo::Instance)
DB2Storage< AreaTriggerEntry > sAreaTriggerStore("AreaTrigger.db2", &AreaTriggerLoadInfo::Instance)
DB2Storage< AreaTableEntry > sAreaTableStore("AreaTable.db2", &AreaTableLoadInfo::Instance)
#define ASSERT_NOTNULL(pointer)
@ LANG_COMMAND_INSTANCE_NO_ENTRANCE
@ LANG_COMMAND_GO_INSTANCE_START_FAILED
@ LANG_COMMAND_NO_BOSSES_MATCH
@ LANG_COMMAND_GO_BOSS_FAILED
@ LANG_COMMAND_GOCREATNOTFOUND
@ LANG_COMMAND_BOSS_MULTIPLE_SPAWNS
@ LANG_COMMAND_GRAVEYARDNOEXIST
@ LANG_COMMAND_NO_INSTANCES_MATCH
@ LANG_COMMAND_GOAREATRNOTFOUND
@ LANG_COMMAND_WENT_TO_INSTANCE_GATE
@ LANG_COMMAND_MULTIPLE_INSTANCES_ENTRY
@ LANG_COMMAND_GOTAXINODENOTFOUND
@ LANG_COMMAND_MULTIPLE_INSTANCES_MATCH
@ LANG_COMMAND_GOOBJNOTFOUND
@ LANG_COMMAND_WENT_TO_INSTANCE_START
@ LANG_INVALID_TARGET_COORD
@ LANG_COMMAND_INSTANCE_NO_EXIT
@ LANG_COMMAND_MULTIPLE_BOSSES_MATCH
@ LANG_COMMAND_GOCREATMULTIPLE
@ LANG_COMMAND_BOSS_MULTIPLE_SPAWN_ETY
@ LANG_COMMAND_TICKETNOTEXIST
@ LANG_COMMAND_WENT_TO_BOSS
@ LANG_INVALID_ZONE_COORD
@ LANG_COMMAND_QUEST_NOTFOUND
@ LANG_COMMAND_GO_INSTANCE_GATE_FAILED
@ LANG_COMMAND_MULTIPLE_BOSSES_ENTRY
std::optional< T > Optional
Optional helper class to wrap optional values within.
Role Based Access Control related classes definition.
bool StringContainsStringI(std::string_view haystack, std::string_view needle)
WorldSession * GetSession()
virtual LocaleConstant GetSessionDbcLocale() const
void SetSentErrorMessage(bool val)
void PSendSysMessage(char const *fmt, Args &&... args)
virtual void SendSysMessage(std::string_view str, bool escapeCharacters=false)
static bool IsValidMapCoord(uint32 mapid, float x, float y)
static PhaseShift const & GetEmptyPhaseShift()
void SaveRecallPosition()
bool TeleportTo(uint32 mapid, float x, float y, float z, float orientation, TeleportToOptions options=TELE_TO_NONE, Optional< uint32 > instanceId={}, uint32 teleportSpellId=0)
uint32 GetQuestId() const
constexpr uint32 GetMapId() const
Player * GetPlayer() const
static bool HandleGoAreaTriggerCommand(ChatHandler *handler, Variant< Hyperlink< areatrigger >, uint32 > areaTriggerId)
static bool HandleGoGameObjectSpawnIdCommand(ChatHandler *handler, Variant< Hyperlink< gameobject >, ObjectGuid::LowType > spawnId)
static bool HandleGoGraveyardCommand(ChatHandler *handler, uint32 gyId)
static bool HandleGoInstanceCommand(ChatHandler *handler, std::vector< std::string_view > labels)
static bool HandleGoGameObjectGOIdCommand(ChatHandler *handler, Variant< Hyperlink< gameobject_entry >, uint32 > goId)
static bool HandleGoOffsetCommand(ChatHandler *handler, float dX, Optional< float > dY, Optional< float > dZ, Optional< float > dO)
static bool HandleGoTaxinodeCommand(ChatHandler *handler, Variant< Hyperlink< taxinode >, uint32 > nodeId)
static bool DoTeleport(ChatHandler *handler, Position pos, uint32 mapId=MAPID_INVALID)
static bool HandleGoQuestCommand(ChatHandler *handler, Variant< Hyperlink< quest >, uint32 > questData)
static bool HandleGoBossCommand(ChatHandler *handler, std::vector< std::string_view > needles)
static bool HandleGoGridCommand(ChatHandler *handler, float gridX, float gridY, Optional< uint32 > oMapId)
static bool HandleGoTicketCommand(ChatHandler *handler, uint32 ticketId)
std::span< ChatCommandBuilder const > GetCommands() const override
static bool HandleGoCreatureSpawnIdCommand(ChatHandler *handler, Variant< Hyperlink< creature >, ObjectGuid::LowType > spawnId)
static bool HandleGoZoneXYCommand(ChatHandler *handler, float x, float y, Optional< Variant< Hyperlink< area >, uint32 > > areaIdArg)
static bool HandleGoXYZCommand(ChatHandler *handler, float x, float y, Optional< float > z, Optional< uint32 > id, Optional< float > o)
static bool HandleGoCreatureCIdCommand(ChatHandler *handler, Variant< Hyperlink< creature_entry >, uint32 > cId)
void AddSC_go_commandscript()
ChatCommandBuilder const [] ChatCommandTable
constexpr void EraseIf(Container &c, Predicate p)
EnumFlag< AreaFlags > GetFlags() const
constexpr float GetPositionX() const
constexpr float GetPositionY() const
constexpr void GetPosition(float &x, float &y) const
void RelocateOffset(Position const &offset)
constexpr float GetOrientation() const
std::vector< QuestPOIBlobPoint > Points