コード例 #1
0
        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");
        }
コード例 #2
0
    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;
        }
    }
コード例 #3
0
        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;
        }
コード例 #4
0
        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);
            }
        }
コード例 #5
0
ファイル: Program.cs プロジェクト: MatejJan/The-Indie-Quest
        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}");
        }
コード例 #6
0
        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}");
            }
        }
コード例 #7
0
        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());
        }
コード例 #8
0
 public CursedCaveBeginObjective( int level )
 {
     m_iLevel = level;
     m_MonsterType = GetCurMonster( m_iLevel );
 }