void SearchUnits(List <Unit> targetList, float radius, bool check3D) { var check = new AnyUnitInObjectRangeCheck(this, radius, check3D); if (IsServerSide()) { var searcher = new PlayerListSearcher(this, targetList, check); Cell.VisitWorldObjects(this, searcher, GetTemplate().MaxSearchRadius); } else { var searcher = new UnitListSearcher(this, targetList, check); Cell.VisitAllObjects(this, searcher, GetTemplate().MaxSearchRadius); } }
void OnPeriodic(AuraEffect aurEff) { // Every 5 seconds Unit target = GetTarget(); Unit caster = GetCaster(); // If our player is no longer sit, remove all auras if (target.GetStandState() != UnitStandStateType.Sit) { target.RemoveAura(SpellIds.RomanticPicnicAchiev); target.RemoveAura(GetAura()); return; } target.CastSpell(target, SpellIds.BasketCheck, false); // unknown use, it targets Romantic Basket target.CastSpell(target, RandomHelper.RAND(SpellIds.MealEatVisual, SpellIds.DrinkVisual), false); bool foundSomeone = false; // For nearby players, check if they have the same aura. If so, cast Romantic Picnic (45123) // required by achievement and "hearts" visual List <Player> playerList = new List <Player>(); AnyPlayerInObjectRangeCheck checker = new AnyPlayerInObjectRangeCheck(target, SharedConst.InteractionDistance * 2); var searcher = new PlayerListSearcher(target, playerList, checker); Cell.VisitWorldObjects(target, searcher, SharedConst.InteractionDistance * 2); foreach (var player in playerList) { if (player != target && player.HasAura(GetId())) // && player.GetStandState() == UNIT_STAND_STATE_SIT) { if (caster) { caster.CastSpell(player, SpellIds.RomanticPicnicAchiev, true); caster.CastSpell(target, SpellIds.RomanticPicnicAchiev, true); } foundSomeone = true; // break; } } if (!foundSomeone && target.HasAura(SpellIds.RomanticPicnicAchiev)) { target.RemoveAura(SpellIds.RomanticPicnicAchiev); } }
public virtual bool Update(uint diff) { if (!m_capturePoint) { return(false); } float radius = m_capturePoint.GetGoInfo().ControlZone.radius; for (int team = 0; team < 2; ++team) { foreach (var playerGuid in m_activePlayers[team].ToList()) { Player player = Global.ObjAccessor.FindPlayer(playerGuid); if (player) { if (!m_capturePoint.IsWithinDistInMap(player, radius) || !player.IsOutdoorPvPActive()) { HandlePlayerLeave(player); } } } } List <Player> players = new List <Player>(); var checker = new AnyPlayerInObjectRangeCheck(m_capturePoint, radius); var searcher = new PlayerListSearcher(m_capturePoint, players, checker); Cell.VisitWorldObjects(m_capturePoint, searcher, radius); foreach (var player in players) { if (player.IsOutdoorPvPActive()) { m_activePlayers[player.GetTeamId()].Add(player.GetGUID()); HandlePlayerEnter(player); } } // get the difference of numbers float fact_diff = (m_activePlayers[0].Count - m_activePlayers[1].Count) * diff / 1000; if (fact_diff == 0.0f) { return(false); } Team Challenger = 0; float maxDiff = m_maxSpeed * diff; if (fact_diff < 0) { // horde is in majority, but it's already horde-controlled . no change if (m_State == ObjectiveStates.Horde && m_value <= -m_maxValue) { return(false); } if (fact_diff < -maxDiff) { fact_diff = -maxDiff; } Challenger = Team.Horde; } else { // ally is in majority, but it's already ally-controlled . no change if (m_State == ObjectiveStates.Alliance && m_value >= m_maxValue) { return(false); } if (fact_diff > maxDiff) { fact_diff = maxDiff; } Challenger = Team.Alliance; } float oldValue = m_value; uint oldTeam = m_team; m_OldState = m_State; m_value += fact_diff; if (m_value < -m_minValue) // red { if (m_value < -m_maxValue) { m_value = -m_maxValue; } m_State = ObjectiveStates.Horde; m_team = TeamId.Horde; } else if (m_value > m_minValue) // blue { if (m_value > m_maxValue) { m_value = m_maxValue; } m_State = ObjectiveStates.Alliance; m_team = TeamId.Alliance; } else if (oldValue * m_value <= 0) // grey, go through mid point { // if challenger is ally, then n.a challenge if (Challenger == Team.Alliance) { m_State = ObjectiveStates.NeutralAllianceChallenge; } // if challenger is horde, then n.h challenge else if (Challenger == Team.Horde) { m_State = ObjectiveStates.NeutralHordeChallenge; } m_team = TeamId.Neutral; } else // grey, did not go through mid point { // old phase and current are on the same side, so one team challenges the other if (Challenger == Team.Alliance && (m_OldState == ObjectiveStates.Horde || m_OldState == ObjectiveStates.NeutralHordeChallenge)) { m_State = ObjectiveStates.HordeAllianceChallenge; } else if (Challenger == Team.Horde && (m_OldState == ObjectiveStates.Alliance || m_OldState == ObjectiveStates.NeutralAllianceChallenge)) { m_State = ObjectiveStates.AllianceHordeChallenge; } m_team = TeamId.Neutral; } if (m_value != oldValue) { SendChangePhase(); } if (m_OldState != m_State) { if (oldTeam != m_team) { ChangeTeam(oldTeam); } ChangeState(); return(true); } return(false); }