예제 #1
0
        public override int ApplyEffect(EffectCast CastInfos)
        {
            foreach (var Target in CastInfos.Targets)
            {
                var SubInfos    = new EffectCast(CastInfos.EffectType, CastInfos.SpellId, CastInfos.CellId, CastInfos.GenerateJet(Target), CastInfos.Value2, CastInfos.Value3, CastInfos.Chance, CastInfos.Duration, CastInfos.Caster, CastInfos.Targets);
                var BuffStats   = new BuffStats(SubInfos, Target);
                var DamageValue = 0;
                if (BuffStats.ApplyEffect(ref DamageValue) == -3)
                {
                    return(-3);
                }

                Target.Buffs.AddBuff(BuffStats);
            }

            return(-1);
        }
예제 #2
0
        public override int ApplyEffect(ref int DamageValue, EffectCast DamageInfos = null)
        {
            var BuffValue = DamageValue / 2; // Divise par deux les stats a boost car c'est un personnage.
            var StatsType = (EffectEnum)this.CastInfos.Value1 == EffectEnum.Heal ? EffectEnum.AddVitalite : (EffectEnum)this.CastInfos.Value1;
            var MaxValue  = this.CastInfos.Value2;
            var Duration  = this.CastInfos.Value3;

            if (this.Target.Fight.CurrentFighter.ActorId == this.CastInfos.FakeValue)
            {
                if (this.CastInfos.DamageValue < MaxValue)
                {
                    if (this.CastInfos.DamageValue + BuffValue > MaxValue)
                    {
                        BuffValue = MaxValue - this.CastInfos.DamageValue;
                    }
                }
                else
                {
                    BuffValue = 0;
                }
            }
            else
            {
                this.CastInfos.DamageValue = 0;
                this.CastInfos.FakeValue   = (int)this.Target.Fight.CurrentFighter.ActorId;

                if (this.CastInfos.DamageValue + BuffValue > MaxValue)
                {
                    BuffValue = MaxValue;
                }
            }

            if (BuffValue != 0)
            {
                this.CastInfos.DamageValue += BuffValue;

                var BuffStats = new BuffStats(new EffectCast(StatsType, this.CastInfos.SpellId, this.CastInfos.SpellId, BuffValue, 0, 0, 0, Duration, this.CastInfos.Caster, null), this.Target);
                BuffStats.ApplyEffect(ref BuffValue);
                this.Target.Buffs.AddBuff(BuffStats);
            }

            return(base.ApplyEffect(ref DamageValue, DamageInfos));
        }
예제 #3
0
        public override int ApplyEffect(ref int DamageValue, EffectCast DamageInfos = null)
        {
            var LostAP = CastInfos.Value1 > Target.AP ? Target.AP : CastInfos.Value1;

            CastInfos.Value1 = Target.CalculDodgeAPMP(CastInfos.Caster, LostAP);

            if (CastInfos.Value1 != LostAP)
            {
                Target.Fight.SendToFight(new GameActionMessage((int)GameActionTypeEnum.FIGHT_DODGE_SUBPA, Target.ActorId, Target.ActorId + "," + (LostAP - CastInfos.Value1)));
            }

            if (CastInfos.Value1 > 0)
            {
                var BuffStats = new BuffStats(new EffectCast(this.CastInfos.EffectType, this.CastInfos.SpellId, this.CastInfos.SpellId, CastInfos.Value1, 0, 0, 0, Duration, this.CastInfos.Caster, null), this.Target);
                BuffStats.ApplyEffect(ref LostAP);
                this.Target.Buffs.AddBuff(BuffStats);
            }

            return(base.ApplyEffect(ref DamageValue, DamageInfos));
        }
예제 #4
0
        public override int ApplyEffect(EffectCast CastInfos)
        {
            var MalusType = TargetMalus[CastInfos.EffectType];
            var BonusType = CasterBonus[CastInfos.EffectType];

            var MalusInfos  = new EffectCast(MalusType, CastInfos.SpellId, CastInfos.CellId, CastInfos.Value1, CastInfos.Value2, CastInfos.Value3, CastInfos.Chance, CastInfos.Duration, CastInfos.Caster, CastInfos.Targets);
            var BonusInfos  = new EffectCast(BonusType, CastInfos.SpellId, CastInfos.CellId, CastInfos.Value1, CastInfos.Value2, CastInfos.Value3, CastInfos.Chance, CastInfos.Duration - 1, CastInfos.Caster, CastInfos.Targets);
            var DamageValue = 0;

            foreach (var Target in CastInfos.Targets)
            {
                if (Target == CastInfos.Caster)
                {
                    continue;
                }

                // Malus a la cible
                var BuffStats = new BuffStats(MalusInfos, Target);
                if (BuffStats.ApplyEffect(ref DamageValue) == -3)
                {
                    return(-3);
                }

                Target.Buffs.AddBuff(BuffStats);

                // Bonus au lanceur
                BuffStats = new BuffStats(BonusInfos, CastInfos.Caster);
                if (BuffStats.ApplyEffect(ref DamageValue) == -3)
                {
                    return(-3);
                }

                CastInfos.Caster.Buffs.AddBuff(BuffStats);
            }

            return(-1);
        }