public override void OnHitNPC(NPC target, int damage, float knockback, bool crit)
        {
            Main.PlaySound(SoundID.Item38, projectile.Center);

            Player player          = Main.player[projectile.owner];
            int    weaponDamage    = projectile.damage;
            float  weaponKnockback = projectile.knockBack;
            int    bulletCount     = 8 + (int)((((1 / player.meleeSpeed) - 1) * 100) / 10);

            float bulletSpacing = 2 * (float)Math.PI / bulletCount;

            player.PickAmmo(QwertyMethods.MakeItemFromID(ItemID.FlintlockPistol), ref bullet, ref speedB, ref canShoot, ref weaponDamage, ref weaponKnockback, false);
            for (; bulletCount > 0; bulletCount--)
            {
                Projectile bul = Main.projectile[Projectile.NewProjectile(projectile.Center.X, projectile.Center.Y, (float)Math.Cos(dir) * BulVel, (float)Math.Sin(dir) * BulVel, bullet, weaponDamage, weaponKnockback, Main.myPlayer)];
                bul.melee  = true;
                bul.ranged = false;
                if (Main.netMode == 1)
                {
                    QwertysRandomContent.UpdateProjectileClass(bul);
                }
                dir += bulletSpacing;
            }
            projectile.velocity.X = -projectile.velocity.X;
            projectile.velocity.Y = -projectile.velocity.Y;
        }
Пример #2
0
        public override void OnHitPvp(Player target, int damage, bool crit)
        {
            if (crit)
            {
                Main.PlaySound(mod.GetLegacySoundSlot(SoundType.Custom, "Sounds/SoundEffects/PUNCH").WithVolume(.8f).WithPitchVariance(.5f));


                target.velocity.X = projectile.velocity.X * 1f;
                target.velocity.Y = projectile.velocity.Y * .5f;
                if (Main.netMode == 1)
                {
                    QwertysRandomContent.UpdatePlayerVelocity(target.whoAmI, target.velocity);
                }
            }
            else
            {
                Main.PlaySound(mod.GetLegacySoundSlot(SoundType.Custom, "Sounds/SoundEffects/PUNCH").WithVolume(.4f).WithPitchVariance(.5f));

                target.velocity.X = projectile.velocity.X * .5f;
                target.velocity.Y = projectile.velocity.Y * .25f;
                if (Main.netMode == 1)
                {
                    QwertysRandomContent.UpdatePlayerVelocity(target.whoAmI, target.velocity);
                }
            }
        }
        public override void AI()
        {
            Player player = Main.player[projectile.owner];

            player.UpdateMaxTurrets();
            timer++;

            if (QwertyMethods.ClosestNPC(ref target, maxDistance, projectile.Center, false, player.MinionAttackTargetNPC))
            {
                projectile.rotation = (target.Center - projectile.Center).ToRotation();
                if (timer % 60 == 0 && player.whoAmI == Main.myPlayer)
                {
                    int numOfProj = 8 + Main.rand.Next(8);
                    for (int p = 0; p < numOfProj; p++)
                    {
                        Projectile s = Main.projectile[Projectile.NewProjectile(projectile.Center, QwertyMethods.PolarVector(Main.rand.NextFloat(4, 16), projectile.rotation - (float)Math.PI / 8 + Main.rand.NextFloat((float)Math.PI / 4)), ProjectileID.SporeCloud, projectile.damage, projectile.knockBack, player.whoAmI)];
                        s.melee  = false;
                        s.minion = true;
                        if (Main.netMode == 1)
                        {
                            QwertysRandomContent.UpdateProjectileClass(s);
                        }
                    }
                }
            }
        }
 public override void ModifyHitNPCWithProj(Projectile proj, NPC target, ref int damage, ref float knockback, ref bool crit, ref int hitDirection)
 {
     if (Main.rand.Next(10) == 0 && effect && !target.immortal && !proj.GetGlobalProjectile <PenguinLimit>().realeasedPenguin)
     {
         if (!noSound)
         {
             Main.PlaySound(mod.GetLegacySoundSlot(SoundType.Custom, "Sounds/SoundEffects/PenguinCall").WithVolume(1f).WithPitchVariance(0), player.Center);
         }
         Projectile penguin = Main.projectile[Projectile.NewProjectile(player.Center, new Vector2(6, 0), mod.ProjectileType("SlidingPenguin"), damage, proj.knockBack, player.whoAmI)];
         penguin.melee  = proj.melee;
         penguin.ranged = proj.ranged;
         penguin.thrown = proj.thrown;
         penguin.minion = proj.minion;
         penguin.magic  = proj.magic;
         penguin.GetGlobalProjectile <PenguinLimit>().realeasedPenguin = true;
         if (Main.netMode == 1)
         {
             QwertysRandomContent.UpdateProjectileClass(penguin);
         }
         penguin        = Main.projectile[Projectile.NewProjectile(player.Center, new Vector2(-6, 0), mod.ProjectileType("SlidingPenguin"), damage, proj.knockBack, player.whoAmI)];
         penguin.melee  = proj.melee;
         penguin.ranged = proj.ranged;
         penguin.thrown = proj.thrown;
         penguin.minion = proj.minion;
         penguin.magic  = proj.magic;
         penguin.GetGlobalProjectile <PenguinLimit>().realeasedPenguin = true;
         proj.GetGlobalProjectile <PenguinLimit>().realeasedPenguin    = true;
         if (Main.netMode == 1)
         {
             QwertysRandomContent.UpdateProjectileClass(penguin);
         }
     }
 }
Пример #5
0
        void Shoot()
        {
            Main.PlaySound(SoundID.Item38, projectile.Center);
            timer += 10;
            Player player          = Main.player[projectile.owner];
            int    weaponDamage    = projectile.damage;
            float  weaponKnockback = projectile.knockBack;
            int    bulletCount     = 8 + (int)((((1 / player.meleeSpeed) - 1) * 100) / 10);

            //CombatText.NewText(player.getRect(), new Color(38, 126, 126), bulletCount, true, false);
            Item sItem = QwertyMethods.MakeItemFromID(ItemID.FlintlockPistol);

            sItem.damage = weaponDamage;
            player.PickAmmo(sItem, ref bullet, ref speedB, ref canShoot, ref weaponDamage, ref weaponKnockback, false);
            List <Projectile> bullets = QwertyMethods.ProjectileSpread(projectile.Center, bulletCount, BulVel, bullet, weaponDamage, weaponKnockback, projectile.owner);

            foreach (Projectile bul in bullets)
            {
                bul.melee  = true;
                bul.ranged = false;
                if (Main.netMode == 1)
                {
                    QwertysRandomContent.UpdateProjectileClass(bul);
                }
            }
        }
Пример #6
0
        public override void AI()
        {
            Player player = Main.player[projectile.owner];

            player.itemAnimation = 2;
            player.itemTime      = 2;
            bool  firing          = player.channel && player.HasAmmo(QwertyMethods.MakeItemFromID(ItemID.FlintlockPistol), true) && !player.noItems && !player.CCed;
            int   weaponDamage    = player.GetWeaponDamage(player.inventory[player.selectedItem]);
            int   Ammo            = 14;
            float speed           = 14f;
            float weaponKnockback = player.inventory[player.selectedItem].knockBack;

            if (runOnce)
            {
                angleInRing = (float)(projectile.ai[1] * Math.PI / 3f);
                runOnce     = false;
            }
            trigTimer          += (float)Math.PI / 10;
            radius              = 125 + 25 * (float)Math.Sin(trigTimer);
            angleInRing        += rotateSpeed;
            projectile.rotation = angleInRing + (float)Math.PI;
            projectile.Center   = new Vector2(Main.MouseWorld.X + (float)Math.Cos(angleInRing) * radius, Main.MouseWorld.Y + (float)Math.Sin(angleInRing) * radius);
            if (player.channel)
            {
                reloadTimer++;

                projectile.timeLeft = 2;
                if (reloadTimer % 15 == 0)
                {
                    player.PickAmmo(QwertyMethods.MakeItemFromID(ItemID.FlintlockPistol), ref Ammo, ref speed, ref firing, ref weaponDamage, ref weaponKnockback, Main.rand.Next(2) == 0);
                    if (firing && player.CheckMana((int)((float)player.inventory[player.selectedItem].mana / 6f), !player.GetModPlayer <BloodMedalionEffect>().effect))
                    {
                        if (player.GetModPlayer <BloodMedalionEffect>().effect)
                        {
                            player.statLife -= (int)(player.inventory[player.selectedItem].mana / 6f * player.manaCost);
                            if (player.statLife <= 0)
                            {
                                player.KillMe(PlayerDeathReason.ByCustomReason(player.name + " madly drained " + (player.Male ? "his " : "her") + " lifeforce!"), (int)(player.inventory[player.selectedItem].mana * player.manaCost), 0);
                            }
                        }
                        player.manaRegenDelay = (int)player.maxRegenDelay;
                        Main.PlaySound(SoundID.Item11, player.position);

                        Projectile bul = Main.projectile[Projectile.NewProjectile(projectile.Center, new Vector2((float)Math.Cos(projectile.rotation) * speed, (float)Math.Sin(projectile.rotation) * speed), Ammo, projectile.damage, projectile.knockBack, player.whoAmI)];
                        bul.magic  = true;
                        bul.ranged = false;
                        if (Main.netMode == 1)
                        {
                            QwertysRandomContent.UpdateProjectileClass(bul);
                        }
                    }
                }
            }
            else
            {
            }
        }
Пример #7
0
        public override void ModifyHitPvp(Player target, ref int damage, ref bool crit)
        {
            //QwertyMethods.ServerClientCheck();

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

            target.position.X = player.Center.X;
            target.position.Y = player.Center.Y - 200f;
            Main.PlaySound(25, target.position, 0);
            QwertysRandomContent.UpdatePlayerPosition(target.whoAmI, target.position);
        }
Пример #8
0
        public override void AI()
        {
            if (runOnce)
            {
                actDirection         = projectile.velocity.ToRotation();
                projectile.velocity /= 5;
                runOnce              = false;
            }

            wanderTimer++;
            if (wanderTimer > 60)
            {
                if (Main.netMode == 1 && projectile.owner == Main.myPlayer)
                {
                    projectile.ai[1] = Main.rand.NextFloat(2 * (float)Math.PI);

                    if (Main.netMode == 1)
                    {
                        QwertysRandomContent.ProjectileAIUpdate(projectile);
                    }

                    projectile.netUpdate = true;
                }
                else if (Main.netMode == 0)
                {
                    projectile.ai[1] = Main.rand.NextFloat(2 * (float)Math.PI);
                }
                wanderTimer = 0;
            }
            if (projectile.wet)
            {
                if (QwertyMethods.ClosestNPC(ref prey, 10000, projectile.Center))
                {
                    swimDirection = (projectile.Center - prey.Center).ToRotation() - (float)Math.PI;
                }
                else
                {
                    swimDirection = projectile.ai[1] - (float)Math.PI;
                }



                actDirection          = QwertyMethods.SlowRotation(actDirection, swimDirection, 4);
                projectile.velocity.X = (float)Math.Cos(actDirection) * swimSpeed;
                projectile.velocity.Y = (float)Math.Sin(actDirection) * swimSpeed;
                projectile.rotation   = actDirection + (float)Math.PI / 2;
                actDirection          = projectile.velocity.ToRotation();
            }
            else
            {
                actDirection = projectile.velocity.ToRotation();
            }
        }
        public override void AI()
        {
            Player       player    = Main.player[projectile.owner];
            QwertyPlayer modPlayer = player.GetModPlayer <QwertyPlayer>();

            varTime++;
            if (varTime >= 60)
            {
                varTime = 0;
                if (Main.netMode != 2)
                {
                    Yvar = Main.rand.Next(0, 80);
                    Xvar = Main.rand.Next(-80, 80);
                }
            }

            Vector2 moveTo = new Vector2(player.Center.X + Xvar, player.Center.Y - Yvar) - projectile.Center;

            projectile.velocity = (moveTo) * .04f;
            if (modPlayer.LuneArcher)
            {
                projectile.timeLeft = 2;
            }

            timer++;
            if (QwertyMethods.ClosestNPC(ref target, 10000, player.Center, false, player.MinionAttackTargetNPC))
            {
                projectile.rotation = (target.Center - projectile.Center).ToRotation();
                if (timer > 90)
                {
                    int   weaponDamage    = projectile.damage;
                    float weaponKnockback = projectile.knockBack;
                    player.PickAmmo(QwertyMethods.MakeItemFromID(39), ref arrow, ref speedB, ref canShoot, ref weaponDamage, ref weaponKnockback, Main.rand.Next(2) == 0);
                    if (Main.netMode != 1)
                    {
                        Projectile bul = Main.projectile[Projectile.NewProjectile(projectile.Center.X, projectile.Center.Y, (float)Math.Cos(projectile.rotation) * BulVel, (float)Math.Sin(projectile.rotation) * BulVel, arrow, weaponDamage, weaponKnockback, Main.myPlayer)];
                        bul.ranged = false;
                        bul.minion = true;
                        if (Main.netMode == 1)
                        {
                            QwertysRandomContent.UpdateProjectileClass(bul);
                        }
                    }
                    timer = 0;
                }
                projectile.rotation += (float)Math.PI / 2;
            }
        }
Пример #10
0
        public override bool ExplosionEffect(int explosionSize)
        {
            Main.PlaySound(SoundID.Item62, projectile.position);
            for (int i = 0; i < 2; i++)
            {
                Projectile meteor = Main.projectile[Projectile.NewProjectile(projectile.Center + new Vector2(Main.rand.Next(-20, 20), -1000), QwertyMethods.PolarVector(10, (float)Math.PI / 2 + (float)Math.PI / 16 * Main.rand.NextFloat(-1, 1)), 424 + Main.rand.Next(2), (int)(projectile.damage), projectile.knockBack, projectile.owner, 0f, 0.5f + (float)Main.rand.NextDouble() * 0.3f)];
                meteor.magic  = false;
                meteor.thrown = true;

                if (Main.netMode == 1)
                {
                    QwertysRandomContent.UpdateProjectileClass(meteor);
                }
            }
            return(true);
        }
        public override void ModifyHitPvp(Player target, ref int damage, ref bool crit)
        {
            float  jumpX  = target.Center.X;
            float  jumpY  = target.Center.Y;
            Player player = Main.player[projectile.owner];

            target.position.X = player.Center.X;
            target.position.Y = player.Center.Y - 30;

            player.position.X = jumpX;
            player.position.Y = jumpY - 30;
            Main.PlaySound(25, target.position, 0);
            Main.PlaySound(25, player.position, 0);

            QwertysRandomContent.UpdatePlayerPosition(target.whoAmI, target.position);
            QwertysRandomContent.UpdatePlayerPosition(player.whoAmI, player.position);
        }
        void Shoot()
        {
            Player player = Main.player[projectile.owner];

            Main.PlaySound(SoundID.Item11, projectile.position);
            int   weaponDamage    = projectile.damage;
            float weaponKnockback = projectile.knockBack;
            Item  sItem           = QwertyMethods.MakeItemFromID(ItemID.Handgun);

            sItem.damage = weaponDamage;
            player.PickAmmo(sItem, ref bullet, ref speedB, ref canShoot, ref weaponDamage, ref weaponKnockback, Main.rand.Next(2) == 0);
            Projectile bul = Main.projectile[Projectile.NewProjectile(projectile.Center + QwertyMethods.PolarVector(29, gunRotation), QwertyMethods.PolarVector(10, gunRotation), bullet, weaponDamage, weaponKnockback, Main.myPlayer)];

            bul.ranged = false;
            bul.minion = true;
            if (Main.netMode == 1)
            {
                QwertysRandomContent.UpdateProjectileClass(bul);
            }
            shotCooldown = 0;
        }
Пример #13
0
        public override bool OnTileCollide(Vector2 velocityChange)
        {
            Main.PlaySound(SoundID.Item38, projectile.Center);
            timer += 10;
            Player player          = Main.player[projectile.owner];
            int    weaponDamage    = projectile.damage;
            float  weaponKnockback = projectile.knockBack;
            int    bulletCount     = 8 + (int)((((1 / player.meleeSpeed) - 1) * 100) / 10);

            float bulletSpacing = 2 * (float)Math.PI / bulletCount;

            //CombatText.NewText(player.getRect(), new Color(38, 126, 126), bulletCount, true, false);
            player.PickAmmo(QwertyMethods.MakeItemFromID(ItemID.FlintlockPistol), ref bullet, ref speedB, ref canShoot, ref weaponDamage, ref weaponKnockback, false);
            for (; bulletCount > 0; bulletCount--)
            {
                Projectile bul = Main.projectile[Projectile.NewProjectile(projectile.Center.X, projectile.Center.Y, (float)Math.Cos(dir) * BulVel, (float)Math.Sin(dir) * BulVel, bullet, weaponDamage, weaponKnockback, Main.myPlayer)];
                bul.melee  = true;
                bul.ranged = false;
                if (Main.netMode == 1)
                {
                    QwertysRandomContent.UpdateProjectileClass(bul);
                }
                dir += bulletSpacing;
            }



            if (projectile.velocity.X != velocityChange.X)
            {
                projectile.velocity.X = -velocityChange.X;
            }
            if (projectile.velocity.Y != velocityChange.Y)
            {
                projectile.velocity.Y = -velocityChange.Y;
            }
            return(false);
        }
        public override void AI()
        {
            Player player = Main.player[projectile.owner];
            //Main.NewText(moveTo);
            QwertyPlayer modPlayer = player.GetModPlayer <QwertyPlayer>(mod);

            if (modPlayer.PlatinumDagger)
            {
                projectile.timeLeft = 2;
            }
            distanceFromPlayer = (player.Center - projectile.Center).Length();
            timer++;
            switch (AttackMode)
            {
            case idle:
                projectile.tileCollide = true;
                attackTimer++;
                if (timer > 60)
                {
                    if (Main.netMode != 2 && projectile.owner == Main.myPlayer)
                    {
                        projectile.ai[0] = Main.rand.Next(0, 80);
                        projectile.ai[1] = Main.rand.Next(-80, 80);
                        if (Main.netMode == 1)
                        {
                            QwertysRandomContent.ProjectileAIUpdate(projectile);
                        }
                        projectile.netUpdate = true;
                    }
                    timer = 0;
                }
                moveTo = new Vector2(player.Center.X + projectile.ai[1], player.Center.Y - projectile.ai[0]);
                if (attackTimer > attackCooldown)
                {
                    if (QwertyMethods.ClosestNPC(ref target, targetMaxDistanceFromPlayer, player.Center, false, player.MinionAttackTargetNPC))
                    {
                        chargeTime = (int)((targetMaxDistanceFromPlayer + 100) / chargeSpeed);
                        for (int k = 0; k < 200; k++)
                        {
                            projectile.localNPCImmunity[k] = 0;
                        }
                        projectile.velocity = (target.Center - projectile.Center).SafeNormalize(-Vector2.UnitY) * chargeSpeed;
                        attackTimer         = 0;
                        AttackMode          = charging;
                    }
                }
                if (distanceFromPlayer > maxDistanceFromPlayer)
                {
                    AttackMode = returning;
                }
                break;

            case charging:
                projectile.tileCollide = true;
                attackTimer++;
                if (attackTimer > chargeTime)
                {
                    AttackMode  = returning;
                    attackTimer = 0;
                    //projectile.velocity = Vector2.Zero;
                }
                break;

            case returning:
                projectile.tileCollide = false;
                moveTo = player.Center;
                if (Collision.CheckAABBvAABBCollision(player.position, player.Size, projectile.position, projectile.Size))
                {
                    AttackMode = idle;
                }
                break;
            }
            if (AttackMode == charging)
            {
                projectile.friendly = true;
                projectile.rotation = projectile.velocity.ToRotation() + (float)Math.PI / 2;
            }
            else
            {
                projectile.friendly  = false;
                projectile.velocity += (moveTo - projectile.Center).SafeNormalize(-Vector2.UnitY) * acceleration;
                if (projectile.velocity.Length() > maxSpeed)
                {
                    projectile.velocity = (moveTo - projectile.Center).SafeNormalize(-Vector2.UnitY) * maxSpeed;
                }
                projectile.rotation = QwertyMethods.SlowRotation(projectile.rotation, projectile.velocity.ToRotation() + (float)Math.PI / 2, 3);
            }

            //projectile.rotation = projectile.velocity.ToRotation() + (float)Math.PI / 2;
        }
Пример #15
0
        public override void Kill(int timeLeft)
        {
            Main.PlaySound(SoundID.Item14, projectile.position);
            projectile.position.X = projectile.position.X + (float)(projectile.width / 2);
            projectile.position.Y = projectile.position.Y + (float)(projectile.height / 2);
            projectile.width      = 22;
            projectile.height     = 22;
            projectile.position.X = projectile.position.X - (float)(projectile.width / 2);
            projectile.position.Y = projectile.position.Y - (float)(projectile.height / 2);
            for (int num761 = 0; num761 < 20; num761++)
            {
                int num762 = Dust.NewDust(new Vector2(projectile.position.X, projectile.position.Y), projectile.width, projectile.height, 31, 0f, 0f, 100, default(Color), 1.5f);
                Main.dust[num762].velocity *= 1.4f;
            }
            for (int num763 = 0; num763 < 10; num763++)
            {
                int num764 = Dust.NewDust(new Vector2(projectile.position.X, projectile.position.Y), projectile.width, projectile.height, 6, 0f, 0f, 100, default(Color), 2.5f);
                Main.dust[num764].noGravity = true;
                Main.dust[num764].velocity *= 5f;
                num764 = Dust.NewDust(new Vector2(projectile.position.X, projectile.position.Y), projectile.width, projectile.height, 6, 0f, 0f, 100, default(Color), 1.5f);
                Main.dust[num764].velocity *= 3f;
            }
            int num765 = Gore.NewGore(new Vector2(projectile.position.X, projectile.position.Y), default(Vector2), Main.rand.Next(61, 64), 1f);

            Main.gore[num765].velocity *= 0.4f;
            Gore expr_18B0E_cp_0 = Main.gore[num765];

            expr_18B0E_cp_0.velocity.X = expr_18B0E_cp_0.velocity.X + 1f;
            Gore expr_18B2E_cp_0 = Main.gore[num765];

            expr_18B2E_cp_0.velocity.Y = expr_18B2E_cp_0.velocity.Y + 1f;
            num765 = Gore.NewGore(new Vector2(projectile.position.X, projectile.position.Y), default(Vector2), Main.rand.Next(61, 64), 1f);
            Main.gore[num765].velocity *= 0.4f;
            Gore expr_18BB2_cp_0 = Main.gore[num765];

            expr_18BB2_cp_0.velocity.X = expr_18BB2_cp_0.velocity.X - 1f;
            Gore expr_18BD2_cp_0 = Main.gore[num765];

            expr_18BD2_cp_0.velocity.Y = expr_18BD2_cp_0.velocity.Y + 1f;
            num765 = Gore.NewGore(new Vector2(projectile.position.X, projectile.position.Y), default(Vector2), Main.rand.Next(61, 64), 1f);
            Main.gore[num765].velocity *= 0.4f;
            Gore expr_18C56_cp_0 = Main.gore[num765];

            expr_18C56_cp_0.velocity.X = expr_18C56_cp_0.velocity.X + 1f;
            Gore expr_18C76_cp_0 = Main.gore[num765];

            expr_18C76_cp_0.velocity.Y = expr_18C76_cp_0.velocity.Y - 1f;
            num765 = Gore.NewGore(new Vector2(projectile.position.X, projectile.position.Y), default(Vector2), Main.rand.Next(61, 64), 1f);
            Main.gore[num765].velocity *= 0.4f;
            Gore expr_18CFA_cp_0 = Main.gore[num765];

            expr_18CFA_cp_0.velocity.X = expr_18CFA_cp_0.velocity.X - 1f;
            Gore expr_18D1A_cp_0 = Main.gore[num765];

            expr_18D1A_cp_0.velocity.Y = expr_18D1A_cp_0.velocity.Y - 1f; Main.PlaySound(SoundID.Item62, projectile.position);
            for (int i = 0; i < 2; i++)
            {
                Projectile meteor = Main.projectile[Projectile.NewProjectile(projectile.Center + new Vector2(Main.rand.Next(-20, 20), -1000), QwertyMethods.PolarVector(10, (float)Math.PI / 2 + (float)Math.PI / 16 * Main.rand.NextFloat(-1, 1)), 424 + Main.rand.Next(2), (int)(projectile.damage), projectile.knockBack, projectile.owner, 0f, 0.5f + (float)Main.rand.NextDouble() * 0.3f)];
                meteor.magic  = false;
                meteor.thrown = true;

                if (Main.netMode == 1)
                {
                    QwertysRandomContent.UpdateProjectileClass(meteor);
                }
            }
        }
        public override void AI()
        {
            Player player = Main.player[projectile.owner];
            //Main.NewText(moveTo);
            QwertyPlayer modPlayer = player.GetModPlayer <QwertyPlayer>();



            distanceFromPlayer = (player.Center - projectile.Center).Length();
            timer++;
            switch (AttackMode)
            {
            case idle:
                projectile.timeLeft = 120;
                attackTimer++;
                if (timer > 60)
                {
                    if (Main.netMode != 2 && projectile.owner == Main.myPlayer)
                    {
                        projectile.ai[0] = Main.rand.Next(0, 80);
                        projectile.ai[1] = Main.rand.Next(-80, 80);
                        if (Main.netMode == 1)
                        {
                            QwertysRandomContent.ProjectileAIUpdate(projectile);
                        }
                        projectile.netUpdate = true;
                    }
                    timer = 0;
                }
                moveTo = new Vector2(player.Center.X + projectile.ai[1], player.Center.Y - projectile.ai[0]);
                if (Main.mouseRight && Main.myPlayer == projectile.owner)
                {
                    projectile.velocity = (Main.MouseWorld - projectile.Center).SafeNormalize(-Vector2.UnitY) * chargeSpeed;
                    attackTimer         = 0;
                    AttackMode          = charging;
                }

                break;

            case charging:

                attackTimer++;

                break;
            }
            if (AttackMode == charging)
            {
                projectile.friendly = true;
                projectile.rotation = projectile.velocity.ToRotation() + (float)Math.PI / 2;
            }
            else
            {
                projectile.friendly  = false;
                projectile.velocity += (moveTo - projectile.Center).SafeNormalize(-Vector2.UnitY) * acceleration;
                if (projectile.velocity.Length() > maxSpeed)
                {
                    projectile.velocity = (moveTo - projectile.Center).SafeNormalize(-Vector2.UnitY) * maxSpeed;
                }
                projectile.rotation = QwertyMethods.SlowRotation(projectile.rotation, projectile.velocity.ToRotation() + (float)Math.PI / 2, 3);
            }
            targetMaxDistanceFromPlayer = 400;
            foundTarget = false;
            //projectile.rotation = projectile.velocity.ToRotation() + (float)Math.PI / 2;
        }
        public override void PostUpdateMiscEffects()
        {
            if (controlled)
            {
                player.noFallDmg = true;

                player.GetModPlayer <ShapeShifterPlayer>().noDraw = true;

                player.GetModPlayer <ShapeShifterPlayer>().hovercraft = true;
                Mount mount = player.mount;
                player.GetModPlayer <ShapeShifterPlayer>().morphed       = true;
                player.GetModPlayer <ShapeShifterPlayer>().overrideWidth = 40;
                //player.height = 30;
                player.noItems     = true;
                hoverDrift        += (float)Math.PI / 60;
                player.statDefense = 14 + player.GetModPlayer <ShapeShifterPlayer>().morphDef;
                if ((player.controlUp || player.controlJump) && hoverHeight < maxHoverHeight)
                {
                    hoverHeight++;
                }
                else if (player.controlDown && hoverHeight > minHoverHeight)
                {
                    hoverHeight--;
                }
                for (; currentHeight < (maxHoverHeight + 10); currentHeight++)
                {
                    if (!Collision.CanHit(player.Center, 0, 0, player.Center + new Vector2(0, currentHeight), 0, 0))
                    {
                        break;
                    }
                }
                hoverTo = hoverHeight + (float)Math.Sin(hoverDrift) * 16;
                //player.velocity.Y = ( currentHeight-hoverHeight) * .1f;
                if (Math.Abs(currentHeight - hoverTo) > hoverSpeed * 4)
                {
                    if (currentHeight - hoverTo > 0)
                    {
                        player.velocity.Y = hoverSpeed;
                        hoverSpeed        = 6f;
                    }
                    if (currentHeight - hoverTo < 0)
                    {
                        player.velocity.Y = -hoverSpeed;
                        hoverSpeed        = 6f;
                    }
                }
                else
                {
                    player.velocity.Y = (currentHeight - hoverTo) * .1f;
                }

                Vector2 shootFrom = player.Top;
                shootFrom.Y += 8;
                float pointAt = (QwertysRandomContent.LocalCursor[player.whoAmI] - shootFrom).ToRotation();


                player.GetModPlayer <ShapeShifterPlayer>(mod).tankCannonRotation = QwertyMethods.SlowRotation(player.GetModPlayer <ShapeShifterPlayer>(mod).tankCannonRotation, pointAt, 3);
                //Main.NewText(player.GetModPlayer<ShapeShifterPlayer>(mod).tankCannonRotation);

                if (shotCooldown > 0)
                {
                    shotCooldown--;
                }
                if (player.whoAmI == Main.myPlayer && Main.mouseLeft && !player.HasBuff(mod.BuffType("MorphSickness")) && shotCooldown == 0)
                {
                    shotCooldown = 12;
                    Projectile p = Main.projectile[Projectile.NewProjectile(shootFrom + QwertyMethods.PolarVector(19, player.GetModPlayer <ShapeShifterPlayer>(mod).tankCannonRotation), QwertyMethods.PolarVector(12, player.GetModPlayer <ShapeShifterPlayer>(mod).tankCannonRotation), ProjectileID.GreenLaser, (int)(HovercraftShift.dmg * player.GetModPlayer <ShapeShifterPlayer>().morphDamage), HovercraftShift.kb, player.whoAmI)];
                    p.magic = false;
                    p.GetGlobalProjectile <MorphProjectile>().morph = true;
                    p.penetrate = 1;
                    p.alpha     = 0;
                    if (Main.netMode == 1)
                    {
                        QwertysRandomContent.UpdateProjectileClass(p);
                    }
                    Main.PlaySound(SoundID.Item12);
                }

                currentHeight = 0; //reset
                hoverTo       = 0;
                hoverSpeed    = 3f;
            }
        }
Пример #18
0
        public override void AI()
        {
            Player player = Main.player[projectile.owner];

            QwertyPlayer modPlayer = player.GetModPlayer <QwertyPlayer>();

            shotCounter++;
            if (modPlayer.SpaceFighter)
            {
                projectile.timeLeft = 2;
            }
            if (QwertyMethods.ClosestNPC(ref target, 1000, projectile.Center, false, player.MinionAttackTargetNPC) && (player.Center - projectile.Center).Length() < 1000)
            {
                projectile.rotation = QwertyMethods.SlowRotation(projectile.rotation, (target.Center - projectile.Center).ToRotation(), 6);
                if ((target.Center - projectile.Center).Length() < 300)
                {
                    if (shotCounter >= 20)
                    {
                        shotCounter = 0;
                        Projectile l = Main.projectile[Projectile.NewProjectile(projectile.Center, QwertyMethods.PolarVector(12f, projectile.rotation), ProjectileID.GreenLaser, projectile.damage, projectile.knockBack, projectile.owner)];
                        l.magic  = false;
                        l.minion = true;
                        //l.scale = .5f;
                        l.penetrate = 1;
                        //l.alpha = 0;
                        if (Main.netMode == 1)
                        {
                            QwertysRandomContent.UpdateProjectileClass(l);
                        }
                        Main.PlaySound(SoundID.Item12, projectile.position);
                    }
                }
                else
                {
                    Thrust();
                }
            }
            else
            {
                projectile.rotation = QwertyMethods.SlowRotation(projectile.rotation, (player.Center - projectile.Center).ToRotation(), 6);
                if ((player.Center - projectile.Center).Length() < 300)
                {
                }
                else
                {
                    Thrust();
                }
            }
            for (int k = 0; k < 1000; k++)
            {
                if (Main.projectile[k].type == projectile.type && k != projectile.whoAmI)
                {
                    if (Collision.CheckAABBvAABBCollision(projectile.position + new Vector2(projectile.width / 4, projectile.height / 4), new Vector2(projectile.width / 2, projectile.height / 2), Main.projectile[k].position + new Vector2(Main.projectile[k].width / 4, Main.projectile[k].height / 4), new Vector2(Main.projectile[k].width / 2, Main.projectile[k].height / 2)))
                    {
                        projectile.velocity += new Vector2((float)Math.Cos((projectile.Center - Main.projectile[k].Center).ToRotation()) * .1f, (float)Math.Sin((projectile.Center - Main.projectile[k].Center).ToRotation()) * .1f);
                    }
                }
            }
            if (projectile.velocity.Length() > maxSpeed)
            {
                projectile.velocity = projectile.velocity.SafeNormalize(-Vector2.UnitY) * maxSpeed;
            }
        }
Пример #19
0
        public override void AI()
        {
            trigCounter += (float)Math.PI / 60;

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

            player.UpdateMaxTurrets();

            Vector2 DifferenceToGo = Goto - projectile.Center - HeadPos;
            float   speed          = DifferenceToGo.Length();

            wanderTimer++;
            if (wanderTimer > 60)
            {
                if (Main.netMode == 1 && projectile.owner == Main.myPlayer)
                {
                    projectile.ai[1] = Main.rand.NextFloat(2 * (float)Math.PI);

                    if (Main.netMode == 1)
                    {
                        QwertysRandomContent.ProjectileAIUpdate(projectile);
                    }

                    projectile.netUpdate = true;
                }
                else if (Main.netMode == 0)
                {
                    projectile.ai[1] = Main.rand.NextFloat(2 * (float)Math.PI);
                }
                wanderTimer = 0;
            }
            if (QwertyMethods.ClosestNPC(ref target, 700, projectile.Center, true, player.MinionAttackTargetNPC))
            {
                Goto     = target.Center;
                maxSpeed = 6;
            }
            else
            {
                Goto = projectile.Center + QwertyMethods.PolarVector(100, projectile.ai[1]);
            }

            if (speed > maxSpeed)
            {
                speed = maxSpeed;
            }
            HeadPos += QwertyMethods.PolarVector(speed, DifferenceToGo.ToRotation());
            projectile.frameCounter++;
            if (projectile.frameCounter % 10 == 0)
            {
                if (frame == 2 || frame == 0)
                {
                    animationDir *= -1;
                }
                frame += animationDir;
            }
            HeadOffPos = HeadPos + QwertyMethods.PolarVector(20 * (float)Math.Sin(trigCounter), HeadPos.ToRotation());
            maxSpeed   = 3;
            //were used to check hitbox
            //Dust.NewDustPerfect((projectile.Center + HeadOffPos) + QwertyMethods.PolarVector(-13, HeadPos.ToRotation()), DustID.Fire);
            // Dust.NewDustPerfect((projectile.Center + HeadOffPos) + QwertyMethods.PolarVector(28, HeadPos.ToRotation()), DustID.Fire);
        }