/// <summary>
        /// 技能作用效果
        /// 【!子类重写AffectAgents方法时,必须调用base.AffectAgents,否则必须重写技能触发回调逻辑!】
        /// </summary>
        public override void AffectAgents(BattleAgentController self, BattleAgentController enemy)
        {
            //BattleAgentController triggerSource = null;

            if (beforeFightTrigger)
            {
                TriggeredSkillExcutor beforeFightSkillExcutor = new TriggeredSkillExcutor(this, BeforeFightTriggerCallBack);
                self.beforeFightTriggerExcutors.Add(beforeFightSkillExcutor);
            }

            if (attackTrigger)
            {
                TriggeredSkillExcutor attackSkillExcutor = new TriggeredSkillExcutor(this, AttackTriggerCallBack);
                self.attackTriggerExcutors.Add(attackSkillExcutor);
            }

            if (hitTrigger)
            {
                TriggeredSkillExcutor hitSkillExcutor = new TriggeredSkillExcutor(this, HitTriggerCallBack);
                self.hitTriggerExcutors.Add(hitSkillExcutor);
            }

            if (beAttackTrigger)
            {
                TriggeredSkillExcutor beAttackSkillExcutor = new TriggeredSkillExcutor(this, BeAttackedTriggerCallBack);
                self.beAttackedTriggerExcutors.Add(beAttackSkillExcutor);
            }

            if (beHitTrigger)
            {
                TriggeredSkillExcutor beHitSkillExcutor = new TriggeredSkillExcutor(this, BeHitTriggerCallBack);
                self.beHitTriggerExcutors.Add(beHitSkillExcutor);
            }

            if (fightEndTrigger)
            {
                TriggeredSkillExcutor fightEndSkillExcutor = new TriggeredSkillExcutor(this, FightEndTriggerCallBack);
                self.fightEndTriggerExcutors.Add(fightEndSkillExcutor);
            }
        }
Exemple #2
0
        public int skillSourceValue;        //魔法伤害值


        protected override void ExcuteNoneTriggeredSkillLogic(BattleAgentController self, BattleAgentController enemy)
        {
            // 执行攻击触发事件回调
            for (int i = 0; i < self.attackTriggerExcutors.Count; i++)
            {
                TriggeredSkillExcutor excutor = self.attackTriggerExcutors[i];
                switch (excutor.triggerSource)
                {
                case SkillEffectTarget.Self:
                    excutor.triggeredCallback(self, enemy);
                    break;

                case SkillEffectTarget.Enemy:
                    excutor.triggeredCallback(enemy, self);
                    break;
                }
            }

            // 敌方执行被攻击触发事件回调
            for (int i = 0; i < enemy.beAttackedTriggerExcutors.Count; i++)
            {
                TriggeredSkillExcutor excutor = enemy.beAttackedTriggerExcutors[i];
                switch (excutor.triggerSource)
                {
                case SkillEffectTarget.Self:
                    excutor.triggeredCallback(enemy, self);
                    break;

                case SkillEffectTarget.Enemy:
                    excutor.triggeredCallback(self, enemy);
                    break;
                }
            }

            //计算对方闪避率(敌方的基础闪避率 - 己方的闪避修正)
            int   enemyDodge       = enemy.propertyCalculator.dodge;
            float dodgeProbability = dodgeSeed * enemyDodge / (1 + dodgeSeed * enemyDodge) - self.propertyCalculator.dodgeFixScaler;

            //判断对方是否闪避成功
            if (isEffective(dodgeProbability))
            {
                enemy.propertyCalculator.specialAttackResult = SpecialAttackResult.Miss;
                enemy.AddFightTextToQueue(string.Empty, SpecialAttackResult.Miss);
                return;
            }

            enemy.PlayShakeAnim();

            //原始魔法伤害值
            self.propertyCalculator.magicalHurtToEnemy += skillSourceValue;

            SetEffectAnims(self, enemy);

            // 执行己方攻击命中的回调
            for (int i = 0; i < self.hitTriggerExcutors.Count; i++)
            {
                TriggeredSkillExcutor excutor = self.hitTriggerExcutors[i];
                switch (excutor.triggerSource)
                {
                case SkillEffectTarget.Self:
                    excutor.triggeredCallback(self, enemy);
                    break;

                case SkillEffectTarget.Enemy:
                    excutor.triggeredCallback(enemy, self);
                    break;
                }
            }


            // 执行敌方被击中的回调
            for (int i = 0; i < enemy.beHitTriggerExcutors.Count; i++)
            {
                TriggeredSkillExcutor excutor = enemy.beHitTriggerExcutors[i];
                switch (excutor.triggerSource)
                {
                case SkillEffectTarget.Self:
                    excutor.triggeredCallback(enemy, self);
                    break;

                case SkillEffectTarget.Enemy:
                    excutor.triggeredCallback(self, enemy);
                    break;
                }
            }


            self.propertyCalculator.CalculateAgentHealth();
            enemy.propertyCalculator.CalculateAgentHealth();


            self.UpdateFightStatus();
            enemy.UpdateFightStatus();

            self.UpdateStatusPlane();
            enemy.UpdateStatusPlane();

            self.propertyCalculator.ResetAllHurt();
            enemy.propertyCalculator.ResetAllHurt();
        }
Exemple #3
0
        /// <summary>
        /// 技能作用效果
        /// 【!子类重写AffectAgents方法时,必须调用base.AffectAgents,否则必须重写技能触发回调逻辑!】
        /// </summary>
        public override void AffectAgents(BattleAgentController self, BattleAgentController enemy)
        {
            base.AffectAgents(self, enemy);

            BattleAgentController triggerSource = null;

            if (beforeFightTriggerInfo.triggered)
            {
                switch (beforeFightTriggerInfo.triggerSource)
                {
                case SkillEffectTarget.Self:
                    triggerSource = self;
                    break;

                case SkillEffectTarget.Enemy:
                    triggerSource = enemy;
                    break;
                }

                TriggeredSkillExcutor excutor = new TriggeredSkillExcutor(this, beforeFightTriggerInfo.triggerSource, BeforeFightTriggerCallBack);

                triggerSource.beforeFightTriggerExcutors.Add(excutor);
            }

            if (attackTriggerInfo.triggered)
            {
                switch (attackTriggerInfo.triggerSource)
                {
                case SkillEffectTarget.Self:
                    triggerSource = self;
                    break;

                case SkillEffectTarget.Enemy:
                    triggerSource = enemy;
                    break;
                }
                TriggeredSkillExcutor excutor = new TriggeredSkillExcutor(this, attackTriggerInfo.triggerSource, AttackTriggerCallBack);
                triggerSource.attackTriggerExcutors.Add(excutor);
            }

            if (hitTriggerInfo.triggered)
            {
                switch (attackTriggerInfo.triggerSource)
                {
                case SkillEffectTarget.Self:
                    triggerSource = self;
                    break;

                case SkillEffectTarget.Enemy:
                    triggerSource = enemy;
                    break;
                }
                TriggeredSkillExcutor excutor = new TriggeredSkillExcutor(this, hitTriggerInfo.triggerSource, HitTriggerCallBack);
                triggerSource.hitTriggerExcutors.Add(excutor);
            }

//			if (attackFinishTriggerInfo.triggered) {
//				switch (attackFinishTriggerInfo.excutor) {
//				case SkillEffectTarget.Self:
//					targetBa = self;
//					break;
//				case SkillEffectTarget.Enemy:
//					targetBa = enemy;
//					break;
//				}
//				targetBa.attackFinishTriggerCallBacks.Add (AttackFinishTriggerCallBack);
//			}

            if (beAttackedTriggerInfo.triggered)
            {
                switch (beAttackedTriggerInfo.triggerSource)
                {
                case SkillEffectTarget.Self:
                    triggerSource = self;
                    break;

                case SkillEffectTarget.Enemy:
                    triggerSource = enemy;
                    break;
                }
                TriggeredSkillExcutor excutor = new TriggeredSkillExcutor(this, beAttackedTriggerInfo.triggerSource, BeAttackedTriggerCallBack);
                triggerSource.beAttackedTriggerExcutors.Add(excutor);
            }

            if (beHitTriggerInfo.triggered)
            {
                switch (beHitTriggerInfo.triggerSource)
                {
                case SkillEffectTarget.Self:
                    triggerSource = self;
                    break;

                case SkillEffectTarget.Enemy:
                    triggerSource = enemy;
                    break;
                }
                TriggeredSkillExcutor excutor = new TriggeredSkillExcutor(this, beHitTriggerInfo.triggerSource, BeHitTriggerCallBack);
                triggerSource.beHitTriggerExcutors.Add(excutor);
            }

            TriggeredSkillExcutor FightEndExcutor = new TriggeredSkillExcutor(this, fightEndTriggerInfo.triggerSource, FightEndTriggerCallBack);


            self.fightEndTriggerExcutors.Add(FightEndExcutor);
        }
        protected override void ExcuteActiveSkillLogic(BattleAgentController self, BattleAgentController enemy)
        {
            // 如果是玩家角色,则在每次攻击时重设攻速
            if (self is BattlePlayerController)
            {
                int attackSpeedInt = 0;

                for (int i = 0; i < self.agent.allEquipedEquipments.Length; i++)
                {
                    Equipment equipment = self.agent.allEquipedEquipments[i];
                    if (equipment.itemId == -1)
                    {
                        continue;
                    }

                    if (equipment.equipmentType == EquipmentType.Weapon)
                    {
                        attackSpeedInt = (int)equipment.attackSpeed;
                        break;
                    }
                }

                for (int i = 0; i < self.agent.attachedPermanentPassiveSkills.Count; i++)
                {
                    PermanentPassiveSkill permanentPassiveSkill = self.agent.attachedPermanentPassiveSkills[i];
                    if (permanentPassiveSkill is JiSu)
                    {
                        attackSpeedInt++;
                        break;
                    }
                }

                if (attackSpeedInt > 3)
                {
                    attackSpeedInt = 3;
                }

                (self.agent as Player).attackSpeed = (AttackSpeed)attackSpeedInt;
            }

            SetEffectAnims(self, enemy);

            // 执行攻击触发事件回调
            for (int i = 0; i < self.attackTriggerExcutors.Count; i++)
            {
                TriggeredSkillExcutor excutor = self.attackTriggerExcutors[i];
                excutor.triggeredCallback(self, enemy);
            }

            // 敌方执行被攻击触发事件回调
            for (int i = 0; i < enemy.beAttackedTriggerExcutors.Count; i++)
            {
                TriggeredSkillExcutor excutor = enemy.beAttackedTriggerExcutors[i];
                excutor.triggeredCallback(enemy, self);
            }

            //计算对方闪避率(敌方的基础闪避率 - 己方的闪避修正)
            float enemyDodge = enemy.agent.dodge;

            //判断对方是否闪避成功
            if (isEffective(enemyDodge))
            {
                enemy.AddTintTextToQueue("闪避");
                return;
            }

            int actualPhysicalHurt = 0;
            int actualMagicalHurt  = 0;

            if (self.agent.attack > 0)
            {
                //int oriPhysicalHurt = self.agent.attack + self.agent.armorDecrease / 4;

                int oriPhysicalHurt = self.agent.attack;

                float crit = self.agent.crit;

                if (isEffective(crit))
                {
                    enemy.AddTintTextToQueue("暴击");
                    oriPhysicalHurt = (int)(oriPhysicalHurt * self.agent.critHurtScaler);
                }

                int armorCal = enemy.agent.armor - self.agent.armorDecrease / 2;

                if (armorCal < -50)
                {
                    armorCal = -50;
                }

                actualPhysicalHurt = (int)(oriPhysicalHurt / (armorCal / 100f + 1));


                //actualPhysicalHurt = oriPhysicalHurt - enemy.agent.armor / 4;

                if (actualPhysicalHurt < 0)
                {
                    actualPhysicalHurt = 0;
                }

                enemy.AddHurtAndShow(actualPhysicalHurt, HurtType.Physical, self.towards);
            }

            if (self.agent.magicAttack > 0)
            {
                int magicResistCal = enemy.agent.magicResist - self.agent.magicResistDecrease / 2;

                if (magicResistCal < -50)
                {
                    magicResistCal = -50;
                }

                actualMagicalHurt = (int)(self.agent.magicAttack / (magicResistCal / 100f + 1));

                if (actualMagicalHurt < 0)
                {
                    actualMagicalHurt = 0;
                }

                enemy.AddHurtAndShow(actualMagicalHurt, HurtType.Magical, self.towards);
            }

            enemy.PlayShakeAnim();

            self.agent.physicalHurtToEnemy = actualPhysicalHurt;
            self.agent.magicalHurtToEnemy  = actualMagicalHurt;

            // 执行己方攻击命中的回调
            for (int i = 0; i < self.hitTriggerExcutors.Count; i++)
            {
                TriggeredSkillExcutor excutor = self.hitTriggerExcutors[i];
                excutor.triggeredCallback(self, enemy);
            }

            // 执行敌方被击中的回调
            for (int i = 0; i < enemy.beHitTriggerExcutors.Count; i++)
            {
                TriggeredSkillExcutor excutor = enemy.beHitTriggerExcutors[i];
                excutor.triggeredCallback(enemy, self);
            }
        }