protected void RetaliationSpray(Vector2 spawnPoint)
        {
            int targetIndex = npc.target;

            npc.TargetClosest(false);
            Player retaliationTarget = Main.player[npc.target];

            float direction = MoveToward(npc.Center, retaliationTarget.Center).ToRotation();

            direction = MathHelper.ToDegrees(direction);
            direction = Main.rand.NextFloat(direction - RetaliationSprayRandomAngleDifference,
                                            direction + RetaliationSprayRandomAngleDifference + .0001f);
            direction = MathHelper.ToRadians((float)Math.Round(direction, 4, MidpointRounding.AwayFromZero));
            Vector2 spawnVelocity = direction.ToRotationVector2() * RetaliationBulletSpeed;

            if (IsSinglePlayer())
            {
                Projectile.NewProjectile(spawnPoint, spawnVelocity, ModContent.ProjectileType <BacterionBullet>(),
                                         BulletFinalDamage(), BulletFinalKnockback(), Main.myPlayer);
            }
            else if (IsMultiplayerClient())
            {
                ModPacket packet = mod.GetPacket();

                packet.Write((byte)ChensGradiusMod.PacketMessageType.SpawnRetaliationBullet);
                packet.WriteVector2(spawnPoint);
                packet.WriteVector2(spawnVelocity);
                packet.Write(BulletFinalDamage());
                packet.Write(BulletFinalKnockback());
                packet.Send();
            }

            npc.target = targetIndex;
        }
Beispiel #2
0
        public override void OnHitNPC(NPC target, int damage, float knockback, bool crit)
        {
            knockback = 0;
            crit      = false;

            for (int i = 0; i < 100; i++)
            {
                if (Main.combatText[i].active && Main.combatText[i].color == CombatText.DamagedHostile && Main.combatText[i].text == damage.ToString() && projectile.Distance(Main.combatText[i].position) < 250)
                {
                    Main.combatText[i].active = false;
                    break;
                }
            }
            //CombatText.NewText(new Rectangle((int)target.position.X, (int)target.position.Y, target.width, target.height), Color.DarkGreen, "BLOCKED", true, false);

            Main.PlaySound(3, projectile.Center, 4);
            if (target.knockBackResist > 0)
            {
                target.velocity.X = projectile.direction * projectile.knockBack;
                if (Main.netMode != 0)
                {
                    ModPacket packet = mod.GetPacket();
                    packet.Write((byte)JoostModMessageType.NPCpos);
                    packet.Write(target.whoAmI);
                    packet.WriteVector2(target.position);
                    packet.WriteVector2(target.velocity);
                    ModPacket netMessage = packet;
                    netMessage.Send();
                }
            }
            if (target.life < target.lifeMax)
            {
                target.life++;
            }
        }
Beispiel #3
0
        public static bool SummonBoss(Mod mod, Player player, int npcType, float tileDistance = 0)
        {
            if (IsSinglePlayer() || (IsMultiplayerClient() && IsSameClientOwner(player.whoAmI)))
            {
                Vector2 initialPosition = player.Center;
                float   randomAngle     = Main.rand.NextFloat(0, MathHelper.TwoPi);
                Vector2 offset          = randomAngle.ToRotationVector2() * tileDistance * 16f;
                Vector2 target          = new Vector2(initialPosition.X + offset.X, initialPosition.Y + offset.Y);
                if (IsSinglePlayer())
                {
                    int npcIndex = NewNPC(target.X, target.Y, npcType, center: true);
                    NPC npc      = Main.npc[npcIndex];
                    Main.NewText(Language.GetTextValue("Announcement.HasAwoken", npc.GivenOrTypeName), 175, 75, 255);
                    Main.PlaySound(SoundID.Roar, initialPosition, 0);
                }
                else
                {
                    ModPacket packet = mod.GetPacket();
                    packet.Write((byte)PacketMessageType.SpawnBoss);
                    packet.WriteVector2(initialPosition);
                    packet.WriteVector2(target);
                    packet.Write(npcType);
                    packet.Write(true);
                    packet.Send();
                }
            }

            return(true);
        }
Beispiel #4
0
        public override void OnHitPvp(Player target, int damage, bool crit)
        {
            Player player = Main.player[projectile.owner];

            if (projectile.velocity.Y * player.gravDir > 0 && player.velocity.Y * player.gravDir > 0 && Math.Abs(projectile.velocity.X) < 6 * projectile.scale)
            {
                player.velocity.Y     = Math.Abs(player.velocity.Y) < 15 * projectile.ai[0] ? -15 * projectile.ai[0] * player.gravDir : -player.velocity.Y;
                projectile.localAI[1] = 1;
            }
            if (projectile.ai[0] > 0.7f)
            {
                Main.PlaySound(42, (int)projectile.position.X, (int)projectile.position.Y, 208);
            }
            if (projectile.ai[0] >= 1)
            {
                Projectile.NewProjectile(target.Center, target.velocity, mod.ProjectileType("GrabThrow"), projectile.damage / 2, projectile.knockBack, projectile.owner, -1, target.whoAmI);
            }
            for (int i = 0; i < (int)(projectile.scale * projectile.scale * 40); i++)
            {
                Dust.NewDust(target.position, target.width, target.height, 1);
            }
            if (!target.noKnockback)
            {
                target.velocity += projectile.velocity / 10 * projectile.knockBack * projectile.ai[0] * projectile.ai[0];

                ModPacket packet = mod.GetPacket();
                packet.Write((byte)JoostModMessageType.Playerpos);
                packet.Write((byte)target.whoAmI);
                packet.WriteVector2(target.position);
                packet.WriteVector2(target.velocity + projectile.velocity / 10 * projectile.knockBack * projectile.ai[0] * projectile.ai[0]);
                ModPacket netMessage = packet;
                netMessage.Send(-1, -1);
            }
        }
Beispiel #5
0
 protected override void WritePacket(ModPacket packet)
 {
     packet.Write(currentCount);
     packet.Write(_gravityDirection);
     packet.WriteVector2(player.position);
     packet.WriteVector2(player.velocity);
 }
        public static void SendRegionCreate(int plr, string name)
        {
            ModPacket p = ServerSideCharacter.Instance.GetPacket();

            p.Write((int)SSCMessageType.RegionCreateCommand);
            p.Write((byte)plr);
            p.Write(name);
            p.WriteVector2(ServerSideCharacter.TilePos1);
            p.WriteVector2(ServerSideCharacter.TilePos2);
            p.Send();
        }
Beispiel #7
0
 protected override void WritePacket(ModPacket packet)
 {
     if (!InUse)
     {
         return;
     }
     if (Starting)
     {
         packet.WriteVector2(_targetStartPos);
         packet.WriteVector2(_playerStartPos);
     }
     packet.Write(BashEntity is NPC);
     packet.Write((ushort)(BashEntity?.whoAmI ?? ushort.MaxValue));
     packet.Write(BashAngle);
 }
        private void PerformAttack()
        {
            if (IsNotMultiplayerClient() && mode != States.Exit)
            {
                if (++fireTick >= FireRate)
                {
                    fireTick = 0;

                    Vector2 pVel = new Vector2(1, 0) * CoreLaser.Spd * regularAssaultDirection;

                    for (int i = 0; i < AttackVectors.Length; i++)
                    {
                        Projectile.NewProjectile(AttackVectors[i], pVel, ModContent.ProjectileType <CoreLaser>(),
                                                 BulletFinalDamage(CoreLaser.Dmg), BulletFinalKnockback(CoreLaser.Kb),
                                                 Main.myPlayer);
                    }

                    if (IsServer())
                    {
                        ModPacket packet = mod.GetPacket();
                        packet.Write((byte)PacketMessageType.BroadcastSound);
                        packet.Write((byte)SoundPacketType.Legacy);
                        packet.Write("Sounds/Enemies/BigCoreShoot");
                        packet.WriteVector2(npc.Center);
                        packet.Send();
                    }
                    else
                    {
                        Main.PlaySound(mod.GetLegacySoundSlot(SoundType.Custom, "Sounds/Enemies/BigCoreShoot"),
                                       npc.Center);
                    }
                }
            }
        }
Beispiel #9
0
        public static void SendGuardianMovementUpdate(int GuardianWhoAmID, int ToWho = -1, int FromWho = -1)
        {
            if (!MultiplayerActive || Main.netMode == 0 || !MainMod.ActiveGuardians.ContainsKey(GuardianWhoAmID))
            {
                return;
            }
            ModPacket     packet        = StartNewMessage(MessageIDs.GuardianMovementUpdate);
            TerraGuardian tg            = MainMod.ActiveGuardians[GuardianWhoAmID];
            BitsByte      firstControls = new BitsByte(tg.MoveUp, tg.MoveDown, tg.MoveLeft, tg.MoveRight, tg.Jump);

            packet.Write(GuardianWhoAmID);
            packet.WriteVector2(tg.Position);
            packet.WriteVector2(tg.Velocity);
            packet.Write(firstControls);
            packet.Send(ToWho, FromWho);
        }
        public override void RightClick(int i, int j)
        {
            Player player = Main.LocalPlayer;

            //QwertyMethods.ServerClientCheck();
            if (!NPC.AnyNPCs(mod.NPCType("FortressBoss")))
            {
                for (int b = 0; b < 58; b++)                                                                             // this searches every invintory slot
                {
                    if (player.inventory[b].type == mod.ItemType("FortressBossSummon") && player.inventory[b].stack > 0) //this checks if the slot has the valid item
                    {
                        if (Main.netMode == 0)
                        {
                            QwertyWorld.FortressBossQuotes();
                            int npcID = NPC.NewNPC(i * 16 + 400, j * 16, mod.NPCType("FortressBoss"));
                        }
                        else
                        {
                            ModPacket packet = mod.GetPacket();
                            packet.Write((byte)ModMessageType.DivineCall);
                            packet.WriteVector2(new Vector2(i * 16 + 400, j * 16));
                            packet.Send();
                        }



                        player.inventory[b].stack--;
                        break;
                    }
                }
            }
        }
Beispiel #11
0
        public override void SyncPlayer(int toWho, int fromWho, bool newPlayer)
        {
            ModPacket packet = mod.GetPacket();

            packet.Write((byte)ChensGradiusMod.PacketMessageType.GradiusModSyncPlayer);
            packet.Write((byte)player.whoAmI);
            packet.Write(isFreezing);
            packet.Write(rotateMode);
            packet.Write(revolveDirection);
            packet.Write(wasHolding);
            packet.Write(forceBase);
            packet.Write(needleForce);
            packet.Write(optionOne);
            packet.Write(optionTwo);
            packet.Write(optionThree);
            packet.Write(optionFour);
            packet.Write(normalOption);
            packet.Write(freezeOption);
            packet.Write(rotateOption);
            packet.Write(optionFlightPath.Count);
            for (int i = 0; i < optionFlightPath.Count; i++)
            {
                packet.WriteVector2(optionFlightPath[i]);
            }
            packet.Send(toWho, fromWho);
        }
Beispiel #12
0
        public static void SendGuardianHurt(int WhoAmID, int Damage, int Direction, bool Critical, string DeathMessage, int ToWho = -1, int FromWho = -1)
        {
            if (!MultiplayerActive || Main.netMode == 0 || !MainMod.ActiveGuardians.ContainsKey(WhoAmID))
            {
                return;
            }
            ModPacket     packet = StartNewMessage(MessageIDs.GuardianHurt);
            TerraGuardian tg     = MainMod.ActiveGuardians[WhoAmID];

            packet.Write(WhoAmID);
            packet.WriteVector2(tg.Position);
            packet.Write(Damage);
            packet.Write((sbyte)Direction);
            packet.Write(Critical);
            packet.Write(DeathMessage);
            byte DownState = 0;

            if (tg.Downed)
            {
                DownState = 3;
            }
            else if (tg.KnockedOutCold)
            {
                DownState = 2;
            }
            else if (tg.KnockedOut)
            {
                DownState = 1;
            }
            packet.Write(DownState);
            packet.Write(tg.HP);
            packet.Send(ToWho, FromWho);
        }
        public void RequestTeleport(int toWho, int fromWho, Vector2 mapPosition)
        {
            ModPacket packet = GetPacket(RequestTeleportMessage, fromWho);

            packet.WriteVector2(mapPosition);
            packet.Send();
        }
        public static void SendTeleport(int plr, Vector2 pos)
        {
            ModPacket p = ServerSideCharacter.Instance.GetPacket();

            p.Write((int)SSCMessageType.TeleportPalyer);
            p.WriteVector2(pos);
            p.Send(plr, -1);
        }
        public void SendYoshihiroToSpawn(int toWho, int fromWho, int NPCType, Vector2 position)
        {
            ModPacket packet = GetPacket(Yoshihiro, fromWho);

            packet.Write(NPCType);
            packet.WriteVector2(position);
            packet.Send(toWho, fromWho);
        }
Beispiel #16
0
        public void SendQuoteSound(int toWho, int fromWho, string soundsPath, Vector2 pos)
        {
            ModPacket packet = GetPacket(QuoteSounds, fromWho);

            packet.Write(soundsPath);
            packet.WriteVector2(pos);
            packet.Send(toWho, fromWho);
        }
        public static void UpdatePlayerPosition(int playerIndex, Vector2 position)
        {
            ModPacket packet = Instance.GetPacket();

            packet.Write((byte)ModMessageType.UpdatePlayerPosition);
            packet.Write((byte)playerIndex);
            packet.WriteVector2(position);
            packet.Send();
        }
        public static void UpdatePlayerVelocity(int playerIndex, Vector2 velocity)
        {
            ModPacket packet = Instance.GetPacket();

            packet.Write((byte)ModMessageType.UpdatePlayerVelocity);
            packet.Write((byte)playerIndex);
            packet.WriteVector2(velocity);
            packet.Send();
        }
Beispiel #19
0
        private void SendData(int type = -1, string name = "", bool boss = false, Vector2 position = default(Vector2))
        {
            ModPacket packet = mod.GetPacket();

            packet.Write(type);
            packet.Write(name);
            packet.Write(boss);
            packet.WriteVector2(position);
            packet.Send(256, -1);
        }
Beispiel #20
0
        public void PlaySoundInstance(int toWho, int fromWho, string soundsPath, SoundState state, Vector2 pos, int travelDistance)
        {
            ModPacket packet = GetPacket(SoundInstances, fromWho);

            packet.Write(soundsPath);
            packet.Write((int)state);
            packet.WriteVector2(pos);
            packet.Write(travelDistance);
            packet.Send(toWho, fromWho);
        }
Beispiel #21
0
        public override void AI()
        {
            if (npc.ai[3] < 1)
            {
                npc.velocity.X = npc.ai[0];
                npc.velocity.Y = npc.ai[1];
                npc.damage     = (int)npc.ai[2];
                npc.ai[3]      = 1;
                if (Main.netMode != 0)
                {
                    ModPacket packet = mod.GetPacket();
                    packet.Write((byte)JoostModMessageType.NPCpos);
                    packet.Write(npc.whoAmI);
                    packet.WriteVector2(npc.position);
                    packet.WriteVector2(npc.velocity);
                    ModPacket netMessage = packet;
                    netMessage.Send();
                }
                npc.netUpdate = true;
            }
            Dust.NewDustDirect(npc.position, npc.width, npc.height, DustID.Fire, -npc.velocity.X / 5, -npc.velocity.Y / 5, 100, default(Color), 2f + (Main.rand.Next(20) * 0.1f)).noGravity = true;
            npc.ai[3]++;
            bool colliding = (npc.ai[3] > 2 && (npc.oldVelocity.X != 0 && npc.velocity.X == 0) || (npc.oldVelocity.Y != 0 && npc.velocity.Y == 0));

            for (int i = 0; i < Main.maxNPCs && !colliding; i++)
            {
                NPC target = Main.npc[i];
                if (!target.friendly && !target.dontTakeDamage && npc.Hitbox.Intersects(target.Hitbox))
                {
                    colliding = true;
                    break;
                }
            }
            if (npc.ai[3] > 300 || colliding)
            {
                npc.life = 0;
                npc.HitEffect(0, 0);
                npc.checkDead();
            }
            npc.rotation  = (float)Math.Atan2(npc.velocity.Y, npc.velocity.X) + 1.57f;
            npc.lifeRegen = 0;
        }
Beispiel #22
0
        public override void PostUpdate()
        {
            if (player.whoAmI == Main.myPlayer && Main.netMode == NetmodeID.MultiplayerClient && Main.GameUpdateCount % 10 == 0)
            {
                ModPacket modPacket = mod.GetPacket();

                modPacket.Write((byte)0); //MessageId
                modPacket.WriteVector2(Main.screenPosition);

                modPacket.Send();
            }
        }
        public static Vector2 GetLocalCursor(int id)
        {
            LocalCursor[id] = Main.MouseWorld;

            if (Main.netMode == NetmodeID.MultiplayerClient)
            {
                ModPacket packet = instance.GetPacket();
                packet.Write((byte)ModMessageType.UpdateLocalCursor); // Message type, you would need to create an enum for this
                packet.Write((byte)id);
                packet.WriteVector2(LocalCursor[id]);
                packet.Send();
            }
            return(LocalCursor[id]);
        }
        public override bool PreNPCLoot()
        {
            bool success = true;

            for (int k = 0; k < 200; k++)
            {
                if (k != npc.whoAmI && Main.npc[k].active && (Main.npc[k].type == mod.NPCType("TerraSpirit2") || Main.npc[k].type == mod.NPCType("NegativeBlob2")) && Vector2.Distance(Main.npc[k].Center, npc.Center) < 160f)
                {
                    success = false;
                    break;
                }
            }
            if (success)
            {
                NPC.NewNPC((int)npc.Bottom.X, (int)npc.Bottom.Y, mod.NPCType("NegativeBlob2"), 1, npc.ai[0]);
            }
            else
            {
                Vector2 normal = new Vector2(-npc.velocity.Y, npc.velocity.X);
                if (Main.netMode == 0)
                {
                    var bullets = ((TerraSpirit2)Spirit.modNPC).bullets;
                    bullets.Add(new BulletNegative(npc.Center, npc.velocity));
                    bullets.Add(new BulletNegative(npc.Center, -npc.velocity));
                    bullets.Add(new BulletNegative(npc.Center, normal));
                    bullets.Add(new BulletNegative(npc.Center, -normal));
                }
                else
                {
                    ModPacket packet = mod.GetPacket();
                    packet.Write((byte)MessageType.BulletNegative);
                    packet.Write((byte)npc.ai[0]);
                    packet.Write((byte)4);
                    packet.WriteVector2(npc.Center);
                    packet.WriteVector2(npc.velocity);
                    packet.WriteVector2(npc.Center);
                    packet.WriteVector2(-npc.velocity);
                    packet.WriteVector2(npc.Center);
                    packet.WriteVector2(normal);
                    packet.WriteVector2(npc.Center);
                    packet.WriteVector2(-normal);
                    packet.Send();
                }
            }
            return(false);
        }
Beispiel #25
0
 public static void SpawnBoss(Player player, int type)
 {
     if (Main.netMode == 0)
     {
         int num7 = NPC.NewNPC((int)player.Center.X, (int)player.Center.Y - 2000, type);
         Main.NewText(Language.GetTextValue("Announcement.HasAwoken", Main.npc[num7].TypeName), 175, 75, 255, false);
     }
     else if (Main.netMode == 1)
     {
         ModPacket packet = QwertysRandomContent.Instance.GetPacket();
         packet.Write((byte)ModMessageType.SummonBoss);
         packet.WriteVector2(player.Center);
         packet.Write(type);
         packet.Send();
     }
 }
Beispiel #26
0
        public static void SendGuardianItemUseUpdate(int GuardianWhoAmID, int ToWho = -1, int FromWho = -1)
        {
            if (!MultiplayerActive || Main.netMode == 0 || !MainMod.ActiveGuardians.ContainsKey(GuardianWhoAmID))
            {
                return;
            }
            ModPacket     packet          = StartNewMessage(MessageIDs.GuardianItemUseUpdate);
            TerraGuardian tg              = MainMod.ActiveGuardians[GuardianWhoAmID];
            BitsByte      ActionPress     = new BitsByte(tg.Action, tg.OffHandAction);
            BitsByte      LastActionPress = new BitsByte(tg.LastAction, tg.LastOffHandAction);
            Vector2       MousePosition   = tg.AimDirection;

            packet.Write(GuardianWhoAmID);
            packet.Write(ActionPress);
            packet.Write(LastActionPress);
            packet.WriteVector2(MousePosition);
            packet.Write(tg.SelectedItem);
            packet.Write(tg.SelectedOffhand);
            packet.Send(ToWho, FromWho);
        }
        public override void PostUpdate()
        {
            if (player.active && isLeader)
            {
                for (int i = 0; i < Main.maxPlayers; i++)
                {
                    Player selectP = Main.player[i];
                    if (selectP.active && !selectP.dead && Vector2.Distance(player.Center, selectP.Center) > 3000f)
                    {
                        TeleportEffects(selectP, player);
                        selectP.Center = player.Center;

                        ModPacket packet = mod.GetPacket();
                        packet.Write((byte)PacketMessageType.TeleportBack);
                        packet.Write((byte)player.whoAmI);
                        packet.Write((byte)selectP.whoAmI);
                        packet.WriteVector2(player.Center);
                        packet.Send();
                    }
                }
            }
        }
        public static bool SummonBoss(Mod mod, Vector2 initialPosition, int npcType, float tileDistance = 0)
        {
            float   randomAngle = Main.rand.NextFloat(0, MathHelper.TwoPi);
            Vector2 offset      = randomAngle.ToRotationVector2() * tileDistance * 16f;
            Vector2 target      = new Vector2(initialPosition.X + offset.X, initialPosition.Y + offset.Y);
            int     npcIndex    = NewNPC(target.X, target.Y, npcType, center: true);
            NPC     npc         = Main.npc[npcIndex];

            Main.NewText(Language.GetTextValue("Announcement.HasAwoken", npc.GivenOrTypeName), 175, 75, 255);

            Main.PlaySound(SoundID.Roar, initialPosition, 0);
            if (!IsSinglePlayer())
            {
                ModPacket packet = mod.GetPacket();
                packet.Write((byte)PacketMessageType.BroadcastSound);
                packet.Write((ushort)SoundID.Roar);
                packet.WriteVector2(initialPosition);
                packet.Write((byte)0);
                packet.Send();
            }

            return(npc.active);
        }
        public override void HandlePacket(BinaryReader reader, int whoAmI)
        {
            ModMessageType msgType = (ModMessageType)reader.ReadByte();

            switch (msgType)
            {
            case ModMessageType.ArrowMessage:
                int  identity     = reader.ReadInt32();
                byte owner        = reader.ReadByte();
                int  realIdentity = Projectile.GetByUUID(owner, identity);
                if (realIdentity != -1)
                {
                    Main.projectile[realIdentity].GetGlobalProjectile <arrowHoming>().B4HomingArrow = true;
                }
                if (Main.netMode == 2)
                {
                    ModPacket packet = GetPacket();
                    packet.Write((byte)ModMessageType.ArrowMessage);
                    packet.Write(identity);
                    packet.Write(owner);
                    packet.Send();
                }
                break;

            case ModMessageType.FinnedRandomSwimMessage:

                int   identity2     = reader.ReadInt32();
                byte  owner2        = reader.ReadByte();
                float randomSwim    = reader.Read();
                int   realIdentity2 = Projectile.GetByUUID(owner2, identity2);

                if (realIdentity2 != -1)
                {
                    Main.projectile[realIdentity2].ai[1] = randomSwim;
                }

                if (Main.netMode == 2)
                {
                    ModPacket packet = GetPacket();
                    packet.Write((byte)ModMessageType.FinnedRandomSwimMessage);
                    packet.Write(identity2);
                    packet.Write(owner2);
                    packet.Write(randomSwim);
                    packet.Send();
                }
                break;

            case ModMessageType.ScaleMessage:

                int  identity3 = reader.ReadInt32();
                byte owner3    = reader.ReadByte();

                int realIdentity3 = Projectile.GetByUUID(owner3, identity3);

                if (realIdentity3 != -1)
                {
                    Main.projectile[realIdentity3].scale = 3;
                }

                if (Main.netMode == 2)
                {
                    ModPacket packet = GetPacket();
                    packet.Write((byte)ModMessageType.ScaleMessage);
                    packet.Write(identity3);
                    packet.Write(owner3);

                    packet.Send();
                }
                break;

            case ModMessageType.UpdateClassBools:
                int  identity4     = reader.ReadInt32();
                byte owner4        = reader.ReadByte();
                int  realIdentity4 = Projectile.GetByUUID(owner4, identity4);
                if (realIdentity4 != -1)
                {
                    BitsByte flags = reader.ReadByte();
                    Main.projectile[realIdentity4].melee  = flags[0];
                    Main.projectile[realIdentity4].ranged = flags[1];
                    Main.projectile[realIdentity4].magic  = flags[2];
                    Main.projectile[realIdentity4].minion = flags[3];
                    Main.projectile[realIdentity4].thrown = flags[4];
                    Main.projectile[realIdentity4].GetGlobalProjectile <MorphProjectile>().morph = flags[5];
                }
                if (Main.netMode == 2)
                {
                    UpdateProjectileClass(Main.projectile[realIdentity4]);
                }
                break;

            case ModMessageType.UpdateLocalCursor:
                byte    playerIndex = reader.ReadByte();
                Vector2 Cursor      = reader.ReadVector2();

                LocalCursor[playerIndex] = Cursor;
                if (Main.netMode == 2)
                {
                    ModPacket packet = GetPacket();
                    packet.Write((byte)ModMessageType.UpdateLocalCursor);     // Message type, you would need to create an enum for this
                    packet.Write(playerIndex);
                    packet.WriteVector2(Cursor);
                    packet.Send();
                }
                break;

            case ModMessageType.UpdatePlayerVelocity:
                byte    playerIndex2 = reader.ReadByte();
                Vector2 vel          = reader.ReadVector2();

                Main.player[playerIndex2].velocity = vel;
                if (Main.netMode == 2)
                {
                    UpdatePlayerVelocity(playerIndex2, vel);
                    NetMessage.SendData(MessageID.PlayerControls, -1, -1, null, playerIndex2);
                }
                break;

            case ModMessageType.UpdatePlayerPosition:
                byte    playerIndex3 = reader.ReadByte();
                Vector2 pos          = reader.ReadVector2();

                Main.player[playerIndex3].position = pos;

                if (Main.netMode == 2)
                {
                    UpdatePlayerPosition(playerIndex3, pos);
                    NetMessage.SendData(MessageID.PlayerControls, -1, -1, null, playerIndex3);
                }
                break;

            case ModMessageType.ProjectileAIUpdate:
                int   identity6     = reader.ReadInt32();
                byte  owner6        = reader.ReadByte();
                int   realIdentity6 = Projectile.GetByUUID(owner6, identity6);
                float ai0           = reader.ReadSingle();
                float ai1           = reader.ReadSingle();
                if (realIdentity6 != -1)
                {
                    Main.projectile[realIdentity6].ai[0] = ai0;
                    Main.projectile[realIdentity6].ai[1] = ai1;
                    if (Main.netMode == 2)
                    {
                        ProjectileAIUpdate(Main.projectile[realIdentity6]);
                    }
                }

                break;

            case ModMessageType.DivineCall:
                QwertyWorld.FortressBossQuotes();
                Vector2 summonAt = reader.ReadVector2();
                int     npcID    = NPC.NewNPC((int)summonAt.X, (int)summonAt.Y, NPCType("FortressBoss"));
                break;

            case ModMessageType.StartDinoEvent:
                QwertyWorld.DinoEvent     = true;
                QwertyWorld.DinoKillCount = 0;
                if (Main.netMode == NetmodeID.Server)
                {
                    NetMessage.SendData(MessageID.WorldData);     // Immediately inform clients of new world state.
                }

                break;
            }
        }
Beispiel #30
0
        public override bool PreAI()
        {
            Player  player = Main.player[projectile.owner];
            Vector2 origin = player.RotatedRelativePoint(player.MountedCenter, true);
            float   speed  = (55f / player.inventory[player.selectedItem].useTime) / player.meleeSpeed;

            projectile.localNPCHitCooldown = (int)(27 / speed);
            if (player.active && !player.dead && !player.noItems && !player.CCed)
            {
                if (Main.myPlayer == projectile.owner)
                {
                    float scaleFactor6 = 1f;
                    if (player.inventory[player.selectedItem].shoot == mod.ProjectileType("Stonefist"))
                    {
                        scaleFactor6 = player.inventory[player.selectedItem].shootSpeed * projectile.scale * ((projectile.ai[0] * 0.5f) + 1.75f);
                    }
                    Vector2 vector13 = Main.MouseWorld - origin;
                    vector13.Normalize();
                    if (vector13.HasNaNs())
                    {
                        vector13 = Vector2.UnitX * (float)player.direction;
                    }
                    vector13 *= scaleFactor6;
                    if (vector13.X != projectile.velocity.X || vector13.Y != projectile.velocity.Y)
                    {
                        projectile.netUpdate = true;
                    }
                    projectile.velocity = vector13;
                }
            }
            else
            {
                projectile.Kill();
            }
            Vector2 aim = projectile.velocity;

            aim.Normalize();

            if (projectile.soundDelay <= 0 && projectile.soundDelay > -10)
            {
                Main.PlaySound(42, (int)projectile.position.X, (int)projectile.position.Y, 216, 1, -0.3f);
                projectile.soundDelay = -10;
            }


            if (projectile.ai[1] == 1) //Grab
            {
                projectile.timeLeft = 3;
                projectile.ai[0]   += 0.2f * speed;
                Vector2 dir = projectile.velocity;
                dir.Normalize();
                dir = dir * 10f * (projectile.ai[1] + 0.75f) * speed;
                if (projectile.ai[0] > 2)
                {
                    projectile.ai[1]    = -1;
                    projectile.ai[0]    = -1;
                    projectile.timeLeft = 15;
                }
            }
            if (projectile.ai[1] == 2) //NPC
            {
                projectile.localAI[0] = 1;
                NPC target = Main.npc[(int)projectile.localAI[1]];
                if (player.ownedProjectileCounts[mod.ProjectileType("MobHook")] + player.ownedProjectileCounts[mod.ProjectileType("EnchantedMobHook")] > 0)
                {
                    for (int i = 0; i < Main.maxProjectiles; i++)
                    {
                        Projectile p = Main.projectile[i];
                        if (p.active && p.owner == projectile.owner && (p.type == mod.ProjectileType("MobHook") || p.type == mod.ProjectileType("EnchantedMobHook")))
                        {
                            p.Kill();
                            break;
                        }
                    }
                }
                if (target.active && target.life > 0)
                {
                    if (player.controlUseItem || projectile.localAI[0] == 2)
                    {
                        if (player.controlUseTile)
                        {
                            projectile.localAI[0] = 2;
                        }
                        else
                        {
                            projectile.ai[0] = 0;
                        }
                        player.itemRotation = (float)Math.Atan2(aim.Y * projectile.direction, aim.X * projectile.direction);
                        if (target.knockBackResist > 0)
                        {
                            target.position = projectile.Center + new Vector2(-target.width / 2, player.gravDir > 0 ? -target.height : 0);
                            target.GetGlobalNPC <NPCs.JoostGlobalNPC>().immunePlayer = player.whoAmI;
                            target.velocity  = player.velocity;
                            target.netUpdate = true;
                            if (projectile.timeLeft < 2)
                            {
                                target.velocity.X = player.direction * 4;
                                target.velocity.Y = player.gravDir * -2;
                                if (player.immuneTime < 10)
                                {
                                    player.immune        = true;
                                    player.immuneNoBlink = false;
                                    player.immuneTime    = 10;
                                }
                                projectile.ai[1]    = -1;
                                projectile.ai[0]    = -1;
                                projectile.timeLeft = 15;
                            }
                        }
                        else
                        {
                            JumpOff(player);
                        }
                    }
                    else
                    {
                        if (projectile.timeLeft < 3)
                        {
                            projectile.timeLeft = 3;
                        }
                        projectile.localAI[0] = 3;
                        if (target.knockBackResist > 0)
                        {
                            target.GetGlobalNPC <NPCs.JoostGlobalNPC>().immunePlayer = player.whoAmI;
                            float rot = -135 + (player.direction < 0 ? 90 : 0);
                            if (projectile.ai[0] > -1 && projectile.ai[0] <= 0)
                            {
                                player.bodyFrame.Y = player.bodyFrame.Height;
                                projectile.ai[0]  -= 0.1f * speed;
                            }
                            if (projectile.ai[0] <= -1)
                            {
                                projectile.ai[0] = 0.1f;
                                Main.PlaySound(42, (int)projectile.Center.X, (int)projectile.Center.Y, 214);
                            }
                            if (projectile.ai[0] > 0)
                            {
                                projectile.ai[0] += 0.4f * speed;
                                rot = (-135 + projectile.ai[0] * 45) * projectile.direction * 0.0174f + (player.direction < 0 ? 3.14f : 0);
                            }
                            projectile.velocity = rot.ToRotationVector2() * 8;
                            target.position     = projectile.Center + projectile.velocity + new Vector2(-target.width / 2, player.gravDir > 0 ? -target.height : 0);

                            if (projectile.ai[0] > 2)
                            {
                                target.velocity = player.velocity + aim * projectile.knockBack;
                                if (Main.netMode != NetmodeID.SinglePlayer)
                                {
                                    ModPacket packet = mod.GetPacket();
                                    packet.Write((byte)JoostModMessageType.NPCpos);
                                    packet.Write(target.whoAmI);
                                    packet.WriteVector2(target.position);
                                    packet.WriteVector2(target.velocity);
                                    ModPacket netMessage = packet;
                                    netMessage.Send(-1, player.whoAmI);
                                }
                                Projectile.NewProjectile(target.Center, target.velocity, mod.ProjectileType("GrabThrow"), projectile.damage, projectile.knockBack, projectile.owner, target.whoAmI);
                                if (player.immuneTime < 10)
                                {
                                    player.immune        = true;
                                    player.immuneNoBlink = false;
                                    player.immuneTime    = 10;
                                }
                                projectile.ai[1]    = 0;
                                projectile.ai[0]    = -1;
                                projectile.timeLeft = 15;
                                projectile.velocity = new Vector2(player.direction, 0);
                                projectile.Center   = origin;
                            }
                        }
                        else
                        {
                            JumpOff(player);
                        }
                    }
                }
                else
                {
                    projectile.Kill();
                }
            }
            if (projectile.ai[1] == 3) //Pvp
            {
                projectile.localAI[0] = 3;
                Player target = Main.player[(int)projectile.localAI[1]];
                if (target.active && target.statLife > 0)
                {
                    target.noKnockback = true;
                    if (player.controlUseItem || projectile.localAI[0] == 2)
                    {
                        target.position = projectile.Center + new Vector2(-target.width / 2, player.gravDir > 0 ? -target.height : 0);
                        if (player.controlUseTile)
                        {
                            projectile.localAI[0] = 2;
                        }
                        else
                        {
                            projectile.ai[0] = 0;
                        }
                        player.itemRotation = (float)Math.Atan2(aim.Y * projectile.direction, aim.X * projectile.direction);
                    }
                    else
                    {
                        if (projectile.timeLeft < 3)
                        {
                            projectile.timeLeft = 3;
                        }
                        projectile.localAI[0] = 1;
                        float rot = -135 + (player.direction < 0 ? 90 : 0);
                        if (projectile.ai[0] > -1 && projectile.ai[0] <= 0)
                        {
                            player.bodyFrame.Y = player.bodyFrame.Height;
                            projectile.ai[0]  -= 0.1f * speed;
                        }
                        if (projectile.ai[0] <= -1)
                        {
                            projectile.ai[0] = 0.1f;
                            Main.PlaySound(42, (int)projectile.Center.X, (int)projectile.Center.Y, 214);
                        }
                        if (projectile.ai[0] > 0)
                        {
                            projectile.ai[0] += 0.4f * speed;
                            rot = (-135 + projectile.ai[0] * 45) * projectile.direction * 0.0174f + (player.direction < 0 ? 3.14f : 0);
                        }
                        projectile.velocity = rot.ToRotationVector2() * 8;
                        target.position     = projectile.Center + projectile.velocity + new Vector2(-target.width / 2, player.gravDir > 0 ? -target.height : 0);
                        if (Main.myPlayer == projectile.owner)
                        {
                            aim = player.DirectionTo(Main.MouseWorld);
                            projectile.netUpdate = true;
                        }
                        if (projectile.ai[0] > 2)
                        {
                            target.velocity = player.velocity + aim * projectile.knockBack;
                            if (Main.netMode != NetmodeID.SinglePlayer)
                            {
                                ModPacket packet = mod.GetPacket();
                                packet.Write((byte)JoostModMessageType.Playerpos);
                                packet.Write((byte)target.whoAmI);
                                packet.WriteVector2(target.position);
                                packet.WriteVector2(player.velocity + aim * projectile.knockBack);
                                ModPacket netMessage = packet;
                                netMessage.Send(-1, -1);

                                ModPacket packet2 = mod.GetPacket();
                                packet2.Write((byte)JoostModMessageType.Playerpos);
                                packet2.Write((byte)projectile.owner);
                                packet2.WriteVector2(player.position);
                                packet2.WriteVector2(player.velocity);
                                ModPacket netMessage2 = packet2;
                                netMessage2.Send(-1, projectile.owner);
                            }
                            Projectile.NewProjectile(target.Center, player.velocity + aim * projectile.knockBack, mod.ProjectileType("GrabThrow"), projectile.damage * 2, projectile.knockBack, projectile.owner, -1, target.whoAmI);
                            if (player.immuneTime < 10)
                            {
                                player.immune        = true;
                                player.immuneNoBlink = false;
                                player.immuneTime    = 10;
                            }
                            projectile.ai[1]    = 0;
                            projectile.ai[0]    = -1;
                            projectile.timeLeft = 15;
                            projectile.velocity = new Vector2(player.direction, 0);
                            projectile.Center   = origin;
                        }
                    }
                }
                else
                {
                    projectile.Kill();
                }
            }
            if (projectile.localAI[0] == 2 && (projectile.ai[1] == 2 || projectile.ai[1] == 3)) //Pummel
            {
                projectile.localAI[0] = 2;
                if (projectile.ai[0] > -1 && projectile.ai[0] <= 0)
                {
                    projectile.ai[0] -= 0.05f * speed;
                }
                if (projectile.ai[0] <= -1)
                {
                    projectile.ai[0] = 0.05f;
                    Main.PlaySound(SoundID.Item18, projectile.Center);
                }
                if (projectile.ai[0] > 0)
                {
                    projectile.ai[0] += 0.1f * speed;
                }
                if (projectile.ai[0] > 1)
                {
                    projectile.ai[0]      = 0;
                    projectile.localAI[0] = 1;
                }
            }
            if (projectile.ai[1] == 1 || projectile.ai[1] == 0)
            {
                projectile.frame = 0;
            }
            else
            {
                projectile.frame = 1;
            }

            projectile.position        = (projectile.velocity + origin) - projectile.Size / 2f;
            projectile.rotation        = projectile.velocity.ToRotation() + 1.57f + (projectile.direction * 0.785f);
            projectile.spriteDirection = projectile.direction;
            if (projectile.localAI[0] != 3)
            {
                player.ChangeDir(projectile.direction);
            }
            //player.heldProj = projectile.whoAmI;
            player.itemTime      = 10;
            player.itemAnimation = 10;
            player.itemRotation  = (float)Math.Atan2((double)(projectile.velocity.Y * (float)projectile.direction), (double)(projectile.velocity.X * (float)projectile.direction));
            return(false);
        }