aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xsrc/server/game/Battlegrounds/Battleground.h11
-rwxr-xr-xsrc/server/game/Battlegrounds/Zones/BattlegroundIC.cpp2
-rwxr-xr-xsrc/server/game/Battlegrounds/Zones/BattlegroundIC.h2
-rwxr-xr-xsrc/server/game/Battlegrounds/Zones/BattlegroundSA.cpp42
-rwxr-xr-xsrc/server/game/Battlegrounds/Zones/BattlegroundSA.h2
-rwxr-xr-xsrc/server/game/Entities/GameObject/GameObject.cpp22
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));
}