/// <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); }
/// <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); } }
/// <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); }