Exemplo n.º 1
0
 // Set custom immunity time on hitting an NPC
 public override void OnHitNPC(NPC target, int damage, float knockback, bool crit)
 {
     target.immune[projectile.owner] = 5;
     if (DamageReducedNps.Contains(target.type))
     {
         damage = damage / 2;
     }
 }
        public override void ExplosionDamage()
        {
            if (Main.player[projectile.owner].EE().ExplosiveCrit > Main.rand.Next(1, 101))
            {
                crit = true;
            }
            foreach (NPC npc in Main.npc)
            {
                float dist = Vector2.Distance(npc.Center, projectile.Center);
                if (dist / 16f <= radius)
                {
                    int dir = (dist > 0) ? 1 : -1;
                    if (DamageReducedNps.Contains(npc.type))
                    {
                        npc.StrikeNPC((int)(projectile.damage * .5f), projectile.knockBack, dir, crit);
                    }
                    else if (npc.boss && !DamageReducedNps.Contains(npc.type))
                    {
                        npc.StrikeNPC(projectile.damage * 2, projectile.knockBack, dir, crit);
                    }
                    else
                    {
                        npc.StrikeNPC(projectile.damage, projectile.knockBack, dir, crit);
                    }
                }
            }

            foreach (Player player in Main.player)
            {
                if (player == null || player.whoAmI == 255 || !player.active)
                {
                    return;
                }
                if (!CanHitPlayer(player))
                {
                    continue;
                }
                if (player.EE().BlastShielding&&
                    player.EE().BlastShieldingActive)
                {
                    continue;
                }
                float dist = Vector2.Distance(player.Center, projectile.Center);
                int   dir  = (dist > 0) ? 1 : -1;
                if (dist / 16f <= radius && Main.netMode == NetmodeID.SinglePlayer && InflictDamageSelf)
                {
                    player.Hurt(PlayerDeathReason.ByProjectile(player.whoAmI, projectile.whoAmI), (int)(projectile.damage * (crit ? 1.5 : 1)), dir);
                    player.hurtCooldowns[0] += 15;
                }
                else if (Main.netMode != NetmodeID.MultiplayerClient && dist / 16f <= radius && player.whoAmI == projectile.owner && InflictDamageSelf)
                {
                    NetMessage.SendPlayerHurt(projectile.owner, PlayerDeathReason.ByProjectile(player.whoAmI, projectile.whoAmI), (int)(projectile.damage * (crit ? 1.5 : 1)), dir, crit, pvp: true, 0);
                }
            }
        }