Go Back   RunUO - Ultima Online Emulation > RunUO > Script Support

Script Support Get support for modifying RunUO Scripts, or writing your own!

Reply
 
Thread Tools Display Modes
Old 02-16-2006, 05:56 PM   #1 (permalink)
Forum Expert
 
Seven's Avatar
 
Join Date: Dec 2004
Location: Tomah, WI
Age: 19
Posts: 1,326
Default Serverlist.CS Questions

This should probably be moved to Script Support? Sorry... :P
Hello,
I'm using two serverlist.cs one on my server and the other on the remote server. They both were working yesterday Until I changed the names to Ryst - Classic and the other to AOS Test. Now players can only connect to AOS Test if an account exsists there. And if they try to connect and one doesn't exsist it gets stuck at Connecting... when they click Test AOS.

Another question is maby there are other problems and not just the serverlist script? For both servers ports are forwarded and in the script those are the correct IP's.

Maby there is syncing issues?

I have tried many things but it still doesn't seem to be working. If someone could look over this script and maby give suggestions on how to fix it that would be great.


Server 1 (Ryst-Classic, serverlist)
Code:
// ==================================================================================================================
// ServerList.cs Ver.2.0                                                              Mr.Fixit Version Releases
// ==================================================================================================================
//      1.0 	RunUO Beta 36	Initial version
//      1.1 	Mr Fixit	Now automaticly detects if you are connecting localy and uses the
//				servers local ip in the client serverlist.
//      1.2	Mr Fixit	Int

ernet IP autodetection using www.whatismyip.com.
//      1.3	Mr Fixit	If script fails to find the internet ip, keep the old one and try again in # minutes.				
//      1.4	Mr Fixit	You can now add AutoIP mirrors. Added whatismyip.com and myip.com.
//      1.5	Mr Fixit	Adjusted the AutoIP mirror engine so it supports more mirrors.
//				Added findmyip.com and ipaddy.com.
//      1.6	Mr Fixit	IP is now trimmed (Just in case). Added simflex.com, edpsciences.com,
//				ipid.shat.net and checkip.dyndns.org.
//      1.7  Mr Fixit        Removed www.whatismyip.com is it seems to be out of buisness.
//      1.8  Mr Fixit        Added a message to the console with ServerList.cs version when server loads.
//				Now detects the internet ip when the server starts.
//				Now checks if the ip has changed every 60 minutes instead of 30 minutes.
//      1.9  Mr Fixit        Removed noip.com mirror as it isnt working anymore.
//      2.0  Mr Fixit        Now only renews the ip every 24 hours (1440 minutes).
//===================================================================================================================
// ServerList.cs Ver.2.2                                                     Developer Landry Version Releases
//===================================================================================================================
//      2.1  Developer Landry        Its easyer to add multiple servers.
//                                                             The Home Server is where you enter the ip/port of the server this script is running on a.k.a the scripts home server.
//                                                             Servers/Ports A, B and C are the different values you can enter your multiple servers into.
//                                                             All servers that are listed must be running the same corresponding ServerList.cs for the list to work.
//                                                             NOTE: BY DEFAULT A. B AND C ARE COMMENTED OUT BY /*EXAMPLE*/ THE OUTSIDE COMMENTS.
//                                                             NOTE: ALL SERVERS MUST BE HOSTED BY THE SAME IP ADDRESS
//                                                             NOTE: ALL SERVERS MUST BE HOSTED BY DIFFERENT PORTS
//      2.2  Developer Landry        Added Account Packet Handler (APH).
//                                                             Enables the client to connect to multiple servers.
//                                                             Disables client checks allowing the client to login into multiple servers.
//                                                             The Disabling also allows the client to login into the same account twice.
// ===================================================================================================================

using System;
using System.Net;
using System.Net.Sockets;
using Server;
using Server.Network;

namespace Server.Misc
{
	public class ServerList
	{
		// ==================================================================================
		// YOUR SERVERS NAME
		// ==================================================================================
		public const string ServerName = "Ryst - Classic"; //Home Server's Name
                                //Server A
		public const string ServerNameA = "AOS Test"; //Server A's Name
                                /*//Server B
		public const string ServerNameB = "Server 3"; //Server B's Name*/
                                /*//Server C
		public const string ServerNameC = "Server 4"; //Server C's Name*/
		// ==================================================================================
		// YOUR INTERNET IP OR DNS NAME
		// Here you can select to autodetect your internet ip, or manualy specify
		// Examples:
		// public static string Address = "";
		// public static string Address = "shard.host.com";
		// ==================================================================================
		public const bool InternetIPAutodetect = false;
		public const int MinutesBetweenIPAutodetect = 1440;
		public static string Address = "ryst.no-ip.org";  //Home Server's IP
                                //Server A
		public static string AddressA = "70.185.62.115";  //Server A's IP
		public const int PortA = 2591;  //Server A's Port
                                /*//Server B
		public static string AddressB = null; //Server B's IP
		public const int PortB = 2592;  //Server B's Port*/
                                /*//Server C
		public static string AddressB = null; //Server C's IP
		public const int PortB = 2594;  //Server C's Port*/
		// ==================================================================================
		// Here are some values stored
		// ==================================================================================
		private static LocalLanIPRange[] LocalLanIPRanges = new LocalLanIPRange[10];		
		private static UInt32 LocalLanIPRangesCount;
		private static AutoIPMirror[] AutoIPMirrors = new AutoIPMirror[10];	
		private static UInt32 AutoIPMirrorsCount;
		private static DateTime InternetIPAutodetectLast;
		

		// ==================================================================================
		// Initialization
		// ==================================================================================
		public static void Initialize()
		{
			// ----------------------------------------------------
			// Select what home port to use
			// ----------------------------------------------------
			Listener.Port = 2593;  //Home Server's Port

			// ----------------------------------------------------
			// Load the local LAN ip ranges
			// ----------------------------------------------------
			AddLocalLANIPRange("10.0.0.0", "10.255.255.255");
			AddLocalLANIPRange("192.168.0.0", "192.168.255.255");
			AddLocalLANIPRange("172.16.0.0", "172.32.255.255");
			AddLocalLANIPRange("169.254.0.0", "169.254.255.255");

			// ----------------------------------------------------
			// Load the Auto IP mirros
			// ----------------------------------------------------
			AddAutoIPMirror("http://www.findmyip.com/", "Your IP address is:<br>", "</FONT>");
			AddAutoIPMirror("http://www.ipaddy.com/", "Your IP address is: ", "<br>");
			AddAutoIPMirror("http://checkip.dyndns.org/", "Current IP Address: ", "</body>");
			AddAutoIPMirror("http://ipid.shat.net/iponly/", "<title>", "</title>");
			AddAutoIPMirror("http://www.edpsciences.com/htbin/ipaddress", "Your IP address is  <B> ", " </B>");
			AddAutoIPMirror("http://www2.simflex.com/ip.shtml", "Your IP address is <BR>", "<BR>");
			
			// ----------------------------------------------------
			// Create the event
			// ----------------------------------------------------
			EventSink.ServerList += new ServerListEventHandler( EventSink_ServerList );
			
			// ----------------------------------------------------
			// Show info in console
			// ----------------------------------------------------
			Console.WriteLine("ServerList 2.2");
			Console.WriteLine("Welcome to Server 1");

			// ----------------------------------------------------
			// Lets find internet ip
			// ----------------------------------------------------
			DetectInternetIP();
			
			
		}
		

		// ==================================================================================
		// Add a range of local lan ips
		// ==================================================================================
		private static void AddLocalLANIPRange(string RangeFrom, string	RangeTo)
		{
			LocalLanIPRanges[LocalLanIPRangesCount] = new LocalLanIPRange();
			LocalLanIPRanges[LocalLanIPRangesCount].RangeFrom = StringIPToUInt32IP(RangeFrom);
			LocalLanIPRanges[LocalLanIPRangesCount].RangeTo = StringIPToUInt32IP(RangeTo);
			LocalLanIPRangesCount = LocalLanIPRangesCount + 1;
		}
		
		
		// ==================================================================================
		// Convert a ip string to a binary unsigned int
		// ==================================================================================
		private static UInt32 StringIPToUInt32IP(string addr)
		{
			byte[] byteArray1 = IPAddress.Parse(addr).GetAddressBytes();
			byte[] byteArray2 = IPAddress.Parse(addr).GetAddressBytes();
			byteArray1[0] = byteArray2[3];
			byteArray1[1] = byteArray2[2];
			byteArray1[2] = byteArray2[1];
			byteArray1[3] = byteArray2[0];
			return  BitConverter.ToUInt32( byteArray1, 0);
		}
		

		// ==================================================================================
		// Used to store the local lan ip ranges
		// ==================================================================================
		private class LocalLanIPRange
		{
			public UInt32			RangeFrom;
			public UInt32			RangeTo;
		}	


		// ==================================================================================
		// Add a AutoIP mirror
		// ==================================================================================
		private static void AddAutoIPMirror(string sURL, string	sStart, string sEnd)
		{
			AutoIPMirrors[AutoIPMirrorsCount] = new AutoIPMirror();
			AutoIPMirrors[AutoIPMirrorsCount].sURL = sURL;
			AutoIPMirrors[AutoIPMirrorsCount].sStart = sStart;
			AutoIPMirrors[AutoIPMirrorsCount].sEnd = sEnd;
			AutoIPMirrorsCount = AutoIPMirrorsCount + 1;
		}


		// ==================================================================================
		// Used to store the Auto IP mirrors
		// ==================================================================================
		private class AutoIPMirror
		{
			public string			sURL;
			public string			sStart;
			public string			sEnd;
			public UInt32			iFailures;
		}	


		// ==================================================================================
		// Detect ip
		// ==================================================================================
		public static void DetectInternetIP()
		{

			// ----------------------------------------------------
			// Autodetect the Internet IP
			// ----------------------------------------------------
			if (InternetIPAutodetect) {
				DateTime UpdateTime = InternetIPAutodetectLast;
				UpdateTime = UpdateTime.AddMinutes(MinutesBetweenIPAutodetect);
				if (UpdateTime<DateTime.Now) {
					string NewAddress = null;
					NewAddress = FindInternetIP();
					InternetIPAutodetectLast = DateTime.Now;
					if (NewAddress!=null) 
					{
						Address = NewAddress;
					}
				}
			}
			
		}

		// ==================================================================================
		// The serverlist event
		// ==================================================================================
		public static void EventSink_ServerList( ServerListEventArgs e )
		{
			try
			{

				// ----------------------------------------------------
				// Lets find internet ip
				// ----------------------------------------------------
				DetectInternetIP();
				
				// ----------------------------------------------------
				// Find the server ip to use for this user
				// ----------------------------------------------------
				IPAddress ipAddr = FindMachineIP(e);
				
				// ----------------------------------------------------
				// Send serverlist
				// ----------------------------------------------------
				if ( Resolve( Address != null && !IsLocalMachine( e.State ) ? Address : Dns.GetHostName(), out ipAddr ) )
				{
					e.AddServer( ServerName, new IPEndPoint( ipAddr, Listener.Port ) );
					e.AddServer( "AOS Test", new IPEndPoint( IPAddress.Parse( "70.185.62.115" ), 2591 ) );
					/*e.AddServer( ServerNameB, new IPEndPoint( ipAddr, PortB ) );*/
					/*e.AddServer( ServerNameC, new IPEndPoint( ipAddr, PortC ) );*/
				} else {
					e.Rejected = true;
				}
			}
			catch
			{
				e.Rejected = true;
			}
		}
		
		
		// ==================================================================================
		// Connects to a webserver that gives you your internet ip
		// ==================================================================================
                public static string FindInternetIP( )
		{

			// ----------------------------------------------------
			// Pick a random mirror
			// ----------------------------------------------------
			Random rnd = new Random();
			int UseMirror = (int)( rnd.NextDouble() * AutoIPMirrorsCount);
			string MyIP = "";
			
			// ----------------------------------------------------
			// Catch if the mirror is down
			// ----------------------------------------------------
			try
			{
				// ----------------------------------------------------
				// Get the webpage
				// ----------------------------------------------------
        	    		WebClient client = new WebClient();
            			byte[] pageData = client.DownloadData(AutoIPMirrors[UseMirror].sURL);
            			MyIP = System.Text.Encoding.ASCII.GetString(pageData);
            		
				// ----------------------------------------------------
				// Find the string
				// ----------------------------------------------------
                        	int iStart = MyIP.LastIndexOf(AutoIPMirrors[UseMirror].sStart);   
                        	int iEnd = MyIP.IndexOf(AutoIPMirrors[UseMirror].sEnd, iStart+AutoIPMirrors[UseMirror].sStart.Length);
                        	MyIP = MyIP.Substring(iStart+AutoIPMirrors[UseMirror].sStart.Length, iEnd-iStart-AutoIPMirrors[UseMirror].sStart.Length );
                        	MyIP = MyIP.Trim();
                        	
				// ----------------------------------------------------
				// Return value
				// ----------------------------------------------------
                        	Console.WriteLine("Internet IP: {0} ({1})", MyIP, AutoIPMirrors[UseMirror].sURL);
        	                return MyIP;
			}
			catch
			{
				Console.WriteLine("Unable to autoupdate the Internet IP from {0}!", AutoIPMirrors[UseMirror].sURL);
				Console.WriteLine("----------------------------------------------------------------------");
				Console.WriteLine(MyIP);
				Console.WriteLine("----------------------------------------------------------------------");
				return null;
			}
        	}
		
		
		// ==================================================================================
		// Calculates what server IP to use
		// ==================================================================================
                public static IPAddress FindMachineIP( ServerListEventArgs e )
		{
			// ----------------------------------------------------
			// Find the IP of the connecting user
			// ----------------------------------------------------
			Socket sock = e.State.Socket;
			IPAddress theirAddress = ((IPEndPoint)sock.RemoteEndPoint).Address;				
			IPAddress serverAddress;

			// ----------------------------------------------------
			// Is it Loopback?
			// ----------------------------------------------------
			if ( IPAddress.IsLoopback( theirAddress ) )
			{
				return IPAddress.Parse( "127.0.0.1" );
			}

			// ----------------------------------------------------
			// Local
			// ----------------------------------------------------
			UInt32 uint32Address = StringIPToUInt32IP(theirAddress.ToString());
			for (UInt32 LocalLanIPRangesLoop = 0 ; LocalLanIPRangesLoop < LocalLanIPRangesCount; LocalLanIPRangesLoop++)
			{	
				if ( (LocalLanIPRanges[LocalLanIPRangesLoop].RangeFrom <= uint32Address) && (LocalLanIPRanges[LocalLanIPRangesLoop].RangeTo >= uint32Address) )
				{
					Resolve(Dns.GetHostName(), out serverAddress);
					
					Console.WriteLine("Player is reconnecting to " + serverAddress.ToString());
					return serverAddress;
				}
			}

			// ----------------------------------------------------
			// Internet addresses
			// ----------------------------------------------------
			if (Address!=null)
			{
				Resolve(Address, out serverAddress);	
			} else {
				Resolve(Dns.GetHostName(), out serverAddress);	
			}
			
			Console.WriteLine("Player is reconnecting to " + serverAddress.ToString());
			return serverAddress;
		}
		

		// ==================================================================================
		// Resolves dns names
		// ==================================================================================
		public static bool Resolve( string addr, out IPAddress outValue )
		{
			try
			{
				outValue = IPAddress.Parse( addr );
				return true;
			}
			catch
			{
				try
				{
					IPHostEntry iphe = Dns.Resolve( addr );

					if ( iphe.AddressList.Length > 0 )
					{
						outValue = iphe.AddressList[iphe.AddressList.Length - 1];
						return true;
					}
				}
				catch
				{
				}
			}
			outValue = IPAddress.None;
			return false;
		}

		private static bool IsLocalMachine( NetState state )
		{
			Socket sock = state.Socket;

			IPAddress theirAddress = ((IPEndPoint)sock.RemoteEndPoint).Address;

			if ( IPAddress.IsLoopback( theirAddress ) )
				return true;

			bool contains = false;
			IPHostEntry iphe = Dns.Resolve( Dns.GetHostName() );

			for ( int i = 0; !contains && i < iphe.AddressList.Length; ++i )
				contains = theirAddress.Equals( iphe.AddressList[i] );

			return contains;
		}
	}
}
namespace Server.Network
{
	public class APH
	{
		public static void Initialize()
		{
			PacketHandlers.Register( 145, 65, false, new OnPacketReceive( GameLogin ) );
		}

		public static void GameLogin(NetState state, PacketReader pvSrc)
		{
			if (state.SentFirstPacket)
			{
				state.Dispose();
				return;
			}
				state.SentFirstPacket = true;
				int SecurityID = pvSrc.ReadInt32();

			string un = pvSrc.ReadString(30);
			string pw = pvSrc.ReadString(30);
			GameLoginEventArgs loginevents = new GameLoginEventArgs(state, un, pw);
			EventSink.InvokeGameLogin( loginevents );
			if ( loginevents.Accepted )
			{
				state.CityInfo = loginevents.CityInfo;
				state.CompressionEnabled = true;
				if ( Core.AOS )
				{
					state.Send( SupportedFeatures.Instantiate() );
				}
				state.Send( new CharacterList( state.Account, state.CityInfo ) );
				return;
			}
			state.Dispose();
		}
	}
}
Server 2
Code:
// ==================================================================================================================
// ServerList.cs Ver.2.0                                                              Mr.Fixit Version Releases
// ==================================================================================================================
//      1.0 	RunUO Beta 36	Initial version
//      1.1 	Mr Fixit	Now automaticly detects if you are connecting localy and uses the
//				servers local ip in the client serverlist.
//      1.2	Mr Fixit	Internet IP autodetection using www.whatismyip.com.
//      1.3	Mr Fixit	If script fails to find the internet ip, keep the old one and try again in # minutes.				
//      1.4	Mr Fixit	You can now add AutoIP mirrors. Added whatismyip.com and myip.com.
//      1.5	Mr Fixit	Adjusted the AutoIP mirror engine so it supports more mirrors.
//				Added findmyip.com and ipaddy.com.
//      1.6	Mr Fixit	IP is now trimmed (Just in case). Added simflex.com, edpsciences.com,
//				ipid.shat.net and checkip.dyndns.org.
//      1.7  Mr Fixit        Removed www.whatismyip.com is it seems to be out of buisness.
//      1.8  Mr Fixit        Added a message to the console with ServerList.cs version when server loads.
//				Now detects the internet ip when the server starts.
//				Now checks if the ip has changed every 60 minutes instead of 30 minutes.
//      1.9  Mr Fixit        Removed noip.com mirror as it isnt working anymore.
//      2.0  Mr Fixit        Now only renews the ip every 24 hours (1440 minutes).
//===================================================================================================================
// ServerList.cs Ver.2.2                                                     Developer Landry Version Releases
//===================================================================================================================
//      2.1  Developer Landry        Its easyer to add multiple servers.
//                                                             The Home Server is where you enter the ip/port of the server this script is running on a.k.a the scripts home server.
//                                                             Servers/Ports A, B and C are the different values you can enter your multiple servers into.
//                                                             All servers that are listed must be running the same corresponding ServerList.cs for the list to work.
//                                                             NOTE: BY DEFAULT A. B AND C ARE COMMENTED OUT BY /*EXAMPLE*/ THE OUTSIDE COMMENTS.
//                                                             NOTE: ALL SERVERS MUST BE HOSTED BY THE SAME IP ADDRESS
//                                                             NOTE: ALL SERVERS MUST BE HOSTED BY DIFFERENT PORTS
//      2.2  Developer Landry        Added Account Packet Handler (APH).
//                                                             Enables the client to connect to multiple servers.
//                                                             Disables client checks allowing the client to login into multiple servers.
//                                                             The Disabling also allows the client to login into the same account twice.
// ===================================================================================================================

using System;
using System.Net;
using System.Net.Sockets;
using Server;
using Server.Network;

namespace Server.Misc
{
	public class ServerList
	{
		// ==================================================================================
		// YOUR SERVERS NAME
		// ==================================================================================
		public const string ServerName = "AOS Test"; //Home Server's Name
                                //Server A
		public const string ServerNameA = "Ryst - Classic"; //Server A's Name
                                /*//Server B
		public const string ServerNameB = "Server 3"; //Server B's Name*/
                                /*//Server C
		public const string ServerNameC = "Server 4"; //Server C's Name*/
		// ==================================================================================
		// YOUR INTERNET IP OR DNS NAME
		// Here you can select to autodetect your internet ip, or manualy specify
		// Examples:
		// public static string Address = "12.34.56.78";
		// public static string Address = "shard.host.com";
		// ==================================================================================
		public const bool InternetIPAutodetect = false;
		public const int MinutesBetweenIPAutodetect = 1440;
		public static string Address = "70.185.62.115";  //Home Server's IP
                                //Server A
		public static string AddressA = "ryst.no-ip.org";  //Server A's IP
		public const int PortA = 2593;  //Server A's Port
                                /*//Server B
		public static string AddressB = null; //Server B's IP
		public const int PortB = 2592;  //Server B's Port*/
                                /*//Server C
		public static string AddressB = null; //Server C's IP
		public const int PortB = 2594;  //Server C's Port*/
		// ==================================================================================
		// Here are some values stored
		// ==================================================================================
		private static LocalLanIPRange[] LocalLanIPRanges = new LocalLanIPRange[10];		
		private static UInt32 LocalLanIPRangesCount;
		private static AutoIPMirror[] AutoIPMirrors = new AutoIPMirror[10];	
		private static UInt32 AutoIPMirrorsCount;
		private static DateTime InternetIPAutodetectLast;
		

		// ==================================================================================
		// Initialization
		// ==================================================================================
		public static void Initialize()
		{
			// ----------------------------------------------------
			// Select what home port to use
			// ----------------------------------------------------
			Listener.Port = 2591;  //Home Server's Port

			// ----------------------------------------------------
			// Load the local LAN ip ranges
			// ----------------------------------------------------
			AddLocalLANIPRange("10.0.0.0", "10.255.255.255");
			AddLocalLANIPRange("192.168.0.0", "192.168.255.255");
			AddLocalLANIPRange("172.16.0.0", "172.32.255.255");
			AddLocalLANIPRange("169.254.0.0", "169.254.255.255");

			// ----------------------------------------------------
			// Load the Auto IP mirros
			// ----------------------------------------------------
			AddAutoIPMirror("http://www.findmyip.com/", "Your IP address is:<br>", "</FONT>");
			AddAutoIPMirror("http://www.ipaddy.com/", "Your IP address is: ", "<br>");
			AddAutoIPMirror("http://checkip.dyndns.org/", "Current IP Address: ", "</body>");
			AddAutoIPMirror("http://ipid.shat.net/iponly/", "<title>", "</title>");
			AddAutoIPMirror("http://www.edpsciences.com/htbin/ipaddress", "Your IP address is  <B> ", " </B>");
			AddAutoIPMirror("http://www2.simflex.com/ip.shtml", "Your IP address is <BR>", "<BR>");
			
			// ----------------------------------------------------
			// Create the event
			// ----------------------------------------------------
			EventSink.ServerList += new ServerListEventHandler( EventSink_ServerList );
			
			// ----------------------------------------------------
			// Show info in console
			// ----------------------------------------------------
			Console.WriteLine("ServerList 2.2");
			Console.WriteLine("Welcome to Server 2");

			// ----------------------------------------------------
			// Lets find internet ip
			// ----------------------------------------------------
			DetectInternetIP();
			
			
		}
		

		// ==================================================================================
		// Add a range of local lan ips
		// ==================================================================================
		private static void AddLocalLANIPRange(string RangeFrom, string	RangeTo)
		{
			LocalLanIPRanges[LocalLanIPRangesCount] = new LocalLanIPRange();
			LocalLanIPRanges[LocalLanIPRangesCount].RangeFrom = StringIPToUInt32IP(RangeFrom);
			LocalLanIPRanges[LocalLanIPRangesCount].RangeTo = StringIPToUInt32IP(RangeTo);
			LocalLanIPRangesCount = LocalLanIPRangesCount + 1;
		}
		
		
		// ==================================================================================
		// Convert a ip string to a binary unsigned int
		// ==================================================================================
		private static UInt32 StringIPToUInt32IP(string addr)
		{
			byte[] byteArray1 = IPAddress.Parse(addr).GetAddressBytes();
			byte[] byteArray2 = IPAddress.Parse(addr).GetAddressBytes();
			byteArray1[0] = byteArray2[3];
			byteArray1[1] = byteArray2[2];
			byteArray1[2] = byteArray2[1];
			byteArray1[3] = byteArray2[0];
			return  BitConverter.ToUInt32( byteArray1, 0);
		}
		

		// ==================================================================================
		// Used to store the local lan ip ranges
		// ==================================================================================
		private class LocalLanIPRange
		{
			public UInt32			RangeFrom;
			public UInt32			RangeTo;
		}	


		// ==================================================================================
		// Add a AutoIP mirror
		// ==================================================================================
		private static void AddAutoIPMirror(string sURL, string	sStart, string sEnd)
		{
			AutoIPMirrors[AutoIPMirrorsCount] = new AutoIPMirror();
			AutoIPMirrors[AutoIPMirrorsCount].sURL = sURL;
			AutoIPMirrors[AutoIPMirrorsCount].sStart = sStart;
			AutoIPMirrors[AutoIPMirrorsCount].sEnd = sEnd;
			AutoIPMirrorsCount = AutoIPMirrorsCount + 1;
		}


		// ==================================================================================
		// Used to store the Auto IP mirrors
		// ==================================================================================
		private class AutoIPMirror
		{
			public string			sURL;
			public string			sStart;
			public string			sEnd;
			public UInt32			iFailures;
		}	


		// ==================================================================================
		// Detect ip
		// ==================================================================================
		public static void DetectInternetIP()
		{

			// ----------------------------------------------------
			// Autodetect the Internet IP
			// ----------------------------------------------------
			if (InternetIPAutodetect) {
				DateTime UpdateTime = InternetIPAutodetectLast;
				UpdateTime = UpdateTime.AddMinutes(MinutesBetweenIPAutodetect);
				if (UpdateTime<DateTime.Now) {
					string NewAddress = null;
					NewAddress = FindInternetIP();
					InternetIPAutodetectLast = DateTime.Now;
					if (NewAddress!=null) 
					{
						Address = NewAddress;
					}
				}
			}
			
		}

		// ==================================================================================
		// The serverlist event
		// ==================================================================================
		public static void EventSink_ServerList( ServerListEventArgs e )
		{
			try
			{

				// ----------------------------------------------------
				// Lets find internet ip
				// ----------------------------------------------------
				DetectInternetIP();
				
				// ----------------------------------------------------
				// Find the server ip to use for this user
				// ----------------------------------------------------
				IPAddress ipAddr = FindMachineIP(e);
				
				// ----------------------------------------------------
				// Send serverlist
				// ----------------------------------------------------
				if ( Resolve( Address != null && !IsLocalMachine( e.State ) ? Address : Dns.GetHostName(), out ipAddr ) )
				{
					e.AddServer( ServerName, new IPEndPoint( ipAddr, Listener.Port ) );
					e.AddServer( ServerNameA, new IPEndPoint( IPAddress.Parse( "ryst.no-ip.org" ), 2593 ) );
					/*e.AddServer( ServerNameB, new IPEndPoint( ipAddr, PortB ) );*/
					/*e.AddServer( ServerNameC, new IPEndPoint( ipAddr, PortC ) );*/
				} else {
					e.Rejected = true;
				}
			}
			catch
			{
				e.Rejected = true;
			}
		}
		
		
		// ==================================================================================
		// Connects to a webserver that gives you your internet ip
		// ==================================================================================
                public static string FindInternetIP( )
		{

			// ----------------------------------------------------
			// Pick a random mirror
			// ----------------------------------------------------
			Random rnd = new Random();
			int UseMirror = (int)( rnd.NextDouble() * AutoIPMirrorsCount);
			string MyIP = "";
			
			// ----------------------------------------------------
			// Catch if the mirror is down
			// ----------------------------------------------------
			try
			{
				// ----------------------------------------------------
				// Get the webpage
				// ----------------------------------------------------
        	    		WebClient client = new WebClient();
            			byte[] pageData = client.DownloadData(AutoIPMirrors[UseMirror].sURL);
            			MyIP = System.Text.Encoding.ASCII.GetString(pageData);
            		
				// ----------------------------------------------------
				// Find the string
				// ----------------------------------------------------
                        	int iStart = MyIP.LastIndexOf(AutoIPMirrors[UseMirror].sStart);   
                        	int iEnd = MyIP.IndexOf(AutoIPMirrors[UseMirror].sEnd, iStart+AutoIPMirrors[UseMirror].sStart.Length);
                        	MyIP = MyIP.Substring(iStart+AutoIPMirrors[UseMirror].sStart.Length, iEnd-iStart-AutoIPMirrors[UseMirror].sStart.Length );
                        	MyIP = MyIP.Trim();
                        	
				// ----------------------------------------------------
				// Return value
				// ----------------------------------------------------
                        	Console.WriteLine("Internet IP: {0} ({1})", MyIP, AutoIPMirrors[UseMirror].sURL);
        	                return MyIP;
			}
			catch
			{
				Console.WriteLine("Unable to autoupdate the Internet IP from {0}!", AutoIPMirrors[UseMirror].sURL);
				Console.WriteLine("----------------------------------------------------------------------");
				Console.WriteLine(MyIP);
				Console.WriteLine("----------------------------------------------------------------------");
				return null;
			}
        	}
		
		
		// ==================================================================================
		// Calculates what server IP to use
		// ==================================================================================
                public static IPAddress FindMachineIP( ServerListEventArgs e )
		{
			// ----------------------------------------------------
			// Find the IP of the connecting user
			// ----------------------------------------------------
			Socket sock = e.State.Socket;
			IPAddress theirAddress = ((IPEndPoint)sock.RemoteEndPoint).Address;				
			IPAddress serverAddress;

			// ----------------------------------------------------
			// Is it Loopback?
			// ----------------------------------------------------
			if ( IPAddress.IsLoopback( theirAddress ) )
			{
				return IPAddress.Parse( "127.0.0.1" );
			}

			// ----------------------------------------------------
			// Local
			// ----------------------------------------------------
			UInt32 uint32Address = StringIPToUInt32IP(theirAddress.ToString());
			for (UInt32 LocalLanIPRangesLoop = 0 ; LocalLanIPRangesLoop < LocalLanIPRangesCount; LocalLanIPRangesLoop++)
			{	
				if ( (LocalLanIPRanges[LocalLanIPRangesLoop].RangeFrom <= uint32Address) && (LocalLanIPRanges[LocalLanIPRangesLoop].RangeTo >= uint32Address) )
				{
					Resolve(Dns.GetHostName(), out serverAddress);
					
					Console.WriteLine("Player is reconnecting to " + serverAddress.ToString());
					return serverAddress;
				}
			}

			// ----------------------------------------------------
			// Internet addresses
			// ----------------------------------------------------
			if (Address!=null)
			{
				Resolve(Address, out serverAddress);	
			} else {
				Resolve(Dns.GetHostName(), out serverAddress);	
			}
			
			Console.WriteLine("Player is reconnecting to " + serverAddress.ToString());
			return serverAddress;
		}
		

		// ==================================================================================
		// Resolves dns names
		// ==================================================================================
		public static bool Resolve( string addr, out IPAddress outValue )
		{
			try
			{
				outValue = IPAddress.Parse( addr );
				return true;
			}
			catch
			{
				try
				{
					IPHostEntry iphe = Dns.Resolve( addr );

					if ( iphe.AddressList.Length > 0 )
					{
						outValue = iphe.AddressList[iphe.AddressList.Length - 1];
						return true;
					}
				}
				catch
				{
				}
			}
			outValue = IPAddress.None;
			return false;
		}

		private static bool IsLocalMachine( NetState state )
		{
			Socket sock = state.Socket;

			IPAddress theirAddress = ((IPEndPoint)sock.RemoteEndPoint).Address;

			if ( IPAddress.IsLoopback( theirAddress ) )
				return true;

			bool contains = false;
			IPHostEntry iphe = Dns.Resolve( Dns.GetHostName() );

			for ( int i = 0; !contains && i < iphe.AddressList.Length; ++i )
				contains = theirAddress.Equals( iphe.AddressList[i] );

			return contains;
		}
	}
}
namespace Server.Network
{
	public class APH
	{
		public static void Initialize()
		{
			PacketHandlers.Register( 145, 65, false, new OnPacketReceive( GameLogin ) );
		}

		public static void GameLogin(NetState state, PacketReader pvSrc)
		{
			if (state.SentFirstPacket)
			{
				state.Dispose();
				return;
			}
				state.SentFirstPacket = true;
				int SecurityID = pvSrc.ReadInt32();

			string un = pvSrc.ReadString(30);
			string pw = pvSrc.ReadString(30);
			GameLoginEventArgs loginevents = new GameLoginEventArgs(state, un, pw);
			EventSink.InvokeGameLogin( loginevents );
			if ( loginevents.Accepted )
			{
				state.CityInfo = loginevents.CityInfo;
				state.CompressionEnabled = true;
				if ( Core.AOS )
				{
					state.Send( SupportedFeatures.Instantiate() );
				}
				state.Send( new CharacterList( state.Account, state.CityInfo ) );
				return;
			}
			state.Dispose();
		}
	}
}
__________________
We have cookies... (Looking for Server Raters/News Reporters)
[ www . ryst . net ]

Last edited by Seven; 02-16-2006 at 06:01 PM.
Seven is offline   Reply With Quote
Old 02-16-2006, 08:19 PM   #2 (permalink)
Forum Expert
 
Seven's Avatar
 
Join Date: Dec 2004
Location: Tomah, WI
Age: 19
Posts: 1,326
Default

Quote:
Originally Posted by Seanchen.net
Your going to create an account system and connect the two servers.
What would explain it working perfectly fine yesterday, and just changing the names mess it up tho?
__________________
We have cookies... (Looking for Server Raters/News Reporters)
[ www . ryst . net ]
Seven is offline   Reply With Quote
Old 02-16-2006, 09:10 PM   #3 (permalink)
Forum Expert
 
Seven's Avatar
 
Join Date: Dec 2004
Location: Tomah, WI
Age: 19
Posts: 1,326
Default

Quote:
Originally Posted by Seanchen.net
Perhaps you were mistaken about them working, because changing their names has nothing to do with them not working.
That is probable. The people who did connect to the second server were new however. There accounts didn't exsist before. Could you possibly tell me what line sends information to the server to create an account and maby I can just duplicate it to send it also to the second server?
__________________
We have cookies... (Looking for Server Raters/News Reporters)
[ www . ryst . net ]
Seven is offline   Reply With Quote
Old 02-16-2006, 09:23 PM   #4 (permalink)
Forum Expert
 
Seven's Avatar
 
Join Date: Dec 2004
Location: Tomah, WI
Age: 19
Posts: 1,326
Default

Quote:
Originally Posted by Seanchen.net
Account System, and Serverlist.

All the code that handles it, exists right in those classes, there isn't anything beyond that. You are still going to need to an account system that adds accounts to both servers, so the same password can be used.

Your asking what you need to do, I am telling you, why are you fighting this? Based on what your telling me, thats what I believe the problem is, most people would accept it.
Why do you think I'm fighting you
I'm just telling you what happend last night when we added the new server lists.

I will look at your suggestions.

Wait isn't an account system already added to this script?
Quote:
// 2.2 Developer Landry Added Account Packet Handler (APH).
// Enables the client to connect to multiple servers.
// Disables client checks allowing the client to login into multiple servers.
// The Disabling also allows the client to login into the same account twice.
or does this mean it just checks to make sure the account is exsists with both servers?
__________________
We have cookies... (Looking for Server Raters/News Reporters)
[ www . ryst . net ]

Last edited by Seven; 02-16-2006 at 09:28 PM.
Seven is offline   Reply With Quote
Old 02-17-2006, 12:15 AM   #5 (permalink)
Forum Expert
 
Seven's Avatar
 
Join Date: Dec 2004
Location: Tomah, WI
Age: 19
Posts: 1,326
Default

Quote:
Originally Posted by Seanchen.net
The code doesn't connect to any third party, to check the accounts, so it couldn't be an account system. How it can even claim to not allow the same account, if its another server, makes me wonder if that code even does what it claims.

I think your fighting me, because most people do, for the fact some people dislke me. To answer your question, no an account system was not added.
I'm not fighting you I'm just trying to seek some help. Now that you told me what needs to be done I'm going to see what I can do.

Thanks for answering my question.
__________________
We have cookies... (Looking for Server Raters/News Reporters)
[ www . ryst . net ]
Seven is offline   Reply With Quote
Old 02-17-2006, 05:05 AM   #6 (permalink)
Newbie
 
Join Date: Sep 2005
Location: Germany
Age: 35
Posts: 43
Send a message via ICQ to Redskull_1973
Default

Try to take a look at your port-settings, too
It may help
Redskull_1973 is offline   Reply With Quote
Reply

Bookmarks


Currently Active Users Viewing This Thread: 1 (0 members and 1 guests)
 
Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are Off
Pingbacks are Off
Refbacks are Off



Powered by vBulletin® Version 3.7.0
Copyright ©2000 - 2009, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.2.0 RC5