Beispiel #1
0
        public ArmorEditor(GameContext Context, Form ParentForm)
        {
            this.Context    = Context;
            this.ParentForm = ParentForm;
#if ENG
            Text = "Armor";
#else
            Text = "装备";
#endif

            ItemPropertiesPanel = new ItemPropertiesPanel();
            ArmorSlots          = new ItemIcon[Player.ARMOR_MAX_COUNT + Player.DYE_MAX_COUNT + Player.MISC_MAX_COUNT + Player.MISCDYE_MAX_COUNT];
            AltSlots            = new AltItemIcon[AltPanelWidth * AltPanelHeight];

            SlotsPanel = new Panel();

            Label Members = new Label();
            Members.Bounds    = new Rectangle(275, 165, 270, 105);
            Members.BackColor = Color.FromArgb(201, 200, 170);
#if ENG
#else
            Members.Text = "鸣谢(同一批排名不分先后):\n" +
                           "第一批:Qiu(作者),帅哭,白鼠,魄沫,子不语,\n小兲,鱼,子落,永夜,欧酋,子程,恋恋\n" +
                           "第二批:司机熊,呆呆,子渔,凤凰蛇,提灯,南风南,Ronin,男人,天然大豆,清辞,晨曦(御龙),袁瑞,mz,dio,锐,firmament,面条,心醉\n" +
                           "感谢他们这一路的支持,修改器才有今天,在此列下名单,以作纪念";
#endif
            SlotsPanel.Controls.Add(Members);
            SlotsPanel.Size     = new Size(10 * (SlotsWidth + SlotsGap), 300);
            SlotsPanel.Location = new Point(5, 5);
            this.Controls.Add(SlotsPanel);

            SlotRightClickStrip = new ContextMenuStrip();
            SlotRightClickStrip.Items.Add("Copy");
            SlotRightClickStrip.Items.Add("Paste");
            SlotRightClickStrip.ItemClicked += (sender, e) =>
            {
                var item = GetTargetItem(Selected);
                switch (e.ClickedItem.Text)
                {
                case "Copy":

                    Clip_ItemType   = item.Type;
                    Clip_ItemStack  = item.Stack;
                    Clip_ItemPrefix = item.Prefix;
                    RefreshSelected();
                    break;

                case "Paste":
                    if (Clip_ItemType != 0)
                    {
                        item.SetDefaultsAndPrefix(Clip_ItemType, Clip_ItemPrefix);
                        item.Stack = Clip_ItemStack;
                    }
                    RefreshSelected();
                    break;
                }
            };
            for (int i = 0; i < Player.ARMOR_MAX_COUNT; i++)
            {
                int row = (int)Math.Floor((double)(i / 10));
                int off = i % 10;
                ArmorSlots[i] = new ItemIcon(Context, Context.MyPlayer.Armor, i, i)
                {
                    Size     = new Size(SlotsWidth, SlotsWidth),
                    Location = new Point(off * (SlotsWidth + SlotsGap), row * (SlotsWidth + SlotsGap)),


                    BackColor = Color.CadetBlue,
                    SizeMode  = PictureBoxSizeMode.CenterImage
                };
                ArmorSlots[i].Click += SlotClick;
                this.SlotsPanel.Controls.Add(ArmorSlots[i]);
            }
            for (int i = Player.ARMOR_MAX_COUNT; i < Player.ARMOR_MAX_COUNT + Player.DYE_MAX_COUNT; i++)
            {
                int row = (int)Math.Floor((double)(i / 10));
                int off = i % 10;
                ArmorSlots[i] = new ItemIcon(Context, Context.MyPlayer.Dye, i, i - Player.ARMOR_MAX_COUNT)
                {
                    Size     = new Size(SlotsWidth, SlotsWidth),
                    Location = new Point(off * (SlotsWidth + SlotsGap), row * (SlotsWidth + SlotsGap)),


                    BackColor = Color.FromArgb(96, 160, 128),
                    SizeMode  = PictureBoxSizeMode.CenterImage
                };
                ArmorSlots[i].Click += SlotClick;
                this.SlotsPanel.Controls.Add(ArmorSlots[i]);
            }
            for (int i = Player.ARMOR_MAX_COUNT + Player.DYE_MAX_COUNT; i < Player.ARMOR_MAX_COUNT + Player.DYE_MAX_COUNT + Player.MISC_MAX_COUNT; i++)
            {
                int row = (int)Math.Floor((double)(i / 10));
                int off = i % 10;
                ArmorSlots[i] = new ItemIcon(Context, Context.MyPlayer.Misc, i, i - (Player.ARMOR_MAX_COUNT + Player.DYE_MAX_COUNT))
                {
                    Size     = new Size(SlotsWidth, SlotsWidth),
                    Location = new Point(off * (SlotsWidth + SlotsGap), row * (SlotsWidth + SlotsGap)),


                    BackColor = Color.FromArgb(169, 112, 144),
                    SizeMode  = PictureBoxSizeMode.CenterImage
                };
                ArmorSlots[i].Click += SlotClick;
                this.SlotsPanel.Controls.Add(ArmorSlots[i]);
            }
            for (int i = Player.ARMOR_MAX_COUNT + Player.DYE_MAX_COUNT + Player.MISC_MAX_COUNT; i < Player.ARMOR_MAX_COUNT + Player.DYE_MAX_COUNT + Player.MISC_MAX_COUNT + Player.MISCDYE_MAX_COUNT; i++)
            {
                int row = (int)Math.Floor((double)((i + 5) / 10));
                int off = (i + 5) % 10;
                ArmorSlots[i] = new ItemIcon(Context, Context.MyPlayer.MiscDye, i, i - (Player.ARMOR_MAX_COUNT + Player.DYE_MAX_COUNT + Player.MISC_MAX_COUNT))
                {
                    Size     = new Size(SlotsWidth, SlotsWidth),
                    Location = new Point(off * (SlotsWidth + SlotsGap), row * (SlotsWidth + SlotsGap)),


                    BackColor = Color.FromArgb(160, 128, 96),
                    SizeMode  = PictureBoxSizeMode.CenterImage
                };
                ArmorSlots[i].Click += SlotClick;
                this.SlotsPanel.Controls.Add(ArmorSlots[i]);
            }



            AltPanel = new Panel()
            {
                Location = new Point(560, 5), Size = new Size(AltPanelWidth, AltPanelHeight)
            };
            Controls.Add(AltPanel);
            for (int i = 0; i < AltPanelHeight / AltWidth; i++)
            {
                for (int j = 0; j < AltPanelWidth / AltWidth; j++)
                {
                    int n = i * AltPanelWidth / AltWidth + j;
                    AltSlots[n] = new AltItemIcon()
                    {
                        Size     = new Size(AltWidth - AltGap, AltWidth - AltGap),
                        Location = new Point(j * (AltWidth + AltGap), i * (AltWidth + AltGap) + 2),
                        SizeMode = PictureBoxSizeMode.CenterImage,
                        Enabled  = false
                    };
                    AltSlots[n].BackColor = Color.Gray;
                    AltPanel.Controls.Add(AltSlots[n]);
                }
            }

            ItemPropertiesPanel.Location = new Point(10 * (SlotsWidth + SlotsGap) + 105, 5);
            ItemPropertiesPanel.Size     = new Size(350, HackPanelHeight);
            this.Controls.Add(ItemPropertiesPanel);



            Button OK = new Button();
            OK.Click += (sender, e) =>
            {
                ApplyData(Selected);
                InitData(Selected);
                RefreshSelected();
            };
            OK.Text     = Lang.confirmHack;
            OK.Size     = new Size(80, 30);
            OK.Location = new Point(260, 0);
            ItemPropertiesPanel.Controls.Add(OK);


            Button Refresh = new Button();
            Refresh.Click += (sender, e) =>
            {
                InitData(Selected);
                SlotsPanel.Refresh();
            };
            Refresh.Text     = Lang.refresh;
            Refresh.Size     = new Size(80, 30);
            Refresh.Location = new Point(260, 30);
            ItemPropertiesPanel.Controls.Add(Refresh);



            Button InitItem = new Button();
            InitItem.Click += (sender, e) =>
            {
                Item item = GetTargetItem(Selected);
                item.SetDefaults(Convert.ToInt32(((TextBox)ItemPropertiesPanel.Hack["Type"]).Text));
                item.SetPrefix(GetPrefixFromIndex(ItemPropertiesPanel.SelectedPrefix));
                int stack = Convert.ToInt32(((TextBox)ItemPropertiesPanel.Hack["Stack"]).Text);
                item.Stack = stack == 0 ? 1 : stack;
                RefreshSelected();
                InitData(Selected);
            };
            InitItem.Text     = Lang.init;
            InitItem.Size     = new Size(80, 30);
            InitItem.Location = new Point(260, 60);
            ItemPropertiesPanel.Controls.Add(InitItem);

            ArmorSlots[0].Selected = true;
            InitData(0);
            timer = new Timer()
            {
                Interval = 500
            };
            timer.Tick += (sender, e) =>
            {
                if (this.Enabled)
                {
                    SlotsPanel.Refresh();
                    Item item = GetTargetItem(Selected);
                    if (LastSelectedID != item.Type)
                    {
                        InitData(Selected);
                        LastSelectedID = item.Type;
                    }
                }
            };
            timer.Start();
        }
Beispiel #2
0
        public InvEditor(GameContext Context, Form ParentForm)
        {
            this.Context        = Context;
            this.ParentForm     = ParentForm;
            Text                = "背包";
            ItemPropertiesPanel = new ItemPropertiesPanel();
            ItemSlots           = new ItemIcon[Player.ITEM_MAX_COUNT - 9];
            AltSlots            = new AltItemIcon[AltPanelWidth * AltPanelHeight];

            SlotsPanel = new Panel();

            SlotsPanel.Size     = new Size(10 * (SlotsWidth + SlotsGap), 300);
            SlotsPanel.Location = new Point(5, 5);
            this.Controls.Add(SlotsPanel);

            ContextMenuStrip cms = new ContextMenuStrip();

            cms.Items.Add("Copy");
            cms.Items.Add("Paste");
            cms.ItemClicked += (sender, e) =>
            {
                var item = Context.MyPlayer.Inventory[Selected];
                switch (e.ClickedItem.Text)
                {
                case "Copy":

                    Clip_ItemType   = item.Type;
                    Clip_ItemStack  = item.Stack;
                    Clip_ItemPrefix = item.Prefix;
                    RefreshSelected();
                    break;

                case "Paste":
                    if (Clip_ItemType != 0)
                    {
                        item.SetDefaultsAndPrefix(Clip_ItemType, Clip_ItemPrefix);
                        item.Stack = Clip_ItemStack;
                    }
                    RefreshSelected();
                    break;
                }
            };
            for (int i = 0; i < ItemSlots.Length; i++)
            {
                int row = (int)Math.Floor((double)(i / 10));
                int off = i % 10;
                ItemSlots[i] = new ItemIcon(Context, Context.MyPlayer.Inventory, i, i)
                {
                    Size     = new Size(SlotsWidth, SlotsWidth),
                    Location = new Point(off * (SlotsWidth + SlotsGap), row * (SlotsWidth + SlotsGap)),


                    BackColor = Color.CadetBlue,
                    SizeMode  = PictureBoxSizeMode.CenterImage
                };
                ItemSlots[i].Click += (sender, e) =>
                {
                    MouseEventArgs mea = (MouseEventArgs)e;
                    ItemIcon       ii  = (ItemIcon)sender;

                    foreach (var s in ItemSlots)
                    {
                        s.Selected = false;
                    }
                    ((ItemIcon)sender).Selected = true;
                    SlotsPanel.Refresh();
                    Selected = ((ItemIcon)sender).Number;
                    InitData(Selected);
                    if (mea.Button == MouseButtons.Right)
                    {
                        cms.Show(ii, mea.Location.X, mea.Location.Y);
                    }
                };
                this.SlotsPanel.Controls.Add(ItemSlots[i]);
            }

            ContextMenuStrip altCms = new ContextMenuStrip();

            altCms.Items.Add("Edit");

            altCms.ItemClicked += (sender, e) =>
            {
                switch (e.ClickedItem.Text)
                {
                case "Edit":
                {
                    Form     f         = new Form();
                    TextBox  ItemID    = new TextBox();
                    TextBox  ItemCount = new TextBox();
                    ComboBox prefix    = new ComboBox();
                    Button   et        = new Button();

                    f.Text            = "Edit";
                    f.StartPosition   = FormStartPosition.CenterParent;
                    f.FormBorderStyle = FormBorderStyle.FixedSingle;
                    f.MaximizeBox     = false;
                    f.MinimizeBox     = false;
                    f.Size            = new Size(265, 105);

                    Label tip1 = new Label()
                    {
                        Text     = "ItemID",
                        Location = new Point(0, 5),
                        Size     = new Size(80, 20)
                    };
                    f.Controls.Add(tip1);

                    ItemID.Location  = new Point(85, 0);
                    ItemID.Size      = new Size(95, 20);
                    ItemID.Text      = AltSelected.ID.ToString();
                    ItemID.KeyPress += delegate(object sender1, KeyPressEventArgs e1)
                    {
                        if (!Char.IsNumber(e1.KeyChar) && e1.KeyChar != 8)
                        {
                            e1.Handled = true;
                        }
                    };
                    f.Controls.Add(ItemID);


                    Label tip2 = new Label()
                    {
                        Text     = "ItemStack",
                        Location = new Point(0, 25),
                        Size     = new Size(80, 20)
                    };
                    f.Controls.Add(tip2);

                    ItemCount.Location  = new Point(85, 20);
                    ItemCount.Size      = new Size(95, 20);
                    ItemCount.Text      = AltSelected.Stack.ToString();
                    ItemCount.KeyPress += delegate(object sender1, KeyPressEventArgs e1)
                    {
                        if (!Char.IsNumber(e1.KeyChar) && e1.KeyChar != 8)
                        {
                            e1.Handled = true;
                        }
                    };
                    f.Controls.Add(ItemCount);

                    prefix.Location       = new Point(85, 40);
                    prefix.Size           = new Size(95, 20);
                    prefix.DropDownStyle  = ComboBoxStyle.DropDownList;
                    prefix.DropDownHeight = 150;
                    foreach (var o in MainForm.resource.Prefix)
                    {
                        string[] t = o.Split(new string[] { "=" }, StringSplitOptions.RemoveEmptyEntries);
                        string   v = t[0];
                        prefix.Items.Add(v);
                    }
                    prefix.SelectedIndex = GetIndexFromPrefix(AltSelected.Prefix);

                    f.Controls.Add(prefix);

                    Label tip3 = new Label()
                    {
                        Text     = "ItemPrefix",
                        Location = new Point(0, 45),
                        Size     = new Size(80, 20)
                    };
                    f.Controls.Add(tip3);


                    et.Text     = Lang.confirm;
                    et.Size     = new Size(65, 60);
                    et.Location = new Point(180, 0);
                    et.Click   += delegate(object sender1, EventArgs e1)
                    {
                        AltSelected.ID     = Convert.ToInt32(ItemID.Text);
                        AltSelected.Stack  = Convert.ToInt32(ItemCount.Text);
                        AltSelected.Prefix = GetPrefixFromIndex(prefix.SelectedIndex);
                        f.Dispose();
                        var img = MainForm.item_images.Images["Item_" + AltSelected.ID];
                        if (img != null)
                        {
                            AltSelected.Image = img;
                        }
                        SaveAltItems();
                    };
                    f.Controls.Add(et);
                    f.StartPosition = FormStartPosition.CenterParent;
                    f.ShowDialog(this);
                }
                break;
                }
            };
            AltPanel = new Panel()
            {
                Location = new Point(560, 5), Size = new Size(AltPanelWidth, AltPanelHeight)
            };
            Controls.Add(AltPanel);
            if (!File.Exists("AlternativeItem"))
            {
                BinaryWriter bw = new BinaryWriter(File.Open("AlternativeItem", FileMode.OpenOrCreate));                //ID Stack Prefix
                for (int i = 0; i < (AltPanelHeight / AltWidth) * (AltPanelWidth / AltWidth); i++)
                {
                    bw.Write(0);                            //ID
                    bw.Write(0);                            //Stack
                    bw.Write((byte)0);                      //Prefix
                }
                bw.Close();
            }
            BinaryReader br = new BinaryReader(File.Open("AlternativeItem", FileMode.Open));            //ID Stack Prefix

            for (int i = 0; i < AltPanelHeight / AltWidth; i++)
            {
                for (int j = 0; j < AltPanelWidth / AltWidth; j++)
                {
                    int n = i * AltPanelWidth / AltWidth + j;
                    AltSlots[n] = new AltItemIcon()
                    {
                        Size     = new Size(AltWidth - AltGap, AltWidth - AltGap),
                        Location = new Point(j * (AltWidth + AltGap), i * (AltWidth + AltGap) + 2),
                        SizeMode = PictureBoxSizeMode.CenterImage,
                        ID       = br.ReadInt32(),
                        Stack    = br.ReadInt32(),
                        Prefix   = br.ReadByte(),
                    };
                    Image img;
                    if ((img = MainForm.item_images.Images["Item_" + AltSlots[n].ID]) != null)
                    {
                        AltSlots[n].Image = img;
                    }
                    AltSlots[n].BackColor = Color.CadetBlue;
                    AltSlots[n].Click    += (sender, e) =>
                    {
                        MouseEventArgs mea = (MouseEventArgs)e;
                        AltItemIcon    aii = (AltItemIcon)sender;
                        this.AltSelected = aii;
                        if (mea.Button == MouseButtons.Right)
                        {
                            altCms.Show(aii, mea.Location.X, mea.Location.Y);
                        }
                    };
                    AltSlots[n].DoubleClick += (sender, e) =>
                    {
                        var p = Context.MyPlayer;
                        for (int h = 0; h < Player.ITEM_MAX_COUNT - 9; h++)
                        {
                            var item = p.Inventory[h];
                            if (item.Type == 0)
                            {
                                item.SetDefaults(AltSelected.ID);
                                item.SetPrefix(AltSelected.Prefix);
                                item.Stack = AltSelected.Stack;
                                break;
                            }
                        }
                    };
                    AltPanel.Controls.Add(AltSlots[n]);
                }
            }
            br.Close();

            ItemPropertiesPanel.Location = new Point(ItemSlots.Length / 5 * (SlotsWidth + SlotsGap) + 105, 5);
            ItemPropertiesPanel.Size     = new Size(350, HackPanelHeight);
            this.Controls.Add(ItemPropertiesPanel);


            Button OK = new Button();

            OK.Click += (sender, e) =>
            {
                ApplyData(Selected);
                InitData(Selected);
                RefreshSelected();
            };
            OK.Text     = Lang.confirmHack;
            OK.Size     = new Size(80, 30);
            OK.Location = new Point(260, 0);
            ItemPropertiesPanel.Controls.Add(OK);


            Button Refresh = new Button();

            Refresh.Click += (sender, e) =>
            {
                InitData(Selected);
                SlotsPanel.Refresh();
            };
            Refresh.Text     = Lang.refresh;
            Refresh.Size     = new Size(80, 30);
            Refresh.Location = new Point(260, 30);
            ItemPropertiesPanel.Controls.Add(Refresh);


            Button SaveInv = new Button();

            SaveInv.Click += (sender, e) =>
            {
                SaveFileDialog sfd = new SaveFileDialog()
                {
                    Filter = "inv files (*.inv)|*.inv",
                };
                if (!Directory.Exists("./invs"))
                {
                    Directory.CreateDirectory("./invs");
                }
                sfd.InitialDirectory = Path.GetFullPath("./invs");
                if (sfd.ShowDialog() == DialogResult.OK)
                {
                    SaveInventory(sfd.FileName);
                    SlotsPanel.Refresh();
                }
            };
            SaveInv.Text     = Lang.save;
            SaveInv.Size     = new Size(80, 30);
            SaveInv.Location = new Point(260, 60);
            ItemPropertiesPanel.Controls.Add(SaveInv);

            Button LoadInv = new Button();

            LoadInv.Click += (sender, e) =>
            {
                OpenFileDialog ofd = new OpenFileDialog()
                {
                    Filter = "inv files (*.inv)|*.inv"
                };
                if (!Directory.Exists("./invs"))
                {
                    Directory.CreateDirectory("./invs");
                }
                ofd.InitialDirectory = Path.GetFullPath("./invs");
                if (ofd.ShowDialog() == DialogResult.OK)
                {
                    LoadInventory(ofd.FileName);
                    SlotsPanel.Refresh();
                    InitData(Selected);
                }
            };
            LoadInv.Text     = Lang.load;
            LoadInv.Size     = new Size(80, 30);
            LoadInv.Location = new Point(260, 90);
            ItemPropertiesPanel.Controls.Add(LoadInv);

            Button SaveInvPItem = new Button();

            SaveInvPItem.Click += (sender, e) =>
            {
                SaveFileDialog sfd = new SaveFileDialog()
                {
                    Filter = "inv files (*.invp)|*.invp"
                };
                if (!Directory.Exists("./invs"))
                {
                    Directory.CreateDirectory("./invs");
                }
                sfd.InitialDirectory = Path.GetFullPath("./invs");
                if (sfd.ShowDialog() == DialogResult.OK)
                {
                    File.WriteAllText(sfd.FileName, Context.MyPlayer.SerializeInventoryWithProperties());
                    SlotsPanel.Refresh();
                }
            };
            SaveInvPItem.Text     = Lang.save + "(P)";
            SaveInvPItem.Size     = new Size(80, 30);
            SaveInvPItem.Location = new Point(260, 120);
            ItemPropertiesPanel.Controls.Add(SaveInvPItem);

            Button LoadInvPItem = new Button();

            LoadInvPItem.Click += (sender, e) =>
            {
                OpenFileDialog ofd = new OpenFileDialog()
                {
                    Filter = "inv files (*.invp)|*.invp"
                };
                if (!Directory.Exists("./invs"))
                {
                    Directory.CreateDirectory("./invs");
                }
                ofd.InitialDirectory = Path.GetFullPath("./invs");
                if (ofd.ShowDialog() == DialogResult.OK)
                {
                    int         j = 0;
                    Form        p = new Form();
                    ProgressBar pb = new ProgressBar();
                    Label       tip = new Label(), percent = new Label();
                    tip.Text          = "Loading inventory...";
                    tip.Location      = new Point(0, 0);
                    tip.Size          = new Size(150, 30);
                    tip.TextAlign     = ContentAlignment.MiddleCenter;
                    percent.Location  = new Point(150, 0);
                    percent.Size      = new Size(30, 30);
                    percent.TextAlign = ContentAlignment.MiddleCenter;
                    System.Timers.Timer timer = new System.Timers.Timer(1);
                    p.FormBorderStyle = FormBorderStyle.FixedSingle;
                    p.ClientSize      = new Size(300, 60);
                    p.ControlBox      = false;
                    pb.Location       = new Point(0, 30);
                    pb.Size           = new Size(300, 30);
                    pb.Maximum        = 2;
                    pb.Minimum        = 0;
                    pb.Value          = 0;
                    p.Controls.Add(tip);
                    p.Controls.Add(percent);
                    p.Controls.Add(pb);
                    timer.Elapsed += (sender1, e1) =>
                    {
                        pb.Value     = j;
                        percent.Text = pb.Value + "/" + pb.Maximum;
                        if (j >= pb.Maximum)
                        {
                            p.Dispose();
                        }
                    };
                    timer.Start();
                    p.Show();
                    p.Location = new System.Drawing.Point(ParentForm.Location.X + ParentForm.Width / 2 - p.ClientSize.Width / 2, ParentForm.Location.Y + ParentForm.Height / 2 - p.ClientSize.Height / 2);
                    new System.Threading.Thread((s) =>
                    {
                        j++;
                        MainForm.mainWindow.Enabled = false;
                        if (ExtForm.Window != null)
                        {
                            ExtForm.Window.Enabled = false;
                        }
                        this.Parent.Enabled = false;

                        Context.MyPlayer.DeserializeInventoryWithProperties(File.ReadAllText(ofd.FileName));
                        InitData(Selected);
                        j++;

                        this.Parent.Enabled = true;
                        if (ExtForm.Window != null)
                        {
                            ExtForm.Window.Enabled = true;
                        }
                        MainForm.mainWindow.Enabled = true;
                    }
                                                ).Start();
                }
            };
            LoadInvPItem.Text     = Lang.load + "(P)";
            LoadInvPItem.Size     = new Size(80, 30);
            LoadInvPItem.Location = new Point(260, 150);
            ItemPropertiesPanel.Controls.Add(LoadInvPItem);

            Button InitItem = new Button();

            InitItem.Click += (sender, e) =>
            {
                Item item = Context.MyPlayer.Inventory[Selected];
                item.SetDefaults(Convert.ToInt32(((TextBox)ItemPropertiesPanel.Hack["Type"]).Text));
                item.SetPrefix(GetPrefixFromIndex(ItemPropertiesPanel.SelectedPrefix));
                int stack = Convert.ToInt32(((TextBox)ItemPropertiesPanel.Hack["Stack"]).Text);
                item.Stack = stack == 0 ? 1 : stack;
                RefreshSelected();
                InitData(Selected);
            };
            InitItem.Text     = Lang.init;
            InitItem.Size     = new Size(80, 30);
            InitItem.Location = new Point(260, 180);
            ItemPropertiesPanel.Controls.Add(InitItem);

            ItemSlots[0].Selected = true;
            InitData(0);
            timer = new Timer()
            {
                Interval = 500
            };
            timer.Tick += (sender, e) =>
            {
                if (this.Enabled)
                {
                    SlotsPanel.Refresh();
                    Item item = Context.MyPlayer.Inventory[Selected];
                    if (LastSelectedID != item.Type)
                    {
                        InitData(Selected);
                        LastSelectedID = item.Type;
                    }
                }
            };
            timer.Start();
        }