private static void DealDamageToEnemy(RoamingNPC npc, int damage) { if (npc.sleeping) { PlayerMovement.playerMovement.WakeUpEnemy(npc); npc.TakeDamage(Mathf.FloorToInt(damage * PlayerMovement.playerMovement.sleepingDamage), ItemScriptableObject.damageType.normal); GameManager.manager.UpdateMessages($"You dealt <color=red>{damage}</color> damage to <color=#{ColorUtility.ToHtmlStringRGB(npc.EnemyColor)}>{npc.EnemyName}</color>"); } else { npc._x = npc.howLongWillFololwInvisiblepLayer; npc.TakeDamage(damage, ItemScriptableObject.damageType.normal); GameManager.manager.UpdateMessages($"You dealt <color=red>{damage}</color> damage to <color=#{ColorUtility.ToHtmlStringRGB(npc.EnemyColor)}>{npc.EnemyName}</color>"); } }
private void Attack(GameObject e, int x, int y) //float damageMultiplier, WeaponsSO.additionalEffects effect { for (int y2 = position.y - 2; y2 < position.y + 2; y2++) { for (int x2 = position.x - 2; x2 < position.x + 2; x2++) { try { if (MapManager.map[x2, y2].enemy != null) { MapManager.map[x2, y2].enemy.GetComponent <RoamingNPC>().TestToWakeUp(); } } catch { } } } if (playerStats._Lhand?.iso is WeaponsSO w) { w.onHit(playerStats); } if (playerStats._Rhand?.iso is WeaponsSO w2) { w2.onHit(playerStats); } if (playerStats.isInvisible) { playerStats.RemoveInvisibility(); } RoamingNPC roamingNpcScript = e.GetComponent <RoamingNPC>(); int damageLeftHand = 0; int damageRightHand = 0; ItemScriptableObject.damageType leftHandDamageType = ItemScriptableObject.damageType.normal; ItemScriptableObject.damageType rightHandDamageType = ItemScriptableObject.damageType.normal; int r = Random.Range(1, 100); int valueRequiredToHit = 0; //value required to hit the monster if (roamingNpcScript.sleeping) { valueRequiredToHit = r + playerStats.__dexterity - roamingNpcScript.dex / 4 - roamingNpcScript.AC; } else { valueRequiredToHit = r + playerStats.__dexterity - roamingNpcScript.dex - roamingNpcScript.AC; } if (r <= 0) { manager.UpdateMessages("You missed!"); WakeUpEnemy(roamingNpcScript); return; } if (valueRequiredToHit > 50 || r >= 80) //Do we hit? { if (playerStats._Lhand?.iso is WeaponsSO weaponL) { leftHandDamageType = weaponL.I_damageType; for (x = 0; x < weaponL.attacks.Count; x++) { damageLeftHand += Random.Range(1, weaponL.attacks[x].y + 1); //IF WEAPON IS BLOOD SWORD WE INCREASE ITS DAMAGE if (weaponL.I_name == "Bloodsword") { weaponL.attacks[0] = new Vector2Int(1, weaponL.attacks[0].y + 1); weaponL.bloodSwordCounter = manager.tasks.bloodSwordCooldown; } } } if (playerStats._Rhand?.iso is WeaponsSO weaponR) { rightHandDamageType = weaponR.I_damageType; for (x = 0; x < weaponR.attacks.Count; x++) { damageRightHand += Random.Range(1, weaponR.attacks[x].y + 1); //IF WEAPON IS BLOOD SWORD WE INCREASE ITS DAMAGE if (weaponR.I_name == "Bloodsword") { weaponR.attacks[0] = new Vector2Int(1, weaponR.attacks[0].y + 1); weaponR.bloodSwordCounter = manager.tasks.bloodSwordCooldown; } } } //CRIT? if (Random.Range(1, 100) < 10 - roamingNpcScript.AC + roamingNpcScript.dex - playerStats.__dexterity) { if (playerStats._Lhand?.iso is WeaponsSO) { damageLeftHand += Mathf.FloorToInt((Random.Range(1, 4) + Mathf.FloorToInt(playerStats.__strength / 5)) * 1.5f); } } else { //damageLeftHand += Random.Range(1, 4) + Mathf.FloorToInt(playerStats.__strength / 5); } if (Random.Range(1, 100) < 10 - roamingNpcScript.AC + roamingNpcScript.dex - playerStats.__dexterity) { if ((playerStats._Lhand?.iso is WeaponsSO)) { damageRightHand += Mathf.FloorToInt((Random.Range(1, 4) + Mathf.FloorToInt(playerStats.__strength / 5)) * 1.5f); } } else { // damageRightHand += Random.Range(1, 4) + Mathf.FloorToInt(playerStats.__strength / 5); } if (damageLeftHand == 0) { damageLeftHand = Random.Range(1, 4); } if (damageRightHand == 0) { damageRightHand = Random.Range(1, 4); } if (roamingNpcScript.sleeping) { damage = Mathf.FloorToInt(damageLeftHand * sleepingDamage) + Mathf.FloorToInt(damageRightHand * sleepingDamage); manager.UpdateMessages($"You dealt <color=red>{damage}</color> damage to <color=#{ColorUtility.ToHtmlStringRGB(roamingNpcScript.EnemyColor)}>{roamingNpcScript.EnemyName}</color>"); WakeUpEnemy(roamingNpcScript); roamingNpcScript.TakeDamage(Mathf.FloorToInt(damageLeftHand * sleepingDamage), leftHandDamageType); roamingNpcScript.TakeDamage(Mathf.FloorToInt(damageRightHand * sleepingDamage), rightHandDamageType); } else { damage = damageLeftHand + damageRightHand; manager.UpdateMessages($"You dealt <color=red>{damage}</color> damage to <color=#{ColorUtility.ToHtmlStringRGB(roamingNpcScript.EnemyColor)}>{roamingNpcScript.EnemyName}</color>"); roamingNpcScript._x = roamingNpcScript.howLongWillFololwInvisiblepLayer; if (playerStats._Lhand != null) { RunManager.CurrentRun.Set(RunManager.Stats.CurrentAttackInfoLeft, ((WeaponsSO)playerStats._Lhand.iso)._weaponType); } if (playerStats._Rhand != null) { RunManager.CurrentRun.Set(RunManager.Stats.CurrentAttackInfoRight, ((WeaponsSO)playerStats._Rhand.iso)._weaponType); } roamingNpcScript.TakeDamage(damageLeftHand, leftHandDamageType); roamingNpcScript.TakeDamage(damageRightHand, rightHandDamageType); if (playerStats._Lhand != null) { RunManager.CurrentRun.Set(RunManager.Stats.CurrentAttackInfoRight, null); } if (playerStats._Rhand != null) { RunManager.CurrentRun.Set(RunManager.Stats.CurrentAttackInfoLeft, null); } } RunManager.CurrentRun.Set(RunManager.Names.EnemiesAttacked, RunManager.CurrentRun.Get <int>(RunManager.Names.EnemiesAttacked) + 1); } else //WE MISSED BUT WE WAKE UP ENEMY { manager.UpdateMessages("You missed!"); WakeUpEnemy(roamingNpcScript); } }