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); } } }
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; } }
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); }