void BattlegroundSA::EventPlayerDamagedGO(Player* /*player*/, GameObject* go, uint32 eventType) { if (!go || !go->GetGOInfo()) return; if (eventType == go->GetGOInfo()->building.damagedEvent) { uint32 i = getGateIdFromDamagedOrDestroyEventId(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 == BG_SA_EVENT_ANCIENT_GATE_DESTROYED) SendWarningToAll(LANG_BG_SA_CHAMBER_BREACHED); else SendWarningToAll(LANG_BG_SA_WAS_DESTROYED, go->GetGOInfo()->name.c_str()); } if (eventType == go->GetGOInfo()->building.damageEvent) SendWarningToAll(LANG_BG_SA_IS_UNDER_ATTACK, go->GetGOInfo()->name.c_str()); }
void BattlegroundSA::DestroyGate(Player* player, GameObject* go) { uint32 i = getGateIdFromDamagedOrDestroyEventId(go->GetGOInfo()->building.destroyedEvent); if (!GateStatus[i]) return; if (GameObject* g = GetBGObject(i)) { if (g->GetGOValue()->Building.Health == 0) { GateStatus[i] = BG_SA_GATE_DESTROYED; uint32 uws = getWorldStateFromGateId(i); if (uws) UpdateWorldState(uws, GateStatus[i]); bool rewardHonor = true; gateDestroyed = true; switch (i) { case BG_SA_GREEN_GATE: if (GateStatus[BG_SA_BLUE_GATE] == BG_SA_GATE_DESTROYED) rewardHonor = false; break; case BG_SA_BLUE_GATE: if (GateStatus[BG_SA_GREEN_GATE] == BG_SA_GATE_DESTROYED) rewardHonor = false; break; case BG_SA_RED_GATE: if (GateStatus[BG_SA_PURPLE_GATE] == BG_SA_GATE_DESTROYED) rewardHonor = false; break; case BG_SA_PURPLE_GATE: if (GateStatus[BG_SA_RED_GATE] == BG_SA_GATE_DESTROYED) rewardHonor = false; break; default: break; } if (i < 5) DelObject(i + 14); UpdatePlayerScore(player, SCORE_DESTROYED_WALL, 1); if (rewardHonor) UpdatePlayerScore(player, SCORE_BONUS_HONOR, GetBonusHonorFromKill(1)); } } }
void BattlegroundSA::DestroyGate(Player* player, GameObject* go) { uint32 i = getGateIdFromDamagedOrDestroyEventId(go->GetGOInfo()->building.destroyedEvent); if (!GateStatus[i]) return; if (GameObject* g = GetBGObject(i)) { if (g->GetGOValue()->Building.Health == 0) { GateStatus[i] = BG_SA_GATE_DESTROYED; uint32 uws = getWorldStateFromGateId(i); if (uws) UpdateWorldState(uws, GateStatus[i]); bool rewardHonor = true; gateDestroyed = true; switch (i) { case BG_SA_GREEN_GATE: if (GateStatus[BG_SA_BLUE_GATE] == BG_SA_GATE_DESTROYED) rewardHonor = false; for (uint8 bombIndex = 47; bombIndex < 59; bombIndex++) { if (GetBGObject(bombIndex)) GetBGObject(bombIndex)->RemoveFlag(GAMEOBJECT_FIELD_FLAGS, GO_FLAG_NOT_SELECTABLE); } break; case BG_SA_BLUE_GATE: if (GateStatus[BG_SA_GREEN_GATE] == BG_SA_GATE_DESTROYED) rewardHonor = false; for (uint8 bombIndex = 59; bombIndex < 68; bombIndex++) { if (GetBGObject(bombIndex)) GetBGObject(bombIndex)->RemoveFlag(GAMEOBJECT_FIELD_FLAGS, GO_FLAG_NOT_SELECTABLE); } break; case BG_SA_RED_GATE: if (GateStatus[BG_SA_PURPLE_GATE] == BG_SA_GATE_DESTROYED) rewardHonor = false; for (uint8 bombIndex = 68; bombIndex < 77; bombIndex++) { if (GetBGObject(bombIndex)) GetBGObject(bombIndex)->RemoveFlag(GAMEOBJECT_FIELD_FLAGS, GO_FLAG_NOT_SELECTABLE); } break; case BG_SA_PURPLE_GATE: if (GateStatus[BG_SA_RED_GATE] == BG_SA_GATE_DESTROYED) rewardHonor = false; for (uint8 bombIndex = 68; bombIndex < 77; bombIndex++) { if (GetBGObject(bombIndex)) GetBGObject(bombIndex)->RemoveFlag(GAMEOBJECT_FIELD_FLAGS, GO_FLAG_NOT_SELECTABLE); } break; case BG_SA_YELLOW_GATE: for (uint8 bombIndex = 77; bombIndex < 93; bombIndex++) { if (GetBGObject(bombIndex)) GetBGObject(bombIndex)->RemoveFlag(GAMEOBJECT_FIELD_FLAGS, GO_FLAG_NOT_SELECTABLE); } break; default: break; } if (i < 5) DelObject(i + 14); UpdatePlayerScore(player, SCORE_DESTROYED_WALL, 1); if (rewardHonor) UpdatePlayerScore(player, SCORE_BONUS_HONOR, GetBonusHonorFromKill(1)); } } }