private void LoadDrops() { DropGroups = new Dictionary<string, DropGroupInfo>(); try { //first we load the dropgroups using (var groupfile = new ShineReader(folder + @"\ItemDropGroup.txt")) { var table = groupfile["ItemDropGroup"]; using (var reader = new DataTableReaderEx(table)) { while (reader.Read()) { DropGroupInfo info = DropGroupInfo.Load(reader); if (DropGroups.ContainsKey(info.GroupID)) { //Log.WriteLine(LogLevel.Warn, "Duplicate DropGroup ID found: {0}.", info.GroupID); continue; } DropGroups.Add(info.GroupID, info); } } } //now we load the actual drops int dropcount = 0; using (var tablefile = new ShineReader(folder + @"\ItemDropTable.txt")) { var table = tablefile["ItemGroup"]; using (var reader = new DataTableReaderEx(table)) { while (reader.Read()) { string mobid = reader.GetString("MobId"); MobInfo mob; if (MobsByName.TryGetValue(mobid, out mob)) { mob.MinDropLevel = (byte)reader.GetInt16("MinLevel"); mob.MaxDropLevel = (byte)reader.GetInt16("MaxLevel"); for (int i = 1; i <= 45; ++i) { string dropgroup = reader.GetString("DrItem" + i); if (dropgroup.Length <= 2) continue; DropGroupInfo group; if (DropGroups.TryGetValue(dropgroup, out group)) { float rate = reader.GetInt32("DrItem" + i + "R") / 100000f; DropInfo info = new DropInfo(group, rate); mob.Drops.Add(info); ++dropcount; } else { //this seems to happen a lot so disable this for the heck of it. // Log.WriteLine(LogLevel.Warn, "Could not find DropGroup {0}.", dropgroup); } } } else Log.WriteLine(LogLevel.Warn, "Could not find mobname: {0} for drop.", mobid); } } } Log.WriteLine(LogLevel.Info, "Loaded {0} DropGroups, with {1} drops in total.", DropGroups.Count, dropcount); } catch (Exception ex) { Log.WriteLine(LogLevel.Exception, "Error loading DropTable: {0}", ex); } }
private void LoadDrops() { DropGroups = new Dictionary<string, DropGroupInfo>(); try { DataTable dropgroupinfoData = null; DataTable itemdroptableData = null; using (DatabaseClient dbClient = Program.DatabaseManager.GetClient()) { dropgroupinfoData = dbClient.ReadDataTable("SELECT *FROM dropgroupinfo"); itemdroptableData = dbClient.ReadDataTable("SELECT *FROM itemdroptable"); } if (dropgroupinfoData != null) { foreach (DataRow row in dropgroupinfoData.Rows) { DropGroupInfo info = DropGroupInfo.Load(row); if (DropGroups.ContainsKey(info.GroupID)) { //Log.WriteLine(LogLevel.Warn, "Duplicate DropGroup ID found: {0}.", info.GroupID); continue; } DropGroups.Add(info.GroupID, info); } } int dropcount = 0; if (itemdroptableData != null) { foreach (DataRow row in itemdroptableData.Rows) { string mobid = (string)row["MobId"]; MobInfo mob; if (MobsByName.TryGetValue(mobid, out mob)) { mob.MinDropLevel = (byte)row["MinLevel"]; mob.MaxDropLevel = (byte)row["MaxLevel"]; string dropgroup = (string)row["GroupID"]; if (dropgroup.Length <= 2) continue; DropGroupInfo group; if (DropGroups.TryGetValue(dropgroup, out group)) { float rate = (float)row["Rate"]; DropInfo info = new DropInfo(group, rate); mob.Drops.Add(info); ++dropcount; } else { //this seems to happen a lot so disable this for the heck of it. //Log.WriteLine(LogLevel.Warn, "Could not find DropGroup {0}.", dropgroup); } } // else Log.WriteLine(LogLevel.Warn, "Could not find mobname: {0} for drop.", mobid); } } //first we load the dropgroups Log.WriteLine(LogLevel.Info, "Loaded {0} DropGroups, with {1} drops in total.", DropGroups.Count, dropcount); } catch (Exception ex) { Log.WriteLine(LogLevel.Exception, "Error loading DropTable: {0}", ex); } }