using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.IO; namespace PKIDcreator { public partial class Form1 : Form { public class D2Mod { public int id; public string mStr; public string gStr; public string mmStr; } public class D2ModCollection { Array mods; private int curIndex; D2ModCollection() { mods = Array.CreateInstance(typeof(D2Mod), 0); curIndex = 0; } public int Find(D2Mod mod) { for (int i = 0; i < mods.Length; i++) { if (mods.GetValue(i) == mod) return i; } return -1; } public void InsertMod(string modStr, string gameStr, string mmbStr) { D2Mod temp = new D2Mod(); temp.gStr = gameStr; temp.mStr = modStr; temp.mmStr = mmbStr; if (this.Find(temp) != -1) return; mods.SetValue(temp, curIndex++); } public void InsertMod(D2Mod mod) { if (this.Find(mod) != -1) return; mods.SetValue(mod, curIndex++); } public D2Mod GetMod(int index) { //return mods.GetValue(index); if (index < mods.Length || index >= 0) return (mods.GetValue(index) as D2Mod); return null; } } public class D2PreSuff { public Array mod; public Array min; public Array max; public Array param; D2PreSuff() { mod = Array.CreateInstance(typeof(int), 3); min = Array.CreateInstance(typeof(int), 3); max = Array.CreateInstance(typeof(int), 3); param = Array.CreateInstance(typeof(int), 3); } } public class D2PreCollection { Array prefix; private int curIndex; D2PreCollection() { prefix = Array.CreateInstance(typeof(D2PreSuff), 0); curIndex = 0; } void InsertPrefix(int[] mod, int[] min, int[] max, int[] param) { D2PreSuff temp = new D2PreSuff(); for (int i = 0; i < mod.Length; i++) { temp.mod.SetValue(mod[i], i); temp.min.SetValue(min[i], i); temp.max.SetValue(max[i], i); temp.param.SetValue(param[i], i); } if (Find(temp) != -1) { return; } else { prefix.SetValue(temp, curIndex++); } } int Find(D2PreSuff findPre) { for (int i = 0; i < prefix.Length; i++) { if (prefix.GetValue(i) == findPre) return i; } return -1; } D2PreSuff GetPrefix(int index) { if (index < prefix.Length && index >= 0) return (prefix.GetValue(index) as D2PreSuff); return null; } } //As stupid as I am I created 2 class that is exactly the same but with different variable names, don't ask why... public class D2SufCollection { Array suffix; private int curIndex; D2SufCollection() { suffix = Array.CreateInstance(typeof(D2PreSuff), 0); curIndex = 0; } void InsertSuffix(int[] mod, int[] min, int[] max, int[] param) { D2PreSuff temp = new D2PreSuff(); for (int i = 0; i < mod.Length; i++) { temp.mod.SetValue(mod[i], i); temp.min.SetValue(min[i], i); temp.max.SetValue(max[i], i); temp.param.SetValue(param[i], i); } if (Find(temp) != -1) { return; } else { suffix.SetValue(temp, curIndex++); } } int Find(D2PreSuff findSuf) { for (int i = 0; i < suffix.Length; i++) { if (suffix.GetValue(i) == findSuf) return i; } return -1; } D2PreSuff GetSuffix(int index) { if (index < suffix.Length && index >= 0) return (suffix.GetValue(index) as D2PreSuff); return null; } } public class D2BaseItem { public int id; public string name; public int levelreq; public int strreq; public string type; public int maxsockets; //public D2BaseItemType itemtype; } public class D2BaseArmor : D2BaseItem { public int maxac; public int minac; } public class D2BaseArmorCollection { Array bases; private int curIndex; D2BaseArmorCollection() { bases = Array.CreateInstance(typeof(D2BaseArmor), 0); curIndex = 0; } void InsertBase(D2BaseArmor armor) { if (Find(armor) != -1) { return; } else { bases.SetValue(armor, curIndex++); } } int Find(D2BaseArmor findArmor) { for (int i = 0; i < bases.Length; i++) { if (bases.GetValue(i) == findArmor) return i; } return -1; } D2BaseArmor GetArmor(string armorText) { for (int i = 0; i < bases.Length; i++) { if ((bases.GetValue(i) as D2BaseArmor).name == armorText) { return (bases.GetValue(i) as D2BaseArmor); } } return null; } D2BaseArmor GetArmor(int index) { if (index < bases.Length && index >= 0) return (bases.GetValue(index) as D2BaseArmor); return null; } } public class D2BaseWeapon : D2BaseItem { public int mindam; public int maxdam; public bool onehand; public int dexreq; } public class D2BaseWeaponCollection { Array bases; private int curIndex; D2BaseWeaponCollection() { bases = Array.CreateInstance(typeof(D2BaseWeapon), 0); curIndex = 0; } void InsertBase(D2BaseWeapon weapon) { if (Find(weapon) != -1) { return; } else { bases.SetValue(weapon, curIndex++); } } int Find(D2BaseWeapon findWeapon) { for (int i = 0; i < bases.Length; i++) { if (bases.GetValue(i) == findWeapon) return i; } return -1; } D2BaseWeapon GetWeapon(string wpnText) { for (int i = 0; i < bases.Length; i++) { if ((bases.GetValue(i) as D2BaseWeapon).name == wpnText) { return (bases.GetValue(i) as D2BaseWeapon); } } return null; } D2BaseWeapon GetWeapon(int index) { if (index < bases.Length && index >= 0) return (bases.GetValue(index) as D2BaseWeapon); return null; } } public class D2UniqueArmor : D2BaseArmor { Array mods; D2UniqueArmor() { mods = Array.CreateInstance(typeof(D2Mod), 7); } } public class D2UniqueArmorCollection { Array uniques; private int curIndex; D2UniqueArmorCollection() { uniques = Array.CreateInstance(typeof(D2UniqueArmor), 0); curIndex = 0; } void InsertUnique(D2UniqueArmor armor) { if (Find(armor) != -1) { return; } else { uniques.SetValue(armor, curIndex++); } } int Find(D2UniqueArmor findArmor) { for (int i = 0; i < uniques.Length; i++) { if (uniques.GetValue(i) == findArmor) return i; } return -1; } D2UniqueArmor GetArmor(int index) { if (index < uniques.Length && index >= 0) return (uniques.GetValue(index) as D2UniqueArmor); return null; } } public class D2UniqueWeapon : D2BaseWeapon { } public class D2UniqueWeaponCollection { Array uniques; private int curIndex; D2UniqueWeaponCollection() { uniques = Array.CreateInstance(typeof(D2UniqueWeapon), 0); curIndex = 0; } void InsertUnique(D2UniqueWeapon weapon) { if (Find(weapon) != -1) { return; } else { uniques.SetValue(weapon, curIndex++); } } int Find(D2UniqueWeapon findWeapon) { for (int i = 0; i < uniques.Length; i++) { if (uniques.GetValue(i) == findWeapon) return i; } return -1; } D2UniqueWeapon GetWeapon(int index) { if (index < uniques.Length && index >= 0) return (uniques.GetValue(index) as D2UniqueWeapon); return null; } } Array D2PreMods; Array D2SufMods; Array D2BaseArmors; Array D2BaseWeapons; D2ModCollection g_Mods = new D2ModCollection(); D2UniqueArmorCollection g_UArmor = new D2UniqueArmorCollection(); D2UniqueWeaponCollection g_UWeapon = new D2UniqueWeaponCollection(); public Form1() { InitializeComponent(); } string getData(DataTable tbl, int rowid, string colName) { if (tbl.Rows[rowid][colName] == DBNull.Value) { return ""; } return Convert.ToString(tbl.Rows[rowid][colName]); } void pProg(string text, int all, int part) { double percent; percent = Convert.ToDouble(part) / Convert.ToDouble(all); percent = Math.Round(percent * 100.0, 0); lblProgress.Text = "Loading " + text + ": " + Convert.ToString(percent) + "%"; } public bool loadData() { D2BaseArmor d2TempArmor = new D2BaseArmor(); D2BaseWeapon d2TempWeapon = new D2BaseWeapon(); ; D2Mod d2TempMod = new D2Mod(); DataTable Tbl = items.MagicPrefix; D2PreMods = Array.CreateInstance(typeof(D2Mod), items.MagicPrefix.Rows.Count); D2SufMods = Array.CreateInstance(typeof(D2Mod), items.MagicSuffix.Rows.Count); D2BaseArmors = Array.CreateInstance(typeof(D2BaseArmor), items.Armor.Rows.Count); D2BaseWeapons = Array.CreateInstance(typeof(D2BaseWeapon), items.Weapons.Rows.Count); this.Activate(); this.Show(); double percent = 0; for (int i = 0; i < items.Mods.Rows.Count; i++) { d2TempMod.id = Convert.ToInt32(getData(items.Mods, i, "id")); d2TempMod.mStr = getData(items.Mods, i, "mCode"); d2TempMod.gStr = getData(items.Mods, i, "gStr"); d2TempMod.mmStr = getData(items.Mods, i, "mmStr"); if (d2TempMod.gStr != "") { g_Mods.InsertMod(d2TempMod); } pProg("Mods", items.Mods.Rows.Count, i); if (i % 10 == 0) { Application.DoEvents(); this.Refresh(); } } for (int i = 0; i < items.MagicPrefix.Rows.Count; i++) { d2TempMod.id = Convert.ToInt32(getData(Tbl, i, "id")); //d2TempMod.mod = Convert.ToString( /*D2BaseArmors.SetValue(d2TempArmor, i); percent = Convert.ToDouble(i) / Convert.ToDouble(items.Armor.Rows.Count); percent = Math.Round(percent * 100.0, 0); lblProgress.Text = "Loading armors: " + Convert.ToString(percent) + "%"; */ Application.DoEvents(); this.Refresh(); } for (int i = 0; i < items.Armor.Rows.Count; i++) { d2TempArmor.id = (int)items.Armor.Rows[i]["ID"]; d2TempArmor.levelreq = Convert.ToInt32(items.Armor.Rows[i]["levelreq"]); d2TempArmor.minac = Convert.ToInt32(items.Armor.Rows[i]["minac"]); d2TempArmor.maxac = Convert.ToInt32(items.Armor.Rows[i]["maxac"]); d2TempArmor.strreq = Convert.ToInt32(items.Armor.Rows[i]["reqstr"]); d2TempArmor.maxsockets = Convert.ToInt32(items.Armor.Rows[i]["gemsockets"]); d2TempArmor.name = Convert.ToString(items.Armor.Rows[i]["name"]); D2BaseArmors.SetValue(d2TempArmor, i); pProg("Armors", items.Armor.Rows.Count, i); if (i % 10 == 0) { Application.DoEvents(); this.Refresh(); } } for (int i = 0; i < items.Weapons.Rows.Count; i++) { d2TempWeapon.id = (int)items.Weapons.Rows[i]["ID"]; d2TempWeapon.levelreq = Convert.ToInt32(items.Weapons.Rows[i]["levelreq"]); d2TempWeapon.onehand = Convert.ToBoolean(Convert.ToInt32(items.Weapons.Rows[i]["maxdam"])); if (d2TempWeapon.onehand) { d2TempWeapon.mindam = Convert.ToInt32(items.Weapons.Rows[i]["mindam"]); d2TempWeapon.maxdam = Convert.ToInt32(items.Weapons.Rows[i]["maxdam"]); } else { d2TempWeapon.mindam = Convert.ToInt32(items.Weapons.Rows[i]["2handmindam"]); d2TempWeapon.maxdam = Convert.ToInt32(items.Weapons.Rows[i]["2handmaxdam"]); } d2TempWeapon.maxsockets = Convert.ToInt32(items.Weapons.Rows[i]["gemsockets"]); d2TempWeapon.strreq = Convert.ToInt32(items.Weapons.Rows[i]["reqstr"]); d2TempWeapon.dexreq = Convert.ToInt32(items.Weapons.Rows[i]["reqdex"]); d2TempArmor.name = Convert.ToString(items.Weapons.Rows[i]["name"]); D2BaseWeapons.SetValue(d2TempWeapon, i); pProg("Weapons", items.Weapons.Rows.Count, i); if (i % 10 == 0) { this.Refresh(); Application.DoEvents(); } } lblProgress.Text = ""; return true; } private void Form1_Load(object sender, EventArgs e) { // TODO: This line of code loads data into the 'items.Weapons' table. You can move, or remove it, as needed. this.weaponsTableAdapter.Fill(this.items.Weapons); // TODO: This line of code loads data into the 'items.UniqueItems' table. You can move, or remove it, as needed. this.uniqueItemsTableAdapter.Fill(this.items.UniqueItems); // TODO: This line of code loads data into the 'items.SetItems' table. You can move, or remove it, as needed. this.setItemsTableAdapter.Fill(this.items.SetItems); // TODO: This line of code loads data into the 'items.MagicSuffix' table. You can move, or remove it, as needed. this.magicSuffixTableAdapter.Fill(this.items.MagicSuffix); // TODO: This line of code loads data into the 'items.MagicPrefix' table. You can move, or remove it, as needed. this.magicPrefixTableAdapter.Fill(this.items.MagicPrefix); // TODO: This line of code loads data into the 'items.Gems' table. You can move, or remove it, as needed. this.gemsTableAdapter.Fill(this.items.Gems); // TODO: This line of code loads data into the 'items.Armor' table. You can move, or remove it, as needed. this.armorTableAdapter.Fill(this.items.Armor); lblMain.Text = "Loading Diablo 2 item data..."; loadData(); lblMain.Text = "Welcome to the mm.PKID.ini manager."; } private void Uniques_Click(object sender, EventArgs e) { } private void btnUpdate_Click(object sender, EventArgs e) { cboItems.Items.Clear(); } } }