Exemplo n.º 1
0
    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();
        }
    }
Exemplo n.º 2
0
    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);
        }
    }
Exemplo n.º 3
0
    //=========================
    //+++++++++++++++++++++++++
    //=========================

    public void TakeDamage(int amount, ItemScriptableObject.damageType dmgType)
    {
        enemySO.MyTakeDamage.TakeDamage(this, amount, dmgType);
        return;
    }
Exemplo n.º 4
0
    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);
        }
    }