예제 #1
0
 protected SpellEffectHandler(EffectDice effect, FightActor caster, SpellCastHandler castHandler, Cell targetedCell, bool critical)
     : base(effect)
 {
     Dice                     = effect;
     Caster                   = caster;
     CastHandler              = castHandler;
     TargetedCell             = targetedCell;
     TargetedPoint            = new MapPoint(TargetedCell);
     Critical                 = critical;
     Targets                  = effect.Targets;
     Category                 = SpellIdentifier.GetEffectCategories(effect.EffectId);
     DefaultDispellableStatus = FightDispellableEnum.DISPELLABLE;
 }
예제 #2
0
        static PlayerFields[] GetMonsterMainStats(MonsterGrade monster)
        {
            if (monster.Spells.Count == 0)
            {
                return(new PlayerFields[0]);
            }

            var stats = new List <PlayerFields>();

            foreach (var spell in monster.Spells)
            {
                var spellLevel = SpellManager.Instance.GetSpellLevel(spell.Id, spell.CurrentLevel);

                if (spellLevel == null)
                {
                    continue;
                }

                foreach (var effect in spellLevel.Effects)
                {
                    var categories = SpellIdentifier.GetEffectCategories(effect.EffectId);
                    if (categories.HasFlag(SpellCategory.DamagesAir))
                    {
                        stats.Add(PlayerFields.Agility);
                    }
                    if (categories.HasFlag(SpellCategory.DamagesEarth) ||
                        categories.HasFlag(SpellCategory.DamagesNeutral))
                    {
                        stats.Add(PlayerFields.Strength);
                    }
                    if (categories.HasFlag(SpellCategory.DamagesWater))
                    {
                        stats.Add(PlayerFields.Chance);
                    }
                    if (categories.HasFlag(SpellCategory.DamagesFire) ||
                        categories.HasFlag(SpellCategory.Healing))
                    {
                        stats.Add(PlayerFields.Intelligence);
                    }
                }
            }

            return(stats.Distinct().ToArray());
        }
예제 #3
0
        public override void Execute(TriggerBase trigger)
        {
            var template = trigger.Get <MonsterTemplate>("monster");

            if (template.Grades.Count <= trigger.Get <sbyte>("grade"))
            {
                trigger.ReplyError("Unexistant grade '{0}' for this monster", trigger.Get <sbyte>("grade"));
                return;
            }

            var grade = template.Grades[trigger.Get <sbyte>("grade")];

            foreach (var spell in grade.Spells)
            {
                trigger.ReplyBold("- {0} ({1})", spell.Template.Name, spell.Template.Id);
                foreach (var effect in spell.CurrentSpellLevel.Effects)
                {
                    var description = TextManager.Instance.GetText(effect.Template.DescriptionId);
                    trigger.ReplyBold("\t{0} ({1}) Managed : {2}", description, (int)effect.EffectId,
                                      SpellIdentifier.GetEffectCategories(effect.EffectId) != SpellCategory.None);
                }
            }
        }
예제 #4
0
        public override void Execute(GameTrigger trigger)
        {
            if (!trigger.Character.IsInFight())
            {
                trigger.ReplyError("You must be in a fight");
                return;
            }

            if (!trigger.Character.Fight.AIDebugMode)
            {
                trigger.ReplyError("AI debug mode must be enabled");
                return;
            }

            if (!(trigger.Character.Fight.FighterPlaying is AIFighter))
            {
                trigger.ReplyError("Current fighter is not an AI fighter");
                return;
            }

            var aiFighter = trigger.Character.Fight.FighterPlaying as AIFighter;

            foreach (var cast in aiFighter.Brain.SpellSelector.Possibilities)
            {
                trigger.Reply("(#1) Spell {0} ({1}) :: {2}", cast.Spell.Template.Name, cast.Spell.Id, SpellIdentifier.GetSpellCategories(cast.Spell));

                var dumper = new ObjectDumper(8)
                {
                    MemberPredicate = (member) => !member.Name.Contains("Target")
                };

                trigger.Reply("\t{0} Targets", cast.Impacts.Count);
                foreach (var impact in cast.Impacts)
                {
                    trigger.Reply(dumper.DumpElement(impact));
                }
            }
        }