95 lines
No EOL
2.1 KiB
C#
95 lines
No EOL
2.1 KiB
C#
using System;
|
|
using System.IO;
|
|
using Microsoft.Win32;
|
|
using Server;
|
|
|
|
namespace Server.Misc
|
|
{
|
|
public class DataPath
|
|
{
|
|
/* If you have not installed Ultima Online,
|
|
* or wish the server to use a separate set of datafiles,
|
|
* change the 'CustomPath' value, example:
|
|
*
|
|
* private const string CustomPath = @"C:\Program Files\Ultima Online";
|
|
*/
|
|
private static string CustomPath = null;
|
|
|
|
/* The following is a list of files which a required for proper execution:
|
|
*
|
|
* Multi.idx
|
|
* Multi.mul
|
|
* VerData.mul
|
|
* TileData.mul
|
|
* Map*.mul
|
|
* StaIdx*.mul
|
|
* Statics*.mul
|
|
* MapDif*.mul
|
|
* MapDifL*.mul
|
|
* StaDif*.mul
|
|
* StaDifL*.mul
|
|
* StaDifI*.mul
|
|
*/
|
|
|
|
public static void Configure()
|
|
{
|
|
string pathReg = GetExePath( "Ultima Online" );
|
|
string pathTD = GetExePath( "Ultima Online Third Dawn" ); //These refer to 2D & 3D, not the Third Dawn expansion
|
|
|
|
if ( CustomPath != null )
|
|
Core.DataDirectories.Add( CustomPath );
|
|
|
|
if ( pathReg != null )
|
|
Core.DataDirectories.Add( pathReg );
|
|
|
|
if ( pathTD != null )
|
|
Core.DataDirectories.Add( pathTD );
|
|
|
|
if ( Core.DataDirectories.Count == 0 )
|
|
{
|
|
Console.WriteLine( "Enter the Ultima Online directory:" );
|
|
Console.Write( "> " );
|
|
|
|
Core.DataDirectories.Add( Console.ReadLine() );
|
|
}
|
|
}
|
|
|
|
private static string GetExePath( string subName )
|
|
{
|
|
try
|
|
{
|
|
String keyString;
|
|
|
|
if( Core.Is64Bit )
|
|
keyString = @"SOFTWARE\Wow6432Node\Origin Worlds Online\{0}\1.0";
|
|
else
|
|
keyString = @"SOFTWARE\Origin Worlds Online\{0}\1.0";
|
|
|
|
using( RegistryKey key = Registry.LocalMachine.OpenSubKey( String.Format( keyString, subName ) ) )
|
|
{
|
|
if( key == null )
|
|
return null;
|
|
|
|
string v = key.GetValue( "ExePath" ) as string;
|
|
|
|
if( v == null || v.Length <= 0 )
|
|
return null;
|
|
|
|
if( !File.Exists( v ) )
|
|
return null;
|
|
|
|
v = Path.GetDirectoryName( v );
|
|
|
|
if( v == null )
|
|
return null;
|
|
|
|
return v;
|
|
}
|
|
}
|
|
catch
|
|
{
|
|
return null;
|
|
}
|
|
}
|
|
}
|
|
} |