Пример #1
0
        /// <summary>
        /// Warning : this method says if this affect may affect this target. But NOT if the target can be the target of the spell 
        /// (cf épée divine, where you cast it on yourself despite it effects only enemies around you)
        /// </summary>
        /// <param name="spellEffect"></param>
        /// <param name="spell"></param>
        /// <param name="caster"></param>
        /// <param name="target"></param>
        /// <returns></returns>
        public static bool canAffectTarget(EffectDice spellEffect, Spell spell, PlayedFighter caster, Fighter target)
        {
            if (spell.LevelTemplate.spellBreed == (uint)BreedEnum.Eniripsa && spell.Categories == Spell.SpellCategory.Healing && caster.HasState(76)) return false;
            //if (!spell.IsAvailable(target == null ? null : (int?)target.Id)) return false;
            //BiM.Behaviors.Game.Spells.Spell.SpellCategory categories = 0;
            uint surface = spellEffect.Surface;
            //categories = BiM.Behaviors.Game.Spells.Spell.GetEffectCategories((uint)spellEffect.Id, spell.LevelTemplate.id);
            if (spellEffect.Targets == SpellTargetType.NONE) spellEffect.Targets = SpellTargetType.ALL;
            //if (target == null) return !spell.LevelTemplate.needTakenCell;

            if (caster == target) // Self
                return ((spellEffect.Targets & (SpellTargetType.ONLY_SELF | SpellTargetType.SELF)) != 0);

           
            if (caster.Team == target.Team) // Ally
                if (target.Summoned)
                    return ((spellEffect.Targets & SpellTargetType.ALLIES_SUMMON) != 0);
                else
                    return ((spellEffect.Targets & SpellTargetType.ALLIES_NON_SUMMON) != 0);

            if (target.Summoned) // Enemies
                return ((spellEffect.Targets & SpellTargetType.ENEMIES_SUMMON) != 0);
            else
                return ((spellEffect.Targets & SpellTargetType.ENEMIES_NON_SUMMON) != 0);
        }
Пример #2
0
        public BiM.Behaviors.Game.Spells.Spell FindMostEfficientAttackSpell()
        {
            BiM.Behaviors.Game.Spells.Spell bestSpell = null;
            double betterDamage = 0;

            List <BiM.Behaviors.Game.Spells.Spell> spells = Character.SpellsBook.Spells.ToList();

            spells.Add(Character.SpellsBook.WeaponSpellLike());

            foreach (BiM.Behaviors.Game.Spells.Spell spell in spells)
            {
                if (spell.IsAvailable(null, BiM.Behaviors.Game.Spells.Spell.SpellCategory.Damages))
                {
                    double dmg = spell.GetTotalDamageOnAllEnemies(this) / spell.LevelTemplate.apCost;
                    if (dmg > betterDamage)
                    {
                        betterDamage = dmg;
                        bestSpell    = spell;
                    }
                }
            }
            if (bestSpell == null)
            {
                return(Character.SpellsBook.Spells.Where(spell => ((spell.Categories & BiM.Behaviors.Game.Spells.Spell.SpellCategory.Damages) != 0) && spell.IsAvailable(null, null)).OrderByDescending(spell => spell.Level).ThenByDescending(spell => spell.LevelTemplate.minPlayerLevel).FirstOrDefault());
            }
            return(bestSpell);
        }
Пример #3
0
 public SpellTarget(double efficiency = 0, Cell source = null, Cell target = null, Spell spell = null)
 {
     Efficiency = efficiency;
     FromCell = source;
     TargetCell = target;
     Spell = spell;
     cast = spell == null;
 }
Пример #4
0
 public bool CanUpgradeSpell(Spell spell)
 {
     if (Character.IsFighting()) return false;
     if (spell.Level > Character.Stats.SpellsPoints) return false;
     if (!HasSpell(spell.Template.id)) return false;
     if (spell.Template.spellLevels.Count <= spell.Level) return false;
     if (spell.Level == 5 && spell.LevelTemplate.minPlayerLevel + 100 > Character.Level) return false;
     return true;
 }
Пример #5
0
 public bool UpgradeSpell(Spell spell)
 {
     throw new NotImplementedException();
 }
Пример #6
0
 // Learns a new spell
 public void Update(SpellUpgradeSuccessMessage message)
 {
     Spell newSpell = new Spell(message);
     Spell known = m_spells.FirstOrDefault(spell => spell.Template.id == newSpell.Template.id);
     if (known != null)
         m_spells[m_spells.IndexOf(known)] = newSpell;
     else
         m_spells.Add(newSpell);
 }