Beispiel #1
0
    /// <summary>
    /// Erstellt einen Spielcharakter, den ein Client mit Voreinstellungen angefragt hat. Nach der Erstellung wird alle Clients
    /// der neue Spieler mitgeteilt.
    /// (INFO: Die Methode wird in der Serverinstanz aufgerufen, wenn Client einen Spielcharakter erstellen bzw. haben moechte.)
    /// </summary>
    /// <param name="conn">Verbindung zum Client, der die Anfrage gesendet hat.</param>
    /// <param name="playerControllerId">ID des Spielers, der in Vebindung zum Objekt steht.</param>
    /// <param name="extraMessageReader">Voreinstellungen.</param>
    public override void OnServerAddPlayer(NetworkConnection conn, short playerControllerId, NetworkReader extraMessageReader)
    {
        // Lasse keinen Client mitspielen, wenn Match zu ende
        if (gameOver)
        {
            conn.Disconnect();
            return;
        }

        // Lese Voreinstellungen aus der ersten Szene und erstelle daraus den angefragten Charakter
        SettingsNetworkMessage message = extraMessageReader.ReadMessage <SettingsNetworkMessage>();
        GameObject             player  = Instantiate(Resources.Load("playable_chars/" + message.character, typeof(GameObject))) as GameObject;

        // Schreibe Matchdaten in die lokale Konfiguration, die der Client an seine Duplikate verteilt
        player.transform.GetComponent <PlayerConfig> ().SetPlayerData(matchData.AddPlayer(conn.connectionId, message.playerName));
        NetworkServer.AddPlayerForConnection(conn, player, playerControllerId);

        // Sende diesbezueglich globale Nachricht (aktuelle Anzahl der Spieler)
        GlobalMatchEventMessage gmem = new GlobalMatchEventMessage();

        if (NetworkServer.connections.Count == (maxConnections + 1))
        {
            gmem.message   = NetworkServer.connections.Count + " / " + (maxConnections + 1) + " Spieler on";
            gmem.gameState = true;
        }
        else
        {
            gmem.message = NetworkServer.connections.Count + " / " + (maxConnections + 1) + " Spieler on";
        }

        NetworkServer.SendToAll(9999, gmem);
    }
Beispiel #2
0
    /// <summary>
    /// Entfernt einen Client aus Matchdaten, sobald dieser die Verbindung abbricht. Nach der
    /// Entfernung wird weiteren Spielern die neue Spielerzahl mitgeteilt.
    /// (INFO: Die Methode wird in der Serverinstanz aufgerufen, wenn Verbindung zum Client abbricht.)
    /// </summary>
    /// <param name="conn">Verbindung zum Client.</param>
    public override void OnServerDisconnect(NetworkConnection conn)
    {
        matchData.RemovePlayer(conn.connectionId);
        base.OnServerDisconnect(conn);

        // Sende diesbezueglich globale Nachricht
        GlobalMatchEventMessage gmem = new GlobalMatchEventMessage();

        gmem.message = (NetworkServer.connections.Count - 1) + " / " + (maxConnections + 1) + " Spieler on";
        NetworkServer.SendToAll(9999, gmem);
    }
Beispiel #3
0
    /// <summary>
    /// Aktuallisiert die Lebenspunkte, nachdem die Variable ([SyncVar] life) den
    /// Zustand aendert.
    /// </summary>
    /// <param name="life">Aktuelle lebenspunkte.</param>
    private void UpdateLifeState(float life)
    {
        info.SetHealthBarValue(life);

        if (life < 1)
        {
            // Wenn Ziel eine Basis, dann Sende diesbezueglich globale Nachricht
            // (Event: Matchende)
            if (transform.name.Contains("base"))
            {
                GlobalMatchEventMessage gmem = new GlobalMatchEventMessage();
                gmem.gameState = false;
                NetworkServer.SendToAll(9999, gmem);
            }

            Destroy(gameObject);
        }
    }
Beispiel #4
0
    /// <summary>
    /// Verarbeitet globale Netzwerknachrichten vor dem Start einer Spielrunde.
    /// </summary>
    /// <param name="message">Globale Netzwerknachricht.</param>
    private void OnGlobalMatchEvent(NetworkMessage message)
    {
        GlobalMatchEventMessage gmem = message.ReadMessage <GlobalMatchEventMessage> ();

        // Spieler vollzaehlig
        if (isLocalPlayer && gmem.gameState)
        {
            // Erzeuge dynamische NPCs
            if (isServer)
            {
                GameObject.Find("NPCManager").GetComponent <NPCManager>().CreateNPCs();
            }

            // Entferne Begrenzung, damit Einheiten durchlaufen und sich gegenseitig angreifen koennen
            Destroy(GameObject.Find("block"));

            // Aktiviere Inventra bzw. Shop
            SetUpPlayerInventar();
        }

        // Schreibe aktuelle Anzahl der Spieler, die dem Match beigetreten sind
        GameObject.Find("txt_player_num").GetComponent <Text> ().text = gmem.message;
    }