Ejemplo n.º 1
0
    private IEnumerator RockDrama()
    {
        var rockUnits = UnitManager.GetInstance().units.FindAll(p => p.GetComponent <CharacterStatus>().roleEName == "Rock");

        foreach (var u in rockUnits)
        {
            if (u.GetComponent <Unit>().UnitEnd)
            {
                break;
            }
            outline.RenderOutLine(u.transform);
            rtsCamera.FollowTarget(u.transform.position);

            //rock auto recovers
            var currentHp    = u.GetComponent <CharacterStatus>().attributes.Find(d => d.eName == "hp").value;
            var currentHPMax = u.GetComponent <CharacterStatus>().attributes.Find(d => d.eName == "hp").valueMax;
            var restValue    = (int)(currentHPMax * (0.2f + GetRockIntensity(u.gameObject.name) * 0.1f));
            //if the recover HP makes currentHp full, then Hp gets full
            //else just recovers currentHPMax * (0.2f + GetRockIntensity(u.gameObject.name) * 0.1f) HP
            restValue = currentHp + restValue > currentHPMax ? currentHPMax - currentHp : restValue;

            var hp = currentHp + restValue;

            UIManager.GetInstance().FlyNum(u.GetComponent <CharacterStatus>().arrowPosition / 2 + u.transform.position + Vector3.down * 0.2f, restValue.ToString(), UIManager.hpColor);

            ChangeData.ChangeValue(u.transform, "hp", hp);

            u.OnUnitEnd();   //真正的回合结束所应执行的逻辑。
            DebugLogPanel.GetInstance().Log(u.GetComponent <CharacterStatus>().roleCName + "执行完毕");
            yield return(new WaitForSeconds(1f));
        }

        yield return(0);
    }
Ejemplo n.º 2
0
 private void Lose()
 {
     DebugLogPanel.GetInstance().Log("失败!");
     Invoke(() => {
         Restart();
     }, 2f);
 }
Ejemplo n.º 3
0
 private void Win()
 {
     DebugLogPanel.GetInstance().Log("胜利!");
     Invoke(() => {
         Restart();
     }, 2f);
 }
Ejemplo n.º 4
0
    public IEnumerator playFree(int playerNumber)
    {
        var nonMyUnits = UnitManager.GetInstance().units.FindAll(u => u.playerNumber == playerNumber);

        foreach (var u in nonMyUnits)
        {
            if (outline)
            {
                outline.RenderOutLine(u.transform);
            }
            rtsCamera.FollowTarget(u.transform.position);

            if (u.GetComponent <Unit>().UnitEnd)
            {
            }
            else
            {
                yield return(StartCoroutine(aiFreeBattle.ActiveAI(u)));

                u.OnUnitEnd();   //真正的回合结束所应执行的逻辑。
                DebugLogPanel.GetInstance().Log(u.GetComponent <CharacterStatus>().roleCName + "执行完毕");
            }

            yield return(new WaitForSeconds(1f));
        }
        outline.CancelRender();
        RoundManager.GetInstance().EndTurn();
    }
Ejemplo n.º 5
0
 private IEnumerator Play()
 {
     var myUnits = UnitManager.GetInstance().units.FindAll(u => u.playerNumber == playerNumber);
     
     foreach (var u in myUnits)
     {
         if (u.GetComponent<Unit>().UnitEnd)
             break;
         rtsCamera.FollowTarget(u.transform.position);
         outline.RenderOutLine(u.transform);
         if (u.GetComponent<CharacterStatus>().roleEName == "Rock")
         {
             u.OnUnitEnd();   //真正的回合结束所应执行的逻辑。
             DebugLogPanel.GetInstance().Log(u.GetComponent<CharacterStatus>().roleCName + "执行完毕");
             yield return new WaitForSeconds(1f);
         }
         else
         {
             yield return StartCoroutine(UseSkill("EarthStyleDorodomuBarrier", u.transform));
             u.OnUnitEnd();   //真正的回合结束所应执行的逻辑。
             DebugLogPanel.GetInstance().Log(u.GetComponent<CharacterStatus>().roleCName + "执行完毕");
             yield return new WaitForSeconds(1f);
         }
     }
     outline.CancelRender();
     RoundManager.GetInstance().EndTurn();
 }
Ejemplo n.º 6
0
    //后处理附加效果
    protected override void PostEffect(Transform o)
    {
        var currentMp = o.GetComponent <CharacterStatus>().attributes.Find(d => d.eName == "mp").value;

        DebugLogPanel.GetInstance().Log("2 MP" + "(" + character.GetComponent <CharacterStatus>().roleCName + " -> " + o.GetComponent <CharacterStatus>().roleCName + ")");
        var mp = currentMp - 2;

        ChangeData.ChangeValue(o, "mp", mp);
    }
Ejemplo n.º 7
0
    //后处理附加效果
    protected override void PostEffect(Transform o)
    {
        var currentMp = o.GetComponent <CharacterStatus>().attributes.Find(d => d.eName == "mp").value;

        DebugLogPanel.GetInstance().Log("2 MP" + "(" + character.GetComponent <CharacterStatus>().roleCName + " -> " + o.GetComponent <CharacterStatus>().roleCName + ")");
        var mp = currentMp - 2;

        ChangeData.ChangeValue(o, "mp", mp);
        UIManager.GetInstance().FlyNum(o.GetComponent <CharacterStatus>().arrowPosition / 2 + o.position + Vector3.down * 0.3f, "-2", new Color(80f / 255f, 248f / 255f, 144f / 255f));
    }
Ejemplo n.º 8
0
 public override bool Check()
 {
     if (character.GetComponent <CharacterStatus>().attributes.Find(d => d.eName == "mp").value >= costMP)
     {
         return(true);
     }
     else
     {
         DebugLogPanel.GetInstance().Log("查克拉不足!");
         return(false);
     }
 }
Ejemplo n.º 9
0
 public override bool Check()
 {
     if (character.GetComponent <CharacterStatus>().attributes.Find(d => d.eName == "mp").valueMax == character.GetComponent <CharacterStatus>().attributes.Find(d => d.eName == "mp").value)
     {
         DebugLogPanel.GetInstance().Log("查克拉已经是最大值。");
         Reset();
         return(false);
     }
     else
     {
         return(true);
     }
 }
Ejemplo n.º 10
0
    private IEnumerator Play()
    {
        var myUnits = UnitManager.GetInstance().units.FindAll(u => u.playerNumber == playerNumber);

        foreach (var u in myUnits)
        {
            u.OnUnitEnd();   //真正的回合结束所应执行的逻辑。
            DebugLogPanel.GetInstance().Log(u.GetComponent <CharacterStatus>().roleCName + "执行完毕");
            RoundManager.GetInstance().EndTurn(u.transform);
            yield return(new WaitForSeconds(0.2f));
        }

        yield return(null);
    }
Ejemplo n.º 11
0
    //protected override bool ApplyEffects()
    //{
    //    if (animator.GetInteger("Skill") == 0 && animator.GetCurrentAnimatorStateInfo(0).IsName("Idle"))
    //    {
    //        character.GetComponent<CharacterAction>().SetSkill("ChooseDirection");

    //        return true;
    //    }
    //    return false;
    //}

    public override void Effect()
    {
        base.Effect();
        var currentHP = character.GetComponent <CharacterStatus>().attributes.Find(d => d.eName == "hp").value;
        var currentMP = character.GetComponent <CharacterStatus>().attributes.Find(d => d.eName == "mp").value;

        var hp = currentHP + restoreHP;
        var mp = currentMP + restoreMP;

        ChangeData.ChangeValue(character, "hp", hp);
        ChangeData.ChangeValue(character, "mp", mp);
        DebugLogPanel.GetInstance().Log("吃掉薯片,恢复了 " + restoreHP + "体力、" + restoreMP + "查克拉!");
        var skills = character.GetComponent <CharacterStatus>().skills;

        skills.Remove(EName);
    }
Ejemplo n.º 12
0
    private IEnumerator JiroubouDrama()
    {
        Unit u = UnitManager.GetInstance().units.Find(p => p.name == "jiroubou_1");

        rtsCamera.FollowTarget(u.transform.position);
        outline.RenderOutLine(u.transform);

        yield return(StartCoroutine(UseSkill("EarthStyleDorodomuBarrier", u.transform)));

        u.OnUnitEnd();   //真正的回合结束所应执行的逻辑。
        DebugLogPanel.GetInstance().Log(u.GetComponent <CharacterStatus>().roleCName + "执行完毕");
        yield return(new WaitForSeconds(1f));

        outline.CancelRender();

        yield return(0);
    }
Ejemplo n.º 13
0
 //confirmUI的回调函数
 public virtual void Confirm()
 {
     if (confirmUI)
     {
         UnityEngine.Object.Destroy(confirmUI);
     }
     done = true;
     //角色取出忽略层
     UnitManager.GetInstance().units.ForEach(u => u.gameObject.layer = 0);
     skillState = SkillState.confirm;
     if (originSkill != null)
     {
         DebugLogPanel.GetInstance().Log(character.GetComponent <CharacterStatus>().roleCName + " 使用了 " + originSkill.CName + " + " + CName);
     }
     else
     {
         DebugLogPanel.GetInstance().Log(character.GetComponent <CharacterStatus>().roleCName + " 使用了 " + CName);
     }
 }
Ejemplo n.º 14
0
    private IEnumerator Play()
    {
        var myUnits = UnitManager.GetInstance().units.FindAll(u => u.playerNumber == playerNumber);

        foreach (var u in myUnits)
        {
            if (u.GetComponent <Unit>().UnitEnd)
            {
                break;
            }
            rtsCamera.FollowTarget(u.transform.position);
            outline.RenderOutLine(u.transform);
            if (u.GetComponent <CharacterStatus>().roleEName == "Rock")
            {
                var currentHp    = u.GetComponent <CharacterStatus>().attributes.Find(d => d.eName == "hp").value;
                var currentHPMax = u.GetComponent <CharacterStatus>().attributes.Find(d => d.eName == "hp").valueMax;
                var restValue    = (int)(currentHPMax * 0.3f);
                restValue = currentHp + restValue > currentHPMax ? currentHPMax - currentHp : restValue;

                var hp = currentHp + restValue;

                UIManager.GetInstance().FlyNum(u.GetComponent <CharacterStatus>().arrowPosition / 2 + u.transform.position + Vector3.down * 0.2f, restValue.ToString(), UIManager.hpColor);


                ChangeData.ChangeValue(u.transform, "hp", hp);


                u.OnUnitEnd();   //真正的回合结束所应执行的逻辑。
                DebugLogPanel.GetInstance().Log(u.GetComponent <CharacterStatus>().roleCName + "执行完毕");
                yield return(new WaitForSeconds(1f));
            }
            else
            {
                yield return(StartCoroutine(UseSkill("EarthStyleDorodomuBarrier", u.transform)));

                u.OnUnitEnd();   //真正的回合结束所应执行的逻辑。
                DebugLogPanel.GetInstance().Log(u.GetComponent <CharacterStatus>().roleCName + "执行完毕");
                yield return(new WaitForSeconds(1f));
            }
        }
        outline.CancelRender();
        RoundManager.GetInstance().EndTurn();
    }
Ejemplo n.º 15
0
    public override void Effect()
    {
        base.Effect();
        var currentHP = character.GetComponent <CharacterStatus>().attributes.Find(d => d.eName == "hp").value;
        var currentMP = character.GetComponent <CharacterStatus>().attributes.Find(d => d.eName == "mp").value;

        var hp = currentHP + restoreHP;
        var mp = currentMP + restoreMP;

        ChangeData.ChangeValue(character, "hp", hp);
        ChangeData.ChangeValue(character, "mp", mp);
        DebugLogPanel.GetInstance().Log("吃掉薯片,恢复了 " + restoreHP + "体力、" + restoreMP + "查克拉!");
        UIManager.GetInstance().FlyNum(character.GetComponent <CharacterStatus>().arrowPosition / 2 + character.position, restoreHP.ToString(), UIManager.hpColor);
        UIManager.GetInstance().FlyNum(character.GetComponent <CharacterStatus>().arrowPosition / 2 + character.position + Vector3.down * 0.3f, "+" + restoreMP.ToString(), new Color(80f / 255f, 248f / 255f, 144f / 255f));
        var skills = character.GetComponent <CharacterStatus>().skills;

        skills.Remove(EName);
        shupian.gameObject.SetActive(false);
    }
Ejemplo n.º 16
0
    public override void Effect()
    {
        base.Effect();

        if (target.GetComponent <CharacterStatus>().characterIdentity == CharacterStatus.CharacterIdentity.noumenon)
        {
            animator.speed = 0f;

            RoundManager.GetInstance().Invoke(() => {
                FXManager.GetInstance().SmokeSpawn(character.position, character.rotation, null);
            }, 0.6f);

            RoundManager.GetInstance().Invoke(() => {
                var buff = new TransfigurationBuff(duration, target);
                character.GetComponent <CharacterStatus>().Buffs.Add(buff);
                buff.Apply(character);
                animator.speed = 1f;
            }, 0.8f);
        }
        else
        {
            DebugLogPanel.GetInstance().Log("Miss");
        }
    }
Ejemplo n.º 17
0
 public override void Effect()
 {
     base.Effect();
     DebugLogPanel.GetInstance().Log("最终伤害 + " + factor.ToString() + "%");
 }
Ejemplo n.º 18
0
    public override void Effect()
    {
        //不飘字
        calculateDamage = false;

        base.Effect();

        //animator.speed = 0;

        int missCount = 0;

        float timeline = 0;

        for (int i = 0; i < other.Count; i++)
        {
            var o = other[i];

            //侧边
            if ((int)Vector3.Angle((o.position - character.position).normalized, character.forward) % 90 != 0)
            {
                timeline = timeline + 0.3f;
                //确定两边
                GameObject go = null;
                GameController.GetInstance().Invoke(() => { go = CreateMesh(character.position, o.position); }, timeline);
                if (DamageSystem.Miss(character, o, skillRate))
                {
                    GameController.GetInstance().Invoke(() => {
                        var mat = go.GetComponentInChildren <MeshRenderer>().material;
                        CreateTween(mat, "_TilingY", 0f, 1f);

                        DebugLogPanel.GetInstance().Log("Miss");

                        GameController.GetInstance().Invoke(() => { GameObject.Destroy(go); }, 1f);
                    }, timeline + 1);
                    missCount++;
                }
                else
                {
                    GameController.GetInstance().Invoke(() => {
                        var point = CreatePoint(o);
                        var shadowSimulationBuff = new ShadowSimulationBuff(duration, point.transform, go.transform);
                        o.GetComponent <Unit>().Buffs.Add(shadowSimulationBuff);
                        shadowSimulationBuff.Apply(o);
                    }, timeline + 1);
                }
            }
            else
            {
                GameObject go = CreateLine(character.position, o.position);

                if (DamageSystem.Miss(character, o, skillRate))
                {
                    GameController.GetInstance().Invoke(() => {
                        var mat = go.GetComponentInChildren <MeshRenderer>().material;
                        CreateTween(mat, "_TilingY", 0f, 1f);

                        DebugLogPanel.GetInstance().Log("Miss");
                        GameController.GetInstance().Invoke(() => { GameObject.Destroy(go); }, 1f);
                    }, 1);
                    missCount++;
                }
                else
                {
                    GameController.GetInstance().Invoke(() => {
                        var point = CreatePoint(o);
                        var shadowSimulationBuff = new ShadowSimulationBuff(duration, point.transform, go.transform);
                        o.GetComponent <Unit>().Buffs.Add(shadowSimulationBuff);
                        shadowSimulationBuff.Apply(o);
                    }, 1);
                }
            }
        }

        var selfPoint = CreatePoint(character);

        if (missCount == other.Count)
        {
            GameController.GetInstance().Invoke(() => {
                var meshes = character.GetComponentsInChildren <SkinnedMeshRenderer>();

                //开启原本阴影
                foreach (var m in meshes)
                {
                    m.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.On;
                }

                var mat = selfPoint.GetComponentInChildren <MeshRenderer>().material;

                CreateTween(mat, "_N_mask", 0f, 1f);
            }, 2f);
        }
        else
        {
            //有命中的敌人的时候,也给自身施加禁止buff
            var buff = new ShadowSimulationBuff(duration, selfPoint.transform);
            character.GetComponent <Unit>().Buffs.Add(buff);
            GameController.GetInstance().Invoke(() => { buff.Apply(character); }, timeline + 2.5f);//稍微比动画晚0.5s
        }

        GameController.GetInstance().Invoke(() => { animator.SetTrigger("EndSkill"); }, timeline + 2);
    }
Ejemplo n.º 19
0
    //突袭(Pounce):无视防御力
    //背击(BackStab):无视一半防御力
    //暴击(Crit):伤害结果增加50%
    //返回true继续执行剩余Hit,返回false停止执行剩余Hit。
    public static bool ApplyDamage(Transform attacker, Transform defender, bool skipDodge, int damageFactor, int skillRate, int extraCrit, int extraPounce, bool backStabBonus, int finalDamageFactor, out int value)
    {
        //Debug.Log("暴击率:" + extraCrit + "%   " + "突袭率:" + extraPounce + "%");
        value = -1;
        var def       = defender.GetComponent <CharacterStatus>().attributes.Find(d => d.eName == "def").value;
        var currentHp = defender.GetComponent <CharacterStatus>().attributes.Find(d => d.eName == "hp").value;
        var atk       = attacker.GetComponent <CharacterStatus>().attributes.Find(d => d.eName == "atk").value;

        if (Miss(attacker, defender, skillRate))
        {
            DebugLogPanel.GetInstance().Log("Miss");
            return(true);
        }

        if (!skipDodge)
        {
            var dodgeBuff = defender.GetComponent <Unit>().Buffs.Find(b => b.GetType() == typeof(DodgeBuff));
            if (dodgeBuff != null)
            {
                var d = (DodgeBuff)dodgeBuff;
                if (!d.done)
                {
                    dodgeBuff.Apply(defender);

                    //将当前AttackSkill从队列头取出并放在队列尾。
                    if (SkillManager.GetInstance().skillQueue.Peek().Key.GetType().IsSubclassOf(typeof(AttackSkill)))
                    {
                        SkillManager.GetInstance().skillQueue.Enqueue(SkillManager.GetInstance().skillQueue.Dequeue());
                    }
                    value = -2;
                    return(false);
                }
            }
        }

        if (defender.GetComponent <CharacterStatus>().characterIdentity == CharacterStatus.CharacterIdentity.clone || defender.GetComponent <CharacterStatus>().characterIdentity == CharacterStatus.CharacterIdentity.advanceClone)
        {
            FXManager.GetInstance().SmokeSpawn(defender.position, Quaternion.identity, null);
            RoundManager.GetInstance().Invoke(() => { defender.GetComponent <Unit>().OnDestroyed(); }, 0.1f);
            return(false);
        }

        int damage = ((int)(0.1f * atk * damageFactor));

        //最终伤害加成
        damage = (int)(damage * (1 + 0.01 * finalDamageFactor));

        if (PounceSystem(extraPounce))
        {
            DebugLogPanel.GetInstance().Log("突袭!");
        }
        else if (backStabBonus && BackStab(attacker, defender))
        {
            DebugLogPanel.GetInstance().Log("背击!");
            damage = damage * 50 / (def / 2 + 50);
        }
        else
        {
            damage = damage * 50 / (def + 50);
        }

        if (CritSystem(extraCrit))
        {
            DebugLogPanel.GetInstance().Log("暴击!");
            damage = (int)(damage * 1.5f);
        }

        damage = damage >= 0 ? damage : 0;
        value  = damage;

        //UIManager.GetInstance().FlyNum(defender.GetComponent<CharacterStatus>().arrowPosition / 2 + defender.position, damage.ToString());

        //defender.GetComponent<Animator>().SetTrigger("Forward");

        DebugLogPanel.GetInstance().Log(damage.ToString() + "(" + attacker.GetComponent <CharacterStatus>().roleCName + " -> " + defender.GetComponent <CharacterStatus>().roleCName + ")");
        var hp = currentHp - damage;

        ChangeData.ChangeValue(defender, "hp", hp);

        if (hp <= 0)
        {
            defender.GetComponent <Unit>().OnDestroyed();
            return(false);
        }

        return(true);
    }
Ejemplo n.º 20
0
    public virtual void GetHit()
    {
        if (calculateDamage)
        {
            //寻找是否有最终伤害buff
            FinalDamageBuff finalDamageBuff = (FinalDamageBuff)character.GetComponent <Unit>().Buffs.Find(b => b.GetType() == typeof(FinalDamageBuff));

            foreach (var o in other)
            {
                //<伤害序列,伤害结果>
                List <int> damageList = new List <int>();

                if (ExtraHitSystem(extraHit))
                {
                    DebugLogPanel.GetInstance().Log("速击!" + "(" + character.GetComponent <CharacterStatus>().roleCName + " -> " + o.GetComponent <CharacterStatus>().roleCName + ")");
                    hit++;
                }

                //每Hit
                for (int i = 0; i < hit; i++)
                {
                    int d;
                    var doNextHit = DamageSystem.ApplyDamage(character, o, this, comboSkill == null && hoverRange == 0 || comboSkill != null && comboSkill.hoverRange == 0, finalDamageBuff == null ? 0 : finalDamageBuff.Factor, out d);
                    damageList.Add(d);
                    if (!doNextHit)
                    {
                        break;
                    }
                }

                //如果有最终伤害Buff,且Duration小于0,手动撤销影响。(此处应为倍化术)
                if (finalDamageBuff != null && finalDamageBuff.Duration < 0)
                {
                    finalDamageBuff.Undo(character);
                }

                for (int i = 0; i < damageList.Count; i++)
                {
                    bool donePost = false;
                    //异步时,要把迭代器传进去。
                    GameController.GetInstance().Invoke(j => {
                        if (o)
                        {
                            //飘字
                            if (damage > 0)
                            {
                                if (damageList[j] > 0)
                                {
                                    //受击动作
                                    HitEffect(o);

                                    UIManager.GetInstance().FlyNum(o.GetComponent <CharacterStatus>().arrowPosition / 2 + o.position, damageList[j].ToString(), Color.white, true);
                                }
                                else if (damageList[j] == 0)
                                {
                                    UIManager.GetInstance().FlyNum(o.GetComponent <CharacterStatus>().arrowPosition / 2 + o.position, damageList[j].ToString(), Color.white, false);
                                }
                                else if (damageList[j] < 0)
                                {
                                    //受击动作
                                    HitEffect(o);
                                }
                            }
                            else
                            {
                                UIManager.GetInstance().FlyNum(o.GetComponent <CharacterStatus>().arrowPosition / 2 + o.position, Mathf.Abs(damageList[j]).ToString(), UIManager.hpColor, false);
                            }
                            if (!donePost)
                            {
                                PostEffect(o);
                                donePost = true;
                            }
                        }
                    }, hitInterval * i, i);
                }
            }
        }
    }
Ejemplo n.º 21
0
 private void Awake()
 {
     instance = this;
 }
Ejemplo n.º 22
0
    public override void Effect()
    {
        if (effectState == EffectState.origin)
        {
            originSkill.Effect();
        }
        else
        {
            //结算消耗以及动作归位。
            base.Effect();

            if (calculateDamage)
            {
                //寻找是否有最终伤害buff
                FinalDamageBuff finalDamageBuff = (FinalDamageBuff)character.GetComponent <Unit>().Buffs.Find(b => b.GetType() == typeof(FinalDamageBuff));

                foreach (var o in other)
                {
                    //<伤害序列,伤害结果>
                    Dictionary <int, int> damageDic = new Dictionary <int, int>();

                    if (ExtraHitSystem(extraHit))
                    {
                        DebugLogPanel.GetInstance().Log("速击!" + "(" + character.GetComponent <CharacterStatus>().roleCName + " -> " + o.GetComponent <CharacterStatus>().roleCName + ")");
                        hit++;
                    }

                    //每Hit
                    for (int i = 0; i < hit; i++)
                    {
                        int d;
                        var doNextHit = DamageSystem.ApplyDamage(character, o, skipDodge, damageFactor, skillRate, extraCrit, extraPounce, comboSkill == null && hoverRange == 0 || comboSkill != null && comboSkill.hoverRange == 0, finalDamageBuff == null ? 0 : finalDamageBuff.Factor, out d);
                        damageDic.Add(i, d);
                        if (!doNextHit)
                        {
                            break;
                        }
                    }

                    //如果有最终伤害Buff,且Duration小于0,手动撤销影响。(此处应为倍化术)
                    if (finalDamageBuff != null && finalDamageBuff.Duration < 0)
                    {
                        finalDamageBuff.Undo(character);
                    }
                    //comboSkill是指组合技的第二个技能。这里说明是第一个技能,结合前面的条件,则这里是无连续技的技能逻辑。
                    if (comboSkill == null)
                    {
                        //寻求合击的逻辑
                        var comboUnits = DamageSystem.ComboDetect(character, o);
                        if (comboUnits.Count > 0)
                        {
                            for (int i = 0; i < comboUnits.Count; i++)
                            {
                                int             d;
                                FinalDamageBuff u_finalDamageBuff = (FinalDamageBuff)comboUnits[i].GetComponent <Unit>().Buffs.Find(b => b.GetType() == typeof(FinalDamageBuff));
                                var             ninjaCombo        = new NinjaCombo();
                                ninjaCombo.SetLevel(comboUnits[i].GetComponent <CharacterStatus>().skills["NinjaCombo"]);
                                DamageSystem.ApplyDamage(comboUnits[i], o, false, ninjaCombo.damageFactor, ninjaCombo.skillRate, ninjaCombo.extraCrit, ninjaCombo.extraPounce, ninjaCombo.hoverRange == 0, u_finalDamageBuff == null ? 0 : u_finalDamageBuff.Factor, out d);
                                damageDic.Add(damageDic.Count + i, d);
                                comboUnits[i].GetComponent <Animator>().SetInteger("Skill", 0);
                            }
                        }
                    }

                    FlyNum(damageDic, o);
                }
            }
        }
    }