diff options
Diffstat (limited to 'src')
6 files changed, 32 insertions, 49 deletions
diff --git a/src/server/game/Battlegrounds/Battleground.h b/src/server/game/Battlegrounds/Battleground.h index fdc7c5aafdc..086efb0f59d 100755 --- a/src/server/game/Battlegrounds/Battleground.h +++ b/src/server/game/Battlegrounds/Battleground.h @@ -256,15 +256,6 @@ enum BattlegroundStartingEventsIds }; #define BG_STARTING_EVENT_COUNT 4 -enum BG_OBJECT_DMG_HIT_TYPE -{ - BG_OBJECT_DMG_HIT_TYPE_JUST_DAMAGED = 0, - BG_OBJECT_DMG_HIT_TYPE_DAMAGED = 1, - BG_OBJECT_DMG_HIT_TYPE_JUST_HIGH_DAMAGED = 2, - BG_OBJECT_DMG_HIT_TYPE_HIGH_DAMAGED = 3, - BG_OBJECT_DMG_HIT_TYPE_JUST_DESTROYED = 4 -}; - enum GroupJoinBattlegroundResult { // positive values are indexes in BattlemasterList.dbc @@ -527,7 +518,7 @@ class Battleground virtual void EventPlayerCapturedFlag(Player* /*player*/) {} void EventPlayerLoggedIn(Player* player); void EventPlayerLoggedOut(Player* player); - virtual void EventPlayerDamagedGO(Player* /*plr*/, GameObject* /*go*/, uint8 /*hitType*/, uint32 /*destroyedEvent*/) {} + virtual void EventPlayerDamagedGO(Player* /*plr*/, GameObject* /*go*/, uint32 /*eventType*/) {} virtual void EventPlayerUsedGO(Player* /*player*/, GameObject* /*go*/){} // this function can be used by spell to interact with the BG map diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundIC.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundIC.cpp index 3b091dd9594..03406a92a62 100755 --- a/src/server/game/Battlegrounds/Zones/BattlegroundIC.cpp +++ b/src/server/game/Battlegrounds/Zones/BattlegroundIC.cpp @@ -853,7 +853,7 @@ void BattlegroundIC::DestroyGate(Player* pl, GameObject* go, uint32 /*destroyedE SendMessage2ToAll(lang_entry,CHAT_MSG_BG_SYSTEM_NEUTRAL,NULL,(pl->GetTeamId() == TEAM_ALLIANCE ? LANG_BG_IC_HORDE_KEEP : LANG_BG_IC_ALLIANCE_KEEP)); } -void BattlegroundIC::EventPlayerDamagedGO(Player* /*plr*/, GameObject* /*go*/, uint8 /*hitType*/, uint32 /*destroyedEvent*/) +void BattlegroundIC::EventPlayerDamagedGO(Player* /*plr*/, GameObject* /*go*/, uint32 /*eventType*/) { } diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundIC.h b/src/server/game/Battlegrounds/Zones/BattlegroundIC.h index df702d317e3..662e0f27c31 100755 --- a/src/server/game/Battlegrounds/Zones/BattlegroundIC.h +++ b/src/server/game/Battlegrounds/Zones/BattlegroundIC.h @@ -878,7 +878,7 @@ class BattlegroundIC : public Battleground void EndBattleground(uint32 winner); void EventPlayerClickedOnFlag(Player *source, GameObject* /*target_obj*/); - void EventPlayerDamagedGO(Player* /*plr*/, GameObject* go, uint8 hitType, uint32 destroyedEvent); + void EventPlayerDamagedGO(Player* /*plr*/, GameObject* go, uint32 eventType); void DestroyGate(Player* pl, GameObject* /*go*/, uint32 destroyedEvent); virtual WorldSafeLocsEntry const* GetClosestGraveYard(Player* player); diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundSA.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundSA.cpp index 07799c43fc7..d8a9ff495dd 100755 --- a/src/server/game/Battlegrounds/Zones/BattlegroundSA.cpp +++ b/src/server/game/Battlegrounds/Zones/BattlegroundSA.cpp @@ -524,36 +524,30 @@ void BattlegroundSA::TeleportPlayers() } } -void BattlegroundSA::EventPlayerDamagedGO(Player* /*plr*/, GameObject* go, uint8 hitType, uint32 destroyedEvent) +void BattlegroundSA::EventPlayerDamagedGO(Player* /*plr*/, GameObject* go, uint32 eventType) { if (!go || !go->GetGOInfo()) return; - switch(hitType) + if (eventType == go->GetGOInfo()->building.damagedEvent) { - case BG_OBJECT_DMG_HIT_TYPE_JUST_DAMAGED://under attack - SendWarningToAll(LANG_BG_SA_IS_UNDER_ATTACK, go->GetGOInfo()->name); - break; - case BG_OBJECT_DMG_HIT_TYPE_DAMAGED: - break; - case BG_OBJECT_DMG_HIT_TYPE_JUST_HIGH_DAMAGED: - { - uint32 i = GetGateIDFromDestroyEventID(destroyedEvent); - GateStatus[i] = BG_SA_GATE_DAMAGED; - uint32 uws = GetWorldStateFromGateID(i); - if (uws) - UpdateWorldState(uws, GateStatus[i]); - break; - } - case BG_OBJECT_DMG_HIT_TYPE_HIGH_DAMAGED: - break; - case BG_OBJECT_DMG_HIT_TYPE_JUST_DESTROYED://handled at DestroyGate() - if (destroyedEvent == 19837) - SendWarningToAll(LANG_BG_SA_CHAMBER_BREACHED); - else - SendWarningToAll(LANG_BG_SA_WAS_DESTROYED, go->GetGOInfo()->name); - break; + uint32 i = GetGateIDFromDestroyEventID(eventType); + GateStatus[i] = BG_SA_GATE_DAMAGED; + uint32 uws = GetWorldStateFromGateID(i); + if (uws) + UpdateWorldState(uws, GateStatus[i]); + } + + if (eventType == go->GetGOInfo()->building.destroyedEvent) + { + if (go->GetGOInfo()->building.destroyedEvent == 19837) + SendWarningToAll(LANG_BG_SA_CHAMBER_BREACHED); + else + SendWarningToAll(LANG_BG_SA_WAS_DESTROYED, go->GetGOInfo()->name); } + + if (eventType == go->GetGOInfo()->building.damageEvent) + SendWarningToAll(LANG_BG_SA_IS_UNDER_ATTACK, go->GetGOInfo()->name); } void BattlegroundSA::HandleKillUnit(Creature* unit, Player* killer) diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundSA.h b/src/server/game/Battlegrounds/Zones/BattlegroundSA.h index 61d17b37941..fbfed1a3f56 100755 --- a/src/server/game/Battlegrounds/Zones/BattlegroundSA.h +++ b/src/server/game/Battlegrounds/Zones/BattlegroundSA.h @@ -437,7 +437,7 @@ class BattlegroundSA : public Battleground /// Called for generate packet contain worldstate data virtual void FillInitialWorldStates(WorldPacket& data); /// Called when a player deal damage to building (door) - virtual void EventPlayerDamagedGO(Player* plr, GameObject* go, uint8 hitType, uint32 destroyedEvent); + virtual void EventPlayerDamagedGO(Player* plr, GameObject* go, uint32 eventType); /// Called when a player kill a unit in bg virtual void HandleKillUnit(Creature* unit, Player* killer); /// Return the nearest graveyard where player can respawn diff --git a/src/server/game/Entities/GameObject/GameObject.cpp b/src/server/game/Entities/GameObject/GameObject.cpp index 9bf3a729931..eb6004ef0bb 100755 --- a/src/server/game/Entities/GameObject/GameObject.cpp +++ b/src/server/game/Entities/GameObject/GameObject.cpp @@ -1698,7 +1698,6 @@ void GameObject::TakenDamage(uint32 damage, Unit *who) if (HasFlag(GAMEOBJECT_FLAGS, GO_FLAG_DAMAGED)) // from damaged to destroyed { - uint8 hitType = BG_OBJECT_DMG_HIT_TYPE_HIGH_DAMAGED; if (!m_goValue->building.health) { RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_DAMAGED); @@ -1713,19 +1712,19 @@ void GameObject::TakenDamage(uint32 damage, Unit *who) EventInform(m_goInfo->building.destroyedEvent); if (pwho) if (Battleground* bg = pwho->GetBattleground()) + { + bg->EventPlayerDamagedGO(pwho, this, m_goInfo->building.destroyedEvent); bg->DestroyGate(pwho, this, m_goInfo->building.destroyedEvent); - hitType = BG_OBJECT_DMG_HIT_TYPE_JUST_DESTROYED; + } sScriptMgr->OnGameObjectDestroyed(this, pwho, m_goInfo->building.destroyedEvent); } - if (pwho) - if (Battleground* bg = pwho->GetBattleground()) - bg->EventPlayerDamagedGO(pwho, this, hitType, m_goInfo->building.destroyedEvent); } else // from intact to damaged { - uint8 hitType = BG_OBJECT_DMG_HIT_TYPE_JUST_DAMAGED; - if (m_goValue->building.health + damage < m_goInfo->building.intactNumHits + m_goInfo->building.damagedNumHits) - hitType = BG_OBJECT_DMG_HIT_TYPE_DAMAGED; + if (m_goValue->building.health + damage >= m_goInfo->building.intactNumHits + m_goInfo->building.damagedNumHits) + if (pwho) + if (Battleground* bg = pwho->GetBattleground()) + bg->EventPlayerDamagedGO(pwho, this, m_goInfo->building.damageEvent); if (m_goValue->building.health <= m_goInfo->building.damagedNumHits) { @@ -1744,11 +1743,10 @@ void GameObject::TakenDamage(uint32 damage, Unit *who) EventInform(m_goInfo->building.damagedEvent); sScriptMgr->OnGameObjectDamaged(this, pwho, m_goInfo->building.damagedEvent); - hitType = BG_OBJECT_DMG_HIT_TYPE_JUST_HIGH_DAMAGED; + if (pwho) + if (Battleground* bg = pwho->GetBattleground()) + bg->EventPlayerDamagedGO(pwho, this, m_goInfo->building.damagedEvent); } - if (pwho) - if (Battleground* bg = pwho->GetBattleground()) - bg->EventPlayerDamagedGO(pwho, this, hitType, m_goInfo->building.destroyedEvent); } SetGoAnimProgress(m_goValue->building.health*255/(m_goInfo->building.intactNumHits + m_goInfo->building.damagedNumHits)); } |