75 {
"go", goCommandTable },
119 for (
auto const& pair :
sObjectMgr->GetAllCreatureData())
121 if (pair.second.id != *cId)
125 spawnpoint = &pair.second;
159 for (
auto const& pair :
sObjectMgr->GetAllGameObjectData())
161 if (pair.second.id != *goId)
165 spawnpoint = &pair.second;
234 std::shared_ptr<TerrainInfo> terrain =
sTerrainMgr.LoadTerrain(mapId);
246 if (questData.holds_alternative<
uint32>())
248 questID = questData.get<
uint32>();
269 x = data.
Points.front().X;
270 y = data.
Points.front().Y;
271 z = data.
Points.front().Z;
293 std::shared_ptr<TerrainInfo> terrain =
sTerrainMgr.LoadTerrain(mapId);
333 if (x < 0 || x > 100 || y < 0 || y > 100 || !areaEntry)
398 std::shared_ptr<TerrainInfo> terrain =
sTerrainMgr.LoadTerrain(mapId);
402 return DoTeleport(handler, { x, y, *z, o.value_or(0.0f) }, mapId);
423 ticket->TeleportTo(player);
430 loc.
RelocateOffset({ dX, dY.value_or(0.0f), dZ.value_or(0.0f), dO.value_or(0.0f) });
441 std::multimap<uint32, std::tuple<uint16, char const*, char const*>> matches;
442 for (
auto const& pair :
sObjectMgr->GetInstanceTemplates())
445 std::string
const& scriptName =
sObjectMgr->GetScriptName(pair.second.ScriptId);
447 for (std::string_view label : labels)
452 matches.emplace(count,
decltype(matches)::mapped_type(pair.first, mapName, scriptName.c_str()));
461 auto it = matches.crbegin(), end = matches.crend();
462 uint32 const maxCount = it->first;
463 if ((++it) != end && it->first == maxCount)
469 while (((++it) != end) && (it->first == maxCount));
474 it = matches.crbegin();
475 uint32 const mapId = std::get<0>(it->second);
476 char const*
const mapName = std::get<1>(it->second);
487 if (player->
TeleportTo(exit->target_mapId, exit->target_X, exit->target_Y, exit->target_Z, exit->target_Orientation +
M_PI))
494 uint32 const parentMapId = exit->target_mapId;
505 if (player->
TeleportTo(entrance->target_mapId, entrance->target_X, entrance->target_Y, entrance->target_Z, entrance->target_Orientation))
525 std::multimap<uint32, CreatureTemplate const*, std::greater<uint32>> matches;
526 std::unordered_map<uint32, std::vector<CreatureData const*>> spawnLookup;
529 for (
auto const& pair :
sObjectMgr->GetCreatureTemplates())
534 for (std::string_view label : needles)
540 matches.emplace(count, &data);
541 spawnLookup.try_emplace(data.
Entry);
545 if (!matches.empty())
548 for (
auto const& pair :
sObjectMgr->GetAllCreatureData())
551 auto it = spawnLookup.find(data.
id);
552 if (it != spawnLookup.end())
553 it->second.push_back(&data);
557 Trinity::Containers::EraseIf(matches, [&spawnLookup](
decltype(matches)::value_type
const& pair) {
return spawnLookup[pair.second->Entry].empty(); });
569 auto it = matches.cbegin(), end = matches.cend();
570 uint32 const maxCount = it->first;
571 if ((++it) != end && it->first == maxCount)
577 while (((++it) != end) && (it->first == maxCount));
583 std::vector<CreatureData const*>
const& spawns = spawnLookup[boss->
Entry];
586 if (spawns.size() > 1)
591 uint32 const mapId = spawn->mapId;
607 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 PSendSysMessage(const char *fmt, Args &&... args)
void SetSentErrorMessage(bool val)
virtual void SendSysMessage(std::string_view str, bool escapeCharacters=false)
static bool IsValidMapCoord(uint32 mapid, float x, float y)
static PhaseShift const & GetEmptyPhaseShift()
bool TeleportTo(uint32 mapid, float x, float y, float z, float orientation, TeleportToOptions options=TELE_TO_NONE, Optional< uint32 > instanceId={})
void SaveRecallPosition()
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)
ChatCommandTable GetCommands() const override
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)
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()
std::vector< ChatCommandBuilder > ChatCommandTable
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