/// <summary>
 /// Updates the "other" character (The character from local players list).
 /// </summary>
 /// <param name="character">The "other" character to update.</param>
 /// <param name="mainPacket">The main packet for appending required data.</param>
 private static void UpdateMovement(Character character, PacketComposer mainPacket)
 {
     if (character.Sprites.PrimarySprite == -1)
     {
         if (character.UpdateFlags.UpdateRequired)
         {
             mainPacket.AppendBits(1, 1);
             mainPacket.AppendBits(2, 0);
         }
         else
         {
             mainPacket.AppendBits(1, 0);
         }
     }
     else if (character.Sprites.SecondarySprite == -1)
     {
         mainPacket.AppendBits(1, 1);
         mainPacket.AppendBits(2, 1);
         mainPacket.AppendBits(3, character.Sprites.PrimarySprite);
         mainPacket.AppendBits(1, character.UpdateFlags.UpdateRequired ? 1 : 0);
     }
     else
     {
         mainPacket.AppendBits(1, 1);
         mainPacket.AppendBits(2, 2);
         mainPacket.AppendBits(3, character.Sprites.PrimarySprite);
         mainPacket.AppendBits(3, character.Sprites.SecondarySprite);
         mainPacket.AppendBits(1, character.UpdateFlags.UpdateRequired ? 1 : 0);
     }
 }
 /// <summary>
 /// Updates "this" character (The character based upon for the local players list).
 /// </summary>
 /// <param name="character">The character to update.</param>
 /// <param name="mainPacket">The main packet for appending required data.</param>
 private static void UpdateThisMovement(Character character, PacketComposer mainPacket)
 {
     if (character.UpdateFlags.Teleporting)
     {
         mainPacket.AppendBits(1, 1);
         mainPacket.AppendBits(2, 3);
         mainPacket.AppendBits(7, character.Location.GetLocalX(character.UpdateFlags.LastRegion));
         mainPacket.AppendBits(1, 1);
         mainPacket.AppendBits(2, character.Location.Z);
         mainPacket.AppendBits(1, character.UpdateFlags.UpdateRequired ? 1 : 0);
         mainPacket.AppendBits(7, character.Location.GetLocalY(character.UpdateFlags.LastRegion));
     }
     else
     {
         if (character.Sprites.PrimarySprite == -1)
         {
             mainPacket.AppendBits(1, character.UpdateFlags.UpdateRequired ? 1 : 0);
             if (character.UpdateFlags.UpdateRequired)
             {
                 mainPacket.AppendBits(2, 0);
             }
         }
         else
         {
             if (character.Sprites.SecondarySprite != -1)
             {
                 mainPacket.AppendBits(1, 1);
                 mainPacket.AppendBits(2, 2);
                 mainPacket.AppendBits(3, character.Sprites.PrimarySprite);
                 mainPacket.AppendBits(3, character.Sprites.SecondarySprite);
                 mainPacket.AppendBits(1, character.UpdateFlags.UpdateRequired ? 1 : 0);
             }
             else
             {
                 mainPacket.AppendBits(1, 1);
                 mainPacket.AppendBits(2, 1);
                 mainPacket.AppendBits(3, character.Sprites.PrimarySprite);
                 mainPacket.AppendBits(1, character.UpdateFlags.UpdateRequired ? 1 : 0);
             }
         }
     }
 }
        /// <summary>
        /// Adds a new character to the current character's client.
        /// </summary>
        /// <param name="character">The current character.</param>
        /// <param name="other">The character to add.</param>
        /// <param name="mainPacket">The packet to write the data to.</param>
        private static void AddNewCharacter(Character character, Character other, PacketComposer mainPacket)
        {
            mainPacket.AppendBits(11, other.Index);
            int xPos = other.Location.X - character.Location.X;
            int yPos = other.Location.Y - character.Location.Y;

            if (xPos < 0)
            {
                xPos += 32;
            }
            if (yPos < 0)
            {
                yPos += 32;
            }

            mainPacket.AppendBits(5, xPos);
            mainPacket.AppendBits(1, 1);
            mainPacket.AppendBits(3, 1);
            mainPacket.AppendBits(1, 1);
            mainPacket.AppendBits(5, yPos);
        }
示例#4
0
 /// <summary>
 /// Updates an npc's movement.
 /// </summary>
 /// <param name="npc">The npc to update movement for.</param>
 /// <param name="mainPacket">The packet composer to append bits to.</param>
 private static void UpdateMovement(Npc npc, PacketComposer mainPacket)
 {
     if (npc.Sprite == -1)
     {
         if (npc.UpdateFlags.UpdateRequired)
         {
             mainPacket.AppendBits(1, 1);
             mainPacket.AppendBits(2, 0);
         }
         else
         {
             mainPacket.AppendBits(1, 0);
         }
     }
     else
     {
         mainPacket.AppendBits(1, 1);
         mainPacket.AppendBits(2, 1);
         mainPacket.AppendBits(3, DirectionUtilities.SCDirectionTranslation[npc.Sprite]);
         mainPacket.AppendBits(1, npc.UpdateFlags.UpdateRequired ? 1 : 0);
     }
 }
示例#5
0
        /// <summary>
        /// Adds a new npc to the character's client.
        /// </summary>
        /// <param name="character">The client to add npc for.</param>
        /// <param name="npc">The npc to add.</param>
        /// <param name="mainPacket">The packet composer to append bits to.</param>
        public static void AddNewNpc(Character character, Npc npc, PacketComposer mainPacket)
        {
            mainPacket.AppendBits(15, npc.Index);
            mainPacket.AppendBits(14, npc.CacheIndex);
            mainPacket.AppendBits(1, npc.UpdateFlags.UpdateRequired ? 1 : 0);
            int xPos = npc.Location.X - character.Location.X;
            int yPos = npc.Location.Y - character.Location.Y;

            if (xPos < 0)
            {
                xPos += 32;
            }
            if (yPos < 0)
            {
                yPos += 32;
            }

            mainPacket.AppendBits(5, yPos);
            mainPacket.AppendBits(5, xPos);
            mainPacket.AppendBits(3, 0);
            mainPacket.AppendBits(1, 1);
        }