Need help with network lobby script

Hi
I have followed a tutorial on how too make a fps game into multiplayer.
Here is 2 scripts, the first is the lobby, and the second is about networking.
I get 0 errors but some functions are not working.

  1. the button “save name” is not showing up.
  2. The list off matches too join dont show at all.
  3. in the tutorial, im supposed to build two games, and its supposed to show that 2 players are in the same “match room”, if joined and excisting match.
  4. Im also not able too choose player name, and that is supposed to work.

So i attatch the MenuManager too the main camera, and the MultiplayerManager too a empty game object called the same, With also a networkview Component.

So are the anyone here that can help me out, see what wrong in the scripts? I have gone through the same tutorial for hours, for looking for errors, or something miss spelled. If someone could help me find out what is typed wrong i would really appreciate it.
I dont get errors in the console, only the functions mentioned above, work in the tutorial but not for me.

The lobby Menu script

using UnityEngine;
using System.Collections;

public class MenuManager : MonoBehaviour 
{
	public string CurrentMenu;

	public string MatchName = "";
	public string MatchPassword = "";
	public int MatchMaxPlayers = 32;

	private Vector2 ScrollLobby = Vector2.zero;


	void Start()
	{
		CurrentMenu = "Main";
		MatchName = "Choose Match Name " + Random.Range(0, 5000);
	}
	void OnGUI()
	{
		if (CurrentMenu == "Main") 
			Menu_Main(); 
		if (CurrentMenu == "Lobby")
		    Menu_Lobby();
		if (CurrentMenu == "Host")
		    Menu_HostGame();
}
		    public void NavigateTo(string nextmenu)
		    {
			CurrentMenu = nextmenu;
		    }

	 private void Menu_Main()
	 {
		if (GUI.Button(new Rect(10, 10, 200, 50), "Host Game"))
			{
				NavigateTo("Host");
		    }
		if (GUI.Button(new Rect(10, 70, 200, 50), "Refresh"))
		{
			MasterServer.RequestHostList("DeathMatch");
		}

		GUI.Label(new Rect(220, 10, 130, 30), "Player Name");
		MultiplayerManager.instance.PlayerName = GUI.TextField(new Rect(350, 10, 150, 30), MultiplayerManager.instance.PlayerName);
        if (GUI.Button(new Rect(510, 10, 100, 30), "Save Name")) 
		{
		   PlayerPrefs.SetString("PlayerName", MultiplayerManager.instance.PlayerName);
	    }

		GUILayout.BeginArea(new Rect(Screen.width - 400, 0, 400, Screen.height), "server list", "box");
		GUILayout.Space(20);
		foreach (HostData match in MasterServer.PollHostList())
		{
			GUILayout.BeginHorizontal("Box");  

			GUILayout.Label(match.gameName);
			if (GUILayout.Button("Connect"))
			{
				Network.Connect(match);
			}
			GUILayout.EndHorizontal();
		}

		GUILayout.EndArea();
       }


	private void Menu_HostGame()
	{
		//Buttons Host Game 
        if (GUI.Button(new Rect(10, 10, 200, 50), "Back"))
		{
				NavigateTo("Main");
		}

		if (GUI.Button(new Rect(10, 60, 200, 50), "Start Server"))
		{
			MultiplayerManager.instance.StartServer(MatchName, MatchPassword, MatchMaxPlayers);

	    }

		GUI.Label(new Rect(220, 10, 130, 30), "Match Name");
		MatchName = GUI.TextField(new Rect(400, 10, 200, 30), MatchName);

		GUI.Label(new Rect(220, 50, 130, 30), "Match Password");
		MatchPassword = GUI.PasswordField(new Rect(400, 50, 200, 30), MatchPassword, '*');

		GUI.Label(new Rect(220, 90, 130, 30), "Match Max Players");
		GUI.Label(new Rect(400, 90, 200, 30), MatchMaxPlayers.ToString());
		MatchMaxPlayers = Mathf.Clamp(MatchMaxPlayers, 8, 32);

		if (GUI.Button(new Rect(425, 90, 25, 30), "+"))
			MatchMaxPlayers += 2;
		if (GUI.Button(new Rect(450, 90, 25, 30), "-"))
			MatchMaxPlayers -= 2;

	}

		private void Menu_Lobby()
		{
		ScrollLobby = GUILayout.BeginScrollView(ScrollLobby, GUILayout.MaxWidth(200));

		foreach (MPPlayer p1 in MultiplayerManager.instance.PlayerList)
		{
			GUILayout.Box(p1.PlayerName);
		}

		GUILayout.EndScrollView();
	}

	void OnServerInitialized()
	{
		NavigateTo("Lobby");
	}

	void OnConnectedToServer()
	{
		NavigateTo("Lobby");
	}
}

Here is the MultiplayerManager script

using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public class MultiplayerManager : MonoBehaviour 
{
	public static MultiplayerManager instance;

	public string PlayerName;

	private string MatchName = "";
	private string MatchPassword = "";
	private int MatchMaxUsers = 32;

	public List<MPPlayer> PlayerList = new List<MPPlayer>();

	void start()
	{
		instance = this;
		PlayerName = PlayerPrefs.GetString("PlayerName");
	}

	public void StartServer(string servername, string serverpassword, int maxusers)
	{
		MatchName = servername;
		MatchPassword = serverpassword;
		MatchMaxUsers = maxusers;
		Network.InitializeServer(MatchMaxUsers, 2550, false);
		MasterServer.RegisterHost("DeathMatch", MatchName, "");
		//Network.InitializeSecurity();
	}
	void OnServerInitialized()
	{
		Server_PlayerJoinRequest(PlayerName, Network.player);
	}

	void OnConnectedToServer()
	{
		networkView.RPC("Server_PlayerJoinRequest", RPCMode.Server, PlayerName, Network.player);
    }

	void OnPlayerDisconnected(NetworkPlayer id)
	{
		networkView.RPC("Client_RemovePlayer", RPCMode.All, id);
	}  

	[RPC]
	void Server_PlayerJoinRequest(string playername, NetworkPlayer view)
	{
		networkView.RPC("Client_AddPlayerToList", RPCMode.All, playername, view);
	}

	[RPC]
	void Client_AddPlayerToList(string playername, NetworkPlayer view)
	{
		MPPlayer tempplayer = new MPPlayer();
		tempplayer.PlayerName = playername;
		tempplayer.PlayerNetwork = view;
		PlayerList.Add(tempplayer);
	}

	[RPC]
	void Client_RemovePlayer(NetworkPlayer view)
	{
		MPPlayer temppl = null;
		foreach(MPPlayer p1 in PlayerList)
		{
			if (p1.PlayerNetwork == view)
			{ 
				temppl = p1;                 
			}
		}
		if (temppl != null) {                                
			PlayerList.Remove(temppl);                                                                          
		}
	}
}

Here’s some help for finding hosted games:

when you call MasterServer.RequestHostList(“DeathMatch”); you can get the host list by this:

	private HostData[] hostList;

	void OnMasterServerEvent(MasterServerEvent msEvent)
	{
		if (msEvent == MasterServerEvent.HostListReceived) {
			hostList = MasterServer.PollHostList();
			StateHandler.changeState(StateHandler.mainMenuState);
		}
	}

joining games:

//   instead of using "foreach (HostData match in MasterServer.PollHostList())", try the stuff below:
if (hostList != null)
				{
					GUI.color = Color.gray;
					GUI.Label(new Rect(450, 80, 100, 30), "Game name");
					GUI.Label(new Rect(550, 80, 100, 30), "Description");
					GUI.color = Color.white;
					
					for (int i = 0; i < hostList.Length; i++)
					{
						if (GUI.Button(new Rect(350, 100 + (60 * i), 80, 50), "Join")) {
							JoinServer(hostList[i]);
						}
						GUI.Label(new Rect(450, 100 + (60 * i), 100, 50), hostList[i].gameName);
						GUI.Label(new Rect(550, 100 + (60 * i), 100, 50), hostList[i].comment);
						
					}
					if (hostList.Length == 0) {
						GUI.Label(new Rect(450,130,300,100), "(no servers)");
					}
				}

and not sure about “save name” thing, you are sure that there’s at least 550 pixels on your screen? Just making sure. :slight_smile:

Thx for the fast reply :slight_smile: my screen is a LG moniter, at max im using 1920x1080 60hz, that i use on everything , if it is possible that has anything too say
If it has maybe that explains why the serverlist is not showing on my screen and the save name button is not on my screen either.

I appreciate Your example, i will try too make it work.
But im still hopeing for some help With finding out how too make the originale script too work. Cause im following that tutorial and it is many episodes doing part for part

after some testing i get this error

NullReferenceException: Object reference not set to an instance of an object
MenuManager.Menu_Main () (at Assets/Scripts/MenuManager.cs:46)
MenuManager.OnGUI () (at Assets/Scripts/MenuManager.cs:23)

This is line 46

MultiplayerManager.instance.PlayerName = GUI.TextField(new Rect(350, 10, 150, 30), MultiplayerManager.instance.PlayerName);

this is line 23
Menu_Main();

everything is exact same as i posted in the scripts above, I know there is something im not seeing… Appreciate any help

Bump