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::Quat(
x,
y,
z,
w).toYPRAngles(Z, Y, X);
129 G3D::Quat quat = G3D::Quat::fromYPRAngles(Z, Y, X);
135 G3D::Quat quat = G3D::Quat::fromAxisAngleRotation(G3D::Vector3::unitZ(), orientation);
213 newProgress = now % period;
216 int32 stopTargetTime = 0;
226 float stopTargetPathPct = float(stopTargetTime) / float(period);
227 float timeSinceStopProgressPct = float(now -
_stateChangeTime) / float(timeToStop);
233 stopTargetPathPct = 1.0f;
235 float pathPctBetweenStops = stopTargetPathPct - stopSourcePathPct;
236 if (pathPctBetweenStops < 0.0f)
237 pathPctBetweenStops += 1.0f;
239 progressPct = pathPctBetweenStops * timeSinceStopProgressPct + stopSourcePathPct;
240 if (progressPct > 1.0f)
241 progressPct = progressPct - 1.0f;
245 float pathPctBetweenStops = stopSourcePathPct - stopTargetPathPct;
246 if (pathPctBetweenStops < 0.0f)
247 pathPctBetweenStops += 1.0f;
249 progressPct = stopSourcePathPct - pathPctBetweenStops * timeSinceStopProgressPct;
250 if (progressPct < 0.0f)
254 newProgress =
uint32(
float(period) * progressPct) % period;
257 newProgress = stopTargetTime;
299 newState =
GOState(currentState - 1);
301 newState =
GOState(currentState - 1);
303 newState =
GOState(currentState + 1);
317 if (oldAnimation && newAnimation)
322 G3D::Vector3 prev(oldAnimation->
Pos.
X, oldAnimation->
Pos.
Y, oldAnimation->
Pos.
Z);
323 G3D::Vector3 next(newAnimation->
Pos.
X, newAnimation->
Pos.
Y, newAnimation->
Pos.
Z);
325 G3D::Vector3 dst = next;
330 dst = prev.lerp(next, animProgress);
333 dst = dst * pathRotation;
341 if (oldRotation && newRotation)
343 G3D::Quat prev(oldRotation->
Rot[0], oldRotation->
Rot[1], oldRotation->
Rot[2], oldRotation->
Rot[3]);
344 G3D::Quat next(newRotation->
Rot[0], newRotation->
Rot[1], newRotation->
Rot[2], newRotation->
Rot[3]);
346 G3D::Quat rotation = next;
352 rotation = prev.slerp(next, animProgress);
375 int32 stopPathProgress = 0;
403 int32 newToOldStateDelta = newState - oldState;
404 if (newToOldStateDelta < 0)
405 newToOldStateDelta += pauseTimesCount + 1;
407 int32 oldToNewStateDelta = oldState - newState;
408 if (oldToNewStateDelta < 0)
409 oldToNewStateDelta += pauseTimesCount + 1;
416 if (oldToNewStateDelta < newToOldStateDelta && !isAtStartOfPath)
473 plr->SetFallInformation(0, plr->GetPositionZ());
517 transport->SetAutoCycleBetweenStopFrames(
_on);
551 zoneScript->OnFlagStateChange(&
_owner, oldState,
_state, player);
647 _value = RoundToInterval<float>(value, 0.0f, 100.0f);
653 std::vector<Player*> targetList;
658 if (pointsGained == 0)
664 if (oldRoundedValue == roundedValue)
670 if (oldControllingTeam != newControllingTeam)
698 for (
Player* player : targetList)
712 int32 hordePlayers = 0;
713 int32 alliancePlayers = 0;
715 for (
Player const* player : targetList)
717 if (!player->IsOutdoorPvPActive())
726 int8 factionCoefficient = 0;
728 if (alliancePlayers > hordePlayers)
729 factionCoefficient = 1;
730 else if (hordePlayers > alliancePlayers)
731 factionCoefficient = -1;
734 if (timeNeeded == 0.0f)
737 return 100.0f / timeNeeded *
static_cast<float>(factionCoefficient);
743 uint32 const delta = std::abs(alliancePlayers - hordePlayers);
746 if (delta < minSuperiority)
750 if (uncontestedTime && (hordePlayers == 0 || alliancePlayers == 0))
751 return static_cast<float>(uncontestedTime);
757 float const slope =
static_cast<float>(minTime - maxTime) /
static_cast<float>(std::max<uint32>(maxSuperiority - minSuperiority, 1));
758 float const intercept =
static_cast<float>(maxTime) - slope *
static_cast<float>(minSuperiority);
759 return slope *
static_cast<float>(delta) + intercept;
766 std::vector<Player*> enteringPlayers;
768 for (
Player* unit : newTargetList)
770 if (exitPlayers.erase(unit->GetGUID()) == 0)
771 enteringPlayers.push_back(unit);
776 for (
Player* player : enteringPlayers)
783 for (
ObjectGuid const& exitPlayerGuid : exitPlayers)
835 uint32 value = controlZone->GetStartingValue();
839 controlZone->SetValue(value);
845 m_goValue(), m_stringIds(), m_AI(nullptr), m_respawnCompatibilityMode(false), _animKitId(0), _worldEffectID(0)
922 owner->RemoveGameObject(
this,
false);
928 TC_LOG_DEBUG(
"misc",
"Removed GameObject ({} Entry: {} SpellId: {} LinkedGO: {}) that just lost any reference to the owner ({}) GO list",
950 trans->SetDelayedAddModelToMap();
975 linkedTrap->DespawnOrUnsummon();
1021 TC_LOG_ERROR(
"sql.sql",
"Gameobject (Spawn id: {} Entry: {}) not created: gameobject type GAMEOBJECT_TYPE_MAP_OBJ_TRANSPORT cannot be manually created.",
GetSpawnId(), entry);
1041 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);
1050 if (gameObjectAddon)
1092 switch (goInfo->
type)
1113 m_goTypeImpl = std::make_unique<GameObjectType::Transport>(*
this);
1144 if (trapSpell->IsPositive())
1146 bool targetsAlly =
false;
1147 bool targetsEnemy =
false;
1156 for (
SpellEffectInfo const& spellEffectInfo : trapSpell->GetEffects())
1158 if (!spellEffectInfo.IsEffect())
1161 targetsAlly = targetsAlly || isAllyTarget(spellEffectInfo.TargetA) || isAllyTarget(spellEffectInfo.TargetB);
1162 targetsEnemy = targetsEnemy || isEnemyTarget(spellEffectInfo.TargetA) || isEnemyTarget(spellEffectInfo.TargetB);
1170 m_goTypeImpl = std::make_unique<GameObjectType::ControlZone>(*
this);
1174 m_goTypeImpl = std::make_unique<GameObjectType::NewFlag>(*
this);
1206 if (gameObjectAddon)
1271 if (!go->
Create(entry, map, pos, rotation, animProgress, goState, artKit,
false, 0))
1299 TC_LOG_ERROR(
"misc",
"Could not initialize GameObjectAI");
1326 bool needsStateUpdate = itr->second.State !=
GetGoState();
1327 bool despawned = itr->second.Despawned;
1337 else if (needsStateUpdate)
1368 if (owner->IsInCombat())
1414 if (linkedRespawntime)
1417 if (targetGuid == dbtableHighGuid)
1506 Unit* target =
nullptr;
1529 Player* player =
nullptr;
1544 if (hordeCapturing || allianceCapturing)
1667 linkedTrap->DespawnOrUnsummon();
1679 owner->CastSpell(owner, spellId,
false);
1873 areaId = areaEntry->ParentAreaID;
1896 areaId = areaEntry->ParentAreaID;
1912 TC_LOG_ERROR(
"misc",
"GameObject::SaveToDB failed, cannot get gameobject data!");
1918 if (transport->GetMapIdForSpawning() >= 0)
1919 mapId = transport->GetMapIdForSpawning();
1961 trans->Append(stmt);
1967 stmt->
setString(index++, [&data]() -> std::string
1969 std::ostringstream os;
1972 auto itr = data.spawnDifficulties.begin();
1973 os << int32(*itr++);
1975 for (; itr != data.spawnDifficulties.end(); ++itr)
1976 os <<
',' << int32(*itr);
1979 return std::move(os).str();
2002 trans->Append(stmt);
2012 TC_LOG_ERROR(
"sql.sql",
"Gameobject (GUID: {}) not found in table `gameobject`, can't load. ", spawnId);
2062 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);
2075 if (addToMap && !
GetMap()->AddToMap(
this))
2090 [spawnId, charTrans](
Map* map) ->
void
2093 std::vector<GameObject*> toUnload;
2094 for (auto const& pair : Trinity::Containers::MapEqualRange(map->GetGameObjectBySpawnIdStore(), spawnId))
2095 toUnload.push_back(pair.second);
2096 for (GameObject* obj : toUnload)
2097 map->AddObjectToRemoveList(obj);
2098 map->RemoveRespawnTime(SPAWN_TYPE_GAMEOBJECT, spawnId, charTrans);
2112 trans->Append(stmt);
2117 trans->Append(stmt);
2121 trans->Append(stmt);
2126 trans->Append(stmt);
2131 trans->Append(stmt);
2136 trans->Append(stmt);
2141 trans->Append(stmt);
2145 trans->Append(stmt);
2208 if (
GetGOInfo()->GetServerOnly() && !allowServersideObjects)
2215 return m_goTypeImpl->IsNeverVisibleFor(seer, allowServersideObjects);
2257 if (state->Despawned)
2266 return owner->GetLevelForTarget(target);
2272 return uint8(std::clamp<int16>(player->GetLevel(), userLevels->MinLevel, userLevels->MaxLevel));
2274 if (
Unit const* targetUnit = target->
ToUnit())
2275 return targetUnit->GetLevel();
2409 trapGO->CastSpell(target, trapSpell->
Id);
2438 if (!time_to_restore)
2449 Unit* unitCaster = spellCaster ? spellCaster->
ToUnit() :
nullptr;
2454 TC_LOG_FATAL(
"spell",
"Spell {} has action type NONE in effect {}", spellId, effectIndex);
2521 if (templateAddon !=
nullptr)
2522 artKitValue = templateAddon->
ArtKits[artKitIndex];
2524 if (artKitValue == 0)
2525 TC_LOG_ERROR(
"sql.sql",
"GameObject {} hit by spell {} needs `artkit{}` in `gameobject_template_addon`",
GetEntry(), spellId, artKitIndex);
2545 TC_LOG_ERROR(
"spell",
"Spell {} targeted non-transport gameobject for transport only action \"Go to Floor\" {} in effect {}", spellId,
int32(action), effectIndex);
2581 TC_LOG_ERROR(
"spell",
"Spell {} has unhandled action {} in effect {}", spellId,
int32(action), effectIndex);
2587 m_goTypeImpl->ActivateObject(action, param, spellCaster, spellId, effectIndex);
2607 data =
sObjectMgr->GetGameObjectData(lowguid);
2629 Unit* spellCaster = user;
2632 if (ignoreCastInProgress)
2634 bool addUse =
false;
2644 playerUser->PlayerTalkClass->ClearMenus();
2645 if (
AI()->OnGossipHello(playerUser))
2715 std::vector<Player*> tappers;
2718 tappers.push_back(tapper);
2720 if (tappers.empty())
2721 tappers.push_back(player);
2810 bool found_free_slot =
false;
2816 float x_i =
GetPositionX() + relativeDistance * std::cos(orthogonalOrientation);
2817 float y_i =
GetPositionY() + relativeDistance * std::sin(orthogonalOrientation);
2819 if (!sittingUnit.IsEmpty())
2823 if (chairUser->IsSitState() && chairUser->GetStandState() !=
UNIT_STAND_STATE_SIT && chairUser->GetExactDist2d(x_i, y_i) < 0.1f)
2826 sittingUnit.Clear();
2829 sittingUnit.Clear();
2832 found_free_slot =
true;
2837 if (thisDistance <= lowestDist)
2839 nearest_slot = slot;
2840 lowestDist = thisDistance;
2846 if (found_free_slot)
2851 itr->second = user->
GetGUID();
2904 if (itr.GetSource()->IsAtGroupRewardDistance(
this))
2938 spellCaster =
nullptr;
2956 if (info->
camera.eventID)
2985 TC_LOG_ERROR(
"entities.gameobject",
"Gameobject '{}' ({}) spawned in unknown area (x: {} y: {} z: {} map: {})",
2992 if (!areaContentTuning)
2998 int32 areaFishingLevel =
sObjectMgr->GetFishingBaseSkillLevel(areaEntry);
3005 if (playerFishingLevel < areaFishingLevel)
3007 chance =
int32(pow((
double)playerFishingLevel / areaFishingLevel, 2) * 100);
3012 TC_LOG_DEBUG(
"misc",
"Fishing check (skill {} level: {} area skill level: {} chance {} roll: {}", playerFishingSkill, playerFishingLevel, areaFishingLevel, chance, roll);
3019 if (chance >= roll || fishingPool)
3029 fishingPool->
Use(player, ignoreCastInProgress);
3070 Player* m_ritualOwner =
nullptr;
3075 if (!m_ritualOwner && !owner)
3078 m_ritualOwner = player;
3095 spellCaster = owner;
3102 spellCaster = player;
3119 spellCaster = m_ritualOwner;
3123 if (spellId == 62330)
3173 if (ownerGuid != user->
GetGUID())
3176 ownerGuid = owner->GetCharmerOrOwnerOrOwnGUID();
3183 if (!group || !group->
IsMember(ownerGuid))
3206 if (!targetPlayer || targetPlayer == player || !targetPlayer->
IsInSameRaidWith(player))
3211 if (player->
GetLevel() < userLevels->MaxLevel)
3215 if (targetPlayer->
GetLevel() < targetLevels->MaxLevel)
3218 if (info->
entry == 194097)
3247 spellCaster =
nullptr;
3339 spellCaster =
nullptr;
3366 bool defenderInteract = !owner->IsFriendlyTo(user);
3367 if (defenderInteract && owner->GetGOInfo()->newflag.ReturnonDefenderInteract)
3505 player->
GiveXP(xp,
nullptr);
3530 TC_LOG_ERROR(
"misc",
"GameObject::Use(): unit ({}, name: {}) tries to use object ({}, name: {}) of unknown type ({})",
3540 if (!player->GetQuestRewardStatus(
m_vignette->Data->RewardQuestID))
3543 if (
m_vignette->Data->VisibleTrackingQuestID)
3544 player->SetRewardedQuest(
m_vignette->Data->VisibleTrackingQuestID);
3549 if (
GetGOInfo()->ClearObjectVignetteonOpening())
3561 TC_LOG_DEBUG(
"outdoorpvp",
"WORLD: {} non-dbc spell was handled by OutdoorPvP", spellId);
3570 castResult = spellCaster->
CastSpell(user, spellId, spellArgs);
3572 castResult =
CastSpell(user, spellId, spellArgs);
3616 float dist = std::sqrt(dx*dx + dy*dy);
3619 if (G3D::fuzzyEq(dist, 0.0f))
3622 float sinB = dx / dist;
3623 float cosB = dy / dist;
3624 dx = dist * (cosA * cosB + sinA * sinB);
3625 dy = dist * (cosA * sinB - sinA * cosB);
3651 return std::ranges::any_of(
m_stringIds, [
id](std::string
const* stringId) {
return stringId && *stringId == id; });
3675 if (data->spawnTrackingData && !data->spawnTrackingQuestObjectives.empty())
3690 if (cl->Name.size() > locale && !cl->Name[locale].empty())
3691 return cl->Name[locale];
3708 static const int32 PACK_YZ = 1 << 20;
3709 static const int32 PACK_X = PACK_YZ << 1;
3711 static const int32 PACK_YZ_MASK = (PACK_YZ << 1) - 1;
3712 static const int32 PACK_X_MASK = (PACK_X << 1) - 1;
3723 G3D::Quat rotation(qx, qy, qz, qw);
3750 G3D::Quat worldRotationQuat(worldRotation.
x, worldRotation.
y, worldRotation.
z, worldRotation.
w);
3751 G3D::Quat localRotationQuat(localRotation.
x, localRotation.
y, localRotation.
z, localRotation.
w);
3753 G3D::Quat resultRotation = localRotationQuat * worldRotationQuat;
3755 localRotation = { resultRotation.
x, resultRotation.y, resultRotation.z, resultRotation.w };
3757 return localRotation;
3786 packet.
Owner = player->GetGUID();
3788 player->SendDirectMessage(packet.
Write());
3836 if (modelData->State1Wmo)
3837 modelId = modelData->State1Wmo;
3862 if (modelData->State2Wmo)
3863 modelId = modelData->State2Wmo;
3881 if (modelData->State3Wmo)
3882 modelId = modelData->State3Wmo;
3923 bool collision =
false;
3926 collision = !collision;
3935 std::unique_ptr<Loot> loot(std::move(
m_loot));
3936 std::unordered_map<ObjectGuid, std::unique_ptr<Loot>> personalLoot(std::move(
m_personalLoot));
3939 personalLoot.clear();
3950 if (!loot->isLooted())
4008 bool collision =
false;
4010 collision = !collision;
4021 return *state->State;
4030 perPlayerState.
State = state;
4034 setStateLocal.
State = state;
4054 return modelData->State0NameSet;
4056 return modelData->State1NameSet;
4058 return modelData->State2NameSet;
4060 return modelData->State3NameSet;
4085 m_model->EnableCollision(enable);
4092 bool modelCollisionEnabled;
4095 modelCollisionEnabled =
m_model->IsCollisionEnabled();
4103 std::unique_ptr<GameObjectModel> oldModel = std::exchange(
m_model,
nullptr);
4109 if (modelCollisionEnabled)
4110 m_model->EnableCollision(modelCollisionEnabled);
4135 if (loot->isLooted())
4137 if (!loot->HasAllowedLooter(
GetGUID()) || (!loot->hasItemForAll() && !loot->hasItemFor(player)))
4185 if (requestedObjectMask.IsAnySet())
4188 if (requestedGameObjectMask.IsAnySet())
4192 std::size_t sizePos = buffer.
wpos();
4198 m_objectData->WriteUpdate(requestedObjectMask, buffer, target,
this, ignoreNestedChangesMask);
4201 m_gameObjectData->WriteUpdate(requestedGameObjectMask, buffer, target,
this, ignoreNestedChangesMask);
4227 std::span<uint32 const> result;
4229 result = transport->GetPauseTimes();
4254 return static_cast<Transport const*
>(
this);
4278 if (
GetGOInfo()->GetInteractRadiusOverride())
4279 return float(
GetGOInfo()->GetInteractRadiusOverride()) / 100.0f;
4348 activateAnimKit.
Maintain = !oneshot;
4384 if (ai->OnCapturePointAssaulted(player))
4468 uint32 spellVisualId = 0;
4496 if (customAnim != 0)
4512 bg->SendPacketToAll(packet.
Write());
4578 return controlZone->GetInsidePlayers();
4591 m_perPlayerState = std::make_unique<std::unordered_map<ObjectGuid, PerPlayerState>>();
4602 bool IsSpawned()
const override {
return _owner->isSpawned(); }
4605 bool IsInPhase(
PhaseShift const& phaseShift)
const override {
return _owner->GetPhaseShift().CanSee(phaseShift); }
4606 G3D::Vector3
GetPosition()
const override {
return G3D::Vector3(_owner->GetPositionX(), _owner->GetPositionY(), _owner->GetPositionZ()); }
4607 G3D::Quat
GetRotation()
const override {
return G3D::Quat(_owner->GetLocalRotation().x, _owner->GetLocalRotation().y, _owner->GetLocalRotation().z, _owner->GetLocalRotation().w); }
4609 float GetScale()
const override {
return _owner->GetObjectScale(); }
4657 m_model->IncludeInNavMesh(
true);
4667 std::stringstream sstr;
4695 float minX = displayInfo->GeoBoxMin.X * scale - radius;
4696 float minY = displayInfo->GeoBoxMin.Y * scale - radius;
4697 float minZ = displayInfo->GeoBoxMin.Z * scale - radius;
4698 float maxX = displayInfo->GeoBoxMax.X * scale + radius;
4699 float maxY = displayInfo->GeoBoxMax.Y * scale + radius;
4700 float maxZ = displayInfo->GeoBoxMax.Z * scale + radius;
4703 G3D::Quat worldRotationQuat(worldRotation.
x, worldRotation.
y, worldRotation.
z, worldRotation.
w);
4706 .toWorldSpace(G3D::Box { { minX, minY, minZ }, { maxX, maxY, maxZ } })
4745 for (
auto&& effect : spell->GetEffects())
4747 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
@ GRID_MAP_TYPE_MASK_PLAYER
@ GRID_MAP_TYPE_MASK_CREATURE
#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.
@ TARGET_OBJECT_TYPE_UNIT
@ 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
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
bool IsNeverVisibleFor(WorldObject const *seer, bool allowServersideObjects) const override
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 IsMember(ObjectGuid guid) const
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)
Difficulty GetDifficultyID() const
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
virtual bool IsNeverVisibleFor(WorldObject const *seer, bool allowServersideObjects) const
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
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)
constexpr 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 VisitWorldObjects(WorldObject const *obj, T &visitor, float radius)
static void VisitAllObjects(WorldObject const *obj, T &visitor, float radius)
static void VisitGridObjects(WorldObject const *obj, T &visitor, float radius)
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::@199::@266 raw
bool IsLargeGameObject() const
struct GameObjectTemplate::@199::@248 itemForge
bool IsUsableMounted() const
uint32 GetNoDamageImmune() const
uint32 ObjectDespawnDelay
bool IsGiganticGameObject() const
WorldPacket BuildQueryData(LocaleConstant loc) const
uint32 ProgressEventHorde
void InitializeQueryData()
struct GameObjectTemplate::@199::@211 goober
uint32 CaptureEventAlliance
struct GameObjectTemplate::@199::@207 trap
struct GameObjectTemplate::@199::@208 chair
bool IsInfiniteGameObject() const
bool IsDespawnAtAction() const
struct GameObjectTemplate::@199::@234 destructibleBuilding
struct GameObjectTemplate::@199::@212 transport
struct GameObjectTemplate::@199::@233 barberChair
uint32 CaptureBroadcastHorde
uint32 GetCharges() const
uint32 CaptureBroadcastAlliance
struct GameObjectTemplate::@199::@223 spellCaster
struct GameObjectTemplate::@199::@230 controlZone
uint32 NeutralEventAlliance
struct GameObjectTemplate::@199::@243 capturePoint
uint32 DefendedBroadcastAlliance
uint32 ProgressEventAlliance
uint32 ContestedEventHorde
struct GameObjectTemplate::@199::@244 phaseableMO
struct GameObjectTemplate::@199::@227 flagDrop
uint32 casterTargetSpellTargets
std::string castBarCaption
std::unique_ptr< WorldPacket[]> QueryData
bool IsUsingGroupLootRules() const
uint32 AllowMultiInteract
uint32 AssaultBroadcastHorde
uint32 AssaultBroadcastAlliance
struct GameObjectTemplate::@199::@237 newflag
struct GameObjectTemplate::@199::@251 gatheringNode
struct GameObjectTemplate::@199::@204 chest
struct GameObjectTemplate::@199::@225 flagStand
struct GameObjectTemplate::@199::@219 ritual
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 pushed=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 fromOrientation(float orientation)
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, 14 > ParentRotation
UpdateField< int8, 0, 16 > State
UpdateField< uint32, 0, 5 > SpellVisualID
UpdateField< uint32, 0, 9 > StateWorldEffectsQuestObjectiveID
UpdateField< uint32, 0, 19 > ArtKit
DynamicUpdateField< int32, 0, 2 > EnableDoodadSets
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::@194 Trap
struct GameObjectValue::@197 Building
SpellTargetCheckTypes TargetSearcherCheckType
WorldPackets::Battleground::BattlegroundCapturePointState State
::DestructibleHitpoint const * DestructibleHitpoint
struct GameObjectValue::@198 CapturePoint
struct GameObjectValue::@195 FishingHole