|
||
|
|||||||
| Server Support on Windows Get (and give) support on general questions related to the RunUO server itself. |
![]() |
|
|
Thread Tools | Display Modes |
|
|
#1 (permalink) |
|
Newbie
Join Date: May 2005
Location: Portugal, lisbon
Age: 18
Posts: 98
|
hi. i know theres already many threads on runuo about this but not has an answer. So im getting an old problem back and i hope someone could help to to solve this. I want 2 shards with same ips and diferent ports appearing on one client. how can i do that? i know its somewhere in serverlist.cs but cant find exactly where. can ayone help em with this plz?
|
|
|
|
|
|
#5 (permalink) |
|
Newbie
Join Date: Feb 2007
Age: 42
Posts: 43
|
i have one but it from a friends old shard he gave me a copy for file when i lost mine in hurricain Rita/Katrina with my putter and i dont know how u revise it r id be useing it if anyone know how heres the file if they could plshelp out i would love to use it for 2.0 also so i dont have to log out of orginal shard to test stuff.
my system will run 3 whole shards at same time and 8 clients at once heres the script: 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 = "Neo's Realm"; //Home Server's Name
//Server A
public const string ServerNameA = "Havoc's Hellions"; //Server A's Name
//Server B
public const string ServerNameB = "Neo's Realm Test Shard"; //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 = true;
public const int MinutesBetweenIPAutodetect = 1440;
public static string Address = null; //Home Server's IP
//Server A
public static string AddressA = null; //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 = 2593; //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 = 2592; //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( ServerNameA, new IPEndPoint( ipAddr, PortA ) );
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();
}
}
}
i just got my putter rebuilt from being down for 1.3 yrs and now rebuilding a new 2.0 shard, im a 41 yr old disabled vet that spent 9 yrs overseas, its difficult to focus on the changes from old to new im lerning it buts its going slow its getting where i cant *waits 5 mins* oh yea i forgot what i was talking about the upgrades ![]() P.S. pls post it back in this thread if u help us ty bunches |
|
|
|
|
|
#6 (permalink) |
|
Newbie
Join Date: May 2005
Location: Portugal, lisbon
Age: 18
Posts: 98
|
I found a thread here on runuo with scripts for 2 shards for 3 and for 4. heres the link:ServerList.cs 2.2
but well its a little tweaked, probably cause im using on 1.0 server and other 2.0. the hoster desnt mather what shard clicks he will always go to home shard and for other people is fine. |
|
|
|
|
|
#7 (permalink) |
|
Newbie
Join Date: Feb 2007
Age: 42
Posts: 43
|
well i figured it out and got it to wqork with 2.0 here u go
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 = "Arhturs Realm"; //Home Server's Name
//Server A
public const string ServerNameA = "Havoc's Hellions"; //Server A's Name
//Server B
public const string ServerNameB = "Arthurs Test Realm"; //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 = "ur ip"; //Home Server's IP
//Server A
public static string AddressA = "ur ip"; //Server A's IP
public const int PortA = 2591; //Server A's Port
//Server B
public static string AddressB = "ur ip"; //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(ServerNameA, new IPEndPoint(ipAddr, PortA));
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();
}
}
}
its not mine but it works and its not tweaked for both just the multi 2.0 hope it helps hope Mr. Fixit isnt upset ![]() |
|
|
|
|
|
#8 (permalink) |
|
Forum Expert
Join Date: Mar 2004
Location: Jax FL USA
Age: 35
Posts: 260
|
There is one problem ive seen with the script.... for some reason it will not list the 6th character slot... at all..
I tested it using both my nomral server and a test server... both showed up fine and worked like a charm... but the 6th slot wasnt showing up at all. Im gonna try to see if i can figure it out and ill make notes to this post if i do. In the mean time if anyone else has solved it please share the wealth lol. Other then that its a great script Arthur thanks for the submission.
__________________
Evil is as Evil does ... Guess im just an Evil motherf.... *sniffs air * That fear i smell?? www.darkgenesiscafe.com |
|
|
|
![]() |
| Bookmarks |
| Currently Active Users Viewing This Thread: 1 (0 members and 1 guests) | |
| Thread Tools | |
| Display Modes | |
|
|