Esempio n. 1
0
 protected virtual void OnSpellTargeting(SpellTargetEventArgs e)
 {
     SpellTargeting?.Invoke(this, e);
 }
        public IEnumerable <(Spell Id, MagicSpell Info)> FindSpells(SpellRoutine routine, SpellTargeting targeting,
                                                                    SpellElement element     = SpellElement.Any,
                                                                    SpellStatus status       = SpellStatus.Any,
                                                                    OOBSpellRoutine oobSpell = OOBSpellRoutine.None
                                                                    )
        {
            IEnumerable <MagicSpell> foundSpells;

            if (routine == SpellRoutine.Life)
            {
                foundSpells = SpellInfos.Where(s =>
                                               (s.routine == SpellRoutine.CureAilment) &&
                                               (s.targeting == targeting || targeting == SpellTargeting.Any) &&
                                               (s.effect == (byte)SpellStatus.Death));
            }
            else if (routine == SpellRoutine.Smoke)
            {
                foundSpells = SpellInfos.Where(s =>
                                               (s.routine == SpellRoutine.CureAilment) &&
                                               (s.targeting == targeting || targeting == SpellTargeting.Any) &&
                                               (s.effect == 0));
            }
            else if (routine == SpellRoutine.InflictStatus || routine == SpellRoutine.PowerWord || routine == SpellRoutine.CureAilment)
            {
                foundSpells = SpellInfos.Where(s =>
                                               (s.routine == routine) &&
                                               (s.targeting == targeting || targeting == SpellTargeting.Any) &&
                                               (s.elem == element || element == SpellElement.Any) &&
                                               (s.effect == (byte)status || status == SpellStatus.Any));
            }
            else
            {
                foundSpells = SpellInfos.Where(s =>
                                               (s.routine == routine) &&
                                               (s.targeting == targeting || targeting == SpellTargeting.Any) &&
                                               (s.elem == element || element == SpellElement.Any) &&
                                               (s.oobSpellRoutine == oobSpell || oobSpell == OOBSpellRoutine.None));
            }

            return(foundSpells.Select(s => ((Spell)Convert.ToByte((int)Spell.CURE + s.Index), s)).ToList());
        }