Ejemplo n.º 1
0
        /// <summary>
        /// 技能防御
        /// </summary>
        public virtual void DefenseSkill(HeroMono attacker, HeroMono defender)
        {
            long hurt = 0;

            //完全物理攻击,没有任何添加
            hurt = attacker.CurrentAttack + this.Attack - defender.CurrentDefense;
            defender.CurrentLife -= hurt;
            //播放动画
            defender.PlayTriggerAnimation(HeroAnimation.MagicDefense1);
            if (!defender.HasLife())
            {
                defender.ExcuteBuff(Global.BuffActiveState.IsDead);
                defender.ExcuteSkill(Global.BuffActiveState.IsDead);
            }
            else
            {
                //如果是物理攻击防御技能则发动
                defender.ExcuteBuff(Global.BuffActiveState.Attacked);
                defender.ExcuteSkill(Global.BuffActiveState.Attacked);
            }
            //显示HeroHub
            if (hurt > 0)
            {
                defender.ShowHeroHub(HubType.DecreseLife, new ValueUnit(hurt, Global.UnitType.Value));
            }
            else if (hurt == 0)
            {
                defender.ShowHeroHub(HubType.Miss);
            }
            //进行buff判断
            AddSkillBuff(attacker, defender);
            Debug.Log((attacker.IsPlayerHero ? "玩家的" : "敌人的") + attacker.Name + "使用技能" + this.Name + "对" + defender.Name + "造成" + hurt + "点伤害");
        }
Ejemplo n.º 2
0
 /// <summary>
 /// 每个回合行动前调用
 /// </summary>
 void BeforeAction()
 {
     //对行动列表进行处理(这里会处理多回合和跳过回合的情况)
     CaculateActiveHeroList();
     //接着从行动列表中选出速度最快的英雄作为当前回合的行动者
     GetMaxSpeedHero();
     //增加一个回合数
     _TurnNumber += 1;
     //显示当前回合英雄高亮
     CurrentBattleUI.SelectHero(_CurTurnHero);
     //接着判断一下当前回合的英雄buff或者debuff有没有起作用的,需要再次处理
     _CurTurnHero.ExcuteBuff(Global.BuffActiveState.BeforeAction);
     //如果执行完buff操作之后,英雄血量变空,则进入下一个准备开始阶段
     if (!_CurTurnHero.HasLife())
     {
         //这里先让buff执行,之后再让其他逻辑执行,让每次使用技能都有时间差
         StartCoroutine(WaitForNext(SystemSetting.BattlePerTurnEndGapTime, () =>
         {
             if (_CurTurnHero.IsDead())
             {
                 //TODO 被debuff杀死时候需要重新下一个回合,还有是否有恢复技能未使用
                 AbortAction(Global.CombatSystemType.AfterAction);
             }
             else
             {
                 //这里是血量为空,但是又技能可以复活的时候执行
                 _CurTurnHero.ExcuteBuff(Global.BuffActiveState.IsDead);
                 _CurTurnHero.ExcuteSkill(Global.BuffActiveState.IsDead);
                 //这里做个延迟
                 StartCoroutine(WaitForNext(SystemSetting.BattlePerTurnEndGapTime, () =>
                 {
                     //接着判断一下当前回合的英雄有没有回合开始前发动的技能,然后处理一下
                     if (!_CurTurnHero.ExcuteSkill(Global.BuffActiveState.BeforeAction))
                     {
                         DebugLog(LogType.INFO, "BeforeAction");
                         //如果没有技能执行,则手动进入下一状态
                         ToActionState();
                     }
                 }));
             }
         }));
         return;
     }
     //接着判断一下当前回合的英雄有没有回合开始前发动的技能,然后处理一下
     if (!_CurTurnHero.ExcuteSkill(Global.BuffActiveState.BeforeAction))
     {
         DebugLog(LogType.INFO, "BeforeAction");
         //如果没有技能执行,则手动进入下一状态
         ToActionState();
     }
 }
Ejemplo n.º 3
0
        public override void DefenseSkill(HeroMono attacker, HeroMono defender)
        {
            long hurt = 0;
            //完全物理攻击,没有任何添加
            bool is_physicl_critical = this.IsInPercent(CriticalChance);

            hurt = attacker.CurrentAttack + Mathf.RoundToInt(this.Attack * (is_physicl_critical ? 2 : 1)) - defender.CurrentDefense;
            defender.CurrentLife -= hurt;
            //播放动画
            defender.PlayTriggerAnimation(HeroAnimation.Defense1);
            if (!defender.HasLife())
            {
                defender.ExcuteBuff(Global.BuffActiveState.IsDead);
                defender.ExcuteSkill(Global.BuffActiveState.IsDead);
            }
            else
            {
                //如果是物理攻击防御技能则发动
                defender.ExcuteBuff(Global.BuffActiveState.Attacked);
                defender.ExcuteSkill(Global.BuffActiveState.Attacked);
            }
            //显示HeroHub
            if (is_physicl_critical)
            {
                if (hurt > 0)
                {
                    defender.ShowHeroHub(HubType.Critical, new ValueUnit(hurt, Global.UnitType.Value));
                }
                else if (hurt == 0)
                {
                    defender.ShowHeroHub(HubType.Miss);
                }
            }
            //正常的显示
            else if (hurt > 0)
            {
                defender.ShowHeroHub(HubType.DecreseLife, new ValueUnit(hurt, Global.UnitType.Value));
            }
            else if (hurt == 0)
            {
                defender.ShowHeroHub(HubType.Miss);
            }
            //进行buff判断
            AddSkillBuff(attacker, defender);
            // Debug.Log((attacker.IsPlayerHero ? "玩家的" : "敌人的") + attacker.Name + "使用技能" + this.Name + "对" + defender.Name + "造成" + hurt + "点伤害");
        }