예제 #1
0
        private void reloadItem(OtbItem item)
        {
            //to avoid problems with events
            OtbItem tmpItem = currentItem;
            currentItem = null;

            SpriteItem spriteItem;
            if (currentPlugin.Instance.Items.TryGetValue(item.spriteId, out spriteItem))
            {
                if (showUpdateOutput)
                {
                    Trace.WriteLine(String.Format("Reloading item id: {0}", item.id));
                }

                UInt16 tmpId = item.id;
                item.itemImpl = (ItemImpl)spriteItem.itemImpl.Clone();
                item.id = tmpId;
                Buffer.BlockCopy(spriteItem.spriteHash, 0, item.spriteHash, 0, spriteItem.spriteHash.Length);

                currentItem = tmpItem;
            }
        }
예제 #2
0
        private bool showItem(OtbItem item)
        {
            currentItem = null;
            resetAllDatabindings(this);

            if (item == null)
            {
                return false;
            }

            SpriteItem spriteItem;
            if (!currentPlugin.Instance.Items.TryGetValue(item.spriteId, out spriteItem))
            {
                return false;
            }

            duplicateItemToolStripMenuItem.Enabled = true;

            drawSprite(pictureBox, spriteItem);
            if (!item.isCustomCreated && item.spriteHash != null && spriteItem.spriteHash != null)
            {
                pictureBox.BackColor = ((Utils.ByteArrayCompare(item.spriteHash, spriteItem.spriteHash) ? Color.White : Color.Red));
            }

            typeCombo.Text = item.type.ToString();
            typeCombo.ForeColor = (item.type == spriteItem.type ? Color.Black : Color.Red);

            //
            serverIdLbl.DataBindings.Add("Text", item, "id");
            clientIdUpDown.Minimum = items.minId;
            clientIdUpDown.Maximum = items.maxId;
            clientIdUpDown.DataBindings.Add("Value", spriteItem, "id");

            //Options
            blockObjectCheck.DataBindings.Add("Checked", item, "blockObject");
            blockObjectCheck.ForeColor = (item.blockObject == spriteItem.blockObject ? Color.Black : Color.Red);

            blockProjectileCheck.DataBindings.Add("Checked", item, "blockProjectile");
            blockProjectileCheck.ForeColor = (item.blockProjectile == spriteItem.blockProjectile ? Color.Black : Color.Red);

            blockPathFindCheck.DataBindings.Add("Checked", item, "blockPathFind");
            blockPathFindCheck.ForeColor = (item.blockPathFind == spriteItem.blockPathFind ? Color.Black : Color.Red);

            moveableCheck.DataBindings.Add("Checked", item, "isMoveable");
            moveableCheck.ForeColor = (item.isMoveable == spriteItem.isMoveable ? Color.Black : Color.Red);

            hasHeightCheck.DataBindings.Add("Checked", item, "hasHeight");
            hasHeightCheck.ForeColor = (item.hasHeight == spriteItem.hasHeight ? Color.Black : Color.Red);

            pickupableCheck.DataBindings.Add("Checked", item, "isPickupable");
            pickupableCheck.ForeColor = (item.isPickupable == spriteItem.isPickupable ? Color.Black : Color.Red);

            hangableCheck.DataBindings.Add("Checked", item, "isHangable");
            hangableCheck.ForeColor = (item.isHangable == spriteItem.isHangable ? Color.Black : Color.Red);

            useableCheck.DataBindings.Add("Checked", item, "hasUseWith");
            useableCheck.ForeColor = (item.hasUseWith == spriteItem.hasUseWith ? Color.Black : Color.Red);

            rotatableCheck.DataBindings.Add("Checked", item, "isRotatable");
            rotatableCheck.ForeColor = (item.isRotatable == spriteItem.isRotatable ? Color.Black : Color.Red);

            stackableCheck.DataBindings.Add("Checked", item, "isStackable");
            stackableCheck.ForeColor = (item.isStackable == spriteItem.isStackable ? Color.Black : Color.Red);

            verticalCheck.DataBindings.Add("Checked", item, "isVertical");
            verticalCheck.ForeColor = (item.isVertical == spriteItem.isVertical ? Color.Black : Color.Red);

            walkStackCheck.DataBindings.Add("Checked", item, "walkStack");
            walkStackCheck.ForeColor = (item.walkStack == spriteItem.walkStack ? Color.Black : Color.Red);

            horizontalCheck.DataBindings.Add("Checked", item, "isHorizontal");
            horizontalCheck.ForeColor = (item.isHorizontal == spriteItem.isHorizontal ? Color.Black : Color.Red);

            alwaysOnTopCheck.DataBindings.Add("Checked", item, "alwaysOnTop");
            alwaysOnTopCheck.ForeColor = (item.alwaysOnTop == spriteItem.alwaysOnTop ? Color.Black : Color.Red);

            readableCheck.DataBindings.Add("Checked", item, "isReadable");
            readableCheck.ForeColor = (item.isReadable == spriteItem.isReadable ? Color.Black : Color.Red);

            speedText.DataBindings.Add("Text", item, "groundSpeed");
            speedText.ForeColor = (item.groundSpeed == spriteItem.groundSpeed ? Color.Black : Color.Red);

            topOrderText.DataBindings.Add("Text", item, "alwaysOnTopOrder");
            topOrderText.ForeColor = (item.alwaysOnTopOrder == spriteItem.alwaysOnTopOrder ? Color.Black : Color.Red);

            lightLevelText.DataBindings.Add("Text", item, "lightLevel");
            lightLevelText.ForeColor = (item.lightLevel == spriteItem.lightLevel ? Color.Black : Color.Red);

            lightColorText.DataBindings.Add("Text", item, "lightColor");
            lightColorText.ForeColor = (item.lightColor == spriteItem.lightColor ? Color.Black : Color.Red);

            maxReadCharsText.DataBindings.Add("Text", item, "maxReadChars");
            maxReadCharsText.ForeColor = (item.maxReadChars == spriteItem.maxReadChars ? Color.Black : Color.Red);

            maxReadWriteCharsText.DataBindings.Add("Text", item, "maxReadWriteChars");
            maxReadWriteCharsText.ForeColor = (item.maxReadWriteChars == spriteItem.maxReadWriteChars ? Color.Black : Color.Red);

            lookThroughCheck.DataBindings.Add("Checked", item, "lookThrough");
            lookThroughCheck.ForeColor = (item.lookThrough == spriteItem.lookThrough ? Color.Black : Color.Red);

            minimapColorText.DataBindings.Add("Text", item, "minimapColor");
            minimapColorText.ForeColor = (item.minimapColor == spriteItem.minimapColor ? Color.Black : Color.Red);

            wareIdText.DataBindings.Add("Text", item, "wareId");
            wareIdText.ForeColor = (item.wareId == spriteItem.wareId ? Color.Black : Color.Red);

            nameText.DataBindings.Add("Text", item, "name");
            nameText.ForeColor = (item.name.CompareTo(spriteItem.name) == 0 ? Color.Black : Color.Red);

            tableLayoutPanelCandidates.Visible = false;
            for (int i = 0; i < tableLayoutPanelCandidates.ColumnCount; ++i)
            {
                PictureBox box = (PictureBox)tableLayoutPanelCandidates.GetControlFromPosition(i, 0);
                box.Image = null;
            }

            if (previousPlugin != null)
            {
                SpriteItem prevSpriteItem;
                if (previousPlugin.Instance.Items.TryGetValue(item.prevSpriteId, out prevSpriteItem))
                {
                    drawSprite(prevPictureBox, prevSpriteItem);

                    if (prevSpriteItem.spriteSignature != null)
                    {
                        //Sprite does not match, use the sprite signature to find possible candidates
                        showSpriteCandidates(prevSpriteItem);
                    }
                }
                else
                {
                    prevPictureBox.Image = null;
                }
            }

            currentItem = item;
            return true;
        }
예제 #3
0
        private void openToolStripMenuItem_Click(object sender, EventArgs e)
        {
            FileDialog dialog = new OpenFileDialog();

            //Now set the file type
            dialog.Filter = "otb files (*.otb)|*.otb|All files (*.*)|*.*";
            dialog.Title = "Open otb file...";

            if (dialog.ShowDialog() != DialogResult.OK || dialog.FileName.Length == 0)
            {
                return;
            }

            currentItem = null;
            currentPlugin = null;
            previousPlugin = null;
            currentOtbVersion = 0;

            items.Clear();

            if (otb.open(dialog.FileName, ref items, showOtbOutput))
            {
                currentOtbFullPath = dialog.FileName;
                currentOtbVersion = items.dwMinorVersion;

                saveAsToolStripMenuItem.Enabled = true;
                saveToolStripMenuItem.Enabled = true;

                //try find a plugin that can handle this version of otb
                currentPlugin = Program.plugins.AvailablePlugins.Find(currentOtbVersion);
                if (currentPlugin == null)
                {
                    items.Clear();
                    MessageBox.Show(String.Format("Could not find a plugin that could handle client version {0}", currentOtbVersion));
                    return;
                }

                if (!loadClient(currentPlugin, currentOtbVersion))
                {
                    currentPlugin = null;
                    items.Clear();
                    return;
                }

                createItemToolStripMenuItem.Enabled = true;
                updateToolStripMenuItem.Enabled = true;
                buildTreeView();
            }
        }
예제 #4
0
        private void onSelectItem(TreeNode node)
        {
            if (node != null && node.Tag != null)
            {
                OtbItem item = (OtbItem)node.Tag;
                showItem(item);
            }
            else
            {
                currentItem = null;

                pictureBox.Image = null;
                pictureBox.BackColor = Color.White;
                prevPictureBox.Image = null;
                prevPictureBox.BackColor = Color.White;
                tableLayoutPanelCandidates.Visible = false;
                clientIdUpDown.Value = clientIdUpDown.Minimum;
                serverIdLbl.Text = "0";
                typeCombo.Text = "";
                typeCombo.ForeColor = Color.Black;
                duplicateItemToolStripMenuItem.Enabled = false;

                foreach (Control control in optionGroupBox.Controls)
                {
                    if (control is CheckBox)
                    {
                        ((CheckBox)control).Checked = false;
                        control.ForeColor = Color.Black;
                    }
                    else if (control is TextBox)
                    {
                        ((TextBox)control).Text = "";
                        control.ForeColor = Color.Black;
                    }
                }
            }
        }
예제 #5
0
        private void itemTreeView_BeforeSelect(object sender, TreeViewCancelEventArgs e)
        {
            if (currentItem != null && currentItem.isCustomCreated)
            {
                //Making sure the hash is updated
                SpriteItem spriteItem;
                if (currentPlugin.Instance.Items.TryGetValue(currentItem.spriteId, out spriteItem))
                {
                    Buffer.BlockCopy(spriteItem.spriteHash, 0, currentItem.spriteHash, 0, spriteItem.spriteHash.Length);
                }
            }

            currentItem = null;
        }
예제 #6
0
        private UInt16 createItem(Item item)
        {
            UInt16 newId = (UInt16)(items.maxId + 1);

            //create a new otb item
            OtbItem newItem = new OtbItem(item);
            newItem.id = newId;
            newItem.spriteHash = new byte[16];

            if (item != null)
            {
                newItem.spriteId = item.id;
                Buffer.BlockCopy(item.spriteHash, 0, newItem.spriteHash, 0, newItem.spriteHash.Length);
            }
            else
            {
                newItem.spriteId = items.minId;
                newItem.isCustomCreated = true;
            }

            items.Add(newItem);
            return newId;
        }
예제 #7
0
        private bool compareItem(OtbItem item, bool compareHash)
        {
            if (item.type == ItemType.Deprecated)
            {
                return true;
            }

            SpriteItem spriteItem;
            if (currentPlugin.Instance.Items.TryGetValue(item.spriteId, out spriteItem))
            {
                if (compareHash && !Utils.ByteArrayCompare(item.spriteHash, spriteItem.spriteHash))
                {
                    return false;
                }

                return item.isEqual(spriteItem);
            }

            return false;
        }