rendered paste bodyusing System;
using System.Collections.Generic;
using System.Text;
using System.Collections;
using System.IO;
using System.Text.RegularExpressions;
namespace Server
{
public class ClilocTranslator
{
private static byte[] m_Buffer = new byte[1024];
private static Dictionary<int, ClilocStringEntry> clilocStringList;
private static string language = "enu";
private static string clientPath = "D:\\Program\\Ultima Online 2D\\";
public static void Start()
{
if (language == null || language == "")
language = "enu";
//TODO: Fix this like the SDK
string path = string.Format("{0}cliloc.{1}", ClilocTranslator.clientPath, language);
clilocStringList = new Dictionary<int, ClilocStringEntry>();
#region Ultima SDK code + mod
using (BinaryReader bin = new BinaryReader(new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read)))
{
bin.ReadInt32();
bin.ReadInt16();
while (bin.PeekChar() != -1)
{
int number = bin.ReadInt32();
bin.ReadByte();
int length = bin.ReadInt16();
if (length > m_Buffer.Length)
m_Buffer = new byte[(length + 1023) & ~1023];
bin.Read(m_Buffer, 0, length);
clilocStringList[number] = new ClilocStringEntry(Encoding.UTF8.GetString(m_Buffer, 0, length));
}
}
#endregion
}
public static string GetString(int number, bool plural)
{
if (plural)
return ClilocTranslator.clilocStringList[number].Plural;
else
return ClilocTranslator.clilocStringList[number].Singular;
}
public static string GetString(int number)
{
return ClilocTranslator.clilocStringList[number].Singular;
}
}
public class ClilocStringEntry
{
string singular;
string plural;
public string Singular
{
get { return singular; }
set { singular = value; }
}
public string Plural
{
get { return plural; }
set { plural = value; }
}
public ClilocStringEntry(string clilocString)
{
if (clilocString.Contains("~"))
clilocString = FormatVars(clilocString);
this.singular = clilocString.ToLower();
if ((this.singular.Length - 1) >= 0 && this.singular[singular.Length - 1] != 's')
this.plural = this.singular + "s";
else
this.plural = this.singular;
}
public string FormatVars(string text)
{
Regex r = new Regex("~(.+?)~");
MatchCollection mC = r.Matches(text);
for (int i = 0; i < mC.Count; i++)
text = text.Replace(mC[i].ToString(), string.Format("{{0}}", i));
return text;
}
}
}