Search Unity

  1. Megacity Metro Demo now available. Download now.
    Dismiss Notice
  2. Unity support for visionOS is now available. Learn more in our blog post.
    Dismiss Notice

Headless Dedicated Server (Console) Problems (Solved, Kinda)

Discussion in 'Multiplayer' started by F3RULLO14, Jun 3, 2017.

  1. F3RULLO14

    F3RULLO14

    Joined:
    Oct 14, 2013
    Posts:
    57
    Hello! I'm a little confused about how to go about properly setting up a dedicated server for my game. My end goal is a server like minecraft or rust where you can execute console commands and clients can connect to.

    How do I setup a headless dedicated server? My current 'dedicated' server is also running a client and rendering the map. Causing the server list, displayed on the client, to show 1/30 players when obviously, no one is connected.

    Here is my current method of starting the server. Just a blank gameobject running this script.
    Code (CSharp):
    1. public class ServerManager : MonoBehaviour {
    2.  
    3.     private NetworkManager netManager;
    4.    
    5.     public void Start () {
    6.         netManager = GetComponent<NetworkManager>();
    7.         Debug.Log("Creating Server on port '" + netManager.networkPort + "'...");
    8.         netManager.StartMatchMaker();
    9.         Debug.Log("Attempting MM Connection...");
    10.         netManager.matchMaker.CreateMatch("US 1", 30, true, "", "", "", 0, 0, OnMatchCreated);
    11.     }
    12.  
    13.     public void OnMatchCreated(bool par1, string par2, MatchInfo par3) {
    14.         if(par1) {
    15.             print("Starting Server!");
    16.             netManager.StartServer(par3);
    17.             return;
    18.         }
    19.  
    20.         print("Failed.");
    21.     }
    22. }
    Note, when I export it, there is no headless option. Some threads said to use that.
     
  2. TwoTen

    TwoTen

    Joined:
    May 25, 2016
    Posts:
    1,168
    Why are you running a client instance on the server? And on your code above you are not doing that. Anyways, just checked the Minecraft server. They have a custom Java GUI. So I guess what you could do is to make a WinForms application and integrate the Network Library in there. However, as far as I know you cannot use Unity Mulitplayer Services outside Unity (Matchmaker, Relay). So you would have to replace those with your own or just make players directly connect to the server like the Minecraft game.

    As for your last statement. Headless mode is for Linux only and great for running automated servers with no input. As in Once excecuted. it minds its own bussiness.
     
    Whippets likes this.
  3. Whippets

    Whippets

    Joined:
    Feb 28, 2013
    Posts:
    1,775
    You can still run headless on windows using the command line options -batchmode -nographics which will run it as a service. I do this and it runs just fine. Certainly the server does not want to be running as a client as well. It's going to spend the majority of it's time on the simulation and network traffic.

    You could have the dedicated server read from a database once in a while to check for commands, or even have such commands sendable from clients (or a specific client).
     
    TwoTen likes this.
  4. F3RULLO14

    F3RULLO14

    Joined:
    Oct 14, 2013
    Posts:
    57
    @TwoTen That's my problem, its running a client but I never started a client. I just start the MM and Server but when I retrieve the data for a server list, it shows 1/30 players when I never connected to it.

    @Whippets How do I go about adding command line arguments? Do I have to make a .bat and run the .exe?
     
  5. Whippets

    Whippets

    Joined:
    Feb 28, 2013
    Posts:
    1,775
    I run from shortcuts with a target of "X:\Path\MyServer.exe" -batchmode -nographics
    You could run from a shell or batch file.
     
  6. F3RULLO14

    F3RULLO14

    Joined:
    Oct 14, 2013
    Posts:
    57
    Ahh that worked, thank you but now I cant see it? Its just running in the background processes. Is there a way to view a console?
     
  7. TwoTen

    TwoTen

    Joined:
    May 25, 2016
    Posts:
    1,168
    No. For a UI you will have to make something like a forms application to replicate what Minecraft has. What @Whippets did state tho is a fairly good idea. Make a forms app that has connection (localy somhow) to your server (and even controls states of the server). So you only ever start the Forms app. Then it will launch the actual server when you press "start". And then have a textbox where you can somehow interact with the server, (Possibly poll a text file for easiest way to test the idea).
     
  8. Whippets

    Whippets

    Joined:
    Feb 28, 2013
    Posts:
    1,775
    For a quick and dirty test, polling a text file is exactly what I'd do.

    Ideally, you want a control panel in your client, that is only accessible by the room/world opener. So that they can set any specific controls for that world.

    Obviously, you're going to need to think about instances and how many world instances a server can cope with (and players per instance). From then on it's how many servers you need, and what sort of load balancing system will railroad connected players to specific servers/instances.

    But then this is your game, not ours XD
     
  9. Deleted User

    Deleted User

    Guest

    You still could have console) I've made it for my Master Server, but in order to make it work you need to use system libs. So basically you should start your server on Start(); but your console on Awake(); I've also added my .cfg for tweak the server port. And you could run your server via .bat:
    Code (CSharp):
    1. @echo off
    2. masterserver.exe -batchmode
    There is also a chat in game menu, message sends to the Server - Server checks it for bad words and then simply sending the message to the all clients via NetworkServer.SendToAll(msg);

    Music is crap, cause I made it...

     
    Last edited by a moderator: Jun 3, 2017
  10. F3RULLO14

    F3RULLO14

    Joined:
    Oct 14, 2013
    Posts:
    57
    Thank you guys for all the help and direction. I actually found an asset on the store that was basically a pre-made console. Hooked that bad boy up to my server and seems to work perfectly fine with the -batchmode and -nographics. Just have to run some tests with the Match Making and then fix that issue with the server also have a client some reason...

    @Wobes Thats pretty sweet :)

    http://prntscr.com/ffiddt
     
    Deleted User likes this.
  11. F3RULLO14

    F3RULLO14

    Joined:
    Oct 14, 2013
    Posts:
    57
    Okay I still have an issue with the server showing 1/30 players when no one is actually playing on it. Maybe it has something to do with the Match Maker?

    I use the match maker to register the server to a server list basically. The client can just connect to the MM service and retrieve a server list.
     
  12. Deleted User

    Deleted User

    Guest

    Code (CSharp):
    1. //Connect Hook
    2.     public override void OnServerConnect (NetworkConnection conn)
    3.     {
    4.         if(conn.connectionId != 0)
    5.         {
    6.             currentPlayers += 1;
    7.             masterClient.UpdateHost(currentPlayers);
    8.         }
    9.     }
    10.  
    if(conn.connectionId != 0) won't add the host in the player count.
     
    F3RULLO14 likes this.
  13. F3RULLO14

    F3RULLO14

    Joined:
    Oct 14, 2013
    Posts:
    57
    @Wobes I think its a little trickier than that. I messed around with that and even debugged some values such as the numPlayers and client connects. Both 0. But when I retrieve the match data on the client and display it on the server list, it shows 1/30 :/

    This is the client reading the info in from the matchlist request.
    Code (CSharp):
    1.     [HideInInspector]
    2.     public MatchInfoSnapshot serverInfo;
    3.     private bool mouseOver = false;
    4.  
    5.     public void UpdateInformation() {
    6.         Text name = transform.GetChild(1).GetComponent<Text>();
    7.         Text players = transform.GetChild(2).GetComponent<Text>();
    8.         Text ping = transform.GetChild(3).GetComponent<Text>();
    9.  
    10.         name.text = serverInfo.name;
    11.         players.text = serverInfo.currentSize + "/" + serverInfo.maxSize;
    12.         ping.text = "???";
    13.     }
    Im not sure which value is sent from server to the MM Service to 'count' players or currentSize either.
     
  14. F3RULLO14

    F3RULLO14

    Joined:
    Oct 14, 2013
    Posts:
    57
  15. Deleted User

    Deleted User

    Guest

  16. Deleted User

    Deleted User

    Guest

  17. F3RULLO14

    F3RULLO14

    Joined:
    Oct 14, 2013
    Posts:
    57
    Im using the networkmanager, should I not for a dedicated server?
     
  18. Deleted User

    Deleted User

    Guest

    no, it's fine, but you should make the custom one and override OnServerConnect.
    MasterClient is my class of master server, so ignore it.

    Code (CSharp):
    1. using UnityEngine;
    2. using System.Collections;
    3. using UnityEngine.Networking;
    4.  
    5. public class NetworkManagerMasterServer : NetworkManager
    6. {
    7.     [SerializeField]
    8.     protected int currentPlayers;
    9.     public NetworkMasterClient masterClient;
    10.  
    11.     //Connect Hook
    12.     public override void OnServerConnect (NetworkConnection conn)
    13.     {
    14.         if(conn.connectionId != 0)
    15.         {
    16.             currentPlayers += 1;
    17.             masterClient.UpdateHost(currentPlayers);
    18.         }
    19.     }
    20.  
    21.     public override void OnServerDisconnect(NetworkConnection conn)
    22.     {
    23.             currentPlayers -= 1;
    24.             masterClient.UpdateHost(currentPlayers);
    25.             NetworkServer.DestroyPlayersForConnection(conn);
    26.     }
    27.  
    28. }
     
    Last edited by a moderator: Jun 4, 2017
  19. F3RULLO14

    F3RULLO14

    Joined:
    Oct 14, 2013
    Posts:
    57
    Hm, Im using the latest version of Unity. NetworkMasterClient doesn't exist? And I have my server manager set up that way too but Im not using a custom variable for player count. Ill just attach the class.

    Please note, this is rough code and not very clean.
    Code (CSharp):
    1. using System.Collections;
    2. using System.Collections.Generic;
    3. using UnityEngine;
    4. using UnityEngine.Networking;
    5. using UnityEngine.Networking.Match;
    6. using UnityEngine.Networking.Types;
    7. using EConsole;
    8. using System;
    9. using System.IO;
    10. using System.Reflection;
    11. using SimpleJSON;
    12.  
    13. public class ServerManager : NetworkManager {
    14.  
    15.     private static EConsole.Console theConsole;
    16.  
    17.     /**
    18.      * -1 = quit
    19.      * 0 = connect to console
    20.      * 1 = server start
    21.      * 2 = started
    22.     */
    23.     private static int status = 0;
    24.  
    25.     /** List of registered commands */
    26.     private static List<MethodInfo> commands = new List<MethodInfo>();
    27.  
    28.     private NetworkMatch netMatch;
    29.  
    30.     private Queue<string> commandsReceived = new Queue<string>();
    31.     private object commandLock = new object();
    32.  
    33.     public void Awake() {
    34.         netMatch = gameObject.AddComponent<NetworkMatch>();
    35.     }
    36.  
    37.     public void Start() {
    38.         Setup();
    39.     }
    40.  
    41.     public void Setup() {
    42.         //Setup Paths here
    43.         status = 0;
    44.         theConsole = new EConsole.Console(Path.Combine(Application.streamingAssetsPath, "Console.exe"), "CD Server Console");
    45.         theConsole.OnRead += OnTextReceived;
    46.         theConsole.OnConnect += OnConsoleConnected;
    47.     }
    48.  
    49.     public void InitServer() {
    50.         status = 2;
    51.         LogWarning("Loading Match Data...");
    52.         MasterServer.dedicatedServer = true;
    53.         netMatch.CreateMatch(this.matchName, this.matchSize, true, "", "", "", 0, 0, OnMatchCreated);
    54.     }
    55.  
    56.     public void OnDestroy() {
    57.         theConsole.SetColor(ConsoleColorLayer.Forground, ConsoleColor.Yellow);
    58.         theConsole.CloseConsole();
    59.     }
    60.  
    61.     private void CloseGame() {
    62.         LogError("Closing Application");
    63.         #if UNITY_EDITOR
    64.         UnityEditor.EditorApplication.isPlaying = false;
    65.         #endif
    66.         Application.Quit();
    67.     }
    68.  
    69.     public void Update() {
    70.         if (status == 1) {
    71.             InitServer();
    72.         }
    73.  
    74.         if ((theConsole.isWaitingForConnection == false && theConsole.isConnected == false) || theConsole.isConsoleOpen == false || status == -1) {
    75.             CloseGame();
    76.         }
    77.            
    78.         if(commandsReceived.Count > 0) {
    79.             string command = commandsReceived.Dequeue();
    80.             string[] args = command.Split(new char[] { ' ' });
    81.  
    82.             if (args.Length > 0) {
    83.                 foreach (MethodInfo mi in commands) {
    84.                     if (mi.Name.ToLower() == args[0].ToLower()) {
    85.                         mi.Invoke(null, new object[] { args });
    86.                         break;
    87.                     }
    88.                 }
    89.             }
    90.         }
    91.     }
    92.  
    93.     private void OnTextReceived(string par1) {
    94.         Log(par1);
    95.         string[] args = par1.Split(new char[] { ' ' });
    96.  
    97.         if (args.Length > 0) {
    98.             foreach (MethodInfo mi in commands) {
    99.                 if (mi.Name.ToLower() == args[0].ToLower()) {
    100.  
    101.                     lock(commandLock) {
    102.                         commandsReceived.Enqueue(par1);
    103.                     }
    104.                     return;
    105.                 }
    106.             }
    107.         }
    108.  
    109.         LogError("'" + par1 + "' Is not a command.");
    110.     }
    111.  
    112.     private void OnConsoleConnected() {
    113.         //Load Server Config
    114.         LogFinest("Ello! Initilizing Server.");
    115.         LogWarning("Loading Configs...");
    116.         RegisterCommands();
    117.         status = 1;
    118.     }
    119.  
    120.     private void RegisterCommands() {
    121.         LogWarning("Registering console commands...");
    122.         commands = new List<MethodInfo>();
    123.         Type[] types = Assembly.GetExecutingAssembly().GetTypes();
    124.  
    125.         foreach (Type CMDType in types) {
    126.             MethodInfo[] methods = CMDType.GetMethods();
    127.  
    128.             for (int i = 0; i < methods.Length; i++) {
    129.                 MethodInfo method = methods[i];
    130.  
    131.                 if (method.IsStatic && method.GetCustomAttributes(typeof(ConsoleCommandAttribute), false).Length > 0) {
    132.                     commands.Add(method);
    133.                 }
    134.             }
    135.         }
    136.     }
    137.  
    138.     public void OnMatchCreated(bool par1, string par2, MatchInfo par3) {
    139.         if (par1) {
    140.             LogWarning("Starting Network Listener...");
    141.             NetworkServer.Listen(par3, networkPort);
    142.             StartServer(par3);
    143.             status = 2;
    144.             LogFinest("Server Address: " + par3.address + ":" + networkPort);
    145.             LogFinest("Loading Complete!");
    146.             return;
    147.         }
    148.     }
    149.  
    150.     public override void OnServerConnect(NetworkConnection conn)
    151.     {
    152.         if(conn.connectionId != 0)
    153.         {
    154.             //Missing
    155.             currentPlayers += 1;
    156.             masterClient.UpdateHost(currentPlayers);
    157.         }
    158.     }
    159.  
    160.     public static void Log(string par1) {
    161.         ConsoleUtility.ColorWriteLine(theConsole, par1);
    162.     }
    163.  
    164.     public static void LogWarning(string par1) {
    165.         ConsoleUtility.ColorWriteLine(theConsole, "#f=Yellow#" + par1);
    166.     }
    167.  
    168.     public static void LogError(string par1) {
    169.         ConsoleUtility.ColorWriteLine(theConsole, "#f=Red#" + par1);
    170.     }
    171.  
    172.     public static void LogFinest(string par1) {
    173.         ConsoleUtility.ColorWriteLine(theConsole, "#f=Green#" + par1);
    174.     }
    175.  
    176.     public static void QuitServer() {
    177.         status = -1;
    178.     }
    179. }
     
  20. F3RULLO14

    F3RULLO14

    Joined:
    Oct 14, 2013
    Posts:
    57
    5.6.1f1 Unity
     
  21. Deleted User

    Deleted User

    Guest

    As I said, MasterClient - my Master Server class not the Unity's
     
  22. F3RULLO14

    F3RULLO14

    Joined:
    Oct 14, 2013
    Posts:
    57
    Oh sorry. Anyway, Ill keep messing around then. I just don't understand why the info being sent to the MM service from the server is saying 1/30 players when a client isnt running, no players are connected or connections are established.
     
  23. Deleted User

    Deleted User

    Guest

    Seem like you should tweak the MatchInfoSnapshot
     
  24. F3RULLO14

    F3RULLO14

    Joined:
    Oct 14, 2013
    Posts:
    57
    @Wobes You looked at the servermanager class? Nothing seems wrong? Im def doing something run because it seems like there is a 'MasterServer' then I guess a 'GameServer' or something running. Idk there are a lot of server classes that seem important.
     
  25. Deleted User

    Deleted User

    Guest

    Could you explain your architecture and things that you want to implement? Cause I don't get what you have and what do you want to have)
     
  26. F3RULLO14

    F3RULLO14

    Joined:
    Oct 14, 2013
    Posts:
    57
    @Wobes Thank you for all the help already. You are awesome.

    My only problem now is having 1/30 'players' being displayed when clearly no one is connected.

    My end goal is to set up a dedicated server list rust or minecraft. I have the console and all the components basically in place but I'm not 100% sure on the most effective way to start/init the server. Since I'm getting this error or glitch with 1/30 players.
     
  27. F3RULLO14

    F3RULLO14

    Joined:
    Oct 14, 2013
    Posts:
    57
    Here is the class cleaned up:

    Code (CSharp):
    1. using System.Collections;
    2. using System.Collections.Generic;
    3. using UnityEngine;
    4. using UnityEngine.Networking;
    5. using UnityEngine.Networking.Match;
    6. using EConsole;
    7. using System;
    8. using System.IO;
    9. using System.Reflection;
    10. using SimpleJSON;
    11.  
    12. public class ServerManager : NetworkManager {
    13.  
    14.     private static EConsole.Console theConsole;
    15.  
    16.     /**
    17.      * -1 = quit
    18.      * 0 = connect to console
    19.      * 1 = server start
    20.      * 2 = started
    21.     */
    22.     private static int status = 0;
    23.  
    24.     /** List of registered commands */
    25.     private static List<MethodInfo> commands = new List<MethodInfo>();
    26.  
    27.     private Queue<string> commandsReceived = new Queue<string>();
    28.     private object commandLock = new object();
    29.  
    30.     public static ServerManager smSingleton;
    31.  
    32.     public void Awake() {
    33.         smSingleton = this;
    34.     }
    35.  
    36.     public void Start() {
    37.         theConsole = new EConsole.Console(Path.Combine(Application.streamingAssetsPath, "Console.exe"), "CD Server Console");
    38.         theConsole.OnRead += OnTextReceived;
    39.         theConsole.OnConnect += OnConsoleConnected;
    40.     }
    41.  
    42.     public void InitServer() {
    43.         LogWarning("Loading Match Data...");
    44.         StartMatchMaker();
    45.         matchMaker.CreateMatch(this.matchName, this.matchSize, true, "", "", "", 0, 0, OnMatchCreated);
    46.     }
    47.  
    48.     public void OnDestroy() {
    49.         theConsole.SetColor(ConsoleColorLayer.Forground, ConsoleColor.Yellow);
    50.         theConsole.CloseConsole();
    51.     }
    52.  
    53.     private void CloseGame() {
    54.         LogError("Closing Application");
    55.         #if UNITY_EDITOR
    56.         UnityEditor.EditorApplication.isPlaying = false;
    57.         #endif
    58.         Application.Quit();
    59.     }
    60.  
    61.     public void Update() {
    62.         if (status == 1) {
    63.             InitServer();
    64.             status = 2;
    65.         }
    66.  
    67.         if ((theConsole.isWaitingForConnection == false && theConsole.isConnected == false) || theConsole.isConsoleOpen == false || status == -1) {
    68.             CloseGame();
    69.         }
    70.            
    71.         if(commandsReceived.Count > 0) {
    72.             string command = commandsReceived.Dequeue();
    73.             Log(command);
    74.             string[] args = command.Split(new char[] {' '});
    75.             bool found = true;
    76.  
    77.             if (args.Length > 0) {
    78.                 foreach (MethodInfo mi in commands) {
    79.                     if (mi.Name.ToLower() == args[0].ToLower()) {
    80.                         mi.Invoke(null, new object[] { smSingleton, args });
    81.                         found = true;
    82.                         break;
    83.                     }
    84.                 }
    85.             }
    86.  
    87.             if(found == false) {
    88.                 LogError("'" + command + "' Is not a command.");
    89.             }
    90.         }
    91.     }
    92.  
    93.     private void OnTextReceived(string par1) {
    94.         lock(commandLock) {
    95.             commandsReceived.Enqueue(par1);
    96.         }
    97.     }
    98.  
    99.     private void OnConsoleConnected() {
    100.         //Load Server Config
    101.         LogFinest("Ello! Initilizing Server.");
    102.         LogWarning("Loading Configs...");
    103.         //TODO Configs
    104.         RegisterCommands();
    105.         status = 1;
    106.     }
    107.  
    108.     private void RegisterCommands() {
    109.         LogWarning("Registering console commands...");
    110.         commands = new List<MethodInfo>();
    111.         Type[] types = Assembly.GetExecutingAssembly().GetTypes();
    112.  
    113.         foreach (Type CMDType in types) {
    114.             MethodInfo[] methods = CMDType.GetMethods();
    115.  
    116.             for (int i = 0; i < methods.Length; i++) {
    117.                 MethodInfo method = methods[i];
    118.  
    119.                 if (method.IsStatic && method.GetCustomAttributes(typeof(ConsoleCommandAttribute), false).Length > 0) {
    120.                     commands.Add(method);
    121.                 }
    122.             }
    123.         }
    124.     }
    125.  
    126.     public void OnMatchCreated(bool par1, string par2, MatchInfo par3) {
    127.         if (par1) {
    128.             StartServer(par3);
    129.             LogFinest("Server Address: " + par3.address + ":" + networkPort);
    130.             LogFinest("Loading Complete!");
    131.             return;
    132.         }
    133.     }
    134.  
    135.     public void DisplayInformation() {
    136.         LogFinest("Information");
    137.         Log("Clients Connected: " + NetworkServer.connections.Count);
    138.         Log("Players: " + numPlayers);
    139.     }
    140.  
    141.     public static void Log(string par1) {
    142.         ConsoleUtility.ColorWriteLine(theConsole, par1);
    143.     }
    144.  
    145.     public static void LogWarning(string par1) {
    146.         ConsoleUtility.ColorWriteLine(theConsole, "#f=Yellow#" + par1);
    147.     }
    148.  
    149.     public static void LogError(string par1) {
    150.         ConsoleUtility.ColorWriteLine(theConsole, "#f=Red#" + par1);
    151.     }
    152.  
    153.     public static void LogFinest(string par1) {
    154.         ConsoleUtility.ColorWriteLine(theConsole, "#f=Green#" + par1);
    155.     }
    156.  
    157.     public static void QuitServer() {
    158.         status = -1;
    159.     }
    160. }
    161.  
     
  28. Deleted User

    Deleted User

    Guest

    Okay, In order to make it work you should have something like:

    Console Master Server => Host server room => Players.

    Room host should send a message to the Master Server with registration info: ServerName, MaxPlayers, MapName, etc. After the host of the room will receive a sucessful result from MasterServer you should call your start room method. Then if somebody have been connected you should send the update information about current player count, that's why you have seen masterClient.UpdateHost(playersCount);

    I could suggest to use this Master Server which is on UNET HLAPI.
    https://forum.unity3d.com/threads/master-server-sample-project.331979/
     
    Last edited by a moderator: Jun 4, 2017
  29. F3RULLO14

    F3RULLO14

    Joined:
    Oct 14, 2013
    Posts:
    57
    Ill take a look, thank you very much :D
     
  30. TokyoDan

    TokyoDan

    Joined:
    Jun 16, 2012
    Posts:
    1,080
    Hi. What asset was that which is like a pre-made console?
     
  31. F3RULLO14

    F3RULLO14

    Joined:
    Oct 14, 2013
    Posts:
    57
    @TokyoDan Its a free asset on the store, just look it up :)
     
  32. TokyoDan

    TokyoDan

    Joined:
    Jun 16, 2012
    Posts:
    1,080
    That gets a lot of hits. "Reported". What? The snide reply?
     
  33. Deleted User

    Deleted User

    Guest

  34. TokyoDan

    TokyoDan

    Joined:
    Jun 16, 2012
    Posts:
    1,080
    I don't see anything that I violated. Also there is "Be friendly and helpful " which neither you nor the OP were to me.
     
    joferjoe likes this.
  35. Deleted User

    Deleted User

    Guest

    you doing a lot of off-topic, we aren't your assistants in questions that aren't concerns that particular topic. You said to the other guy to "stfu", are you ok? Good luck, and stop responding me, thanks.
     
    TokyoDan likes this.
  36. F3RULLO14

    F3RULLO14

    Joined:
    Oct 14, 2013
    Posts:
    57
    Asset store. Search console. I'm not going to give you step by step perfect instructions. Where is the fun in making your own game if all the problems are solved for you.

    @Wobes Thanks for defending me. I'm not reporting him, he's prob just a kid with a short temper.
     
    Deleted User likes this.
  37. zombiegorilla

    zombiegorilla

    Moderator

    Joined:
    May 8, 2012
    Posts:
    9,042
    Keep it civil and polite. I removed obnoxious comments.
     
    Deleted User and F3RULLO14 like this.
  38. TokyoDan

    TokyoDan

    Joined:
    Jun 16, 2012
    Posts:
    1,080
    @F3RULLO14 I apologize for my extreme reaction that started this little argument.

    But you could have just kindly give me the name of the asset. That's what I would have done for someone asking. Look at my posts over the years. I have been very helpful to people. But instead you took your time to respond with a snarky comment. Searching for 'console' returns a lot of assets. Most are not the one that you had success with.

    And yes, I am "a kid with a short temper". A 68-year-old one who has a short temper with people who'd rather give a snide comment then be kind. Why not just NOT answer at all?
     
  39. F3RULLO14

    F3RULLO14

    Joined:
    Oct 14, 2013
    Posts:
    57
    https://www.assetstore.unity3d.com/en/#!/content/49385
    http://prntscr.com/fkp92s
     
    TokyoDan likes this.
  40. TokyoDan

    TokyoDan

    Joined:
    Jun 16, 2012
    Posts:
    1,080
    Thank you very much.
     
  41. Ailrau

    Ailrau

    Joined:
    Feb 5, 2017
    Posts:
    24
  42. Joe-Censored

    Joe-Censored

    Joined:
    Mar 26, 2013
    Posts:
    11,847
    On the original topic, in my dedicated server game I use command line options when starting a server to tell it what kind of server it is and what port it should listen on, but for controlling the server I created a Control Console scene with its own UI that I build as its own separate executable. It connects to the master server via a NetworkServerSimple the master server is running, and issues commands via UNET Messages to the server cluster, and gets various status messages back as to what is going on.
     
    harleydk likes this.
  43. MostHated

    MostHated

    Joined:
    Nov 29, 2015
    Posts:
    1,235
    Yet it's still 3 starts, lol.