diff options
| author | Vincent-Michael <Vincent_Michael@gmx.de> | 2014-04-26 12:35:21 +0200 |
|---|---|---|
| committer | Vincent-Michael <Vincent_Michael@gmx.de> | 2014-04-26 12:35:21 +0200 |
| commit | 5586950decc45c732ad0d733e91d1c52fb01f9ee (patch) | |
| tree | 87d7bc4a7c35d8b850474d2ec3be8a08906c13d0 /src/server/game/Entities/GameObject | |
| parent | dc4c67ab40ad31414c23133db93f97458ade6930 (diff) | |
| parent | 938947880aa22054540fe3052a1f9ec98033d466 (diff) | |
Merge branch 'master' of github.com:TrinityCore/TrinityCore into 4.3.4
Diffstat (limited to 'src/server/game/Entities/GameObject')
| -rw-r--r-- | src/server/game/Entities/GameObject/GameObject.cpp | 35 | ||||
| -rw-r--r-- | src/server/game/Entities/GameObject/GameObject.h | 2 |
2 files changed, 14 insertions, 23 deletions
diff --git a/src/server/game/Entities/GameObject/GameObject.cpp b/src/server/game/Entities/GameObject/GameObject.cpp index 5afbdd5468a..e33ffb0c5eb 100644 --- a/src/server/game/Entities/GameObject/GameObject.cpp +++ b/src/server/game/Entities/GameObject/GameObject.cpp @@ -1275,10 +1275,8 @@ void GameObject::Use(Unit* user) { GameObjectTemplate const* info = GetGOInfo(); - if (user->GetTypeId() == TYPEID_PLAYER) + if (Player* player = user->ToPlayer()) { - Player* player = user->ToPlayer(); - if (info->goober.pageId) // show page... { WorldPacket data(SMSG_GAMEOBJECT_PAGETEXT, 8); @@ -1295,7 +1293,7 @@ void GameObject::Use(Unit* user) { TC_LOG_DEBUG("maps.script", "Goober ScriptStart id %u for GO entry %u (GUID %u).", info->goober.eventId, GetEntry(), GetDBTableGUIDLow()); GetMap()->ScriptsStart(sEventScripts, info->goober.eventId, player, this); - EventInform(info->goober.eventId); + EventInform(info->goober.eventId, user); } // possible quest objective for active quests @@ -1306,9 +1304,6 @@ void GameObject::Use(Unit* user) break; } - if (Battleground* bg = player->GetBattleground()) - bg->EventPlayerUsedGO(player, this); - player->KillCreditGO(info->entry, GetGUID()); } @@ -1804,7 +1799,7 @@ bool GameObject::IsInRange(float x, float y, float z, float radius) const && dz < info->maxZ + radius && dz > info->minZ - radius; } -void GameObject::EventInform(uint32 eventId) +void GameObject::EventInform(uint32 eventId, WorldObject* invoker /*= NULL*/) { if (!eventId) return; @@ -1812,8 +1807,12 @@ void GameObject::EventInform(uint32 eventId) if (AI()) AI()->EventInform(eventId); - if (m_zoneScript) - m_zoneScript->ProcessEvent(this, eventId); + if (GetZoneScript()) + GetZoneScript()->ProcessEvent(this, eventId); + + if (BattlegroundMap* bgMap = GetMap()->ToBattlegroundMap()) + if (bgMap->GetBG()) + bgMap->GetBG()->ProcessEvent(this, eventId, invoker); } // overwrite WorldObject function for proper name localization @@ -1879,7 +1878,7 @@ void GameObject::ModifyHealth(int32 change, Unit* attackerOrHealer /*= NULL*/, u // Set the health bar, value = 255 * healthPct; SetGoAnimProgress(m_goValue.Building.Health * 255 / m_goValue.Building.MaxHealth); - Player* player = attackerOrHealer->GetCharmerOrOwnerPlayerOrPlayerItself(); + Player* player = attackerOrHealer ? attackerOrHealer->GetCharmerOrOwnerPlayerOrPlayerItself() : NULL; // dealing damage, send packet if (player) @@ -1928,11 +1927,8 @@ void GameObject::SetDestructibleState(GameObjectDestructibleState state, Player* break; case GO_DESTRUCTIBLE_DAMAGED: { - EventInform(m_goInfo->building.damagedEvent); + EventInform(m_goInfo->building.damagedEvent, eventInvoker); sScriptMgr->OnGameObjectDamaged(this, eventInvoker); - if (eventInvoker) - if (Battleground* bg = eventInvoker->GetBattleground()) - bg->EventPlayerDamagedGO(eventInvoker, this, m_goInfo->building.damagedEvent); RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_DESTROYED); SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_DAMAGED); @@ -1957,15 +1953,10 @@ void GameObject::SetDestructibleState(GameObjectDestructibleState state, Player* case GO_DESTRUCTIBLE_DESTROYED: { sScriptMgr->OnGameObjectDestroyed(this, eventInvoker); - EventInform(m_goInfo->building.destroyedEvent); + EventInform(m_goInfo->building.destroyedEvent, eventInvoker); if (eventInvoker) - { if (Battleground* bg = eventInvoker->GetBattleground()) - { - bg->EventPlayerDamagedGO(eventInvoker, this, m_goInfo->building.destroyedEvent); bg->DestroyGate(eventInvoker, this); - } - } RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_DAMAGED); SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_DESTROYED); @@ -1986,7 +1977,7 @@ void GameObject::SetDestructibleState(GameObjectDestructibleState state, Player* } case GO_DESTRUCTIBLE_REBUILDING: { - EventInform(m_goInfo->building.rebuildingEvent); + EventInform(m_goInfo->building.rebuildingEvent, eventInvoker); RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_DAMAGED | GO_FLAG_DESTROYED); uint32 modelId = m_goInfo->displayId; diff --git a/src/server/game/Entities/GameObject/GameObject.h b/src/server/game/Entities/GameObject/GameObject.h index 6a411e3b4a2..68a5aba619b 100644 --- a/src/server/game/Entities/GameObject/GameObject.h +++ b/src/server/game/Entities/GameObject/GameObject.h @@ -807,7 +807,7 @@ class GameObject : public WorldObject, public GridObject<GameObject>, public Map return GO_DESTRUCTIBLE_INTACT; } - void EventInform(uint32 eventId); + void EventInform(uint32 eventId, WorldObject* invoker = NULL); uint64 GetRotation() const { return m_rotation; } virtual uint32 GetScriptId() const { return GetGOInfo()->ScriptId; } |
