private static void OnDropItemRequested(int client, PacketReader reader) { const int oldLen08 = 0x0E; const int newLen08 = 0x0F; if (reader.Size != oldLen08 && reader.Size != newLen08) return; int serial8 = reader.ReadInt32(); int x8 = reader.ReadInt16(); int y8 = reader.ReadInt16(); int z8 = reader.ReadSByte(); int container8; if (reader.Size == newLen08) reader.ReadByte(); // Grid location container8 = reader.ReadInt32(); OutgoingPackets.OnDropItemRequested(client, serial8, x8, y8, z8, container8); }
private static void OnTarget(int client, PacketReader reader) { byte type = reader.ReadByte(); IncomingPackets.OnTarget(client, type); }
private static void OnSkillsList(int client, PacketReader reader) { byte type = reader.ReadByte(); int id = reader.ReadInt16(); int value = reader.ReadInt16(); int baseValue = reader.ReadInt16(); LockStatus lockStatus = (LockStatus)reader.ReadByte(); int skillCap = 1000; // if (reader.Size != 11) // UOSteam doesn't send skillcap on changing locks in their UI skillCap = reader.ReadInt16(); // So we kludge it and default to 100 skillcap if (reader.Size == 11 || reader.Size == 13) // 11 from UOSteam on lock change { IncomingPackets.OnSkillUpdate(client, id, (float)value / 10, (float)baseValue / 10, lockStatus, (float)skillCap / 10); } else { SkillInfo si = new SkillInfo(); si.Value = (float)value / 10; si.BaseValue = (float)baseValue / 10; si.LockStatus = lockStatus; si.SkillCap = (float)skillCap / 10; si.ID = id - 1; List<SkillInfo> skillInfoList = new List<SkillInfo>(128); skillInfoList.Add(si); for (; ; ) { id = reader.ReadInt16(); if (id == 0) break; value = reader.ReadInt16(); baseValue = reader.ReadInt16(); lockStatus = (LockStatus)reader.ReadByte(); skillCap = reader.ReadInt16(); si = new SkillInfo(); si.Value = (float)value / 10; si.BaseValue = (float)baseValue / 10; si.LockStatus = lockStatus; si.SkillCap = (float)skillCap / 10; si.ID = id - 1; skillInfoList.Add(si); } IncomingPackets.OnSkillList(client, skillInfoList.ToArray()); } }
private static void OnSAWorldItem(int client, PacketReader reader) { reader.ReadInt16(); // WORD 0x01 byte type = reader.ReadByte(); // Data Type (0x00 = use TileData, 0x01 = use BodyData, 0x02 = use MultiData) int serialf3 = reader.ReadInt32(); Item itemf3 = new Item(serialf3); itemf3.ArtDataID = type; itemf3.ID = reader.ReadInt16(); itemf3.Direction = reader.ReadByte(); itemf3.Count = reader.ReadInt16(); reader.ReadInt16(); // Second Amount? itemf3.X = reader.ReadInt16(); itemf3.Y = reader.ReadInt16(); itemf3.Z = reader.ReadSByte(); itemf3.Light = reader.ReadByte(); itemf3.Hue = reader.ReadInt16(); itemf3.Flags = reader.ReadByte(); IncomingPackets.OnWorldItemAdded(client, itemf3); }
private static void OnMoveRejected(int client, PacketReader reader) { int sequence21 = reader.ReadByte(); int x21 = reader.ReadInt16(); int y21 = reader.ReadInt16(); int direction21 = reader.ReadByte(); int z21 = reader.ReadSByte(); IncomingPackets.OnMoveRejected(client, sequence21, x21, y21, z21, direction21); }
private static void OnMobileUpdated(int client, PacketReader reader) { int serial = reader.ReadInt32(); int id = reader.ReadInt16(); reader.ReadByte(); // BYTE 0x00; int hue = reader.ReadInt16(); int status = reader.ReadByte(); int x = reader.ReadInt16(); int y = reader.ReadInt16(); reader.ReadInt16(); // WORD 0x00; int direction = reader.ReadByte() & 0x07; int z = reader.ReadSByte(); IncomingPackets.OnMobileUpdated(client, serial, id, hue, status, x, y, z, direction); }
private static void OnMobileMoving(int client, PacketReader reader) { int serial77 = reader.ReadInt32(); int id77 = reader.ReadInt16(); int x77 = reader.ReadInt16(); int y77 = reader.ReadInt16(); int z77 = reader.ReadSByte(); int direction77 = reader.ReadByte() & 0x07; int hue77 = reader.ReadInt16(); int status77 = reader.ReadByte(); int noto77 = reader.ReadByte(); IncomingPackets.OnMobileMoving(client, serial77, id77, x77, y77, z77, direction77, hue77, status77, noto77); }
private static void OnMiscStatus(int client, PacketReader reader) { int subcommand = reader.ReadByte(); switch (subcommand) { case 0: // Bonded status (old) { int serial = reader.ReadInt32(); int dead = reader.ReadByte(); IncomingPackets.OnBondedStatus(client, serial, dead == 1); } break; case 2: // Stat lock info { int serial = reader.ReadInt32(); reader.ReadByte(); // BYTE 0x00 int lockFlags = reader.ReadByte(); IncomingPackets.OnStatLockStatus(client, serial, lockFlags); } break; case 5: //subcommand 5, KR / SA stat lock status, bonded status, mobile status { int serial = reader.ReadInt32(); int dead = reader.ReadByte(); int flags = reader.ReadByte(); if (flags == 0xFF) IncomingPackets.OnBondedStatus(client, serial, dead == 1); else IncomingPackets.OnStatLockStatus(client, serial, flags); } break; } }
private static void OnASCIIMessage(int client, PacketReader reader) { JournalEntry je1c = new JournalEntry(); je1c.serial = reader.ReadInt32(); je1c.id = reader.ReadInt16(); je1c.speechType = (JournalSpeech)reader.ReadByte(); je1c.speechHue = reader.ReadInt16(); je1c.speechFont = reader.ReadInt16(); je1c.name = reader.ReadString(30); je1c.text = reader.ReadString(); IncomingPackets.OnText(client, je1c); General.OnJournalEntry(client, je1c); }
private static void OnUnicodeSpeech( int client, PacketReader reader ) { byte messagetype = reader.ReadByte(); int color = reader.ReadInt16(); int font = reader.ReadInt16(); string lang = reader.ReadString( 4 ); string text; int[] keywords; if ((messagetype & 0xC0) != 0) { int value = reader.ReadInt16(); int count = ( value & 0xFFF0 ) >> 4; int hold = value & 0xF; if (count < 0 || count > 50) return; List<int> keyList = new List<int>(); for (int i = 0; i < count; ++i) { int speechID; if (( i & 1 ) == 0) { hold <<= 8; hold |= reader.ReadByte(); speechID = hold; hold = 0; } else { value = reader.ReadInt16(); speechID = ( value & 0xFFF0 ) >> 4; hold = value & 0xF; } if (!keyList.Contains( speechID )) keyList.Add( speechID ); } text = reader.ReadStringSafe(); keywords = keyList.ToArray(); } else { keywords = new int[0]; text = reader.ReadUnicodeStringSafe(); } OutgoingPackets.OnUnicodeSpeech( client, messagetype, color, font, lang, keywords, text ); }
private static void OnTargetSent(int client, PacketReader reader) { int type6c = reader.ReadByte(); int charSerial6c = reader.ReadInt32(); bool checkCrime6c = reader.ReadByte() == 1; int serial6c = reader.ReadInt32(); int x6c = reader.ReadUInt16(); int y6c = reader.ReadUInt16(); int z6c = reader.ReadUInt16(); int id6c = reader.ReadUInt16(); OutgoingPackets.OnTargetSent(client, type6c, checkCrime6c, serial6c, x6c, y6c, z6c, id6c, reader.Data); }
private static void OnStatLockChanged(int client, PacketReader reader) { int type = reader.ReadByte(); int value = reader.ReadByte(); OutgoingPackets.OnStatLockChanged(client, type, value); }
private static void OnSkillLockChanged(int client, PacketReader reader) { int skillID3a = reader.ReadInt16(); LockStatus lockStatus3a = (LockStatus)reader.ReadByte(); OutgoingPackets.OnSkillLockChanged(client, skillID3a, lockStatus3a); }
private static void OnMoveRequested(int client, PacketReader reader) { int direction2 = reader.ReadByte() & 0x07; int sequence2 = reader.ReadByte(); OutgoingPackets.OnMoveRequested(client, direction2, sequence2); }
private static void OnMapChanged(int client, PacketReader reader) { byte map = reader.ReadByte(); IncomingPackets.OnMapChanged(client, map); }
private static void OnAttackSwing(int client, PacketReader reader) { reader.ReadByte(); // BYTE 0x00; int attacker2f = reader.ReadInt32(); int defender2f = reader.ReadInt32(); IncomingPackets.OnAttackSwing(client, attacker2f, defender2f); }
private static void OnMapChanged(int client, PacketReader reader) { byte map = reader.ReadByte(); IncomingPackets.OnMapChanged(client, map); }
private static void OnCharacterList(int client, PacketReader reader) { byte count = reader.ReadByte(); string[] charsa9 = new string[count]; for (int i = 0; i < count; i++) { charsa9[i] = reader.ReadString(30); reader.ReadString(30); // Password } IncomingPackets.OnCharacterList(client, charsa9); }
private static void OnMobileIncoming(int client, PacketReader reader) { int serial78 = reader.ReadInt32(); ItemCollection container78 = new ItemCollection(serial78, 125); Mobile mob78 = new Mobile(serial78, client); mob78.myID = reader.ReadInt16(); mob78.myX = reader.ReadInt16(); mob78.myY = reader.ReadInt16(); mob78.myZ = reader.ReadSByte(); mob78.myDirection = reader.ReadByte() & 0x07; mob78.myHue = reader.ReadInt16(); mob78.myStatus = reader.ReadByte(); mob78.myNotoriety = reader.ReadByte(); Item item; for (; ; ) { int itemSerial = reader.ReadInt32(); if (itemSerial == 0) break; item = new Item(itemSerial); item.Owner = serial78; item.ID = reader.ReadInt16(); item.Layer = (Layer)reader.ReadByte(); ClientInfo ci; ClientInfoCollection.GetClient(client, out ci); if (ci.UseNewMobileIncoming) { item.myHue = reader.ReadInt16(); } else { if ((item.myID & 0x8000) != 0) { item.myID ^= 0x8000; item.myHue = reader.ReadInt16(); } } container78.Add( item ); } IncomingPackets.OnEquippedMobAdded(client, mob78, container78); }
private static void OnContainerContents(int client, PacketReader reader) { if (reader.Size == 5) return; bool oldStyle = false; int count = reader.ReadInt16(); if (((reader.Size - 5) / 20) != count) oldStyle = true; ItemCollection container = null; for (int i = 0; i < count; i++) { int serial = reader.ReadInt32(); int id = reader.ReadInt16(); reader.ReadByte(); // Item ID Offset int amount = reader.ReadInt16(); int x = reader.ReadInt16(); int y = reader.ReadInt16(); int grid = 0; if (!oldStyle) grid = reader.ReadByte(); int containerSerial = reader.ReadInt32(); int hue = reader.ReadInt16(); if (container == null) container = new ItemCollection(client, containerSerial, count); Item item3c = new Item(serial, containerSerial); item3c.ID = id; item3c.Count = amount; item3c.Hue = hue; item3c.Grid = grid; item3c.X = x; item3c.Y = y; container.Add(item3c); } if (container != null) IncomingPackets.OnContainerContents(client, container); }
private static void OnMobileStatus(int client, PacketReader reader) { int length11 = reader.Size; int serial = reader.ReadInt32(); string name = reader.ReadString(30); int hits = reader.ReadInt16(); int maxHits = reader.ReadInt16(); reader.ReadByte(); // Allow Name Change byte features = reader.ReadByte(); int sex = 2; if (length11 > 43) sex = reader.ReadByte(); if (length11 <= 44) { IncomingPackets.OnShortStatus(client, serial, name, hits, maxHits, sex); } else { PlayerStatus ps = new PlayerStatus(); ps.Name = name; ps.Health = hits; ps.MaxHealth = maxHits; ps.Sex = sex; ps.Features = features; ps.Str = reader.ReadInt16(); ps.Dex = reader.ReadInt16(); ps.Int = reader.ReadInt16(); ps.Stamina = reader.ReadInt16(); ps.MaxStamina = reader.ReadInt16(); ps.Mana = reader.ReadInt16(); ps.MaxMana = reader.ReadInt16(); ps.Gold = reader.ReadInt32(); ps.PhysicalResist = reader.ReadInt16(); ps.Weight = reader.ReadInt16(); switch (features) { case 3: ps.StatCap = reader.ReadInt16(); ps.Followers = reader.ReadByte(); ps.MaxFollowers = reader.ReadByte(); break; case 4: ps.StatCap = reader.ReadInt16(); ps.Followers = reader.ReadByte(); ps.MaxFollowers = reader.ReadByte(); ps.FireResist = reader.ReadInt16(); ps.ColdResist = reader.ReadInt16(); ps.PoisonResist = reader.ReadInt16(); ps.EnergyResist = reader.ReadInt16(); ps.Luck = reader.ReadInt16(); ps.MinDamage = reader.ReadInt16(); ps.MaxDamage = reader.ReadInt16(); ps.TithingPoints = reader.ReadInt32(); break; case 5: ps.MaxWeight = reader.ReadInt16(); ps.Race = reader.ReadByte(); ps.StatCap = reader.ReadInt16(); ps.Followers = reader.ReadByte(); ps.MaxFollowers = reader.ReadByte(); ps.FireResist = reader.ReadInt16(); ps.ColdResist = reader.ReadInt16(); ps.PoisonResist = reader.ReadInt16(); ps.EnergyResist = reader.ReadInt16(); ps.Luck = reader.ReadInt16(); ps.MinDamage = reader.ReadInt16(); ps.MaxDamage = reader.ReadInt16(); ps.TithingPoints = reader.ReadInt32(); break; case 6: ps.MaxWeight = reader.ReadInt16(); ps.Race = reader.ReadByte(); ps.StatCap = reader.ReadInt16(); ps.Followers = reader.ReadByte(); ps.MaxFollowers = reader.ReadByte(); ps.FireResist = reader.ReadInt16(); ps.ColdResist = reader.ReadInt16(); ps.PoisonResist = reader.ReadInt16(); ps.EnergyResist = reader.ReadInt16(); ps.Luck = reader.ReadInt16(); ps.MinDamage = reader.ReadInt16(); ps.MaxDamage = reader.ReadInt16(); ps.TithingPoints = reader.ReadInt32(); ps.MaxPhysicalResist = reader.ReadInt16(); ps.MaxFireResist = reader.ReadInt16(); ps.MaxColdResist = reader.ReadInt16(); ps.MaxPoisonResist = reader.ReadInt16(); ps.MaxEnergyResist = reader.ReadInt16(); ps.DefenseChanceIncrease = reader.ReadInt16(); reader.ReadInt16(); ps.HitChanceIncrease = reader.ReadInt16(); ps.SwingSpeedIncrease = reader.ReadInt16(); ps.DamageIncrease = reader.ReadInt16(); ps.LowerReagentCost = reader.ReadInt16(); ps.SpellDamageIncrease = reader.ReadInt16(); ps.FasterCastRecovery = reader.ReadInt16(); ps.FasterCasting = reader.ReadInt16(); ps.LowerManaCost = reader.ReadInt16(); break; } IncomingPackets.OnLongStatus(client, serial, ps); } }
private static void OnContextMenu(int client, PacketReader reader) { int type = reader.ReadInt16(); int serial = reader.ReadInt32(); int len = reader.ReadByte(); ContextEntry[] ce = new ContextEntry[len]; int entry, cliloc, flags, hue; switch (type) { case 1: // Old Type for (int x = 0; x < len; x++) { entry = reader.ReadInt16(); cliloc = reader.ReadInt16() + 3000000; flags = reader.ReadInt16(); hue = 0; if ((flags & 0x20) == 0x20) hue = reader.ReadInt16(); string text = Cliloc.GetProperty(cliloc); ce[x] = new ContextEntry(client, entry, serial, text, flags, hue); } IncomingPackets.OnContextMenu(client, ce); break; case 2: // KR -> SA3D -> 2D post 7.0.0.0 for (int x = 0; x < len; x++) { cliloc = reader.ReadInt32(); entry = reader.ReadInt16(); flags = reader.ReadInt16(); hue = 0; if ((flags & 0x20) == 0x20) hue = reader.ReadInt16(); string text = Cliloc.GetProperty(cliloc); ce[x] = new ContextEntry(client, entry, serial, text, flags, hue); } IncomingPackets.OnContextMenu(client, ce); break; } }
private static void OnMoveAccepted(int client, PacketReader reader) { int sequence22 = reader.ReadByte(); int status22 = reader.ReadByte(); IncomingPackets.OnMoveAccepted(client, sequence22, status22); }
private static void OnInitializePlayer(int client, PacketReader reader) { int serial = reader.ReadInt32(); PlayerMobile mobile = new PlayerMobile(serial, client); reader.ReadInt32(); // DWORD 0 mobile.myID = reader.ReadInt16(); mobile.myX = reader.ReadInt16(); mobile.myY = reader.ReadInt16(); mobile.myZ = reader.ReadInt16(); mobile.myDirection = reader.ReadByte(); IncomingPackets.OnPlayerInitialized(client, mobile); }
private static void OnPartyCommand(int client, PacketReader reader) { int subcommand = reader.ReadByte(); switch (subcommand) { case 4: // Party Chat JournalEntry jebf = new JournalEntry(); jebf.serial = reader.ReadInt32(); jebf.text = reader.ReadUnicodeString(); IncomingPackets.OnPartyText(client, jebf); General.OnJournalEntry(client, jebf); break; } }
private static void OnItemAddedToContainer(int client, PacketReader reader) { const int expectedLen25a = 0x14; const int expectedLen25b = 0x15; if (reader.Size != expectedLen25a && reader.Size != expectedLen25b) return; int serial25 = reader.ReadInt32(); int id25 = reader.ReadInt16(); reader.ReadByte(); int count25 = reader.ReadInt16(); int x = reader.ReadInt16(); int y = reader.ReadInt16(); if (reader.Size == expectedLen25b) reader.ReadByte(); // BYTE Grid Location int containerSerial25 = reader.ReadInt32(); int hue25 = reader.ReadInt16(); Item item25 = new Item(serial25, containerSerial25); item25.ID = id25; item25.Count = count25; item25.Hue = hue25; item25.X = x; item25.Y = y; IncomingPackets.OnItemAddedToContainer(client, item25); }
private static void OnServerList(int client, PacketReader reader) { reader.ReadByte(); // BYTE 0x00 int count = reader.ReadInt16(); ServerInfo[] si = new ServerInfo[count]; for (int i = 0; i < count; i++) { reader.ReadInt16(); // index si[i] = new ServerInfo(); si[i].Name = reader.ReadString(32); si[i].PercentFull = reader.ReadByte(); si[i].Timezone = reader.ReadByte(); si[i].IP = reader.ReadUInt32(); } IncomingPackets.OnServerList(client, si); }
private static void OnItemEquipped(int client, PacketReader reader) { int serial = reader.ReadInt32(); int id = reader.ReadInt16(); reader.ReadByte(); // BYTE 0x00 int layer = reader.ReadByte(); int mobileSerial = reader.ReadInt32(); int hue = reader.ReadInt16(); IncomingPackets.OnItemEquipped(client, serial, id, (Layer)layer, mobileSerial, hue); }
private static void OnSound(int client, PacketReader reader) { byte flags = reader.ReadByte(); int effect54 = reader.ReadInt16(); int vol54 = reader.ReadInt16(); int x54 = reader.ReadInt16(); int y54 = reader.ReadInt16(); int z54 = reader.ReadInt16(); IncomingPackets.OnSound(client, flags, effect54, vol54, x54, y54, z54); }
private static void OnLocalizedText(int client, PacketReader reader) { JournalEntry jec1 = new JournalEntry(); jec1.serial = reader.ReadInt32(); jec1.id = reader.ReadInt16(); jec1.speechType = (JournalSpeech)reader.ReadByte(); if (jec1.speechType == JournalSpeech.Yell) { Log.LogDataMessage(client, reader.Data, "Incoming encoded C1 packet:\r\n"); return; } jec1.speechHue = reader.ReadInt16(); jec1.speechFont = reader.ReadInt16(); int messagec1 = reader.ReadInt32(); jec1.name = reader.ReadString(30); //TODO: Fix the below two lines to use reader.ReadUnicodeString(); string[] argumentsc1 = UnicodeEncoding.Unicode.GetString(reader.Data, 48, reader.Size - 50).Split('\t'); jec1.text = Cliloc.GetLocalString(messagec1, argumentsc1); IncomingPackets.OnLocalizedText(client, jec1); General.OnJournalEntry(client, jec1); }
private static void OnUnicodeText(int client, PacketReader reader) { JournalEntry jeae = new JournalEntry(); jeae.serial = reader.ReadInt32(); jeae.id = reader.ReadInt16(); jeae.speechType = (JournalSpeech)reader.ReadByte(); jeae.speechHue = reader.ReadInt16(); jeae.speechFont = reader.ReadInt16(); jeae.speechLanguage = reader.ReadString(4); jeae.name = reader.ReadString(30); jeae.text = reader.ReadUnicodeString(); IncomingPackets.OnUnicodeText(client, jeae); General.OnJournalEntry(client, jeae); }
private static void OnMobileStatus(int client, PacketReader reader) { int length11 = reader.Size; int serial = reader.ReadInt32(); string name = reader.ReadString(30); int hits = reader.ReadInt16(); int maxHits = reader.ReadInt16(); reader.ReadByte(); // Allow Name Change byte features = reader.ReadByte(); int sex = 2; if (length11 > 43) { sex = reader.ReadByte(); } if (length11 <= 44) { IncomingPackets.OnShortStatus(client, serial, name, hits, maxHits, sex); } else { PlayerStatus ps = new PlayerStatus(); ps.Name = name; ps.Health = hits; ps.MaxHealth = maxHits; ps.Sex = sex; ps.Features = features; ps.Str = reader.ReadInt16(); ps.Dex = reader.ReadInt16(); ps.Int = reader.ReadInt16(); ps.Stamina = reader.ReadInt16(); ps.MaxStamina = reader.ReadInt16(); ps.Mana = reader.ReadInt16(); ps.MaxMana = reader.ReadInt16(); ps.Gold = reader.ReadInt32(); ps.PhysicalResist = reader.ReadInt16(); ps.Weight = reader.ReadInt16(); switch (features) { case 3: ps.StatCap = reader.ReadInt16(); ps.Followers = reader.ReadByte(); ps.MaxFollowers = reader.ReadByte(); break; case 4: ps.StatCap = reader.ReadInt16(); ps.Followers = reader.ReadByte(); ps.MaxFollowers = reader.ReadByte(); ps.FireResist = reader.ReadInt16(); ps.ColdResist = reader.ReadInt16(); ps.PoisonResist = reader.ReadInt16(); ps.EnergyResist = reader.ReadInt16(); ps.Luck = reader.ReadInt16(); ps.MinDamage = reader.ReadInt16(); ps.MaxDamage = reader.ReadInt16(); ps.TithingPoints = reader.ReadInt32(); break; case 5: ps.MaxWeight = reader.ReadInt16(); ps.Race = reader.ReadByte(); ps.StatCap = reader.ReadInt16(); ps.Followers = reader.ReadByte(); ps.MaxFollowers = reader.ReadByte(); ps.FireResist = reader.ReadInt16(); ps.ColdResist = reader.ReadInt16(); ps.PoisonResist = reader.ReadInt16(); ps.EnergyResist = reader.ReadInt16(); ps.Luck = reader.ReadInt16(); ps.MinDamage = reader.ReadInt16(); ps.MaxDamage = reader.ReadInt16(); ps.TithingPoints = reader.ReadInt32(); break; case 6: ps.MaxWeight = reader.ReadInt16(); ps.Race = reader.ReadByte(); ps.StatCap = reader.ReadInt16(); ps.Followers = reader.ReadByte(); ps.MaxFollowers = reader.ReadByte(); ps.FireResist = reader.ReadInt16(); ps.ColdResist = reader.ReadInt16(); ps.PoisonResist = reader.ReadInt16(); ps.EnergyResist = reader.ReadInt16(); ps.Luck = reader.ReadInt16(); ps.MinDamage = reader.ReadInt16(); ps.MaxDamage = reader.ReadInt16(); ps.TithingPoints = reader.ReadInt32(); ps.MaxPhysicalResist = reader.ReadInt16(); ps.MaxFireResist = reader.ReadInt16(); ps.MaxColdResist = reader.ReadInt16(); ps.MaxPoisonResist = reader.ReadInt16(); ps.MaxEnergyResist = reader.ReadInt16(); ps.DefenseChanceIncrease = reader.ReadInt16(); reader.ReadInt16(); ps.HitChanceIncrease = reader.ReadInt16(); ps.SwingSpeedIncrease = reader.ReadInt16(); ps.DamageIncrease = reader.ReadInt16(); ps.LowerReagentCost = reader.ReadInt16(); ps.SpellDamageIncrease = reader.ReadInt16(); ps.FasterCastRecovery = reader.ReadInt16(); ps.FasterCasting = reader.ReadInt16(); ps.LowerManaCost = reader.ReadInt16(); break; } IncomingPackets.OnLongStatus(client, serial, ps); } }