Beispiel #1
0
        public override void AI()
        {
            if (projectile.ai[0] < 1)
            {
                int dir = 1;
                if (Main.myPlayer == projectile.owner)
                {
                    NPC target = Main.npc[Idglib.FindClosestTarget(0, Main.MouseWorld, new Vector2(0f, 0f), true, true, true, projectile)];
                    if (target != null && Vector2.Distance(target.Center, projectile.Center) < 2000)
                    {
                        Vector2 projvel = projectile.velocity;
                        projectile.velocity = target.Center - projectile.Center;
                        projectile.velocity.Normalize(); projectile.velocity *= 8f;
                        IdgProjectile.Sync(projectile.whoAmI);
                        projectile.netUpdate = true;
                    }
                }
                dir = Math.Sign(projectile.velocity.X);
                Main.player[projectile.owner].ChangeDir(dir);
                Main.player[projectile.owner].itemRotation = (float)Math.Atan2(projectile.velocity.Y * dir, projectile.velocity.X * dir);
                //Main.player[projectile.owner].itemRotation = projectile.velocity.ToRotation() * Main.player[projectile.owner].direction;
            }
            projectile.ai[0] += 1;

            Vector2 randomcircle = new Vector2(Main.rand.Next(-8000, 8000), Main.rand.Next(-8000, 8000)); randomcircle.Normalize(); Vector2 ogcircle = randomcircle; randomcircle *= 0.1f;
            int     num655 = Dust.NewDust(projectile.position, projectile.width, projectile.height, 206, projectile.velocity.X + randomcircle.X * 8f, projectile.velocity.Y + randomcircle.Y * 8f, 100, new Color(30, 30, 30, 20), 1f);

            Main.dust[num655].noGravity = true;
            Main.dust[num655].velocity *= 0.5f;
        }
Beispiel #2
0
        public override void OnThrow(int type, Player player, ref Vector2 position, ref float speedX, ref float speedY, ref int type2, ref int damage, ref float knockBack, JavelinProj madeproj)
        {
            if (type == 1)
            {
                Vector2 normalizedspeed = new Vector2(speedX, speedY);
                normalizedspeed.Normalize();
                normalizedspeed   *= (Throwspeed * player.thrownVelocity);
                normalizedspeed.Y -= Math.Abs(normalizedspeed.Y * 0.1f);
                if (player.altFunctionUse == 2)
                {
                    for (int i = -15; i < 16; i += 30)
                    {
                        Vector2 perturbedSpeed = ((new Vector2(normalizedspeed.X, normalizedspeed.Y)).RotatedBy(MathHelper.ToRadians(i))).RotatedByRandom(MathHelper.ToRadians(10)) * 0.85f;
                        float   scale          = 1f - (Main.rand.NextFloat() * .01f);
                        perturbedSpeed = perturbedSpeed * scale;
                        type2          = mod.ProjectileType("JavelinProj");

                        int thisoneddddd = Projectile.NewProjectile(position.X, position.Y, perturbedSpeed.X, perturbedSpeed.Y, type2, damage, knockBack, Main.myPlayer);
                        Main.projectile[thisoneddddd].ai[1]  = Speartype;
                        Main.projectile[thisoneddddd].melee  = false;
                        Main.projectile[thisoneddddd].thrown = true;

                        (Main.projectile[thisoneddddd].modProjectile as JavelinProj).maxstick = madeproj.maxstick;
                        Main.projectile[thisoneddddd].penetrate = madeproj.projectile.penetrate;
                        Main.projectile[thisoneddddd].netUpdate = true;
                        IdgProjectile.Sync(thisoneddddd);
                    }
                }
            }
        }
        public override bool PreKill(int timeLeft)
        {
            projectile.type = ProjectileID.RocketI;
            Main.PlaySound(2, (int)projectile.position.X, (int)projectile.position.Y, 10);
            Vector2 positiondust = Vector2.Normalize(new Vector2(projectile.velocity.X, projectile.velocity.Y)) * 8f;

            for (int num315 = 0; num315 < 40; num315 = num315 + 1)
            {
                int num316 = Dust.NewDust(new Vector2(projectile.position.X - 1, projectile.position.Y) + positiondust, projectile.width, projectile.height, 31, projectile.velocity.X + (float)(Main.rand.Next(-250, 250) / 15f), projectile.velocity.Y + (float)(Main.rand.Next(-250, 250) / 15f), 50, Main.hslToRgb(0.15f, 1f, 1.00f), 2.5f);
                Main.dust[num316].noGravity = true;
                Dust dust3 = Main.dust[num316];
                dust3.velocity *= 0.7f;
            }
            int [] types = { ProjectileID.CopperCoin, ProjectileID.SilverCoin, mod.ProjectileType("FallingGoldCoin"), ProjectileID.PlatinumCoin };
            for (int num315 = 1; num315 < 13; num315 = num315 + 1)
            {
                Vector2 randomcircle = new Vector2(Main.rand.Next(-8000, 8000), Main.rand.Next(-8000, 8000)); randomcircle.Normalize();
                float   velincrease  = ((float)(num315 + 8) / 2f);
                int     thisone      = Projectile.NewProjectile(projectile.Center.X - projectile.velocity.X, projectile.Center.Y - projectile.velocity.Y, randomcircle.X * velincrease, randomcircle.Y * velincrease, types[2], (int)(projectile.damage * 0.25), projectile.knockBack, projectile.owner, 0.0f, 0f);
                Main.projectile[thisone].ranged   = true;
                Main.projectile[thisone].friendly = projectile.friendly;
                Main.projectile[thisone].hostile  = projectile.hostile;
                IdgProjectile.AddOnHitBuff(thisone, BuffID.Midas, 60 * 10);
                Main.projectile[thisone].netUpdate = true;
                IdgProjectile.Sync(thisone);
            }

            int theproj = Projectile.NewProjectile(projectile.Center.X, projectile.Center.Y, 0, 0, mod.ProjectileType("Explosion"), (int)((double)projectile.damage * 0.75f), projectile.knockBack, projectile.owner, 0f, 0f);

            Main.projectile[theproj].ranged = true;
            IdgProjectile.AddOnHitBuff(theproj, BuffID.Midas, 60 * 10);

            return(true);
        }
Beispiel #4
0
        public override bool Shoot(Player player, ref Vector2 position, ref float speedX, ref float speedY, ref int type, ref int damage, ref float knockBack)
        {
            SGAPlayer sgaplay = player.GetModPlayer <SGAPlayer>();

            if (player.altFunctionUse == 2)
            {
                sgaplay.DefenseFrame += 1;
                sgaplay.DefenseFrame  = sgaplay.DefenseFrame % 5;
                player.itemTime      /= 4;
                player.itemAnimation /= 4;
            }
            else
            {
                DoTurn(player);
                int fireangle = sgaplay.DefenseFrame;
                if (player.direction < 0)
                {
                    fireangle = 8 - fireangle;
                }
                int playerdic = player.direction;
                //Main.PlaySound(SoundID.Item11, player.position);
                int ittaz = NonStationaryDefenseHolding.ShootFromCannon((int)player.Center.X + (playerdic * 24), (int)player.Center.Y, fireangle, cannontypeitem, cannontypeproj, damage, knockBack, player.whoAmI);
                if (ittaz > -1)
                {
                    Main.projectile[ittaz].trap      = true;
                    Main.projectile[ittaz].ranged    = false;
                    Main.projectile[ittaz].netUpdate = true;
                    IdgProjectile.Sync(ittaz);
                }
            }

            return(false);
        }
        public override void Explode()
        {
            if (projectile.timeLeft == openclosetime && projectile.ai[0] > 0)
            {
                Player owner = Main.player[projectile.owner];
                if (owner != null && !owner.dead)
                {
                    NPC target = Main.npc[Idglib.FindClosestTarget(0, projectile.Center, new Vector2(0f, 0f), true, true, true, projectile)];
                    if (target != null && Vector2.Distance(target.Center, projectile.Center) < 1500)
                    {
                        Main.PlaySound(SoundID.Item, (int)projectile.Center.X, (int)projectile.Center.Y, 67, 0.25f, 0.5f);

                        Vector2 gotohere = new Vector2();
                        gotohere = target.Center - projectile.Center;                        //Main.MouseScreen - projectile.Center;
                        gotohere.Normalize();

                        Vector2 perturbedSpeed = new Vector2(gotohere.X, gotohere.Y).RotatedByRandom(MathHelper.ToRadians(10)) * projectile.velocity.Length();
                        int     proj           = Projectile.NewProjectile(new Vector2(projectile.Center.X, projectile.Center.Y), new Vector2(perturbedSpeed.X, perturbedSpeed.Y), ProjectileID.BulletHighVelocity, projectile.damage, projectile.knockBack / 8f, owner.whoAmI);
                        Main.projectile[proj].timeLeft = 180;
                        //Main.projectile[proj].penetrate = 1;
                        Main.projectile[proj].GetGlobalProjectile <SGAprojectile>().onehit = true;;
                        Main.projectile[proj].netUpdate = true;
                        IdgProjectile.Sync(proj);
                    }
                }
            }
        }
Beispiel #6
0
        public override void AI()
        {
            if (projectile.localAI[1] == 0)
            {
                HalfVector2 half = new HalfVector2(projectile.Center.X, projectile.Center.Y);
                projectile.localAI[0] = ReLogic.Utilities.ReinterpretCast.UIntAsFloat(half.PackedValue);
                projectile.localAI[1] = 1;
            }
            projectile.scale += 0.2f;

            projectile.ai[0] += 1;

            Vector2 basepoint = (new HalfVector2()
            {
                PackedValue = ReLogic.Utilities.ReinterpretCast.FloatAsUInt(projectile.localAI[0])
            }.ToVector2()) + new Vector2(0, 8);


            Lighting.AddLight(basepoint, 2f * (Color.Yellow.ToVector3() * ((float)projectile.timeLeft / 24f)));
            Lighting.AddLight(projectile.Center, Color.Yellow.ToVector3());

            if (projectile.ai[0] < 4)
            {
                int thisoned = Projectile.NewProjectile(new Vector2(projectile.Center.X, basepoint.Y), new Vector2(Main.rand.NextFloat(-5f, 5f), Main.rand.NextFloat(-8f, -3f) - (projectile.ai[0] / 0.75f)), ModContent.ProjectileType <SurtRocks>(), projectile.damage * 6, projectile.knockBack * 2f, Main.player[projectile.owner].whoAmI);
                IdgProjectile.Sync(thisoned);
            }
        }
Beispiel #7
0
        public override void AI()
        {
            Player player = Main.player[projectile.owner];

            player.GetModPlayer <SGAPlayer>().greandethrowcooldown = 120;
            ThrowerGlove thrown;
            int          basetype = ThrowerGlove.FindGrenadeToThrow(mod, player, level);
            //if (player.CountItem(mod.ItemType("AcidGrenade"))>0)
            //basetype = mod.ItemType("AcidGrenade");

            Vector2 basespeed = (projectile.velocity / 2f);
            float   speedbase = basespeed.Length() * player.thrownVelocity;

            basespeed.Normalize();

            Item basetype2 = new Item();

            basetype2.SetDefaults(ThrowerGlove.FindItem(basetype));
            player.itemTime = basetype2.useTime;
            int type = ThrowerGlove.FindProjectile(basetype2.shoot, basetype);

            basespeed *= (basetype2.shootSpeed + speedbase);
            int damage = (int)(basetype2.damage * player.thrownDamage);

            int proj = Projectile.NewProjectile(projectile.Center.X, projectile.Center.Y, basespeed.X, basespeed.Y, type, damage, basetype2.knockBack, player.whoAmI);

            Main.projectile[proj].friendly  = true;
            Main.projectile[proj].hostile   = false;
            Main.projectile[proj].netUpdate = true;
            IdgProjectile.Sync(proj);

            player.ConsumeItem(basetype);

            projectile.Kill();
        }
        public override bool Shoot(Player player, ref Vector2 position, ref float speedX, ref float speedY, ref int type, ref int damage, ref float knockBack)
        {
            int     numberProjectiles = 1;
            Vector2 offset            = new Vector2(speedX, speedY);

            offset.Normalize();
            offset   *= 16f;
            position += offset;


            for (int i = 0; i < numberProjectiles; i++)
            {
                Vector2 perturbedSpeed = new Vector2(speedX, speedY).RotatedByRandom(MathHelper.ToRadians(4));
                float   scale          = 1f - (Main.rand.NextFloat() * .2f);
                perturbedSpeed = perturbedSpeed * scale;
                int prog = Projectile.NewProjectile(position.X + offset.X, position.Y + offset.Y, perturbedSpeed.X, perturbedSpeed.Y, type, damage, knockBack, player.whoAmI);
                IdgProjectile.Sync(prog);
            }
            return(false);

            /*Vector2 muzzleOffset = Vector2.Normalize(new Vector2(speedX, speedY)) * 25f;
             * if (Collision.CanHit(position, 0, 0, position + muzzleOffset, 0, 0))
             * {
             *      position += muzzleOffset;
             * }
             * return true;*/
        }
Beispiel #9
0
        public override void AI()
        {
            //int rayloc = Idglib.RaycastDown((int)(projectile.Center.X + 4) / 16, (int)(projectile.Center.Y - 36f) / 16) * 16;
            //if ((rayloc - 16) - (projectile.position.Y) > 70 || (rayloc - 16) - (projectile.position.Y) < -30)
            //projectile.Kill();
            //projectile.position.X += projectile.velocity.X*1;
            //projectile.position.Y += -16;

            projectile.ai[0] += 1;

            if (projectile.ai[0] % 4 == 0 && GetType() == typeof(SurtWave3))
            {
                Vector2 where = new Vector2(Main.rand.Next(-60, 60), Main.rand.Next(-180, 180));
                int proj2 = Projectile.NewProjectile(new Vector2(projectile.Center.X, projectile.Center.Y - 128) + where, new Vector2(0, -8), mod.ProjectileType("BoulderBlast"), (int)((float)projectile.damage * 0.6f), projectile.knockBack / 3f, projectile.owner);
                Main.projectile[proj2].melee = true;
                Main.projectile[proj2].magic = false;
                Main.projectile[proj2].usesLocalNPCImmunity = true;
                Main.projectile[proj2].localNPCHitCooldown  = -1;
                Main.projectile[proj2].netUpdate            = true;
                IdgProjectile.Sync(proj2);
            }

            if (projectile.ai[0] % 24 == 0)
            {
                int thisoned = Projectile.NewProjectile(new Vector2(projectile.Center.X, projectile.Center.Y - 128), new Vector2(0, 1), ModContent.ProjectileType <SurtWave2>(), projectile.damage, projectile.knockBack * 1f, Main.player[projectile.owner].whoAmI);
                //Main.projectile[thisoned].timeLeft = 25;
                //Main.projectile[thisoned].melee = true;
            }
        }
Beispiel #10
0
        public override bool Shoot(Player player, ref Vector2 position, ref float speedX, ref float speedY, ref int type, ref int damage, ref float knockBack)
        {
            shootCount += 1;
            float speed             = 1.5f;
            float numberProjectiles = 1;
            float rotation          = MathHelper.ToRadians(4);

            position += Vector2.Normalize(new Vector2(speedX, speedY)) * 45f;

            for (int i = 0; i < numberProjectiles; i++)
            {
                int typeOfShot = mod.ProjectileType("FlamingStinger");
                if (false)
                {
                    typeOfShot = type;
                }

                Vector2 perturbedSpeed = (new Vector2(speedX, speedY) * speed).RotatedBy(MathHelper.Lerp(-rotation, rotation, (float)Main.rand.Next(0, 100) / 100f)) * .3f;            // Watch out for dividing by 0 if there is only 1 projectile.
                int     proj           = Projectile.NewProjectile(position.X, position.Y, perturbedSpeed.X, perturbedSpeed.Y, typeOfShot, damage, knockBack, player.whoAmI);
                Main.projectile[proj].friendly             = true;
                Main.projectile[proj].hostile              = false;
                Main.projectile[proj].knockBack            = item.knockBack;
                Main.projectile[proj].ai[0]                = (int)Main.rand.Next(0, 80);
                Main.projectile[proj].netUpdate            = true;
                Main.projectile[proj].localNPCHitCooldown  = 3;
                Main.projectile[proj].usesLocalNPCImmunity = true;

                IdgProjectile.AddOnHitBuff(proj, BuffID.OnFire, 60 * 6);
                IdgProjectile.AddOnHitBuff(proj, mod.BuffType("Gourged"), 60 * 6);
                IdgProjectile.Sync(proj);
            }
            return(false);
        }
        public override bool Shoot(Player player, ref Vector2 position, ref float speedX, ref float speedY, ref int type, ref int damage, ref float knockBack)
        {
            if (altfired)
            {
                float   speed             = 2.0f;
                float   numberProjectiles = 1;
                float   rotation          = MathHelper.ToRadians(8);
                Vector2 speedz            = new Vector2(speedX, speedY);
                speedz.Normalize(); speedz *= 30f; speedX = speedz.X; speedY = speedz.Y;

                position += Vector2.Normalize(speedz) * 45f;
                Main.PlaySound(SoundID.Item, player.Center, 45);
                for (int i = 0; i < numberProjectiles; i++)
                {
                    Vector2 perturbedSpeed = (speedz * speed).RotatedBy(MathHelper.Lerp(-rotation, rotation, (float)Main.rand.Next(0, 100) / 100f)) * .2f;                     // Watch out for dividing by 0 if there is only 1 projectile.
                    int     proj           = Projectile.NewProjectile(position.X, position.Y, perturbedSpeed.X, perturbedSpeed.Y, mod.ProjectileType("HeatWave"), (int)((float)damage * 0.20f), knockBack / 3f, player.whoAmI);
                    Main.projectile[proj].melee     = true;
                    Main.projectile[proj].magic     = false;
                    Main.projectile[proj].netUpdate = true;
                    IdgProjectile.Sync(proj);

                    //NetMessage.SendData(MessageID.SyncProjectile, -1, -1, null, proj);
                }
            }
            return(!altfired);
        }
        public override void OnHitNPC(NPC target, int damage, float knockback, bool crit)
        {
            for (float u = 0; u < MathHelper.TwoPi; u += MathHelper.Pi)
            {
                Vector2 oldPos = new Vector2(1f, 0);
                oldPos = oldPos.RotatedBy(u + (projectile.rotation + (0f)));
                oldPos.Normalize();
                oldPos *= 24f;

                Vector2 torot = oldPos;
                torot.Normalize();

                int thisoned = Projectile.NewProjectile(projectile.Center + oldPos, torot * 8f, ProjectileID.ScutlixLaser, (int)(projectile.damage / 3), knockback, Main.myPlayer);
                //Main.projectile[thisoned].usesLocalNPCImmunity = true;
                //Main.projectile[thisoned].localNPCHitCooldown = -1;
                Main.projectile[thisoned].penetrate = 2;
                Main.projectile[thisoned].knockBack = 0f;
                Main.projectile[thisoned].usesIDStaticNPCImmunity = true;
                Main.projectile[thisoned].idStaticNPCHitCooldown  = 30;
                Main.projectile[thisoned].netUpdate = true;
                IdgProjectile.Sync(thisoned);
            }

            Main.PlaySound(SoundID.Item91, projectile.Center);
        }
Beispiel #13
0
 public override bool OnTileCollide(Vector2 oldVelocity)
 {
     if (oldVelocity.Length() > 3)
     {
         for (int num315 = 1; num315 < 0.5f + (oldVelocity.Length() / 6); num315 = num315 + 1)
         {
             Vector2 randomcircle = new Vector2(Main.rand.Next(-8000, 8000), Main.rand.Next(-8000, 8000)); randomcircle.Normalize();
             float   velincrease  = ((float)(num315 + 8) / 2f);
             int     thisone      = Projectile.NewProjectile(projectile.Center.X - projectile.velocity.X, projectile.Center.Y - projectile.velocity.Y, randomcircle.X * velincrease, randomcircle.Y * velincrease, ProjectileID.StickyGrenade, (int)(projectile.damage * 2.50), 0f, projectile.owner, 0.0f, 0f);
             Main.projectile[thisone].melee     = true;
             Main.projectile[thisone].thrown    = false;
             Main.projectile[thisone].ranged    = false;
             Main.projectile[thisone].timeLeft  = 60 * 20;
             Main.projectile[thisone].netUpdate = true;
             IdgProjectile.Sync(thisone);
         }
     }
     if (oldVelocity.Length() > 16)
     {
         for (int num315 = 15; num315 < 16; num315 = num315 + 1)
         {
             Vector2 randomcircle = new Vector2(Main.rand.Next(-8000, 8000), Main.rand.Next(-8000, 8000)); randomcircle.Normalize();
             float   velincrease  = ((float)(num315 + 8) / 3f);
             int     thisone      = Projectile.NewProjectile(projectile.Center.X - projectile.velocity.X, projectile.Center.Y - projectile.velocity.Y, randomcircle.X * velincrease, randomcircle.Y * velincrease, ProjectileID.ProximityMineIII, (int)(projectile.damage * 5.00), 0f, projectile.owner, 0.0f, 0f);
             Main.projectile[thisone].melee     = true;
             Main.projectile[thisone].thrown    = false;
             Main.projectile[thisone].ranged    = false;
             Main.projectile[thisone].netUpdate = true;
             IdgProjectile.Sync(thisone);
         }
     }
     return(true);
 }
Beispiel #14
0
        public override bool Shoot(Player player, ref Vector2 position, ref float speedX, ref float speedY, ref int type, ref int damage, ref float knockBack)
        {
            projectiletype += 1;
            projectiletype  = projectiletype % 4;
            type            = mod.ProjectileType("ElementalCascadeShot");

            for (int i = 0; i < 4; i += 1)
            {
                Vector2 speez = new Vector2(speedX, speedY);
                speez = speez.RotatedBy(MathHelper.ToRadians(90 * i));
                Vector2 offset = speez;
                offset.Normalize();
                offset *= 48f;
                int probg = Projectile.NewProjectile(position.X + offset.X, position.Y + offset.Y, speez.X, speez.Y, type, damage, knockBack, player.whoAmI, ((i + projectiletype) % 4));
                Main.projectile[probg].friendly = true;
                Main.projectile[probg].hostile  = false;
                Vector2 perturbedSpeed = new Vector2(speez.X, speez.Y).RotatedByRandom(MathHelper.ToRadians(5));
                Main.projectile[probg].velocity.X = perturbedSpeed.X;
                Main.projectile[probg].velocity.Y = perturbedSpeed.Y;
                Main.projectile[probg].owner      = player.whoAmI;
                SGAprojectile modeproj = Main.projectile[probg].GetGlobalProjectile <SGAprojectile>();
                Main.projectile[probg].netUpdate = true;

                IdgProjectile.Sync(probg);
            }


            return(false);
        }
        public override bool Shoot(Player player, ref Vector2 position, ref float speedX, ref float speedY, ref int type, ref int damage, ref float knockBack)
        {
            item.noMelee  = false;
            item.useStyle = 1;

            float speed             = 1.5f;
            float numberProjectiles = 1;
            float rotation          = MathHelper.ToRadians(8);

            position += Vector2.Normalize(new Vector2(speedX, speedY)) * 45f;
            Main.PlaySound(SoundID.Item, player.Center, 45);
            for (int i = 0; i < numberProjectiles; i++)
            {
                Vector2 perturbedSpeed = (new Vector2(speedX, speedY) * speed).RotatedBy(MathHelper.Lerp(-rotation, rotation, (float)Main.rand.Next(0, 100) / 100f)) * .2f;                 // Watch out for dividing by 0 if there is only 1 projectile.
                int     proj           = Projectile.NewProjectile(position.X, position.Y, perturbedSpeed.X, perturbedSpeed.Y, mod.ProjectileType("HeatWave"), (int)((float)damage * 0.15f), knockBack / 3f, player.whoAmI);
                Main.projectile[proj].melee     = true;
                Main.projectile[proj].magic     = false;
                Main.projectile[proj].netUpdate = true;
                IdgProjectile.Sync(proj);

                //NetMessage.SendData(MessageID.SyncProjectile, -1, -1, null, proj);
            }
            //SGAPlayer.LimitProjectiles(player, 0, new ushort[] {(ushort)mod.ProjectileType("ProjectilePortalRealityShaper") });
            return(base.Shoot(player, ref position, ref speedX, ref speedY, ref type, ref damage, ref knockBack));
        }
Beispiel #16
0
        public static void JavelinOnHit(NPC target, Projectile projectile)
        {
            if (projectile.ai[1] == 1)
            {
                if (Main.rand.Next(0, 4) == 1)
                {
                    target.AddBuff(BuffID.Frostburn, 60 * (projectile.type == ModContent.ProjectileType <JavelinProj>() ? 2 : 3));
                }
            }
            if (projectile.ai[1] == 7)//Shadow
            {
                if (Main.rand.Next(0, 4) == 1)
                {
                    target.AddBuff(BuffID.ShadowFlame, 60 * (projectile.type == ModContent.ProjectileType <JavelinProj>() ? 3 : 5));
                }
            }
            if (projectile.ai[1] == 5)//Dynasty
            {
                if (projectile.penetrate > 1)
                {
                    int thisoned = Projectile.NewProjectile(projectile.Center.X + Main.rand.NextFloat(-64, 64), projectile.Center.Y - 800, Main.rand.NextFloat(-2, 2), 14f, projectile.type, projectile.damage, projectile.knockBack, Main.player[projectile.owner].whoAmI);
                    Main.projectile[thisoned].ai[1]     = projectile.ai[1];
                    Main.projectile[thisoned].thrown    = true;
                    Main.projectile[thisoned].penetrate = projectile.penetrate - 1;
                    Main.projectile[thisoned].netUpdate = true;
                }
            }

            if (projectile.ai[1] == 6)//Hallow
            {
                if (Main.rand.Next(0, projectile.modProjectile.GetType() == typeof(JavelinProjMelee) ? 3 : 0) == 0)
                {
                    int thisoned = Projectile.NewProjectile(projectile.Center.X + Main.rand.NextFloat(-64, 64), projectile.Center.Y - 800, Main.rand.NextFloat(-2, 2), 14f, ProjectileID.HallowStar, (int)(projectile.damage / 2f), projectile.knockBack, Main.player[projectile.owner].whoAmI);
                    Main.projectile[thisoned].ai[1]     = projectile.ai[1];
                    Main.projectile[thisoned].thrown    = true;
                    Main.projectile[thisoned].penetrate = 2;
                    Main.projectile[thisoned].netUpdate = true;
                    IdgProjectile.Sync(thisoned);
                    NetMessage.SendData(MessageID.SyncProjectile, -1, -1, null, thisoned);
                }
            }
            if (projectile.ai[1] == 8)
            {//Sanguine Bident
                if (projectile.modProjectile.GetType() == typeof(JavelinProj))
                {
                    if (target.active && target.life > 0 && Main.rand.Next(0, 16) < (target.HasBuff(SGAmod.Instance.BuffType("MassiveBleeding")) || target.HasBuff(BuffID.Bleeding) ? 8 : 1))
                    {
                        projectile.vampireHeal((int)(projectile.damage / 2f), projectile.Center);
                    }
                }
                else
                {
                    target.AddBuff(SGAmod.Instance.BuffType("MassiveBleeding"), 60 * 5);
                }
                projectile.netUpdate = true;
            }
        }
Beispiel #17
0
        public override void AI()
        {
            if (projectile.ai[0] == 0)
            {
                for (int i = 0; i < 4000; i += 1)
                {
                    if (!Collision.CanHitLine(new Vector2(projectile.Center.X, projectile.position.Y + projectile.height), 1, 1, new Vector2(projectile.Center.X, projectile.position.Y + projectile.height + 2), 1, 1))
                    {
                        break;
                    }
                    projectile.position.Y += 1;
                }
            }

            Player player = Main.player[base.projectile.owner];

            projectile.ai[0] += 1;
            if (projectile.ai[0] > 30)
            {
                if (projectile.ai[0] % 20 == 0)
                {
                    NPC target = Main.npc[Idglib.FindClosestTarget(0, projectile.Center - new Vector2(0f, 20f), new Vector2(0f, 0f), true, true, true, projectile)];
                    if (target != null && target.active && target.life > 0 && Vector2.Distance(target.Center, projectile.Center) < 300)
                    {
                        if (player.SGAPly().ConsumeElectricCharge(25, 60))
                        {
                            Vector2 there = projectile.Center - new Vector2(3f, 20f);
                            Vector2 Speed = (target.Center - there);
                            Speed.Normalize(); Speed *= 2f;
                            int prog = Projectile.NewProjectile(there.X, there.Y, Speed.X, Speed.Y, ModContent.ProjectileType <CBreakerBolt>(), projectile.damage, 1f, player.whoAmI, 0);
                            Main.projectile[prog].minion = true;
                            Main.projectile[prog].melee  = false;
                            Main.projectile[prog].usesLocalNPCImmunity = true;
                            Main.projectile[prog].localNPCHitCooldown  = -1;
                            IdgProjectile.Sync(prog);
                            Main.PlaySound(SoundID.Item93, player.Center);
                        }
                    }
                }

                for (int num315 = 0; num315 < 3; num315 = num315 + 1)
                {
                    if (Main.rand.Next(0, 15) == 0)
                    {
                        Vector2 randomcircle = new Vector2(Main.rand.Next(-8000, 8000), Main.rand.Next(-8000, 8000)); randomcircle.Normalize();
                        int     num622       = Dust.NewDust(new Vector2(projectile.Center.X, projectile.Center.Y) - new Vector2(3f, 20f) + randomcircle * 8, 0, 0, DustID.Electric, 0f, 0f, 100, default(Color), 0.75f);

                        Main.dust[num622].scale     = 1f;
                        Main.dust[num622].noGravity = true;
                        //Main.dust[num622].fadeIn = 1f + (float)Main.rand.Next(10) * 0.1f;
                        Main.dust[num622].velocity.X = randomcircle.RotatedBy(MathHelper.ToRadians(-90)).X;
                        Main.dust[num622].velocity.Y = randomcircle.RotatedBy(MathHelper.ToRadians(-90)).Y;
                        Main.dust[num622].alpha      = 150;
                    }
                }
            }
        }
        public override bool Shoot(Player player, ref Vector2 position, ref float speedX, ref float speedY, ref int type, ref int damage, ref float knockBack)
        {
            int basetype = ThrowerGlove.FindGrenadeToThrow(mod, player, level);
            //if (player.CountItem(mod.ItemType("AcidGrenade"))>0)
            //basetype = mod.ItemType("AcidGrenade");

            Vector2 basespeed = new Vector2(speedX, speedY);
            float   speedbase = basespeed.Length() * player.thrownVelocity;

            basespeed.Normalize();

            Item basetype2 = new Item();
            int  itemtype  = FindItem(basetype);

            basetype2.SetDefaults(itemtype);
            float baseumtli = (item.useTime / player.GetModPlayer <SGAPlayer>().ThrowingSpeed) / 60f;

            if (itemtype == ItemID.Beenade)
            {
                baseumtli = 1f;
            }
            player.itemAnimation    = (int)(basetype2.useAnimation * baseumtli);
            player.itemAnimationMax = (int)(basetype2.useAnimation * baseumtli);
            player.itemTime         = (int)(basetype2.useTime * baseumtli);
            type = FindProjectile(basetype2.shoot, basetype);

            if (itemtype == mod.ItemType("ThrowableTrapSpikyball"))
            {
                speedbase /= 1f;
            }

            basespeed *= (basetype2.shootSpeed + speedbase);
            speedX     = basespeed.X;
            speedY     = basespeed.Y;
            if (type != ProjectileID.Beenade)
            {
                damage += (int)((float)basetype2.damage * player.thrownDamage);
            }
            //else
            //damage = (int)(basetype2.damage * player.thrownDamage);

            player.ConsumeItem(basetype);

            Projectile proj = Main.projectile[Projectile.NewProjectile(position.X, position.Y, speedX, speedY, type, damage, knockBack, player.whoAmI)];

            proj.thrown    = true;
            proj.ranged    = false;
            proj.friendly  = true;
            proj.hostile   = false;
            proj.netUpdate = true;
            IdgProjectile.Sync(proj.whoAmI);

            return(false);
        }
 public void explode(Vector2 target, int damage, float knockback, bool crit)
 {
     for (int i = 0; i < 1; i++)
     {
         int proj = Projectile.NewProjectile(projectile.Center.X, projectile.Center.Y, Vector2.Zero.X, Vector2.Zero.Y, mod.ProjectileType("QuasarOrbLessParticles"), projectile.damage, projectile.knockBack, projectile.owner);
         Main.projectile[proj].timeLeft  = 2;
         Main.projectile[proj].netUpdate = true;
         IdgProjectile.Sync(proj);
         Main.projectile[proj].Kill();
     }
 }
        public override bool PreKill(int timeLeft)
        {
            Main.PlaySound(SoundID.Item45, projectile.Center);

            int proj = Projectile.NewProjectile(projectile.Center, new Vector2(projectile.velocity.X, projectile.velocity.Y / 3f), mod.ProjectileType("ProjectilePortalJones"), projectile.damage, projectile.knockBack, projectile.owner, ProjectileID.Boulder);

            Main.projectile[proj].penetrate = 2;
            Main.projectile[proj].netUpdate = true;
            IdgProjectile.Sync(proj);

            return(true);
        }
Beispiel #21
0
        public override void OnHitNPC(Player player, NPC target, int damage, float knockBack, bool crit)
        {
            Vector2 hereas = new Vector2(Main.rand.Next(-1000, 1000), Main.rand.Next(-1000, 1000)); hereas.Normalize();

            hereas *= Main.rand.NextFloat(100f, 200f);
            hereas += target.Center;
            Vector2 gohere = (target.Center - hereas); gohere.Normalize(); gohere *= 10f;
            int     proj   = Projectile.NewProjectile(hereas, gohere, mod.ProjectileType("ProjectilePortalBBHit"), damage, knockBack, player.whoAmI, ProjectileID.EnchantedBeam);

            Main.projectile[proj].penetrate = 2;
            Main.projectile[proj].netUpdate = true;
            IdgProjectile.Sync(proj);
        }
Beispiel #22
0
        public override bool Shoot(Player player, ref Vector2 position, ref float speedX, ref float speedY, ref int type, ref int damage, ref float knockBack)
        {
            int numberProjectiles = 3 + Main.rand.Next(2);

            for (int i = 0; i < numberProjectiles; i++)
            {
                Vector2 perturbedSpeed = new Vector2(speedX, speedY).RotatedByRandom(MathHelper.ToRadians(20));
                float   scale          = 1f - (Main.rand.NextFloat() * .3f);
                perturbedSpeed = perturbedSpeed * scale;
                int prog = Projectile.NewProjectile(position.X, position.Y, perturbedSpeed.X, perturbedSpeed.Y, type, damage, knockBack, player.whoAmI);
                IdgProjectile.Sync(prog);
            }
            return(false);
        }
        public override bool Shoot(Player player, ref Vector2 position, ref float speedX, ref float speedY, ref int type, ref int damage, ref float knockBack)
        {
            int numberProjectiles = 8;            // + Main.rand.Next(2);

            for (int i = 0; i < numberProjectiles; i++)
            {
                Vector2     perturbedSpeed = new Vector2(speedX, speedY).RotatedByRandom(MathHelper.ToRadians(360));
                HalfVector2 half           = new HalfVector2(player.Center.X + (i - (numberProjectiles / 2)) * 20, player.Center.Y - 200);
                int         prog           = Projectile.NewProjectile(position.X, position.Y, perturbedSpeed.X, perturbedSpeed.Y, type, damage, knockBack, player.whoAmI, ai1: ReLogic.Utilities.ReinterpretCast.UIntAsFloat(half.PackedValue));
                Main.projectile[prog].netUpdate = true;
                IdgProjectile.Sync(prog);
            }
            return(false);
        }
Beispiel #24
0
        public override bool PreKill(int timeLeft)
        {
            if (!hitonce)
            {
                projectile.width     = 128;
                projectile.height    = 128;
                projectile.position -= new Vector2(64, 64);
            }

            Vector2 gotohere = projectile.velocity;

            gotohere.Normalize();

            int[]   projectiletype   = { ProjectileID.NebulaBlaze1, ProjectileID.VortexBeaterRocket, ProjectileID.HeatRay, ProjectileID.DD2LightningBugZap };
            float[] projectiledamage = { 1f, 1f, 2.5f, 0.25f };
            int[]   projectilecount  = { 9, 9, 12, 7 };
            for (int zz = 0; zz < 4; zz += 1)
            {
                for (int i = 0; i < projectilecount[zz]; i += 1)
                {
                    Vector2 perturbedSpeed = new Vector2(gotohere.X, gotohere.Y).RotatedByRandom(MathHelper.ToRadians(120)) * Main.rand.NextFloat(6, 12);
                    int     proj           = Projectile.NewProjectile(new Vector2(projectile.Center.X, projectile.Center.Y), new Vector2(perturbedSpeed.X, perturbedSpeed.Y), projectiletype[zz], (int)((projectile.damage * 1f) * projectiledamage[zz]), projectile.knockBack / 10f, projectile.owner);
                    Main.projectile[proj].thrown   = true;
                    Main.projectile[proj].magic    = false;
                    Main.projectile[proj].ranged   = false;
                    Main.projectile[proj].friendly = true;
                    Main.projectile[proj].velocity = new Vector2(perturbedSpeed.X, perturbedSpeed.Y);
                    Main.projectile[proj].hostile  = false;
                    if (i != 2)
                    {
                        Main.projectile[proj].timeLeft  = 300;
                        Main.projectile[proj].penetrate = 4;
                    }
                    if (zz == 3)
                    {
                        Main.projectile[proj].penetrate = 15;
                    }
                    projectile.netUpdate = true;
                    IdgProjectile.Sync(proj);
                }
            }

            int theproj = Projectile.NewProjectile(projectile.Center.X, projectile.Center.Y, 0, 0, mod.ProjectileType("SlimeBlast"), (int)((double)projectile.damage * 1.5f), projectile.knockBack, projectile.owner, 0f, 0f);

            Main.projectile[theproj].thrown = true;

            projectile.velocity = default(Vector2);
            projectile.type     = ProjectileID.Grenade;
            return(true);
        }
        public override void OnHitNPC(Player player, NPC target, int damage, float knockBack, bool crit)
        {
            Vector2 hereas = new Vector2(Main.rand.Next(-1000, 1000), Main.rand.Next(-1000, 1000)); hereas.Normalize();

            hereas *= Main.rand.NextFloat(50f, 100f);
            hereas += target.Center;
            hereas -= new Vector2(0, 800);
            Vector2 gohere = ((hereas + new Vector2(Main.rand.NextFloat(-100f, 100f), 800f)) - hereas); gohere.Normalize(); gohere *= 15f;
            int     proj   = Projectile.NewProjectile(hereas, gohere, ProjectileID.RubyBolt, (int)(damage * 1), knockBack, player.whoAmI);

            Main.projectile[proj].melee    = true;
            Main.projectile[proj].magic    = false;
            Main.projectile[proj].timeLeft = 300;
            IdgProjectile.Sync(proj);
        }
Beispiel #26
0
 public override bool Shoot(Player player, ref Vector2 position, ref float speedX, ref float speedY, ref int type, ref int damage, ref float knockBack)
 {
     for (int a = -100; a < 101; a += 10)
     {
         for (int i = -100; i < 101; i += 10)
         {
             int probg = Projectile.NewProjectile(player.Center.X + a * 10f, player.Center.Y + i * 10f, 0, 0, type, damage, knockBack, player.whoAmI);
             Main.projectile[probg].friendly  = true;
             Main.projectile[probg].hostile   = false;
             Main.projectile[probg].netUpdate = true;
             IdgProjectile.Sync(probg);
         }
     }
     return(false);
 }
 public override void OnHitNPC(Player player, NPC target, int damage, float knockBack, bool crit)
 {
     for (int i = 0; i < 360; i += 36)
     {
         float   angle  = MathHelper.ToRadians(i);
         Vector2 hereas = new Vector2((float)Math.Cos(angle), (float)Math.Sin(angle)) * 256;
         hereas += target.Center;
         Vector2 gohere = (target.Center - hereas); gohere.Normalize(); gohere *= 16f;
         int     proj   = Projectile.NewProjectile(hereas, gohere, mod.ProjectileType("ProjectilePortalRealityShaperFracturePortal"), (int)(damage * 0.2f), knockBack, player.whoAmI, ProjectileID.SkyFracture);
         Main.projectile[proj].magic     = false;
         Main.projectile[proj].melee     = true;
         Main.projectile[proj].timeLeft  = 40;
         Main.projectile[proj].netUpdate = true;
         IdgProjectile.Sync(proj);
     }
 }
Beispiel #28
0
 public override bool OnTileCollide(Vector2 oldVelocity)
 {
     if (oldVelocity.Length() > 12)
     {
         for (int num315 = 1; num315 < 13; num315 = num315 + 1)
         {
             Vector2 randomcircle = new Vector2(Main.rand.Next(-8000, 8000), Main.rand.Next(-8000, 8000)); randomcircle.Normalize();
             float   velincrease  = ((float)(num315 + 8) / 2f);
             int     thisone      = Projectile.NewProjectile(projectile.Center.X - projectile.velocity.X, projectile.Center.Y - projectile.velocity.Y, randomcircle.X * velincrease, randomcircle.Y * velincrease, ModContent.ProjectileType <DankBlast>(), (int)(projectile.damage * 0.50), 0f, projectile.owner, 0.0f, 0f);
             Main.projectile[thisone].friendly  = projectile.friendly;
             Main.projectile[thisone].hostile   = projectile.hostile;
             Main.projectile[thisone].netUpdate = true;
             IdgProjectile.Sync(thisone);
         }
     }
     return(true);
 }
        public override bool Shoot(Player player, ref Vector2 position, ref float speedX, ref float speedY, ref int type, ref int damage, ref float knockBack)
        {
            int probg = Projectile.NewProjectile(position.X + (int)(speedX * 0f), position.Y + (int)(speedY * 0f), speedX, speedY, type, damage, knockBack, player.whoAmI, ai0: Main.rand.Next(600));

            Main.projectile[probg].ranged   = false;
            Main.projectile[probg].magic    = true;
            Main.projectile[probg].melee    = false;
            Main.projectile[probg].friendly = true;
            Main.projectile[probg].hostile  = false;
            Vector2 perturbedSpeed = new Vector2(speedX, speedY).RotatedByRandom(MathHelper.ToRadians(0));

            Main.projectile[probg].velocity.X = perturbedSpeed.X;
            Main.projectile[probg].velocity.Y = perturbedSpeed.Y;
            //IdgProjectile.AddOnHitBuff(probg, BuffID.CursedInferno, 60 * 20);
            IdgProjectile.Sync(probg);
            return(false);
        }
        public override void AI()
        {
            if (projectile.ai[0] < 1)
            {
                int dir = 1;
                if (Main.myPlayer == projectile.owner)
                {
                    List <NPC> targets = SGAUtils.ClosestEnemies(Main.player[projectile.owner].Center, 2000, Main.MouseWorld);

                    if (targets != null && targets.Count > 0)
                    {
                        NPC target = targets[0];                        // Main.npc[Idglib.FindClosestTarget(0, Main.MouseWorld, new Vector2(0f, 0f), true, true, true, projectile)];
                        if (target != null)
                        {
                            Vector2 projvel = projectile.velocity;
                            projectile.velocity = target.Center - projectile.Center;
                            projectile.velocity.Normalize(); projectile.velocity *= 8f;
                            IdgProjectile.Sync(projectile.whoAmI);
                            projectile.netUpdate = true;

                            Vector2 pos = Vector2.Normalize(target.position + new Vector2(Main.rand.Next(0, target.width), Main.rand.Next(0, target.height)) - projectile.Center);

                            Projectile.NewProjectile(projectile.Center, pos * projectile.velocity.Length() * 400, ModContent.ProjectileType <AimbotBulletEffect>(), 0, 0);
                        }
                    }
                    else
                    {
                        Vector2 pos = Vector2.Normalize(projectile.velocity);
                        Projectile.NewProjectile(projectile.Center, pos * projectile.velocity.Length() * 400, ModContent.ProjectileType <AimbotBulletEffect>(), 0, 0);
                    }
                }
                dir = Math.Sign(projectile.velocity.X);
                Main.player[projectile.owner].ChangeDir(dir);
                Main.player[projectile.owner].itemRotation = (float)Math.Atan2(projectile.velocity.Y * dir, projectile.velocity.X * dir);
                //Main.player[projectile.owner].itemRotation = projectile.velocity.ToRotation() * Main.player[projectile.owner].direction;
            }
            projectile.ai[0] += 1;

            /*
             * Vector2 randomcircle = new Vector2(Main.rand.Next(-8000, 8000), Main.rand.Next(-8000, 8000)); randomcircle.Normalize(); Vector2 ogcircle = randomcircle; randomcircle *= 0.1f;
             * int num655 = Dust.NewDust(projectile.position, projectile.width, projectile.height, 206, projectile.velocity.X + randomcircle.X * 8f, projectile.velocity.Y + randomcircle.Y * 8f, 100, new Color(30, 30, 30, 20), 1f);
             * Main.dust[num655].noGravity = true;
             * Main.dust[num655].velocity *= 0.5f;
             */
        }