Beispiel #1
0
        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));
                }
            }
        }
Beispiel #2
0
 private static void Weather(PacketReader pvSrc)
 {
     int num = pvSrc.ReadByte();
     int num2 = pvSrc.ReadByte();
     int num3 = pvSrc.ReadSByte();
 }
Beispiel #3
0
 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));
     }
 }
Beispiel #4
0
 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");
         }
     }
 }
Beispiel #5
0
 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;
                 }
             }
         }
     }
 }
Beispiel #6
0
 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();
 }
Beispiel #7
0
 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();
     }
 }
Beispiel #8
0
 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();
     }
 }
Beispiel #9
0
 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);
         }
     }
 }
Beispiel #10
0
 internal static void Light_Global(PacketReader pvSrc)
 {
     Engine.Effects.GlobalLight = pvSrc.ReadSByte();
 }
Beispiel #11
0
 internal static void Light_Personal(PacketReader pvSrc)
 {
     Mobile mobile = World.FindMobile(pvSrc.ReadInt32());
     if (mobile != null)
     {
         mobile.LightLevel = pvSrc.ReadSByte();
     }
 }
Beispiel #12
0
        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);
        }
Beispiel #13
0
 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));
 }
Beispiel #14
0
 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);
 }
Beispiel #15
0
 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();
         }
     }
 }
Beispiel #16
0
 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));
         }
     }
 }