public override string ToString() { string ReturnValue = base.ToString(); TargetFilter tf = targetFilterFlags; if (textID != null && textID != string.Empty) { ReturnValue = textID; } if ((tf & TargetFilter.Dead) != 0) { ReturnValue += " (Dead)"; } else { if ((tf & TargetFilter.Cloaked) != 0) { ReturnValue += " (Cloaked)"; } if ((tf & TargetFilter.Detector) != 0) { ReturnValue += " (Detector)"; } } return(ReturnValue); }
public static void AddTargetFilter(string name, Serial serial) { if (TargetFilters.Any(f => f.Serial == serial) == false) { if (FriendsManager.IsFriend(serial)) { World.Player.SendMessage(MsgLevel.Warning, $"'{name}' ({serial}) is a friend, not adding to target filter list"); return; } TargetFilter newFilter = new TargetFilter { Name = name, Serial = serial }; TargetFilters.Add(newFilter); World.Player.SendMessage(MsgLevel.Info, $"Added '{name}' ({serial}) to the target filter list"); } else { World.Player.SendMessage(MsgLevel.Warning, $"'{name}' ({serial}) is already on the target filter"); } }
public async Task <User.Info> GetUserFromIdAsync(string id, TargetFilter targetFilter) { EnsureNotCancelled(); var result = await Resolve <IAppApiEndPoint>().GetSingleUserAsync(new SingleUserRequest(id, targetFilter.GetDescription())).ConfigureAwait(false); return(result.UserEntity !); }
public RecommendationEngine(MakoClient makoClient, RecommendationContentType?recommendContentType, TargetFilter filter, uint?maxBookmarkIdForRecommend, uint?minBookmarkIdForRecentIllust, EngineHandle?engineHandle) : base(makoClient, engineHandle) { _recommendContentType = recommendContentType ?? RecommendationContentType.Illust; _filter = filter; _maxBookmarkIdForRecommend = maxBookmarkIdForRecommend; _minBookmarkIdForRecentIllust = minBookmarkIdForRecentIllust; }
public MemberMenuData(InspectorData inspectorData, Object[] components) { this.inspectorData = inspectorData; this.components = new MemberMenuComponent[components.Length]; for (int i = 0; i < components.Length; i++) { int occurences = 1; if (componentOccurrences.ContainsKey(components[i].GetType())) { occurences = ++componentOccurrences[components[i].GetType()]; } else { componentOccurrences.Add(components[i].GetType(), occurences); } TargetFilter menuTargetFilters = TargetFilter.Static | TargetFilter.Dynamic; TargetTypeFilter menuTypeFilters = TargetTypeFilter.Any; if (inspectorData.filterAttribute != null) { menuTargetFilters = inspectorData.filterAttribute.targetFilters; menuTypeFilters = inspectorData.filterAttribute.typeFilters; } this.components[i] = new MemberMenuComponent(i, components[i], components[i].GetType().Name + (occurences > 1 ? (" " + (occurences - 1)) : ""), inspectorData.eventType, menuTargetFilters, menuTypeFilters); } }
public static void Load(XmlElement node) { ClearAll(); try { foreach (XmlElement el in node.GetElementsByTagName("targetfilter")) { try { TargetFilter filter = new TargetFilter { Name = el.GetAttribute("name"), Serial = Serial.Parse(el.GetAttribute("serial")) }; TargetFilters.Add(filter); } catch { // bad entry, ignore } } } catch { // must not be in the profile, move on } RedrawList(); }
/// <summary> /// Adds all chained units around the selected unit to the list /// </summary> public void FindChain(Unit first, TargetFilter filter, bool harmful, int limit) { SpellEffectHandler firstHandler = FirstHandler; WorldObject caster = firstHandler.Cast.CasterObject; Spell spell = firstHandler.Cast.Spell; first.IterateEnvironment(firstHandler.GetRadius(), target => { if ((spell.FacingFlags & SpellFacingFlags.RequiresInFront) != 0 && caster != null && !target.IsInFrontOf(caster) || (target == caster || target == first || caster == null) || (harmful && !caster.MayAttack(target) || !harmful && !caster.IsInSameDivision(target) || ValidateTarget(target, filter) != SpellFailedReason.Ok)) { return(true); } AddOrReplace(target, limit); return(true); }); if (TargetEvaluator != null) { return; } Sort((a, b) => a.GetDistanceSq(first).CompareTo(b.GetDistanceSq(first))); if (Count <= limit) { return; } RemoveRange(limit, Count - limit); }
// todo: export combat filtering class. public static bool PassFiltering(TargetFilter filter, CombatAction e) { return((filter == TargetFilter.Enemies && e.target && e.source.data.alliance != e.target.data.alliance) || (filter == TargetFilter.All) || (filter == TargetFilter.AlliesAll && e.target && e.source.data.alliance == e.target.data.alliance) || (filter == TargetFilter.AlliesOther && e.target && e.target != e.source && e.source.data.alliance == e.target.data.alliance) || (filter == TargetFilter.Self && e.target && e.target == e.source)); }
public override void OnReloaded() { NavigationNode.Clear(); NodeCondition.Clear(); NodeAction.Clear(); AITarget.Clear(); TargetFilter.Clear(); }
/// <summary> /// Search user in Pixiv. /// </summary> /// <param name="keyword">The text in searching</param> /// <param name="userSortOption">The <see cref="UserSortOption" /> enum as date ascending or descending.</param> /// <param name="targetFilter">The <see cref="TargetFilter" /> option targeting android or ios</param> /// <returns> /// The <see cref="UserSearchEngine" /> containing the search results for users. /// </returns> public IFetchEngine <User> SearchUser( string keyword, UserSortOption userSortOption = UserSortOption.DateDescending, TargetFilter targetFilter = TargetFilter.ForAndroid) { EnsureNotCancelled(); return(new UserSearchEngine(this, targetFilter, userSortOption, keyword, new EngineHandle(CancelInstance))); }
private static Composite FindTarget(CanRunDecoratorDelegate cond, TargetFilter filter, RefineFilter refineFilter, Comparison <HealableUnit> compare, string label, params Composite[] children) { return(new Decorator( cond, new Sequence( // get a target new Action( delegate { var targetPerformanceTimer = new Stopwatch(); // lets see if we can get some performance on this one. targetPerformanceTimer.Start(); // lets see if we can get some performance on this one. //CrabbyProfiler.Instance.Runs.Add(new Run("FindTarget")); // Nothing to filter against if (!UnitsFilter(filter).Any()) { HealableUnit.HealTarget = null; return RunStatus.Failure; } // Filter the Healable Units var raid = UnitsFilter(filter).Where(x => x != null && (ObjectManager.ObjectList.Any(y => y.Guid == x.ToUnit().Guid) && refineFilter(x)) && x.ToUnit().Distance2DSqr < 40 * 40 && !x.ToUnit().ToPlayer().IsGhost&& !x.ToUnit().HasAura("Deep Corruption")).ToList(); // Nothing to heal. if (!IsPlayingWoW() || !raid.Any()) { HealableUnit.HealTarget = null; return RunStatus.Failure; } raid.Sort(compare); var target = raid.FirstOrDefault(); if (target != null) { Log( label, CLULogger.SafeName(target.ToUnit()), target.MaxHealth, target.CurrentHealth, target.MaxHealth - target.CurrentHealth, targetPerformanceTimer.ElapsedMilliseconds); // lets see if we can get some performance on this one. //target.ToUnit().Target(); HealableUnit.HealTarget = target; return RunStatus.Success; } HealableUnit.HealTarget = null; //CrabbyProfiler.Instance.EndLast(); return RunStatus.Failure; }), new Action(a => StyxWoW.SleepForLagDuration()), // if success, keep going. Else quit sub routine new PrioritySelector(children)))); }
/// <summary> /// Used for Lock picking and opening (with or without keys) /// </summary> public static void AddItemOrObject(this SpellTargetCollection targets, TargetFilter filter, ref SpellFailedReason failReason) { if (targets.Cast.TargetItem != null || targets.Cast.SelectedTarget is GameObject) { return; } failReason = SpellFailedReason.BadTargets; }
public PostedNovelEngine( [NotNull] MakoClient makoClient, string uid, TargetFilter targetFilter, EngineHandle?engineHandle) : base(makoClient, engineHandle) { _uid = uid; _targetFilter = targetFilter; }
/// <summary> /// Request recommended illustrations in Pixiv. /// </summary> /// <param name="recommendContentType">The <see cref="RecommendationContentType" /> option for illust or manga</param> /// <param name="targetFilter">The <see cref="TargetFilter" /> option targeting android or ios</param> /// <param name="maxBookmarkIdForRecommend">Max bookmark id for recommendation</param> /// <param name="minBookmarkIdForRecentIllust">Min bookmark id for recent illust</param> /// <returns> /// The <see cref="RecommendationEngine" /> containing recommended illustrations. /// </returns> public IFetchEngine <Illustration> Recommendations( RecommendationContentType recommendContentType = RecommendationContentType.Illust, TargetFilter targetFilter = TargetFilter.ForAndroid, uint?maxBookmarkIdForRecommend = null, uint?minBookmarkIdForRecentIllust = null) { EnsureNotCancelled(); return(new RecommendationEngine(this, recommendContentType, targetFilter, maxBookmarkIdForRecommend, minBookmarkIdForRecentIllust, new EngineHandle(CancelInstance))); }
public DarkClown() : base("Dark Clown", 4, Civilization.Darkness, 6000, Subtype.BrainJacker) { Abilities.Add(new BlockerAbility()); Abilities.Add(new CannotAttackCreaturesAbility()); Abilities.Add(new CannotAttackPlayersAbility()); var targetFilter = new TargetFilter(); Abilities.Add(new WinBattleAbility(new DestroyCreaturesResolvable(targetFilter), targetFilter)); }
//获取目标节点组 public static List <NodeItem> SelectTarget(int _player, TargetFilter _filter, NodeItem _origin = null, int _range = 0) { targetNodes = new List <NodeItem>(); if (_origin != null) { targetNodes = BattleManager.instance.map.GetNodeItemsWithinRange(_origin, _range, false); } //目标类型为单位 if (_filter.targetType == TargetType.Unit) { List <Unit> targetUnits; if (_filter.allyOrEnemy == AllyOrEnemy.All) { targetUnits = BattleManager.instance.allUnits; } else { //目标为玩家单位 int side = (_player + (int)_filter.allyOrEnemy) % 2; targetUnits = BattleManager.instance.units[side]; } //如果源点存在 if (_origin != null) { //移除不在目标单位组的目标节点 NodeObject obj; for (int i = targetNodes.Count - 1; i > 0; i--) { obj = targetNodes[i].nodeObject; if (obj == null || obj.GetComponent <NodeObject>().nodeObjectType == NodeObjectType.unit || !targetUnits.Contains(obj.GetComponent <Unit>())) { targetNodes.RemoveAt(i); } } } else { //否则直接返回这些单位的所在点 foreach (Unit item in targetUnits) { targetNodes.Add(item.nodeItem); } } } else { //目标类型为节点 } return(targetNodes); }
public async Task<IEnumerable<TrendingTag>> GetTrendingTagsAsync(TargetFilter targetFilter) { EnsureNotCancelled(); return ((await Resolve<IAppApiEndPoint>().GetTrendingTagsAsync(targetFilter.GetDescription()).ConfigureAwait(false)).TrendTags ?? Enumerable.Empty<TrendingTagResponse.TrendTag>()).Select(t => new TrendingTag { Tag = t.TagStr, Translation = t.TranslatedName, Illustration = t.Illust }); }
/// <summary> /// Creates a <see cref="BookmarkEngine" /> /// </summary> /// <param name="makoClient">The <see cref="MakoClient" /> that owns this object</param> /// <param name="uid">Id of the user</param> /// <param name="privacyPolicy">The privacy option</param> /// <param name="targetFilter">Indicates the target API of the fetch operation</param> /// <param name="engineHandle"></param> public BookmarkEngine( MakoClient makoClient, string uid, PrivacyPolicy privacyPolicy, TargetFilter targetFilter, EngineHandle?engineHandle = null) : base(makoClient, engineHandle) { _uid = uid; _privacyPolicy = privacyPolicy; _targetFilter = targetFilter; }
public static void AddObject(this SpellTargetCollection targets, TargetFilter filter, ref SpellFailedReason failReason) { if (!(targets.Cast.SelectedTarget is GameObject)) { failReason = SpellFailedReason.BadTargets; } else { targets.Add(targets.Cast.SelectedTarget); } }
public SetupTargets( IAbility parent, TargetFilter filter, TargetNotification notification, int priority = 0) { Parent = parent; Priority = priority; TargetFilter = filter; Notification = notification; }
public RankingEngine( MakoClient makoClient, RankOption rankOption, DateTime dateTime, TargetFilter targetFilter, EngineHandle?engineHandle) : base(makoClient, engineHandle) { _rankOption = rankOption; _dateTime = dateTime; _targetFilter = targetFilter; }
public MemberMenuComponent(int index, Object component, string displayName, Type eventType, TargetFilter menuTargetFilters, TargetTypeFilter menuTypeFilters) { this.index = index; this.component = component; this.displayName = displayName; this.eventType = eventType; this.menuTargetFilters = menuTargetFilters; this.menuTypeFilters = menuTypeFilters; // Automatically create members list when new instance of this class is created CreateStaticMemberItems(GetValidStaticMembers()); CreateDynamicMemberItems(GetValidDynamicMembers()); }
public MissileCoordination(MissileManagement management, IMyTerminalBlock rc, ACPWrapper antennas, TargetFilter tFilter, int targetTimeOutSec = 15) { this.management = management; this.reference = rc; this.antennas = antennas; this.targetTimeOutSec = targetTimeOutSec; this.tFilter = tFilter; targets = new Dictionary <long, MyDetectedEntityInfo>(); missileStaging = new List <IEnumerator <bool> >(); firedMissiles = new Dictionary <long, MissileManagement.MissileInfo>(); firedAt = new Dictionary <long, DateTime>(); }
public static void IsInFrontOfCaster(SpellEffectHandler effectHandler, WorldObject target, ref SpellFailedReason failedReason, TargetFilter filter) { WorldObject casterObject = effectHandler.Cast.CasterObject; if (casterObject.IsPlayer && !target.IsInFrontOf(casterObject)) { failedReason = SpellFailedReason.NotInfront; } else { filter(effectHandler, target, ref failedReason); } }
//効果の処理 private IEnumerator EffctExecution(BattleCommand battleCommand) { BattleCharacter owner = battleCommand.owner; List <BattleCharacter> targets = battleCommand.target; TargetUnit targetUnit = battleCommand.GetTargetType().targetUnit; PlayableAsset playableAsset = battleCommand.GetCommand().animation; var effects = battleCommand.GetEffect(); //効果の範囲が全体の場合 if (battleCommand.GetTargetType().targetRange == TargetRange.全体) { //敵キャラクタの行動はアニメション表示をしない if (owner is PlayerCharacter) { BattleDirectorController.Instance.AnimationPlay(playableAsset); } } foreach (var effect in effects) { //単体処理 foreach (var target in targets) { //ターゲットが存在しないとき新しいターゲットに変更する BattleCharacter newTarget = target; if (TargetUnit.死亡者 != targetUnit && target.IsDead()) { TargetFilter targetFilter = new TargetFilter(); newTarget = targetFilter.Auto(battleCommand); } //効果の処理 if (battleCommand.GetTargetType().targetRange == TargetRange.単体) { //敵キャラクタの行動はアニメション表示をしない if (owner is PlayerCharacter) { BattleDirectorController.Instance.AnimationPlay(playableAsset, newTarget.transform); } } effect.Use(owner, newTarget); //演出を再生する yield return(BattleDirectorController.Instance.Play()); } } yield break; }
public static void AddSelf(this SpellTargetCollection targets, TargetFilter filter, ref SpellFailedReason failReason) { var self = targets.Cast.CasterObject; if (self == null) { // invalid trigger proc log.Warn("Invalid SpellCast tried to target self, but no Caster given: {0}", targets.Cast); failReason = SpellFailedReason.Error; return; } if ((failReason = targets.ValidateTargetForHandlers(self)) == SpellFailedReason.Ok) { targets.Add(self); } }
public SCard_AcraneExplosion() : base("Acrane Explosion", 2) { filter = (int pattern, TargetObject x) => { if ((pattern & Action.OPP) == 0) { return(false); } if ((pattern & Action.BOARD) == 0) { return(false); } return(x is Monster); }; fixer = (TargetObject x) => { (x as Monster).TakeDamage(1); }; }
/// <summary> /// Adds all chained units around the selected unit to the list /// </summary> public void FindChain(Unit first, TargetFilter filter, bool harmful, int limit) { var handler = FirstHandler; var caster = handler.Cast.CasterObject; var spell = handler.Cast.Spell; first.IterateEnvironment(handler.GetRadius(), target => { if ((spell.FacingFlags & SpellFacingFlags.RequiresInFront) != 0 && caster != null && !target.IsInFrontOf(caster)) { return(true); } if (target != caster && target != first) { if (caster == null) { // TODO: Add chain targets, even if there is no caster return(true); } else if ((harmful && !caster.MayAttack(target)) || (!harmful && !caster.IsInSameDivision(target))) { return(true); } if (ValidateTarget(target, filter) == SpellFailedReason.Ok) { AddOrReplace(target, limit); } //return Count < limit; } return(true); }); if (TargetEvaluator == null) { Sort((a, b) => a.GetDistanceSq(first).CompareTo(b.GetDistanceSq(first))); if (Count > limit) { RemoveRange(limit, Count - limit); } } }
public static void AddChannelObject(this SpellTargetCollection targets, TargetFilter filter, ref SpellFailedReason failReason) { var caster = targets.Cast.CasterUnit; if (caster != null) { if (caster.ChannelObject != null) { if ((failReason = targets.ValidateTarget(caster.ChannelObject, filter)) == SpellFailedReason.Ok) { targets.Add(caster.ChannelObject); } } else { failReason = SpellFailedReason.BadTargets; } } }
/// <summary> /// Removes all targets that don't satisfy the effects' constraints /// </summary> public void RevalidateAll() { SpellEffectHandler firstHandler = this.FirstHandler; SpellCast cast = firstHandler.Cast; for (int index = this.Count - 1; index >= 0; --index) { WorldObject target = this[index]; if (target.IsInWorld) { TargetDefinition targetDefinition = firstHandler.Effect.GetTargetDefinition(); if (targetDefinition != null) { if (this.ValidateTarget(target, targetDefinition.Filter) == SpellFailedReason.Ok) { continue; } } else if (this.ValidateTarget(target, DefaultTargetDefinitions.GetTargetFilter(firstHandler.Effect.ImplicitTargetA)) == SpellFailedReason.Ok) { TargetFilter targetFilter = DefaultTargetDefinitions.GetTargetFilter(firstHandler.Effect.ImplicitTargetB); if (targetFilter != null) { SpellFailedReason failReason = SpellFailedReason.Ok; targetFilter(firstHandler, target, ref failReason); if (failReason == SpellFailedReason.Ok) { continue; } } else { continue; } } } this.RemoveAt(index); } }
public static void AddPet(this SpellTargetCollection targets, TargetFilter filter, ref SpellFailedReason failReason) { var caster = targets.Cast.CasterObject; if (!(caster is Character)) { log.Warn("Non-Player {0} tried to cast Pet - spell {1}", caster, targets.Cast.Spell); failReason = SpellFailedReason.TargetNotPlayer; return; } var pet = ((Character)caster).ActivePet; if (pet == null) { failReason = SpellFailedReason.NoPet; return; } targets.Add(pet); }
/// <summary> /// Composites the given filter into the existing filter /// </summary> public void AddFilter(TargetFilter filter) { if (Filter == null) { Filter = filter; } else { // create new filter that filters through both filters var oldFilter = Filter; Filter = (SpellEffectHandler effectHandler, WorldObject target, ref SpellFailedReason failReason) => { oldFilter(effectHandler, target, ref failReason); if (failReason == SpellFailedReason.Ok) { filter(effectHandler, target, ref failReason); } }; } }
private static Composite FindTarget(CanRunDecoratorDelegate cond, TargetFilter filter, RefineFilter refineFilter, Comparison<HealableUnit> compare, string label, params Composite[] children) { return new Decorator( cond, new Sequence( // get a target new Action( delegate { var targetPerformanceTimer = new Stopwatch(); // lets see if we can get some performance on this one. targetPerformanceTimer.Start(); // lets see if we can get some performance on this one. //CrabbyProfiler.Instance.Runs.Add(new Run("FindTarget")); // Nothing to filter against if (!UnitsFilter(filter).Any()) { HealableUnit.HealTarget = null; return RunStatus.Failure; } // Filter the Healable Units var raid = UnitsFilter(filter).Where(x => x != null && (ObjectManager.ObjectList.Any(y => y.Guid == x.ToUnit().Guid) && refineFilter(x)) && x.ToUnit().Distance2DSqr < 40 * 40 && !x.ToUnit().ToPlayer().IsGhost && !x.ToUnit().HasAura("Deep Corruption")).ToList(); // Nothing to heal. if (!IsPlayingWoW() || !raid.Any()) { HealableUnit.HealTarget = null; return RunStatus.Failure; } raid.Sort(compare); var target = raid.FirstOrDefault(); if (target != null) { Log( label, CLULogger.SafeName(target.ToUnit()), target.MaxHealth, target.CurrentHealth, target.MaxHealth - target.CurrentHealth, targetPerformanceTimer.ElapsedMilliseconds); // lets see if we can get some performance on this one. //target.ToUnit().Target(); HealableUnit.HealTarget = target; return RunStatus.Success; } HealableUnit.HealTarget = null; //CrabbyProfiler.Instance.EndLast(); return RunStatus.Failure; }), new Action(a => StyxWoW.SleepForLagDuration()), // if success, keep going. Else quit sub routine new PrioritySelector(children))); }
//public static void AddOwnPet(this SpellTargetCollection targets, TargetFilter filter, ref SpellFailedReason failReason) //{ // var chr = targets.Cast.Caster as Character; // if (chr != null) // { // var pet = chr.ActivePet; // if (pet != null) // { // foreach (var handler in targets.m_handlers) // { // if ((failReason = handler.CheckValidTarget(pet)) != SpellFailedReason.Ok) // { // return; // } // } // targets.Add(pet); // } // else // { // failReason = SpellFailedReason.BadTargets; // } // } // else // { // log.Warn("NPC \"{0}\" used Spell with Pet-Target.", targets.Cast.Caster); // failReason = SpellFailedReason.BadTargets; // } //} #endregion #region Selection /// <summary> /// Adds the object or unit that has been chosen by a player when the spell was casted /// </summary> /// <param name="targets"></param> public static void AddSelection(this SpellTargetCollection targets, TargetFilter filter, ref SpellFailedReason failReason) { AddSelection(targets, filter, ref failReason, false); }
/// <summary> /// /// </summary> public static void AddSecondHighestThreatTarget(this SpellTargetCollection targets, TargetFilter filter, ref SpellFailedReason failReason) { var caster = targets.Cast.CasterUnit as NPC; if (caster == null) { failReason = SpellFailedReason.NoValidTargets; return; } var nearest = caster.ThreatCollection.GetAggressorByThreatRank(2); if (nearest != null) { targets.Add(nearest); } else { failReason = SpellFailedReason.NoValidTargets; } }
/// <summary> /// Your current summon or self /// </summary> public static void AddSummon(this SpellTargetCollection targets, TargetFilter filter, ref SpellFailedReason failReason) { // if (Handler.SpellCast.Caster.Summon == null) targets.AddSelf(filter, ref failReason); }
/// <summary> /// Used for Lock picking and opening (with or without keys) /// </summary> public static void AddItemOrObject(this SpellTargetCollection targets, TargetFilter filter, ref SpellFailedReason failReason) { if (targets.Cast.TargetItem == null && !(targets.Cast.Selected is GameObject)) { failReason = SpellFailedReason.BadTargets; } }
public static void AddTargetsInArea(this SpellTargetCollection targets, Vector3 pos, TargetFilter targetFilter, float radius) { var handler = targets.FirstHandler; var spell = handler.Effect.Spell; var cast = handler.Cast; int limit; if (spell.MaxTargetEffect != null) { limit = spell.MaxTargetEffect.CalcEffectValue(cast.CasterReference); } else { //if IsAllied (used by group/raid spell targeting) it's save to asume the limit is the raid max size (40 players) since some spells have wrong dbc values if (targetFilter == DefaultTargetFilters.IsAllied) { limit = 40; } else limit = (int)spell.MaxTargets; } if (limit < 1) { limit = int.MaxValue; } cast.Map.IterateObjects(pos, radius > 0 ? radius : 5, cast.Phase, obj => { // AoE spells only make sense on Unit targets (at least there is no known spell that does anything else) if (obj is Unit && targets.ValidateTarget(obj, targetFilter) == SpellFailedReason.Ok) { return targets.AddOrReplace(obj, limit); } return true; }); }
public static void AddAllParty(this SpellTargetCollection targets, TargetFilter filter, ref SpellFailedReason failReason) { var cast = targets.Cast; if (cast.CasterChar != null) { // For Characters: Add the whole party if (targets.Cast.CasterChar.Group != null) { foreach (var member in cast.CasterChar.Group) { var chr = member.Character; if (chr != null) { targets.Add(chr); } } } else { failReason = SpellFailedReason.TargetNotInParty; } } else { var radius = targets.FirstHandler.GetRadius(); if (radius == 0) { // For NPCs: Add all friendly minions around (radius 30 if no radius is set?) radius = 30; } targets.AddAreaSource(cast.Spell.HasHarmfulEffects ? (TargetFilter)DefaultTargetFilters.IsFriendly : DefaultTargetFilters.IsHostile, ref failReason, radius); } }
public static void AddAreaDest(this SpellTargetCollection targets, TargetFilter filter, ref SpellFailedReason failReason, float radius) { targets.AddTargetsInArea(targets.Cast.TargetLoc, filter, radius); }
/// <summary> /// Adds targets around the target area /// </summary> public static void AddAreaDest(this SpellTargetCollection targets, TargetFilter filter, ref SpellFailedReason failReason) { AddAreaDest(targets, filter, ref failReason, targets.FirstHandler.GetRadius()); }
private static IEnumerable<HealableUnit> UnitsFilter(TargetFilter filter) { var mobs = new List<WoWPlayer>(); if (HealableUnit.ListofHealableUnits != null) { List<HealableUnit> grp = HealableUnit.ListofHealableUnits.ToList(); switch (filter) { case TargetFilter.None: { return grp.Where(x => x != null && !x.Blacklisted).Select(n => n); } case TargetFilter.Tanks: { return grp.Where(x => x != null && (x.Tank && !x.Blacklisted)).Select(t => t); } case TargetFilter.Healers: { return grp.Where(x => x != null && (x.Healer && !x.Blacklisted)).Select(h => h); } case TargetFilter.Damage: { return grp.Where(x => x != null && (x.Damage && !x.Blacklisted)).Select(d => d); } //// PvP Based targeting... //case TargetFilter.EnemyHealers: // { // var enemyHealers = hostile.Where(x => x.IsPlayer && x.DistanceSqr < 30 * 30 && x.InLineOfSpellSight && x.IsCasting && Unit.HealerSpells.Contains(x.CastingSpell.Name)); // return mobs.Where(x => enemyHealers.Any(y => y.Guid == x.Guid)); // } //case TargetFilter.FlagCarrier: // { // var flagCarriers = hostile.Where(x => x.IsPlayer && x.DistanceSqr < 30 * 30 && x.InLineOfSpellSight && (Me.IsHorde ? x.HasAura("Alliance Flag") : x.HasAura("Horde Flag"))); // return mobs.Where(x => flagCarriers.Any(y => y.Guid == x.Guid)); // } //case TargetFilter.Threats: // { // var threats = hostile.Where(x => x.IsPlayer && x.DistanceSqr < 15 * 15 && x.InLineOfSpellSight && x.IsTargetingMeOrPet); // return mobs.Where(x => threats.Any(y => y.Guid == x.Guid)); // } //case TargetFilter.LowHealth: // { // var lowhealthers = hostile.Where(x => x.IsPlayer && x.DistanceSqr < 15 * 15 && x.InLineOfSpellSight && x.HealthPercent < 30); // return mobs.Where(x => lowhealthers.Any(y => y.Guid == x.Guid)); // } default: return null; } } return null; }
public void DrawEditor() { targetType = (TargetType)EditorGUILayout.EnumPopup("Target Type", targetType); targetFilter = (TargetFilter)EditorGUILayout.EnumPopup("Target Filter", targetFilter); targetRange = (TargetRange)EditorGUILayout.EnumPopup("Target Range", targetRange); if (targetRange == TargetRange.Range) { range = EditorGUILayout.IntField("Range", range); } else { range = 1; EditorGUILayout.LabelField("Range value is 1 for melee spells"); } targetAOE = (TargetAOE)EditorGUILayout.EnumPopup("Target AOE", targetAOE); for (int i = 0; i < protoEvents.Count; i++) { protoEvents[i].DrawEditor(); } }
public static void AddObject(this SpellTargetCollection targets, TargetFilter filter, ref SpellFailedReason failReason) { if (!(targets.Cast.Selected is GameObject)) { failReason = SpellFailedReason.BadTargets; } else { targets.Add(targets.Cast.Selected); } }
public static void IsInFrontOfCaster(SpellEffectHandler effectHandler, WorldObject target, ref SpellFailedReason failedReason, TargetFilter filter) { var caster = effectHandler.Cast.CasterObject; if (caster.IsPlayer && !target.IsInFrontOf(caster)) { failedReason = SpellFailedReason.NotInfront; } else { filter(effectHandler, target, ref failedReason); } }
/// <summary> /// Adds the selected targets and chain-targets (if any) /// </summary> public static void AddSelection(this SpellTargetCollection targets, TargetFilter filter, ref SpellFailedReason failReason, bool harmful) { var cast = targets.Cast; if (cast == null) return; var caster = cast.CasterObject as Unit; var selected = cast.Selected; if (selected == null) { if (caster == null) { log.Warn("Invalid SpellCast, tried to add Selection but nothing selected and no Caster present: {0}", targets.Cast); failReason = SpellFailedReason.Error; return; } selected = caster.Target; if (selected == null) { failReason = SpellFailedReason.BadTargets; return; } } var effect = targets.FirstHandler.Effect; var spell = effect.Spell; if (selected != caster && caster != null) { if (!caster.IsInMaxRange(spell, selected)) { failReason = SpellFailedReason.OutOfRange; } else if (caster.IsPlayer && !selected.IsInFrontOf(caster)) { failReason = SpellFailedReason.UnitNotInfront; } } if (failReason == SpellFailedReason.Ok) { // standard checks failReason = targets.ValidateTarget(selected, filter); if (failReason == SpellFailedReason.Ok) { // add target and look for more if we have a chain effect targets.Add(selected); var chainCount = effect.ChainTargets; if (caster != null) { chainCount = caster.Auras.GetModifiedInt(SpellModifierType.ChainTargets, spell, chainCount); } if (chainCount > 1 && selected is Unit) { targets.FindChain((Unit)selected, filter, true, chainCount); } } } }