Add armor and tools
This commit is contained in:
@@ -8,6 +8,8 @@
|
||||
public string School { get; set; } = string.Empty;
|
||||
public string? Appearance { get; set; }
|
||||
public bool UsuallyCursed { get; set; } = false;
|
||||
public bool UniqueAppearance { get; set; } = true;
|
||||
public string Slot { get; set; } = string.Empty;
|
||||
}
|
||||
|
||||
public class ItemList {
|
||||
@@ -21,5 +23,6 @@
|
||||
School = 4,
|
||||
Appearance = 3,
|
||||
UsuallyCursed = 5,
|
||||
Slot = 6,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,6 +6,7 @@ using System.Linq;
|
||||
using System.Windows.Forms;
|
||||
using static System.Windows.Forms.ListViewItem;
|
||||
using System.ComponentModel;
|
||||
using System.Runtime.CompilerServices;
|
||||
|
||||
namespace NethackHelper {
|
||||
public partial class ItemDisplay : UserControl {
|
||||
@@ -20,6 +21,7 @@ namespace NethackHelper {
|
||||
[ItemAttribute.School] = item => item.School.ToString(),
|
||||
[ItemAttribute.Appearance] = item => item.Appearance ?? UNIDENTIFIED,
|
||||
[ItemAttribute.UsuallyCursed] = item => item.UsuallyCursed ? "C" : string.Empty,
|
||||
[ItemAttribute.Slot] = item => item.Slot.ToString(),
|
||||
};
|
||||
|
||||
[Browsable(false)]
|
||||
@@ -29,13 +31,17 @@ namespace NethackHelper {
|
||||
[DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
|
||||
public List<ItemDisplayColumn> Columns { get; set; } = new();
|
||||
|
||||
[DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
|
||||
public ItemAttribute Grouping { get; set; } = ItemAttribute.Cost;
|
||||
|
||||
private int[] GroupCosts { get; set; } = [];
|
||||
|
||||
private Dictionary<string, string?> AppearanceMap { get; set; } = new();
|
||||
private Dictionary<string, Item> ItemMap { get; set; } = new();
|
||||
|
||||
public ItemDisplay() {
|
||||
InitializeComponent();
|
||||
this.itemListView.ListViewItemSorter = Comparer<ListViewItem>.Create(CompareItems);
|
||||
this.itemListView.ListViewItemSorter = Comparer<ListViewItem>.Create(this.CompareItems);
|
||||
}
|
||||
|
||||
protected override void OnLoad(EventArgs e) {
|
||||
@@ -56,14 +62,19 @@ namespace NethackHelper {
|
||||
this.itemListView.Groups.Clear();
|
||||
this.itemListView.Items.Clear();
|
||||
this.AppearanceMap.Clear();
|
||||
this.ItemMap.Clear();
|
||||
|
||||
this.GroupCosts = itemList.Items.Select(item => item.Cost).Distinct().Order().ToArray();
|
||||
var costDictionary = new Dictionary<int, ListViewGroup>();
|
||||
if (this.Grouping == ItemAttribute.Cost) {
|
||||
this.GroupCosts = itemList.Items.Select(item => item.Cost).Distinct().Order().ToArray();
|
||||
}
|
||||
|
||||
foreach (var cost in this.GroupCosts) {
|
||||
var group = new ListViewGroup(this.CostFormatter.Invoke(cost), HorizontalAlignment.Center);
|
||||
this.itemListView.Groups.Add(group);
|
||||
costDictionary.Add(cost, group);
|
||||
var groups = itemList.Items.Select(item => COLUMN_MAP[this.Grouping].Invoke(item)).Distinct().Order();
|
||||
var groupDictionary = new Dictionary<string, ListViewGroup>();
|
||||
|
||||
foreach (var group in groups) {
|
||||
var listViewGroup = new ListViewGroup(group, HorizontalAlignment.Center);
|
||||
this.itemListView.Groups.Add(listViewGroup);
|
||||
groupDictionary.Add(group, listViewGroup);
|
||||
}
|
||||
|
||||
foreach (var item in itemList.Items) {
|
||||
@@ -79,14 +90,16 @@ namespace NethackHelper {
|
||||
Name = item.Name,
|
||||
Appearance = item.Appearance,
|
||||
};
|
||||
identified = true;
|
||||
identified = item.UniqueAppearance;
|
||||
}
|
||||
|
||||
AppearanceMap[item.Name] = record.Appearance;
|
||||
this.ItemMap[item.Name] = item;
|
||||
this.AppearanceMap[item.Name] = record.Appearance;
|
||||
|
||||
var columns = this.Columns.Select(col => COLUMN_MAP[col.Attribute].Invoke(item)).ToArray();
|
||||
var groupName = COLUMN_MAP[this.Grouping].Invoke(item);
|
||||
|
||||
var listViewItem = new ListViewItem(columns, costDictionary[item.Cost]);
|
||||
var listViewItem = new ListViewItem(columns, groupDictionary[groupName]);
|
||||
listViewItem.UseItemStyleForSubItems = false;
|
||||
var baseFont = new Font(this.itemListView.Font, FontStyle.Regular);
|
||||
var baseColor = UNSELECTED_COLOR;
|
||||
@@ -115,6 +128,8 @@ namespace NethackHelper {
|
||||
}
|
||||
this.itemListView.Items.Add(listViewItem);
|
||||
}
|
||||
|
||||
this.UpdateCostHeaders();
|
||||
}
|
||||
|
||||
public IdentificationRecord Export() {
|
||||
@@ -132,8 +147,10 @@ namespace NethackHelper {
|
||||
}
|
||||
|
||||
public void UpdateCostHeaders() {
|
||||
for (int i = 0; i < this.GroupCosts.Length; i++) {
|
||||
this.itemListView.Groups[i].Header = this.CostFormatter.Invoke(this.GroupCosts[i]);
|
||||
if (this.Grouping == ItemAttribute.Cost) {
|
||||
for (int i = 0; i < this.GroupCosts.Length; i++) {
|
||||
this.itemListView.Groups[i].Header = this.CostFormatter.Invoke(this.GroupCosts[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -163,9 +180,11 @@ namespace NethackHelper {
|
||||
}
|
||||
}
|
||||
|
||||
private static int CompareItems(ListViewItem a, ListViewItem b) {
|
||||
private int CompareItems(ListViewItem a, ListViewItem b) {
|
||||
if (a.Checked != b.Checked) {
|
||||
return a.Checked.CompareTo(b.Checked);
|
||||
} else if (this.ItemMap[a.Text].Cost != this.ItemMap[b.Text].Cost) {
|
||||
return this.ItemMap[a.Text].Cost.CompareTo(this.ItemMap[b.Text].Cost);
|
||||
} else {
|
||||
return a.Text.CompareTo(b.Text);
|
||||
}
|
||||
@@ -174,10 +193,10 @@ namespace NethackHelper {
|
||||
|
||||
[Serializable]
|
||||
public class ItemDisplayColumn {
|
||||
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
|
||||
[DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
|
||||
public ItemAttribute Attribute { get; set; }
|
||||
|
||||
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
|
||||
[DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
|
||||
public int Width { get; set; }
|
||||
}
|
||||
}
|
||||
|
||||
51
NethackHelper/MainForm.Designer.cs
generated
51
NethackHelper/MainForm.Designer.cs
generated
@@ -42,6 +42,9 @@ namespace NethackHelper {
|
||||
spellbookTab = new TabPage();
|
||||
amuletDisplay = new ItemDisplay();
|
||||
spellbookDisplay = new ItemDisplay();
|
||||
toolsTab = new TabPage();
|
||||
armorDisplay = new ItemDisplay();
|
||||
toolDisplay = new ItemDisplay();
|
||||
charismaSelector = new ComboBox();
|
||||
intrinsicsTab = new TabPage();
|
||||
label2 = new Label();
|
||||
@@ -75,6 +78,7 @@ namespace NethackHelper {
|
||||
mainMenu = new MenuStrip();
|
||||
fileToolStripMenuItem = new ToolStripMenuItem();
|
||||
resetToolStripMenuItem = new ToolStripMenuItem();
|
||||
toolTip1 = new ToolTip(components);
|
||||
mainTabControl.SuspendLayout();
|
||||
itemsTab.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize) saveSourceBindingSource).BeginInit();
|
||||
@@ -82,6 +86,7 @@ namespace NethackHelper {
|
||||
scrollPotionTab.SuspendLayout();
|
||||
wandRingTab.SuspendLayout();
|
||||
spellbookTab.SuspendLayout();
|
||||
toolsTab.SuspendLayout();
|
||||
intrinsicsTab.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize) lastPrayerPicker).BeginInit();
|
||||
((System.ComponentModel.ISupportInitialize) intrinsicsBindingSource).BeginInit();
|
||||
@@ -119,12 +124,14 @@ namespace NethackHelper {
|
||||
// suckerBox
|
||||
//
|
||||
suckerBox.AutoSize = true;
|
||||
suckerBox.Cursor = Cursors.Help;
|
||||
suckerBox.DataBindings.Add(new Binding("Checked", saveSourceBindingSource, "Sucker", true));
|
||||
suckerBox.Location = new Point(133, 8);
|
||||
suckerBox.Name = "suckerBox";
|
||||
suckerBox.Size = new Size(61, 19);
|
||||
suckerBox.TabIndex = 2;
|
||||
suckerBox.Text = "Sucker";
|
||||
toolTip1.SetToolTip(suckerBox, "Check this box if you are a tourist under level 15, are wearing a dunce cap, or are wearing a visible shirt.");
|
||||
suckerBox.UseVisualStyleBackColor = true;
|
||||
suckerBox.CheckedChanged += suckerBox_CheckedChanged;
|
||||
//
|
||||
@@ -139,6 +146,7 @@ namespace NethackHelper {
|
||||
itemTabControl.Controls.Add(scrollPotionTab);
|
||||
itemTabControl.Controls.Add(wandRingTab);
|
||||
itemTabControl.Controls.Add(spellbookTab);
|
||||
itemTabControl.Controls.Add(toolsTab);
|
||||
itemTabControl.Location = new Point(6, 35);
|
||||
itemTabControl.Name = "itemTabControl";
|
||||
itemTabControl.SelectedIndex = 0;
|
||||
@@ -161,6 +169,7 @@ namespace NethackHelper {
|
||||
//
|
||||
potionDisplay.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left;
|
||||
potionDisplay.Columns = (System.Collections.Generic.List<ItemDisplayColumn>) resources.GetObject("potionDisplay.Columns");
|
||||
potionDisplay.Grouping = ItemAttribute.Cost;
|
||||
potionDisplay.Location = new Point(325, 6);
|
||||
potionDisplay.Name = "potionDisplay";
|
||||
potionDisplay.Size = new Size(313, 515);
|
||||
@@ -170,6 +179,7 @@ namespace NethackHelper {
|
||||
//
|
||||
scrollDisplay.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left;
|
||||
scrollDisplay.Columns = (System.Collections.Generic.List<ItemDisplayColumn>) resources.GetObject("scrollDisplay.Columns");
|
||||
scrollDisplay.Grouping = ItemAttribute.Cost;
|
||||
scrollDisplay.Location = new Point(6, 6);
|
||||
scrollDisplay.Name = "scrollDisplay";
|
||||
scrollDisplay.Size = new Size(313, 515);
|
||||
@@ -191,6 +201,7 @@ namespace NethackHelper {
|
||||
//
|
||||
ringDisplay.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Right;
|
||||
ringDisplay.Columns = (System.Collections.Generic.List<ItemDisplayColumn>) resources.GetObject("ringDisplay.Columns");
|
||||
ringDisplay.Grouping = ItemAttribute.Cost;
|
||||
ringDisplay.Location = new Point(325, 6);
|
||||
ringDisplay.Name = "ringDisplay";
|
||||
ringDisplay.Size = new Size(313, 515);
|
||||
@@ -200,6 +211,7 @@ namespace NethackHelper {
|
||||
//
|
||||
wandDisplay.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left;
|
||||
wandDisplay.Columns = (System.Collections.Generic.List<ItemDisplayColumn>) resources.GetObject("wandDisplay.Columns");
|
||||
wandDisplay.Grouping = ItemAttribute.Cost;
|
||||
wandDisplay.Location = new Point(6, 6);
|
||||
wandDisplay.Name = "wandDisplay";
|
||||
wandDisplay.Size = new Size(313, 515);
|
||||
@@ -221,6 +233,7 @@ namespace NethackHelper {
|
||||
//
|
||||
amuletDisplay.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Right;
|
||||
amuletDisplay.Columns = (System.Collections.Generic.List<ItemDisplayColumn>) resources.GetObject("amuletDisplay.Columns");
|
||||
amuletDisplay.Grouping = ItemAttribute.Cost;
|
||||
amuletDisplay.Location = new Point(325, 6);
|
||||
amuletDisplay.Name = "amuletDisplay";
|
||||
amuletDisplay.Size = new Size(313, 515);
|
||||
@@ -230,11 +243,44 @@ namespace NethackHelper {
|
||||
//
|
||||
spellbookDisplay.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left;
|
||||
spellbookDisplay.Columns = (System.Collections.Generic.List<ItemDisplayColumn>) resources.GetObject("spellbookDisplay.Columns");
|
||||
spellbookDisplay.Grouping = ItemAttribute.Cost;
|
||||
spellbookDisplay.Location = new Point(6, 6);
|
||||
spellbookDisplay.Name = "spellbookDisplay";
|
||||
spellbookDisplay.Size = new Size(313, 515);
|
||||
spellbookDisplay.TabIndex = 0;
|
||||
//
|
||||
// toolsTab
|
||||
//
|
||||
toolsTab.Controls.Add(armorDisplay);
|
||||
toolsTab.Controls.Add(toolDisplay);
|
||||
toolsTab.Location = new Point(4, 24);
|
||||
toolsTab.Name = "toolsTab";
|
||||
toolsTab.Padding = new Padding(3);
|
||||
toolsTab.Size = new Size(644, 527);
|
||||
toolsTab.TabIndex = 4;
|
||||
toolsTab.Text = "Tools / Armor";
|
||||
toolsTab.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// armorDisplay
|
||||
//
|
||||
armorDisplay.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Right;
|
||||
armorDisplay.Columns = (System.Collections.Generic.List<ItemDisplayColumn>) resources.GetObject("armorDisplay.Columns");
|
||||
armorDisplay.Grouping = ItemAttribute.Slot;
|
||||
armorDisplay.Location = new Point(225, 6);
|
||||
armorDisplay.Name = "armorDisplay";
|
||||
armorDisplay.Size = new Size(413, 515);
|
||||
armorDisplay.TabIndex = 1;
|
||||
//
|
||||
// toolDisplay
|
||||
//
|
||||
toolDisplay.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left;
|
||||
toolDisplay.Columns = (System.Collections.Generic.List<ItemDisplayColumn>) resources.GetObject("toolDisplay.Columns");
|
||||
toolDisplay.Grouping = ItemAttribute.Appearance;
|
||||
toolDisplay.Location = new Point(6, 6);
|
||||
toolDisplay.Name = "toolDisplay";
|
||||
toolDisplay.Size = new Size(213, 515);
|
||||
toolDisplay.TabIndex = 0;
|
||||
//
|
||||
// charismaSelector
|
||||
//
|
||||
charismaSelector.DataBindings.Add(new Binding("SelectedItem", saveSourceBindingSource, "CharismaClass", true));
|
||||
@@ -617,6 +663,7 @@ namespace NethackHelper {
|
||||
scrollPotionTab.ResumeLayout(false);
|
||||
wandRingTab.ResumeLayout(false);
|
||||
spellbookTab.ResumeLayout(false);
|
||||
toolsTab.ResumeLayout(false);
|
||||
intrinsicsTab.ResumeLayout(false);
|
||||
intrinsicsTab.PerformLayout();
|
||||
((System.ComponentModel.ISupportInitialize) lastPrayerPicker).EndInit();
|
||||
@@ -680,5 +727,9 @@ namespace NethackHelper {
|
||||
private TabPage spellbookTab;
|
||||
private ItemDisplay spellbookDisplay;
|
||||
private ItemDisplay amuletDisplay;
|
||||
private ToolTip toolTip1;
|
||||
private TabPage toolsTab;
|
||||
private ItemDisplay toolDisplay;
|
||||
private ItemDisplay armorDisplay;
|
||||
}
|
||||
}
|
||||
@@ -20,6 +20,8 @@ namespace NethackHelper {
|
||||
this.ringDisplay.CostFormatter = GetCostString;
|
||||
this.spellbookDisplay.CostFormatter = GetCostString;
|
||||
this.amuletDisplay.CostFormatter = GetCostString;
|
||||
this.toolDisplay.CostFormatter = GetCostString;
|
||||
this.armorDisplay.CostFormatter = GetCostString;
|
||||
}
|
||||
|
||||
protected override void OnLoad(EventArgs e) {
|
||||
@@ -80,6 +82,12 @@ namespace NethackHelper {
|
||||
|
||||
var amulets = YamlOptions.DeserializeFile<ItemList>(Path.Join("items", version.Amulets));
|
||||
this.amuletDisplay.DisplayItemList(amulets, save.Amulets);
|
||||
|
||||
var tools = YamlOptions.DeserializeFile<ItemList>(Path.Join("items", version.Tools));
|
||||
this.toolDisplay.DisplayItemList(tools, save.Tools);
|
||||
|
||||
var armor = YamlOptions.DeserializeFile<ItemList>(Path.Join("items", version.Armor));
|
||||
this.armorDisplay.DisplayItemList(armor, save.Armor);
|
||||
}
|
||||
|
||||
private string GetCostString(int cost) {
|
||||
@@ -164,6 +172,8 @@ namespace NethackHelper {
|
||||
this.ringDisplay.UpdateCostHeaders();
|
||||
this.spellbookDisplay.UpdateCostHeaders();
|
||||
this.amuletDisplay.UpdateCostHeaders();
|
||||
this.toolDisplay.UpdateCostHeaders();
|
||||
this.armorDisplay.UpdateCostHeaders();
|
||||
}
|
||||
|
||||
private void charismaSelector_SelectedIndexChanged(object sender, EventArgs e) {
|
||||
@@ -192,6 +202,8 @@ namespace NethackHelper {
|
||||
save.Wands = this.wandDisplay.Export();
|
||||
save.Spellbooks = this.spellbookDisplay.Export();
|
||||
save.Amulets = this.amuletDisplay.Export();
|
||||
save.Tools = this.toolDisplay.Export();
|
||||
save.Armor = this.armorDisplay.Export();
|
||||
|
||||
save.Save();
|
||||
}
|
||||
|
||||
@@ -120,13 +120,16 @@
|
||||
<metadata name="saveSourceBindingSource.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>410, 17</value>
|
||||
</metadata>
|
||||
<metadata name="toolTip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>712, 17</value>
|
||||
</metadata>
|
||||
<data name="potionDisplay.Columns" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>
|
||||
AAEAAAD/////AQAAAAAAAAAMAgAAAEROZXRoYWNrSGVscGVyLCBWZXJzaW9uPTEuMC4wLjAsIEN1bHR1
|
||||
cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAQBAAAAeVN5c3RlbS5Db2xsZWN0aW9ucy5HZW5l
|
||||
cmljLkxpc3RgMVtbTmV0aGFja0hlbHBlci5JdGVtRGlzcGxheUNvbHVtbiwgTmV0aGFja0hlbHBlciwg
|
||||
Q3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1udWxsXV0DAAAABl9pdGVtcwVfc2l6ZQhfdmVy
|
||||
c2lvbgQAACFOZXRoYWNrSGVscGVyLkl0ZW1EaXNwbGF5Q29sdW1uW10CAAAACAgJAwAAAAIAAAAIAAAA
|
||||
c2lvbgQAACFOZXRoYWNrSGVscGVyLkl0ZW1EaXNwbGF5Q29sdW1uW10CAAAACAgJAwAAAAIAAAACAAAA
|
||||
DAQAAAAzTmV0aGFja0hlbHBlciwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1udWxsBwMA
|
||||
AAAAAQAAAAQAAAAEH05ldGhhY2tIZWxwZXIuSXRlbURpc3BsYXlDb2x1bW4EAAAACQUAAAAJBgAAAA0C
|
||||
BQUAAAAfTmV0aGFja0hlbHBlci5JdGVtRGlzcGxheUNvbHVtbgIAAAAaPEF0dHJpYnV0ZT5rX19CYWNr
|
||||
@@ -141,7 +144,7 @@
|
||||
cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAQBAAAAeVN5c3RlbS5Db2xsZWN0aW9ucy5HZW5l
|
||||
cmljLkxpc3RgMVtbTmV0aGFja0hlbHBlci5JdGVtRGlzcGxheUNvbHVtbiwgTmV0aGFja0hlbHBlciwg
|
||||
Q3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1udWxsXV0DAAAABl9pdGVtcwVfc2l6ZQhfdmVy
|
||||
c2lvbgQAACFOZXRoYWNrSGVscGVyLkl0ZW1EaXNwbGF5Q29sdW1uW10CAAAACAgJAwAAAAMAAAAmAAAA
|
||||
c2lvbgQAACFOZXRoYWNrSGVscGVyLkl0ZW1EaXNwbGF5Q29sdW1uW10CAAAACAgJAwAAAAMAAAADAAAA
|
||||
DAQAAAAzTmV0aGFja0hlbHBlciwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1udWxsBwMA
|
||||
AAAAAQAAAAQAAAAEH05ldGhhY2tIZWxwZXIuSXRlbURpc3BsYXlDb2x1bW4EAAAACQUAAAAJBgAAAAkH
|
||||
AAAACgUFAAAAH05ldGhhY2tIZWxwZXIuSXRlbURpc3BsYXlDb2x1bW4CAAAAGjxBdHRyaWJ1dGU+a19f
|
||||
@@ -157,7 +160,7 @@
|
||||
cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAQBAAAAeVN5c3RlbS5Db2xsZWN0aW9ucy5HZW5l
|
||||
cmljLkxpc3RgMVtbTmV0aGFja0hlbHBlci5JdGVtRGlzcGxheUNvbHVtbiwgTmV0aGFja0hlbHBlciwg
|
||||
Q3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1udWxsXV0DAAAABl9pdGVtcwVfc2l6ZQhfdmVy
|
||||
c2lvbgQAACFOZXRoYWNrSGVscGVyLkl0ZW1EaXNwbGF5Q29sdW1uW10CAAAACAgJAwAAAAMAAAAUAAAA
|
||||
c2lvbgQAACFOZXRoYWNrSGVscGVyLkl0ZW1EaXNwbGF5Q29sdW1uW10CAAAACAgJAwAAAAMAAAAHAAAA
|
||||
DAQAAAAzTmV0aGFja0hlbHBlciwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1udWxsBwMA
|
||||
AAAAAQAAAAQAAAAEH05ldGhhY2tIZWxwZXIuSXRlbURpc3BsYXlDb2x1bW4EAAAACQUAAAAJBgAAAAkH
|
||||
AAAACgUFAAAAH05ldGhhY2tIZWxwZXIuSXRlbURpc3BsYXlDb2x1bW4CAAAAGjxBdHRyaWJ1dGU+a19f
|
||||
@@ -173,7 +176,7 @@
|
||||
cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAQBAAAAeVN5c3RlbS5Db2xsZWN0aW9ucy5HZW5l
|
||||
cmljLkxpc3RgMVtbTmV0aGFja0hlbHBlci5JdGVtRGlzcGxheUNvbHVtbiwgTmV0aGFja0hlbHBlciwg
|
||||
Q3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1udWxsXV0DAAAABl9pdGVtcwVfc2l6ZQhfdmVy
|
||||
c2lvbgQAACFOZXRoYWNrSGVscGVyLkl0ZW1EaXNwbGF5Q29sdW1uW10CAAAACAgJAwAAAAIAAAAIAAAA
|
||||
c2lvbgQAACFOZXRoYWNrSGVscGVyLkl0ZW1EaXNwbGF5Q29sdW1uW10CAAAACAgJAwAAAAIAAAACAAAA
|
||||
DAQAAAAzTmV0aGFja0hlbHBlciwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1udWxsBwMA
|
||||
AAAAAQAAAAQAAAAEH05ldGhhY2tIZWxwZXIuSXRlbURpc3BsYXlDb2x1bW4EAAAACQUAAAAJBgAAAA0C
|
||||
BQUAAAAfTmV0aGFja0hlbHBlci5JdGVtRGlzcGxheUNvbHVtbgIAAAAaPEF0dHJpYnV0ZT5rX19CYWNr
|
||||
@@ -188,7 +191,7 @@
|
||||
cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAQBAAAAeVN5c3RlbS5Db2xsZWN0aW9ucy5HZW5l
|
||||
cmljLkxpc3RgMVtbTmV0aGFja0hlbHBlci5JdGVtRGlzcGxheUNvbHVtbiwgTmV0aGFja0hlbHBlciwg
|
||||
Q3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1udWxsXV0DAAAABl9pdGVtcwVfc2l6ZQhfdmVy
|
||||
c2lvbgQAACFOZXRoYWNrSGVscGVyLkl0ZW1EaXNwbGF5Q29sdW1uW10CAAAACAgJAwAAAAMAAAA0AAAA
|
||||
c2lvbgQAACFOZXRoYWNrSGVscGVyLkl0ZW1EaXNwbGF5Q29sdW1uW10CAAAACAgJAwAAAAMAAAADAAAA
|
||||
DAQAAAAzTmV0aGFja0hlbHBlciwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1udWxsBwMA
|
||||
AAAAAQAAAAQAAAAEH05ldGhhY2tIZWxwZXIuSXRlbURpc3BsYXlDb2x1bW4EAAAACQUAAAAJBgAAAAkH
|
||||
AAAACgUFAAAAH05ldGhhY2tIZWxwZXIuSXRlbURpc3BsYXlDb2x1bW4CAAAAGjxBdHRyaWJ1dGU+a19f
|
||||
@@ -204,7 +207,7 @@
|
||||
cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAQBAAAAeVN5c3RlbS5Db2xsZWN0aW9ucy5HZW5l
|
||||
cmljLkxpc3RgMVtbTmV0aGFja0hlbHBlci5JdGVtRGlzcGxheUNvbHVtbiwgTmV0aGFja0hlbHBlciwg
|
||||
Q3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1udWxsXV0DAAAABl9pdGVtcwVfc2l6ZQhfdmVy
|
||||
c2lvbgQAACFOZXRoYWNrSGVscGVyLkl0ZW1EaXNwbGF5Q29sdW1uW10CAAAACAgJAwAAAAMAAAA4AAAA
|
||||
c2lvbgQAACFOZXRoYWNrSGVscGVyLkl0ZW1EaXNwbGF5Q29sdW1uW10CAAAACAgJAwAAAAMAAAADAAAA
|
||||
DAQAAAAzTmV0aGFja0hlbHBlciwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1udWxsBwMA
|
||||
AAAAAQAAAAQAAAAEH05ldGhhY2tIZWxwZXIuSXRlbURpc3BsYXlDb2x1bW4EAAAACQUAAAAJBgAAAAkH
|
||||
AAAACgUFAAAAH05ldGhhY2tIZWxwZXIuSXRlbURpc3BsYXlDb2x1bW4CAAAAGjxBdHRyaWJ1dGU+a19f
|
||||
@@ -212,6 +215,37 @@
|
||||
aWJ1dGUEAAAACAQAAAAF+P///xtOZXRoYWNrSGVscGVyLkl0ZW1BdHRyaWJ1dGUBAAAAB3ZhbHVlX18A
|
||||
CAQAAAAAAAAAbgAAAAEGAAAABQAAAAH3////+P///wQAAABZAAAAAQcAAAAFAAAAAfb////4////AwAA
|
||||
AFoAAAAL
|
||||
</value>
|
||||
</data>
|
||||
<data name="armorDisplay.Columns" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>
|
||||
AAEAAAD/////AQAAAAAAAAAMAgAAAEROZXRoYWNrSGVscGVyLCBWZXJzaW9uPTEuMC4wLjAsIEN1bHR1
|
||||
cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAQBAAAAeVN5c3RlbS5Db2xsZWN0aW9ucy5HZW5l
|
||||
cmljLkxpc3RgMVtbTmV0aGFja0hlbHBlci5JdGVtRGlzcGxheUNvbHVtbiwgTmV0aGFja0hlbHBlciwg
|
||||
Q3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1udWxsXV0DAAAABl9pdGVtcwVfc2l6ZQhfdmVy
|
||||
c2lvbgQAACFOZXRoYWNrSGVscGVyLkl0ZW1EaXNwbGF5Q29sdW1uW10CAAAACAgJAwAAAAQAAAAqAAAA
|
||||
DAQAAAAzTmV0aGFja0hlbHBlciwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1udWxsBwMA
|
||||
AAAAAQAAAAQAAAAEH05ldGhhY2tIZWxwZXIuSXRlbURpc3BsYXlDb2x1bW4EAAAACQUAAAAJBgAAAAkH
|
||||
AAAACQgAAAAFBQAAAB9OZXRoYWNrSGVscGVyLkl0ZW1EaXNwbGF5Q29sdW1uAgAAABo8QXR0cmlidXRl
|
||||
PmtfX0JhY2tpbmdGaWVsZBY8V2lkdGg+a19fQmFja2luZ0ZpZWxkBAAbTmV0aGFja0hlbHBlci5JdGVt
|
||||
QXR0cmlidXRlBAAAAAgEAAAABff///8bTmV0aGFja0hlbHBlci5JdGVtQXR0cmlidXRlAQAAAAd2YWx1
|
||||
ZV9fAAgEAAAAAAAAALgAAAABBgAAAAUAAAAB9v////f///8FAAAAFAAAAAEHAAAABQAAAAH1////9///
|
||||
/wEAAAAoAAAAAQgAAAAFAAAAAfT////3////AwAAAJAAAAAL
|
||||
</value>
|
||||
</data>
|
||||
<data name="toolDisplay.Columns" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>
|
||||
AAEAAAD/////AQAAAAAAAAAMAgAAAEROZXRoYWNrSGVscGVyLCBWZXJzaW9uPTEuMC4wLjAsIEN1bHR1
|
||||
cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAQBAAAAeVN5c3RlbS5Db2xsZWN0aW9ucy5HZW5l
|
||||
cmljLkxpc3RgMVtbTmV0aGFja0hlbHBlci5JdGVtRGlzcGxheUNvbHVtbiwgTmV0aGFja0hlbHBlciwg
|
||||
Q3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1udWxsXV0DAAAABl9pdGVtcwVfc2l6ZQhfdmVy
|
||||
c2lvbgQAACFOZXRoYWNrSGVscGVyLkl0ZW1EaXNwbGF5Q29sdW1uW10CAAAACAgJAwAAAAIAAAAOAAAA
|
||||
DAQAAAAzTmV0aGFja0hlbHBlciwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1udWxsBwMA
|
||||
AAAAAQAAAAQAAAAEH05ldGhhY2tIZWxwZXIuSXRlbURpc3BsYXlDb2x1bW4EAAAACQUAAAAJBgAAAA0C
|
||||
BQUAAAAfTmV0aGFja0hlbHBlci5JdGVtRGlzcGxheUNvbHVtbgIAAAAaPEF0dHJpYnV0ZT5rX19CYWNr
|
||||
aW5nRmllbGQWPFdpZHRoPmtfX0JhY2tpbmdGaWVsZAQAG05ldGhhY2tIZWxwZXIuSXRlbUF0dHJpYnV0
|
||||
ZQQAAAAIBAAAAAX5////G05ldGhhY2tIZWxwZXIuSXRlbUF0dHJpYnV0ZQEAAAAHdmFsdWVfXwAIBAAA
|
||||
AAAAAACPAAAAAQYAAAAFAAAAAfj////5////AQAAAC0AAAAL
|
||||
</value>
|
||||
</data>
|
||||
<metadata name="intrinsicsBindingSource.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
|
||||
@@ -43,6 +43,12 @@
|
||||
if (save.Amulets != null && save.Amulets.Count > 0) {
|
||||
this.Amulets = new(save.Amulets);
|
||||
}
|
||||
if (save.Tools != null && save.Tools.Count > 0) {
|
||||
this.Tools = new(save.Tools);
|
||||
}
|
||||
if (save.Armor != null && save.Armor.Count > 0) {
|
||||
this.Armor = new(save.Armor);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -60,6 +66,8 @@
|
||||
Wands = this.Wands?.Export() ?? [],
|
||||
Spellbooks = this.Spellbooks?.Export() ?? [],
|
||||
Amulets = this.Amulets?.Export() ?? [],
|
||||
Tools = this.Tools?.Export() ?? [],
|
||||
Armor = this.Armor?.Export() ?? [],
|
||||
};
|
||||
|
||||
YamlOptions.SerializeToFile(fileName, save);
|
||||
@@ -75,6 +83,8 @@
|
||||
this.Wands = null;
|
||||
this.Spellbooks = null;
|
||||
this.Amulets = null;
|
||||
this.Tools = null;
|
||||
this.Armor = null;
|
||||
this.Intrinsics = new();
|
||||
}
|
||||
|
||||
@@ -88,6 +98,8 @@
|
||||
public IdentificationRecord? Wands { get; set; }
|
||||
public IdentificationRecord? Spellbooks { get; set; }
|
||||
public IdentificationRecord? Amulets { get; set; }
|
||||
public IdentificationRecord? Tools { get; set; }
|
||||
public IdentificationRecord? Armor { get; set; }
|
||||
}
|
||||
|
||||
public struct ItemRecord {
|
||||
@@ -127,6 +139,8 @@
|
||||
public List<ItemRecord> Wands { get; set; } = new();
|
||||
public List<ItemRecord> Spellbooks { get; set; } = new();
|
||||
public List<ItemRecord> Amulets { get; set; } = new();
|
||||
public List<ItemRecord> Tools { get; set; } = new();
|
||||
public List<ItemRecord> Armor { get; set; } = new();
|
||||
}
|
||||
|
||||
public class Intrinsics {
|
||||
|
||||
@@ -7,5 +7,7 @@
|
||||
public string Rings { get; set; }
|
||||
public string Spellbooks { get; set; }
|
||||
public string Amulets { get; set; }
|
||||
public string Tools { get; set; }
|
||||
public string Armor { get; set; }
|
||||
}
|
||||
}
|
||||
|
||||
71
NethackHelper/items/armor-36.yaml
Normal file
71
NethackHelper/items/armor-36.yaml
Normal file
@@ -0,0 +1,71 @@
|
||||
items:
|
||||
- name: Cloak of Displacement
|
||||
cost: 50
|
||||
slot: cloak
|
||||
- name: Cloak of Invisibility
|
||||
cost: 60
|
||||
slot: cloak
|
||||
- name: Cloak of Magic Resistance
|
||||
cost: 60
|
||||
slot: cloak
|
||||
- name: Cloak of Protection
|
||||
cost: 50
|
||||
slot: cloak
|
||||
- name: Dunce Cap
|
||||
cost: 1
|
||||
appearance: conical hat
|
||||
slot: helm
|
||||
uniqueAppearance: false
|
||||
- name: Cornuthaum
|
||||
cost: 80
|
||||
appearance: conical hat
|
||||
slot: helm
|
||||
uniqueAppearance: false
|
||||
- name: Helmet
|
||||
cost: 10
|
||||
slot: helm
|
||||
- name: Helm of Brilliance
|
||||
cost: 50
|
||||
slot: helm
|
||||
- name: Helm of Opposite Alignment
|
||||
cost: 50
|
||||
slot: helm
|
||||
- name: Helm of Telepathy
|
||||
cost: 50
|
||||
slot: helm
|
||||
- name: Leather Gloves
|
||||
cost: 8
|
||||
slot: gloves
|
||||
- name: Gauntlets of Dexterity
|
||||
cost: 50
|
||||
slot: gloves
|
||||
- name: Gauntlets of Fumbling
|
||||
cost: 50
|
||||
slot: gloves
|
||||
usuallyCursed: true
|
||||
- name: Gauntlets of Power
|
||||
cost: 50
|
||||
slot: gloves
|
||||
- name: Elven Boots
|
||||
cost: 8
|
||||
slot: boots
|
||||
- name: Kicking Boots
|
||||
cost: 8
|
||||
slot: boots
|
||||
- name: Fumble Boots
|
||||
cost: 30
|
||||
slot: boots
|
||||
usuallyCursed: true
|
||||
- name: Levitation Boots
|
||||
cost: 30
|
||||
slot: boots
|
||||
usuallyCursed: true
|
||||
- name: Jumping Boots
|
||||
cost: 50
|
||||
slot: boots
|
||||
- name: Speed Boots
|
||||
cost: 50
|
||||
slot: boots
|
||||
- name: Water Walking Boots
|
||||
cost: 50
|
||||
slot: boots
|
||||
75
NethackHelper/items/armor-37.yaml
Normal file
75
NethackHelper/items/armor-37.yaml
Normal file
@@ -0,0 +1,75 @@
|
||||
items:
|
||||
- name: Cloak of Displacement
|
||||
cost: 50
|
||||
slot: cloak
|
||||
- name: Cloak of Invisibility
|
||||
cost: 60
|
||||
slot: cloak
|
||||
- name: Cloak of Magic Resistance
|
||||
cost: 60
|
||||
slot: cloak
|
||||
- name: Cloak of Protection
|
||||
cost: 50
|
||||
slot: cloak
|
||||
- name: Dunce Cap
|
||||
cost: 1
|
||||
appearance: conical hat
|
||||
slot: helm
|
||||
uniqueAppearance: false
|
||||
- name: Cornuthaum
|
||||
cost: 80
|
||||
appearance: conical hat
|
||||
slot: helm
|
||||
uniqueAppearance: false
|
||||
- name: Helmet
|
||||
cost: 10
|
||||
slot: helm
|
||||
- name: Helm of Brilliance
|
||||
cost: 50
|
||||
slot: helm
|
||||
appearance: crystal helm
|
||||
- name: Helm of Caution
|
||||
cost: 50
|
||||
slot: helm
|
||||
- name: Helm of Opposite Alignment
|
||||
cost: 50
|
||||
slot: helm
|
||||
- name: Helm of Telepathy
|
||||
cost: 50
|
||||
slot: helm
|
||||
- name: Leather Gloves
|
||||
cost: 8
|
||||
slot: gloves
|
||||
- name: Gauntlets of Dexterity
|
||||
cost: 50
|
||||
slot: gloves
|
||||
- name: Gauntlets of Fumbling
|
||||
cost: 50
|
||||
slot: gloves
|
||||
usuallyCursed: true
|
||||
- name: Gauntlets of Power
|
||||
cost: 50
|
||||
slot: gloves
|
||||
- name: Elven Boots
|
||||
cost: 8
|
||||
slot: boots
|
||||
- name: Kicking Boots
|
||||
cost: 8
|
||||
slot: boots
|
||||
- name: Fumble Boots
|
||||
cost: 30
|
||||
slot: boots
|
||||
usuallyCursed: true
|
||||
- name: Levitation Boots
|
||||
cost: 30
|
||||
slot: boots
|
||||
usuallyCursed: true
|
||||
- name: Jumping Boots
|
||||
cost: 50
|
||||
slot: boots
|
||||
- name: Speed Boots
|
||||
cost: 50
|
||||
slot: boots
|
||||
- name: Water Walking Boots
|
||||
cost: 50
|
||||
slot: boots
|
||||
97
NethackHelper/items/tools-stones.yaml
Normal file
97
NethackHelper/items/tools-stones.yaml
Normal file
@@ -0,0 +1,97 @@
|
||||
items:
|
||||
- name: Bag of Holding
|
||||
cost: 100
|
||||
appearance: bag
|
||||
uniqueAppearance: false
|
||||
- name: Bag of Tricks
|
||||
cost: 100
|
||||
appearance: bag
|
||||
uniqueAppearance: false
|
||||
- name: Oilskin Sack
|
||||
cost: 100
|
||||
appearance: bag
|
||||
uniqueAppearance: false
|
||||
- name: Sack
|
||||
cost: 2
|
||||
appearance: bag
|
||||
uniqueAppearance: false
|
||||
- name: Fire Horn
|
||||
cost: 50
|
||||
appearance: horn
|
||||
uniqueAppearance: false
|
||||
- name: Frost Horn
|
||||
cost: 50
|
||||
appearance: horn
|
||||
uniqueAppearance: false
|
||||
- name: Horn of Plenty
|
||||
cost: 50
|
||||
appearance: horn
|
||||
uniqueAppearance: false
|
||||
- name: Tooled Horn
|
||||
cost: 15
|
||||
appearance: horn
|
||||
uniqueAppearance: false
|
||||
- name: Magic Flute
|
||||
cost: 36
|
||||
appearance: flute
|
||||
uniqueAppearance: false
|
||||
- name: Wooden Flute
|
||||
cost: 12
|
||||
appearance: flute
|
||||
uniqueAppearance: false
|
||||
- name: Magic Harp
|
||||
cost: 50
|
||||
appearance: harp
|
||||
uniqueAppearance: false
|
||||
- name: Wooden Harp
|
||||
cost: 50
|
||||
appearance: harp
|
||||
uniqueAppearance: false
|
||||
- name: Drum of Earthquake
|
||||
cost: 25
|
||||
appearance: drum
|
||||
uniqueAppearance: false
|
||||
- name: Leather Drum
|
||||
cost: 25
|
||||
appearance: drum
|
||||
uniqueAppearance: false
|
||||
- name: Magic Whistle
|
||||
cost: 10
|
||||
appearance: whistle
|
||||
uniqueAppearance: false
|
||||
- name: Tin Whistle
|
||||
cost: 10
|
||||
appearance: whistle
|
||||
uniqueAppearance: false
|
||||
- name: Magic Lamp
|
||||
cost: 50
|
||||
appearance: lamp
|
||||
uniqueAppearance: false
|
||||
- name: Oil Lamp
|
||||
cost: 10
|
||||
appearance: lamp
|
||||
uniqueAppearance: false
|
||||
- name: Wax Candle
|
||||
cost: 20
|
||||
appearance: candle
|
||||
uniqueAppearance: false
|
||||
- name: Tallow Candle
|
||||
cost: 10
|
||||
appearance: candle
|
||||
uniqueAppearance: false
|
||||
- name: Loadstone
|
||||
cost: 1
|
||||
appearance: gray stone
|
||||
uniqueAppearance: false
|
||||
- name: Flint Stone
|
||||
cost: 1
|
||||
appearance: gray stone
|
||||
uniqueAppearance: false
|
||||
- name: Touchstone
|
||||
cost: 45
|
||||
appearance: gray stone
|
||||
uniqueAppearance: false
|
||||
- name: Luckstone
|
||||
cost: 60
|
||||
appearance: gray stone
|
||||
uniqueAppearance: false
|
||||
@@ -5,10 +5,14 @@
|
||||
wands: wands.yaml
|
||||
spellbooks: spellbooks-36.yaml
|
||||
amulets: amulets-36.yaml
|
||||
tools: tools-stones.yaml
|
||||
armor: armor-36.yaml
|
||||
- name: Vanilla 3.7
|
||||
scrolls: scrolls.yaml
|
||||
rings: rings.yaml
|
||||
potions: potions-37.yaml
|
||||
wands: wands.yaml
|
||||
spellbooks: spellbooks-37.yaml
|
||||
amulets: amulets-37.yaml
|
||||
amulets: amulets-37.yaml
|
||||
tools: tools-stones.yaml
|
||||
armor: armor-37.yaml
|
||||
Reference in New Issue
Block a user