public void ShardList(PacketReader pvSrc) { pvSrc.ReadByte(); int num = pvSrc.ReadInt16(); if (num > 0) { int port = this.m_Server.Port; switch (port) { case 0x1e5f: case 0x1e60: port = 0x1389; break; } for (int i = 0; i < num; i++) { int index = pvSrc.ReadInt16(); string name = pvSrc.ReadString(0x20); int percentFull = pvSrc.ReadByte(); int timeZone = pvSrc.ReadSByte(); IPAddress address = new IPAddress((long)pvSrc.ReadUInt32()); if (this.m_Shard == null) { ShardProfile profile = null; for (int j = 0; (profile == null) && (j < this.m_Account.Shards.Length); j++) { if (this.m_Account.Shards[j].Name == name) { profile = this.m_Account.Shards[j]; } } if (profile == null) { this.m_Account.AddShard(profile = new ShardProfile(this.m_Account, address, port, index, timeZone, percentFull, 0xbadf00d, name)); } else { profile.Index = index; profile.Address = address; profile.Port = port; profile.TimeZone = timeZone; profile.PercentFull = percentFull; } if (i == 0) { new Timer(new OnTick(this.Update_OnTick), 0, 1).Start(false); } } } ShardProfile[] shards = this.m_Account.Shards; if (shards.Length > 0) { if (this.m_Shard == null) { Array.Sort(shards, new ShardComparer()); this.m_Shard = shards[0]; } this.Send(new PServerSelection(this.m_Shard.Index)); } } }
private static void Weather(PacketReader pvSrc) { int num = pvSrc.ReadByte(); int num2 = pvSrc.ReadByte(); int num3 = pvSrc.ReadSByte(); }
private static void WorldItem(PacketReader pvSrc) { int serial = pvSrc.ReadInt32(); int itemID = pvSrc.ReadUInt16(); int num3 = ((serial & 0x80000000L) != 0L) ? pvSrc.ReadInt16() : 0; if ((itemID & 0x8000) != 0) { itemID &= 0x7fff; itemID += pvSrc.ReadSByte(); } int num4 = pvSrc.ReadInt16(); int num5 = pvSrc.ReadInt16(); bool flag2 = (num4 & 0x8000) != 0; bool flag3 = (num5 & 0x8000) != 0; bool flag4 = (num5 & 0x4000) != 0; int num6 = flag2 ? pvSrc.ReadByte() : 0; int num7 = pvSrc.ReadSByte(); int hue = flag3 ? pvSrc.ReadUInt16() : 0; int num9 = flag4 ? pvSrc.ReadByte() : 0; serial &= 0x7fffffff; num4 &= 0x7fff; num5 &= 0x3fff; bool wasFound = false; Item i = World.WantItem(serial, ref wasFound); bool isMulti = i.IsMulti; i.IsMulti = itemID >= 0x4000; int id = 0; if (i.IsMulti) { id = itemID & 0x3fff; Engine.Multis.Register(i, id); itemID = 1; } else if (isMulti) { Engine.Multis.Unregister(i); } Engine.ItemArt.Translate(ref itemID, ref hue); itemID &= 0x3fff; i.SetLocation((short) num4, (short) num5, (short) num7); i.ID = (short) itemID; i.Amount = (short) num3; i.Direction = (byte) num6; i.Hue = (ushort) hue; i.Flags.Value = num9; if ((!i.Visible && (i.IsCorpse || i.IsBones)) && World.CharData.IncomingNames) { i.Look(); } i.Visible = true; i.InWorld = true; if (i.IsEquip) { i.RemoveEquip(); } if (i.Parent != null) { i.Parent.RemoveItem(i); } if ((itemID == 0x2006) && (i.CorpseSerial != 0)) { Mobile mobile = World.FindMobile(i.CorpseSerial); if (mobile != null) { i.Direction = mobile.Direction; i.Visible = false; } } i.Update(); if (i.IsMulti && Engine.GMPrivs) { Engine.AddTextMessage(string.Format("House serial: 0x{0:X}", serial)); } }
private static void ServerList(PacketReader pvSrc) { pvSrc.ReadByte(); int num = pvSrc.ReadInt16(); if (num <= 0) { Gumps.Desktop.Children.Clear(); xGumps.SetVariable("FailMessage", "The Ultima Online servers are currently down. Please try again in a few moments."); xGumps.Display("ConnectionFailed"); Cursor.Hourglass = false; } else { Server[] array = new Server[num]; Server server = null; for (int i = 0; i < num; i++) { array[i] = new Server(pvSrc.ReadInt16(), pvSrc.ReadString(0x20), pvSrc.ReadByte(), pvSrc.ReadSByte(), new IPAddress((long) pvSrc.ReadUInt32())); if (array[i].ServerID == NewConfig.LastServerID) { server = array[i]; } } Array.Sort(array); Engine.Servers = array; Engine.LastServer = server; if (Engine.m_QuickLogin) { for (int j = 0; j < array.Length; j++) { if ((array[j].ServerID == Engine.m_QuickEntry.ServerID) && (array[j].Name == Engine.m_QuickEntry.ServerName)) { array[j].Select(); Cursor.Hourglass = true; Gumps.Desktop.Children.Clear(); xGumps.Display("Connecting"); Engine.DrawNow(); return; } } Cursor.Hourglass = false; Gumps.Desktop.Children.Clear(); xGumps.SetVariable("FailMessage", "That server was not found on the server list."); xGumps.Display("ConnectionFailed"); Engine.DrawNow(); } else { Cursor.Hourglass = false; Gumps.Desktop.Children.Clear(); xGumps.Display("ServerList"); } } }
private static void Target(PacketReader pvSrc) { byte num = pvSrc.ReadByte(); int targetID = pvSrc.ReadInt32(); byte num3 = pvSrc.ReadByte(); int num4 = pvSrc.ReadInt32(); short num5 = pvSrc.ReadInt16(); short num6 = pvSrc.ReadInt16(); byte num7 = pvSrc.ReadByte(); sbyte num8 = pvSrc.ReadSByte(); short num9 = pvSrc.ReadInt16(); if (m_CancelTarget) { m_CancelTarget = false; } else if (num3 == 3) { if (Engine.TargetHandler is ServerTargetHandler) { Engine.TargetHandler.OnCancel(TargetCancelType.UserCancel); Engine.TargetHandler = null; } } else { ServerTargetHandler handler; m_TimeLastCast = DateTime.Now; Engine.m_LastTargetID = targetID; if ((num > 1) || (((num3 != 1) && (num3 != 2)) && (num3 != 0))) { pvSrc.Trace(); } Engine.TargetHandler = handler = new ServerTargetHandler(targetID, num != 1, (ServerTargetFlags) num3); TargetActions.Identify(); if (handler.Action != TargetAction.Unknown) { for (int i = 0; i < Engine.m_AutoTarget.Count; i++) { AutoTargetSession session = (AutoTargetSession) Engine.m_AutoTarget[i]; if (session.m_Action == handler.Action) { session.m_Timer.Delete(); Engine.m_AutoTarget.RemoveAt(i); Engine.Target(session.m_Entity); break; } } } } }
private static void Mobile_Update(PacketReader pvSrc) { Mobile m = World.WantMobile(pvSrc.ReadInt32()); short num = pvSrc.ReadInt16(); byte num2 = pvSrc.ReadByte(); short num3 = pvSrc.ReadInt16(); byte num4 = pvSrc.ReadByte(); short x = pvSrc.ReadInt16(); short y = pvSrc.ReadInt16(); short num7 = pvSrc.ReadInt16(); byte newDir = pvSrc.ReadByte(); sbyte z = pvSrc.ReadSByte(); if ((num2 != 0) || (num7 != 0)) { pvSrc.Trace(); } if (m.Player) { if (Engine.m_InResync) { Engine.m_InResync = false; Engine.AddTextMessage("Resynchronization complete."); } m_Sequences.Clear(); Engine.m_Sequence = 0; Engine.m_WalkAck = 0; Engine.m_WalkReq = 0; } if (m.Player) { if (((num == 0x192) || (num == 0x193)) && ((m.Body != 0x192) && (m.Body != 0x193))) { Network.Send(new PSetWarMode(false, 0x20, 0)); Engine.Effects.Add(new DeathEffect()); } else if (((m.Body == 0x192) || (m.Body == 0x193)) && ((num != 0x192) && (num != 0x193))) { Animation animation = m.Animation = new Animation(); animation.Action = 0x11; animation.Delay = 0; animation.Forward = true; animation.Repeat = false; animation.Run(); Engine.Effects.Add(new ResurrectEffect()); } } if (m.Player) { World.SetLocation(x, y, z); } m.SetLocation(x, y, z); m.Body = num; m.Hue = num3; m.IsMoving = false; m.MovedTiles = 0; m.HorseFootsteps = 0; m.Walking.Clear(); m.UpdateReal(); Engine.EquipSort(m, newDir); m.Direction = newDir; m.Flags.Value = num4; if (m.Paperdoll != null) { Gumps.OpenPaperdoll(m, m.PaperdollName, m.PaperdollCanDrag); } m.Visible = true; m.Update(); }
private static void Movement_Reject(PacketReader pvSrc) { m_Sequences.Clear(); Engine.m_Sequence = 0; Engine.m_WalkReq = 0; Engine.m_WalkAck = 0; Mobile player = World.Player; if (player != null) { pvSrc.ReadByte(); short x = pvSrc.ReadInt16(); short y = pvSrc.ReadInt16(); byte dir = pvSrc.ReadByte(); if (player.Direction != dir) { player.Direction = dir; player.Equip.Sort(LayerComparer.FromDirection(dir)); } sbyte z = pvSrc.ReadSByte(); World.SetLocation(x, y, z); player.SetLocation(x, y, z); player.MovedTiles = 0; player.HorseFootsteps = 0; player.IsMoving = false; player.Walking.Clear(); player.UpdateReal(); player.Update(); } }
private static void Mobile_Incoming(PacketReader pvSrc) { int serial = pvSrc.ReadInt32(); if (!NewConfig.IncomingFix || ((serial & 0x3fffffff) != World.Serial)) { int num10; if ((serial & -1073741824) != 0) { pvSrc.Trace(); } short num2 = pvSrc.ReadInt16(); if ((serial & 0x80000000L) != 0L) { short num3 = pvSrc.ReadInt16(); } short x = pvSrc.ReadInt16(); short y = pvSrc.ReadInt16(); sbyte z = pvSrc.ReadSByte(); byte dir = pvSrc.ReadByte(); short num8 = pvSrc.ReadInt16(); byte num9 = pvSrc.ReadByte(); Notoriety notoriety = (Notoriety) pvSrc.ReadByte(); ArrayList list = new ArrayList(); LayerComparer comparer = LayerComparer.FromDirection(dir); bool wasFound = false; Mobile mobile = World.WantMobile(serial, ref wasFound); while ((num10 = pvSrc.ReadInt32()) > 0) { Item item = World.WantItem(num10); item.Query(); int itemID = pvSrc.ReadInt16(); Layer layer = (Layer) pvSrc.ReadByte(); int hue = ((itemID & 0x8000) != 0) ? pvSrc.ReadUInt16() : 0; if (comparer.IsValid(layer)) { short animation; item.Visible = true; if (item.InWorld) { Map.RemoveItem(item); item.InWorld = false; } else if (item.IsEquip) { item.RemoveEquip(); } else if (item.Parent != null) { item.Parent.RemoveItem(item); } itemID &= 0x3fff; Engine.ItemArt.Translate(ref itemID, ref hue); item.ID = (short) itemID; item.Hue = (ushort) hue; if (layer == Layer.Mount) { animation = (short) Engine.m_Animations.ConvertMountItemToBody(itemID); } else { animation = Map.GetAnimation(itemID); } item.IsEquip = true; item.EquipParent = mobile; list.Add(new EquipEntry(item, animation, layer)); } } list.Sort(comparer); if (mobile.Player) { dir = (byte) (dir & 7); dir = (byte) (dir | ((byte) (mobile.Direction & 0x80))); } if ((!mobile.Visible && !mobile.Player) && World.CharData.IncomingNames) { mobile.Look(); } if ((!mobile.Visible && !mobile.Player) && ((num2 == 400) || (num2 == 0x191))) { bool flag2; if ((World.Player != null) && (World.Player.Notoriety == Notoriety.Murderer)) { flag2 = ((((notoriety == Notoriety.Innocent) || (notoriety == Notoriety.Ally)) || ((notoriety == Notoriety.Attackable) || (notoriety == Notoriety.Enemy))) || (notoriety == Notoriety.Murderer)) || (notoriety == Notoriety.Criminal); } else { flag2 = (((notoriety == Notoriety.Ally) || (notoriety == Notoriety.Attackable)) || ((notoriety == Notoriety.Enemy) || (notoriety == Notoriety.Murderer))) || (notoriety == Notoriety.Criminal); } if (flag2) { mobile.QueryStats(); } } if (!mobile.Player) { mobile.SetLocation(x, y, z); mobile.Direction = dir; mobile.Hue = num8; mobile.Body = num2; mobile.IsMoving = false; mobile.MovedTiles = 0; mobile.HorseFootsteps = 0; mobile.Walking.Clear(); mobile.UpdateReal(); } mobile.Equip = list; mobile.Flags.Value = num9; mobile.Visible = true; mobile.Notoriety = notoriety; mobile.EquipChanged(); mobile.Update(); } }
private static void Mobile_Moving(PacketReader pvSrc) { Mobile m = World.FindMobile(pvSrc.ReadInt32()); if (m != null) { bool flag = false; m.Body = pvSrc.ReadInt16(); if (!m.Player) { int x = pvSrc.ReadInt16(); int y = pvSrc.ReadInt16(); int z = pvSrc.ReadSByte(); int dir = pvSrc.ReadByte(); m.Walking.Enqueue(WalkAnimation.PoolInstance(m, x, y, z, dir)); if (m.Walking.Count > 4) { WalkAnimation animation = (WalkAnimation) m.Walking.Dequeue(); m.SetLocation((short) animation.NewX, (short) animation.NewY, (short) animation.NewZ); animation.Dispose(); flag = true; } ((WalkAnimation) m.Walking.Peek()).Start(); m.SetReal(x, y, z); } else { pvSrc.Seek(6, SeekOrigin.Current); } m.Hue = pvSrc.ReadInt16(); m.Flags.Value = pvSrc.ReadByte(); m.Notoriety = (Notoriety) pvSrc.ReadByte(); m.IsMoving = !m.Player || Engine.amMoving; if (!m.Visible) { m.Visible = true; m.Update(); } else if (flag) { m.Update(); } if (m.Paperdoll != null) { Gumps.OpenPaperdoll(m, m.PaperdollName, m.PaperdollCanDrag); } } }
internal static void Light_Global(PacketReader pvSrc) { Engine.Effects.GlobalLight = pvSrc.ReadSByte(); }
internal static void Light_Personal(PacketReader pvSrc) { Mobile mobile = World.FindMobile(pvSrc.ReadInt32()); if (mobile != null) { mobile.LightLevel = pvSrc.ReadSByte(); } }
private static void Effect(PacketReader pvSrc, bool hasHueData, bool hasParticleData) { Client.Effect effect; int num = pvSrc.ReadByte(); int source = pvSrc.ReadInt32(); int target = pvSrc.ReadInt32(); int itemID = pvSrc.ReadInt16(); int xSource = pvSrc.ReadInt16(); int ySource = pvSrc.ReadInt16(); int zSource = pvSrc.ReadSByte(); int xTarget = pvSrc.ReadInt16(); int yTarget = pvSrc.ReadInt16(); int zTarget = pvSrc.ReadSByte(); int num11 = pvSrc.ReadByte(); int duration = pvSrc.ReadByte(); int num13 = pvSrc.ReadByte(); int num14 = pvSrc.ReadByte(); bool flag = !pvSrc.ReadBoolean(); bool flag2 = pvSrc.ReadBoolean(); int hue = hasHueData ? pvSrc.ReadInt32() : 0; int num16 = hasHueData ? pvSrc.ReadInt32() : 0; int num17 = hasParticleData ? pvSrc.ReadInt16() : 0; int num18 = hasParticleData ? pvSrc.ReadInt16() : 0; int num19 = hasParticleData ? pvSrc.ReadInt16() : 0; int num20 = hasParticleData ? pvSrc.ReadInt32() : 0; EffectLayer layer = hasParticleData ? ((EffectLayer) pvSrc.ReadByte()) : EffectLayer.Head; int num21 = hasParticleData ? pvSrc.ReadInt16() : 0; if ((((((num17 == 0x139d) || (num17 == 0x13bc)) || ((num17 == 0x13b4) || (num17 == 0xbe3))) || (((num17 == 0x251e) || (num17 == 0x1395)) || ((num == 1) || (num17 == 0xbbe)))) || (num17 == 0x13ae)) || (itemID == 0x113a)) { m_EffectTime = DateTime.Now; } if ((itemID & 0x3fff) > 1) { if ((num13 > 1) || (num14 != 0)) { pvSrc.Trace(); } if (hue > 0) { hue++; } switch (num) { case 0: effect = new MovingEffect(source, target, xSource, ySource, zSource, xTarget, yTarget, zTarget, itemID, Hues.GetItemHue(itemID, hue)); ((MovingEffect) effect).m_RenderMode = num16; if (flag2) { effect.Children.Add(new AnimatedItemEffect(target, xTarget, yTarget, zTarget, 0x36cb, Hues.GetItemHue(0x36cb, hue), duration)); } goto Label_0274; case 1: effect = new LightningEffect(source, xSource, ySource, zSource, Hues.Load(hue ^ 0x8000)); goto Label_0274; case 2: effect = new AnimatedItemEffect(xSource, ySource, zSource, itemID, Hues.GetItemHue(itemID, hue), duration); ((AnimatedItemEffect) effect).m_RenderMode = num16; goto Label_0274; case 3: effect = new AnimatedItemEffect(source, xSource, ySource, zSource, itemID, Hues.GetItemHue(itemID, hue), duration); ((AnimatedItemEffect) effect).m_RenderMode = num16; goto Label_0274; } pvSrc.Trace(); } return; Label_0274: Engine.Effects.Add(effect); }
private static void DragItem(PacketReader pvSrc) { int itemID = pvSrc.ReadInt16(); if (pvSrc.ReadByte() != 0) { pvSrc.Trace(); } ushort hue = pvSrc.ReadUInt16(); int num3 = pvSrc.ReadUInt16(); int sourceSerial = pvSrc.ReadInt32(); int xSource = pvSrc.ReadInt16(); int ySource = pvSrc.ReadInt16(); int zSource = pvSrc.ReadSByte(); int targetSerial = pvSrc.ReadInt32(); int xTarget = pvSrc.ReadInt16(); int yTarget = pvSrc.ReadInt16(); int zTarget = pvSrc.ReadSByte(); bool shouldDouble = false; shouldDouble = Map.m_ItemFlags[itemID & 0x3fff][TileFlag.Generic] && (num3 > 1); if ((itemID >= 0xeea) && (itemID <= 0xef2)) { int num12 = (itemID - 0xeea) / 3; num12 *= 3; num12 += 0xeea; shouldDouble = false; if (num3 <= 1) { itemID = num12; } else if ((num3 >= 2) && (num3 <= 5)) { itemID = num12 + 1; } else { itemID = num12 + 2; } } Engine.Effects.Add(new DragEffect(itemID, sourceSerial, xSource, ySource, zSource, targetSerial, xTarget, yTarget, zTarget, Hues.GetItemHue(itemID, hue), shouldDouble)); }
private static void Container_Items(PacketReader pvSrc) { ArrayList dataStore = Engine.GetDataStore(); int count = pvSrc.ReadInt16(); for (int i = 0; i < count; i++) { Item item = World.WantItem(pvSrc.ReadInt32()); int itemID = pvSrc.ReadInt16() + pvSrc.ReadSByte(); int num4 = pvSrc.ReadInt16(); int num5 = pvSrc.ReadInt16(); int num6 = pvSrc.ReadInt16(); Item item2 = World.WantItem(pvSrc.ReadInt32()); item.Query(); int hue = pvSrc.ReadInt16(); item.Visible = true; if (item.InWorld) { Map.RemoveItem(item); item.InWorld = false; } else if (item.IsEquip) { item.RemoveEquip(); } else if ((item.Parent != null) && (item.Parent != item2)) { item.Parent.RemoveItem(item); } Engine.ItemArt.Translate(ref itemID, ref hue); item.ID = (short) itemID; item.Hue = (ushort) hue; item.Amount = (short) num4; item.ContainerX = (short) num5; item.ContainerY = (short) num6; item2.AddItem(item); if (!dataStore.Contains(item2)) { dataStore.Add(item2); } if (((item.Parent != null) && ((item.Parent.ID & 0x3fff) == 0x2006)) && (item.PropertyList == null)) { item.QueryProperties(); } } count = dataStore.Count; for (int j = 0; j < count; j++) { Item container = (Item) dataStore[j]; if (container.QueueOpenSB) { container.QueueOpenSB = false; container.SpellbookGraphic = container.ID; container.SpellbookOffset = Spells.GetBookOffset(container.SpellbookGraphic); container.SpellContained = 0L; for (int k = 0; k < container.Items.Count; k++) { container.SetSpellContained(((Item) container.Items[k]).Amount - container.SpellbookOffset, true); } if (!container.OpenSB) { container.OpenSB = true; Spells.OpenSpellbook(container); } else { Gump gump = Gumps.FindGumpByGUID(string.Format("Spellbook Icon #{0}", container.Serial)); if (gump != null) { ((GSpellbookIcon) gump).OnDoubleClick(gump.Width / 2, gump.Height / 2); } } } MakeRegsTargetHandler.CheckQueue(container); } Engine.ReleaseDataStore(dataStore); }
private static void Container_Item(PacketReader pvSrc) { int serial = pvSrc.ReadInt32(); int itemID = pvSrc.ReadInt16() + pvSrc.ReadSByte(); int num3 = pvSrc.ReadInt16(); int num4 = pvSrc.ReadInt16(); int num5 = pvSrc.ReadInt16(); int num6 = pvSrc.ReadInt32(); int hue = pvSrc.ReadUInt16(); bool flag = serial < 0x40000000; bool flag2 = num6 < 0x40000000; if (flag && flag2) { Mobile mobile = World.FindMobile(serial); if ((mobile != null) && mobile.Visible) { mobile.Visible = false; mobile.Update(); } } else if (!flag && !flag2) { Item item = World.WantItem(serial); Item item2 = World.WantItem(num6); item.Query(); item.Visible = true; if (item.InWorld) { Map.RemoveItem(item); item.InWorld = false; } else if (item.IsEquip) { item.RemoveEquip(); } else if ((item.Parent != null) && (item.Parent != item2)) { item.Parent.RemoveItem(item); } Engine.ItemArt.Translate(ref itemID, ref hue); item.ID = (short) itemID; item.Hue = (ushort) hue; item.Amount = (short) num3; item.ContainerX = (short) num4; item.ContainerY = (short) num5; item2.AddItem(item); if (((item.Parent != null) && ((item.Parent.ID & 0x3fff) == 0x2006)) && (item.PropertyList == null)) { item.QueryProperties(); } } }
public void ShardList(PacketReader pvSrc) { pvSrc.ReadByte(); int num = pvSrc.ReadInt16(); if (num > 0) { int port = this.m_Server.Port; switch (port) { case 0x1e5f: case 0x1e60: port = 0x1389; break; } for (int i = 0; i < num; i++) { int index = pvSrc.ReadInt16(); string name = pvSrc.ReadString(0x20); int percentFull = pvSrc.ReadByte(); int timeZone = pvSrc.ReadSByte(); IPAddress address = new IPAddress((long) pvSrc.ReadUInt32()); if (this.m_Shard == null) { ShardProfile profile = null; for (int j = 0; (profile == null) && (j < this.m_Account.Shards.Length); j++) { if (this.m_Account.Shards[j].Name == name) { profile = this.m_Account.Shards[j]; } } if (profile == null) { this.m_Account.AddShard(profile = new ShardProfile(this.m_Account, address, port, index, timeZone, percentFull, 0xbadf00d, name)); } else { profile.Index = index; profile.Address = address; profile.Port = port; profile.TimeZone = timeZone; profile.PercentFull = percentFull; } if (i == 0) { new Timer(new OnTick(this.Update_OnTick), 0, 1).Start(false); } } } ShardProfile[] shards = this.m_Account.Shards; if (shards.Length > 0) { if (this.m_Shard == null) { Array.Sort(shards, new ShardComparer()); this.m_Shard = shards[0]; } this.Send(new PServerSelection(this.m_Shard.Index)); } } }