//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; } }
//0xA1 private static void OnMobileHits(Packet p) { Mobile mobile = Mobiles.Get(p.ReadUInt()); if (mobile == null) return; mobile.HitsMax = p.ReadUShort(); mobile.Hits = p.ReadUShort(); mobile.ProcessDelta(); }
//0xC1 private static void OnLocalizedMessage(Packet p) { Entity entity = Mobiles.Get(p.ReadUInt()); ushort graphic = p.ReadUShort(); MessageType type = (MessageType)p.ReadByte(); Hue hue = p.ReadUShort(); MessageFont font = (MessageFont)p.ReadUShort(); uint cliloc = p.ReadUInt(); string name = p.ReadASCII(30); string text = p.ReadUnicodeReversed(); if (entity != null) { entity.Graphic = graphic; entity.Name = name; entity.ProcessDelta(); } Chat.OnLocalizedMessage(entity, new UOMessageEventArgs(text, hue, type, font, cliloc)); }
//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(); }
//0x1D private static void OnRemoveObject(Packet p) { Serial serial = p.ReadUInt(); if (serial.IsItem) { if (RemoveItem(serial)) Items.ProcessDelta(); } else if (serial.IsMobile && RemoveMobile(serial)) { Items.ProcessDelta(); Mobiles.ProcessDelta(); } }
//0x78 private static void OnMobileIncoming(Packet p) { Mobile mobile = GetOrCreateMobile(p.ReadUInt()); mobile.Graphic = p.ReadUShort(); mobile.Position = new Position(p.ReadUShort(), p.ReadUShort(), p.ReadSByte()); mobile.Direction = (Direction)p.ReadByte(); mobile.Hue = p.ReadUShort(); mobile.Flags = (UOFlags)p.ReadByte(); mobile.Notoriety = (Notoriety)p.ReadByte(); uint itemSerial; while ((itemSerial = p.ReadUInt()) != 0) { Item item = GetOrCreateItem(itemSerial); ushort graphic = p.ReadUShort(); item.Layer = (Layer)p.ReadByte(); if (useNewMobileIncoming.Value || (graphic & 0x8000) != 0) item.Hue = p.ReadUShort(); if (useNewMobileIncoming.Value) item.Graphic = graphic; else if (usePostSAChanges.Value) item.Graphic = (ushort)(graphic & 0x7FFF); else item.Graphic = (ushort)(graphic & 0x3FFF); item.Amount = 1; item.Container = mobile; mobile.Items.Add(item); item.ProcessDelta(); Items.Add(item); } mobile.ProcessDelta(); if (Mobiles.Add(mobile)) Mobiles.ProcessDelta(); Items.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(); }
//0xA3 private static void OnMobileStamina(Packet p) { Mobile mobile = Mobiles.Get(p.ReadUInt()); if (mobile == null) return; mobile.StaminaMax = p.ReadUShort(); mobile.Stamina = p.ReadUShort(); mobile.ProcessDelta(); }
//0x77 private static void OnMobileMoving(Packet p) { Mobile mobile = GetOrCreateMobile(p.ReadUInt()); mobile.Graphic = p.ReadUShort(); mobile.Position = new Position(p.ReadUShort(), p.ReadUShort(), p.ReadSByte()); mobile.Direction = (Direction)p.ReadByte(); mobile.Hue = p.ReadUShort(); mobile.Flags = (UOFlags)p.ReadByte(); mobile.Notoriety = (Notoriety)p.ReadByte(); mobile.ProcessDelta(); if (Mobiles.Add(mobile)) Mobiles.ProcessDelta(); }