bool BattleGroundWS::HandleAreaTrigger(Player* source, uint32 trigger) { // this is wrong way to implement these things. On official it done by gameobject spell cast. if (GetStatus() != STATUS_IN_PROGRESS) return false; switch (trigger) { case 3646: // Alliance Flag spawn if (m_FlagState[TEAM_INDEX_HORDE] && !m_FlagState[TEAM_INDEX_ALLIANCE]) if (GetHordeFlagCarrierGuid() == source->GetObjectGuid()) EventPlayerCapturedFlag(source); break; case 3647: // Horde Flag spawn if (m_FlagState[TEAM_INDEX_ALLIANCE] && !m_FlagState[TEAM_INDEX_HORDE]) if (GetAllianceFlagCarrierGuid() == source->GetObjectGuid()) EventPlayerCapturedFlag(source); break; case 3669: // horde portal if (source->GetTeam() != HORDE) source->GetSession()->SendNotification(LANG_BATTLEGROUND_ONLY_HORDE_USE); else source->LeaveBattleground(); break; case 3671: // alliance portal if (source->GetTeam() != ALLIANCE) source->GetSession()->SendNotification(LANG_BATTLEGROUND_ONLY_ALLIANCE_USE); else source->LeaveBattleground(); break; default: return false; } return true; }
void BattleGroundWS::HandleAreaTrigger(Player* source, uint32 trigger) { // this is wrong way to implement these things. On official it done by gameobject spell cast. if (GetStatus() != STATUS_IN_PROGRESS) return; // uint32 SpellId = 0; // uint64 buff_guid = 0; switch (trigger) { case 3686: // Alliance elixir of speed spawn. Trigger not working, because located inside other areatrigger, can be replaced by IsWithinDist(object, dist) in BattleGround::Update(). case 3687: // Horde elixir of speed spawn. Trigger not working, because located inside other areatrigger, can be replaced by IsWithinDist(object, dist) in BattleGround::Update(). case 3706: // Alliance elixir of regeneration spawn case 3708: // Horde elixir of regeneration spawn case 3707: // Alliance elixir of berserk spawn case 3709: // Horde elixir of berserk spawn break; case 3646: // Alliance Flag spawn if (m_FlagState[TEAM_INDEX_HORDE] && !m_FlagState[TEAM_INDEX_ALLIANCE]) if (GetHordeFlagCarrierGuid() == source->GetObjectGuid()) EventPlayerCapturedFlag(source); break; case 3647: // Horde Flag spawn if (m_FlagState[TEAM_INDEX_ALLIANCE] && !m_FlagState[TEAM_INDEX_HORDE]) if (GetAllianceFlagCarrierGuid() == source->GetObjectGuid()) EventPlayerCapturedFlag(source); break; case 3669: // horde portal if (source->GetTeam() != HORDE) source->GetSession()->SendNotification(LANG_BATTLEGROUND_ONLY_HORDE_USE); else source->LeaveBattleground(); break; case 3671: // alliance portal if (source->GetTeam() != ALLIANCE) source->GetSession()->SendNotification(LANG_BATTLEGROUND_ONLY_ALLIANCE_USE); else source->LeaveBattleground(); break; case 3649: // unk1 case 3688: // unk2 case 4628: // unk3 case 4629: // unk4 break; default: sLog.outError("WARNING: Unhandled AreaTrigger in Battleground: %u", trigger); source->GetSession()->SendAreaTriggerMessage("Warning: Unhandled AreaTrigger in Battleground: %u", trigger); break; } }
void BattleGroundTP::HandleAreaTrigger(Player* source, uint32 Trigger) { // this is wrong way to implement these things. On official it done by gameobject spell cast. if (GetStatus() != STATUS_IN_PROGRESS) return; //uint32 SpellId = 0; //uint64 buff_guid = 0; switch(Trigger) { case 5906: // alliance buff near door case 5907: // horde buff near door case 5908: // horde spawn tower case 5909: // alliance spawn house case 5910: // horde spawn farm case 5911: // alliance spawn farm case 5914: // alliance at stronghold right case 5916: // horde stronghold door case 5917: // alliance at stronghold left case 5918: // horde stronghold right case 5920: // horde stronghold door 2 case 5921: // horde stronghold left case 6803: // horde central gy case 6804: // alliance central gy case 6805: // horde base gy case 6806: // alliance base gy break; case 5904: // Alliance Flag spawn if (m_FlagState[TEAM_INDEX_HORDE] && !m_FlagState[TEAM_INDEX_ALLIANCE]) if (GetHordeFlagCarrierGuid() == source->GetObjectGuid()) EventPlayerCapturedFlag(source); break; case 5905: // Horde Flag spawn if (m_FlagState[TEAM_INDEX_ALLIANCE] && !m_FlagState[TEAM_INDEX_HORDE]) if (GetAllianceFlagCarrierGuid() == source->GetObjectGuid()) EventPlayerCapturedFlag(source); break; default: ERROR_LOG("WARNING: Unhandled AreaTrigger in Battleground: %u", Trigger); source->GetSession()->SendAreaTriggerMessage("Warning: Unhandled AreaTrigger in Battleground: %u", Trigger); break; } }
bool BattleGroundWS::HandleAreaTrigger(Player* source, uint32 trigger) { // this is wrong way to implement these things. On official it done by gameobject spell cast. if (GetStatus() != STATUS_IN_PROGRESS) return false; switch (trigger) { case 3646: // Alliance Flag spawn if (m_FlagState[TEAM_INDEX_HORDE] && !m_FlagState[TEAM_INDEX_ALLIANCE]) if (GetHordeFlagCarrierGuid() == source->GetObjectGuid()) EventPlayerCapturedFlag(source); break; case 3647: // Horde Flag spawn if (m_FlagState[TEAM_INDEX_ALLIANCE] && !m_FlagState[TEAM_INDEX_HORDE]) if (GetAllianceFlagCarrierGuid() == source->GetObjectGuid()) EventPlayerCapturedFlag(source); break; default: return false; } return true; }
void BattleGroundWS::EventPlayerDroppedFlag(Player* source) { if (GetStatus() != STATUS_IN_PROGRESS) { // if not running, do not cast things at the dropper player (prevent spawning the "dropped" flag), neither send unnecessary messages // just take off the aura if (source->GetTeam() == ALLIANCE) { if (!IsHordeFlagPickedUp()) return; if (GetHordeFlagCarrierGuid() == source->GetObjectGuid()) { ClearHordeFlagCarrier(); source->RemoveAurasDueToSpell(BG_WS_SPELL_WARSONG_FLAG); } } else { if (!IsAllianceFlagPickedUp()) return; if (GetAllianceFlagCarrierGuid() == source->GetObjectGuid()) { ClearAllianceFlagCarrier(); source->RemoveAurasDueToSpell(BG_WS_SPELL_SILVERWING_FLAG); } } return; } bool set = false; if (source->GetTeam() == ALLIANCE) { if (!IsHordeFlagPickedUp()) return; if (GetHordeFlagCarrierGuid() == source->GetObjectGuid()) { ClearHordeFlagCarrier(); source->RemoveAurasDueToSpell(BG_WS_SPELL_WARSONG_FLAG); m_FlagState[TEAM_INDEX_HORDE] = BG_WS_FLAG_STATE_ON_GROUND; source->CastSpell(source, BG_WS_SPELL_WARSONG_FLAG_DROPPED, true); set = true; } } else { if (!IsAllianceFlagPickedUp()) return; if (GetAllianceFlagCarrierGuid() == source->GetObjectGuid()) { ClearAllianceFlagCarrier(); source->RemoveAurasDueToSpell(BG_WS_SPELL_SILVERWING_FLAG); m_FlagState[TEAM_INDEX_ALLIANCE] = BG_WS_FLAG_STATE_ON_GROUND; source->CastSpell(source, BG_WS_SPELL_SILVERWING_FLAG_DROPPED, true); set = true; } } if (set) { UpdateFlagState(source->GetTeam(), 1); if (source->GetTeam() == ALLIANCE) { SendMessageToAll(LANG_BG_WS_DROPPED_HF, CHAT_MSG_BG_SYSTEM_HORDE, source); UpdateWorldState(BG_WS_FLAG_UNK_HORDE, uint32(-1)); } else { SendMessageToAll(LANG_BG_WS_DROPPED_AF, CHAT_MSG_BG_SYSTEM_ALLIANCE, source); UpdateWorldState(BG_WS_FLAG_UNK_ALLIANCE, uint32(-1)); } m_FlagsDropTimer[GetOtherTeamIndex(GetTeamIndex(source->GetTeam()))] = BG_WS_FLAG_DROP_TIME; } }