private bool CompareItems() { OtbReader reader1 = new OtbReader(); if (!reader1.Read(this.file1Text.Text)) { MessageBox.Show("Could not open {0}.", this.file1Text.Text); return false; } OtbReader reader2 = new OtbReader(); if (!reader2.Read(this.file2Text.Text)) { MessageBox.Show("Could not open {0}.", this.file2Text.Text); return false; } IEnumerator<ServerItem> enumerator1 = reader1.Items.GetEnumerator(); IEnumerator<ServerItem> enumerator2 = reader2.Items.GetEnumerator(); if (reader1.Count != reader2.Count) { resultTextBox.AppendText(string.Format("Item count: [ {0} / {1} ]" + Environment.NewLine, reader1.Count, reader2.Count)); } while (enumerator1.MoveNext()) { if (!enumerator2.MoveNext()) { return false; } ServerItem item1 = enumerator1.Current; ServerItem item2 = enumerator2.Current; if (item1.ClientId != item2.ClientId) { resultTextBox.AppendText(string.Format("ID: {0} - Sprite changed - [ {1} / {2} ]" + Environment.NewLine, item1.ID, item1.ClientId, item2.ClientId)); continue; } if (item1.SpriteHash != null && item2.SpriteHash != null && !Utils.ByteArrayCompare(item1.SpriteHash, item2.SpriteHash)) { resultTextBox.AppendText(string.Format("ID: {0} - Sprite updated." + Environment.NewLine, item1.ID)); } foreach (PropertyInfo property in item1.GetType().GetProperties()) { if (property.Name != "SpriteHash" && property.Name != "ClientId") { object value1 = property.GetValue(item1, null); object value2 = item2.GetType().GetProperty(property.Name).GetValue(item2, null); if (!value1.Equals(value2)) { resultTextBox.AppendText(string.Format("ID: {0} - {1} - [ {2} / {3} ]{4}", item1.ID, property.Name, value1, value2, Environment.NewLine)); } } } } if (resultTextBox.Text.Length == 0) { MessageBox.Show("No differences found!"); } return true; }
public void Open(string path = null) { if (string.IsNullOrEmpty(path)) { FileDialog dialog = new OpenFileDialog(); dialog.Filter = "OTB files (*.otb)|*.otb"; dialog.Title = "Open OTB File"; if (dialog.ShowDialog() != DialogResult.OK || dialog.FileName.Length == 0) { return; } path = dialog.FileName; this.IsTemporary = false; this.Saved = true; } if (this.Loaded) { this.Clear(); } OtbReader reader = new OtbReader(); if (reader.Read(path)) { this.serverItems = reader.Items; this.CurrentOtbFullPath = path; this.CurrentOtbVersion = this.serverItems.MinorVersion; // try find a plugin that can handle this version of otb this.CurrentPlugin = Program.plugins.AvailablePlugins.Find(this.CurrentOtbVersion); if (this.CurrentPlugin == null) { this.serverItems.Clear(); MessageBox.Show(string.Format("Could not find a plugin that could handle client version {0}", this.CurrentOtbVersion)); return; } if (!this.LoadClient(this.CurrentPlugin, this.CurrentOtbVersion)) { this.Clear(false); return; } this.fileSaveAsMenuItem.Enabled = true; this.fileSaveMenuItem.Enabled = true; this.editCreateItemMenuItem.Enabled = true; this.editFindItemMenuItem.Enabled = true; this.viewShowOnlyMismatchedMenuItem.Enabled = true; this.viewShowDecaptedItemsMenuItem.Enabled = true; this.viewUpdateItemsListMenuItem.Enabled = true; this.toolsUpdateVersionMenuItem.Enabled = true; this.toolsReloadItemAttributesMenuItem.Enabled = true; this.toolStripSaveButton.Enabled = true; this.toolStripSaveAsButton.Enabled = true; this.toolStripFindItemButton.Enabled = true; this.serverItemListBox.Plugin = this.CurrentPlugin.Instance; this.serverItemListBox.Enabled = true; this.newItemButton.Enabled = true; this.duplicateItemButton.Enabled = true; this.reloadItemButton.Enabled = true; this.findItemButton.Enabled = true; this.Loaded = true; this.BuildItemsListBox(); } }