NPC.ini Parser

03/12/2011 04:21 Arco.#1
Ah, well I know this is REALLY simple, but as I was rummaging through my hard drive, I found something that might be useful to some people. It pretty much goes through the npc.ini and parses the data and writes it to a new text file, and writes it like this,
Code:
10-19	Storekeeper
Yeah its pretty simple, but it should help most people.

You MIGHT need to change the value of the 1122 in "for (int x = 1; x < 1122; x++)" depending on what patch the npc.ini is.

Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Runtime.InteropServices;

namespace NPC.ini_Parser
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.Title = "Npc.ini Parser";
            IniFile NPC = new IniFile(Application.StartupPath + "/npc.ini");

            StreamWriter sw = new StreamWriter(Application.StartupPath + "/Npc Info.txt");
            for (int x = 1; x < 1122; x++)
            {
                string name = NPC.ReadString("NpcType" + x.ToString(), "Name", "Error");
                switch (name)
                {
                    case "Error":
                        continue;
                    default:
                        sw.WriteLine(x.ToString() + "0-" + x.ToString() + "9\t" + name);
                        break;
                }
            }
            sw.Close();
            Console.WriteLine("Npc.ini  has been parsed.");
            Console.ReadLine();
        }
    }

    class IniFile
    {
        public string FileName;

        public IniFile()
        {
        }

        public IniFile(string _FileName)
        {
            this.FileName = _FileName;
        }

        [DllImport("kernel32.dll", CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true)]
        private static extern int GetPrivateProfileStringA(string Section, string Key, string _Default, StringBuilder Buffer, int BufferSize, string FileName);
        [DllImport("kernel32.dll", CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true)]
        private static extern int WritePrivateProfileStringA(string Section, string Key, string Arg, string FileName);

        public byte ReadByte(string Section, string Key, byte _Default)
        {
            byte buf = _Default;
            byte.TryParse(this.ReadString(Section, Key, _Default.ToString(), 6), out buf);
            return buf;
        }

        public short ReadInt16(string Section, string Key, short _Default)
        {
            short buf = _Default;
            short.TryParse(this.ReadString(Section, Key, _Default.ToString(), 9), out buf);
            return buf;
        }

        public int ReadInt32(string Section, string Key, int _Default)
        {
            int buf = _Default;
            int.TryParse(this.ReadString(Section, Key, _Default.ToString(), 15), out buf);
            return buf;
        }

        public sbyte ReadSByte(string Section, string Key, byte _Default)
        {
            sbyte buf = (sbyte)_Default;
            sbyte.TryParse(this.ReadString(Section, Key, _Default.ToString(), 6), out buf);
            return buf;
        }

        public string ReadString(string Section, string Key, string _Default)
        {
            return this.ReadString(Section, Key, _Default, 255);
        }

        public string ReadString(string Section, string Key, string _Default, int BufSize)
        {
            StringBuilder Buffer = new StringBuilder(BufSize);
            GetPrivateProfileStringA(Section, Key, _Default, Buffer, BufSize, this.FileName);
            return Buffer.ToString();
        }

        public ushort ReadUInt16(string Section, string Key, ushort _Default)
        {
            ushort buf = _Default;
            ushort.TryParse(this.ReadString(Section, Key, _Default.ToString(), 9), out buf);
            return buf;
        }

        public uint ReadUInt32(string Section, string Key, uint _Default)
        {
            uint buf = _Default;
            uint.TryParse(this.ReadString(Section, Key, _Default.ToString(), 15), out buf);
            return buf;
        }

        public void Write(string Section, string Key, object Value)
        {
            WritePrivateProfileStringA(Section, Key, Value.ToString(), this.FileName);
        }

        public void Write(string Section, string Key, string Value)
        {
            WritePrivateProfileStringA(Section, Key, Value, this.FileName);
        }

    }

}
03/13/2011 23:32 denominator#2
Ok not sure I will be needing this but I will give thanks anway :D