//0xBF private static void OnBigFuckingPacket(Packet p) { switch (p.ReadUShort()) { case 6://party switch (p.ReadByte()) { case 1: { byte count = p.ReadByte(); for (int i = 0; i < 10; i++) party[i] = i < count ? p.ReadUInt() : 0; } break; case 2: { byte count = p.ReadByte(); p.Skip(4); for (int i = 0; i < 10; i++) party[i] = i < count ? p.ReadUInt() : 0; } break; } break; case 8://map change Map = (Map)p.ReadByte(); MapChanged.Raise(); break; } }
//0x22 private static void OnMovementAccepted(Packet p) { p.Skip(1); Player.Notoriety = (Notoriety)p.ReadByte(); if (movementQueue.Count > 0) ProcessMove(movementQueue.Dequeue()); Player.ProcessDelta(); }
//0x21 private static void OnMovementRejected(Packet p) { movementQueue.Clear(); p.Skip(1); ushort x = p.ReadUShort(); ushort y = p.ReadUShort(); Player.Direction = (Direction)p.ReadByte(); Player.Position = new Position(x, y, p.ReadSByte()); Player.ProcessDelta(); }
//0x1B private static void OnLoginConfirm(Packet p) { Mobiles.Add(Player = new PlayerMobile(p.ReadUInt())); p.Skip(4);//unknown Player.Graphic = p.ReadUShort(); Player.Position = new Position(p.ReadUShort(), p.ReadUShort(), (sbyte)p.ReadUShort()); Player.Direction = (Direction)p.ReadByte(); //p.Skip(9);//unknown //p.ReadUShort();//map width //p.ReadUShort();//map height Player.ProcessDelta(); Mobiles.ProcessDelta(); }
//0x20 private static void OnPlayerUpdate(Packet p) { if (p.ReadUInt() != Player) throw new Exception("OnMobileStatus");//does this happen? movementQueue.Clear(); Player.Graphic = (ushort)(p.ReadUShort() + p.ReadSByte()); Player.Hue = p.ReadUShort(); Player.Flags = (UOFlags)p.ReadByte(); ushort x = p.ReadUShort(); ushort y = p.ReadUShort(); p.Skip(2);//unknown Player.Direction = (Direction)p.ReadByte(); Player.Position = new Position(x, y, p.ReadSByte()); OnPlayerMoved(); Player.ProcessDelta(); }
//0x17 private static void OnMobileHealthbar(Packet p) { Mobile mobile = Mobiles.Get(p.ReadUInt()); if (mobile == null) return; p.Skip(2);//unknown UOFlags flag; ushort type = p.ReadUShort(); if (type == 1) flag = UOFlags.Poisoned; else if (type == 2) flag = UOFlags.YellowBar; else return; mobile.Flags = p.ReadBool() ? mobile.Flags | flag : mobile.Flags & ~flag; mobile.ProcessDelta(); }
//0x11 private static void OnMobileStatus(Packet p) { Mobile mobile = Mobiles.Get(p.ReadUInt()); if (mobile == null) return; mobile.Name = p.ReadASCII(30); mobile.Hits = p.ReadUShort(); mobile.HitsMax = p.ReadUShort(); mobile.Renamable = p.ReadBool(); byte type = p.ReadByte(); if (type > 0) { Player.Female = p.ReadBool(); Player.Strength = p.ReadUShort(); Player.Dexterity = p.ReadUShort(); Player.Intelligence = p.ReadUShort(); Player.Stamina = p.ReadUShort(); Player.StaminaMax = p.ReadUShort(); Player.Mana = p.ReadUShort(); Player.ManaMax = p.ReadUShort(); Player.Gold = p.ReadUInt(); Player.ResistPhysical = p.ReadUShort(); Player.Weight = p.ReadUShort(); } if (type >= 5)//ML { Player.WeightMax = p.ReadUShort(); p.Skip(1); } if (type >= 2)//T2A p.Skip(2); if (type >= 3)//Renaissance { Player.Followers = p.ReadByte(); Player.FollowersMax = p.ReadByte(); } if (type >= 4)//AOS { Player.ResistFire = p.ReadUShort(); Player.ResistCold = p.ReadUShort(); Player.ResistPoison = p.ReadUShort(); Player.ResistEnergy = p.ReadUShort(); Player.Luck = p.ReadUShort(); Player.DamageMin = p.ReadUShort(); Player.DamageMax = p.ReadUShort(); Player.TithingPoints = p.ReadUInt(); } mobile.ProcessDelta(); }