Battleground/Strand of the Ancients: Fix broken gate state

This commit is contained in:
Vincent-Michael
2012-04-22 13:36:18 +02:00
parent bc4303d8f9
commit ddd25ce716
2 changed files with 73 additions and 26 deletions
@@ -534,16 +534,16 @@ void BattlegroundSA::EventPlayerDamagedGO(Player* /*player*/, GameObject* go, ui
if (eventType == go->GetGOInfo()->building.damagedEvent) if (eventType == go->GetGOInfo()->building.damagedEvent)
{ {
uint32 i = GetGateIDFromDestroyEventID(eventType); uint32 i = getGateIdFromDamagedOrDestroyEventId(eventType);
GateStatus[i] = BG_SA_GATE_DAMAGED; GateStatus[i] = BG_SA_GATE_DAMAGED;
uint32 uws = GetWorldStateFromGateID(i); uint32 uws = getWorldStateFromGateId(i);
if (uws) if (uws)
UpdateWorldState(uws, GateStatus[i]); UpdateWorldState(uws, GateStatus[i]);
} }
if (eventType == go->GetGOInfo()->building.destroyedEvent) if (eventType == go->GetGOInfo()->building.destroyedEvent)
{ {
if (go->GetGOInfo()->building.destroyedEvent == 19837) if (go->GetGOInfo()->building.destroyedEvent == BG_SA_EVENT_ANCIENT_GATE_DESTROYED)
SendWarningToAll(LANG_BG_SA_CHAMBER_BREACHED); SendWarningToAll(LANG_BG_SA_CHAMBER_BREACHED);
else else
SendWarningToAll(LANG_BG_SA_WAS_DESTROYED, go->GetGOInfo()->name.c_str()); SendWarningToAll(LANG_BG_SA_WAS_DESTROYED, go->GetGOInfo()->name.c_str());
@@ -603,7 +603,7 @@ void BattlegroundSA::DemolisherStartState(bool start)
void BattlegroundSA::DestroyGate(Player* player, GameObject* go) void BattlegroundSA::DestroyGate(Player* player, GameObject* go)
{ {
uint32 i = GetGateIDFromDestroyEventID(go->GetGOInfo()->building.destroyedEvent); uint32 i = getGateIdFromDamagedOrDestroyEventId(go->GetGOInfo()->building.destroyedEvent);
if (!GateStatus[i]) if (!GateStatus[i])
return; return;
@@ -612,7 +612,7 @@ void BattlegroundSA::DestroyGate(Player* player, GameObject* go)
if (g->GetGOValue()->Building.Health == 0) if (g->GetGOValue()->Building.Health == 0)
{ {
GateStatus[i] = BG_SA_GATE_DESTROYED; GateStatus[i] = BG_SA_GATE_DESTROYED;
uint32 uws = GetWorldStateFromGateID(i); uint32 uws = getWorldStateFromGateId(i);
if (uws) if (uws)
UpdateWorldState(uws, GateStatus[i]); UpdateWorldState(uws, GateStatus[i]);
bool rewardHonor = true; bool rewardHonor = true;
@@ -45,9 +45,30 @@ enum BG_SA_Status
enum BG_SA_GateState enum BG_SA_GateState
{ {
BG_SA_GATE_OK = 1, BG_SA_GATE_OK = 1,
BG_SA_GATE_DAMAGED = 2, BG_SA_GATE_DAMAGED = 2,
BG_SA_GATE_DESTROYED = 3 BG_SA_GATE_DESTROYED = 3
};
enum BG_SA_EventIdGate
{
BG_SA_EVENT_GREEN_GATE_DAMAGED = 19041,
BG_SA_EVENT_GREEN_GATE_DESTROYED = 19046,
BG_SA_EVENT_BLUE_GATE_DAMAGED = 19040,
BG_SA_EVENT_BLUE_GATE_DESTROYED = 19045,
BG_SA_EVENT_RED_GATE_DAMAGED = 19042,
BG_SA_EVENT_RED_GATE_DESTROYED = 19047,
BG_SA_EVENT_PURPLE_GATE_DAMAGED = 19048,
BG_SA_EVENT_PURPLE_GATE_DESTROYED = 19043,
BG_SA_EVENT_YELLOW_GATE_DAMAGED = 19049,
BG_SA_EVENT_YELLOW_GATE_DESTROYED = 19044,
BG_SA_EVENT_ANCIENT_GATE_DAMAGED = 19836,
BG_SA_EVENT_ANCIENT_GATE_DESTROYED = 19837
}; };
enum BG_SA_Timers enum BG_SA_Timers
@@ -443,34 +464,60 @@ class BattlegroundSA : public Battleground
/// Called when a player use a gamobject (relic) /// Called when a player use a gamobject (relic)
virtual void EventPlayerUsedGO(Player* Source, GameObject* object); virtual void EventPlayerUsedGO(Player* Source, GameObject* object);
/// Return gate id, relative to bg data, according to gameobject id /// Return gate id, relative to bg data, according to gameobject id
uint32 GetGateIDFromDestroyEventID(uint32 id) uint32 getGateIdFromDamagedOrDestroyEventId(uint32 id)
{ {
uint32 i = 0;
switch (id) switch (id)
{ {
case 19046: i = BG_SA_GREEN_GATE; break; //Green gate destroyed // Green gate
case 19045: i = BG_SA_BLUE_GATE; break; //blue gate case BG_SA_EVENT_GREEN_GATE_DAMAGED:
case 19047: i = BG_SA_RED_GATE; break; //red gate case BG_SA_EVENT_GREEN_GATE_DESTROYED:
case 19048: i = BG_SA_PURPLE_GATE; break; //purple gate return BG_SA_GREEN_GATE;
case 19049: i = BG_SA_YELLOW_GATE; break; //yellow gate // Blue gate
case 19837: i = BG_SA_ANCIENT_GATE; break; //ancient gate case BG_SA_EVENT_BLUE_GATE_DAMAGED:
case BG_SA_EVENT_BLUE_GATE_DESTROYED:
return BG_SA_BLUE_GATE;
// Red gate
case BG_SA_EVENT_RED_GATE_DAMAGED:
case BG_SA_EVENT_RED_GATE_DESTROYED:
return BG_SA_RED_GATE;
// Purple gate
case BG_SA_EVENT_PURPLE_GATE_DAMAGED:
case BG_SA_EVENT_PURPLE_GATE_DESTROYED:
return BG_SA_PURPLE_GATE;
// Yellow gate
case BG_SA_EVENT_YELLOW_GATE_DAMAGED:
case BG_SA_EVENT_YELLOW_GATE_DESTROYED:
return BG_SA_YELLOW_GATE;
// Ancient gate
case BG_SA_EVENT_ANCIENT_GATE_DAMAGED:
case BG_SA_EVENT_ANCIENT_GATE_DESTROYED:
return BG_SA_ANCIENT_GATE;
default:
break;
} }
return i; return 0;
} }
/// Return worldstate id, according to door id /// Return worldstate id, according to door id
uint32 GetWorldStateFromGateID(uint32 id) uint32 getWorldStateFromGateId(uint32 id)
{ {
uint32 uws = 0;
switch (id) switch (id)
{ {
case BG_SA_GREEN_GATE: uws = BG_SA_GREEN_GATEWS; break; case BG_SA_GREEN_GATE:
case BG_SA_YELLOW_GATE: uws = BG_SA_YELLOW_GATEWS; break; return BG_SA_GREEN_GATEWS;
case BG_SA_BLUE_GATE: uws = BG_SA_BLUE_GATEWS; break; case BG_SA_YELLOW_GATE:
case BG_SA_RED_GATE: uws = BG_SA_RED_GATEWS; break; return BG_SA_YELLOW_GATEWS;
case BG_SA_PURPLE_GATE: uws = BG_SA_PURPLE_GATEWS; break; case BG_SA_BLUE_GATE:
case BG_SA_ANCIENT_GATE: uws = BG_SA_ANCIENT_GATEWS; break; return BG_SA_BLUE_GATEWS;
case BG_SA_RED_GATE:
return BG_SA_RED_GATEWS;
case BG_SA_PURPLE_GATE:
return BG_SA_PURPLE_GATEWS;
case BG_SA_ANCIENT_GATE:
return BG_SA_ANCIENT_GATEWS;
default:
break;
} }
return uws; return 0;
} }
/// Called on battleground ending /// Called on battleground ending