private void LoadBadNames() { BadNames = new List<string>(); using (var file = new SHNFile(folder + @"\BadNameFilter.shn")) { using (DataTableReaderEx reader = new DataTableReaderEx(file)) { while (reader.Read()) { // Columns: BadName Type BadNames.Add(reader.GetString("BadName").ToLower()); } } } Log.WriteLine(LogLevel.Info, "Loaded {0} bad names.", BadNames.Count); }
private void LoadMobs() { MobsByID = new Dictionary<ushort, MobInfo>(); MobsByName = new Dictionary<string, MobInfo>(); using (var file = new SHNFile(folder + @"\MobInfo.shn")) { using (DataTableReaderEx reader = new DataTableReaderEx(file)) { while (reader.Read()) { MobInfo info = MobInfo.Load(reader); if (MobsByID.ContainsKey(info.ID) || MobsByName.ContainsKey(info.Name)) { Log.WriteLine(LogLevel.Warn, "Duplicate mob ID found in MobInfo.shn: {0}.", info.ID); continue; } MobsByID.Add(info.ID, info); MobsByName.Add(info.Name, info); } } } Log.WriteLine(LogLevel.Info, "Loaded {0} mobs.", MobsByID.Count); MobData = new Dictionary<string, MobInfoServer>(); using (var file = new SHNFile(folder + @"\MobInfoServer.shn")) { using (DataTableReaderEx reader = new DataTableReaderEx(file)) { while (reader.Read()) { MobInfoServer info = MobInfoServer.Load(reader); if (MobData.ContainsKey(info.InxName)) { Log.WriteLine(LogLevel.Warn, "Duplicate mob ID found in MobInfoServer.shn: {0}.", info.InxName); continue; } MobData.Add(info.InxName, info); } } } Log.WriteLine(LogLevel.Info, "Loaded {0} mob infos.", MobsByID.Count); }
private void LoadActiveSkills() { ActiveSkillsByID = new Dictionary<ushort, ActiveSkillInfo>(); ActiveSkillsByName = new Dictionary<string, ActiveSkillInfo>(); using (var file = new SHNFile(folder + @"\ActiveSkill.shn")) { using (DataTableReaderEx reader = new DataTableReaderEx(file)) { while (reader.Read()) { ActiveSkillInfo info = ActiveSkillInfo.Load(reader); if (ActiveSkillsByID.ContainsKey(info.ID) || ActiveSkillsByName.ContainsKey(info.Name)) { Log.WriteLine(LogLevel.Warn, "Duplicate ActiveSkill found: {0} ({1})", info.ID, info.Name); continue; } ActiveSkillsByID.Add(info.ID, info); ActiveSkillsByName.Add(info.Name, info); } } } Log.WriteLine(LogLevel.Info, "Loaded {0} ActiveSkills.", ActiveSkillsByID.Count); }
public void LoadMiniHouseInfo() { MiniHouses = new Dictionary<ushort, MiniHouseInfo>(); using (var file = new SHNFile(folder + @"\MiniHouse.shn")) { using (DataTableReaderEx reader = new DataTableReaderEx(file)) { while (reader.Read()) { MiniHouseInfo mhi = new MiniHouseInfo(reader); MiniHouses.Add(mhi.ID, mhi); } } } Log.WriteLine(LogLevel.Info, "Loaded {0} Mini Houses.", MiniHouses.Count); }
public void LoadMaps(List<ushort> toload = null) { MapsByID = new Dictionary<ushort, MapInfo>(); MapsByName = new Dictionary<string, MapInfo>(); using (var file = new SHNFile(folder + @"\MapInfo.shn")) { using (DataTableReaderEx reader = new DataTableReaderEx(file)) { while (reader.Read()) { MapInfo info = MapInfo.Load(reader); info.NPCs = new List<ShineNPC>(); if (MapsByID.ContainsKey(info.ID)) { Log.WriteLine(LogLevel.Debug, "Duplicate map ID {0} ({1})", info.ID, info.FullName); MapsByID.Remove(info.ID); MapsByName.Remove(info.ShortName); } if (toload == null || toload.Contains(info.ID)) { MapsByID.Add(info.ID, info); MapsByName.Add(info.ShortName, info); } } } } Blocks = new Dictionary<ushort, BlockInfo>(); foreach (var map in MapsByID.Values) { string renderpath = folder + @"\BlockInfo\" + map.ShortName + ".shbd"; if (File.Exists(renderpath)) { BlockInfo info = new BlockInfo(renderpath, map.ID); Blocks.Add(map.ID, info); } } using (var tables = new ShineReader(folder + @"\NPC.txt")) { NpcLinkTable = new Dictionary<string, LinkTable>(); using (DataTableReaderEx reader = new DataTableReaderEx(tables["LinkTable"])) { while (reader.Read()) { LinkTable link = LinkTable.Load(reader); if (Program.IsLoaded(GetMapidFromMapShortName(link.MapClient))) { NpcLinkTable.Add(link.argument, link); } } } using (DataTableReaderEx reader = new DataTableReaderEx(tables["ShineNPC"])) { while (reader.Read()) { ShineNPC npc = ShineNPC.Load(reader); MapInfo mi = null; if (Program.IsLoaded(GetMapidFromMapShortName(npc.Map)) && MapsByName.TryGetValue(npc.Map, out mi)) { mi.NPCs.Add(npc); } } } } Log.WriteLine(LogLevel.Info, "Loaded {0} maps.", MapsByID.Count); }
public void LoadItemInfo() { Dictionary<string, ItemUseEffectInfo> effectcache = new Dictionary<string, ItemUseEffectInfo>(); ItemUseEffects = new Dictionary<ushort, ItemUseEffectInfo>(); using (var file = new SHNFile(folder + @"\ItemUseEffect.shn")) { using (DataTableReaderEx reader = new DataTableReaderEx(file)) { while (reader.Read()) { string inxname; ItemUseEffectInfo info = ItemUseEffectInfo.Load(reader, out inxname); effectcache.Add(inxname, info); } } } ItemsByID = new Dictionary<ushort, ItemInfo>(); ItemsByName = new Dictionary<string, ItemInfo>(); using (var file = new SHNFile(folder + @"\ItemInfo.shn")) { using (DataTableReaderEx reader = new DataTableReaderEx(file)) { while (reader.Read()) { ItemInfo info = ItemInfo.Load(reader); if (ItemsByID.ContainsKey(info.ItemID) || ItemsByName.ContainsKey(info.InxName)) { Log.WriteLine(LogLevel.Warn, "Duplicate item found ID: {0} ({1}).", info.ItemID, info.InxName); continue; } ItemsByID.Add(info.ItemID, info); ItemsByName.Add(info.InxName, info); if (effectcache.ContainsKey(info.InxName)) { if (info.Type != ItemType.Useable) { Log.WriteLine(LogLevel.Warn, "Invalid useable item: {0} ({1})", info.ItemID, info.InxName); continue; } ItemUseEffectInfo effectinfo = effectcache[info.InxName]; effectinfo.ID = info.ItemID; ItemUseEffects.Add(effectinfo.ID, effectinfo); } } } } effectcache.Clear(); Log.WriteLine(LogLevel.Info, "Loaded {0} items.", ItemsByID.Count); }