예제 #1
0
        public override void SafeOnHitNPC(NPC target, int damage, float knockback, bool crit, Player player, OrchidModPlayer modPlayer)
        {
            OrchidModGlobalNPC modTarget = target.GetGlobalNPC <OrchidModGlobalNPC>();

            if (projectile.owner == Main.myPlayer)
            {
                modTarget.gamblerDungeonCardCount++;
                if (modTarget.gamblerDungeonCardCount >= 3)
                {
                    modTarget.gamblerDungeonCardCount = 0;
                    OrchidModProjectile.spawnDustCircle(projectile.Center, 29, 10, 15, true, 1.3f, 1f, 8f, true, true, false, 0, 0, true);
                    Main.PlaySound(2, (int)projectile.Center.X, (int)projectile.Center.Y, 45);
                    int     projType = ProjectileType <Gambler.Projectiles.DungeonCardProjAlt>();
                    float   scale    = 10f - (Main.rand.NextFloat() * 2.5f);
                    Vector2 vel      = (projectile.velocity.RotatedByRandom(MathHelper.ToRadians(20)));
                    vel.Normalize();
                    vel *= scale;
                    bool       dummy      = projectile.GetGlobalProjectile <OrchidModGlobalProjectile>().gamblerDummyProj;
                    int        newProjInt = OrchidModGamblerHelper.DummyProjectile(Projectile.NewProjectile(projectile.Center.X, projectile.Center.Y, vel.X, vel.Y, projType, (int)(projectile.damage * 5), 0.1f, projectile.owner), dummy);
                    Projectile newProj    = Main.projectile[newProjInt];
                    newProj.ai[1]     = (int)target.whoAmI;
                    newProj.netUpdate = true;
                }
            }

            if (modPlayer.gamblerElementalLens)
            {
                target.AddBuff(31, 60 * 3);                 // Confused
            }
        }
예제 #2
0
        public override void GamblerShoot(Player player, Vector2 position, float speedX, float speedY, int type, int damage, float knockBack, bool dummy = false)
        {
            int  projType = ProjectileType <Gambler.Projectiles.DungeonCardProj>();
            bool found    = false;

            for (int l = 0; l < Main.projectile.Length; l++)
            {
                Projectile proj = Main.projectile[l];
                if (proj.active && proj.type == projType && proj.owner == player.whoAmI)
                {
                    found = true;
                    break;
                }
            }

            if (!found)
            {
                for (int k = 0; k < Main.npc.Length; k++)
                {
                    if (Main.npc[k].active)
                    {
                        OrchidModGlobalNPC modTarget = Main.npc[k].GetGlobalNPC <OrchidModGlobalNPC>();
                        modTarget.gamblerDungeonCardCount = 0;
                    }
                }
            }

            int newProj = OrchidModGamblerHelper.DummyProjectile(Projectile.NewProjectile(position.X, position.Y, speedX, speedY, projType, damage, knockBack, player.whoAmI), dummy);

            Main.projectile[newProj].ai[1]     = Main.rand.Next(4);
            Main.projectile[newProj].netUpdate = true;
            Main.PlaySound(2, (int)player.Center.X, (int)player.Center.Y, 8);
        }
예제 #3
0
        public override void OnHitNPCSecond(NPC target, int damage, float knockback, bool crit, Player player, OrchidModPlayer modPlayer,
                                            OrchidModAlchemistNPC modTarget, OrchidModGlobalNPC modTargetGlobal, AlchemistProj alchProj, Projectile projectile, OrchidModGlobalItem globalItem)
        {
            if (!(target.boss || target.type == NPCID.TargetDummy) && target.knockBackResist > 0f)
            {
                target.AddBuff(mod.BuffType("SlimeSlow"), 90 * (alchProj.nbElements * 2));
            }

            int rand = alchProj.nbElements;

            rand += alchProj.hasCloud() ? 2 : 0;
            if (Main.rand.Next(10) < rand && !alchProj.noCatalyticSpawn)
            {
                int     dmg            = getSecondaryDamage(player, modPlayer, alchProj.nbElements);
                int     proj           = ProjectileType <Alchemist.Projectiles.Reactive.SlimeBubbleLava>();
                Vector2 perturbedSpeed = new Vector2(0f, -5f).RotatedByRandom(MathHelper.ToRadians(20));
                Projectile.NewProjectile(projectile.Center.X, projectile.Center.Y, perturbedSpeed.X, perturbedSpeed.Y, proj, dmg, 0f, projectile.owner);
            }

            if (modTarget.alchemistFire > 0)
            {
                int nb   = Main.rand.Next(3) + 3;
                int dmg  = (int)(getSecondaryDamage(player, modPlayer, alchProj.nbElements) * 1.5);
                int proj = ProjectileType <Alchemist.Projectiles.Fire.HellSlimeFlaskProj>();
                for (int i = 0; i < nb; i++)
                {
                    Vector2 perturbedSpeed = projectile.velocity.RotatedByRandom(MathHelper.ToRadians(15)) * 0.75f;
                    Projectile.NewProjectile(projectile.Center.X, projectile.Center.Y, perturbedSpeed.X, perturbedSpeed.Y, proj, dmg, 1f, projectile.owner);
                }
            }
        }
예제 #4
0
 public override void OnHitNPCSecond(NPC target, int damage, float knockback, bool crit, Player player, OrchidModPlayer modPlayer,
                                     OrchidModAlchemistNPC modTarget, OrchidModGlobalNPC modTargetGlobal, AlchemistProj alchProj, Projectile projectile, OrchidModGlobalItem globalItem)
 {
     if (alchProj.fireFlask.type != 0)
     {
         modTarget.alchemistWater = 60 * 10;
     }
 }
예제 #5
0
        public override void OnHitNPC(NPC target, int damage, float knockback, bool crit)
        {
            Player             player    = Main.player[projectile.owner];
            OrchidModPlayer    modPlayer = player.GetModPlayer <OrchidModPlayer>();
            OrchidModGlobalNPC modTarget = target.GetGlobalNPC <OrchidModGlobalNPC>();

            modTarget.alchemistHit = true;
            SafeOnHitNPC(target, damage, knockback, crit, player, modPlayer);
        }
예제 #6
0
        public override bool?CanHitNPC(NPC target)
        {
            if (target.friendly || target.dontTakeDamage)
            {
                return(false);
            }
            OrchidModGlobalNPC modTarget = target.GetGlobalNPC <OrchidModGlobalNPC>();

            return(modTarget.shamanSpearDamage <= 0);
        }
        public override void OnHitNPC(NPC target, int damage, float knockback, bool crit)
        {
            Player             player    = Main.player[projectile.owner];
            OrchidModPlayer    modPlayer = player.GetModPlayer <OrchidModPlayer>();
            OrchidModGlobalNPC modTarget = target.GetGlobalNPC <OrchidModGlobalNPC>();

            if (target.type != NPCID.TargetDummy && this.gamblingChipChance > 0)
            {
                OrchidModGamblerHelper.addGamblerChip(this.gamblingChipChance, player, modPlayer);
            }
            modTarget.gamblerHit = true;
            SafeOnHitNPC(target, damage, knockback, crit, player, modPlayer);
        }
예제 #8
0
        public override void OnHitNPCSecond(NPC target, int damage, float knockback, bool crit, Player player, OrchidModPlayer modPlayer,
                                            OrchidModAlchemistNPC modTarget, OrchidModGlobalNPC modTargetGlobal, AlchemistProj alchProj, Projectile projectile, OrchidModGlobalItem globalItem)
        {
            int rand = alchProj.nbElements;

            if (Main.rand.Next(10) < rand)
            {
                int     dmg            = OrchidModAlchemistHelper.getSecondaryDamage(player, modPlayer, alchProj.nbElements);
                int     proj           = ProjectileType <Alchemist.Projectiles.Reactive.AlchemistHive>();
                Vector2 perturbedSpeed = new Vector2(0f, -5f).RotatedByRandom(MathHelper.ToRadians(20));
                Projectile.NewProjectile(projectile.Center.X, projectile.Center.Y, perturbedSpeed.X, perturbedSpeed.Y, proj, dmg, 0f, projectile.owner);
            }
        }
예제 #9
0
        public override void OnHitNPCSecond(NPC target, int damage, float knockback, bool crit, Player player, OrchidModPlayer modPlayer,
                                            OrchidModAlchemistNPC modTarget, OrchidModGlobalNPC modTargetGlobal, AlchemistProj alchProj, Projectile projectile, OrchidModGlobalItem globalItem)
        {
            target.AddBuff(BuffID.Poisoned, 60 * 5);
            int rand = alchProj.nbElements;

            rand += alchProj.hasCloud() ? 2 : 0;
            if (Main.rand.Next(10) < rand && !alchProj.noCatalyticSpawn)
            {
                int     dmg            = getSecondaryDamage(player, modPlayer, alchProj.nbElements);
                int     proj           = ProjectileType <Alchemist.Projectiles.Reactive.PoisonBubble>();
                Vector2 perturbedSpeed = new Vector2(0f, -5f).RotatedByRandom(MathHelper.ToRadians(20));
                Projectile.NewProjectile(projectile.Center.X, projectile.Center.Y, perturbedSpeed.X, perturbedSpeed.Y, proj, dmg, 0f, projectile.owner);
            }
        }
예제 #10
0
        public override void SafeOnHitNPC(NPC target, OrchidModAlchemistNPC modTarget, int damage, float knockback, bool crit, Player player, OrchidModPlayer modPlayer)
        {
            if (this.projOwner)
            {
                if (modPlayer.alchemistCovent && this.nbElements > 2 && this.airFlaskGlobal == null)                   // Keystone of the Convent
                {
                    float distance       = 500f;
                    bool  keystoneCrit   = (Main.rand.Next(101) <= modPlayer.alchemistCrit + 4);
                    int   keystoneDamage = (int)(22 * (modPlayer.alchemistDamage + player.allDamage - 1f));
                    int   absorbedCount  = 0;
                    int   spawnProj      = ProjectileType <Alchemist.Projectiles.Air.KeystoneOfTheConventProj>();
                    for (int k = 0; k < Main.maxNPCs; k++)
                    {
                        if (Main.npc[k].active)
                        {
                            Vector2 newMove    = Main.npc[k].Center - target.Center;
                            float   distanceTo = (float)Math.Sqrt(newMove.X * newMove.X + newMove.Y * newMove.Y);
                            if (distanceTo < distance)
                            {
                                OrchidModAlchemistNPC modTargetSecondary = Main.npc[k].GetGlobalNPC <OrchidModAlchemistNPC>();
                                if (modTargetSecondary.alchemistAir > 0)
                                {
                                    modTargetSecondary.alchemistAir = 0;
                                    absorbedCount++;
                                    newMove /= -10f;
                                    Projectile.NewProjectile(Main.npc[k].Center.X, Main.npc[k].Center.Y, newMove.X, newMove.Y, spawnProj, 0, 0f, projectile.owner);
                                }
                            }
                        }
                    }
                    player.ApplyDamageToNPC(target, Main.DamageVar(keystoneDamage * absorbedCount), 0f, player.direction, keystoneCrit);
                }

                this.hitNPC = true;
                OrchidModGlobalNPC modTargetGlobal = target.GetGlobalNPC <OrchidModGlobalNPC>();

                this.OnHitNPCFirst(target, damage, knockback, crit, player, modPlayer, modTarget, modTargetGlobal);
                this.OnHitNPCSecond(target, damage, knockback, crit, player, modPlayer, modTarget, modTargetGlobal);
                this.OnHitNPCThird(target, damage, knockback, crit, player, modPlayer, modTarget, modTargetGlobal);
            }
        }
예제 #11
0
        public override void OnHitNPCSecond(NPC target, int damage, float knockback, bool crit, Player player, OrchidModPlayer modPlayer,
                                            OrchidModAlchemistNPC modTarget, OrchidModGlobalNPC modTargetGlobal, AlchemistProj alchProj, Projectile projectile, OrchidModGlobalItem globalItem)
        {
            if (alchProj.fireFlask.type != 0)
            {
                int dmg = getSecondaryDamage(player, modPlayer, alchProj.nbElements);
                modTarget.spreadOilFire(target.Center, dmg, Main.player[projectile.owner]);
                Main.PlaySound(2, (int)target.position.X, (int)target.position.Y, 45);
            }

            int rand = alchProj.nbElements;

            rand += alchProj.hasCloud() ? 2 : 0;
            if (Main.rand.Next(6) < rand && !alchProj.noCatalyticSpawn)
            {
                int     dmg            = 0;
                int     proj           = ProjectileType <Alchemist.Projectiles.Reactive.OilBubble>();
                Vector2 perturbedSpeed = new Vector2(0f, -5f).RotatedByRandom(MathHelper.ToRadians(20));
                Projectile.NewProjectile(projectile.Center.X, projectile.Center.Y, perturbedSpeed.X, perturbedSpeed.Y, proj, dmg, 0f, projectile.owner);
            }
        }
예제 #12
0
        public override void OnHitNPCSecond(NPC target, int damage, float knockback, bool crit, Player player, OrchidModPlayer modPlayer,
                                            OrchidModAlchemistNPC modTarget, OrchidModGlobalNPC modTargetGlobal, AlchemistProj alchProj, Projectile projectile, OrchidModGlobalItem globalItem)
        {
            if (!(target.boss || target.type == NPCID.TargetDummy) && target.knockBackResist > 0f)
            {
                target.AddBuff(mod.BuffType("SlimeSlow"), 90 * (alchProj.nbElements * 2));
            }

            int rand = alchProj.nbElements;

            rand += alchProj.hasCloud() ? 2 : 0;
            rand += player.HasBuff(BuffType <Alchemist.Buffs.KingSlimeFlaskBuff>()) ? 2 : 0;
            if (Main.rand.Next(10) < rand && !alchProj.noCatalyticSpawn)
            {
                int dmg = getSecondaryDamage(player, modPlayer, alchProj.nbElements);
                dmg += player.HasBuff(BuffType <Alchemist.Buffs.KingSlimeFlaskBuff>()) ? 5 : 0;
                int     proj           = ProjectileType <Alchemist.Projectiles.Reactive.SlimeBubble>();
                Vector2 perturbedSpeed = new Vector2(0f, -5f).RotatedByRandom(MathHelper.ToRadians(20));
                Projectile.NewProjectile(projectile.Center.X, projectile.Center.Y, perturbedSpeed.X, perturbedSpeed.Y, proj, dmg, 0f, projectile.owner);
            }
        }
예제 #13
0
 public override void OnHitNPCSecond(NPC target, int damage, float knockback, bool crit, Player player, OrchidModPlayer modPlayer,
                                     OrchidModAlchemistNPC modTarget, OrchidModGlobalNPC modTargetGlobal, AlchemistProj alchProj, Projectile projectile, OrchidModGlobalItem globalItem)
 {
     target.AddBuff(BuffType <Alchemist.Buffs.Debuffs.Attraction>(), 60 * (alchProj.nbElements * 3));
 }
예제 #14
0
        public void OnHitNPCThird(NPC target, int damage, float knockback, bool crit, Player player, OrchidModPlayer modPlayer, OrchidModAlchemistNPC modTarget, OrchidModGlobalNPC modTargetGlobal)
        {
            if (this.fireFlaskGlobal != null)
            {
                fireFlaskGlobal.onHitNPCThirdDelegate(target, damage, knockback, crit, player, modPlayer, modTarget, modTargetGlobal, this, projectile, this.fireFlaskGlobal);
            }

            if (this.waterFlaskGlobal != null)
            {
                waterFlaskGlobal.onHitNPCThirdDelegate(target, damage, knockback, crit, player, modPlayer, modTarget, modTargetGlobal, this, projectile, this.waterFlaskGlobal);
            }

            if (this.natureFlaskGlobal != null)
            {
                natureFlaskGlobal.onHitNPCThirdDelegate(target, damage, knockback, crit, player, modPlayer, modTarget, modTargetGlobal, this, projectile, this.natureFlaskGlobal);
            }

            if (this.airFlaskGlobal != null)
            {
                airFlaskGlobal.onHitNPCThirdDelegate(target, damage, knockback, crit, player, modPlayer, modTarget, modTargetGlobal, this, projectile, this.airFlaskGlobal);
            }

            if (this.lightFlaskGlobal != null)
            {
                lightFlaskGlobal.onHitNPCThirdDelegate(target, damage, knockback, crit, player, modPlayer, modTarget, modTargetGlobal, this, projectile, this.lightFlaskGlobal);
            }

            if (this.darkFlaskGlobal != null)
            {
                darkFlaskGlobal.onHitNPCThirdDelegate(target, damage, knockback, crit, player, modPlayer, modTarget, modTargetGlobal, this, projectile, this.darkFlaskGlobal);
            }
        }
예제 #15
0
 public override void OnHitNPCFirst(NPC target, int damage, float knockback, bool crit, Player player, OrchidModPlayer modPlayer,
                                    OrchidModAlchemistNPC modTarget, OrchidModGlobalNPC modTargetGlobal, AlchemistProj alchProj, Projectile projectile, OrchidModGlobalItem globalItem)
 {
     modTarget.alchemistNature = 60 * 10;
 }
예제 #16
0
 public virtual void OnHitNPCThird(NPC target, int damage, float knockback, bool crit, Player player, OrchidModPlayer modPlayer, OrchidModAlchemistNPC modTarget, OrchidModGlobalNPC modTargetGlobal, AlchemistProj alchProj, Projectile projectile, OrchidModGlobalItem globalItem)
 {
 }
예제 #17
0
        public override void SafeOnHitNPC(NPC target, int damage, float knockback, bool crit, Player player, OrchidModPlayer modPlayer)
        {
            OrchidModGlobalNPC modTarget = target.GetGlobalNPC <OrchidModGlobalNPC>();

            modTarget.shamanSpearDamage = 60;
        }
예제 #18
0
 public override void OnHitNPCSecond(NPC target, int damage, float knockback, bool crit, Player player, OrchidModPlayer modPlayer,
                                     OrchidModAlchemistNPC modTarget, OrchidModGlobalNPC modTargetGlobal, AlchemistProj alchProj, Projectile projectile, OrchidModGlobalItem globalItem)
 {
     target.AddBuff(BuffID.OnFire, (60 * 3) + (60 * (alchProj.nbElements)));
 }