67 std::span<ChatCommandBuilder const>
GetCommands()
const override
95 {
"add", npcAddCommandTable },
96 {
"set", npcSetCommandTable },
117 {
"npc", npcCommandTable },
139 if (
Creature* creature = trans->CreateNPCPassenger(guid, &data))
141 creature->SaveToDB(trans->GetGOInfo()->moTransport.SpawnMap, { map->GetDifficultyID() });
152 creature->
SaveToDB(map->
GetId(), { map->GetDifficultyID() });
188 uint32 maxcount = mc.value_or(0);
189 uint32 incrtime = it.value_or(0);
190 uint32 extendedcost = ec.value_or(0);
211 sObjectMgr->AddVendorItem(vendor_entry, vItem);
244 if (
sWorld->getAllowMovement())
246 sWorld->SetAllowMovement(
false);
251 sWorld->SetAllowMovement(
true);
288 if (!creature || creature->
IsPet())
306 spawnId = *spawnIdArg;
310 if (!creature || creature->
IsPet() || creature->
IsTotem())
486 uint64 mechanicImmuneMask = 0;
488 mechanicImmuneMask = immunities->Mechanic.to_ullong();
495 if (curRespawnDelay < 0)
513 for (
UnitFlags flag : EnumUtils::Iterate<UnitFlags>())
518 for (
UnitFlags2 flag : EnumUtils::Iterate<UnitFlags2>())
523 for (
UnitFlags3 flag : EnumUtils::Iterate<UnitFlags3>())
555 for (
NPCFlags flag : EnumUtils::Iterate<NPCFlags>())
559 for (
NPCFlags2 flag : EnumUtils::Iterate<NPCFlags2>())
564 for (
Mechanics m : EnumUtils::Iterate<Mechanics>())
565 if (m && (mechanicImmuneMask & (
UI64LIT(1) << m)))
573 float distance = dist.value_or(10.0f);
586 stmt->
setFloat(7, distance * distance);
593 Field* fields = result->Fetch();
602 if (!creatureTemplate)
609 while (result->NextRow());
625 if (!spawnid && !creature)
647 const_cast<CreatureData*
>(data)->spawnPoint.Relocate(*player);
688 if (!creature || creature->
IsPet())
731 bool doNotDelete = nodel.has_value();
739 if (!creature || creature->
IsPet())
771 switch (type.index())
793 if (doNotDelete ==
false)
805 if (doNotDelete ==
false)
824 int32 phaseGroupId = atoi(args);
827 if (!creature || creature->
IsPet())
855 if (!creature || creature->
IsPet())
994 FollowMovementGenerator const* followMovement = dynamic_cast<FollowMovementGenerator const*>(a);
995 return followMovement && followMovement->GetTarget() == player;
1083 if (!creatureTarget || creatureTarget->
IsPet())
1149 if (!creatureTarget || creatureTarget->
IsPet())
1173 char const* name =
nullptr;
1177 name =
"Unknown item";
1185 char const* name =
nullptr;
1189 name =
"Unknown currency";
1197 std::string_view name;
1206 name =
"Unknown quest";
1213 for (NotNormalLootItemMap::value_type
const& pair : map)
1220 for (
auto it = pair.second->cbegin(); it != pair.second->cend(); ++it)
1222 LootItem const& item = items[it->LootListId];
1251 if (!item.is_looted)
1273 if (!item.is_looted && !item.freeforall && item.conditions.IsEmpty())
1301 if (!creatureTarget || creatureTarget->
IsPet())
1308 if (!creatureTarget->
isDead())
1315 Loot const* loot = creatureTarget->
m_loot.get();
1330 for (
auto const& [lootOwner, personalLoot] : creatureTarget->
m_personalLoot)
1367 if (linkedAggro ==
true)
1369 if (formationMovement ==
true)
1372 sFormationMgr->AddFormationMember(lowguid, followAngle, followDist, leaderGUID, groupAI);
1475 bool ignoreRespawn =
false;
1480 for (
auto const& variant : opts)
1482 switch (variant.index())
1485 groupId = variant.get<
uint32>();
1491 ignoreRespawn =
true;
1498 std::vector <WorldObject*> creatureList;
1516 bool deleteRespawnTimes =
false;
1520 for (
auto const& variant : opts)
1522 if (variant.holds_alternative<
uint32>())
1523 groupId = variant.get<
uint32>();
1525 deleteRespawnTimes =
true;
@ FLAG_MEMBERS_ASSIST_MEMBER
DB2Storage< CurrencyTypesEntry > sCurrencyTypesStore("CurrencyTypes.db2", &CurrencyTypesLoadInfo::Instance)
DB2Storage< CreatureDisplayInfoEntry > sCreatureDisplayInfoStore("CreatureDisplayInfo.db2", &CreatureDisplayInfoLoadInfo::Instance)
DB2Storage< FactionTemplateEntry > sFactionTemplateStore("FactionTemplate.db2", &FactionTemplateLoadInfo::Instance)
std::shared_ptr< PreparedResultSet > PreparedQueryResult
DatabaseWorkerPool< WorldDatabaseConnection > WorldDatabase
Accessor to the world database.
#define STRING_VIEW_FMT_ARG(str)
@ LANG_OBJECTINFO_STRINGIDS
@ LANG_COMMAND_NPC_SHOWLOOT_ENTRY
@ LANG_SPAWNGROUP_SPAWNCOUNT
@ LANG_CREATURE_NON_TAMEABLE
@ LANG_CREATURE_NOT_FOLLOW_YOU
@ LANG_CREATURE_FOLLOW_YOU_NOW
@ LANG_YOU_ALREADY_HAVE_PET
@ LANG_CREATURE_NOT_AI_ENABLED
@ LANG_CREATURE_MOVE_ENABLED
@ LANG_NPCINFO_DYNAMIC_FLAGS
@ LANG_COMMAND_NOT_DEAD_OR_NO_LOOT
@ LANG_NPCINFO_UNIT_FIELD_FLAGS
@ LANG_VALUE_SAVED_REJOIN
@ LANG_COMMAND_CREATUREMOVED
@ LANG_NPCINFO_REACTSTATE
@ LANG_COMMAND_NPC_SHOWLOOT_CURRENCY
@ LANG_COMMAND_DELCREATMESSAGE
@ LANG_CREATURE_NOT_FOLLOW_YOU_NOW
@ LANG_COMMAND_CREATUREATSAMEMAP
@ LANG_COMMAND_NEAR_NPC_MESSAGE
Old ones now free:
@ LANG_COMMAND_NEEDITEMSEND
@ LANG_NPCINFO_UNIT_FIELD_FLAGS_2
@ LANG_COMMAND_VENDORSELECTION
@ LANG_COMMAND_NPC_SHOWLOOT_SUBLABEL
@ LANG_CREATURE_MOVE_DISABLED
@ LANG_ITEM_ADDED_TO_LIST
@ LANG_NPCINFO_MOVEMENT_DATA
@ LANG_ITEM_DELETED_FROM_LIST
@ LANG_MOVE_TYPE_SET_NODEL
@ LANG_COMMAND_NPC_SHOWLOOT_TRACKING_QUEST
@ LANG_COMMAND_INVALID_PARAM
@ LANG_SPAWNINFO_GROUP_ID
@ LANG_COMMAND_WANDER_DISTANCE
@ LANG_COMMAND_CREATGUIDNOTFOUND
@ LANG_NPCINFO_UNIT_FIELD_FLAGS_3
@ LANG_NPCINFO_FLAGS_EXTRA
@ LANG_CREATURE_LIST_CHAT
@ LANG_SPAWNINFO_COMPATIBILITY_MODE
@ LANG_COMMAND_RAWPAWNTIMES
@ LANG_COMMAND_NPC_SHOWLOOT_LABEL
@ LANG_SPAWNGROUP_BADGROUP
@ LANG_COMMAND_NPC_SHOWLOOT_LABEL_2
@ LANG_COMMAND_NPC_SHOWLOOT_HEADER
@ LANG_NPCINFO_DUNGEON_ID
@ LANG_NPCINFO_MECHANIC_IMMUNE
@ LANG_COMMAND_NPC_SHOWLOOT_MONEY
std::unordered_map< ObjectGuid, std::unique_ptr< NotNormalLootItemList > > NotNormalLootItemMap
@ TEMPSUMMON_CORPSE_DESPAWN
@ TEMPSUMMON_CORPSE_TIMED_DESPAWN
std::optional< T > Optional
Optional helper class to wrap optional values within.
Role Based Access Control related classes definition.
uint32 constexpr ItemQualityColors[MAX_ITEM_QUALITY]
@ EMOTE_ONESHOT_EXCLAMATION
TC_COMMON_API bool StringEqualI(std::string_view str1, std::string_view str2)
NPCFlags
Non Player Character flags.
char const * DescribeReactState(ReactStates state)
std::string secsToTimeString(uint64 timeInSecs, TimeFormat timeFormat, bool hoursOnly)
@ WORLD_UPD_CREATURE_POSITION
@ WORLD_UPD_CREATURE_NPCFLAG
@ WORLD_SEL_CREATURE_NEAREST
@ WORLD_INS_CREATURE_FORMATION
@ WORLD_UPD_CREATURE_MOVEMENT_TYPE
@ WORLD_UPD_CREATURE_SPAWN_TIME_SECS
@ WORLD_UPD_CREATURE_WANDER_DISTANCE
@ WORLD_UPD_CREATURE_FACTION
ObjectGuid const & GetGUID() const
virtual LocaleConstant GetSessionDbLocaleIndex() const
WorldSession * GetSession()
virtual LocaleConstant GetSessionDbcLocale() const
Creature * GetCreatureFromPlayerMapByDbGuid(ObjectGuid::LowType lowguid)
bool HasLowerSecurity(Player *target, ObjectGuid guid, bool strong=false)
Creature * getSelectedCreature()
void SetSentErrorMessage(bool val)
void PSendSysMessage(char const *fmt, Args &&... args)
virtual void SendSysMessage(std::string_view str, bool escapeCharacters=false)
virtual void EnterEvadeMode(EvadeReason why=EvadeReason::Other)
ObjectGuid::LowType GetLeaderSpawnId() const
int8 GetOriginalEquipmentId() const
void Respawn(bool force=false)
void UpdateLevelDependantStats()
void setDeathState(DeathState s) override
static Creature * CreateCreatureFromDB(ObjectGuid::LowType spawnId, Map *map, bool addToMap=true, bool allowDuplicate=false)
bool GetRespawnCompatibilityMode() const
std::unique_ptr< Loot > m_loot
CreatureDifficulty const * GetCreatureDifficulty() const
std::unordered_map< ObjectGuid, std::unique_ptr< Loot > > m_personalLoot
static Creature * CreateCreature(uint32 entry, Map *map, Position const &pos, uint32 vehId=0)
void SetReactState(ReactStates st)
void SetRespawnDelay(uint32 delay)
void DespawnOrUnsummon(Milliseconds timeToDespawn=0s, Seconds forceRespawnTime=0s)
bool UpdateEntry(uint32 entry, CreatureData const *data=nullptr, bool updateLevel=true)
CreatureData const * GetCreatureData() const
ObjectGuid::LowType GetSpawnId() const
CreatureTemplate const * GetCreatureTemplate() const
uint32 GetRespawnDelay() const
static bool DeleteFromDB(ObjectGuid::LowType spawnId)
CreatureGroup * GetFormation()
std::string_view GetStringId(StringIdType type) const
void SetDisplayId(uint32 displayId, bool setNative=false) override
ReactStates GetReactState() const
void SetWanderDistance(float dist)
std::string GetScriptName() const
uint8 GetCurrentEquipmentId() const
CreatureMovementData const & GetMovementTemplate() const
time_t GetRespawnTimeEx() const
std::string const & GetAIName() const
void SetDefaultMovementType(MovementGeneratorType mgt)
void LoadPath(uint32 pathid)
static char const * ToTitle(Enum value)
Class used to access individual fields of database query result.
float GetFloat() const noexcept
uint64 GetUInt64() const noexcept
uint32 GetUInt32() const noexcept
uint16 GetUInt16() const noexcept
bool SpawnGroupSpawn(uint32 groupId, bool ignoreRespawn=false, bool force=false, std::vector< WorldObject * > *spawnedObjects=nullptr)
time_t GetCreatureRespawnTime(ObjectGuid::LowType spawnId) const
bool IsSpawnGroupActive(uint32 groupId) const
bool SpawnGroupDespawn(uint32 groupId, bool deleteRespawnTimes=false, size_t *count=nullptr)
void MoveFollow(Unit *target, float dist, Optional< ChaseAngle > angle={}, Optional< Milliseconds > duration={}, bool ignoreTargetWalk=false, MovementSlot slot=MOTION_SLOT_ACTIVE, Scripting::v2::ActionResultSetter< MovementStopReason > &&scriptResult={})
MovementGenerator * GetMovementGenerator(std::function< bool(MovementGenerator const *)> const &filter, MovementSlot slot=MOTION_SLOT_ACTIVE) const
void Remove(MovementGenerator *movement, MovementSlot slot=MOTION_SLOT_ACTIVE)
virtual MovementGeneratorType GetMovementGeneratorType() const =0
static ObjectGuid const Empty
std::string ToString() const
static std::string_view GetLocaleString(std::vector< std::string > const &data, LocaleConstant locale)
uint32 GetDynamicFlags() const
void SavePetToDB(PetSaveMode mode)
static void PrintToChat(ChatHandler *chat, WorldObject const *target)
static void AddPhase(WorldObject *object, uint32 phaseId, bool updateVisibility)
static void AddPhaseGroup(WorldObject *object, uint32 phaseGroupId, bool updateVisibility)
static void InheritPhaseShift(WorldObject *target, WorldObject const *source)
static void ResetPhaseShift(WorldObject *object)
bool CanTameExoticPets() const
void PetSpellInitialize()
void setUInt16(uint8 index, uint16 value)
void setUInt32(uint8 index, uint32 value)
void setFloat(uint8 index, float value)
void setUInt64(uint8 index, uint64 value)
void setUInt8(uint8 index, uint8 value)
std::string const & GetLogTitle() const
static CreatureImmunities const * GetCreatureImmunities(int32 creatureImmunitiesId)
virtual void SetData(uint32 id, uint32 value)
void ClearUnitState(uint32 f)
void SetMinion(Minion *minion, bool apply)
bool HasUnitFlag3(UnitFlags3 flags) const
void ReplaceAllNpcFlags2(NPCFlags2 flags)
virtual void Say(std::string_view text, Language language, WorldObject const *target=nullptr)
NPCFlags GetNpcFlags() const
void SetFaction(uint32 faction) override
virtual void Yell(std::string_view text, Language language, WorldObject const *target=nullptr)
Pet * CreateTamedPetFrom(Creature *creatureTarget, uint32 spell_id=0)
MotionMaster * GetMotionMaster()
bool HasUnitFlag(UnitFlags flags) const
NPCFlags2 GetNpcFlags2() const
void CleanupsBeforeDelete(bool finalCleanup=true) override
bool HasUnitFlag2(UnitFlags2 flags) const
float GetCombatReach() const override
TempSummon * ToTempSummon()
bool HasNpcFlag2(NPCFlags2 flags) const
void SetEmoteState(Emote emote)
uint32 GetDisplayId() const
uint32 GetNativeDisplayId() const
uint64 GetMaxHealth() const
uint32 GetFaction() const override
virtual void TextEmote(std::string_view text, WorldObject const *target=nullptr, bool isBossEmote=false)
uint32 GetCreateHealth() const
bool HasNpcFlag(NPCFlags flags) const
virtual float GetFollowAngle() const
UF::UpdateField< UF::UnitData, int32(WowCS::EntityFragment::CGObject), TYPEID_UNIT > m_unitData
void SetLevel(uint8 lvl, bool sendUpdate=true)
void HandleEmoteCommand(Emote emoteId, Player *target=nullptr, Trinity::IteratorPair< int32 const * > spellVisualKitIds={}, int32 sequenceVariation=0)
void ReplaceAllNpcFlags(NPCFlags flags)
virtual void Whisper(std::string_view text, Language language, Player *target, bool isBossWhisper=false)
ObjectGuid GetPetGUID() const
constexpr uint32 GetMapId() const
void GetClosePoint(float &x, float &y, float &z, float size, float distance2d=0, float relAngle=0) const
float GetTransOffsetX() 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)
TransportBase * GetTransport() const
uint32 GetInstanceId() const
float GetTransOffsetY() const
std::string const & GetName() const
float GetTransOffsetZ() const
float GetTransOffsetO() const
Player * GetPlayer() const
static bool HandleNpcSetWanderDistanceCommand(ChatHandler *handler, float option)
static bool HandleNpcAddCommand(ChatHandler *handler, CreatureEntry id)
static bool HandleNpcTameCommand(ChatHandler *handler)
static bool HandleNpcTextEmoteCommand(ChatHandler *handler, Tail text)
static void _IterateNotNormalLootMap(ChatHandler *handler, NotNormalLootItemMap const &map, std::vector< LootItem > const &items)
static bool HandleNpcDeleteCommand(ChatHandler *handler, Optional< CreatureSpawnId > spawnIdArg)
static bool HandleNpcSetModelCommand(ChatHandler *handler, uint32 displayId)
static bool HandleNpcYellCommand(ChatHandler *handler, Tail text)
static bool HandleNpcSetFlagCommand(ChatHandler *handler, NPCFlags npcFlags, NPCFlags2 npcFlags2)
static bool HandleNpcFollowCommand(ChatHandler *handler)
static bool HandleNpcSetSpawnTimeCommand(ChatHandler *handler, uint32 spawnTime)
static bool HandleNpcAddVendorItemCommand(ChatHandler *handler, ItemTemplate const *item, Optional< uint32 > mc, Optional< uint32 > it, Optional< uint32 > ec, Optional< std::string_view > bonusListIDs)
static bool HandleNpcPlayEmoteCommand(ChatHandler *handler, uint32 emote)
static bool HandleNpcSetMoveTypeCommand(ChatHandler *handler, Optional< CreatureSpawnId > lowGuid, Variant< EXACT_SEQUENCE("stay"), EXACT_SEQUENCE("random"), EXACT_SEQUENCE("way")> type, Optional< EXACT_SEQUENCE("nodel")> nodel)
static bool HandleNpcUnFollowCommand(ChatHandler *handler)
static bool HandleNpcSetLevelCommand(ChatHandler *handler, uint8 lvl)
static bool HandleNpcSetAllowMovementCommand(ChatHandler *handler)
static bool HandleNpcShowLootCommand(ChatHandler *handler, Optional< EXACT_SEQUENCE("all")> all)
static void _ShowLootContents(ChatHandler *handler, bool all, Loot const *loot)
static bool HandleNpcSetPhaseCommand(ChatHandler *handler, uint32 phaseID)
static bool HandleNpcAddFormationCommand(ChatHandler *handler, ObjectGuid::LowType leaderGUID, Optional< bool > linkedAggro, Optional< bool > formationMovement)
static bool HandleNpcSayCommand(ChatHandler *handler, Tail text)
static bool HandleNpcInfoCommand(ChatHandler *handler)
static bool HandleNpcAddWeaponCommand(ChatHandler *handler, uint32 SlotID, ItemTemplate const *tmpItem)
static bool HandleNpcNearCommand(ChatHandler *handler, Optional< float > dist)
static bool HandleNpcDeleteVendorItemCommand(ChatHandler *handler, ItemTemplate const *item)
static bool HandleNpcEvadeCommand(ChatHandler *handler, Optional< EvadeReason > why, Optional< EXACT_SEQUENCE("force")> force)
static bool HandleNpcSetDataCommand(ChatHandler *handler, uint32 data_1, uint32 data_2)
static void _ShowLootCurrencyEntry(ChatHandler *handler, uint32 currencyId, uint32 count, bool alternateString=false)
static void _ShowLootTrackingQuestCurrencyEntry(ChatHandler *handler, uint32 questId, bool alternateString=false)
static bool HandleNpcSetPhaseGroup(ChatHandler *handler, char const *args)
static void _ShowLootEntry(ChatHandler *handler, uint32 itemId, uint32 itemCount, bool alternateString=false)
static bool HandleNpcSetLinkCommand(ChatHandler *handler, ObjectGuid::LowType linkguid)
std::span< ChatCommandBuilder const > GetCommands() const override
static bool HandleNpcWhisperCommand(ChatHandler *handler, Variant< Hyperlink< player >, std::string_view > recv, Tail text)
static bool HandleNpcMoveCommand(ChatHandler *handler, Optional< CreatureSpawnId > spawnid)
static bool HandleNpcSetFactionIdCommand(ChatHandler *handler, uint32 factionId)
static bool HandleNpcSetEntryCommand(ChatHandler *handler, CreatureEntry newEntryNum)
static bool HandleNpcAddMoveCommand(ChatHandler *handler, CreatureSpawnId lowGuid)
static bool HandleNpcAddTempSpawnCommand(ChatHandler *handler, Optional< std::string_view > lootStr, CreatureEntry id)
bool HandleNpcSpawnGroup(ChatHandler *handler, std::vector< Variant< uint32, EXACT_SEQUENCE("force"), EXACT_SEQUENCE("ignorerespawn")> > const &opts)
void AddSC_npc_commandscript()
bool HandleNpcDespawnGroup(ChatHandler *handler, std::vector< Variant< uint32, EXACT_SEQUENCE("removerespawntime")> > const &opts)
@ CONFIG_MAX_PLAYER_LEVEL
TC_GAME_API Player * FindPlayerByName(std::string_view name)
TC_GAME_API Player * FindConnectedPlayer(ObjectGuid const &)
ChatCommandBuilder const [] ChatCommandTable
std::string ToString(Type &&val, Params &&... params)
TC_COMMON_API std::vector< std::string_view > Tokenize(std::string_view str, char sep, bool keepEmpty)
std::string GetTypeName()
std::string StringFormat(FormatString< Args... > fmt, Args &&... args) noexcept
Default TC string format function.
@ RBAC_PERM_COMMAND_NPC_SET_LEVEL
@ RBAC_PERM_COMMAND_NPC_PLAYEMOTE
@ RBAC_PERM_COMMAND_NPC_FOLLOW
@ RBAC_PERM_COMMAND_NPC_EVADE
@ RBAC_PERM_COMMAND_NPC_INFO
@ RBAC_PERM_COMMAND_NPC_TEXTEMOTE
@ RBAC_PERM_COMMAND_NPC_ADD_FORMATION
@ RBAC_PERM_COMMAND_NPC_ADD
@ RBAC_PERM_COMMAND_NPC_NEAR
@ RBAC_PERM_COMMAND_NPC_SET_SPAWNDIST
@ RBAC_PERM_COMMAND_NPC_SET_PHASE
@ RBAC_PERM_COMMAND_NPC_DELETE
@ RBAC_PERM_COMMAND_NPC_SET_ENTRY
@ RBAC_PERM_COMMAND_NPC_DESPAWNGROUP
@ RBAC_PERM_COMMAND_NPC_TAME
@ RBAC_PERM_COMMAND_NPC_MOVE
@ RBAC_PERM_COMMAND_NPC_ADD_ITEM
@ RBAC_PERM_COMMAND_NPC_SET_SPAWNTIME
@ RBAC_PERM_COMMAND_NPC_SET_FACTIONID
@ RBAC_PERM_COMMAND_NPC_SET_MOVETYPE
@ RBAC_PERM_COMMAND_NPC_SPAWNGROUP
@ RBAC_PERM_COMMAND_NPC_SET_DATA
@ RBAC_PERM_COMMAND_NPC_SHOWLOOT
@ RBAC_PERM_COMMAND_NPC_SET_ALLOWMOVE
@ RBAC_PERM_COMMAND_NPC_SET_MODEL
@ RBAC_PERM_COMMAND_NPC_ADD_MOVE
@ RBAC_PERM_COMMAND_NPC_SET_LINK
@ RBAC_PERM_COMMAND_NPC_WHISPER
@ RBAC_PERM_COMMAND_NPC_SET_FLAG
@ RBAC_PERM_COMMAND_NPC_YELL
@ RBAC_PERM_COMMAND_NPC_SAY
@ RBAC_PERM_COMMAND_NPC_ADD_TEMP
@ RBAC_PERM_COMMAND_NPC_DELETE_ITEM
std::string ToString() const
int32 CreatureImmunitiesId
bool IsTameable(bool canTameExotic, CreatureDifficulty const *creatureDifficulty) const
uint32 GetQuality() const
char const * GetName(LocaleConstant locale) const
char const * GetDefaultLocaleName() const
std::vector< LootItem > items
NotNormalLootItemMap const & GetPlayerFFAItems() const
constexpr float GetPositionX() const
constexpr float GetPositionY() const
float GetExactDist2d(const float x, const float y) const
float GetRelativeAngle(float x, float y) const
constexpr void GetPosition(float &x, float &y) const
constexpr void Relocate(float x, float y)
constexpr float GetOrientation() const
constexpr float GetPositionZ() const
std::vector< int32 > BonusListIDs