Exemple #1
0
        void BuffTrigger(TriggerBuff buff, FightActor triggerrer, BuffTriggerType trigger, object token)
        {
            var state = SpellManager.Instance.GetSpellState((uint)Dice.Value);

            if (state == null)
            {
                logger.Error("Spell state {0} not found", Dice.Value);
                return;
            }

            if (!buff.Target.HasState(state.Id))
            {
                return;
            }

            if (Effect.EffectId == EffectsEnum.Effect_DisableState)
            {
                var actualState = buff.Target.GetBuffs(x => x is StateBuff && ((StateBuff)x).State.Id == state.Id).FirstOrDefault() as StateBuff;
                if (actualState == null)
                {
                    return;
                }

                var id        = buff.Target.PopNextBuffId();
                var stateBuff = new DisableStateBuff(id, buff.Target, Caster, this, Spell, FightDispellableEnum.DISPELLABLE_BY_DEATH, actualState, triggerrer);

                buff.Target.AddBuff(stateBuff);
            }
            else
            {
                RemoveStateBuff(buff.Target, (SpellStatesEnum)state.Id);
            }
        }
Exemple #2
0
        void DamageBuffTrigger(TriggerBuff buff, FightActor triggerrer, BuffTriggerType trigger, object token)
        {
            var triggerDmg = token as Fights.Damage;

            if (triggerDmg == null)
            {
                return;
            }

            if (triggerDmg.ReflectedDamages)
            {
                return;
            }

            var damage = new Fights.Damage(buff.Dice, GetEffectSchool(buff.Dice.EffectId), buff.Target, buff.Spell, buff.Target.Cell)
            {
                Buff              = buff,
                ReflectedDamages  = true,
                IsCritical        = Critical,
                MarkTrigger       = MarkTrigger,
                IgnoreDamageBoost = true
            };

            damage.GenerateDamages();
            damage.Amount = (int)((buff.Target.LifePoints * (buff.Dice.DiceNum / 100.0)));

            buff.Target.InflictDamage(damage);
        }
Exemple #3
0
        private void SpellBuffTrigger(TriggerBuff buff, FightActor triggerrer, BuffTriggerType trigger, object token)
        {
            var damage = token as Damage;

            if (damage == null)
            {
                return;
            }

            if (damage.Source == null)
            {
                return;
            }

            var target = buff.Target;

            if (damage.Source == target)
            {
                return;
            }

            if (damage.Spell != null && damage.Spell.Id != (int)SpellIdEnum.COUP_DE_POING)
            {
                return;
            }

            Handlers[Spell.Id == (int)SpellIdEnum.MARTEAU_DE_MUNGAM ? 2 : 1].Apply(); //Remove Effects
            Handlers[Spell.Id == (int)SpellIdEnum.MARTEAU_DE_MUNGAM ? 5 : 4].Apply(); //Dispell State
        }
Exemple #4
0
        public void TriggerBuffApply(TriggerBuff buff, FightActor triggerrer, BuffTriggerType trigger, object token)
        {
            var target = buff.Target;

            if (target == null)
            {
                return;
            }

            var damage = token as Fights.Damage;

            if (damage == null || damage.Amount == 0)
            {
                return;
            }

            damage.IgnoreDamageBoost     = true;
            damage.IgnoreDamageReduction = true;
            damage.Generated             = true;

            // first, apply damage to sacrifier
            Caster.InflictDamage(damage);

            // then, negate damage given to target
            damage.Amount = 0;
        }
Exemple #5
0
        public static void ApplyArmorBuff(TriggerBuff buff, FightActor triggerer, BuffTriggerType trigger, object token)
        {
            var damage = token as Fights.Damage;

            if (damage == null)
            {
                return;
            }

            var integerEffect = buff.GenerateEffect();

            if (integerEffect == null)
            {
                return;
            }

            var target = buff.Target;

            if (target is SummonedBomb)
            {
                target = ((SummonedBomb)target).Summoner;
            }

            var reduction    = target.CalculateArmorValue(integerEffect.Value);
            var dmgReduction = Math.Min(damage.Amount, target.CalculateArmorValue(integerEffect.Value));

            ActionsHandler.SendGameActionFightReduceDamagesMessage(target.Fight.Clients, damage.Source, target, reduction);
            damage.Amount -= dmgReduction;
        }
        private void OnActorAttacked(TriggerBuff buff, BuffTriggerType trigger, object token)
        {
            System.Collections.Generic.IEnumerable <StatBuff> source = buff.Target.GetBuffs((Buff entry) => entry.Spell == base.Spell).OfType <StatBuff>();
            int num = (
                from entry in source
                where (int)entry.Duration == this.Effect.Duration
                select entry).Sum((StatBuff entry) => (int)entry.Value);
            short diceFace = base.Dice.DiceFace;

            if (num < (int)diceFace)
            {
                Fights.Damage damage = (Fights.Damage)token;
                int           num2   = damage.Amount;
                if (num2 + num > (int)diceFace)
                {
                    num2 = (int)((short)((int)diceFace - num));
                }
                PlayerFields punishmentBoostType = Punishment.GetPunishmentBoostType(base.Dice.DiceNum);
                StatBuff     buff2 = new StatBuff(buff.Target.PopNextBuffId(), buff.Target, base.Caster, base.Dice, base.Spell, (short)num2, punishmentBoostType, false, true, (short)Punishment.GetBuffEffectId(punishmentBoostType))
                {
                    Duration = base.Dice.Value
                };
                buff.Target.AddAndApplyBuff(buff2, true);
            }
        }
 public void Apply(BuffTriggerType trigger)
 {
     if (this.ApplyTrigger != null)
     {
         this.ApplyTrigger(this, trigger, null);
     }
 }
Exemple #8
0
        void OnBuffTriggered(TriggerBuff buff, FightActor triggerrer, BuffTriggerType trigger, object token)
        {
            var damages = new Fights.Damage(Dice)
            {
                Source = buff.Caster,
                Buff   = buff,
                IgnoreDamageReduction = true,
                IgnoreDamageBoost     = true,
                School      = GetEffectSchool(buff.Dice.EffectId),
                MarkTrigger = MarkTrigger,
                IsCritical  = Critical,
                Amount      = (int)Math.Floor((buff.Target.Stats.Health.PermanentDamages * Dice.DiceNum) / 100d)
            };

            if (Effect.EffectId == EffectsEnum.Effect_DamageNeutralPerCasterHPEroded ||
                Effect.EffectId == EffectsEnum.Effect_DamageEarthPerCasterHPEroded ||
                Effect.EffectId == EffectsEnum.Effect_DamageFirePerCasterHPEroded ||
                Effect.EffectId == EffectsEnum.Effect_DamageWaterPerCasterHPEroded ||
                Effect.EffectId == EffectsEnum.Effect_DamageAirPerCasterHPEroded)
            {
                damages.Amount = (int)Math.Floor((buff.Caster.Stats.Health.PermanentDamages * Dice.DiceNum) / 100d);
            }

            buff.Target.InflictDamage(damages);
        }
Exemple #9
0
 void RollTrigger(TriggerBuff buff, FightActor triggerer, BuffTriggerType trigger, object token)
 {
     if (token is Ref <FightSpellCastCriticalEnum> @ref)
     {
         @ref.Target = FightSpellCastCriticalEnum.NORMAL;
     }
 }
Exemple #10
0
        private void SpellBuffTrigger(TriggerBuff buff, FightActor triggerrer, BuffTriggerType trigger, object token)
        {
            var damage = token as Damage;

            if (damage == null)
            {
                return;
            }

            if (damage.Source == null)
            {
                return;
            }

            var source = damage.Source;
            var target = buff.Target;

            if (damage.Source == target)
            {
                return;
            }

            if (target.Position.Point.IsAdjacentTo(source.Position.Point))
            {
                return;
            }

            foreach (var handler in Handlers)
            {
                handler.Apply();
            }
        }
 public void Apply(BuffTriggerType trigger, object token)
 {
     if (this.ApplyTrigger != null)
     {
         this.ApplyTrigger(this, trigger, token);
     }
 }
Exemple #12
0
        void BuffTrigger(TriggerBuff buff, FightActor triggerrer, BuffTriggerType trigger, object token)
        {
            var damage = token as Fights.Damage;

            if (damage == null)
            {
                return;
            }

            if (damage.Source == null)
            {
                return;
            }

            var integerEffect = GenerateEffect();

            if (integerEffect == null)
            {
                return;
            }

            var healAmount = (int)Math.Floor((damage.Amount * Dice.DiceNum) / 100.0);

            foreach (var actor in GetAffectedActors())
            {
                actor.Heal(healAmount, Caster, true);
            }

            buff.Caster.RemoveBuff(buff);
        }
 private static void DamageBuffTrigger(TriggerBuff buff, BuffTriggerType trigger, object token)
 {
     Fights.Damage damage = new Fights.Damage(buff.Dice, DirectDamage.GetEffectSchool(buff.Dice.EffectId), buff.Caster, buff.Spell)
     {
         Buff = buff
     };
     buff.Target.InflictDamage(damage);
 }
        public TriggerBuff AddTriggerBuff(FightActor target, bool dispelable, BuffTriggerType trigger, TriggerBuffApplyHandler applyTrigger, TriggerBuffRemoveHandler removeTrigger)
        {
            int         id          = target.PopNextBuffId();
            TriggerBuff triggerBuff = new TriggerBuff(id, target, this.Caster, this.Dice, this.Spell, this.Critical, dispelable, trigger, applyTrigger, removeTrigger);

            target.AddAndApplyBuff(triggerBuff, true);
            return(triggerBuff);
        }
Exemple #15
0
        void DefaultBuffTrigger(TriggerBuff buff, FightActor triggerrer, BuffTriggerType trigger, object token)
        {
            var damages = token as Fights.Damage;

            if (damages != null && damages.Spell != null && damages.Spell.Id == buff.Spell.Id)
            {
                return;
            }

            if (Effect.EffectId == EffectsEnum.Effect_CastSpell_1160)
            {
                buff.Caster.CastSpell(new SpellCastInformations(buff.Caster, buff.Spell, buff.Target.Cell)
                {
                    Force         = true,
                    Silent        = true,
                    ApFree        = true,
                    TriggerEffect = this,
                    Triggerer     = triggerrer
                });
            }
            else if (Effect.EffectId == EffectsEnum.Effect_CastSpell_1017 ||
                     buff.Spell.Id == (int)SpellIdEnum.FRIKT)
            {
                buff.Target.CastSpell(new SpellCastInformations(buff.Target, buff.Spell, triggerrer.Cell)
                {
                    Force         = true,
                    Silent        = true,
                    ApFree        = true,
                    TriggerEffect = this,
                    Triggerer     = triggerrer
                });
            }
            else
            {
                if (buff.Spell.Id == (int)SpellIdEnum.GLOURSOMPTUEUX)
                {
                    buff.Target.CastSpell(new SpellCastInformations(buff.Target, buff.Spell, buff.Caster.Cell)
                    {
                        Force         = true,
                        Silent        = true,
                        ApFree        = true,
                        TriggerEffect = this,
                        Triggerer     = triggerrer
                    });
                }
                else
                {
                    buff.Target.CastSpell(new SpellCastInformations(buff.Target, buff.Spell, buff.Target.Cell)
                    {
                        Force         = true,
                        Silent        = true,
                        ApFree        = true,
                        TriggerEffect = this,
                        Triggerer     = triggerrer
                    });
                }
            }
        }
Exemple #16
0
        private static void HealBuffTrigger(TriggerBuff buff, BuffTriggerType trigger, object token)
        {
            EffectInteger effectInteger = buff.GenerateEffect();

            if (!(effectInteger == null))
            {
                buff.Target.Heal((int)effectInteger.Value, buff.Caster, true);
            }
        }
Exemple #17
0
        private void OnBuffTriggered(TriggerBuff buff, BuffTriggerType trigger, object token)
        {
            EffectInteger effectInteger = base.GenerateEffect();

            if (!(effectInteger == null))
            {
                this.HealHpPercent(buff.Target, (int)effectInteger.Value);
            }
        }
        public static void ApplyArmorBuff(TriggerBuff buff, BuffTriggerType trigger, object token)
        {
            EffectInteger effectInteger = buff.GenerateEffect();

            if (!(effectInteger == null))
            {
                buff.Target.DamageMultiplicator = effectInteger.Value / 100;
            }
        }
        public static void ApplySuicideBuff(TriggerBuff buff, BuffTriggerType trigger, object token)
        {
            var target = buff.Target as SummonedMonster;

            InventoryHandler.SendSpellListMessage(target.Summoner.CharacterContainer.Clients.FirstOrDefault(), true);
            ShortcutHandler.SendShortcutBarContentMessage(target.Summoner.CharacterContainer.Clients.FirstOrDefault(), ShortcutBarEnum.SPELL_SHORTCUT_BAR);
            //ContextHandler.SendSlaveSwitchContextMessage(buff.Target.s);
            target.Die();
        }
        private void BoostSpellTrigger(TriggerBuff buff, BuffTriggerType type, object token)
        {
            if (type == BuffTriggerType.TURN_BEGIN)
            {
                Spell boostedSpell = buff.Target.GetSpell((int)buff.Dice.DiceNum);
                var   spellBuff    = new SpellBuff(buff.Target.PopNextBuffId(), buff.Target, buff.Caster, buff.Dice, buff.Spell, boostedSpell, buff.Dice.Value, false, true);

                buff.Target.AddAndApplyBuff(spellBuff, true);
            }
        }
Exemple #21
0
        void TriggerBuff(TriggerBuff buff, FightActor triggerrer, BuffTriggerType trigger, object token)
        {
            var integerEffect = GenerateEffect();

            if (integerEffect == null)
            {
                return;
            }

            ReduceBuffsDuration(buff.Target, integerEffect.Value);
        }
Exemple #22
0
        void OnBuffTriggered(TriggerBuff buff, FightActor triggerrer, BuffTriggerType trigger, object token)
        {
            var integerEffect = GenerateEffect();

            if (integerEffect == null)
            {
                return;
            }

            HealHpPercent(buff.Target, integerEffect.Value);
        }
Exemple #23
0
        void OnBuffTriggered(TriggerBuff buff, FightActor triggerer, BuffTriggerType trigger, object token)
        {
            var integerEffect = GenerateEffect();

            if (integerEffect == null)
            {
                return;
            }

            buff.Target.RemoveSpellBuffs(integerEffect.Value);
        }
Exemple #24
0
        public TriggerBuff AddTriggerBuff(FightActor target, BuffTriggerType type, TriggerBuffApplyHandler applyTrigger)
        {
            var id   = target.PopNextBuffId();
            var buff = new TriggerBuff(id, target, Caster, this, Spell, Spell, Critical, DefaultDispellableStatus, Priority, applyTrigger);

            buff.SetTrigger(type);

            target.AddBuff(buff);

            return(buff);
        }
Exemple #25
0
        public static void BuffHandler(TriggerBuff buff, BuffTriggerType type, object token)
        {
            EffectInteger effectInteger = buff.GenerateEffect();

            if (!(effectInteger == null))
            {
                int      id       = buff.Target.PopNextBuffId();
                StatBuff statBuff = new StatBuff(id, buff.Target, buff.Caster, buff.Effect, buff.Spell, effectInteger.Value, PlayerFields.AP, false, false);
                buff.Target.AddAndApplyBuff(statBuff, true);
            }
        }
Exemple #26
0
        void OnBuffTriggered(TriggerBuff buff, FightActor triggerer, BuffTriggerType trigger, object token)
        {
            var damage = token as Fights.Damage;

            if (damage == null)
            {
                return;
            }

            damage.Amount = (int)Math.Round(damage.Amount * (Dice.DiceNum / 100.0));
        }
Exemple #27
0
        public static void ApplyArmorBuff(TriggerBuff buff, BuffTriggerType trigger, object token)
        {
            EffectInteger effectInteger = buff.GenerateEffect();

            if (!(effectInteger == null))
            {
                foreach (PlayerFields current in DamageArmor.GetAssociatedCaracteristics(buff.Spell.Id))
                {
                    buff.Target.Stats[current].Context += buff.Target.CalculateArmorValue((int)effectInteger.Value);
                }
            }
        }
Exemple #28
0
        public void Apply(FightActor fighterTrigger, BuffTriggerType trigger, object token)
        {
            // to avoid recursion cannot be triggered twice in the same sequence (spell cast, move, turn end/begin...)

            if (m_lastTriggeredSequence != null && m_lastTriggeredSequence.IsChild(fighterTrigger.Fight.CurrentSequence))
            {
                return;
            }

            m_lastTriggeredSequence = fighterTrigger.Fight.CurrentSequence;
            base.Apply();
            ApplyTrigger?.Invoke(this, fighterTrigger, trigger, token);
        }
Exemple #29
0
        private static void HealBuffTrigger(TriggerBuff buff, FightActor triggerrer, BuffTriggerType trigger, object token)
        {
            var integerEffect = buff.GenerateEffect();

            if (integerEffect == null)
            {
                return;
            }

            if (buff.Target.IsAlive())
            {
                buff.Target.Heal(integerEffect.Value, buff.Caster);
            }
        }
 private void OnBuffTriggered(TriggerBuff buff, BuffTriggerType trigger, object token)
 {
     Fights.Damage damage = new Fights.Damage(base.Dice)
     {
         Source = buff.Caster,
         Buff   = buff,
         IgnoreDamageReduction = true,
         School      = DamagePerAPUsed.GetEffectSchool(buff.Dice.EffectId),
         MarkTrigger = base.MarkTrigger
     };
     damage.BaseMaxDamages = (int)buff.Target.UsedAP * damage.BaseMaxDamages;
     damage.BaseMinDamages = (int)buff.Target.UsedAP * damage.BaseMinDamages;
     buff.Target.InflictDamage(damage);
 }