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 3686: // Alliance Buff 1 case 3687: // Horde Buff 1 case 3706: // Alliance Buff 2 case 3708: // Horde Buff 2 break; case 3646: // Alliance Flag spawn if (m_FlagState[BG_TEAM_HORDE] && !m_FlagState[BG_TEAM_ALLIANCE]) if (GetHordeFlagPickerGuid() == Source->GetObjectGuid()) EventPlayerCapturedFlag(Source); break; case 3647: // Horde Flag spawn if (m_FlagState[BG_TEAM_ALLIANCE] && !m_FlagState[BG_TEAM_HORDE]) if (GetAllianceFlagPickerGuid() == Source->GetObjectGuid()) EventPlayerCapturedFlag(Source); break; default: sLog.outError("WARNING: Unhandled AreaTrigger in Battleground: %u", Trigger); Source->GetSession()->SendAreaTriggerMessage("Warning: Unhandled AreaTrigger in Battleground: %u", Trigger); break; } }
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[BG_TEAM_HORDE] && !m_FlagState[BG_TEAM_ALLIANCE]) if (GetHordeFlagPickerGuid() == source->GetObjectGuid()) EventPlayerCapturedFlag(source); break; case 3647: // Horde Flag spawn if (m_FlagState[BG_TEAM_ALLIANCE] && !m_FlagState[BG_TEAM_HORDE]) if (GetAllianceFlagPickerGuid() == 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 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 (GetHordeFlagPickerGuid() == Source->GetObjectGuid()) { ClearHordeFlagPicker(); Source->RemoveAurasDueToSpell(BG_WS_SPELL_WARSONG_FLAG); } } else { if (!IsAllianceFlagPickedup()) return; if (GetAllianceFlagPickerGuid() == Source->GetObjectGuid()) { ClearAllianceFlagPicker(); Source->RemoveAurasDueToSpell(BG_WS_SPELL_SILVERWING_FLAG); } } return; } bool set = false; if (Source->GetTeam() == ALLIANCE) { if (!IsHordeFlagPickedup()) return; if (GetHordeFlagPickerGuid() == Source->GetObjectGuid()) { ClearHordeFlagPicker(); Source->RemoveAurasDueToSpell(BG_WS_SPELL_WARSONG_FLAG); m_FlagState[BG_TEAM_HORDE] = BG_WS_FLAG_STATE_ON_GROUND; Source->CastSpell(Source, BG_WS_SPELL_WARSONG_FLAG_DROPPED, true); set = true; } } else { if (!IsAllianceFlagPickedup()) return; if (GetAllianceFlagPickerGuid() == Source->GetObjectGuid()) { ClearAllianceFlagPicker(); Source->RemoveAurasDueToSpell(BG_WS_SPELL_SILVERWING_FLAG); m_FlagState[BG_TEAM_ALLIANCE] = BG_WS_FLAG_STATE_ON_GROUND; Source->CastSpell(Source, BG_WS_SPELL_SILVERWING_FLAG_DROPPED, true); set = true; } } if (set) { Source->CastSpell(Source, SPELL_RECENTLY_DROPPED_FLAG, true); 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(GetTeamIndexByTeamId(Source->GetTeam()))] = BG_WS_FLAG_DROP_TIME; } }