/// <summary>
        ///     Called when the local player joins the lobby.
        /// </summary>
        /// <param name="connection"></param>
        private void OnLobbyLocalPeerConnected(SteamConnection connection)
        {
            network.LocalConnection = connection;
            network.MaxPlayers      = SteamMatchmaking.GetLobbyMemberLimit(connection.LobbyID);
            network.OnSetDefaultLobbyMemberData(connection);

            // Get Lobby Member Data
            int numMembers = SteamMatchmaking.GetNumLobbyMembers(connection.LobbyID);

            for (int i = 0; i < numMembers; i++)
            {
                CSteamID id = SteamMatchmaking.GetLobbyMemberByIndex(connection.LobbyID, i);
                if (id == connection.SteamID)
                {
                    continue;
                }
                connection.AddConnection(id);
            }

            //GetModule<AuthModule>().BeginAuthentication(authenticationLevel);
            if (connection.IsHost)
            {
                HostSetup?.Invoke(connection);
            }
            else
            {
                ClientSetup?.Invoke(connection);
            }

            connection.IsConnected = true;
        }
Beispiel #2
0
    void SpawnPlayer(NetworkConnection conn)
    {
        Debug.Log("trying to add player");
        GameObject player = (GameObject)Instantiate(playerPrefab, new Vector3(0f, 1.001f, 0f), Quaternion.identity);

        NetworkServer.AddPlayerForConnection(conn, player);
        Debug.Log("player spawned");
        int highestId = 0;

        foreach (GameObject obj in GameObject.FindGameObjectsWithTag("Player"))
        {
            if (obj.GetComponent <BasePlayer> ().id > highestId)
            {
                highestId = obj.GetComponent <BasePlayer> ().id;
            }
        }
        player.GetComponent <BasePlayer> ().id = highestId + 1;
        //Steam id of person who just joined
        CSteamID steamId = SteamMatchmaking.GetLobbyMemberByIndex(SteamLobby.lobbyId, numPlayers - 1);
        //Get Component of that player
        var playerInfo = conn.identity.GetComponent <PlayerInfo> ();

        //Set the steam id ulong
        playerInfo.SetSteamId(steamId.m_SteamID);
    }
Beispiel #3
0
 bool ExpectingClient(CSteamID id)
 {
     if (Config == null || currentLobbyId == CSteamID.Nil)
     {
         return(false);
     }
     if (Config.Type == NetworkInterfaceType.Client)
     {
         // Only allow the lobby owner (the host/server) to connect to you if you are a client
         return(lobbyOwner == id);
     }
     else
     {
         // Allow any user in the lobby to connect to the server
         var playerCount = SteamMatchmaking.GetNumLobbyMembers(currentLobbyId);
         for (var i = 0; i < playerCount; i++)
         {
             if (SteamMatchmaking.GetLobbyMemberByIndex(currentLobbyId, i) == id)
             {
                 return(true);
             }
         }
         return(false);
     }
 }
    // Update is called once per frame
    void OnGUI()
    {
        SteamAPI.RunCallbacks();

        if (GUI.Button(new Rect(120, 20, 140, 20), "Create Lobby"))
        {
            print("Create lobby");
            SteamAPICall_t host = SteamMatchmaking.CreateLobby(ELobbyType.k_ELobbyTypePublic, 4);
        }
        if (GUI.Button(new Rect(120, 20, 280, 20), "lobbies list"))
        {
            print("list lobbies");
            SteamAPICall_t getList = SteamMatchmaking.RequestLobbyList();
        }
        if (GUI.Button(new Rect(120, 20, 420, 20), "change first lobby"))
        {
            print("change first lobby");
            SteamAPICall_t joinLobby = SteamMatchmaking.JoinLobby(SteamMatchmaking.GetLobbyByIndex(0));
        }
        if (GUI.Button(new Rect(120, 20, 560, 20), "Num Players"))
        {
            int numPlayers = SteamMatchmaking.GetNumLobbyMembers((CSteamID)currentID);
            print("Number of players" + numPlayers);
            for (int i = 0; i < numPlayers; i++)
            {
                print("\t Player(" + i + ")==" + SteamFriends.GetFriendPersonaName(SteamMatchmaking.GetLobbyMemberByIndex((CSteamID)currentID, i)));
            }
        }
    }
        // Event Handlers

        void OnP2PSessionRequest(P2PSessionRequest_t evt)
        {
            var myId     = SteamUser.GetSteamID();
            var remoteId = evt.m_steamIDRemote;

            foreach (var lobbyId in _connectedLobbies.Keys)
            {
                var  count     = SteamMatchmaking.GetNumLobbyMembers(lobbyId);
                bool hasMe     = false;
                bool hasRemote = false;
                for (var i = 0; i < count; i++)
                {
                    var memberId = SteamMatchmaking.GetLobbyMemberByIndex(lobbyId, i);
                    hasMe     |= memberId == myId;
                    hasRemote |= memberId == remoteId;
                }
                if (hasMe && hasRemote)
                {
                    Assert.IsTrue(SteamNetworking.AcceptP2PSessionWithUser(remoteId));
                    Debug.Log($"[Steam] Established connection with {remoteId}");
                    return;
                }
            }
            // Did not find a matching lobby close the session.
            Debug.LogError($"[Steam] Unexpected connection with {remoteId}");
            Assert.IsTrue(SteamNetworking.CloseP2PSessionWithUser(remoteId));
        }
        public void LobbyEntered(LobbyEnter_t enterLobby)
        {
            connectedPlayers.Clear();
            otherPlayers.Clear();

            lobbyID = (CSteamID)enterLobby.m_ulSteamIDLobby;
            int playerCount = SteamMatchmaking.GetNumLobbyMembers(lobbyID);

            MultiplayerChat.chatStrings.Add("Entered Lobby!");

            //Send packets to all players, to establish P2P connections with them
            if (playerCount > 1)
            {
                for (int i = 0; i < playerCount; i++)
                {
                    CSteamID lobbyMember = SteamMatchmaking.GetLobbyMemberByIndex(lobbyID, i);
                    SteamNetworking.SendP2PPacket(lobbyMember, new byte[] { 255 }, 1, EP2PSend.k_EP2PSendReliable, 0);
                    connectedPlayers.Add(lobbyMember.m_SteamID);

                    if (lobbyMember != SteamUser.GetSteamID())
                    {
                        otherPlayers.Add(lobbyMember.m_SteamID);
                    }
                }
            }

            //Set up network data
            NetworkGameManager.managerID = ulong.Parse(SteamMatchmaking.GetLobbyData(lobbyID, MANAGER_ID));
            NetworkGameManager.playerID  = SteamUser.GetSteamID().m_SteamID;

            connectedPlayers.Add(SteamUser.GetSteamID().m_SteamID);

            MultiplayerChat.chatStrings.Add("This game's manager is " + SteamFriends.GetFriendPersonaName((CSteamID)NetworkGameManager.managerID));
            isInGame = true;
        }
Beispiel #7
0
    void InitLobby(CSteamID id)
    {
        lobby.LobbyID = id;
        if (Users == null)
        {
            lobby.Users = new List <User>();
        }
        else
        {
            Users.Clear();
        }

        int num = SteamMatchmaking.GetNumLobbyMembers(lobby.LobbyID);

        for (int i = 0; i < num; i++)
        {
            CSteamID userID = SteamMatchmaking.GetLobbyMemberByIndex(lobby.LobbyID, i);
            lobby.Users.Add(new User(userID));
        }
        SendPacketToLobby(new byte[] { }, PacketType.Test, EP2PSend.k_EP2PSendReliable, false);

#if UNITY_EDITOR
        Debug.Log("Num members in the lobby: " + num);
        Debug.Log("My steam ID: " + MyID.ToString());
#endif

        if (OnLobbyInitializationEvent != null)
        {
            OnLobbyInitializationEvent.Invoke();
        }
    }
Beispiel #8
0
    void SetBasic()
    {
        int Mcount = SteamMatchmaking.GetNumLobbyMembers(Sender.roomid);

        ULS.CreateDs(Mcount);
        for (int i = 0; i < Mcount; i++)
        {
            ULS.UDs[i].GetComponent <UserDetailScript>().HomeWork(SteamMatchmaking.GetLobbyMemberByIndex(Sender.roomid, i));
        }
        PlayersJoined.text = Mcount + " players joined";
        Roomname.text      = SteamMatchmaking.GetLobbyData(Sender.roomid, "name");
        if (SteamMatchmaking.GetLobbyOwner(Sender.roomid) == SteamUser.GetSteamID())
        {
            MPanel.SetActive(true);
        }
        else
        {
            MPanel.SetActive(false);
        }
        DataShowScript[] dss = GetComponentsInChildren <DataShowScript>(DPanel);
        foreach (DataShowScript d in dss)
        {
            d.GetMyData();
        }
        //if (Mcount == 2) GameStart();
    }
Beispiel #9
0
    void InitLobby(CSteamID id)
    {
        lobby.LobbyID = id;
        if (Users == null)
        {
            lobby.Users = new List <User>();
        }
        else
        {
            Users.Clear();
        }

        int num = SteamMatchmaking.GetNumLobbyMembers(lobby.LobbyID);

        for (int i = 0; i < num; i++)
        {
            CSteamID userID = SteamMatchmaking.GetLobbyMemberByIndex(lobby.LobbyID, i);
            lobby.Users.Add(new User(userID));
        }

        SendPacketToLobby(emptyArray, 0, 0, PacketType.Test, EP2PSend.k_EP2PSendReliable, false);


        if (OnLobbyInitializationEvent)
        {
            OnLobbyInitializationEvent.Raise();
        }
    }
Beispiel #10
0
    void GameStart(int r)
    {
        //NetWriter.rs = r;
        //准备SkillCode交错数组
        Readytoggle.interactable = false;
        SenderSC.PrepareTemp(r, (int)SkillCode.SelfExplodeScript);
        //设置clientNum
        CSteamID tid;

        Sender.TOmb = new CSteamID[r];
        for (int i = 0; i < r; i++)
        {
            tid            = SteamMatchmaking.GetLobbyMemberByIndex(Sender.roomid, i);
            Sender.TOmb[i] = tid;
            if (tid == SteamUser.GetSteamID())
            {
                Sender.clientNum = i;
            }
        }
        SenderPanel.SetActive(true);
        CVS2.SetActive(true);
        SenderSC.SendHello(3);
        if (SteamMatchmaking.GetLobbyOwner(Sender.roomid) == SteamUser.GetSteamID())
        {
            Startbutton.gameObject.SetActive(true);
        }
    }
Beispiel #11
0
    void OnLobbyEnter(LobbyEnter_t cb)
    {
        INetworkIdentity id = GameObject.Instantiate(voiceUserPrefab.gameObject).GetComponent <INetworkIdentity>();

        id.IsLocalPlayer = true;
        id.NetworkId     = self.m_SteamID;

        if ((EChatRoomEnterResponse)cb.m_EChatRoomEnterResponse == EChatRoomEnterResponse.k_EChatRoomEnterResponseSuccess)
        {
            CSteamID lobbyId = new CSteamID(cb.m_ulSteamIDLobby);
            int      n       = SteamMatchmaking.GetNumLobbyMembers(lobbyId);

            for (int i = 0; i < n; i++)
            {
                CSteamID client = SteamMatchmaking.GetLobbyMemberByIndex(lobbyId, i);
                if (client.m_SteamID != self.m_SteamID)
                {
                    others.Add(client.m_SteamID, client);
                    id = GameObject.Instantiate(voiceUserPrefab.gameObject).GetComponent <INetworkIdentity>();
                    id.IsLocalPlayer = false;
                    id.NetworkId     = client.m_SteamID;
                }
            }
        }
    }
        public void LobbyEntered(LobbyEnter_t enterLobby)
        {
            connectedPlayers.Clear();
            otherPlayers.Clear();
            ResetManagers();
            {
                if (!(RainWorldHK.mainRW.processManager.currentMainLoop is SteamMultiplayerMenu))
                {
                    ProcessManagerHK.ImmediateSwitchCustom(RainWorldHK.mainRW.processManager, new SteamMultiplayerMenu(RainWorldHK.mainRW.processManager));
                }
            }

            joining = false;
            lobbyID = (CSteamID)enterLobby.m_ulSteamIDLobby;
            int playerCount = SteamMatchmaking.GetNumLobbyMembers((CSteamID)enterLobby.m_ulSteamIDLobby);

            MultiplayerChat.AddChat("Entered Lobby!");

            //Send packets to all players, to establish P2P connections with them
            if (playerCount > 1)
            {
                for (int i = 0; i < playerCount; i++)
                {
                    CSteamID lobbyMember = SteamMatchmaking.GetLobbyMemberByIndex(lobbyID, i);
                    SteamNetworking.SendP2PPacket(lobbyMember, new byte[] { 255 }, 1, EP2PSend.k_EP2PSendReliable, 0);
                    SteamNetworking.SendP2PPacket(lobbyMember, new byte[] { 255 }, 1, EP2PSend.k_EP2PSendReliable, 1);
                    SteamNetworking.SendP2PPacket(lobbyMember, new byte[] { 255 }, 1, EP2PSend.k_EP2PSendReliable, 2);
                    if (!connectedPlayers.Contains(lobbyMember.m_SteamID))
                    {
                        connectedPlayers.Add(lobbyMember.m_SteamID);
                        PlayerJoinedManagers(lobbyMember.m_SteamID);
                    }
                    if (lobbyMember != SteamUser.GetSteamID())
                    {
                        otherPlayers.Add(lobbyMember.m_SteamID);
                    }
                }
            }

            //Set up network data
            NetworkGameManager.managerID = ulong.Parse(SteamMatchmaking.GetLobbyData(lobbyID, MANAGER_ID));
            NetworkGameManager.playerID  = SteamUser.GetSteamID().m_SteamID;
            if (NetworkGameManager.managerID != NetworkGameManager.playerID)
            {
                lobbyInfo = new LobbyInfo((CSteamID)enterLobby.m_ulSteamIDLobby);
                lobbyInfo.UpdateLobbyInfo((CSteamID)enterLobby.m_ulSteamIDLobby);
                lobbyInfo.owner = new CSteamID(NetworkGameManager.managerID);
            }

            if (!connectedPlayers.Contains(SteamUser.GetSteamID().m_SteamID))
            {
                connectedPlayers.Add(SteamUser.GetSteamID().m_SteamID);
                PlayerJoinedManagers(SteamUser.GetSteamID().m_SteamID);
            }

            MultiplayerChat.AddChat("This game's manager is " + SteamFriends.GetFriendPersonaName((CSteamID)NetworkGameManager.managerID));
            isInGame = true;
            Log("Entered Lobby! \nThis game's manager is " + SteamFriends.GetFriendPersonaName((CSteamID)NetworkGameManager.managerID));
        }
 public static void CreateConnections(CSteamID lobby)
 {
     for (var i = 0; i < SteamMatchmaking.GetNumLobbyMembers(lobby); i++)
     {
         PlayerList.Add(SteamMatchmaking.GetLobbyMemberByIndex(lobby, i));
         CreateConnection(PlayerList[PlayerList.Count - 1]);
     }
 }
Beispiel #14
0
 void update_lobby_labels()
 {
     for (int i = 0; i < players_in_lobby; i++)
     {
         CSteamID tmpID = SteamMatchmaking.GetLobbyMemberByIndex(lobbyID, i);
         player_labels[i].text = SteamFriends.GetFriendPersonaName(tmpID);
     }
 }
Beispiel #15
0
 public IEnumerable <string> GetMembersData(string key)
 {
     for (int i = 0; i < this.MemberCount; i++)
     {
         CSteamID j = SteamMatchmaking.GetLobbyMemberByIndex(this.Info.LobbyId, i);
         yield return(SteamMatchmaking.GetLobbyMemberData(this.Info.LobbyId, j, key));
     }
     yield break;
 }
Beispiel #16
0
 public unsafe static User GetLobbyMemberAtIndex(Lobby which, int member)
 {
     if (!_initialized)
     {
         return(null);
     }
     return(which != null && member < GetNumLobbyMembers(which) ? null :
            User.GetUser(SteamMatchmaking.GetLobbyMemberByIndex(new CSteamID(which.id), member)));
 }
    public override void OnServerAddPlayer(NetworkConnection conn)
    {
        base.OnServerAddPlayer(conn);

        CSteamID steamId = SteamMatchmaking.GetLobbyMemberByIndex(SteamLobby.LobbyId, numPlayers - 1);
        var      player  = conn.identity.GetComponent <Player>();

        player.SetSteamId(steamId.m_SteamID);
    }
Beispiel #18
0
        public void UpdateLobbyInformation()
        {
            RemoteUsers.Clear();
            var num = SteamMatchmaking.GetNumLobbyMembers(Lobby);

            for (var i = 0; i < num; i++)
            {
                var id = SteamMatchmaking.GetLobbyMemberByIndex(Lobby, i);
                RemoteUsers.Add(id);
            }
        }
Beispiel #19
0
 bool LobbyHasUser()
 {
     for (int i = 0; i < SteamMatchmaking.GetNumLobbyMembers(Listener.CLobbyID); i++)
     {
         if (SteamMatchmaking.GetLobbyMemberByIndex(Listener.CLobbyID, i).m_SteamID == RemoteID.m_SteamID)
         {
             return(true);
         }
     }
     return(false);
 }
Beispiel #20
0
    /// <summary>
    /// Generates string message with premade team members' IDs to be posted in game lobby.
    /// Necessary for host to process premade teams
    /// </summary>
    public string GeneratePremadeMessage()
    {
        string msg = "";

        for (int i = 0; i < SteamMatchmaking.GetNumLobbyMembers(teambuilderLobbyId); i++)
        {
            msg += SteamMatchmaking.GetLobbyMemberByIndex(teambuilderLobbyId, i).m_SteamID.ToString();
            msg += ".";
        }

        return(msg);
    }
Beispiel #21
0
        private static void OnLobbyChatUpdate(LobbyChatUpdate_t result)
        {
            Console.WriteLine("Lobby chat update");
            int lobbyMemberCount = SteamMatchmaking.GetNumLobbyMembers(new CSteamID(LobbyId));

            PlayerList.Clear();
            _playerNames.Clear();
            for (int i = 0; i < lobbyMemberCount; i++)
            {
                PlayerList.Add(SteamMatchmaking.GetLobbyMemberByIndex(new CSteamID(LobbyId), i));
                _playerNames.Add(SteamFriends.GetFriendPersonaName(PlayerList[i]));
            }
        }
Beispiel #22
0
        public static void SendToAllInLobby(byte[] bytes)
        {
            int numMembers = SteamMatchmaking.GetNumLobbyMembers(_lobbyInfo.LobbyID);

            for (int i = 0; i < numMembers; i++)
            {
                CSteamID member = SteamMatchmaking.GetLobbyMemberByIndex(_lobbyInfo.LobbyID, i);
                if (member.m_SteamID != SteamAPI.GetUserID())
                {
                    SteamNetworking.SendP2PPacket(member, bytes, (uint)bytes.Length, EP2PSend.k_EP2PSendReliable);
                }
            }
        }
Beispiel #23
0
        public static String GetMemberName(int Index)
        {
            if (SteamCore.InOfflineMode())
            {
                return("Local player");
            }

            //REMOVE//if ( s_CurrentLobby.m_handle == null ) return "";

            CSteamID steamIDLobbyMember = (CSteamID)SteamMatchmaking.GetLobbyMemberByIndex(s_CurrentLobby.m_handle, Index);

            return(SteamFriends.GetFriendPersonaName(steamIDLobbyMember));
        }
Beispiel #24
0
        public static UInt64 GetMemberId(int Index)
        {
            if (SteamCore.InOfflineMode())
            {
                return(SteamCore.PlayerId());
            }

            //REMOVE//if ( s_CurrentLobby.m_handle == null ) return 0;

            CSteamID steamIDLobbyMember = (CSteamID)SteamMatchmaking.GetLobbyMemberByIndex(s_CurrentLobby.m_handle, Index);

            return((UInt64)steamIDLobbyMember);
        }
Beispiel #25
0
        /// <summary>
        /// Loads the lobby and its related data
        /// </summary>
        /// <param name="lobbyId">The lobby to load data for</param>
        /// <remarks>
        /// <see cref="SteamLobby"/> should only be initalized for a lobby that the user is a member of e.g. on create or join of a lobby.
        /// Constructing a <see cref="SteamLobby"/> for a lobby you are not a member of will cause some data to be missing due to security on Valve's side.
        /// </remarks>
        public SteamLobby(CSteamID lobbyId)
        {
            id = lobbyId;

            var memberCount = SteamMatchmaking.GetNumLobbyMembers(id);

            for (int i = 0; i < memberCount; i++)
            {
                var memberId = SteamMatchmaking.GetLobbyMemberByIndex(id, i);
                members.Add(new SteamworksLobbyMember(id, memberId));
            }

            previousOwner = Owner;
        }
Beispiel #26
0
        public virtual bool ShouldAcceptSteamId(CSteamID id)
        {
            int count = SteamMatchmaking.GetNumLobbyMembers(steamLobbyId);

            for (int i = 0; i < count; i++)
            {
                if (SteamMatchmaking.GetLobbyMemberByIndex(steamLobbyId, i) == id)
                {
                    return(true);
                }
            }

            return(false);
        }
 private bool IsMemberInSteamLobby(CSteamID steamUser)
 {
     if (SteamManager.Initialized)
     {
         int numLobbyMembers = SteamMatchmaking.GetNumLobbyMembers(this.m_LobbyId);
         for (int i = 0; i < numLobbyMembers; i++)
         {
             if (SteamMatchmaking.GetLobbyMemberByIndex(this.m_LobbyId, i).m_SteamID == steamUser.m_SteamID)
             {
                 return(true);
             }
         }
     }
     return(false);
 }
Beispiel #28
0
        void CloseAllConnections()
        {
            if (currentLobbyId == CSteamID.Nil)
            {
                return;
            }
            SteamMatchmaking.LeaveLobby(currentLobbyId);
            var playerCount = SteamMatchmaking.GetNumLobbyMembers(currentLobbyId);

            for (var i = 0; i < playerCount; i++)
            {
                var id = SteamMatchmaking.GetLobbyMemberByIndex(currentLobbyId, i);
                SteamNetworking.CloseP2PSessionWithUser(id);
            }
            Debug.Log($"[Steam] Left lobby {currentLobbyId}");
            currentLobbyId = CSteamID.Nil;
        }
Beispiel #29
0
 void OnLobbyEntered(LobbyEnter_t result)
 {
     if (current_lobbyID == result.m_ulSteamIDLobby)
     {
         return;
     }
     current_lobbyID = result.m_ulSteamIDLobby;
     if (result.m_EChatRoomEnterResponse == 1)
     {
         if (SteamMatchmaking.GetLobbyData((CSteamID)current_lobbyID, "status") != "open" || SteamMatchmaking.GetNumLobbyMembers((CSteamID)current_lobbyID) > 2)
         {
             SetText("joinfail");
             initializedStatus = -2;
             SteamMatchmaking.LeaveLobby((CSteamID)current_lobbyID);
             return;
         }
         otherUsr = SteamMatchmaking.GetLobbyMemberByIndex((CSteamID)current_lobbyID, 0);
         if ((CSteamID)otherUsr == SteamUser.GetSteamID())
         {
             Debug.Log("F**K!");
             return;
         }
         initializedStatus = 5;
         SetUpReadyButtons();
         lastTimeMessageReceived = Time.time;
         //Debug.Log ("OTHERUSR: "******"player", ((int)PD.p1Char).ToString());
         int score = 0;
         SteamUserStats.GetUserStat(otherUsr, "GAMESCORE", out score);
         if (player2Rank == null)
         {
             FontData f = PD.mostCommonFont.Clone(); f.color = Color.white;
             player2Rank = GetMeshText(new Vector3(0.745f, 1.8f), SteamFriends.GetFriendPersonaName(otherUsr), f);
             SteamUserStats.RequestUserStats(otherUsr);
         }
         parent.ForcePlayer2(int.Parse(SteamMatchmaking.GetLobbyData((CSteamID)current_lobbyID, "playerone")));
         myMesh.gameObject.SetActive(false);
     }
     else
     {
         SetText("joinfail");
         initializedStatus = -2;
         current_lobbyID   = 0;
     }
 }
Beispiel #30
0
    public bool IsMemberInSteamLobby(CSteamID steamUser)
    {
        if (SteamManager.Initialized)
        {
            int numMembers = SteamMatchmaking.GetNumLobbyMembers(steamLobbyId);

            for (int i = 0; i < numMembers; i++)
            {
                var member = SteamMatchmaking.GetLobbyMemberByIndex(steamLobbyId, i);

                if (member.m_SteamID == steamUser.m_SteamID)
                {
                    return(true);
                }
            }
        }

        return(false);
    }