Beispiel #1
0
        private void CandidatePictureBox_Click(object sender, EventArgs e)
        {
            if (this.CurrentServerItem != null)
            {
                ClientItemView box = (ClientItemView)sender;
                if (box.Tag is ServerItem)
                {
                    ServerItem newItem = (ServerItem)box.Tag;

                    ClientItem clientItem;
                    if (!this.CurrentPlugin.Instance.Items.TryGetValue(newItem.ClientId, out clientItem))
                    {
                        return;
                    }

                    if (!clientItem.Equals(this.CurrentServerItem))
                    {
                        DialogResult result = MessageBox.Show(
                            "The item attributes does not match the current information, would you like to continue anyway?",
                            "Item attributes does not match",
                            MessageBoxButtons.YesNo,
                            MessageBoxIcon.Question,
                            MessageBoxDefaultButton.Button1);

                        if (result != DialogResult.Yes)
                        {
                            return;
                        }
                    }

                    this.CurrentServerItem.PreviousClientId = this.CurrentServerItem.ClientId;
                    this.CurrentServerItem.ClientId         = clientItem.ID;
                    this.EditItem(this.CurrentServerItem);
                }
            }
        }
Beispiel #2
0
        private void ShowSpriteCandidates(ClientItem clientItem)
        {
            this.candidatesButton.Enabled = true;

            // list with the top 5 results
            List <KeyValuePair <double, ServerItem> > signatureList = new List <KeyValuePair <double, ServerItem> >();

            foreach (ServerItem cmpItem in this.serverItems)
            {
                if (cmpItem.Type == ServerItemType.Deprecated)
                {
                    continue;
                }

                ClientItem cmpClientItem;
                if (!this.CurrentPlugin.Instance.Items.TryGetValue(cmpItem.ClientId, out cmpClientItem))
                {
                    continue;
                }

                double similarity = ImageUtils.CompareSignature(clientItem.SpriteSignature, cmpClientItem.SpriteSignature);

                foreach (KeyValuePair <double, ServerItem> kvp in signatureList)
                {
                    if (similarity < kvp.Key)
                    {
                        // TODO: Use isEqual aswell to match against attributes.
                        signatureList.Remove(kvp);
                        break;
                    }
                }

                if (signatureList.Count < 5)
                {
                    KeyValuePair <double, ServerItem> kvp = new KeyValuePair <double, ServerItem>(similarity, cmpItem);
                    signatureList.Add(kvp);
                }
            }

            signatureList.Sort(
                delegate(KeyValuePair <double, ServerItem> item1, KeyValuePair <double, ServerItem> item2)
            {
                return(item1.Key.CompareTo(item2.Key));
            });

            // those with lowest value are the closest match
            int index = 0;

            foreach (KeyValuePair <double, ServerItem> kvp in signatureList)
            {
                ClientItemView box = (ClientItemView)candidatesTableLayoutPanel.GetControlFromPosition(index, 0);
                toolTip.SetToolTip(box, kvp.Value.ClientId.ToString());
                box.Tag = kvp.Value;

                ClientItem candidateItem;
                if (this.CurrentPlugin.Instance.Items.TryGetValue(kvp.Value.ClientId, out candidateItem))
                {
                    box.ClientItem = candidateItem;
                }

                ++index;
            }
        }
Beispiel #3
0
        private bool EditItem(ServerItem item)
        {
            this.CurrentServerItem = null;
            this.ResetDataBindings(this);
            this.ResetToolTips();

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

            ClientItem clientItem;

            if (!this.CurrentPlugin.Instance.Items.TryGetValue(item.ClientId, out clientItem))
            {
                return(false);
            }

            this.pictureBox.ClientItem = clientItem;
            if (!item.IsCustomCreated && item.SpriteHash != null && clientItem.SpriteHash != null)
            {
                this.pictureBox.BackColor = Utils.ByteArrayCompare(item.SpriteHash, clientItem.SpriteHash) ? Color.White : Color.Red;
            }

            this.typeCombo.Text      = item.Type.ToString();
            this.typeCombo.ForeColor = item.Type == clientItem.Type ? Color.Black : Color.Red;

            this.stackOrderComboBox.Text      = item.StackOrder.ToString();
            this.stackOrderComboBox.ForeColor = item.StackOrder == clientItem.StackOrder ? Color.Black : Color.Red;

            this.serverIdLbl.DataBindings.Add("Text", item, "ID");
            this.clientIdUpDown.Minimum = this.serverItems.MinId;
            this.clientIdUpDown.Maximum = (this.CurrentPlugin.Instance.Items.Count + this.serverItems.MinId) - 1;
            this.clientIdUpDown.DataBindings.Add("Value", clientItem, "ID");

            // Attributes
            this.AddBinding(this.unpassableCheck, "Checked", item, "Unpassable", item.Unpassable, clientItem.Unpassable);
            this.AddBinding(this.movableCheck, "Checked", item, "Movable", item.Movable, clientItem.Movable);
            this.AddBinding(this.blockMissilesCheck, "Checked", item, "BlockMissiles", item.BlockMissiles, clientItem.BlockMissiles);
            this.AddBinding(this.blockPathfinderCheck, "Checked", item, "BlockPathfinder", item.BlockPathfinder, clientItem.BlockPathfinder);
            this.AddBinding(this.forceUseCheckBox, "Checked", item, "ForceUse", item.ForceUse, clientItem.ForceUse);
            this.AddBinding(this.useableCheck, "Checked", item, "MultiUse", item.MultiUse, clientItem.MultiUse);
            this.AddBinding(this.pickupableCheck, "Checked", item, "Pickupable", item.Pickupable, clientItem.Pickupable);
            this.AddBinding(this.stackableCheck, "Checked", item, "Stackable", item.Stackable, clientItem.Stackable);
            this.AddBinding(this.readableCheck, "Checked", item, "Readable", item.Readable, clientItem.Readable);
            this.AddBinding(this.rotatableCheck, "Checked", item, "Rotatable", item.Rotatable, clientItem.Rotatable);
            this.AddBinding(this.hangableCheck, "Checked", item, "Hangable", item.Hangable, clientItem.Hangable);
            this.AddBinding(this.hookSouthCheck, "Checked", item, "HookSouth", item.HookSouth, clientItem.HookSouth);
            this.AddBinding(this.hookEastCheck, "Checked", item, "HookEast", item.HookEast, clientItem.HookEast);
            this.AddBinding(this.hasElevationCheck, "Checked", item, "HasElevation", item.HasElevation, clientItem.HasElevation);
            this.AddBinding(this.ignoreLookCheck, "Checked", item, "IgnoreLook", item.IgnoreLook, clientItem.IgnoreLook);
            this.AddBinding(this.fullGroundCheck, "Checked", item, "FullGround", item.FullGround, clientItem.FullGround);
            this.AddBinding(this.groundSpeedText, "Text", item, "GroundSpeed", item.GroundSpeed, clientItem.GroundSpeed, true);
            this.AddBinding(this.lightLevelText, "Text", item, "LightLevel", item.LightLevel, clientItem.LightLevel, true);
            this.AddBinding(this.lightColorText, "Text", item, "LightColor", item.LightColor, clientItem.LightColor, true);
            this.AddBinding(this.maxReadCharsText, "Text", item, "MaxReadChars", item.MaxReadChars, clientItem.MaxReadChars, true);
            this.AddBinding(this.maxReadWriteCharsText, "Text", item, "MaxReadWriteChars", item.MaxReadWriteChars, clientItem.MaxReadWriteChars, true);
            this.AddBinding(this.minimapColorText, "Text", item, "MinimapColor", item.MinimapColor, clientItem.MinimapColor, true);
            this.AddBinding(this.wareIdText, "Text", item, "TradeAs", item.TradeAs, clientItem.TradeAs, true);
            this.AddBinding(this.nameText, "Text", item, "Name", item.Name, clientItem.Name, true);

            this.candidatesButton.Enabled = false;
            for (int i = 0; i < this.candidatesTableLayoutPanel.ColumnCount; ++i)
            {
                ClientItemView box = (ClientItemView)this.candidatesTableLayoutPanel.GetControlFromPosition(i, 0);
                box.ClientItem = null;
            }

            if (this.PreviousPlugin != null)
            {
                ClientItem prevClientItem;
                if (this.PreviousPlugin.Instance.Items.TryGetValue(item.PreviousClientId, out prevClientItem))
                {
                    this.previousPictureBox.ClientItem = prevClientItem;
                    if (prevClientItem.SpriteSignature != null)
                    {
                        // Sprite does not match, use the sprite signature to find possible candidates
                        this.ShowSpriteCandidates(prevClientItem);
                    }
                }
                else
                {
                    this.previousPictureBox.ClientItem = null;
                }
            }

            this.CurrentServerItem = item;
            return(true);
        }