예제 #1
0
 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>");
     }
 }
예제 #2
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);
        }
    }