public void TakeDamage(int damage, ItemScriptableObject.damageType type) { __sanity--; __currentHp -= damage; LossBlood(Mathf.RoundToInt(damage / 2)); gameManager.gameObject.GetComponent <MousePointer>().StopAllCoroutines(); if (!isDead && __currentHp <= 0) { Die(); } }
public virtual void TakeDamage(RoamingNPC npc, int amount, ItemScriptableObject.damageType dmgType) { ToWakeUp.Calculate(npc); switch (dmgType) { case ItemScriptableObject.damageType.normal: npc.__currentHp -= amount; break; case ItemScriptableObject.damageType.light: if (npc.enemySO.W_light) { npc.__currentHp -= Mathf.RoundToInt(amount * 1.5f); } else { npc.__currentHp -= amount; } break; case ItemScriptableObject.damageType.magic: if (npc.enemySO.W_magic) { npc.__currentHp -= Mathf.RoundToInt(amount * 1.5f); } else { npc.__currentHp -= amount; } break; } npc.canvas.GetComponent <Animator>().SetTrigger("Shake"); if (npc.__currentHp <= 0) { npc.enemySO.MyKill.Calculate(npc); } }
//========================= //+++++++++++++++++++++++++ //========================= public void TakeDamage(int amount, ItemScriptableObject.damageType dmgType) { enemySO.MyTakeDamage.TakeDamage(this, amount, dmgType); return; }
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); } }