void BattleGroundAC::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() && GetFlagPickerGuid() == Source->GetObjectGuid()) { ClearFlagPicker(); Source->RemoveAurasDueToSpell(BG_AC_FLAG_1_FLAG_SPELL); } return; } if (!IsFlagPickedup()) return; if (GetFlagPickerGuid() != Source->GetObjectGuid()) return; ClearFlagPicker(); Source->RemoveAurasDueToSpell(BG_AC_FLAG_1_FLAG_SPELL); m_FlagState = BG_AC_FLAG_STATE_ON_GROUND; m_FlagsTimer = BG_AC_FLAG_RESPAWN_TIME; Source->CastSpell(Source, SPELL_RECENTLY_DROPPED_FLAG, true); Source->CastSpell(Source, BG_AC_PLAYER_DROPPED_FLAG_SPELL, true); //this does not work correctly :( (it should remove flag carrier name) UpdateWorldState(FLAG_1_FLAG_STATE_HORDE, BG_AC_FLAG_STATE_WAIT_RESPAWN); UpdateWorldState(FLAG_1_FLAG_STATE_ALLIANCE, BG_AC_FLAG_STATE_WAIT_RESPAWN); if (Source->GetTeam() == ALLIANCE) SendMessageToAll(LANG_BG_AC_DROPPED_FLAG, CHAT_MSG_BG_SYSTEM_ALLIANCE, NULL); else SendMessageToAll(LANG_BG_AC_DROPPED_FLAG, CHAT_MSG_BG_SYSTEM_HORDE, NULL); }
void BattleGroundAC::HandleAreaTrigger(Player *Source, uint32 Trigger) { if (GetStatus() != STATUS_IN_PROGRESS) return; if(!Source->isAlive()) //hack code, must be removed later return; switch(Trigger) { case TR_TOWER_4_POINT: if (m_PointState[BG_AC_NODE_TOWER_4] == AC_POINT_UNDER_CONTROL && m_PointOwnedByTeam[BG_AC_NODE_TOWER_4] == Source->GetTeam()) if (m_FlagState && GetFlagPickerGuid() == Source->GetObjectGuid()) EventPlayerCapturedFlag(Source, BG_AC_NODE_TOWER_4); break; case TR_TOWER_3_POINT: if (m_PointState[BG_AC_NODE_TOWER_3] == AC_POINT_UNDER_CONTROL && m_PointOwnedByTeam[BG_AC_NODE_TOWER_3] == Source->GetTeam()) if (m_FlagState && GetFlagPickerGuid() == Source->GetObjectGuid()) EventPlayerCapturedFlag(Source, BG_AC_NODE_TOWER_3); break; case TR_TOWER_2_POINT: if (m_PointState[BG_AC_NODE_TOWER_2] == AC_POINT_UNDER_CONTROL && m_PointOwnedByTeam[BG_AC_NODE_TOWER_2] == Source->GetTeam()) if (m_FlagState && GetFlagPickerGuid() == Source->GetObjectGuid()) EventPlayerCapturedFlag(Source, BG_AC_NODE_TOWER_2); break; case TR_TOWER_1_POINT: if (m_PointState[BG_AC_NODE_TOWER_1] == AC_POINT_UNDER_CONTROL && m_PointOwnedByTeam[BG_AC_NODE_TOWER_1] == Source->GetTeam()) if (m_FlagState && GetFlagPickerGuid() == Source->GetObjectGuid()) EventPlayerCapturedFlag(Source, BG_AC_NODE_TOWER_1); break; case 4512: case 4515: case 4517: case 4519: case 4530: case 4531: case 4568: case 4569: case 4570: case 4571: case 5866: break; default: sLog.outError("WARNING: Unhandled AreaTrigger in Battleground: %u", Trigger); Source->GetSession()->SendAreaTriggerMessage("Warning: Unhandled AreaTrigger in Battleground: %u", Trigger); break; } }
void BattleGroundEY::HandleAreaTrigger(Player* source, uint32 trigger) { if (GetStatus() != STATUS_IN_PROGRESS) return; if (!source->isAlive()) // hack code, must be removed later return; switch (trigger) { case TR_BLOOD_ELF_POINT: if (m_PointState[BG_EY_NODE_BLOOD_ELF] == EY_POINT_UNDER_CONTROL && m_PointOwnedByTeam[BG_EY_NODE_BLOOD_ELF] == source->GetTeam()) if (m_FlagState && GetFlagPickerGuid() == source->GetObjectGuid()) EventPlayerCapturedFlag(source, BG_EY_NODE_BLOOD_ELF); break; case TR_FEL_REAVER_POINT: if (m_PointState[BG_EY_NODE_FEL_REAVER] == EY_POINT_UNDER_CONTROL && m_PointOwnedByTeam[BG_EY_NODE_FEL_REAVER] == source->GetTeam()) if (m_FlagState && GetFlagPickerGuid() == source->GetObjectGuid()) EventPlayerCapturedFlag(source, BG_EY_NODE_FEL_REAVER); break; case TR_MAGE_TOWER_POINT: if (m_PointState[BG_EY_NODE_MAGE_TOWER] == EY_POINT_UNDER_CONTROL && m_PointOwnedByTeam[BG_EY_NODE_MAGE_TOWER] == source->GetTeam()) if (m_FlagState && GetFlagPickerGuid() == source->GetObjectGuid()) EventPlayerCapturedFlag(source, BG_EY_NODE_MAGE_TOWER); break; case TR_DRAENEI_RUINS_POINT: if (m_PointState[BG_EY_NODE_DRAENEI_RUINS] == EY_POINT_UNDER_CONTROL && m_PointOwnedByTeam[BG_EY_NODE_DRAENEI_RUINS] == source->GetTeam()) if (m_FlagState && GetFlagPickerGuid() == source->GetObjectGuid()) EventPlayerCapturedFlag(source, BG_EY_NODE_DRAENEI_RUINS); break; case 4512: case 4515: case 4517: case 4519: case 4530: case 4531: case 4568: case 4569: case 4570: case 4571: case 5866: break; default: sLog.outError("WARNING: Unhandled AreaTrigger in Battleground: %u", trigger); source->GetSession()->SendAreaTriggerMessage("Warning: Unhandled AreaTrigger in Battleground: %u", trigger); break; } }
void BattleGroundEY::Update(uint32 diff) { BattleGround::Update(diff); if (GetStatus() == STATUS_IN_PROGRESS) { m_PointAddingTimer -= diff; if (m_PointAddingTimer <= 0) { m_PointAddingTimer = BG_EY_FPOINTS_TICK_TIME; if (m_TeamPointsCount[BG_TEAM_ALLIANCE] > 0) AddPoints(ALLIANCE, BG_EY_TickPoints[m_TeamPointsCount[BG_TEAM_ALLIANCE] - 1]); if (m_TeamPointsCount[BG_TEAM_HORDE] > 0) AddPoints(HORDE, BG_EY_TickPoints[m_TeamPointsCount[BG_TEAM_HORDE] - 1]); } if (m_FlagState == BG_EY_FLAG_STATE_WAIT_RESPAWN || m_FlagState == BG_EY_FLAG_STATE_ON_GROUND) { m_FlagsTimer -= diff; if (m_FlagsTimer < 0) { m_FlagsTimer = 0; if (m_FlagState == BG_EY_FLAG_STATE_WAIT_RESPAWN) RespawnFlag(true); else RespawnFlagAfterDrop(); } } m_TowerCapCheckTimer -= diff; if (m_TowerCapCheckTimer <= 0) { //check if player joined point /*I used this order of calls, because although we will check if one player is in gameobject's distance 2 times but we can count of players on current point in CheckSomeoneLeftPoint */ CheckSomeoneJoinedPoint(); //check if player left point CheckSomeoneLeftPoint(); UpdatePointStatuses(); m_TowerCapCheckTimer = BG_EY_FPOINTS_TICK_TIME; } // areatrigger for Fel Reaver was removed? so: if (m_FlagState) if(Player* plr = sObjectMgr.GetPlayer(GetFlagPickerGuid())) if(plr->GetDistance2d(2043.99f, 1729.91f) < 2) if(m_PointState[BG_EY_NODE_FEL_REAVER] == EY_POINT_UNDER_CONTROL && m_PointOwnedByTeam[BG_EY_NODE_FEL_REAVER] == plr->GetTeam()) EventPlayerCapturedFlag(plr, BG_EY_NODE_FEL_REAVER); } }
void BattleGroundEY::EventPlayerCapturedFlag(Player *Source, BG_EY_Nodes node) { if (GetStatus() != STATUS_IN_PROGRESS || GetFlagPickerGuid() != Source->GetObjectGuid()) return; ClearFlagPicker(); m_FlagState = BG_EY_FLAG_STATE_WAIT_RESPAWN; Source->RemoveAurasDueToSpell(BG_EY_NETHERSTORM_FLAG_SPELL); Source->RemoveAurasWithInterruptFlags(AURA_INTERRUPT_FLAG_ENTER_PVP_COMBAT); if (Source->GetTeam() == ALLIANCE) PlaySoundToAll(BG_EY_SOUND_FLAG_CAPTURED_ALLIANCE); else PlaySoundToAll(BG_EY_SOUND_FLAG_CAPTURED_HORDE); SpawnEvent(BG_EY_EVENT_CAPTURE_FLAG, node, true); m_FlagsTimer = BG_EY_FLAG_RESPAWN_TIME; BattleGroundTeamIndex team_id; if (Source->GetTeam() == ALLIANCE) { team_id = BG_TEAM_ALLIANCE; SendMessageToAll(LANG_BG_EY_CAPTURED_FLAG_A, CHAT_MSG_BG_SYSTEM_ALLIANCE, Source); } else { team_id = BG_TEAM_HORDE; SendMessageToAll(LANG_BG_EY_CAPTURED_FLAG_H, CHAT_MSG_BG_SYSTEM_HORDE, Source); } if (m_TeamPointsCount[team_id] > 0) AddPoints(Source->GetTeam(), BG_EY_FlagPoints[m_TeamPointsCount[team_id] - 1]); RewardXpToTeam(0, 0.6f, Source->GetTeam()); UpdatePlayerScore(Source, SCORE_FLAG_CAPTURES, 1); Source->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_BG_OBJECTIVE_CAPTURE,1,183); }