public override SpellCastResult CanCastSpell(SpellCastInformations cast) { var result = base.CanCastSpell(cast); if (result == SpellCastResult.OK || cast.IsConditionBypassed(result)) { return(result); } if (cast.Silent) { return(result); } switch (result) { case SpellCastResult.NO_LOS: // Impossible de lancer ce sort : un obstacle gène votre vue ! Character.SendInformationMessage(TextInformationTypeEnum.TEXT_INFORMATION_ERROR, 174); break; case SpellCastResult.HAS_NOT_SPELL: // Impossible de lancer ce sort : vous ne le possédez pas ! Character.SendInformationMessage(TextInformationTypeEnum.TEXT_INFORMATION_ERROR, 169); break; case SpellCastResult.NOT_ENOUGH_AP: // Impossible de lancer ce sort : Vous avez %1 PA disponible(s) et il vous en faut %2 pour ce sort ! Character.SendInformationMessage(TextInformationTypeEnum.TEXT_INFORMATION_ERROR, 170, AP, cast.SpellLevel.ApCost); break; case SpellCastResult.UNWALKABLE_CELL: // Impossible de lancer ce sort : la cellule visée n'est pas disponible ! Character.SendInformationMessage(TextInformationTypeEnum.TEXT_INFORMATION_ERROR, 172); break; case SpellCastResult.CELL_NOT_FREE: //Impossible de lancer ce sort : la cellule visée n'est pas valide ! Character.SendInformationMessage(TextInformationTypeEnum.TEXT_INFORMATION_ERROR, 193); break; default: //Impossible de lancer ce sort actuellement. Character.SendInformationMessage(TextInformationTypeEnum.TEXT_INFORMATION_ERROR, 175); break; } return(result); }
public TemporalDustCastHandler(SpellCastInformations cast) : base(cast) { }
public FeuillageCastHandler(SpellCastInformations cast) : base(cast) { }
public MansomonCastHandler(SpellCastInformations cast) : base(cast) { }
public RoublabotCastHandler(SpellCastInformations cast) : base(cast) { }
public PunishmentCastHandler(SpellCastInformations cast) : base(cast) { }
public FriendshipWordCastHandler(SpellCastInformations informations) : base(informations) { }
public ExplosionCastHandler(SpellCastInformations cast) : base(cast) { }
public SpellCastHandler GetSpellCastHandler(SpellCastInformations cast) { return(m_spellsCastHandler.TryGetValue(cast.Spell.Template.Id, out var ctor) ? ctor(cast) : new DefaultSpellCastHandler(cast)); }
public KickSpellCastHandler(SpellCastInformations cast) : base(cast) { }
public override bool CastSpell(SpellCastInformations cast) { if (!IsFighterTurn() && !cast.Force) { return(false); } // not a weapon attack if (cast.Spell.Id != 0 || Character.Inventory.TryGetItem(CharacterInventoryPositionEnum.ACCESSORY_POSITION_WEAPON) == null) { return(base.CastSpell(cast)); } var weapon = Character.Inventory.TryGetItem(CharacterInventoryPositionEnum.ACCESSORY_POSITION_WEAPON); if (!(weapon.Template is WeaponTemplate weaponTemplate) || !CanUseWeapon(cast.TargetedCell, weaponTemplate)) { OnSpellCastFailed(cast); return(false); } using (Fight.StartSequence(SequenceTypeEnum.SEQUENCE_WEAPON)) { var random = new AsyncRandom(); var critical = RollCriticalDice(weaponTemplate); switch (critical) { case FightSpellCastCriticalEnum.CRITICAL_FAIL: OnWeaponUsed(weaponTemplate, cast.TargetedCell, critical, false); if (!cast.ApFree) { UseAP((short)weaponTemplate.ApCost); } PassTurn(); return(false); case FightSpellCastCriticalEnum.CRITICAL_HIT: m_criticalWeaponBonus = weaponTemplate.CriticalHitBonus; break; } m_isUsingWeapon = true; var effects = weapon.Effects.Where(entry => EffectManager.Instance.IsUnRandomableWeaponEffect(entry.EffectId)).OfType <EffectDice>(); var handlers = new List <SpellEffectHandler>(); foreach (var effect in effects) { if (effect.Random > 0) { if (random.NextDouble() > effect.Random / 100d) { // effect ignored continue; } } var handler = EffectManager.Instance.GetSpellEffectHandler(effect, this, new DefaultSpellCastHandler(cast), cast.TargetedCell, critical == FightSpellCastCriticalEnum.CRITICAL_HIT); handler.EffectZone = new Zone(weaponTemplate.Type.ZoneShape, (byte)weaponTemplate.Type.ZoneSize, (byte)weaponTemplate.Type.ZoneMinSize, handler.CastPoint.OrientationTo(handler.TargetedPoint), (int)weaponTemplate.Type.ZoneEfficiencyPercent, (int)weaponTemplate.Type.ZoneMaxEfficiency); handler.Targets = new TargetCriterion[] { new TargetTypeCriterion(SpellTargetType.ALLY_ALL_EXCEPT_SELF, false), new TargetTypeCriterion(SpellTargetType.ENEMY_ALL, false) }; // everyone but caster handlers.Add(handler); } var silentCast = handlers.Any(entry => entry.RequireSilentCast()); OnWeaponUsed(weaponTemplate, cast.TargetedCell, critical, silentCast); if (!cast.ApFree) { UseAP((short)weaponTemplate.ApCost); } foreach (var handler in handlers) { handler.Apply(); } } m_isUsingWeapon = false; m_criticalWeaponBonus = 0; // is it the right place to do that ? Fight.CheckFightEnd(); return(true); }
public SacrifiedDeadSpellCastHandler(SpellCastInformations cast) : base(cast) { }
public OldToyParadeCastHandler(SpellCastInformations cast) : base(cast) { }
public HammerCastHandler(SpellCastInformations cast) : base(cast) { }
public NaughtyChildCastHandler(SpellCastInformations cast) : base(cast) { }
public FateOfEcaflipCastHandler(SpellCastInformations cast) : base(cast) { }
public DefaultSpellCastHandler(SpellCastInformations cast) : base(cast) { }
protected SpellCastHandler(SpellCastInformations informations) { Informations = informations; }