public SmoothMovement(BaseSmoothMulti multi, DynamicComponentList objectsToMove) : base(0xF6) { var length = (short)(3 + 15 + (objectsToMove.Count * 10)); EnsureCapacity(length); length = (short)(((length & 0xff) << 8) | ((length >> 8) & 0xff)); //Hungarian notation used to be compatible with the core code m_Stream.Seek(1, SeekOrigin.Begin); m_Stream.Write(length); m_Stream.Write((int)multi.Serial); m_Stream.Write((byte)multi.Speed); m_Stream.Write((byte)multi.Moving); m_Stream.Write((byte)multi.Facing); m_Stream.Write((short)multi.X); m_Stream.Write((short)multi.Y); m_Stream.Write((short)multi.Z); m_Stream.Write((short)0); int count = 0; //Safety check : avoiding client stack overflow if (multi != null && multi.ContainedObjects != null) { multi.ContainedObjects.Remove(multi); } objectsToMove.ForEachObject(onBoard => { m_Stream.Write((int)onBoard.Serial); m_Stream.Write((short)onBoard.X); m_Stream.Write((short)onBoard.Y); m_Stream.Write((short)onBoard.Z); ++count; }, onBoard => { m_Stream.Write((int)onBoard.Serial); m_Stream.Write((short)onBoard.X); m_Stream.Write((short)onBoard.Y); m_Stream.Write((short)onBoard.Z); ++count; }); m_Stream.Seek(16, System.IO.SeekOrigin.Begin); m_Stream.Write((short)count); }
public ContainerMultiList(BaseSmoothMulti multi, DynamicComponentList objectsOnBoard) : base(0xF7) { EnsureCapacity(5 + objectsOnBoard.Count * 26); m_Stream.Write((short)objectsOnBoard.Count); new WorldItemHS(multi, m_Stream); objectsOnBoard.ForEachObject( item => new WorldItemHS(item, m_Stream), mob => { if (mob.Hidden == false) new WorldItemHS(mob, m_Stream); } ); }
public SmoothMovement(BaseSmoothMulti multi, DynamicComponentList objectsToMove) : base(0xF6) { EnsureCapacity(18 + objectsToMove.Count * 10); m_Stream.Write((int)multi.Serial); m_Stream.Write((byte)multi.CurrentSpeed); m_Stream.Write((byte)multi.Moving); m_Stream.Write((byte)multi.Facing); m_Stream.Write((short)multi.X); m_Stream.Write((short)multi.Y); m_Stream.Write((short)multi.Z); m_Stream.Write((short)(objectsToMove.Count)); objectsToMove.ForEachObject(onBoard => { m_Stream.Write((int)onBoard.Serial); m_Stream.Write((short)onBoard.X); m_Stream.Write((short)onBoard.Y); m_Stream.Write((short)onBoard.Z); }, onBoard => { m_Stream.Write((int)onBoard.Serial); m_Stream.Write((short)onBoard.X); m_Stream.Write((short)onBoard.Y); m_Stream.Write((short)onBoard.Z); } ); }