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; }
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")); } }
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; }
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; } }
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)); } }