示例#1
0
        public static void AddProperty(BattleCharacter effectTarget, EffectBase e, MagicReleaser releaser)
        {
            var effect = e as AddPropertyEffect;

            effectTarget.ModifyValue(effect.property, effect.addType, effect.addValue);
            if (effect.revertType == RevertType.ReleaserDeath)
            {
                releaser.RevertProperty(effectTarget, effect.property, effect.addType, effect.addValue);
            }
        }
示例#2
0
        public static void AddBuff(BattleCharacter effectTarget, EffectBase e, MagicReleaser releaser)
        {
            var effect = e as AddBufEffect;
            var per    = releaser.Controllor.Perception as BattlePerception;

            per.CreateReleaser(
                effect.buffMagicKey,
                new ReleaseAtTarget(releaser.ReleaserTarget.Releaser, effectTarget),
                ReleaserType.Buff
                );
        }
示例#3
0
        public ISerializerable CreateReleaser(MagicReleaser mReleaser)
        {
            var createNotify = new Proto.Notify_CreateReleaser
            {
                Index         = mReleaser.Index,
                ReleaserIndex = mReleaser.ReleaserTarget.Releaser.Index,
                TargetIndex   = mReleaser.ReleaserTarget.ReleaserTarget.Index,
                MagicKey      = mReleaser.Magic.key
            };

            return(createNotify);
        }
示例#4
0
    public void ReleaseMagic(MagicData magic)
    {
        Resources.UnloadUnusedAssets();

        if (currentReleaser != null)
        {
            GObject.Destory(currentReleaser);
        }

        var per = curState.Perception as BattlePerception;

        this.currentReleaser = per.CreateReleaser(magic,
                                                  new GameLogic.Game.LayoutLogics.ReleaseAtTarget(this.releaser, this.target),
                                                  ReleaserType.Magic);
    }
示例#5
0
        public static void Cure(BattleCharacter effectTarget, EffectBase e, MagicReleaser releaser)
        {
            var per    = releaser.Controllor.Perception as BattlePerception;
            var effect = e as CureEffect;
            int cure   = -1;

            switch (effect.valueType)
            {
            case ValueOf.FixedValue:
                cure = effect.value;
                break;

            case ValueOf.NormalAttack:
                cure = BattleAlgorithm.CalNormalDamage(
                    releaser.ReleaserTarget.Releaser);
                break;
            }

            if (cure > 0)
            {
                per.CharacterAddHP(effectTarget, cure);
            }
        }
示例#6
0
        public static void NormalDamage(BattleCharacter effectTarget, EffectBase e, MagicReleaser releaser)
        {
            var per    = releaser.Controllor.Perception as BattlePerception;
            var effect = e as NormalDamageEffect;
            int damage = -1;

            switch (effect.valueOf)
            {
            case ValueOf.FixedValue:
                damage = effect.DamageValue;
                break;

            case ValueOf.NormalAttack:
                damage = BattleAlgorithm.CalFinalDamage(
                    BattleAlgorithm.CalNormalDamage(releaser.ReleaserTarget.Releaser),
                    releaser.ReleaserTarget.Releaser.TDamage,
                    effectTarget.TDefance);
                break;
            }

            var result = BattleAlgorithm
                         .GetDamageResult(damage, releaser.ReleaserTarget.Releaser.TDamage, effectTarget);

            if (releaser.ReleaserTarget.Releaser.TDamage != Proto.DamageType.Magic)
            {
                if (!result.IsMissed)
                {
                    var cureHP = (int)(result.Damage * releaser.ReleaserTarget.Releaser[Proto.HeroPropertyType.SuckingRate].FinalValue / 10000f);
                    if (cureHP > 0)
                    {
                        per.CharacterAddHP(releaser.ReleaserTarget.Releaser, cureHP);
                    }
                }
            }

            per.ProcessDamage(releaser.ReleaserTarget.Releaser, effectTarget, result);
        }
示例#7
0
        internal IParticlePlayer CreateParticlePlayer(MagicReleaser relaser, ParticleLayout layout)
        {
            var p = View.CreateParticlePlayer(relaser.View, layout);

            return(p);
        }
示例#8
0
        /// <summary>
        /// Effects the active.
        /// </summary>
        /// <param name="effectTarget">成熟效果的目标</param>
        /// <param name="effect">效果类型</param>
        /// <param name="releaser">魔法释放者</param>
        public static void EffectActive(BattleCharacter effectTarget, EffectBase effect, MagicReleaser releaser)
        {
            MethodInfo handle;

            if (_handlers.TryGetValue(effect.GetType(), out handle))
            {
                handle.Invoke(null, new object[] { effectTarget, effect, releaser });
            }
            else
            {
                throw new Exception(string.Format("Effect [{0}] no handler!!!", effect.GetType()));
            }
        }
示例#9
0
        public static void ModifyLockEffect(BattleCharacter effectTarget, EffectBase e, MagicReleaser releaser)
        {
            var effect = e as ModifyLockEffect;

            effectTarget.Lock.Lock(effect.lockType);
            if (effect.revertType == RevertType.ReleaserDeath)
            {
                releaser.RevertLock(effectTarget, effect.lockType);
            }
        }