hi. hypothetically I’m have a Server and I would like my MMO’s to connect through it, no matter were you are in the world, you will be directed to my server, to connect to another computer so you can play the game. like in runscape. every one can connect no matter what your NAT capabilities are.
how would i go about doing this.
And my server will have a public ip Address.
i plan on geting a server.
Just set-up your server as per norm?
i mean in a script how would i tell the computer to connect in a script
like this one that i have modified greatly.
DontDestroyOnLoad(this);
var GameInFo = "Lobby";
var gameName = "You must change this";
var serverPort = 0;
var Chat : GameObject;
var SendRate = 5;
private var timeoutHostList = 0.0;
private var lastHostListRequest = -1000.0;
private var hostListRefreshTimeout = 10.0;
var Timer = "";
var connectionTestResult : ConnectionTesterStatus = ConnectionTesterStatus.Undetermined;
var filterNATHosts = false;
var probingPublicIP = false;
var doneTesting = false;
var timer : float = 0.0;
var useNat = false; // Should the server enabled NAT punchthrough feature
var Sever = false;
private var windowRect;
var serverListRect;
private var hideTest = true;
private var testMessage = "Undetermined NAT capabilities";
var HowToPlay = false;
var Name = "";
var time : GameObject;
// Enable this if not running a client on the server machine
//MasterServer.dedicatedServer = true;
function OnFailedToConnectToMasterServer(info: NetworkConnectionError){
Debug.Log(info);
}
function OnFailedToConnect(info: NetworkConnectionError){
Debug.Log(info);
}
function OnGUI (){
Awake();
windowRect = GUILayout.Window (0, windowRect, MakeWindow, "Server Controls How To Play");
if (Network.peerType == NetworkPeerType.Disconnected MasterServer.PollHostList().Length != 0)
serverListRect = GUILayout.Window(1, serverListRect, MakeClientWindow, "Server List");
}
function Awake (){
windowRect = Rect(Screen.width-200,0,200,70);
serverListRect = Rect(0, 0, Screen.width - windowRect.width, 200);
// Start connection test
connectionTestResult = Network.TestConnection();
if (Chat == null GameObject.Find ("Chat")){
Chat = GameObject.Find("Chat");
}
// What kind of IP does this machine have? TestConnection also indicates this in the
// test results
if (Network.HavePublicAddress())
Debug.Log("This machine has a public IP address");
else
Debug.Log("This machine has a private IP address");
}
function Update(){
if (time == null GameObject.Find ("Timer")){
time = GameObject.Find("Timer");
}
SendRate--;
// If test is undetermined, keep running
if (!doneTesting){
TestConnection();
//if(Chat == null GameObject.Find("Chat")){
//Chat = GameObject.Find("Chat");
}
if (Sever){
time.SendMessage("server", SendMessageOptions.DontRequireReceiver);
}
if (Sever&SendRate < 0){
//BroadcastMessage("server", SendMessageOptions.DontRequireReceiver);
info();
SendRate = 150;
Debug.Log("info sent");
}
}
function TestConnection(){
// Start/Poll the connection test, report the results in a label and react to the results accordingly
connectionTestResult = Network.TestConnection();
switch (connectionTestResult)
{
case ConnectionTesterStatus.Error:
testMessage = "Problem determining NAT capabilities";
doneTesting = true;
break;
case ConnectionTesterStatus.Undetermined:
testMessage = "Undetermined NAT capabilities";
doneTesting = false;
break;
case ConnectionTesterStatus.PublicIPIsConnectable:
testMessage = "Directly connectable public IP address.";
useNat = false;
doneTesting = true;
break;
// This case is a bit special as we now need to check if we can
// circumvent the blocking by using NAT punchthrough
case ConnectionTesterStatus.PublicIPPortBlocked:
testMessage = "Non-connectble public IP address (port " + serverPort +" blocked), running a server is impossible.";
useNat = false;
// If no NAT punchthrough test has been performed on this public IP, force a test
if (!probingPublicIP)
{
Debug.Log("Testing if firewall can be circumvented");
connectionTestResult = Network.TestConnectionNAT();
probingPublicIP = true;
timer = Time.time + 10;
}
// NAT punchthrough test was performed but we still get blocked
else if (Time.time > timer)
{
probingPublicIP = false; // reset
useNat = true;
doneTesting = true;
}
break;
case ConnectionTesterStatus.PublicIPNoServerStarted:
testMessage = "Public IP address but server not initialized, it must be started to check server accessibility. Restart connection test when ready.";
break;
case ConnectionTesterStatus.LimitedNATPunchthroughPortRestricted:
Debug.Log("LimitedNATPunchthroughPortRestricted");
testMessage = "Limited NAT punchthrough capabilities. Cannot connect to all types of NAT servers.";
useNat = true;
doneTesting = true;
break;
case ConnectionTesterStatus.LimitedNATPunchthroughSymmetric:
Debug.Log("LimitedNATPunchthroughSymmetric");
testMessage = "Limited NAT punchthrough capabilities. Cannot connect to all types of NAT servers. Running a server is ill adviced as not everyone can connect.";
useNat = true;
doneTesting = true;
break;
case ConnectionTesterStatus.NATpunchthroughAddressRestrictedCone:
case ConnectionTesterStatus.NATpunchthroughFullCone:
Debug.Log("NATpunchthroughAddressRestrictedCone || NATpunchthroughFullCone");
testMessage = "NAT punchthrough capable. Can connect to all servers and receive connections from all clients. Enabling NAT punchthrough functionality.";
useNat = true;
doneTesting = true;
break;
default:
testMessage = "Error in test routine, got " + connectionTestResult;
}
//Debug.Log(connectionTestResult + " " + probingPublicIP + " " + doneTesting);
}
function OffLine(){
Sever = false;
Chat.SendMessage("CloseChat", SendMessageOptions.DontRequireReceiver);
}
function MakeWindow (id : int){
hideTest = GUILayout.Toggle(hideTest, "Hide test info");
if (hideTest){
//Awake();
}
if (!hideTest)
{
GUILayout.Label(testMessage);
if (GUILayout.Button ("Retest connection"))
{
Debug.Log("Redoing connection test");
probingPublicIP = false;
doneTesting = false;
connectionTestResult = Network.TestConnection(true);
}
}
HowToPlay = GUILayout.Toggle(HowToPlay, "HOW TO PLAY");
if (HowToPlay){
GUILayout.Label(text);
}
//Awake();
if (Network.peerType == NetworkPeerType.Disconnected)
{
GUILayout.BeginHorizontal();
GUILayout.Space(0);
// Start a new server
if (GUILayout.Button ("Host Server"))
{
//Sever = true;
Chat.SendMessage("OpenChat", SendMessageOptions.DontRequireReceiver);
Network.InitializeServer(100, serverPort, useNat);
info();
//MasterServer.RegisterHost(gameName, "Eliminator","Game INFO "+GameInFo );
SendMessage("lobby",SendMessageOptions.DontRequireReceiver);
}
// Refresh hosts
if (GUILayout.Button ("Refresh Servers") || Time.realtimeSinceStartup > lastHostListRequest + hostListRefreshTimeout)
{
MasterServer.RequestHostList (gameName);
lastHostListRequest = Time.realtimeSinceStartup;
}
GUILayout.Space(0);
GUILayout.EndHorizontal();
}
else
{
if (GUILayout.Button ("Disconnect"))
{ Sever = false;
Chat.SendMessage("By", SendMessageOptions.DontRequireReceiver);
Network.Disconnect();
MasterServer.UnregisterHost();
Chat.SendMessage("CloseChat", SendMessageOptions.DontRequireReceiver);
//Network.Disconnect();
MasterServer.UnregisterHost();
}
GUILayout.FlexibleSpace();
}
GUI.DragWindow (Rect (0,0,1000,1000));
}
function MakeClientWindow(id : int){
GUILayout.Space(5);
var data : HostData[] = MasterServer.PollHostList();
var count : float = 0;
for (var element in data)
{
GUILayout.BeginHorizontal();
// Do not display NAT enabled games if we cannot do NAT punchthrough
if ( !(filterNATHosts element.useNat) )
{
var connections = element.connectedPlayers + "/" + element.playerLimit;
GUILayout.Label(element.gameName);
GUILayout.Space(5);
GUILayout.Label(connections);
GUILayout.Space(5);
var hostInfo = "";
// Indicate if NAT punchthrough will be performed, omit showing GUID
if (element.useNat)
{
GUILayout.Label("NAT");
GUILayout.Space(5);
}
// Here we display all IP addresses, there can be multiple in cases where
// internal LAN connections are being attempted. In the GUI we could just display
// the first one in order not confuse the end user, but internally Unity will
// do a connection check on all IP addresses in the element.ip list, and connect to the
// first valid one.
for (var host in element.ip)
hostInfo = hostInfo + host + ":" + element.port + " ";
//GUILayout.Label("[" + element.ip + ":" + element.port + "]");
GUILayout.Label(hostInfo);
GUILayout.Space(5);
GUILayout.Label(element.comment);
GUILayout.Space(5);
GUILayout.FlexibleSpace();
if (GUILayout.Button("Connect"))
Network.Connect(element);
}
GUILayout.EndHorizontal();
}
}
var text = "Left Click Mouse To fire Gun. Right Click to throw a Granad. Aim at a Tall object and press Q to Grapple up the Object. All Player Scores will Be shown when the timer hits 00:00. The Scores will Be shown as text in the Chat bar.";
function info (){
Sever = true;
//MasterServer.RegisterHost(gameName, "Game Host "+Name,"Status "+GameInFo+" Time "+Timer );
MasterServer.RegisterHost(gameName, "Master Server","Status "+GameInFo+" Time "+Timer );
}
I will look at your answer in more detail and see if i can do it.