aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Entities/GameObject
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2022-03-30 18:01:24 +0200
committerShauren <shauren.trinity@gmail.com>2022-03-30 18:01:24 +0200
commit5eea9883c2c4cc0cf5d5be6fe52644d205a88ca3 (patch)
treed58aeff3487987082f755f305f8f15062979e767 /src/server/game/Entities/GameObject
parente334fdf3ade7c3df8df9e5730434b67fe1ed019a (diff)
Core/GameObjects: Reduce differences between branches part 3 - gameobject updatefield accessors
Diffstat (limited to 'src/server/game/Entities/GameObject')
-rw-r--r--src/server/game/Entities/GameObject/GameObject.cpp54
-rw-r--r--src/server/game/Entities/GameObject/GameObject.h36
2 files changed, 48 insertions, 42 deletions
diff --git a/src/server/game/Entities/GameObject/GameObject.cpp b/src/server/game/Entities/GameObject/GameObject.cpp
index 7d0c92b5335..8e9d541e2c6 100644
--- a/src/server/game/Entities/GameObject/GameObject.cpp
+++ b/src/server/game/Entities/GameObject/GameObject.cpp
@@ -323,7 +323,7 @@ bool GameObject::Create(ObjectGuid::LowType guidlow, uint32 name_id, Map* map, u
if (GameObjectOverride const* goOverride = GetGameObjectOverride())
{
SetFaction(goOverride->Faction);
- SetUInt32Value(GAMEOBJECT_FLAGS, goOverride->Flags);
+ ReplaceAllFlags(GameObjectFlags(goOverride->Flags));
}
SetEntry(goinfo->entry);
@@ -333,7 +333,7 @@ bool GameObject::Create(ObjectGuid::LowType guidlow, uint32 name_id, Map* map, u
SetDisplayId(goinfo->displayId);
- m_model = CreateModel();
+ CreateModel();
// GAMEOBJECT_BYTES_1, index at 0, 1, 2 and 3
SetGoType(GameobjectTypes(goinfo->type));
m_prevGoState = go_state;
@@ -352,7 +352,7 @@ bool GameObject::Create(ObjectGuid::LowType guidlow, uint32 name_id, Map* map, u
SetGoAnimProgress(255);
break;
case GAMEOBJECT_TYPE_TRANSPORT:
- SetUInt32Value(GAMEOBJECT_LEVEL, goinfo->transport.pause);
+ SetLevel(goinfo->transport.pause);
SetGoState(goinfo->transport.startOpen ? GO_STATE_ACTIVE : GO_STATE_READY);
SetGoAnimProgress(animprogress);
m_goValue.Transport.PathProgress = 0;
@@ -505,7 +505,7 @@ void GameObject::Update(uint32 diff)
if (caster && caster->GetTypeId() == TYPEID_PLAYER)
{
SetGoState(GO_STATE_ACTIVE);
- SetUInt32Value(GAMEOBJECT_FLAGS, GO_FLAG_NODESPAWN);
+ ReplaceAllFlags(GO_FLAG_NODESPAWN);
UpdateData udata;
WorldPacket packet;
@@ -694,7 +694,7 @@ void GameObject::Update(uint32 diff)
case GAMEOBJECT_TYPE_GOOBER:
if (GameTime::GetGameTimeMS() >= m_cooldownTime)
{
- RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_IN_USE);
+ RemoveFlag(GO_FLAG_IN_USE);
SetLootState(GO_JUST_DEACTIVATED);
}
break;
@@ -823,7 +823,7 @@ void GameObject::Update(uint32 diff)
SendObjectDeSpawnAnim(GetGUID());
//reset flags
if (GameObjectOverride const* goOverride = GetGameObjectOverride())
- SetUInt32Value(GAMEOBJECT_FLAGS, goOverride->Flags);
+ ReplaceAllFlags(GameObjectFlags(goOverride->Flags));
}
if (!m_respawnDelayTime)
@@ -918,7 +918,7 @@ void GameObject::Delete()
SetGoState(GO_STATE_READY);
if (GameObjectOverride const* goOverride = GetGameObjectOverride())
- SetUInt32Value(GAMEOBJECT_FLAGS, goOverride->Flags);
+ ReplaceAllFlags(GameObjectFlags(goOverride->Flags));
uint32 poolid = GetSpawnId() ? sPoolMgr->IsPartOfAPool<GameObject>(GetSpawnId()) : 0;
if (poolid)
@@ -1069,7 +1069,7 @@ bool GameObject::LoadFromDB(ObjectGuid::LowType spawnId, Map* map, bool addToMap
if (!GetGOInfo()->GetDespawnPossibility() && !GetGOInfo()->IsDespawnAtAction())
{
- SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NODESPAWN);
+ SetFlag(GO_FLAG_NODESPAWN);
m_respawnDelayTime = 0;
m_respawnTime = 0;
}
@@ -1411,7 +1411,7 @@ void GameObject::ResetDoorOrButton()
if (m_lootState == GO_READY || m_lootState == GO_JUST_DEACTIVATED)
return;
- RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_IN_USE);
+ RemoveFlag(GO_FLAG_IN_USE);
SetGoState(m_prevGoState);
SetLootState(GO_JUST_DEACTIVATED);
@@ -1452,8 +1452,10 @@ void GameObject::ActivateObject(GameObjectActions action, WorldObject* spellCast
Use(unitCaster);
break;
case GameObjectActions::Unlock:
+ RemoveFlag(GO_FLAG_LOCKED);
+ break;
case GameObjectActions::Lock:
- ApplyModFlag(GAMEOBJECT_FLAGS, GO_FLAG_LOCKED, action == GameObjectActions::Lock);
+ SetFlag(GO_FLAG_LOCKED);
break;
case GameObjectActions::Open:
if (unitCaster)
@@ -1463,7 +1465,7 @@ void GameObject::ActivateObject(GameObjectActions action, WorldObject* spellCast
if (unitCaster)
{
UseDoorOrButton(0, false, unitCaster);
- RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_LOCKED);
+ RemoveFlag(GO_FLAG_LOCKED);
}
break;
case GameObjectActions::Close:
@@ -1486,12 +1488,14 @@ void GameObject::ActivateObject(GameObjectActions action, WorldObject* spellCast
DespawnOrUnsummon();
break;
case GameObjectActions::MakeInert:
+ SetFlag(GO_FLAG_NOT_SELECTABLE);
+ break;
case GameObjectActions::MakeActive:
- ApplyModFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE, action == GameObjectActions::MakeInert);
+ RemoveFlag(GO_FLAG_NOT_SELECTABLE);
break;
case GameObjectActions::CloseAndLock:
ResetDoorOrButton();
- SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_LOCKED);
+ SetFlag(GO_FLAG_LOCKED);
break;
case GameObjectActions::UseArtKit0:
case GameObjectActions::UseArtKit1:
@@ -1548,9 +1552,9 @@ void GameObject::SetGoArtKit(uint8 artkit, GameObject* go, ObjectGuid::LowType l
void GameObject::SwitchDoorOrButton(bool activate, bool alternative /* = false */)
{
if (activate)
- SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_IN_USE);
+ SetFlag(GO_FLAG_IN_USE);
else
- RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_IN_USE);
+ RemoveFlag(GO_FLAG_IN_USE);
if (GetGoState() == GO_STATE_READY) //if closed -> open
SetGoState(alternative ? GO_STATE_DESTROYED : GO_STATE_ACTIVE);
@@ -1749,7 +1753,7 @@ void GameObject::Use(Unit* user)
if (uint32 trapEntry = info->goober.linkedTrapId)
TriggeringLinkedGameObject(trapEntry, user);
- SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_IN_USE);
+ SetFlag(GO_FLAG_IN_USE);
SetLootState(GO_ACTIVATED, user);
// this appear to be ok, however others exist in addition to this that should have custom (ex: 190510, 188692, 187389)
@@ -2351,7 +2355,7 @@ void GameObject::SetDestructibleState(GameObjectDestructibleState state, WorldOb
switch (state)
{
case GO_DESTRUCTIBLE_INTACT:
- RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_DAMAGED | GO_FLAG_DESTROYED);
+ RemoveFlag(GO_FLAG_DAMAGED | GO_FLAG_DESTROYED);
SetDisplayId(m_goInfo->displayId);
if (setHealth)
{
@@ -2365,8 +2369,8 @@ void GameObject::SetDestructibleState(GameObjectDestructibleState state, WorldOb
EventInform(m_goInfo->building.damagedEvent, attackerOrHealer);
AI()->Damaged(attackerOrHealer, m_goInfo->building.damagedEvent);
- RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_DESTROYED);
- SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_DAMAGED);
+ RemoveFlag(GO_FLAG_DESTROYED);
+ SetFlag(GO_FLAG_DAMAGED);
uint32 modelId = m_goInfo->displayId;
if (DestructibleModelDataEntry const* modelData = sDestructibleModelDataStore.LookupEntry(m_goInfo->building.destructibleData))
@@ -2394,8 +2398,8 @@ void GameObject::SetDestructibleState(GameObjectDestructibleState state, WorldOb
if (Battleground* bg = player->GetBattleground())
bg->DestroyGate(player, this);
- RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_DAMAGED);
- SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_DESTROYED);
+ RemoveFlag(GO_FLAG_DAMAGED);
+ SetFlag(GO_FLAG_DESTROYED);
uint32 modelId = m_goInfo->displayId;
if (DestructibleModelDataEntry const* modelData = sDestructibleModelDataStore.LookupEntry(m_goInfo->building.destructibleData))
@@ -2414,7 +2418,7 @@ void GameObject::SetDestructibleState(GameObjectDestructibleState state, WorldOb
case GO_DESTRUCTIBLE_REBUILDING:
{
EventInform(m_goInfo->building.rebuildingEvent, attackerOrHealer);
- RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_DAMAGED | GO_FLAG_DESTROYED);
+ RemoveFlag(GO_FLAG_DAMAGED | GO_FLAG_DESTROYED);
uint32 modelId = m_goInfo->displayId;
if (DestructibleModelDataEntry const* modelData = sDestructibleModelDataStore.LookupEntry(m_goInfo->building.destructibleData))
@@ -2527,7 +2531,7 @@ void GameObject::UpdateModel()
if (GetMap()->ContainsGameObjectModel(*m_model))
GetMap()->RemoveGameObjectModel(*m_model);
delete m_model;
- m_model = CreateModel();
+ CreateModel();
if (m_model)
GetMap()->InsertGameObjectModel(*m_model);
}
@@ -2762,9 +2766,9 @@ private:
GameObject* _owner;
};
-GameObjectModel* GameObject::CreateModel()
+void GameObject::CreateModel()
{
- return GameObjectModel::Create(std::make_unique<GameObjectModelOwnerImpl>(this), sWorld->GetDataPath());
+ m_model = GameObjectModel::Create(std::make_unique<GameObjectModelOwnerImpl>(this), sWorld->GetDataPath());
}
std::string GameObject::GetDebugInfo() const
diff --git a/src/server/game/Entities/GameObject/GameObject.h b/src/server/game/Entities/GameObject/GameObject.h
index 0646b53b85f..f3687c19154 100644
--- a/src/server/game/Entities/GameObject/GameObject.h
+++ b/src/server/game/Entities/GameObject/GameObject.h
@@ -20,7 +20,6 @@
#include "Object.h"
#include "GridObject.h"
-#include "DatabaseEnvFwd.h"
#include "GameObjectData.h"
#include "Loot.h"
#include "MapObject.h"
@@ -116,7 +115,7 @@ class TC_GAME_API GameObject : public WorldObject, public GridObject<GameObject>
QuaternionData GetWorldRotation() const;
// overwrite WorldObject function for proper name localization
- std::string const& GetNameForLocaleIdx(LocaleConstant locale_idx) const override;
+ std::string const& GetNameForLocaleIdx(LocaleConstant locale) const override;
void SaveToDB();
void SaveToDB(uint32 mapid, uint8 spawnMask, uint32 phaseMask);
@@ -126,7 +125,7 @@ class TC_GAME_API GameObject : public WorldObject, public GridObject<GameObject>
void SetOwnerGUID(ObjectGuid owner)
{
// Owner already found and different than expected owner - remove object from old owner
- if (owner && GetOwnerGUID() && GetOwnerGUID() != owner)
+ if (!owner.IsEmpty() && !GetOwnerGUID().IsEmpty() && GetOwnerGUID() != owner)
{
ABORT();
}
@@ -161,6 +160,13 @@ class TC_GAME_API GameObject : public WorldObject, public GridObject<GameObject>
void Delete();
void getFishLoot(Loot* loot, Player* loot_owner);
void getFishLootJunk(Loot* loot, Player* loot_owner);
+
+ bool HasFlag(GameObjectFlags flags) const { return Object::HasFlag(GAMEOBJECT_FLAGS, flags); }
+ void SetFlag(GameObjectFlags flags) { Object::SetFlag(GAMEOBJECT_FLAGS, flags); }
+ void RemoveFlag(GameObjectFlags flags) { Object::RemoveFlag(GAMEOBJECT_FLAGS, flags); }
+ void ReplaceAllFlags(GameObjectFlags flags) { SetUInt32Value(GAMEOBJECT_FLAGS, flags); }
+
+ void SetLevel(uint32 level) { SetUInt32Value(GAMEOBJECT_LEVEL, level); }
GameobjectTypes GetGoType() const { return GameobjectTypes(GetByteValue(GAMEOBJECT_BYTES_1, 1)); }
void SetGoType(GameobjectTypes type) { SetByteValue(GAMEOBJECT_BYTES_1, 1, type); }
GOState GetGoState() const { return GOState(GetByteValue(GAMEOBJECT_BYTES_1, 0)); }
@@ -191,14 +197,10 @@ class TC_GAME_API GameObject : public WorldObject, public GridObject<GameObject>
void SetLootGenerationTime();
uint32 GetLootGenerationTime() const { return m_lootGenerationTime; }
- void AddToSkillupList(ObjectGuid::LowType PlayerGuidLow) { m_SkillupList.push_back(PlayerGuidLow); }
- bool IsInSkillupList(ObjectGuid::LowType PlayerGuidLow) const
+ void AddToSkillupList(ObjectGuid const& PlayerGuidLow) { m_SkillupList.insert(PlayerGuidLow); }
+ bool IsInSkillupList(ObjectGuid const& playerGuid) const
{
- for (std::list<ObjectGuid::LowType>::const_iterator i = m_SkillupList.begin(); i != m_SkillupList.end(); ++i)
- if (*i == PlayerGuidLow)
- return true;
-
- return false;
+ return m_SkillupList.count(playerGuid) > 0;
}
void ClearSkillupList() { m_SkillupList.clear(); }
@@ -206,7 +208,7 @@ class TC_GAME_API GameObject : public WorldObject, public GridObject<GameObject>
void AddUse() { ++m_usetimes; }
uint32 GetUseCount() const { return m_usetimes; }
- uint32 GetUniqueUseCount() const { return m_unique_users.size(); }
+ uint32 GetUniqueUseCount() const { return uint32(m_unique_users.size()); }
void SaveRespawnTime(uint32 forceDelay = 0);
@@ -234,7 +236,6 @@ class TC_GAME_API GameObject : public WorldObject, public GridObject<GameObject>
void TriggeringLinkedGameObject(uint32 trapEntry, Unit* target);
bool IsNeverVisible() const override;
-
bool IsAlwaysVisibleFor(WorldObject const* seer) const override;
bool IsInvisibleDueToDespawn() const override;
@@ -250,9 +251,9 @@ class TC_GAME_API GameObject : public WorldObject, public GridObject<GameObject>
void SetDestructibleState(GameObjectDestructibleState state, WorldObject* attackerOrHealer = nullptr, bool setHealth = false);
GameObjectDestructibleState GetDestructibleState() const
{
- if (HasFlag(GAMEOBJECT_FLAGS, GO_FLAG_DESTROYED))
+ if (HasFlag(GO_FLAG_DESTROYED))
return GO_DESTRUCTIBLE_DESTROYED;
- if (HasFlag(GAMEOBJECT_FLAGS, GO_FLAG_DAMAGED))
+ if (HasFlag(GO_FLAG_DAMAGED))
return GO_DESTRUCTIBLE_DAMAGED;
return GO_DESTRUCTIBLE_INTACT;
}
@@ -303,7 +304,7 @@ class TC_GAME_API GameObject : public WorldObject, public GridObject<GameObject>
std::string GetDebugInfo() const override;
protected:
- GameObjectModel* CreateModel();
+ void CreateModel();
void UpdateModel(); // updates model in case displayId were changed
uint32 m_spellId;
time_t m_respawnTime; // (secs) time of next respawn (or despawn if GO have owner()),
@@ -318,9 +319,9 @@ class TC_GAME_API GameObject : public WorldObject, public GridObject<GameObject>
// For traps this: spell casting cooldown, for doors/buttons: reset time.
GOState m_prevGoState; // What state to set whenever resetting
- std::list<ObjectGuid::LowType> m_SkillupList;
+ GuidSet m_SkillupList;
- ObjectGuid m_ritualOwnerGUID; // used for GAMEOBJECT_TYPE_SUMMONING_RITUAL where GO is not summoned (no owner)
+ ObjectGuid m_ritualOwnerGUID; // used for GAMEOBJECT_TYPE_RITUAL where GO is not summoned (no owner)
GuidSet m_unique_users;
uint32 m_usetimes;
@@ -355,6 +356,7 @@ class TC_GAME_API GameObject : public WorldObject, public GridObject<GameObject>
//! Following check does check 3d distance
return IsInRange(obj->GetPositionX(), obj->GetPositionY(), obj->GetPositionZ(), dist2compare);
}
+
GameObjectAI* m_AI;
bool m_respawnCompatibilityMode;
};