void BattleGroundEY::EventPlayerDroppedFlag(Player* source) { if (!IsFlagPickedUp()) return; if (GetFlagCarrierGuid() != source->GetObjectGuid()) return; ClearFlagCarrier(); source->RemoveAurasDueToSpell(EY_NETHERSTORM_FLAG_SPELL); if (GetStatus() != STATUS_IN_PROGRESS) { // do not cast auras or send messages after match has ended return; } m_flagState = EY_FLAG_STATE_ON_GROUND; m_flagRespawnTimer = EY_FLAG_RESPAWN_TIME; source->CastSpell(source, SPELL_RECENTLY_DROPPED_FLAG, true); source->CastSpell(source, EY_PLAYER_DROPPED_FLAG_SPELL, true); if (source->GetTeam() == ALLIANCE) { UpdateWorldState(WORLD_STATE_EY_NETHERSTORM_FLAG_STATE_ALLIANCE, 1); SendMessageToAll(LANG_BG_EY_DROPPED_FLAG, CHAT_MSG_BG_SYSTEM_ALLIANCE, nullptr); } else { UpdateWorldState(WORLD_STATE_EY_NETHERSTORM_FLAG_STATE_HORDE, 1); SendMessageToAll(LANG_BG_EY_DROPPED_FLAG, CHAT_MSG_BG_SYSTEM_HORDE, nullptr); } }
void BattleGroundEY::Update(uint32 diff) { BattleGround::Update(diff); if (GetStatus() != STATUS_IN_PROGRESS) return; // resource counter if (m_resourceUpdateTimer < diff) { UpdateResources(); m_resourceUpdateTimer = EY_RESOURCES_UPDATE_TIME; } else m_resourceUpdateTimer -= diff; // flag respawn if (m_flagState == EY_FLAG_STATE_WAIT_RESPAWN || m_flagState == EY_FLAG_STATE_ON_GROUND) { if (m_flagRespawnTimer < diff) { m_flagRespawnTimer = 0; if (m_flagState == EY_FLAG_STATE_WAIT_RESPAWN) RespawnFlag(); else RespawnDroppedFlag(); } else m_flagRespawnTimer -= diff; } // workaround for Fel Reaver Ruins flag capture needed on 3.3.5 only // the original areatrigger (4514) is covered by a bigger one (4515) and is not triggered on client side if (IsFlagPickedUp()) { if (m_felReaverFlagTimer < diff) { Player* flagCarrier = sObjectMgr.GetPlayer(GetFlagCarrierGuid()); if (flagCarrier) { if (m_towerOwner[NODE_FEL_REAVER_RUINS] == flagCarrier->GetTeam()) { // coords and range taken from DBC of areatrigger (4514) if (flagCarrier->IsWithinDist3d(2044.0f, 1729.729f, 1190.03f, 3.0f)) EventPlayerCapturedFlag(flagCarrier, NODE_FEL_REAVER_RUINS); } } m_felReaverFlagTimer = EY_FEL_REAVER_FLAG_UPDATE_TIME; } else m_felReaverFlagTimer -= diff; } }
void BattleGroundEY::EventPlayerDroppedFlag(Player* source) { if (GetStatus() != STATUS_IN_PROGRESS) { // if not running, do not cast things at the dropper player, neither send unnecessary messages // just take off the aura if (IsFlagPickedUp() && GetFlagCarrierGuid() == source->GetObjectGuid()) { ClearFlagCarrier(); source->RemoveAurasDueToSpell(EY_NETHERSTORM_FLAG_SPELL); } return; } if (!IsFlagPickedUp()) return; if (GetFlagCarrierGuid() != source->GetObjectGuid()) return; ClearFlagCarrier(); source->RemoveAurasDueToSpell(EY_NETHERSTORM_FLAG_SPELL); m_flagState = EY_FLAG_STATE_ON_GROUND; m_flagRespawnTimer = EY_FLAG_RESPAWN_TIME; source->CastSpell(source, SPELL_RECENTLY_DROPPED_FLAG, true); source->CastSpell(source, EY_PLAYER_DROPPED_FLAG_SPELL, true); if (source->GetTeam() == ALLIANCE) { UpdateWorldState(WORLD_STATE_EY_NETHERSTORM_FLAG_STATE_ALLIANCE, 1); SendMessageToAll(LANG_BG_EY_DROPPED_FLAG, CHAT_MSG_BG_SYSTEM_ALLIANCE, NULL); } else { UpdateWorldState(WORLD_STATE_EY_NETHERSTORM_FLAG_STATE_HORDE, 1); SendMessageToAll(LANG_BG_EY_DROPPED_FLAG, CHAT_MSG_BG_SYSTEM_HORDE, NULL); } }
void BattleGroundEY::RemovePlayer(Player* plr, ObjectGuid guid) { // sometimes flag aura not removed :( if (IsFlagPickedUp()) { if (m_flagCarrier == guid) { if (plr) EventPlayerDroppedFlag(plr); else { ClearFlagCarrier(); RespawnFlag(); } } } }
void BattleGroundEY::EventPlayerClickedOnFlag(Player* source, GameObject* target_obj) { if (GetStatus() != STATUS_IN_PROGRESS || IsFlagPickedUp() || !source->IsWithinDistInMap(target_obj, 10)) return; if (m_flagState == EY_FLAG_STATE_ON_BASE) UpdateWorldState(WORLD_STATE_EY_NETHERSTORM_FLAG_READY, WORLD_STATE_REMOVE); if (source->GetTeam() == ALLIANCE) { PlaySoundToAll(EY_SOUND_FLAG_PICKED_UP_ALLIANCE); m_flagState = EY_FLAG_STATE_ON_ALLIANCE_PLAYER; UpdateWorldState(WORLD_STATE_EY_NETHERSTORM_FLAG_STATE_ALLIANCE, 2); } else { PlaySoundToAll(EY_SOUND_FLAG_PICKED_UP_HORDE); m_flagState = EY_FLAG_STATE_ON_HORDE_PLAYER; UpdateWorldState(WORLD_STATE_EY_NETHERSTORM_FLAG_STATE_HORDE, 2); } // despawn center-flag SpawnEvent(EY_EVENT_CAPTURE_FLAG, EY_EVENT2_FLAG_CENTER, false); SetFlagCarrier(source->GetObjectGuid()); // get flag aura on player source->CastSpell(source, EY_NETHERSTORM_FLAG_SPELL, true); source->RemoveAurasWithInterruptFlags(AURA_INTERRUPT_FLAG_ENTER_PVP_COMBAT); if (source->GetTeam() == ALLIANCE) PSendMessageToAll(LANG_BG_EY_HAS_TAKEN_FLAG, CHAT_MSG_BG_SYSTEM_ALLIANCE, NULL, source->GetName()); else PSendMessageToAll(LANG_BG_EY_HAS_TAKEN_FLAG, CHAT_MSG_BG_SYSTEM_HORDE, NULL, source->GetName()); }