Beispiel #1
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)
        {
            if (ExtraExplosives.NukeActive == false && ExtraExplosives.NukeActivated == false)
            {
                int xPosition = (int)(Main.maxTilesX / 16.0f);
                //int yPosition = (int)(y + position.Y / 16.0f);

                ExtraExplosives.NukeActivated = true;

                if (Main.netMode == NetmodeID.MultiplayerClient)
                {
                    ModPacket myPacket = mod.GetPacket();
                    myPacket.WriteVarInt(1);
                    myPacket.Send();
                }

                //SpawnProjectileSynced(new Vector2(xPosition, 1500), new Vector2(30, 0), type, 0, 0, player.whoAmI);
                Projectile.NewProjectile(xPosition, 1500, 30, 0, type, damage, knockBack, player.whoAmI);

                //Main.NewText(xPosition);

                //Main.NewText(player.position);

                item.consumable = true;
            }
            else
            {
                item.consumable = false;
            }
            return(false);
        }
        public override void HandlePacket(BinaryReader reader, int whoAmI)
        {
            int check = reader.ReadVarInt();

            ////Don't use as of right now
            //if (reader.ReadString() == "boom") //set to a byte,
            //{
            //	if (Main.netMode == NetmodeID.Server)//set the other players to have the same properties besides the client
            //	{
            //		ModPacket myPacket = GetPacket();
            //		myPacket.Write("boom");
            //		myPacket.Send(ignoreClient: whoAmI);
            //	}
            //	else//set what you want to happen
            //	{
            //		NukeActive = true;
            //	}
            //}

            //if (reader.ReadString() == "Set")
            //{
            //	if (Main.netMode == NetmodeID.Server)
            //	{
            //		ModPacket myPacket = GetPacket();
            //		myPacket.Write("Set");
            //		myPacket.Send(ignoreClient: whoAmI);
            //	}
            //	else
            //	{
            //		NukeActivated = true;
            //	}
            //}

            //Vector2 pos = reader.ReadPackedVector2();
            //NukePos = pos;

            if (check == 1)             //to make sure only one player can spawn in a nuke at a time in MP
            {
                if (Main.netMode == NetmodeID.Server)
                {
                    ModPacket myPacket = GetPacket();
                    myPacket.WriteVarInt(1);
                    myPacket.Send(ignoreClient: whoAmI);
                }
                else
                {
                    NukeActivated = true;
                }
            }

            if (check == 2)             //sets NukeHit to false for all players
            {
                if (Main.netMode == NetmodeID.Server)
                {
                    ModPacket myPacket = GetPacket();
                    myPacket.WriteVarInt(2);
                    myPacket.Send(ignoreClient: whoAmI);
                }
                else
                {
                    NukeHit = false;
                }
            }
        }
Beispiel #3
0
        public override void AI()
        {
            Player player = Main.player[projectile.owner];

            //Main.NewText(projectile.timeLeft);

            if (++projectile.frameCounter >= 5)
            {
                projectile.frameCounter = 0;
                //projectile.frame = ++projectile.frame % Main.projFrames[projectile.type];
                if (++projectile.frame >= 2)
                {
                    projectile.frame = 0;
                }
            }

            if (!firstTick)
            {
                Main.PlaySound(SoundLoader.customSoundType, -1, -1, mod.GetSoundSlot(SoundType.Custom, "Sounds/Custom/air-raid"));

                //soundPlane = Main.PlaySound(SoundLoader.customSoundType, -1, -1, mod.GetSoundSlot(SoundType.Custom, "Sounds/Custom/Plane"));

                firstTick = true;
            }

            if (projectile.timeLeft <= 9700 && done == false)
            {
                //send the projectiles postion to the player's camera and set NukeActive to true

                //projectile.velocity.X = 30;
                ExtraExplosives.NukePos    = projectile.Center;
                ExtraExplosives.NukeActive = true; //since the projectile is active set it active in the player class

                //if (Main.netMode == NetmodeID.MultiplayerClient)
                //{
                //    ModPacket myPacket = mod.GetPacket(); //clean up later
                //    myPacket.Write("boom");
                //    myPacket.Send();

                //    ModPacket myPacket2 = mod.GetPacket();
                //    myPacket2.WriteVector2(projectile.Center);
                //    myPacket2.Send();
                //}
            }
            else if (projectile.timeLeft >= 9700 && done == false)
            {
                int xPosition = (int)(Main.maxTilesX / 16.0f);
                projectile.position = new Vector2(xPosition, 1500);
            }

            if ((projectile.position.X / 16) <= ((player.position.X + 2000) / 16) && (projectile.position.X / 16) >= ((player.position.X - 2000) / 16)) //when in range, change sprite
            {
                //Main.NewText("Set");
                projectile.frame = 3;
            }

            if ((projectile.position.X / 16) > (player.position.X / 16) && done == false) //the player is behind the plane
            {
                Main.NewText("Thought you could get away?\n" +
                             "Droping Load!!");
                done = true;

                SpawnProjectileSynced(projectile.position, new Vector2(0, 0), ModContent.ProjectileType <NukeProjectile>(), 0, 0, projectile.owner);

                //Projectile.NewProjectile(projectile.position.X, projectile.position.Y, 0, 0, ModContent.ProjectileType<NukeProjectile>(), 0, 0, projectile.owner);
            }

            if ((projectile.position.X <= player.position.X + 40 && projectile.position.X >= player.position.X - 40) && done == false) //searching for the player
            {
                //Main.NewText("Drop the load");
                projectile.frame = 4;
                done             = true;

                SpawnProjectileSynced(projectile.position, new Vector2(0, 0), ModContent.ProjectileType <NukeProjectile>(), 0, 0, projectile.owner);

                //Projectile.NewProjectile(projectile.position.X, projectile.position.Y, 0, 0, ModContent.ProjectileType<NukeProjectile>(), 0, 0, projectile.owner);
            }

            //reset the plane
            if (done == true && ExtraExplosives.NukeActive == false && reset == false)
            {
                reset = true;

                projectile.timeLeft = 10000;
            }

            //The nuke has hit reset the effect of the shake
            if (projectile.timeLeft < 9900 && ExtraExplosives.NukeHit == true)
            {
                projectile.timeLeft     = 100;
                ExtraExplosives.NukeHit = false;

                if (Main.netMode == NetmodeID.MultiplayerClient) //set NukeHit to false for all players
                {
                    ModPacket myPacket = mod.GetPacket();
                    myPacket.WriteVarInt(2);
                    myPacket.Send();
                }
            }

            Dust    dust;
            Dust    dust2;
            Vector2 pos = new Vector2(projectile.position.X + projectile.width / 2 - 110, projectile.position.Y + projectile.height / 2 + 25);

            // You need to set position depending on what you are doing. You may need to subtract width/2 and height/2 as well to center the spawn rectangle.
            dust = Terraria.Dust.NewDustPerfect(pos, 35, new Vector2(0f, 0f), 0, new Color(255, 255, 255), 3.289474f);
            if (Main.rand.NextFloat() < 0.6578947f)
            {
                dust2           = Terraria.Dust.NewDustPerfect(pos, 31, new Vector2(0f, 0f), 0, new Color(255, 255, 255), 4.605263f);
                dust2.noGravity = true;
            }
            dust.noGravity = true;
        }