public static void Start() { ConsoleUtils.Write(ConsoleMsgType.Status, "Loading Monster Database...\n"); DB = new Dictionary <int, MonsterEntry>(); Database db = new Database(Server.GameDbConString); MySqlDataReader reader = db.ReaderQuery( "SELECT `id`, `hp`, `mp` " + "FROM `mob_db`", null, null ); while (reader.Read()) { MonsterEntry mob = new MonsterEntry(); int id = (int)reader["id"]; mob.Hp = (int)reader["hp"]; mob.Mp = (int)reader["mp"]; DB.Add(id, mob); } ConsoleUtils.Write(ConsoleMsgType.Status, "Mob Database Loaded.\n"); }
void ShuffleList() { // Fisher-Yates shuffle. int n = randomMonsters.Count; while (n > 1) { --n; int k = random.Next(n + 1); MonsterEntry tmp = randomMonsters[k]; randomMonsters[k] = randomMonsters[n]; randomMonsters[n] = tmp; } }
public override void ChildDeserialize( GenericReader reader ) { int version = reader.ReadEncodedInt(); switch ( version ) { case 0: m_iLevel = reader.ReadEncodedInt(); break; } m_MonsterType = GetCurMonster( m_iLevel ); if( CurProgress > MaxProgress ) CurProgress = MaxProgress - 1; }
private void LoadMonsters() { Target.Entries.Clear(); var monsterLines = File.ReadAllLines(DATA_PATH); var attributeNames = monsterLines[0].Split('\t'); for (var i = 1; i < monsterLines.Length; i++) { var monsterValues = monsterLines[i].Split('\t'); const int ID_IDX = 0; const int NAME_IDX = 1; int id = int.Parse(monsterValues[ID_IDX]); var monsterName = monsterValues[NAME_IDX]; var sprite = GetSprite(id); var monsterEntry = new MonsterEntry(id, monsterName, sprite); Target.Entries.Add(monsterEntry); } }
static void Main(string[] args) { string[] lines = File.ReadAllLines("MonsterManual.txt"); var monsterEntries = new List <MonsterEntry>(); int monsterBlockLineIndex = 0; var currentMonsterEntry = new MonsterEntry(); foreach (string line in lines) { monsterBlockLineIndex++; // Parse the name. if (monsterBlockLineIndex == 1) { currentMonsterEntry.Name = line; } if (monsterBlockLineIndex == 2) { string[] parts = line.Split(", "); currentMonsterEntry.Description = parts[0]; currentMonsterEntry.Alignment = parts[1]; } if (monsterBlockLineIndex == 3) { Match match = Regex.Match(line, @"\((.*)\)"); if (match.Success) { currentMonsterEntry.HitPoints = match.Groups[1].Value; } } if (line.Length == 0) { monsterEntries.Add(currentMonsterEntry); monsterBlockLineIndex = 0; currentMonsterEntry = new MonsterEntry(); } } Console.WriteLine("MONSTER MANUAL"); Console.WriteLine(); Console.WriteLine("Enter a query to search monsters by name:"); var results = new List <MonsterEntry>(); do { string lowercaseQuery = Console.ReadLine().ToLowerInvariant(); Console.WriteLine(); results.Clear(); foreach (MonsterEntry monsterEntry in monsterEntries) { string lowercaseMonsterName = monsterEntry.Name.ToLowerInvariant(); if (lowercaseMonsterName.Contains(lowercaseQuery)) { results.Add(monsterEntry); } } if (results.Count == 0) { Console.WriteLine("No monsters were found. Try again:"); } } while (results.Count == 0); MonsterEntry selectedMonsterEntry; if (results.Count == 1) { selectedMonsterEntry = results[0]; } else { Console.WriteLine("Which monster did you want to look up?"); for (int i = 0; i < results.Count; i++) { Console.WriteLine($"{i + 1,3}: {results[i].Name}"); } Console.WriteLine(); Console.WriteLine("Enter number:"); int selectedIndex = -1; do { string selectionText = Console.ReadLine(); Console.WriteLine(); selectedIndex = int.Parse(selectionText) - 1; if (selectedIndex < 0 || selectedIndex >= results.Count) { Console.WriteLine("No moster has that number. Try again:"); selectedIndex = -1; } } while (selectedIndex < 0); selectedMonsterEntry = results[selectedIndex]; } Console.WriteLine($"Displaying information for {selectedMonsterEntry.Name}."); Console.WriteLine(); Console.WriteLine($"Name: {selectedMonsterEntry.Name}"); Console.WriteLine($"Description: {selectedMonsterEntry.Description}"); Console.WriteLine($"Alignment: {selectedMonsterEntry.Alignment}"); Console.WriteLine($"Hit points: {selectedMonsterEntry.HitPoints}"); }
static void Main(string[] args) { string[] lines = File.ReadAllLines("MonsterManual.txt"); var monsterEntries = new List <MonsterEntry>(); int monsterBlockLineIndex = 0; var currentMonsterEntry = new MonsterEntry(); foreach (string line in lines) { monsterBlockLineIndex++; // Parse the name. if (monsterBlockLineIndex == 1) { currentMonsterEntry.Name = line; } if (monsterBlockLineIndex == 2) { string[] parts = line.Split(", "); currentMonsterEntry.Description = parts[0]; currentMonsterEntry.Alignment = parts[1]; } if (monsterBlockLineIndex == 3) { Match match = Regex.Match(line, @"\((.*)\)"); if (match.Success) { currentMonsterEntry.HitPoints = match.Groups[1].Value; } } if (monsterBlockLineIndex == 4) { Match match = Regex.Match(line, @"(\d+)(?: \((.*)\))?"); if (match.Success) { currentMonsterEntry.Armor.Class = int.Parse(match.Groups[1].Value); if (match.Groups[2].Success) { string armorTypeString = match.Groups[2].Value.ToLowerInvariant(); if (armorTypeString.Contains("natural")) { currentMonsterEntry.Armor.Type = ArmorTypes.Natural; } else if (armorTypeString.Contains("studded leather")) { currentMonsterEntry.Armor.Type = ArmorTypes.StuddedLeather; } else if (armorTypeString.Contains("leather")) { currentMonsterEntry.Armor.Type = ArmorTypes.Leather; } else if (armorTypeString.Contains("hide")) { currentMonsterEntry.Armor.Type = ArmorTypes.Hide; } else if (armorTypeString.Contains("chain shirt")) { currentMonsterEntry.Armor.Type = ArmorTypes.ChainShirt; } else if (armorTypeString.Contains("chain mail")) { currentMonsterEntry.Armor.Type = ArmorTypes.ChainMail; } else if (armorTypeString.Contains("scale mail")) { currentMonsterEntry.Armor.Type = ArmorTypes.ScaleMail; } else if (armorTypeString.Contains("plate")) { currentMonsterEntry.Armor.Type = ArmorTypes.Plate; } else { currentMonsterEntry.Armor.Type = ArmorTypes.Other; } } else { currentMonsterEntry.Armor.Type = ArmorTypes.Unspecified; } } } if (line.Length == 0) { monsterEntries.Add(currentMonsterEntry); monsterBlockLineIndex = 0; currentMonsterEntry = new MonsterEntry(); } } Console.WriteLine("MONSTER MANUAL"); Console.WriteLine(); Console.WriteLine("Do you want to search by (n)ame or (a)rmor class?"); bool searchByName = false; bool searchByArmor = false; while (true) { ConsoleKeyInfo keyInfo = Console.ReadKey(); if (keyInfo.Key == ConsoleKey.N) { searchByName = true; break; } else if (keyInfo.Key == ConsoleKey.A) { searchByArmor = true; break; } } Console.WriteLine(); Console.WriteLine(); var results = new List <MonsterEntry>(); if (searchByName) { Console.WriteLine("Enter a query to search monsters by name:"); do { string lowercaseQuery = Console.ReadLine().ToLowerInvariant(); Console.WriteLine(); results.Clear(); foreach (MonsterEntry monsterEntry in monsterEntries) { string lowercaseMonsterName = monsterEntry.Name.ToLowerInvariant(); if (lowercaseMonsterName.Contains(lowercaseQuery)) { results.Add(monsterEntry); } } if (results.Count == 0) { Console.WriteLine("No monsters were found. Try again:"); } } while (results.Count == 0); } else if (searchByArmor) { Console.WriteLine("Which armor type do you want to display?"); string[] armorTypeNames = Enum.GetNames(typeof(ArmorTypes)); for (int i = 0; i < armorTypeNames.Length; i++) { Console.WriteLine($"{i + 1,3}: {armorTypeNames[i]}"); } Console.WriteLine(); Console.WriteLine("Enter number:"); int selectedIndex = -1; do { string selectionText = Console.ReadLine(); Console.WriteLine(); selectedIndex = int.Parse(selectionText) - 1; if (selectedIndex < 0 || selectedIndex >= armorTypeNames.Length) { Console.WriteLine("Invalid armor type number. Try again:"); selectedIndex = -1; } } while (selectedIndex < 0); ArmorTypes selectedArmorType = (ArmorTypes)selectedIndex; foreach (MonsterEntry monsterEntry in monsterEntries) { if (monsterEntry.Armor.Type == selectedArmorType) { results.Add(monsterEntry); } } } MonsterEntry selectedMonsterEntry; if (results.Count == 1) { selectedMonsterEntry = results[0]; } else { Console.WriteLine("Which monster did you want to look up?"); for (int i = 0; i < results.Count; i++) { Console.WriteLine($"{i + 1,3}: {results[i].Name}"); } Console.WriteLine(); Console.WriteLine("Enter number:"); int selectedIndex = -1; do { string selectionText = Console.ReadLine(); Console.WriteLine(); selectedIndex = int.Parse(selectionText) - 1; if (selectedIndex < 0 || selectedIndex >= results.Count) { Console.WriteLine("No moster has that number. Try again:"); selectedIndex = -1; } } while (selectedIndex < 0); selectedMonsterEntry = results[selectedIndex]; } Console.WriteLine($"Displaying information for {selectedMonsterEntry.Name}."); Console.WriteLine(); Console.WriteLine($"Name: {selectedMonsterEntry.Name}"); Console.WriteLine($"Description: {selectedMonsterEntry.Description}"); Console.WriteLine($"Alignment: {selectedMonsterEntry.Alignment}"); Console.WriteLine($"Hit points: {selectedMonsterEntry.HitPoints}"); Console.WriteLine($"Armor class: {selectedMonsterEntry.Armor.Class}"); if (selectedMonsterEntry.Armor.Type != ArmorTypes.Unspecified) { Console.WriteLine($"Armor type: {selectedMonsterEntry.Armor.Type}"); } }
public override byte[] ToRaw() { List <int> ptrList = new List <int>(); MemoryStream outStream = new MemoryStream(); BinaryWriter outWriter = new BinaryWriter(outStream); outWriter.Seek(0x10, SeekOrigin.Begin); int[] monsterPointers = new int[spawns.Length]; int[] arrangementPointers = new int[spawns.Length]; int[] spawnInfoPointers = new int[spawns.Length]; for (int i = 0; i < spawns.Length; i++) { int[] monsterIndPointers = new int[spawns[i].monsters.Length]; //Write monster data, then pointers, then arrangement info, then spawn info. for (int j = 0; j < spawns[i].monsters.Length; j++) { monsterIndPointers[j] = (int)outStream.Position; //Write monster data. for (int k = 0; k < spawns[i].monsters[j].Length; k++) { MonsterEntry tempMonster = spawns[i].monsters[j][k]; outWriter.Write(tempMonster.monsterNum); outWriter.Write(tempMonster.element); outWriter.Write(tempMonster.kingBuff); outWriter.Write(tempMonster.shieldBuff); outWriter.Write(tempMonster.swordBuff); outWriter.Write(tempMonster.unkBuff); outWriter.Write(tempMonster.staffBuff); outWriter.Write(tempMonster.unkByte1); outWriter.Write(tempMonster.unkShort1); outWriter.Write(tempMonster.unkShort2); outWriter.Write(tempMonster.spawnDelay); outWriter.Write(tempMonster.count); outWriter.Write(tempMonster.unkShort3); outWriter.Write(tempMonster.unkShort4); outWriter.Write(tempMonster.levelMod); outWriter.Write(tempMonster.unkShort5); outWriter.Write(tempMonster.unkShort6); outWriter.Write(tempMonster.unkShort7); outWriter.Write(tempMonster.unkShort8); outWriter.Write(tempMonster.unkInt1); } } //Write pointers to monster data. monsterPointers[i] = (int)outStream.Position; for (int j = 0; j < spawns[i].monsters.Length; j++) { ptrList.Add((int)outStream.Position); outWriter.Write(monsterIndPointers[j]); outWriter.Write(spawns[i].monsters[j].Length); } //Write arrangement info. arrangementPointers[i] = (int)outStream.Position; for (int j = 0; j < spawns[i].arrangements.Length; j++) { Arrangement tempArrange = spawns[i].arrangements[j]; outWriter.Write(tempArrange.unknownInt1); outWriter.Write(tempArrange.formation); outWriter.Write(tempArrange.initialCount); outWriter.Write(tempArrange.respawnTrigger); outWriter.Write(tempArrange.unknownShort1); outWriter.Write(tempArrange.unknownShort2); outWriter.Write(tempArrange.unknownShort3); } //Write spawn info. spawnInfoPointers[i] = (int)outStream.Position; for (int j = 0; j < spawns[i].spawnData.Length; j++) { SpawnData tempSpawnData = spawns[i].spawnData[j]; outWriter.Write(tempSpawnData.spawnNum); outWriter.Write(tempSpawnData.unkShort1); outWriter.Write(tempSpawnData.unkShort2); outWriter.Write(tempSpawnData.unkShort3); outWriter.Write(tempSpawnData.unkShort4); outWriter.Write(tempSpawnData.unkShort5); } } int ptrListLoc = (int)outStream.Position; for (int i = 0; i < spawns.Length; i++) { ptrList.Add((int)outStream.Position); outWriter.Write(spawnInfoPointers[i]); outWriter.Write(spawns[i].spawnData.Length); ptrList.Add((int)outStream.Position); outWriter.Write(arrangementPointers[i]); outWriter.Write(spawns[i].arrangements.Length); ptrList.Add((int)outStream.Position); outWriter.Write(monsterPointers[i]); outWriter.Write(spawns[i].monsters.Length); } int mainPtr = (int)outStream.Position; ptrList.Add((int)outStream.Position); outWriter.Write(ptrListLoc); outWriter.Write(spawns.Length); int fileLength = (int)outStream.Position; outStream.Seek(0, SeekOrigin.Begin); outWriter.Write(new byte[] { 0x4E, 0x58, 0x52, 0 }); outWriter.Write(fileLength); outWriter.Write(mainPtr); outWriter.Write((int)0); calculatedPointers = ptrList.ToArray(); return(outStream.ToArray()); }
public CursedCaveBeginObjective( int level ) { m_iLevel = level; m_MonsterType = GetCurMonster( m_iLevel ); }