29#include "G3DPosition.hpp"
59#include <G3D/CoordinateFrame.h>
75 queryTemp.
Allow =
true;
96 if (std::vector<uint32>
const* items =
sObjectMgr->GetGameObjectQuestItemList(
entry))
97 for (
int32 item : *items)
105 return queryTemp.
Move();
110 return fabs(
x *
x +
y *
y +
z *
z +
w *
w - 1.0f) < 1e-5f;
115 G3D::Matrix3(G3D::Quat(
x,
y,
z,
w)).toEulerAnglesZYX(Z, Y, X);
120 G3D::Quat quat(G3D::Matrix3::fromEulerAnglesZYX(Z, Y, X));
198 newProgress = now % period;
201 int32 stopTargetTime = 0;
211 float stopTargetPathPct = float(stopTargetTime) / float(period);
212 float timeSinceStopProgressPct = float(now -
_stateChangeTime) / float(timeToStop);
218 stopTargetPathPct = 1.0f;
220 float pathPctBetweenStops = stopTargetPathPct - stopSourcePathPct;
221 if (pathPctBetweenStops < 0.0f)
222 pathPctBetweenStops += 1.0f;
224 progressPct = pathPctBetweenStops * timeSinceStopProgressPct + stopSourcePathPct;
225 if (progressPct > 1.0f)
226 progressPct = progressPct - 1.0f;
230 float pathPctBetweenStops = stopSourcePathPct - stopTargetPathPct;
231 if (pathPctBetweenStops < 0.0f)
232 pathPctBetweenStops += 1.0f;
234 progressPct = stopSourcePathPct - pathPctBetweenStops * timeSinceStopProgressPct;
235 if (progressPct < 0.0f)
239 newProgress =
uint32(
float(period) * progressPct) % period;
242 newProgress = stopTargetTime;
284 newState =
GOState(currentState - 1);
286 newState =
GOState(currentState - 1);
288 newState =
GOState(currentState + 1);
302 if (oldAnimation && newAnimation)
307 G3D::Vector3 prev(oldAnimation->
Pos.
X, oldAnimation->
Pos.
Y, oldAnimation->
Pos.
Z);
308 G3D::Vector3 next(newAnimation->
Pos.
X, newAnimation->
Pos.
Y, newAnimation->
Pos.
Z);
310 G3D::Vector3 dst = next;
315 dst = prev.lerp(next, animProgress);
318 dst = dst * pathRotation;
326 if (oldRotation && newRotation)
328 G3D::Quat prev(oldRotation->
Rot[0], oldRotation->
Rot[1], oldRotation->
Rot[2], oldRotation->
Rot[3]);
329 G3D::Quat next(newRotation->
Rot[0], newRotation->
Rot[1], newRotation->
Rot[2], newRotation->
Rot[3]);
331 G3D::Quat rotation = next;
337 rotation = prev.slerp(next, animProgress);
360 int32 stopPathProgress = 0;
388 int32 newToOldStateDelta = newState - oldState;
389 if (newToOldStateDelta < 0)
390 newToOldStateDelta += pauseTimesCount + 1;
392 int32 oldToNewStateDelta = oldState - newState;
393 if (oldToNewStateDelta < 0)
394 oldToNewStateDelta += pauseTimesCount + 1;
401 if (oldToNewStateDelta < newToOldStateDelta && !isAtStartOfPath)
417 passenger->m_movementInfo.transport.pos.GetPosition(x, y, z, o);
462 plr->SetFallInformation(0, plr->GetPositionZ());
506 transport->SetAutoCycleBetweenStopFrames(
_on);
540 zoneScript->OnFlagStateChange(&
_owner, oldState,
_state, player);
636 _value = RoundToInterval<float>(value, 0.0f, 100.0f);
642 std::vector<Player*> targetList;
647 if (pointsGained == 0)
653 if (oldRoundedValue == roundedValue)
659 if (oldControllingTeam != newControllingTeam)
687 for (
Player* player : targetList)
703 for (
Player* player : targetList)
705 if (!player->IsOutdoorPvPActive())
719 if (
static_cast<uint32>(std::abs(delta)) < minSuperiority)
722 float slope = (
static_cast<float>(minTime) - maxTime) / (maxSuperiority - minSuperiority);
723 float intercept = maxTime - slope * minSuperiority;
724 float timeNeeded = slope * std::abs(delta) + intercept;
725 float percentageIncrease = 100.0f / timeNeeded;
728 percentageIncrease *= -1;
730 return percentageIncrease;
737 std::vector<Player*> enteringPlayers;
739 for (
Player* unit : newTargetList)
741 if (exitPlayers.erase(unit->GetGUID()) == 0)
742 enteringPlayers.push_back(unit);
747 for (
Player* player : enteringPlayers)
754 for (
ObjectGuid const& exitPlayerGuid : exitPlayers)
806 uint32 value = controlZone->GetStartingValue();
810 controlZone->SetValue(value);
816 m_model(nullptr), m_goValue(), m_AI(nullptr), m_respawnCompatibilityMode(false), _animKitId(0), _worldEffectID(0)
893 owner->RemoveGameObject(
this,
false);
899 TC_LOG_DEBUG(
"misc",
"Removed GameObject ({} Entry: {} SpellId: {} LinkedGO: {}) that just lost any reference to the owner ({}) GO list",
921 trans->SetDelayedAddModelToMap();
946 linkedTrap->DespawnOrUnsummon();
992 TC_LOG_ERROR(
"sql.sql",
"Gameobject (Spawn id: {} Entry: {}) not created: gameobject type GAMEOBJECT_TYPE_MAP_OBJ_TRANSPORT cannot be manually created.",
GetSpawnId(), entry);
1012 TC_LOG_ERROR(
"sql.sql",
"Gameobject ({} Spawn id: {} Entry: {}) not created: non-existing GO type '{}' in `gameobject_template`. It will crash client if created.", guid.
ToString(),
GetSpawnId(), entry, goInfo->
type);
1021 if (gameObjectAddon)
1062 switch (goInfo->
type)
1082 m_goTypeImpl = std::make_unique<GameObjectType::Transport>(*
this);
1110 m_goTypeImpl = std::make_unique<GameObjectType::ControlZone>(*
this);
1114 m_goTypeImpl = std::make_unique<GameObjectType::NewFlag>(*
this);
1140 if (gameObjectAddon)
1202 if (!go->
Create(entry, map, pos, rotation, animProgress, goState, artKit,
false, 0))
1230 TC_LOG_ERROR(
"misc",
"Could not initialize GameObjectAI");
1257 bool needsStateUpdate = itr->second.State !=
GetGoState();
1258 bool despawned = itr->second.Despawned;
1268 else if (needsStateUpdate)
1299 if (owner->IsInCombat())
1345 if (linkedRespawntime)
1348 if (targetGuid == dbtableHighGuid)
1437 Unit* target =
nullptr;
1449 Player* player =
nullptr;
1464 if (hordeCapturing || allianceCapturing)
1587 linkedTrap->DespawnOrUnsummon();
1599 owner->CastSpell(owner, spellId,
false);
1795 areaId = areaEntry->ParentAreaID;
1818 areaId = areaEntry->ParentAreaID;
1834 TC_LOG_ERROR(
"misc",
"GameObject::SaveToDB failed, cannot get gameobject data!");
1840 if (transport->GetMapIdForSpawning() >= 0)
1841 mapId = transport->GetMapIdForSpawning();
1883 trans->Append(stmt);
1889 stmt->
setString(index++, [&data]() -> std::string
1894 std::ostringstream os;
1896 os <<
int32(*itr++);
1899 os <<
',' <<
int32(*itr);
1916 trans->Append(stmt);
1926 TC_LOG_ERROR(
"sql.sql",
"Gameobject (GUID: {}) not found in table `gameobject`, can't load. ", spawnId);
1972 TC_LOG_WARN(
"sql.sql",
"GameObject {} (SpawnID {}) is not spawned by default, but tries to use a non-hack spawn system. This will not work. Defaulting to compatibility mode.", entry, spawnId);
1985 if (addToMap && !
GetMap()->AddToMap(
this))
2000 [spawnId, charTrans](
Map* map) ->
void
2003 std::vector<GameObject*> toUnload;
2004 for (auto const& pair : Trinity::Containers::MapEqualRange(map->GetGameObjectBySpawnIdStore(), spawnId))
2005 toUnload.push_back(pair.second);
2006 for (GameObject* obj : toUnload)
2007 map->AddObjectToRemoveList(obj);
2008 map->RemoveRespawnTime(SPAWN_TYPE_GAMEOBJECT, spawnId, charTrans);
2022 trans->Append(stmt);
2027 trans->Append(stmt);
2031 trans->Append(stmt);
2036 trans->Append(stmt);
2041 trans->Append(stmt);
2046 trans->Append(stmt);
2051 trans->Append(stmt);
2055 trans->Append(stmt);
2129 if (
GetGOInfo()->GetServerOnly() && !allowServersideObjects)
2136 return m_goTypeImpl->IsNeverVisibleFor(seer, allowServersideObjects);
2178 if (state->Despawned)
2187 return owner->GetLevelForTarget(target);
2193 return uint8(std::clamp<int16>(player->GetLevel(), userLevels->MinLevel, userLevels->MaxLevel));
2195 if (
Unit const* targetUnit = target->
ToUnit())
2196 return targetUnit->GetLevel();
2259 return bg->CanActivateGO(
GetEntry(), bg->GetPlayerTeam(target->
GetGUID()));
2294 trapGO->CastSpell(target, trapSpell->
Id);
2323 if (!time_to_restore)
2334 Unit* unitCaster = spellCaster ? spellCaster->
ToUnit() :
nullptr;
2339 TC_LOG_FATAL(
"spell",
"Spell {} has action type NONE in effect {}", spellId, effectIndex);
2406 if (templateAddon !=
nullptr)
2407 artKitValue = templateAddon->
ArtKits[artKitIndex];
2409 if (artKitValue == 0)
2410 TC_LOG_ERROR(
"sql.sql",
"GameObject {} hit by spell {} needs `artkit{}` in `gameobject_template_addon`",
GetEntry(), spellId, artKitIndex);
2430 TC_LOG_ERROR(
"spell",
"Spell {} targeted non-transport gameobject for transport only action \"Go to Floor\" {} in effect {}", spellId,
int32(action), effectIndex);
2466 TC_LOG_ERROR(
"spell",
"Spell {} has unhandled action {} in effect {}", spellId,
int32(action), effectIndex);
2472 m_goTypeImpl->ActivateObject(action, param, spellCaster, spellId, effectIndex);
2492 data =
sObjectMgr->GetGameObjectData(lowguid);
2514 Unit* spellCaster = user;
2516 bool triggered =
false;
2526 playerUser->PlayerTalkClass->ClearMenus();
2527 if (
AI()->OnGossipHello(playerUser))
2565 if (!bg->CanActivateGO(
GetEntry(), bg->GetPlayerTeam(user->
GetGUID())))
2601 std::vector<Player*> tappers;
2604 tappers.push_back(tapper);
2606 if (tappers.empty())
2607 tappers.push_back(player);
2692 bool found_free_slot =
false;
2698 float x_i =
GetPositionX() + relativeDistance * std::cos(orthogonalOrientation);
2699 float y_i =
GetPositionY() + relativeDistance * std::sin(orthogonalOrientation);
2701 if (!sittingUnit.IsEmpty())
2705 if (chairUser->IsSitState() && chairUser->GetStandState() !=
UNIT_STAND_STATE_SIT && chairUser->GetExactDist2d(x_i, y_i) < 0.1f)
2708 sittingUnit.Clear();
2711 sittingUnit.Clear();
2714 found_free_slot =
true;
2719 if (thisDistance <= lowestDist)
2721 nearest_slot = slot;
2722 lowestDist = thisDistance;
2728 if (found_free_slot)
2733 itr->second = user->
GetGUID();
2785 for (
GroupReference const* itr = group->GetFirstMember(); itr !=
nullptr; itr = itr->
next())
2786 if (
Player* member = itr->GetSource())
2787 if (member->IsAtGroupRewardDistance(
this))
2821 spellCaster =
nullptr;
2839 if (info->
camera.eventID)
2868 TC_LOG_ERROR(
"entities.gameobject",
"Gameobject '{}' ({}) spawned in unknown area (x: {} y: {} z: {} map: {})",
2875 if (!areaContentTuning)
2881 int32 areaFishingLevel =
sObjectMgr->GetFishingBaseSkillLevel(areaEntry);
2888 if (playerFishingLevel < areaFishingLevel)
2890 chance =
int32(pow((
double)playerFishingLevel / areaFishingLevel, 2) * 100);
2895 TC_LOG_DEBUG(
"misc",
"Fishing check (skill {} level: {} area skill level: {} chance {} roll: {}", playerFishingSkill, playerFishingLevel, areaFishingLevel, chance, roll);
2902 if (chance >= roll || fishingPool)
2912 fishingPool->
Use(player);
2953 Player* m_ritualOwner =
nullptr;
2958 if (!m_ritualOwner && !owner)
2961 m_ritualOwner = player;
2978 spellCaster = owner;
2985 spellCaster = player;
3002 spellCaster = m_ritualOwner;
3006 if (spellId == 62330)
3078 if (!targetPlayer || targetPlayer == player || !targetPlayer->
IsInSameRaidWith(player))
3083 if (player->
GetLevel() < userLevels->MaxLevel)
3087 if (targetPlayer->
GetLevel() < targetLevels->MaxLevel)
3090 if (info->
entry == 194097)
3174 switch (info->
entry)
3238 spellCaster =
nullptr;
3265 bool defenderInteract = !owner->IsFriendlyTo(user);
3266 if (defenderInteract && owner->GetGOInfo()->newflag.ReturnonDefenderInteract)
3310 if (!
sConditionMgr->IsPlayerMeetingCondition(player, playerCondition))
3404 player->
GiveXP(xp,
nullptr);
3429 TC_LOG_ERROR(
"misc",
"GameObject::Use(): unit ({}, name: {}) tries to use object ({}, name: {}) of unknown type ({})",
3439 if (!player->GetQuestRewardStatus(
m_vignette->Data->RewardQuestID))
3442 if (
m_vignette->Data->VisibleTrackingQuestID)
3443 player->SetRewardedQuest(
m_vignette->Data->VisibleTrackingQuestID);
3448 if (
GetGOInfo()->ClearObjectVignetteonOpening())
3460 TC_LOG_DEBUG(
"outdoorpvp",
"WORLD: {} non-dbc spell was handled by OutdoorPvP", spellId);
3468 spellCaster->
CastSpell(user, spellId, triggered);
3499 float dist = std::sqrt(dx*dx + dy*dy);
3502 if (G3D::fuzzyEq(dist, 0.0f))
3505 float sinB = dx / dist;
3506 float cosB = dy / dist;
3507 dx = dist * (cosA * cosB + sinA * sinB);
3508 dy = dist * (cosA * sinB - sinA * cosB);
3547 if (cl->Name.size() > locale && !cl->Name[locale].empty())
3548 return cl->Name[locale];
3555 static const int32 PACK_YZ = 1 << 20;
3556 static const int32 PACK_X = PACK_YZ << 1;
3558 static const int32 PACK_YZ_MASK = (PACK_YZ << 1) - 1;
3559 static const int32 PACK_X_MASK = (PACK_X << 1) - 1;
3570 G3D::Quat rotation(qx, qy, qz, qw);
3586 G3D::Quat quat(G3D::Matrix3::fromEulerAnglesZYX(z_rot, y_rot, x_rot));
3597 G3D::Quat worldRotationQuat(worldRotation.
x, worldRotation.
y, worldRotation.
z, worldRotation.
w);
3598 G3D::Quat localRotationQuat(localRotation.
x, localRotation.
y, localRotation.
z, localRotation.
w);
3600 G3D::Quat resultRotation = localRotationQuat * worldRotationQuat;
3602 return QuaternionData(resultRotation.x, resultRotation.y, resultRotation.z, resultRotation.w);
3604 return localRotation;
3633 packet.
Owner = player->GetGUID();
3635 player->SendDirectMessage(packet.
Write());
3684 if (modelData->State1Wmo)
3685 modelId = modelData->State1Wmo;
3707 bg->DestroyGate(player,
this);
3714 if (modelData->State2Wmo)
3715 modelId = modelData->State2Wmo;
3734 if (modelData->State3Wmo)
3735 modelId = modelData->State3Wmo;
3769 bool collision =
false;
3772 collision = !collision;
3781 std::unique_ptr<Loot> loot(std::move(
m_loot));
3782 std::unordered_map<ObjectGuid, std::unique_ptr<Loot>> personalLoot(std::move(
m_personalLoot));
3785 personalLoot.clear();
3796 if (!loot->isLooted())
3854 bool collision =
false;
3856 collision = !collision;
3867 return *state->State;
3876 perPlayerState.
State = state;
3880 setStateLocal.
State = state;
3900 return modelData->State0NameSet;
3902 return modelData->State1NameSet;
3904 return modelData->State2NameSet;
3906 return modelData->State3NameSet;
3953 if (loot->isLooted())
3955 if (!loot->HasAllowedLooter(
GetGUID()) || (!loot->hasItemForAll() && !loot->hasItemFor(player)))
3984 std::size_t sizePos = data->
wpos();
3995 std::size_t sizePos = data->
wpos();
4012 if (requestedObjectMask.IsAnySet())
4015 if (requestedGameObjectMask.IsAnySet())
4019 std::size_t sizePos = buffer.
wpos();
4024 m_objectData->WriteUpdate(buffer, requestedObjectMask,
true,
this, target);
4027 m_gameObjectData->WriteUpdate(buffer, requestedGameObjectMask,
true,
this, target);
4054 return transport->GetPauseTimes();
4068 dynamicFlags &= 0xFFFF;
4069 dynamicFlags |=
uint32(progress * 65535.0f) << 16;
4102 return static_cast<Transport const*
>(
this);
4126 if (
GetGOInfo()->GetInteractRadiusOverride())
4127 return float(
GetGOInfo()->GetInteractRadiusOverride()) / 100.0f;
4194 activateAnimKit.
Maintain = !oneshot;
4230 if (ai->OnCapturePointAssaulted(player))
4314 uint32 spellVisualId = 0;
4342 if (customAnim != 0)
4358 bg->SendPacketToAll(packet.
Write());
4424 return controlZone->GetInsidePlayers();
4444 m_perPlayerState = std::make_unique<std::unordered_map<ObjectGuid, PerPlayerState>>();
4455 bool IsSpawned()
const override {
return _owner->isSpawned(); }
4458 bool IsInPhase(
PhaseShift const& phaseShift)
const override {
return _owner->GetPhaseShift().CanSee(phaseShift); }
4459 G3D::Vector3
GetPosition()
const override {
return G3D::Vector3(_owner->GetPositionX(), _owner->GetPositionY(), _owner->GetPositionZ()); }
4460 G3D::Quat
GetRotation()
const override {
return G3D::Quat(_owner->GetLocalRotation().x, _owner->GetLocalRotation().y, _owner->GetLocalRotation().z, _owner->GetLocalRotation().w); }
4461 float GetScale()
const override {
return _owner->GetObjectScale(); }
4489 std::stringstream sstr;
4517 float minX = displayInfo->GeoBoxMin.X * scale - radius;
4518 float minY = displayInfo->GeoBoxMin.Y * scale - radius;
4519 float minZ = displayInfo->GeoBoxMin.Z * scale - radius;
4520 float maxX = displayInfo->GeoBoxMax.X * scale + radius;
4521 float maxY = displayInfo->GeoBoxMax.Y * scale + radius;
4522 float maxZ = displayInfo->GeoBoxMax.Z * scale + radius;
4525 G3D::Quat worldRotationQuat(worldRotation.
x, worldRotation.
y, worldRotation.
z, worldRotation.
w);
4528 .toWorldSpace(G3D::Box { { minX, minY, minZ }, { maxX, maxY, maxZ } })
4567 for (
auto&& effect : spell->GetEffects())
4569 if (effect.CalcValue(player) >=
int32(lock->
Skill[i]))
constexpr uint32 ITEM_ID_HEART_OF_AZEROTH
DB2Storage< GameObjectDisplayInfoEntry > sGameObjectDisplayInfoStore("GameObjectDisplayInfo.db2", &GameobjectDisplayInfoLoadInfo::Instance)
DB2Storage< AnimKitEntry > sAnimKitStore("AnimKit.db2", &AnimKitLoadInfo::Instance)
DB2Storage< DestructibleModelDataEntry > sDestructibleModelDataStore("DestructibleModelData.db2", &DestructibleModelDataLoadInfo::Instance)
DB2Storage< LockEntry > sLockStore("Lock.db2", &LockLoadInfo::Instance)
DB2Storage< VignetteEntry > sVignetteStore("Vignette.db2", &VignetteLoadInfo::Instance)
DB2Storage< QuestXPEntry > sQuestXPStore("QuestXP.db2", &QuestXpLoadInfo::Instance)
DB2Storage< PlayerConditionEntry > sPlayerConditionStore("PlayerCondition.db2", &PlayerConditionLoadInfo::Instance)
DB2Storage< AreaTableEntry > sAreaTableStore("AreaTable.db2", &AreaTableLoadInfo::Instance)
SQLTransaction< WorldDatabaseConnection > WorldDatabaseTransaction
SQLTransaction< CharacterDatabaseConnection > CharacterDatabaseTransaction
DatabaseWorkerPool< CharacterDatabaseConnection > CharacterDatabase
Accessor to the character database.
DatabaseWorkerPool< WorldDatabaseConnection > WorldDatabase
Accessor to the world database.
std::chrono::seconds Seconds
Seconds shorthand typedef.
std::chrono::milliseconds Milliseconds
Milliseconds shorthand typedef.
#define FISHING_BOBBER_READY_TIME
#define TC_LOG_WARN(filterType__,...)
#define TC_LOG_DEBUG(filterType__,...)
#define TC_LOG_ERROR(filterType__,...)
#define TC_LOG_FATAL(filterType__,...)
LootStore LootTemplates_Gameobject("gameobject_loot_template", "gameobject entry", true)
std::unordered_map< ObjectGuid, std::unique_ptr< Loot > > GenerateDungeonEncounterPersonalLoot(uint32 dungeonEncounterId, uint32 lootId, LootStore const &store, LootType type, WorldObject const *lootOwner, uint32 minMoney, uint32 maxMoney, uint16 lootMode, MapDifficultyEntry const *mapDifficulty, std::vector< Player * > const &tappers)
LootStore LootTemplates_Fishing("fishing_loot_template", "area id", true)
#define DEFAULT_VISIBILITY_DISTANCE
@ TEMPSUMMON_MANUAL_DESPAWN
#define INTERACTION_DISTANCE
std::unordered_set< ObjectGuid > GuidUnorderedSet
std::optional< T > Optional
Optional helper class to wrap optional values within.
@ TELE_TO_NOT_LEAVE_COMBAT
@ TELE_TO_NOT_UNSUMMON_PET
@ TELE_TO_NOT_LEAVE_TRANSPORT
@ QUEST_STATUS_INCOMPLETE
int32 irand(int32 min, int32 max)
uint32 urand(uint32 min, uint32 max)
#define MAX_GO_STATE_TRANSPORT_STOP_FRAMES
@ GAMEOBJECT_TYPE_GUILD_BANK
@ GAMEOBJECT_TYPE_MINI_GAME
@ GAMEOBJECT_TYPE_CAPTURE_POINT
@ GAMEOBJECT_TYPE_MAP_OBJECT
@ GAMEOBJECT_TYPE_SPELL_FOCUS
@ GAMEOBJECT_TYPE_TRANSPORT
@ GAMEOBJECT_TYPE_MEETINGSTONE
@ GAMEOBJECT_TYPE_GENERIC
@ GAMEOBJECT_TYPE_FISHINGHOLE
@ GAMEOBJECT_TYPE_GARRISON_PLOT
@ GAMEOBJECT_TYPE_CONTROL_ZONE
@ GAMEOBJECT_TYPE_NEW_FLAG_DROP
@ GAMEOBJECT_TYPE_FLAGDROP
@ GAMEOBJECT_TYPE_QUESTGIVER
@ GAMEOBJECT_TYPE_MAILBOX
@ GAMEOBJECT_TYPE_SPELLCASTER
@ GAMEOBJECT_TYPE_FLAGSTAND
@ GAMEOBJECT_TYPE_DUNGEON_DIFFICULTY
@ GAMEOBJECT_TYPE_AREADAMAGE
@ GAMEOBJECT_TYPE_ITEM_FORGE
@ GAMEOBJECT_TYPE_PHASEABLE_MO
@ GAMEOBJECT_TYPE_NEW_FLAG
@ GAMEOBJECT_TYPE_FISHINGNODE
@ GAMEOBJECT_TYPE_BARBER_CHAIR
@ GAMEOBJECT_TYPE_MAP_OBJ_TRANSPORT
@ GAMEOBJECT_TYPE_GARRISON_BUILDING
@ GAMEOBJECT_TYPE_UI_LINK
@ GAMEOBJECT_TYPE_GATHERING_NODE
@ GAMEOBJECT_TYPE_DESTRUCTIBLE_BUILDING
#define MAX_GAMEOBJECT_TYPE
@ ERR_MUST_EQUIP_ARTIFACT
@ GO_DYNFLAG_LO_INVERTED_MOVEMENT
@ GO_DYNFLAG_LO_NO_INTERACT
#define MAX_GAMEOBJECT_DATA
GameObjectDestructibleState
@ GO_DESTRUCTIBLE_DESTROYED
@ GO_DESTRUCTIBLE_REBUILDING
@ GO_DESTRUCTIBLE_DAMAGED
@ CHAT_MSG_BG_SYSTEM_ALLIANCE
@ CHAT_MSG_BG_SYSTEM_HORDE
@ GO_STATE_TRANSPORT_STOPPED
@ GO_STATE_TRANSPORT_ACTIVE
@ SPAWNGROUP_FLAG_COMPATIBILITY_MODE
@ LINKED_RESPAWN_CREATURE_TO_GO
@ LINKED_RESPAWN_GO_TO_GO
@ LINKED_RESPAWN_GO_TO_CREATURE
@ SPELL_AURA_MOD_INVISIBILITY
@ TRIGGERED_FULL_MASK
Used when doing CastSpell with triggered == true.
@ UNIT_STAND_STATE_SIT_LOW_CHAIR
@ CURRENT_CHANNELED_SPELL
#define ARTIFACTS_ALL_WEAPONS_GENERAL_WEAPON_EQUIPPED_PASSIVE
constexpr std::underlying_type< E >::type AsUnderlyingType(E enumValue)
@ WORLD_DEL_EVENT_GAMEOBJECT
@ WORLD_DEL_SPAWNGROUP_MEMBER
@ WORLD_DEL_LINKED_RESPAWN
@ WORLD_DEL_GAMEOBJECT_ADDON
@ WORLD_DEL_LINKED_RESPAWN_MASTER
ObjectGuid GetCastItemGUID() const
virtual void EventPlayerClickedOnFlag(Player *, GameObject *)
BattlegroundTypeId GetTypeID() const
void SendBroadcastText(uint32 id, ChatMsg msgType, WorldObject const *target=nullptr)
void put(std::size_t pos, T value)
static bool IsPlayerMeetingCondition(Player const *player, PlayerConditionEntry const *condition)
static ContentTuningEntry const * GetContentTuningForArea(AreaTableEntry const *areaEntry)
void AddFlag(FLAG_TYPE flag)
void AddValue(FLAG_TYPE flag, T_VALUES value)
virtual void Damaged(WorldObject *, uint32)
virtual void OnStateChanged(uint32)
virtual void InitializeAI()
virtual void UpdateAI(uint32)
virtual void Destroyed(WorldObject *, uint32)
virtual void OnLootStateChanged(uint32, Unit *)
float GetScale() const override
uint32 GetDisplayId() const override
bool IsInPhase(PhaseShift const &phaseShift) const override
uint8 GetNameSetId() const override
G3D::Vector3 GetPosition() const override
virtual ~GameObjectModelOwnerImpl()=default
G3D::Quat GetRotation() const override
GameObjectModelOwnerImpl(GameObject *owner)
bool IsSpawned() const override
void DebugVisualizeCorner(G3D::Vector3 const &corner) const override
void enableCollision(bool enable)
static GameObjectModel * Create(std::unique_ptr< GameObjectModelOwnerBase > modelOwner, std::string const &dataPath)
virtual void Execute(GameObjectTypeBase &type) const =0
void SetValue(float value)
uint32 GetStartingValue() const
TeamId GetControllingTeam() const
Milliseconds _heartbeatRate
void Update(uint32 diff) override
ControlZone(GameObject &owner)
GuidUnorderedSet const * GetInsidePlayers() const
void SearchTargets(std::vector< Player * > &targetList)
float GetMaxHordeValue() const
float CalculatePointsPerSecond(std::vector< Player * > const &targetList)
GuidUnorderedSet _insidePlayers
TimeTracker _heartbeatTracker
void ActivateObject(GameObjectActions action, int32, WorldObject *, uint32, int32) override
void HandleUnitEnterExit(std::vector< Player * > const &newTargetList)
float GetMinAllianceValue() const
void TriggerEvent(uint32 eventId) const
time_t GetTakenFromBaseTime() const
ObjectGuid const & GetCarrierGUID() const
bool IsNeverVisibleFor(WorldObject const *seer, bool allowServersideObjects) const override
void Update(uint32 diff) override
FlagState GetState() const
NewFlag(GameObject &owner)
time_t _takenFromBaseTime
void SetState(FlagState newState, Player *player)
SetControlZoneValue(Optional< uint32 > value={ })
void Execute(GameObjectTypeBase &type) const override
Optional< uint32 > _value
SetNewFlagState(FlagState state, Player *player)
void Execute(GameObjectTypeBase &type) const override
void Execute(GameObjectTypeBase &type) const override
SetTransportAutoCycleBetweenStopFrames(bool on)
uint32 _stateChangeProgress
bool _autoCycleBetweenStopFrames
TransportBase * RemovePassenger(WorldObject *passenger) override
std::unordered_set< WorldObject * > _passengers
float GetTransportOrientation() const override
std::vector< uint32 > _stopFrames
TimeTracker _positionUpdateTimer
void OnStateChanged(GOState oldState, GOState newState) override
void CalculatePassengerOffset(float &x, float &y, float &z, float *o) const override
This method transforms supplied global coordinates into local offsets.
Transport(GameObject &owner)
TransportAnimation const * _animationInfo
uint32 GetTransportPeriod() const
void OnRelocated() override
void CalculatePassengerPosition(float &x, float &y, float &z, float *o) const override
This method transforms supplied transport offsets into global coordinates.
void Update(uint32 diff) override
void SetAutoCycleBetweenStopFrames(bool on)
int32 GetMapIdForSpawning() const override
std::vector< uint32 > const * GetPauseTimes() const
void AddPassenger(WorldObject *passenger) override
static constexpr Milliseconds PositionUpdateInterval
ObjectGuid GetTransportGUID() const override
void UpdatePassengerPositions()
void SetLocalRotationAngles(float z_rot, float y_rot, float x_rot)
void UpdateCapturePoint()
void BuildValuesUpdateForPlayerWithMask(UpdateData *data, UF::ObjectData::Mask const &requestedObjectMask, UF::GameObjectData::Mask const &requestedGameObjectMask, Player const *target) const
bool HasStringId(std::string_view id) const
void GetRespawnPosition(float &x, float &y, float &z, float *ori=nullptr) const
void SetGoState(GOState state)
ObjectGuid GetOwnerGUID() const override
bool IsWithinDistInMap(Player const *player) const
void UseDoorOrButton(uint32 time_to_restore=0, bool alternative=false, Unit *user=nullptr)
GameObjectValue m_goValue
GOState GetGoStateFor(ObjectGuid const &viewer) const
GameObjectTemplate const * GetGOInfo() const
void UpdateDynamicFlagsForNearbyPlayers()
GOState GetGoState() const
bool MeetsInteractCondition(Player const *user) const
bool IsInvisibleDueToDespawn(WorldObject const *seer) const override
std::string GetDebugInfo() const override
std::unordered_map< ObjectGuid, PerPlayerState > & GetOrCreatePerPlayerStates()
bool LoadFromDB(ObjectGuid::LowType spawnId, Map *map, bool addToMap, bool=true)
void RemoveFlag(GameObjectFlags flags)
uint32 GetGoArtKit() const
bool hasInvolvedQuest(uint32 quest_id) const override
ObjectGuid const & GetFlagCarrierGUID() const
bool HasFlag(GameObjectFlags flags) const
void SetSpellVisualId(int32 spellVisualId, ObjectGuid activatorGuid=ObjectGuid::Empty)
GameObjectData const * m_goData
LootState getLootState() const
uint32 GetSpellId() const
uint8 GetGoAnimProgress() const
Position m_stationaryPosition
bool IsFullyLooted() const
QuaternionData const & GetLocalRotation() const
uint32 GetUniqueUseCount() const
void ReplaceAllFlags(GameObjectFlags flags)
void RemoveFromWorld() override
void EnableCollision(bool enable)
std::unordered_map< ObjectGuid, std::unique_ptr< Loot > > m_personalLoot
void SetGoAnimProgress(uint8 animprogress)
ObjectGuid m_lootStateUnitGUID
static GameObject * CreateGameObject(uint32 entry, Map *map, Position const &pos, QuaternionData const &rotation, uint32 animProgress, GOState goState, uint32 artKit=0)
uint8 GetLevelForTarget(WorldObject const *target) const override
bool IsAtInteractDistance(Position const &pos, float radius) const
void SetOwnerGUID(ObjectGuid owner)
void SetVignette(uint32 vignetteId)
void DespawnOrUnsummon(Milliseconds delay=0ms, Seconds forceRespawnTime=0s)
void SetDestructibleState(GameObjectDestructibleState state, WorldObject *attackerOrHealer=nullptr, bool setHealth=false)
ChairSlotAndUser ChairListSlots
void HandleCustomTypeCommand(GameObjectTypeBase::CustomCommand const &command) const
void SetScriptStringId(std::string id)
time_t GetFlagTakenFromBaseTime() const
bool ActivateToQuest(Player const *target) const
void OnLootRelease(Player *looter)
void SetFlag(GameObjectFlags flags)
Loot * GetFishLootJunk(Player *lootOwner)
bool IsAlwaysVisibleFor(WorldObject const *seer) const override
void SetWorldEffectID(uint32 worldEffectID)
bool HasLootRecipient() const
void SetLootState(LootState s, Unit *unit=nullptr)
static GameObject * CreateGameObjectFromDB(ObjectGuid::LowType spawnId, Map *map, bool addToMap=true)
uint32 m_respawnDelayTime
SpellInfo const * GetSpellForLock(Player const *player) const
GameObjectAI * AI() const
GameObject * GetLinkedTrap()
GuidUnorderedSet const * GetInsidePlayers() const
std::unique_ptr< Vignettes::VignetteData > m_vignette
bool IsInRange(float x, float y, float z, float radius) const
void SetRespawnTime(int32 respawn)
void TriggeringLinkedGameObject(uint32 trapEntry, Unit *target)
void SetRespawnCompatibilityMode(bool mode=true)
GameobjectTypes GetGoType() const
void SendGameObjectDespawn()
void SetGoType(GameobjectTypes type)
Seconds m_despawnRespawnTime
QuaternionData m_localRotation
void SetLinkedTrap(GameObject *linkedTrap)
void SetLocalRotation(float qx, float qy, float qz, float qw)
std::string GetNameForLocaleIdx(LocaleConstant locale) const override
GameObjectData const * GetGameObjectData() const
bool m_respawnCompatibilityMode
GameObjectTemplateAddon const * m_goTemplateAddon
ObjectGuid::LowType GetSpawnId() const
void SaveRespawnTime(uint32 forceDelay=0)
float GetInteractionDistance() const
Loot * GetFishLoot(Player *lootOwner)
void SendCustomAnim(uint32 anim)
time_t GetRespawnTimeEx() const
bool hasQuest(uint32 quest_id) const override
FlagState GetFlagState() const
GuidUnorderedSet m_tapList
uint32 GetDisplayId() const
GameObjectModel * m_model
std::unique_ptr< Loot > m_loot
void SetLevel(uint32 level)
UF::UpdateField< UF::GameObjectData, 0, TYPEID_GAMEOBJECT > m_gameObjectData
uint32 GetScriptId() const
bool IsNeverVisibleFor(WorldObject const *seer, bool allowServersideObjects=false) const override
uint8 GetNameSetId() const
bool CanInteractWithCapturePoint(Player const *target) const
Optional< std::string > m_scriptStringId
void UpdateModelPosition()
void SetPathProgressForClient(float progress)
GameObjectTemplateAddon const * GetTemplateAddon() const
void ModifyHealth(int32 change, WorldObject *attackerOrHealer=nullptr, uint32 spellId=0)
void DespawnForPlayer(Player *seer, Seconds respawnTime)
GameObject * LookupFishingHoleAround(float range)
void SetDisplayId(uint32 displayid)
GameObjectTemplate const * m_goInfo
GuidUnorderedSet const & GetTapList() const
ObjectGuid::LowType m_spawnId
For new or temporary gameobjects is 0 for saved it is lowguid.
void ClearUpdateMask(bool remove) override
void ActivateObject(GameObjectActions action, int32 param, WorldObject *spellCaster=nullptr, uint32 spellId=0, int32 effectIndex=-1)
bool IsDynTransport() const
Position const & GetStationaryPosition() const
void SwitchDoorOrButton(bool activate, bool alternative=false)
void CleanupsBeforeDelete(bool finalCleanup=true) override
bool IsDestructibleBuilding() const
Loot * GetLootForPlayer(Player const *) const override
uint16 GetLootMode() const
TransportBase * ToTransportBase()
void SetGoStateFor(GOState state, Player const *viewer)
QuaternionData GetWorldRotation() const
void AssaultCapturePoint(Player *player)
void SetAnimKitId(uint16 animKitId, bool oneshot)
std::array< std::string_view, 3 > m_stringIds
static bool DeleteFromDB(ObjectGuid::LowType spawnId)
void BuildValuesCreate(ByteBuffer *data, Player const *target) const override
void UpdatePackedRotation()
Transport * ToTransport()
void SetGoArtKit(uint32 artkit)
void AddToWorld() override
bool Create(uint32 entry, Map *map, Position const &pos, QuaternionData const &rotation, uint32 animProgress, GOState goState, uint32 artKit, bool dynamic, ObjectGuid::LowType spawnid)
GameObjectDestructibleState GetDestructibleState() const
std::unique_ptr< std::unordered_map< ObjectGuid, PerPlayerState > > m_perPlayerState
void Update(uint32 p_time) override
bool IsLootAllowedFor(Player const *player) const
void AddUniqueUse(Player *player)
void BuildValuesUpdate(ByteBuffer *data, Player const *target) const override
std::string const & GetAIName() const
GameObjectOverride const * GetGameObjectOverride() const
void SetParentRotation(QuaternionData const &rotation)
std::unique_ptr< GameObjectTypeBase > m_goTypeImpl
ObjectGuid m_ritualOwnerGUID
void SetSpellId(uint32 id)
std::vector< uint32 > const * GetPauseTimes() const
void SetFaction(uint32 faction) override
bool HaveQuestLootForPlayer(uint32 loot_id, Player const *player) const
void GameObjectRelocation(GameObject *go, float x, float y, float z, float orientation, bool respawnRelocationOnFail=true)
void UpdateSpawnGroupConditions()
MapStoredObjectTypesContainer & GetObjectsStore()
void RemoveGameObjectModel(GameObjectModel const &model)
time_t GetLinkedRespawnTime(ObjectGuid guid) const
void RemoveRespawnTime(SpawnObjectType type, ObjectGuid::LowType spawnId, CharacterDatabaseTransaction dbTrans=nullptr, bool alwaysDeleteFromDB=false)
void ApplyDynamicModeRespawnScaling(WorldObject const *obj, ObjectGuid::LowType spawnId, uint32 &respawnDelay, uint32 mode) const
ObjectGuid::LowType GenerateLowGuid()
time_t GetGORespawnTime(ObjectGuid::LowType spawnId) const
void SaveRespawnInfoDB(RespawnInfo const &info, CharacterDatabaseTransaction dbTrans=nullptr)
void SaveRespawnTime(SpawnObjectType type, ObjectGuid::LowType spawnId, uint32 entry, time_t respawnTime, uint32 gridId, CharacterDatabaseTransaction dbTrans=nullptr, bool startup=false)
GameObjectBySpawnIdContainer & GetGameObjectBySpawnIdStore()
void InsertGameObjectModel(GameObjectModel const &model)
bool Instanceable() const
SpawnedPoolData & GetPoolData()
void Respawn(RespawnInfo *info, CharacterDatabaseTransaction dbTrans=nullptr)
static ObjectGuid const Empty
std::string ToString() const
static std::string_view GetLocaleString(std::vector< std::string > const &data, LocaleConstant locale)
void SetDynamicFlag(uint32 flag)
float GetObjectScale() const
static Unit * ToUnit(Object *o)
ObjectGuid const & GetGUID() const
UF::UpdateField< UF::ObjectData, 0, TYPEID_OBJECT > m_objectData
void AddToObjectUpdateIfNeeded()
bool HasDynamicFlag(uint32 flag) const
CreateObjectBits m_updateFlag
virtual void ClearUpdateMask(bool remove)
void SetUpdateFieldValue(UF::UpdateFieldSetter< T > setter, typename UF::UpdateFieldSetter< T >::value_type value)
void ReplaceAllDynamicFlags(uint32 flag)
uint32 GetDynamicFlags() const
UF::UpdateFieldHolder m_values
void RemoveDynamicFlag(uint32 flag)
void _Create(ObjectGuid const &guid)
ByteBuffer & PrepareValuesUpdateBuffer(UpdateData *data) const
void DoWithSuppressingObjectUpdates(Action &&action)
static ObjectGuid GetGUID(Object const *o)
void SetEntry(uint32 entry)
virtual void SetObjectScale(float scale)
void SendUpdateToPlayer(Player *player)
virtual UF::UpdateFieldFlag GetUpdateFieldFlagsFor(Player const *target) const
static Player * ToPlayer(Object *o)
static void InitDbVisibleMapId(PhaseShift &phaseShift, int32 visibleMapId)
static void InitDbPhaseShift(PhaseShift &phaseShift, uint8 phaseUseFlags, uint16 phaseId, uint32 phaseGroupId)
bool IsInSameRaidWith(Player const *p) const
UF::UpdateField< UF::PlayerData, 0, TYPEID_PLAYER > m_playerData
void SendDirectMessage(WorldPacket const *data) const
uint16 GetSkillValue(uint32 skill) const
bool TeleportTo(uint32 mapid, float x, float y, float z, float orientation, TeleportToOptions options=TELE_TO_NONE, Optional< uint32 > instanceId={})
bool CanUseBattlegroundObject(GameObject *gameobject) const
void GiveXP(uint32 xp, Unit *victim, float group_rate=1.0f)
Item * GetItemByEntry(uint32 entry, ItemSearchLocation where=ItemSearchLocation::Default) const
void SendPreparedGossip(WorldObject *source)
void UpdateVisibilityOf(WorldObject *target)
PlayerSpellMap const & GetSpellMap() const
void SendLoot(Loot &loot, bool aeLooting=false)
void UpdateCriteria(CriteriaType type, uint64 miscValue1=0, uint64 miscValue2=0, uint64 miscValue3=0, WorldObject *ref=nullptr)
bool HasQuestForGO(int32 goId) const
Battleground * GetBattleground() const
void SendCinematicStart(uint32 CinematicSequenceId) const
uint32 GetProfessionSkillForExp(uint32 skill, int32 expansion) const
QuestStatus GetQuestStatus(uint32 quest_id) const
void KillCreditGO(uint32 entry, ObjectGuid guid=ObjectGuid::Empty)
Group * GetGroup(Optional< uint8 > partyIndex)
void PrepareGossipMenu(WorldObject *source, uint32 menuId, bool showQuests=false)
bool UpdateFishingSkill(int32 expansion)
Item * GetItemByGuid(ObjectGuid guid) const
void setInt32(const uint8 index, const int32 value)
void setFloat(const uint8 index, const float value)
void setUInt8(const uint8 index, const uint8 value)
void setUInt32(const uint8 index, const uint32 value)
void setUInt16(const uint8 index, const uint16 value)
void setString(const uint8 index, const std::string &value)
void setUInt64(const uint8 index, const uint64 value)
static uint32 RoundXPValue(uint32 xp)
float GetMaxRange(bool positive=false, WorldObject *caster=nullptr, Spell *spell=nullptr) const
virtual void CalculatePassengerPosition(float &x, float &y, float &z, float *o=nullptr) const =0
This method transforms supplied transport offsets into global coordinates.
void UpdatePassengerPosition(Map *map, WorldObject *passenger, float x, float y, float z, float o, bool setHomePosition)
virtual void CalculatePassengerOffset(float &x, float &y, float &z, float *o=nullptr) const =0
This method transforms supplied global coordinates into local offsets.
bool Remove(KEY_TYPE const &handle)
bool Insert(KEY_TYPE const &handle, SPECIFIC_TYPE *obj)
void ClearChanged(UpdateField< T, BlockBit, Bit >(Derived::*))
Mask const & GetChangesMask() const
void MarkChanged(UpdateField< T, BlockBit, Bit >(Derived::*))
MutableFieldReference< T, false > ModifyValue(UpdateField< T, BlockBit, Bit >(Derived::*field))
void ClearChangesMask(UpdateField< T, BlockBit, Bit >(Derived::*field))
bool HasChanged(uint32 index) const
uint32 GetChangedObjectTypeMask() const
Vehicle * GetVehicle() const
void RemoveAurasByType(AuraType auraType, std::function< bool(AuraApplication const *)> const &check, AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
void RemoveGameObject(GameObject *gameObj, bool del)
void SetStandState(UnitStandStateType state, uint32 animKitID=0)
void FinishSpell(CurrentSpellTypes spellType, SpellCastResult result=SPELL_CAST_OK)
Aura * GetAura(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, ObjectGuid itemCasterGUID=ObjectGuid::Empty, uint32 reqEffMask=0) const
void NearTeleportTo(Position const &pos, bool casting=false)
ObjectGuid GetTarget() const
Spell * GetCurrentSpell(CurrentSpellTypes spellType) const
bool BuildPacket(WorldPacket *packet)
uint32 GetBlock(uint32 index) const
constexpr uint32 GetMapId() const
bool InSamePhase(PhaseShift const &phaseShift) const
virtual bool IsInvisibleDueToDespawn(WorldObject const *seer) const
bool IsWithinDist3d(float x, float y, float z, float dist) const
virtual void SendMessageToSet(WorldPacket const *data, bool self) const
void AddToWorld() override
virtual bool IsAlwaysVisibleFor(WorldObject const *seer) const
void RemoveFromWorld() override
virtual void UpdateObjectVisibilityOnDestroy()
SpellCastResult CastSpell(CastSpellTargetArg const &targets, uint32 spellId, CastSpellExtraArgs const &args={ })
std::string GetDebugInfo() const override
PhaseShift & GetPhaseShift()
FlaggedValuesArray32< int32, uint64, InvisibilityType, TOTAL_INVISIBILITY_TYPES > m_invisibility
ZoneScript * GetZoneScript() const
TransportBase * GetTransport() const
void setActive(bool isActiveObject)
float GetDistance2d(WorldObject const *obj) const
ZoneScript * m_zoneScript
std::string const & GetName() const
virtual void SetMap(Map *map)
void AddObjectToRemoveList()
void UpdatePositionData()
Player * GetCharmerOrOwnerPlayerOrPlayerItself() const
void SetName(std::string newname)
FlaggedValuesArray32< int32, uint32, StealthType, TOTAL_STEALTH_TYPES > m_stealth
void SetVisibilityDistanceOverride(VisibilityDistanceType type)
MovementInfo m_movementInfo
virtual bool IsNeverVisibleFor(WorldObject const *seer, bool allowServersideObjects=false) const
bool IsFriendlyTo(WorldObject const *target) const
bool IsInMap(WorldObject const *obj) const
virtual void Update(uint32 diff)
virtual void UpdateObjectVisibility(bool forced=true)
virtual void CleanupsBeforeDelete(bool finalCleanup=true)
void SetTransport(TransportBase *t)
WorldPacket const * Write() override
WorldPacket const * Write() override
BattlegroundCapturePointInfo CapturePointInfo
WorldPacket const * Write() override
WorldPacket const * Write() override
WorldPacket const * Write() override
WorldPacket const * Write() override
WorldPacket const * Write() override
PlayerInteractionType InteractionType
WorldPacket const * Write() override
WorldPacket const * Write() override
WorldPacket const * Write() override
ObjectGuid GameObjectGUID
WorldPacket const * Write() override
WorldPacket const * Write() override
WorldPacket const * Write() override
virtual uint32 GetGameObjectEntry(ObjectGuid::LowType, uint32 entry)
virtual void OnGameObjectRemove(GameObject *)
virtual void OnGameObjectCreate(GameObject *)
@ CONFIG_RESPAWN_DYNAMICMODE
ObjectData const gameObjectData[]
TC_GAME_API uint32 GetId(std::string_view username)
GameObjectAI * SelectGameObjectAI(GameObject *go)
TC_GAME_API void Trigger(uint32 gameEventId, WorldObject *source, WorldObject *target)
SystemTimePoint GetSystemTime()
Current chrono system_clock time point.
ItemContext GetContextForPlayer(MapDifficultyEntry const *mapDifficulty, Player const *player)
TC_GAME_API Unit * GetUnit(WorldObject const &, ObjectGuid const &guid)
TC_GAME_API GameObject * GetGameObject(WorldObject const &u, ObjectGuid const &guid)
TC_GAME_API Player * FindPlayer(ObjectGuid const &)
TC_GAME_API Player * GetPlayer(Map const *, ObjectGuid const &guid)
auto SelectRandomContainerElement(C const &container) -> typename std::add_const< decltype(*std::begin(container))>::type &
auto MapGetValuePtr(M &map, typename M::key_type const &key)
void MultimapErasePair(M< K, V, Rest... > &multimap, K const &key, V const &value)
GridCoord ComputeGridCoord(float x, float y)
std::unique_ptr< VignetteData > Create(VignetteEntry const *vignetteData, WorldObject const *owner)
void Update(VignetteData &vignette, WorldObject const *owner)
void Remove(VignetteData &vignette, WorldObject const *owner)
static void VisitAllObjects(WorldObject const *obj, T &visitor, float radius, bool dont_load=true)
static void VisitGridObjects(WorldObject const *obj, T &visitor, float radius, bool dont_load=true)
static void VisitWorldObjects(WorldObject const *obj, T &visitor, float radius, bool dont_load=true)
QuaternionData ParentRotation
InvisibilityType invisibilityType
std::array< uint32, 5 > ArtKits
uint32 DefendedEventHorde
uint32 DefendedBroadcastHorde
struct GameObjectTemplate::@213::@278 raw
uint32 ContestedEventAlliance
uint32 DefendedEventAlliance
uint32 DestructibleModelRec
uint32 GetAutoCloseTime() const
struct GameObjectTemplate::@213::@262 itemForge
struct GameObjectTemplate::@213::@248 destructibleBuilding
struct GameObjectTemplate::@213::@241 flagDrop
struct GameObjectTemplate::@213::@218 chest
WorldPacket QueryData[TOTAL_LOCALES]
bool IsLargeGameObject() const
bool IsUsableMounted() const
uint32 GetNoDamageImmune() const
uint32 ObjectDespawnDelay
struct GameObjectTemplate::@213::@237 spellCaster
bool IsGiganticGameObject() const
WorldPacket BuildQueryData(LocaleConstant loc) const
uint32 ProgressEventHorde
void InitializeQueryData()
uint32 CustomizationScope
uint32 CaptureEventAlliance
struct GameObjectTemplate::@213::@265 gatheringNode
bool IsInfiniteGameObject() const
bool IsDespawnAtAction() const
struct GameObjectTemplate::@213::@257 capturePoint
struct GameObjectTemplate::@213::@226 transport
uint32 CaptureBroadcastHorde
struct GameObjectTemplate::@213::@251 newflag
uint32 GetCharges() const
struct GameObjectTemplate::@213::@233 ritual
uint32 CaptureBroadcastAlliance
uint32 NeutralEventAlliance
uint32 DefendedBroadcastAlliance
struct GameObjectTemplate::@213::@244 controlZone
uint32 ProgressEventAlliance
uint32 ContestedEventHorde
struct GameObjectTemplate::@213::@247 barberChair
uint32 casterTargetSpellTargets
std::string castBarCaption
struct GameObjectTemplate::@213::@225 goober
struct GameObjectTemplate::@213::@258 phaseableMO
struct GameObjectTemplate::@213::@220 generic
uint32 AllowMultiInteract
uint32 AssaultBroadcastHorde
uint32 AssaultBroadcastAlliance
struct GameObjectTemplate::@213::@222 chair
struct GameObjectTemplate::@213::@221 trap
uint32 GetConditionID1() const
SystemTimePoint ValidUntil
Optional< GOState > State
UF::GameObjectData::Base GameObjectMask
void operator()(Player const *player) const
UF::ObjectData::Base ObjectMask
std::array< uint8, MAX_LOCK_CASE > Type
std::array< uint16, MAX_LOCK_CASE > Skill
std::array< int32, MAX_LOCK_CASE > Index
bool AutoStore(Player *player, uint8 bag, uint8 slot, bool broadcast=false, bool createdByPlayer=false)
void generateMoneyLoot(uint32 minAmount, uint32 maxAmount)
void SetDungeonEncounterId(uint32 dungeonEncounterId)
bool FillLoot(uint32 lootId, LootStore const &store, Player *lootOwner, bool personal, bool noEmptyError=false, uint16 lootMode=LOOT_MODE_DEFAULT, ItemContext context=ItemContext::NONE)
struct MovementInfo::TransportInfo transport
constexpr float GetPositionX() const
constexpr float GetPositionY() const
std::string ToString() const
float GetExactDist(float x, float y, float z) const
constexpr void GetPosition(float &x, float &y) const
bool IsPositionValid() const
constexpr void Relocate(float x, float y)
constexpr float GetExactDistSq(float x, float y, float z) const
constexpr Position GetPosition() const
constexpr float GetOrientation() const
constexpr float GetPositionZ() const
void toEulerAnglesZYX(float &Z, float &Y, float &X) const
static QuaternionData fromEulerAnglesZYX(float Z, float Y, float X)
ObjectGuid::LowType spawnId
std::vector< Difficulty > spawnDifficulties
TransportRotationEntry const * GetNextAnimRotation(uint32 time) const
TransportAnimationEntry const * GetNextAnimNode(uint32 time) const
TransportAnimationEntry const * GetPrevAnimNode(uint32 time) const
TransportRotationEntry const * GetPrevAnimRotation(uint32 time) const
std::array< float, 4 > Rot
UpdateField< int32, 0, 4 > DisplayID
UpdateField< QuaternionData, 0, 13 > ParentRotation
UpdateField< uint32, 0, 7 > SpawnTrackingStateAnimID
UpdateField< uint32, 0, 18 > ArtKit
UpdateField< uint32, 0, 5 > SpellVisualID
UpdateField< int8, 0, 15 > State
UpdateField< uint32, 0, 2 > DynamicFlags
BattlegroundCapturePointState State
Duration< Milliseconds, uint32 > CaptureTotalDuration
TaggedPosition< Position::XY > Pos
std::vector< int32 > QuestItems
std::string CastBarCaption
std::array< uint32, MAX_GAMEOBJECT_DATA > Data
struct GameObjectValue::@211 Building
struct GameObjectValue::@212 CapturePoint
struct GameObjectValue::@209 FishingHole
WorldPackets::Battleground::BattlegroundCapturePointState State