/// <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); }
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); }
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; }
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; }
public bool UpgradeSpell(Spell spell) { throw new NotImplementedException(); }
// 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); }