Advertisement
Boomsma95

Tutorial Script: Multiplayermanager

Mar 26th, 2013
2,640
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 6.98 KB | None | 0 0
  1. using UnityEngine;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4.  
  5. public class MultiplayerManager : MonoBehaviour
  6. {
  7.     public static MultiplayerManager instance;
  8.     public GUIManager guiManager;
  9.  
  10.     public GameObject PlayerManagerPrefab;
  11.  
  12.     public string PlayerName;
  13.  
  14.     private string MatchName = "";
  15.     private string MatchPassword = "";
  16.     private int MatchMaxUsers = 32;
  17.  
  18.     public List<MPPlayer> PlayerList = new List<MPPlayer>();
  19.     public List<MapSetting> MapList = new List<MapSetting>();
  20.  
  21.     public MapSetting CurrentMap = null;
  22.     public int oldprefix;
  23.     public bool IsMatchStarted = false;
  24.  
  25.     //General Multiplayer Modes
  26.     public bool MatchLoaded;
  27.     public MPPlayer MyPlayer;
  28.     public GameObject[] Spawnpoints;
  29.  
  30.     void Start()
  31.     {
  32.         instance = this;
  33.         PlayerName = PlayerPrefs.GetString("PlayerName");
  34.         CurrentMap = MapList[0];
  35.         DontDestroyOnLoad(gameObject);
  36.     }
  37.  
  38.     void FixedUpdate()
  39.     {
  40.         instance = this;
  41.     }
  42.  
  43.     public void StartServer(string servername, string serverpassword, int maxusers)
  44.     {
  45.         MatchName = servername;
  46.         MatchPassword = serverpassword;
  47.         MatchMaxUsers = maxusers;
  48.         Network.InitializeServer(MatchMaxUsers, 2550, false);
  49.         MasterServer.RegisterHost("DeathMatch", MatchName, "");
  50.         //Network.InitializeSecurity();
  51.     }
  52.  
  53.     void OnServerInitialized()
  54.     {
  55.         Server_PlayerJoinRequest(PlayerName, Network.player);
  56.     }
  57.  
  58.     void OnConnectedToServer()
  59.     {
  60.         networkView.RPC("Server_PlayerJoinRequest", RPCMode.Server, PlayerName, Network.player);
  61.     }
  62.  
  63.     void OnPlayerDisconnected(NetworkPlayer id)
  64.     {
  65.         networkView.RPC("Client_RemovePlayer", RPCMode.All, id);
  66.     }
  67.  
  68.     void OnPlayerConnected(NetworkPlayer player)
  69.     {
  70.         foreach(MPPlayer pl in PlayerList)
  71.         {
  72.             networkView.RPC("Client_AddPlayerToList", player, pl.PlayerName, pl.PlayerNetwork);
  73.         }
  74.         networkView.RPC("Client_GetMultiplayerMatchSettings", player, CurrentMap.MapName, "", "");
  75.     }
  76.  
  77.     void OnDisconnectedFromServer()
  78.     {
  79.         PlayerList.Clear();
  80.     }
  81.  
  82.     [RPC]
  83.     void Server_PlayerJoinRequest(string playername, NetworkPlayer view)
  84.     {
  85.         networkView.RPC("Client_AddPlayerToList", RPCMode.All, playername, view);
  86.     }
  87.  
  88.     [RPC]
  89.     void Client_AddPlayerToList(string playername, NetworkPlayer view)
  90.     {
  91.         MPPlayer tempplayer = new MPPlayer();
  92.         tempplayer.PlayerName = playername;
  93.         tempplayer.PlayerNetwork = view;
  94.         PlayerList.Add(tempplayer);
  95.         if (Network.player == view)
  96.         {
  97.             MyPlayer = tempplayer;
  98.             GameObject play = Network.Instantiate(PlayerManagerPrefab, Vector3.zero, Quaternion.identity, 5) as GameObject;
  99.             //play.GetComponent<PlayerManager>().thisplayer = MyPlayer; //Remove This Part
  100.         }
  101.     }
  102.  
  103.     [RPC]
  104.     void Client_RemovePlayer(NetworkPlayer view)
  105.     {
  106.         MPPlayer temppl = null;
  107.         foreach(MPPlayer pl in PlayerList)
  108.         {
  109.             if (pl.PlayerNetwork == view)
  110.             {
  111.                 temppl = pl;
  112.             }
  113.         }
  114.         if (temppl != null)
  115.         {
  116.             PlayerList.Remove(temppl);
  117.         }
  118.     }
  119.  
  120.     [RPC]
  121.     void Client_GetMultiplayerMatchSettings(string map, string mode, string others)
  122.     {
  123.         CurrentMap = GetMap(map);
  124.     }
  125.  
  126.     public MapSetting GetMap(string name)
  127.     {
  128.         MapSetting get = null;
  129.  
  130.         foreach (MapSetting st in MapList)
  131.         {
  132.             if (st.MapName == name)
  133.             {
  134.                 get = st;
  135.                 break;
  136.             }
  137.         }
  138.  
  139.         return get;
  140.     }
  141.  
  142.     [RPC]
  143.     void Client_LoadMultiplayerMap(string map, int prefix)
  144.     {
  145.         //Network.SetLevelPrefix(prefix);
  146.         Application.LoadLevel(map);
  147.     }
  148.  
  149.     void OnGUI()
  150.     {
  151.         if (!MyPlayer.PlayerIsAlive && IsMatchStarted)
  152.             SpawnMenu();
  153.         if (IsMatchStarted && Input.GetKey(KeyCode.Tab))
  154.         {
  155.             guiManager.ScoreBoard();
  156.         }
  157.     }
  158.  
  159.     [RPC]
  160.     void Server_SpawnPlayer(NetworkPlayer player)
  161.     {
  162.         int numberspawn = Random.Range(0, Spawnpoints.Length - 1);
  163.         networkView.RPC("Client_SpawnPlayer", RPCMode.All, player, Spawnpoints[numberspawn].transform.position + new Vector3(0, 2, 0), Spawnpoints[numberspawn].transform.rotation);
  164.     }
  165.  
  166.     [RPC]
  167.     void Client_SpawnPlayer(NetworkPlayer player, Vector3 position, Quaternion rotation)
  168.     {
  169.         MultiplayerManager.GetMPPlayer(player).PlayerIsAlive = true;
  170.         MultiplayerManager.GetMPPlayer(player).PlayerHealth = 100;
  171.         if (player == MyPlayer.PlayerNetwork)
  172.         {
  173.             MyPlayer.PlayerManager.ControllerTransform.position = position;
  174.             MyPlayer.PlayerManager.ControllerTransform.rotation = rotation;
  175.             MyPlayer.PlayerManager.networkView.RPC("Client_PlayerAlive", RPCMode.All);
  176.         }
  177.         else
  178.         {
  179.  
  180.         }
  181.     }
  182.  
  183.     void OnLevelWasLoaded()
  184.     {
  185.         if (Application.loadedLevelName == CurrentMap.MapLoadName && Network.isServer)
  186.         {
  187.             MatchLoaded = true;
  188.             Spawnpoints = GameObject.FindGameObjectsWithTag("spawnpoint");
  189.             networkView.RPC("Client_ServerLoaded", RPCMode.AllBuffered, IsMatchStarted);//Add parameter for boolean IsMatchStarted
  190.         }
  191.     }
  192.  
  193.     [RPC]
  194.     void Client_ServerLoaded(bool started)//Add parameter for boolean IsMatchStarted
  195.     {
  196.         MatchLoaded = true;
  197.         IsMatchStarted = started;
  198.     }
  199.  
  200.     public static MPPlayer GetMPPlayer(NetworkPlayer player)
  201.     {
  202.         foreach (MPPlayer play in MultiplayerManager.instance.PlayerList)
  203.         {
  204.             if (play.PlayerNetwork == player)
  205.             {
  206.                 return play;
  207.             }
  208.         }
  209.         return null;
  210.     }
  211.  
  212.     //Deathmatch
  213.     void SpawnMenu()
  214.     {
  215.         if (GUI.Button(new Rect(5, Screen.height - 40, 250, 35), "Spawn"))
  216.         {
  217.             if (Network.isServer)
  218.                 Server_SpawnPlayer(Network.player);
  219.             else
  220.                 networkView.RPC("Server_SpawnPlayer", RPCMode.Server, Network.player);
  221.         }
  222.     }
  223.  
  224.     [RPC]
  225.     public void Client_UpdatePlayerHealthAndAlive(NetworkPlayer targetplayer, bool IsAlive, int CurrentHealth)
  226.     {
  227.         MPPlayer player = MultiplayerManager.GetMPPlayer(targetplayer);
  228.         player.PlayerIsAlive = IsAlive;
  229.         player.PlayerHealth = CurrentHealth;
  230.     }
  231. }
  232.  
  233. [System.Serializable]
  234. public class MPPlayer
  235. {
  236.     public string PlayerName = "";
  237.     public NetworkPlayer PlayerNetwork;
  238.     public PlayerManager PlayerManager;
  239.     public int PlayerHealth = 100;
  240.     public bool PlayerIsAlive;
  241.     public int PlayerScore;
  242.     public int PlayerKills;
  243.     public int PlayerDeahts;
  244. }
  245.  
  246. [System.Serializable]
  247. public class MapSetting
  248. {
  249.     public string MapName;
  250.     public string MapLoadName;
  251.     public Texture MapLoadTexture;
  252. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement