diff options
| author | Shauren <shauren.trinity@gmail.com> | 2022-03-30 18:01:24 +0200 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2022-03-30 18:01:24 +0200 |
| commit | 5eea9883c2c4cc0cf5d5be6fe52644d205a88ca3 (patch) | |
| tree | d58aeff3487987082f755f305f8f15062979e767 /src/server/game | |
| parent | e334fdf3ade7c3df8df9e5730434b67fe1ed019a (diff) | |
Core/GameObjects: Reduce differences between branches part 3 - gameobject updatefield accessors
Diffstat (limited to 'src/server/game')
| -rw-r--r-- | src/server/game/Battlegrounds/Zones/BattlegroundIC.cpp | 6 | ||||
| -rw-r--r-- | src/server/game/Battlegrounds/Zones/BattlegroundSA.cpp | 4 | ||||
| -rw-r--r-- | src/server/game/Entities/GameObject/GameObject.cpp | 54 | ||||
| -rw-r--r-- | src/server/game/Entities/GameObject/GameObject.h | 36 | ||||
| -rw-r--r-- | src/server/game/Entities/Transport/Transport.cpp | 4 | ||||
| -rw-r--r-- | src/server/game/Entities/Transport/Transport.h | 2 | ||||
| -rw-r--r-- | src/server/game/Spells/SpellEffects.cpp | 8 |
7 files changed, 60 insertions, 54 deletions
diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundIC.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundIC.cpp index daca43f5b57..6ff89cfb440 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundIC.cpp +++ b/src/server/game/Battlegrounds/Zones/BattlegroundIC.cpp @@ -240,7 +240,7 @@ void BattlegroundIC::StartingEventOpenDoors() DoorOpen(BG_IC_GO_DOODAD_VR_PORTCULLIS01_2); for (uint8 i = 0; i < MAX_FORTRESS_TELEPORTERS_SPAWNS; ++i) - GetBGObject(BG_IC_Teleporters[i].type)->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); + GetBGObject(BG_IC_Teleporters[i].type)->RemoveFlag(GO_FLAG_NOT_SELECTABLE); for (uint8 i = 0; i < MAX_FORTRESS_TELEPORTER_EFFECTS_SPAWNS; ++i) GetBGObject(BG_IC_TeleporterEffects[i].type)->SetGoState(GO_STATE_ACTIVE); @@ -809,12 +809,12 @@ void BattlegroundIC::DestroyGate(Player* player, GameObject* go) if (player->GetTeamId() == TEAM_ALLIANCE) { DoorOpen(BG_IC_GO_HORDE_KEEP_PORTCULLIS); - GetBGObject(BG_IC_GO_HORDE_BANNER)->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); + GetBGObject(BG_IC_GO_HORDE_BANNER)->RemoveFlag(GO_FLAG_NOT_SELECTABLE); } else { DoorOpen(BG_IC_GO_DOODAD_PORTCULLISACTIVE02); - GetBGObject(BG_IC_GO_ALLIANCE_BANNER)->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); + GetBGObject(BG_IC_GO_ALLIANCE_BANNER)->RemoveFlag(GO_FLAG_NOT_SELECTABLE); } uint32 textId; diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundSA.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundSA.cpp index b3a1c1d0b4d..f6b997c2527 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundSA.cpp +++ b/src/server/game/Battlegrounds/Zones/BattlegroundSA.cpp @@ -766,9 +766,9 @@ void BattlegroundSA::UpdateObjectInteractionFlags(uint32 objectId) if (GameObject* go = GetBGObject(objectId)) { if (CanInteractWithObject(objectId)) - go->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); + go->RemoveFlag(GO_FLAG_NOT_SELECTABLE); else - go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); + go->SetFlag(GO_FLAG_NOT_SELECTABLE); } } 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; }; diff --git a/src/server/game/Entities/Transport/Transport.cpp b/src/server/game/Entities/Transport/Transport.cpp index f1d45b935a4..6e4b0ed7857 100644 --- a/src/server/game/Entities/Transport/Transport.cpp +++ b/src/server/game/Entities/Transport/Transport.cpp @@ -87,7 +87,7 @@ bool Transport::Create(ObjectGuid::LowType guidlow, uint32 entry, uint32 mapid, if (GameObjectOverride const* goOverride = GetGameObjectOverride()) { SetFaction(goOverride->Faction); - SetUInt32Value(GAMEOBJECT_FLAGS, goOverride->Flags); + ReplaceAllFlags(GameObjectFlags(goOverride->Flags)); } m_goValue.Transport.PathProgress = 0; @@ -102,7 +102,7 @@ bool Transport::Create(ObjectGuid::LowType guidlow, uint32 entry, uint32 mapid, SetLocalRotation(0.0f, 0.0f, 0.0f, 1.0f); SetParentRotation(QuaternionData()); - m_model = CreateModel(); + CreateModel(); return true; } diff --git a/src/server/game/Entities/Transport/Transport.h b/src/server/game/Entities/Transport/Transport.h index 6f2b30f7408..cd88a4ede42 100644 --- a/src/server/game/Entities/Transport/Transport.h +++ b/src/server/game/Entities/Transport/Transport.h @@ -80,7 +80,7 @@ class TC_GAME_API Transport : public GameObject, public TransportBase } uint32 GetTransportPeriod() const override { return GetUInt32Value(GAMEOBJECT_LEVEL); } - void SetPeriod(uint32 period) { SetUInt32Value(GAMEOBJECT_LEVEL, period); } + void SetPeriod(uint32 period) { SetLevel(period); } uint32 GetTimer() const { return GetGOValue()->Transport.PathProgress; } KeyFrameVec const& GetKeyFrames() const { return _transportInfo->keyFrames; } diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp index 5123cad6a23..7140403ce95 100644 --- a/src/server/game/Spells/SpellEffects.cpp +++ b/src/server/game/Spells/SpellEffects.cpp @@ -1871,9 +1871,9 @@ void Spell::EffectOpenLock() if (gameObjTarget) { // Allow one skill-up until respawned - if (!gameObjTarget->IsInSkillupList(player->GetGUID().GetCounter()) && + if (!gameObjTarget->IsInSkillupList(player->GetGUID()) && player->UpdateGatherSkill(skillId, pureSkillValue, reqSkillValue)) - gameObjTarget->AddToSkillupList(player->GetGUID().GetCounter()); + gameObjTarget->AddToSkillupList(player->GetGUID()); } else if (itemTarget) { @@ -3657,7 +3657,7 @@ void Spell::EffectDuel() } pGameObj->SetFaction(caster->GetFaction()); - pGameObj->SetUInt32Value(GAMEOBJECT_LEVEL, caster->GetLevel() + 1); + pGameObj->SetLevel(caster->GetLevel() + 1); int32 duration = m_spellInfo->GetDuration(); pGameObj->SetRespawnTime(duration > 0 ? duration/IN_MILLISECONDS : 0); pGameObj->SetSpellId(m_spellInfo->Id); @@ -4000,7 +4000,7 @@ void Spell::EffectSummonObject() } go->SetFaction(unitCaster->GetFaction()); - go->SetUInt32Value(GAMEOBJECT_LEVEL, unitCaster->GetLevel()); + go->SetLevel(unitCaster->GetLevel()); int32 duration = m_spellInfo->GetDuration(); go->SetRespawnTime(duration > 0 ? duration / IN_MILLISECONDS : 0); go->SetSpellId(m_spellInfo->Id); |
