Exemplo n.º 1
0
        IEnumerator UseStrongAbility(pratiti Atker, pratiti Defer, GameObject AtkerObj, GameObject DeferObj, ability AtkerAbility)
        {
            yield return(new WaitForSeconds(Atker.abilityStartHitRecoveryTime));

            while (AtkerAbility.hitTimes < AtkerAbility.totalHitTimes)
            {
                AtkerAbility.hitTimes += 1;
                if (AtkerAbility.leftSide <= DeferObj.transform.position.x && DeferObj.transform.position.x < AtkerAbility.rightSide)
                {
                    attack(Atker, Defer, AtkerAbility);
                }
                yield return(new WaitForSeconds(0.2f));
            }
            AtkerAbility.hitTimes = 0;
        }
Exemplo n.º 2
0
        IEnumerator ParryTimeCount(pratiti parryer)
        {
            player.hitRecoveryTime    = 5 * ParryTime;
            player.hitRecoveryTimeMax = player.hitRecoveryTime;
            player.isHitRecovery      = true;
            yield return(new WaitForSeconds(ParryTime));

            parryer.isParry = false;
            if (parryer.ParrySuccess == true)
            {
                parryer.ParrySuccess = false;
            }
            else
            {
                print("盾反失敗");
                StartCoroutine(NumberChange(player.maxDef * 0.1f, player, "def"));
                StartCoroutine(NumberChange(player.maxMDef * 0.1f, player, "mDef"));
            }
        }
Exemplo n.º 3
0
        void Start()
        {
            Time.timeScale = 1f;

            // Cobra新增:讀取帕拉提提資料

            /*BattleUseData m_battleUseData = GameObject.Find("GameData").GetComponent<BattleUseData>();
             * Pratiti Ed = m_battleUseData.EnemyPratiti;
             * Pratiti Pd = m_battleUseData.PlayerPratiti;
             * player = new pratiti(Pd.atk, Pd.mAtk, Pd.def, Pd.mDef, Pd.agi, Pd.hp, 0, Pd.mDef, Pd.mDef, 1, 1, 0, 0, 1.466f, 1.33f, 1.33f, 0.9f, 0.8f, 0, 0, null, null, null, null, false, false, false, false);
             * enemy = new pratiti(Ed.atk, Ed.mAtk, Ed.def, Ed.mDef, Ed.agi, Ed.hp, 0, Ed.mDef, Ed.mDef, 1, 1, 1, 0, 0.35f, 1.5f,1.5f, 1.2f, 1.5f, 0, 0, null, null, null, null, false, false, false, false);
             */
            // Y.A你要用時,將上面註解,下面解除註解
            player = new pratiti(550, 550, 500, 500, 500, 500, 0, 500, 500, 1, 1, 0, 0, 1.466f, 1.33f, 1.33f, 0.9f, 0.8f, 0, 0, null, null, null, null, false, false, false, false);
            enemy  = new pratiti(550, 500, 550, 500, 500, 500, 0, 550, 500, 1, 1, 0, 0, 1.466f, 1.33f, 1.33f, 0.9f, 0.8f, 0, 0, null, null, null, null, false, false, false, false);
            LCD    = 0;
            LCDMax = ability01.cd;
            RCD01  = ability04.cd;
            RCD02  = ability05.cd;
            player.hitRecoveryTime    = 0;
            player.hitRecoveryTimeMax = 1;
            enemy.hitRecoveryTime     = 0;
            enemy.hitRecoveryTimeMax  = 1;
            playerMaxHp      = player.hp;
            enemyMaxHp       = enemy.hp;
            ParryTime        = 0.1f;
            ButtonPressTime  = 0.3f;
            player.gameObj01 = Player;
            player.gameObj02 = PlayerPart01;
            player.gameObj03 = PlayerPart02;
            player.gameObj04 = PlayerPart03;
            enemy.gameObj01  = Enemy;
            enemy.gameObj02  = Enemy;
            enemy.gameObj03  = Enemy;
            enemy.gameObj04  = Enemy;
            playerColor      = Player.GetComponent <SpriteRenderer>().color;
            enemyColor       = Enemy.GetComponent <SpriteRenderer>().color;
            isEnd            = false;
            motionStop       = false;
        }
Exemplo n.º 4
0
        IEnumerator NumberChange(float Number, pratiti Pratiti, string DataType)
        {
            while (Number >= 1)
            {
                if (Time.timeScale != 0)
                {
                    switch (DataType)
                    {
                    case "hp":
                        if (Number < 10)
                        {
                            Pratiti.hp -= (int)(Number * 0.5f);
                            Number     -= (int)(Number * 0.5f);
                        }
                        else
                        {
                            Pratiti.hp -= (int)(Number * 0.1f);
                            Number     -= (int)(Number * 0.1f);
                        }
                        break;

                    case "def":
                        Pratiti.def -= (Number * 0.1f);
                        Number      *= 0.9f;
                        break;

                    case "mDef":
                        Pratiti.mDef -= (Number * 0.1f);
                        Number       *= 0.9f;
                        break;

                    case "gainEnergy":
                        Pratiti.energy += (Number * 0.12f);
                        Number         *= 0.9f;
                        break;

                    case "costEnergy":
                        Pratiti.energy -= (Number * 0.11f);
                        Number         *= 0.9f;
                        if (Pratiti.energy < 0)
                        {
                            Pratiti.energy = 0;
                        }
                        break;
                    }
                }
                yield return(null);
            }
            switch (DataType)
            {
            case "hp":
                Pratiti.hp -= (int)Number;
                break;

            case "def":
                Pratiti.def -= Number;
                break;

            case "mDef":
                Pratiti.mDef -= Number;
                break;

            case "energy":
                Pratiti.energy -= Number;
                if (Pratiti.energy < 0)
                {
                    Pratiti.energy = 0;
                }
                break;
            }
        }
Exemplo n.º 5
0
        public void attack(pratiti atker, pratiti defer, ability ability)
        {
            if (defer.def < 0)
            {
                defer.def = 0;
            }
            if (defer.mDef < 0)
            {
                defer.mDef = 0;
            }
            chance = Random.Range(1, 101);

            if ((chance + defer.agi - atker.agi) <= ability.hitRate)
            {
                if (defer.isParry == true)
                {
                    print("盾反成功");
                    defer.isParry = false;
                    StartCoroutine(ParryTimeSlowDown());
                    defer.ParrySuccess = true;
                    ParryShieldAnimator.SetTrigger("Success");
                    Damage = 0.0005f * ability.power * 0.1f * (atker.atk + atker.mAtk);
                    StartCoroutine(NumberChange(Damage, defer, "hp"));
                    StartCoroutine(NumberChange(ability.gainEnergy, atker, "gainEnergy"));
                    Damage = (int)Damage;
                    damage.GetComponentInChildren <Text>().text = "-" + Damage.ToString();
                    random01 = Random.Range(-3, 5);
                    random02 = Random.Range(3, 6);
                    Instantiate(damage, defer.gameObj01.transform.position + new Vector3(random01 * 0.2f, random02 * 0.2f), new Quaternion(0, 0, 0, 0));
                    defer.gameObj01.GetComponent <SpriteRenderer>().color = new Color(255, 0, 0);
                    defer.gameObj02.GetComponent <SpriteRenderer>().color = new Color(255, 0, 0);
                    defer.gameObj03.GetComponent <SpriteRenderer>().color = new Color(255, 0, 0);
                    defer.gameObj04.GetComponent <SpriteRenderer>().color = new Color(255, 0, 0);
                    defer.hurtTime = 0.25f;
                    if (ability.gainEnergy > 0)
                    {
                        if (defer.gameObj01 == Player)
                        {
                            EnemyAbility01Obj = Instantiate(EnemyAbility01, defer.gameObj01.transform.position + new Vector3(0, 4.5f), new Quaternion(0, 0, 0, 0));
                        }
                        else
                        {
                            PlayerAbility01Obj = Instantiate(PlayerAbility01, defer.gameObj01.transform.position, new Quaternion(0, 0, 0, 0));
                        }
                    }
                    Damage = 0.0005f * ability.power * (atker.atk + atker.mAtk);
                    StartCoroutine(NumberChange(Damage, atker, "hp"));
                    Damage = (int)Damage;
                    damage.GetComponentInChildren <Text>().text = "-" + Damage.ToString();
                    random01 = Random.Range(-3, 5);
                    random02 = Random.Range(3, 6);
                    Instantiate(damage, atker.gameObj01.transform.position + new Vector3(random01 * 0.2f, random02 * 0.2f), new Quaternion(0, 0, 0, 0));
                    //Instantiate(damage, new Vector3(-3.1f,3.1f), new Quaternion(0, 0, 0, 0));
                    //Instantiate(damage, new Vector3(3.1f, 2.9f), new Quaternion(0, 0, 0, 0));
                    atker.gameObj01.GetComponent <SpriteRenderer>().color = new Color(255, 0, 0);
                    atker.gameObj02.GetComponent <SpriteRenderer>().color = new Color(255, 0, 0);
                    atker.gameObj03.GetComponent <SpriteRenderer>().color = new Color(255, 0, 0);
                    atker.gameObj04.GetComponent <SpriteRenderer>().color = new Color(255, 0, 0);
                    atker.hurtTime = 0.25f;
                }
                else
                {
                    //傷害值計算                                                                  //90%是滿減傷
                    Damage = 0.0005f * ability.power * (atker.atk + atker.mAtk - defer.defStatus * 0.9f *
                                                        (atker.atk * defer.def / defer.maxDef + atker.mAtk * defer.mDef / defer.maxMDef));
                    Damage = (int)Damage;

                    //呼叫各數值遞減的協程函式
                    StartCoroutine(NumberChange(Damage, defer, "hp"));
                    StartCoroutine(NumberChange(0.0005f * ability.power * atker.atk * defer.defStatus * defer.defEmpty, defer, "def"));
                    StartCoroutine(NumberChange(0.0005f * ability.power * atker.mAtk * defer.defStatus * defer.mDefEmpty, defer, "mDef"));
                    StartCoroutine(NumberChange(ability.gainEnergy, atker, "gainEnergy"));

                    //產生顯示傷害數值位置的偏移亂數
                    random01 = Random.Range(-3, 5);
                    random02 = Random.Range(3, 6);
                    damage.GetComponentInChildren <Text>().text = "-" + Damage.ToString(); //將傷害數值文字化
                    //在畫面上產生傷害數值
                    Instantiate(damage, defer.gameObj01.transform.position + new Vector3(random01 * 0.2f, random02 * 0.2f), new Quaternion(0, 0, 0, 0));

                    //受傷害角色身體顏色轉為紅色
                    defer.gameObj01.GetComponent <SpriteRenderer>().color = new Color(255, 0, 0);
                    defer.gameObj02.GetComponent <SpriteRenderer>().color = new Color(255, 0, 0);
                    defer.gameObj03.GetComponent <SpriteRenderer>().color = new Color(255, 0, 0);
                    defer.gameObj04.GetComponent <SpriteRenderer>().color = new Color(255, 0, 0);
                    defer.hurtTime = 0.25f;
                    if (ability.gainEnergy > 0)
                    {
                        if (defer.gameObj01 == Player)
                        {
                            EnemyAbility01Obj = Instantiate(EnemyAbility01, defer.gameObj01.transform.position + new Vector3(0, 4.5f), new Quaternion(0, 0, 0, 0));
                        }
                        else
                        {
                            PlayerAbility01Obj = Instantiate(PlayerAbility01, defer.gameObj01.transform.position, new Quaternion(0, 0, 0, 0));
                        }
                    }
                }
            }
            else
            {
                if (defer.isParry == true)
                {
                    defer.ParrySuccess = true;
                }
                random01 = Random.Range(-4, 5);
                random02 = Random.Range(1, 6);
                Instantiate(miss, defer.gameObj01.transform.position + new Vector3(random01 * 0.3f, random02 * 0.3f), new Quaternion(0, 0, 0, 0));
            }
        }