public static void Load() { BaseInformations = new SafeDictionary<uint, ConquerItemBaseInformation>(10000); PlusInformations = new SafeDictionary<uint, SafeDictionary<byte, ConquerItemPlusInformation>>(10000); GradeInformations = new SafeDictionary<string, SafeDictionary<int, ConquerItemBaseInformation>>(10000); GradeInformations2 = new SafeDictionary<string, SafeDictionary<uint, int>>(10000); string[] baseText = File.ReadAllLines(ServerBase.Constants.ItemBaseInfosPath); int count = 0; int gkey = 0; int lastlevel = 0; string lastgr = ""; foreach (string line in baseText) { count++; string _item_ = line.Trim(); if (_item_.Length > 11) { if (_item_.IndexOf("//", 0, 2) != 0) { ConquerItemBaseInformation CIBI = new ConquerItemBaseInformation(); CIBI.Parse(_item_); var Grades = GradeInformations[CIBI.Description]; BaseInformations.Add(CIBI.ID, CIBI); if (GradeInformations.ContainsKey(CIBI.Description) == false) { GradeInformations2.Add(CIBI.Description, new SafeDictionary<uint, int>(1000)); GradeInformations2[CIBI.Description].Add((uint)(CIBI.ID / 10), 0); lastlevel = CIBI.Level; GradeInformations.Add(CIBI.Description, new SafeDictionary<int, ConquerItemBaseInformation>(1000)); gkey = 0; } else { if (lastgr != CIBI.Description) gkey = GradeInformations2[CIBI.Description].Count - 1; if (GradeInformations2[CIBI.Description].ContainsKey(CIBI.ID / 10) && CIBI.Level == lastlevel) { CIBI.GradeKey = gkey; continue; } else { GradeInformations2[CIBI.Description].Add((uint)(CIBI.ID / 10), 0); lastlevel = CIBI.Level; gkey = gkey + 1; } } lastgr = CIBI.Description; CIBI.GradeKey = gkey; GradeInformations[CIBI.Description].Add(gkey, CIBI); } } } GradeInformations2.Base.Clear(); baseText = File.ReadAllLines(ServerBase.Constants.ItemPlusInfosPath); foreach (string line in baseText) { try { string _item_ = line.Trim(); ConquerItemPlusInformation CIPI = new ConquerItemPlusInformation(); CIPI.Parse(_item_); SafeDictionary<byte, ConquerItemPlusInformation> info = null; if (PlusInformations.TryGetValue(CIPI.ID, out info)) { info.Add(CIPI.Plus, CIPI); } else { PlusInformations.Add(CIPI.ID, new SafeDictionary<byte, ConquerItemPlusInformation>(1000)); if (PlusInformations.TryGetValue(CIPI.ID, out info)) { info.Add(CIPI.Plus, CIPI); } } } catch { Console.WriteLine(line); } } Console.WriteLine("Item Base and Plus information loaded."); }
public ConquerItemInformation(uint ID, byte Plus) { _BaseInformation = null; if (BaseInformations.TryGetValue(ID, out _BaseInformation)) { byte itemType = (byte)(ID / 10000); ushort itemType2 = (ushort)(ID / 1000); if (itemType == 14)//armors { ID = (uint)( (((uint)(ID / 1000)) * 1000) + // [3] = 0 ((ID % 100) - (ID % 10)) // [5] = 0 ); } else if (itemType == 13 || itemType == 11 || itemType2 == 123 || itemType == 30 || itemType == 20 || itemType == 12 || itemType == 15 || itemType == 16 || itemType == 50 || itemType2 == 421 || itemType2 == 601)//Necky bow bag { ID = (uint)( ID - (ID % 10) // [5] = 0 ); } else { byte head = (byte)(ID / 100000); ID = (uint)( ((head * 100000) + (head * 10000) + (head * 1000)) + // [1] = [0], [2] = [0] ((ID % 1000) - (ID % 10)) // [5] = 0 ); } _PlusInformation = new ConquerItemPlusInformation(); if (Plus > 0) { SafeDictionary<byte, ConquerItemPlusInformation> pInfo = null; PlusInformations.TryGetValue(ID, out pInfo); if (pInfo == null) return; if (!pInfo.TryGetValue(Plus, out _PlusInformation)) _PlusInformation = new ConquerItemPlusInformation(); } } else { return; } }