29#include "G3DPosition.hpp"
60#include <G3D/CoordinateFrame.h>
83 queryTemp.
Allow =
true;
104 if (std::vector<uint32>
const* items =
sObjectMgr->GetGameObjectQuestItemList(
entry))
105 for (
int32 item : *items)
114 return queryTemp.
Move();
119 return fabs(
x *
x +
y *
y +
z *
z +
w *
w - 1.0f) < 1e-5f;
124 G3D::Matrix3(G3D::Quat(
x,
y,
z,
w)).toEulerAnglesZYX(Z, Y, X);
129 G3D::Quat quat(G3D::Matrix3::fromEulerAnglesZYX(Z, Y, X));
207 newProgress = now % period;
210 int32 stopTargetTime = 0;
220 float stopTargetPathPct = float(stopTargetTime) / float(period);
221 float timeSinceStopProgressPct = float(now -
_stateChangeTime) / float(timeToStop);
227 stopTargetPathPct = 1.0f;
229 float pathPctBetweenStops = stopTargetPathPct - stopSourcePathPct;
230 if (pathPctBetweenStops < 0.0f)
231 pathPctBetweenStops += 1.0f;
233 progressPct = pathPctBetweenStops * timeSinceStopProgressPct + stopSourcePathPct;
234 if (progressPct > 1.0f)
235 progressPct = progressPct - 1.0f;
239 float pathPctBetweenStops = stopSourcePathPct - stopTargetPathPct;
240 if (pathPctBetweenStops < 0.0f)
241 pathPctBetweenStops += 1.0f;
243 progressPct = stopSourcePathPct - pathPctBetweenStops * timeSinceStopProgressPct;
244 if (progressPct < 0.0f)
248 newProgress =
uint32(
float(period) * progressPct) % period;
251 newProgress = stopTargetTime;
293 newState =
GOState(currentState - 1);
295 newState =
GOState(currentState - 1);
297 newState =
GOState(currentState + 1);
311 if (oldAnimation && newAnimation)
316 G3D::Vector3 prev(oldAnimation->
Pos.
X, oldAnimation->
Pos.
Y, oldAnimation->
Pos.
Z);
317 G3D::Vector3 next(newAnimation->
Pos.
X, newAnimation->
Pos.
Y, newAnimation->
Pos.
Z);
319 G3D::Vector3 dst = next;
324 dst = prev.lerp(next, animProgress);
327 dst = dst * pathRotation;
335 if (oldRotation && newRotation)
337 G3D::Quat prev(oldRotation->
Rot[0], oldRotation->
Rot[1], oldRotation->
Rot[2], oldRotation->
Rot[3]);
338 G3D::Quat next(newRotation->
Rot[0], newRotation->
Rot[1], newRotation->
Rot[2], newRotation->
Rot[3]);
340 G3D::Quat rotation = next;
346 rotation = prev.slerp(next, animProgress);
369 int32 stopPathProgress = 0;
397 int32 newToOldStateDelta = newState - oldState;
398 if (newToOldStateDelta < 0)
399 newToOldStateDelta += pauseTimesCount + 1;
401 int32 oldToNewStateDelta = oldState - newState;
402 if (oldToNewStateDelta < 0)
403 oldToNewStateDelta += pauseTimesCount + 1;
410 if (oldToNewStateDelta < newToOldStateDelta && !isAtStartOfPath)
467 plr->SetFallInformation(0, plr->GetPositionZ());
511 transport->SetAutoCycleBetweenStopFrames(
_on);
545 zoneScript->OnFlagStateChange(&
_owner, oldState,
_state, player);
641 _value = RoundToInterval<float>(value, 0.0f, 100.0f);
647 std::vector<Player*> targetList;
652 if (pointsGained == 0)
658 if (oldRoundedValue == roundedValue)
664 if (oldControllingTeam != newControllingTeam)
692 for (
Player* player : targetList)
706 int32 hordePlayers = 0;
707 int32 alliancePlayers = 0;
709 for (
Player const* player : targetList)
711 if (!player->IsOutdoorPvPActive())
720 int8 factionCoefficient = 0;
722 if (alliancePlayers > hordePlayers)
723 factionCoefficient = 1;
724 else if (hordePlayers > alliancePlayers)
725 factionCoefficient = -1;
728 if (timeNeeded == 0.0f)
731 return 100.0f / timeNeeded *
static_cast<float>(factionCoefficient);
737 uint32 const delta = std::abs(alliancePlayers - hordePlayers);
740 if (delta < minSuperiority)
744 if (uncontestedTime && (hordePlayers == 0 || alliancePlayers == 0))
745 return static_cast<float>(uncontestedTime);
751 float const slope =
static_cast<float>(minTime - maxTime) /
static_cast<float>(std::max<uint32>(maxSuperiority - minSuperiority, 1));
752 float const intercept =
static_cast<float>(maxTime) - slope *
static_cast<float>(minSuperiority);
753 return slope *
static_cast<float>(delta) + intercept;
760 std::vector<Player*> enteringPlayers;
762 for (
Player* unit : newTargetList)
764 if (exitPlayers.erase(unit->GetGUID()) == 0)
765 enteringPlayers.push_back(unit);
770 for (
Player* player : enteringPlayers)
777 for (
ObjectGuid const& exitPlayerGuid : exitPlayers)
829 uint32 value = controlZone->GetStartingValue();
833 controlZone->SetValue(value);
839 m_goValue(), m_stringIds(), m_AI(nullptr), m_respawnCompatibilityMode(false), _animKitId(0), _worldEffectID(0)
916 owner->RemoveGameObject(
this,
false);
922 TC_LOG_DEBUG(
"misc",
"Removed GameObject ({} Entry: {} SpellId: {} LinkedGO: {}) that just lost any reference to the owner ({}) GO list",
944 trans->SetDelayedAddModelToMap();
969 linkedTrap->DespawnOrUnsummon();
1015 TC_LOG_ERROR(
"sql.sql",
"Gameobject (Spawn id: {} Entry: {}) not created: gameobject type GAMEOBJECT_TYPE_MAP_OBJ_TRANSPORT cannot be manually created.",
GetSpawnId(), entry);
1035 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);
1044 if (gameObjectAddon)
1086 switch (goInfo->
type)
1107 m_goTypeImpl = std::make_unique<GameObjectType::Transport>(*
this);
1135 m_goTypeImpl = std::make_unique<GameObjectType::ControlZone>(*
this);
1139 m_goTypeImpl = std::make_unique<GameObjectType::NewFlag>(*
this);
1171 if (gameObjectAddon)
1236 if (!go->
Create(entry, map, pos, rotation, animProgress, goState, artKit,
false, 0))
1264 TC_LOG_ERROR(
"misc",
"Could not initialize GameObjectAI");
1291 bool needsStateUpdate = itr->second.State !=
GetGoState();
1292 bool despawned = itr->second.Despawned;
1302 else if (needsStateUpdate)
1333 if (owner->IsInCombat())
1379 if (linkedRespawntime)
1382 if (targetGuid == dbtableHighGuid)
1471 Unit* target =
nullptr;
1483 Player* player =
nullptr;
1498 if (hordeCapturing || allianceCapturing)
1621 linkedTrap->DespawnOrUnsummon();
1633 owner->CastSpell(owner, spellId,
false);
1827 areaId = areaEntry->ParentAreaID;
1850 areaId = areaEntry->ParentAreaID;
1866 TC_LOG_ERROR(
"misc",
"GameObject::SaveToDB failed, cannot get gameobject data!");
1872 if (transport->GetMapIdForSpawning() >= 0)
1873 mapId = transport->GetMapIdForSpawning();
1915 trans->Append(stmt);
1921 stmt->
setString(index++, [&data]() -> std::string
1923 std::ostringstream os;
1926 auto itr = data.spawnDifficulties.begin();
1927 os << int32(*itr++);
1929 for (; itr != data.spawnDifficulties.end(); ++itr)
1930 os <<
',' << int32(*itr);
1933 return std::move(os).str();
1956 trans->Append(stmt);
1966 TC_LOG_ERROR(
"sql.sql",
"Gameobject (GUID: {}) not found in table `gameobject`, can't load. ", spawnId);
2016 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);
2029 if (addToMap && !
GetMap()->AddToMap(
this))
2044 [spawnId, charTrans](
Map* map) ->
void
2047 std::vector<GameObject*> toUnload;
2048 for (auto const& pair : Trinity::Containers::MapEqualRange(map->GetGameObjectBySpawnIdStore(), spawnId))
2049 toUnload.push_back(pair.second);
2050 for (GameObject* obj : toUnload)
2051 map->AddObjectToRemoveList(obj);
2052 map->RemoveRespawnTime(SPAWN_TYPE_GAMEOBJECT, spawnId, charTrans);
2066 trans->Append(stmt);
2071 trans->Append(stmt);
2075 trans->Append(stmt);
2080 trans->Append(stmt);
2085 trans->Append(stmt);
2090 trans->Append(stmt);
2095 trans->Append(stmt);
2099 trans->Append(stmt);
2162 if (
GetGOInfo()->GetServerOnly() && !allowServersideObjects)
2169 return m_goTypeImpl->IsNeverVisibleFor(seer, allowServersideObjects);
2211 if (state->Despawned)
2220 return owner->GetLevelForTarget(target);
2226 return uint8(std::clamp<int16>(player->GetLevel(), userLevels->MinLevel, userLevels->MaxLevel));
2228 if (
Unit const* targetUnit = target->
ToUnit())
2229 return targetUnit->GetLevel();
2360 trapGO->CastSpell(target, trapSpell->
Id);
2389 if (!time_to_restore)
2400 Unit* unitCaster = spellCaster ? spellCaster->
ToUnit() :
nullptr;
2405 TC_LOG_FATAL(
"spell",
"Spell {} has action type NONE in effect {}", spellId, effectIndex);
2472 if (templateAddon !=
nullptr)
2473 artKitValue = templateAddon->
ArtKits[artKitIndex];
2475 if (artKitValue == 0)
2476 TC_LOG_ERROR(
"sql.sql",
"GameObject {} hit by spell {} needs `artkit{}` in `gameobject_template_addon`",
GetEntry(), spellId, artKitIndex);
2496 TC_LOG_ERROR(
"spell",
"Spell {} targeted non-transport gameobject for transport only action \"Go to Floor\" {} in effect {}", spellId,
int32(action), effectIndex);
2532 TC_LOG_ERROR(
"spell",
"Spell {} has unhandled action {} in effect {}", spellId,
int32(action), effectIndex);
2538 m_goTypeImpl->ActivateObject(action, param, spellCaster, spellId, effectIndex);
2558 data =
sObjectMgr->GetGameObjectData(lowguid);
2580 Unit* spellCaster = user;
2583 if (ignoreCastInProgress)
2594 playerUser->PlayerTalkClass->ClearMenus();
2595 if (
AI()->OnGossipHello(playerUser))
2665 std::vector<Player*> tappers;
2668 tappers.push_back(tapper);
2670 if (tappers.empty())
2671 tappers.push_back(player);
2760 bool found_free_slot =
false;
2766 float x_i =
GetPositionX() + relativeDistance * std::cos(orthogonalOrientation);
2767 float y_i =
GetPositionY() + relativeDistance * std::sin(orthogonalOrientation);
2769 if (!sittingUnit.IsEmpty())
2773 if (chairUser->IsSitState() && chairUser->GetStandState() !=
UNIT_STAND_STATE_SIT && chairUser->GetExactDist2d(x_i, y_i) < 0.1f)
2776 sittingUnit.Clear();
2779 sittingUnit.Clear();
2782 found_free_slot =
true;
2787 if (thisDistance <= lowestDist)
2789 nearest_slot = slot;
2790 lowestDist = thisDistance;
2796 if (found_free_slot)
2801 itr->second = user->
GetGUID();
2854 if (itr.GetSource()->IsAtGroupRewardDistance(
this))
2888 spellCaster =
nullptr;
2906 if (info->
camera.eventID)
2935 TC_LOG_ERROR(
"entities.gameobject",
"Gameobject '{}' ({}) spawned in unknown area (x: {} y: {} z: {} map: {})",
2942 if (!areaContentTuning)
2948 int32 areaFishingLevel =
sObjectMgr->GetFishingBaseSkillLevel(areaEntry);
2955 if (playerFishingLevel < areaFishingLevel)
2957 chance =
int32(pow((
double)playerFishingLevel / areaFishingLevel, 2) * 100);
2962 TC_LOG_DEBUG(
"misc",
"Fishing check (skill {} level: {} area skill level: {} chance {} roll: {}", playerFishingSkill, playerFishingLevel, areaFishingLevel, chance, roll);
2969 if (chance >= roll || fishingPool)
2979 fishingPool->
Use(player, ignoreCastInProgress);
3020 Player* m_ritualOwner =
nullptr;
3025 if (!m_ritualOwner && !owner)
3028 m_ritualOwner = player;
3045 spellCaster = owner;
3052 spellCaster = player;
3069 spellCaster = m_ritualOwner;
3073 if (spellId == 62330)
3145 if (!targetPlayer || targetPlayer == player || !targetPlayer->
IsInSameRaidWith(player))
3150 if (player->
GetLevel() < userLevels->MaxLevel)
3154 if (targetPlayer->
GetLevel() < targetLevels->MaxLevel)
3157 if (info->
entry == 194097)
3186 spellCaster =
nullptr;
3278 spellCaster =
nullptr;
3305 bool defenderInteract = !owner->IsFriendlyTo(user);
3306 if (defenderInteract && owner->GetGOInfo()->newflag.ReturnonDefenderInteract)
3444 player->
GiveXP(xp,
nullptr);
3469 TC_LOG_ERROR(
"misc",
"GameObject::Use(): unit ({}, name: {}) tries to use object ({}, name: {}) of unknown type ({})",
3479 if (!player->GetQuestRewardStatus(
m_vignette->Data->RewardQuestID))
3482 if (
m_vignette->Data->VisibleTrackingQuestID)
3483 player->SetRewardedQuest(
m_vignette->Data->VisibleTrackingQuestID);
3488 if (
GetGOInfo()->ClearObjectVignetteonOpening())
3500 TC_LOG_DEBUG(
"outdoorpvp",
"WORLD: {} non-dbc spell was handled by OutdoorPvP", spellId);
3508 spellCaster->
CastSpell(user, spellId, spellArgs);
3552 float dist = std::sqrt(dx*dx + dy*dy);
3555 if (G3D::fuzzyEq(dist, 0.0f))
3558 float sinB = dx / dist;
3559 float cosB = dy / dist;
3560 dx = dist * (cosA * cosB + sinA * sinB);
3561 dy = dist * (cosA * sinB - sinA * cosB);
3587 return std::ranges::any_of(
m_stringIds, [
id](std::string
const* stringId) {
return stringId && *stringId == id; });
3611 if (data->spawnTrackingData && !data->spawnTrackingQuestObjectives.empty())
3626 if (cl->Name.size() > locale && !cl->Name[locale].empty())
3627 return cl->Name[locale];
3644 static const int32 PACK_YZ = 1 << 20;
3645 static const int32 PACK_X = PACK_YZ << 1;
3647 static const int32 PACK_YZ_MASK = (PACK_YZ << 1) - 1;
3648 static const int32 PACK_X_MASK = (PACK_X << 1) - 1;
3659 G3D::Quat rotation(qx, qy, qz, qw);
3675 G3D::Quat quat(G3D::Matrix3::fromEulerAnglesZYX(z_rot, y_rot, x_rot));
3686 G3D::Quat worldRotationQuat(worldRotation.
x, worldRotation.
y, worldRotation.
z, worldRotation.
w);
3687 G3D::Quat localRotationQuat(localRotation.
x, localRotation.
y, localRotation.
z, localRotation.
w);
3689 G3D::Quat resultRotation = localRotationQuat * worldRotationQuat;
3691 return QuaternionData(resultRotation.x, resultRotation.y, resultRotation.z, resultRotation.w);
3693 return localRotation;
3722 packet.
Owner = player->GetGUID();
3724 player->SendDirectMessage(packet.
Write());
3772 if (modelData->State1Wmo)
3773 modelId = modelData->State1Wmo;
3798 if (modelData->State2Wmo)
3799 modelId = modelData->State2Wmo;
3817 if (modelData->State3Wmo)
3818 modelId = modelData->State3Wmo;
3851 bool collision =
false;
3854 collision = !collision;
3863 std::unique_ptr<Loot> loot(std::move(
m_loot));
3864 std::unordered_map<ObjectGuid, std::unique_ptr<Loot>> personalLoot(std::move(
m_personalLoot));
3867 personalLoot.clear();
3878 if (!loot->isLooted())
3936 bool collision =
false;
3938 collision = !collision;
3949 return *state->State;
3958 perPlayerState.
State = state;
3962 setStateLocal.
State = state;
3982 return modelData->State0NameSet;
3984 return modelData->State1NameSet;
3986 return modelData->State2NameSet;
3988 return modelData->State3NameSet;
4013 m_model->EnableCollision(enable);
4020 bool modelCollisionEnabled;
4023 modelCollisionEnabled =
m_model->IsCollisionEnabled();
4031 std::unique_ptr<GameObjectModel> oldModel = std::exchange(
m_model,
nullptr);
4037 if (modelCollisionEnabled)
4038 m_model->EnableCollision(modelCollisionEnabled);
4063 if (loot->isLooted())
4065 if (!loot->HasAllowedLooter(
GetGUID()) || (!loot->hasItemForAll() && !loot->hasItemFor(player)))
4113 if (requestedObjectMask.IsAnySet())
4116 if (requestedGameObjectMask.IsAnySet())
4120 std::size_t sizePos = buffer.
wpos();
4126 m_objectData->WriteUpdate(requestedObjectMask, buffer, target,
this, ignoreNestedChangesMask);
4129 m_gameObjectData->WriteUpdate(requestedGameObjectMask, buffer, target,
this, ignoreNestedChangesMask);
4155 std::span<uint32 const> result;
4157 result = transport->GetPauseTimes();
4182 return static_cast<Transport const*
>(
this);
4206 if (
GetGOInfo()->GetInteractRadiusOverride())
4207 return float(
GetGOInfo()->GetInteractRadiusOverride()) / 100.0f;
4276 activateAnimKit.
Maintain = !oneshot;
4312 if (ai->OnCapturePointAssaulted(player))
4396 uint32 spellVisualId = 0;
4424 if (customAnim != 0)
4440 bg->SendPacketToAll(packet.
Write());
4506 return controlZone->GetInsidePlayers();
4519 m_perPlayerState = std::make_unique<std::unordered_map<ObjectGuid, PerPlayerState>>();
4530 bool IsSpawned()
const override {
return _owner->isSpawned(); }
4533 bool IsInPhase(
PhaseShift const& phaseShift)
const override {
return _owner->GetPhaseShift().CanSee(phaseShift); }
4534 G3D::Vector3
GetPosition()
const override {
return G3D::Vector3(_owner->GetPositionX(), _owner->GetPositionY(), _owner->GetPositionZ()); }
4535 G3D::Quat
GetRotation()
const override {
return G3D::Quat(_owner->GetLocalRotation().x, _owner->GetLocalRotation().y, _owner->GetLocalRotation().z, _owner->GetLocalRotation().w); }
4537 float GetScale()
const override {
return _owner->GetObjectScale(); }
4585 m_model->IncludeInNavMesh(
true);
4595 std::stringstream sstr;
4623 float minX = displayInfo->GeoBoxMin.X * scale - radius;
4624 float minY = displayInfo->GeoBoxMin.Y * scale - radius;
4625 float minZ = displayInfo->GeoBoxMin.Z * scale - radius;
4626 float maxX = displayInfo->GeoBoxMax.X * scale + radius;
4627 float maxY = displayInfo->GeoBoxMax.Y * scale + radius;
4628 float maxZ = displayInfo->GeoBoxMax.Z * scale + radius;
4631 G3D::Quat worldRotationQuat(worldRotation.
x, worldRotation.
y, worldRotation.
z, worldRotation.
w);
4634 .toWorldSpace(G3D::Box { { minX, minY, minZ }, { maxX, maxY, maxZ } })
4673 for (
auto&& effect : spell->GetEffects())
4675 if (effect.CalcValueAsInt(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< 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::milliseconds Milliseconds
Milliseconds shorthand typedef.
std::chrono::seconds Seconds
Seconds shorthand typedef.
#define FISHING_BOBBER_READY_TIME
#define TC_LOG_DEBUG(filterType__, message__,...)
#define TC_LOG_ERROR(filterType__, message__,...)
#define TC_LOG_FATAL(filterType__, message__,...)
#define TC_LOG_WARN(filterType__, message__,...)
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
constexpr QuestGiverStatus QuestGiverStatusFutureMask
@ 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_AURA_GENERATOR
@ GAMEOBJECT_TYPE_MEETINGSTONE
@ GAMEOBJECT_TYPE_GENERIC
@ GAMEOBJECT_TYPE_FISHINGHOLE
@ GAMEOBJECT_TYPE_GARRISON_PLOT
@ GAMEOBJECT_TYPE_TRAPDOOR
@ 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_SIEGEABLE_MO
@ 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.
@ TRIGGERED_IGNORE_CAST_IN_PROGRESS
Will not check if a current cast is in progress.
@ 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
ObjectGuid const & GetGUID() const
void SetUpdateFieldValue(UF::UpdateFieldPrivateSetter< T > setter, typename UF::UpdateFieldPrivateSetter< T >::value_type value)
WowCS::EntityFragmentsHolder m_entityFragments
UF::UpdateFieldHolder m_values
void _Create(ObjectGuid const &guid)
CreateObjectBits m_updateFlag
void AddToObjectUpdateIfNeeded()
UF::DynamicUpdateFieldSetter< T >::insert_result AddDynamicUpdateFieldValue(UF::DynamicUpdateFieldSetter< T > setter)
ByteBuffer & PrepareValuesUpdateBuffer(UpdateData *data) const
virtual UF::UpdateFieldFlag GetUpdateFieldFlagsFor(Player const *target) const
void SendUpdateToPlayer(Player *player) 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, uint32 conditionId)
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 *)
int64 GetPackedRotation() const override
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
static std::unique_ptr< 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
float CalculatePointsPerSecond(std::vector< Player * > const &targetList) const
void SearchTargets(std::vector< Player * > &targetList)
float CalculateTimeNeeded(int32 hordePlayers, int32 alliancePlayers) const
float GetMaxHordeValue() const
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
Transport(GameObject &owner)
TransportAnimation const * _animationInfo
uint32 GetTransportPeriod() const
void OnRelocated() override
Position GetPositionWithOffset(Position const &offset) const override
This method transforms supplied transport offsets into global coordinates.
Position GetPositionOffsetTo(Position const &endPos) const override
This method transforms supplied global coordinates into local offsets.
void AddPassenger(WorldObject *passenger, Position const &offset) override
void Update(uint32 diff) override
void SetAutoCycleBetweenStopFrames(bool on)
int32 GetMapIdForSpawning() const override
std::span< uint32 const > GetPauseTimes() const
static constexpr Milliseconds PositionUpdateInterval
ObjectGuid GetTransportGUID() const override
void UpdatePassengerPositions()
void BuildValuesCreate(UF::UpdateFieldFlag flags, ByteBuffer &data, Player const *target) const override
void SetLocalRotationAngles(float z_rot, float y_rot, float x_rot)
void UpdateCapturePoint()
bool HasStringId(std::string_view id) 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
SpawnTrackingStateData const * GetSpawnTrackingStateDataForPlayer(Player const *player) const override
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
void InheritStringIds(GameObject const *parent)
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
std::array< std::string const *, 3 > m_stringIds
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)
TeamId GetControllingTeam() const
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
std::span< uint32 const > GetPauseTimes() const
void Use(Unit *user, bool ignoreCastInProgress=false)
Position const & GetStationaryPosition() const override
void SaveRespawnTime(uint32 forceDelay=0)
float GetInteractionDistance() const
std::span< int32 const > GetLabels() 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
std::unique_ptr< Loot > m_loot
void SetLevel(uint32 level)
Optional< float > m_transportPathProgress
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)
void Update(uint32 diff) override
GameObjectTemplateAddon const * GetTemplateAddon() const
void ModifyHealth(int32 change, WorldObject *attackerOrHealer=nullptr, uint32 spellId=0)
void ClearValuesChangesMask() override
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.
bool HasLabel(int32 gameobjectLabel) const
bool CanActivateForPlayer(Player const *target) const
void BuildValuesUpdateForPlayerWithMask(UpdateData *data, UF::ObjectData::Mask const &requestedObjectMask, UF::GameObjectData::Mask const &requestedGameObjectMask, Player const *target, bool ignoreNestedChangesMask) const
std::string_view GetStringId(StringIdType type) const
void ActivateObject(GameObjectActions action, int32 param, WorldObject *spellCaster=nullptr, uint32 spellId=0, int32 effectIndex=-1)
void SwitchDoorOrButton(bool activate, bool alternative=false)
void CleanupsBeforeDelete(bool finalCleanup=true) override
bool HasConditionalInteraction() const
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)
static bool DeleteFromDB(ObjectGuid::LowType spawnId)
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
bool IsLootAllowedFor(Player const *player) const
void AddUniqueUse(Player *player)
std::string const & GetAIName() const
GameObjectOverride const * GetGameObjectOverride() const
UF::UpdateField< UF::GameObjectData, int32(WowCS::EntityFragment::CGObject), TYPEID_GAMEOBJECT > m_gameObjectData
void SetParentRotation(QuaternionData const &rotation)
Position GetRespawnPosition() const
std::unique_ptr< GameObjectTypeBase > m_goTypeImpl
ObjectGuid m_ritualOwnerGUID
std::unique_ptr< GameObjectModel > m_model
void SetSpellId(uint32 id)
void SetFaction(uint32 faction) override
void BuildValuesUpdate(UF::UpdateFieldFlag flags, ByteBuffer &data, Player const *target) const 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()
MapDifficultyEntry const * GetMapDifficulty() const
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()
void RequestRebuildNavMeshOnGameObjectModelChange(GameObjectModel const &model, PhaseShift const &phaseShift)
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
bool HasDynamicFlag(uint32 flag) const
void RemoveDynamicFlag(uint32 flag)
void BuildEntityFragmentsForValuesUpdateForPlayerWithMask(ByteBuffer &data, EnumFlag< UF::UpdateFieldFlag > flags) const
void SetEntry(uint32 entry)
virtual void ClearValuesChangesMask()
virtual void SetObjectScale(float scale)
UF::UpdateField< UF::ObjectData, int32(WowCS::EntityFragment::CGObject), TYPEID_OBJECT > m_objectData
static void InitDbVisibleMapId(PhaseShift &phaseShift, int32 visibleMapId)
static void InitDbPhaseShift(PhaseShift &phaseShift, uint8 phaseUseFlags, uint16 phaseId, uint32 phaseGroupId)
UF::UpdateField< UF::PlayerData, int32(WowCS::EntityFragment::CGObject), TYPEID_PLAYER > m_playerData
bool IsInSameRaidWith(Player const *p) const
void SendDirectMessage(WorldPacket const *data) const
uint16 GetSkillValue(uint32 skill) const
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)
QuestGiverStatus GetQuestDialogStatus(Object const *questGiver) const
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
bool TeleportTo(uint32 mapid, float x, float y, float z, float orientation, TeleportToOptions options=TELE_TO_NONE, Optional< uint32 > instanceId={}, uint32 teleportSpellId=0)
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
SpawnTrackingState GetSpawnTrackingStateByObjectives(uint32 spawnTrackingId, std::vector< uint32 > const &questObjectives) const
void setUInt16(uint8 index, uint16 value)
void setString(uint8 index, std::string &&value)
void setUInt32(uint8 index, uint32 value)
void setFloat(uint8 index, float value)
void setUInt64(uint8 index, uint64 value)
void setInt32(uint8 index, int32 value)
void setUInt8(uint8 index, uint8 value)
void setNull(uint8 index)
static uint32 RoundXPValue(uint32 xp)
float GetMaxRange(bool positive=false, WorldObject const *caster=nullptr, Spell *spell=nullptr) const
void UpdatePassengerPosition(Map *map, WorldObject *passenger, Position const &position, bool setHomePosition)
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(TeleportLocation const &target, bool casting=false)
ObjectGuid GetTarget() const
Spell * GetCurrentSpell(CurrentSpellTypes spellType) const
bool BuildPacket(WorldPacket *packet)
constexpr uint32 GetBlock(uint32 index) const
constexpr void Set(uint32 index)
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
uint32 CustomizationFeatureMask
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
static constexpr ObjectData gameObjectData[]
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) -> std::add_const_t< decltype(*std::ranges::begin(container))> &
auto MapGetValuePtr(M &map, typename M::key_type const &key)
void MultimapErasePair(M &multimap, typename M::key_type const &key, typename M::mapped_type 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)
struct advstd::ranges::Contains contains
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)
uint32 GetMaxHealth() const
QuaternionData ParentRotation
InvisibilityType invisibilityType
std::array< uint32, 5 > ArtKits
uint32 DefendedEventHorde
uint32 DefendedBroadcastHorde
uint32 CustomizationFeatureMask
uint32 ContestedEventAlliance
uint32 DefendedEventAlliance
uint32 DestructibleModelRec
uint32 GetAutoCloseTime() const
struct GameObjectTemplate::@197::@231 barberChair
struct GameObjectTemplate::@197::@264 raw
bool IsLargeGameObject() const
bool IsUsableMounted() const
uint32 GetNoDamageImmune() const
uint32 ObjectDespawnDelay
struct GameObjectTemplate::@197::@232 destructibleBuilding
bool IsGiganticGameObject() const
WorldPacket BuildQueryData(LocaleConstant loc) const
uint32 ProgressEventHorde
void InitializeQueryData()
struct GameObjectTemplate::@197::@223 flagStand
struct GameObjectTemplate::@197::@206 chair
uint32 CaptureEventAlliance
struct GameObjectTemplate::@197::@209 goober
struct GameObjectTemplate::@197::@241 capturePoint
bool IsInfiniteGameObject() const
bool IsDespawnAtAction() const
struct GameObjectTemplate::@197::@249 gatheringNode
uint32 CaptureBroadcastHorde
uint32 GetCharges() const
struct GameObjectTemplate::@197::@228 controlZone
struct GameObjectTemplate::@197::@205 trap
uint32 CaptureBroadcastAlliance
uint32 NeutralEventAlliance
struct GameObjectTemplate::@197::@246 itemForge
struct GameObjectTemplate::@197::@225 flagDrop
uint32 DefendedBroadcastAlliance
struct GameObjectTemplate::@197::@235 newflag
uint32 ProgressEventAlliance
struct GameObjectTemplate::@197::@221 spellCaster
uint32 ContestedEventHorde
uint32 casterTargetSpellTargets
std::string castBarCaption
std::unique_ptr< WorldPacket[]> QueryData
bool IsUsingGroupLootRules() const
struct GameObjectTemplate::@197::@242 phaseableMO
struct GameObjectTemplate::@197::@202 chest
uint32 AllowMultiInteract
uint32 AssaultBroadcastHorde
uint32 AssaultBroadcastAlliance
struct GameObjectTemplate::@197::@217 ritual
struct GameObjectTemplate::@197::@210 transport
uint32 GetConditionID1() const
SystemTimePoint ValidUntil
Optional< GOState > State
UF::GameObjectData::Base GameObjectMask
void operator()(Player const *player) const
bool IgnoreNestedChangesMask
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
Position GetPositionWithOffset(Position const &offset) const
Position GetPositionOffsetTo(Position const &endPos) const
bool IsPositionValid() const
constexpr void Relocate(float x, float y)
constexpr Position GetPosition() const
constexpr bool IsInDist(float x, float y, float z, float dist) 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
bool Insert(ValueType< ObjectType > object)
bool Remove(ValueType< ObjectType > object)
UpdateField< int32, 0, 4 > DisplayID
UpdateField< QuaternionData, 0, 13 > ParentRotation
UpdateField< uint32, 0, 18 > ArtKit
UpdateField< uint32, 0, 5 > SpellVisualID
UpdateField< uint32, 0, 9 > StateWorldEffectsQuestObjectiveID
DynamicUpdateField< int32, 0, 2 > EnableDoodadSets
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
void Add(EntityFragment fragment, bool update, void const *data=nullptr)
struct GameObjectValue::@196 CapturePoint
struct GameObjectValue::@193 FishingHole
struct GameObjectValue::@195 Building
WorldPackets::Battleground::BattlegroundCapturePointState State
::DestructibleHitpoint const * DestructibleHitpoint