Exemple #1
0
        public static int GetLobbyMemberCount()
        {
            if (SteamCore.InOfflineMode())
            {
                return(1);
            }

            //REMOVE//if ( s_CurrentLobby.m_handle == null ) return -1;
            return(SteamMatchmaking.GetNumLobbyMembers(s_CurrentLobby.m_handle));
        }
Exemple #2
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);
 }
Exemple #3
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);
            }
        }
Exemple #4
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);
    }
Exemple #5
0
        public static void SetOtherLobbyData(ulong lobbyId, LobbyInfo info, bool refresh = true)
        {
            string version = SteamMatchmaking.GetLobbyData(new CSteamID(lobbyId), "version");

            info.UsedSlots = SteamMatchmaking.GetNumLobbyMembers(new CSteamID(lobbyId));
            if (info.UsedSlots > 0 && info.HostName != "" && version == PACKET_VERSION)
            {
                LobbyData.Add(lobbyId, info);

                MultiplayerListing.refreshLobbyList();
            }
        }
Exemple #6
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);
                }
            }
        }
Exemple #7
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]));
            }
        }
Exemple #8
0
    public void OnLobbyChatUpdate(LobbyChatUpdate_t pCallback)
    {
        if (C.LOG_INVITE)
        {
            Debug.Log("Premade lobby: OnLobbyChatUpdate");
        }

        UpdateTeammatesPresence();
        CheckLock();

        /// If someone left
        if (pCallback.m_ulSteamIDLobby == teambuilderLobbyId.m_SteamID &&
            (pCallback.m_rgfChatMemberStateChange == (uint)EChatMemberStateChange.k_EChatMemberStateChangeLeft ||
             pCallback.m_rgfChatMemberStateChange == (uint)EChatMemberStateChange.k_EChatMemberStateChangeDisconnected))
        {
            if (C.LOG_INVITE)
            {
                Debug.LogWarning(SteamFriends.GetFriendPersonaName(new CSteamID(pCallback.m_ulSteamIDUserChanged)) + " left lobby");
            }

            /// Leave lobby if left only this player
            if (SteamMatchmaking.GetNumLobbyMembers(teambuilderLobbyId) <= 1)
            {
                LeaveTeambuilderLobby();
            }

            /// Update 'premade' message
            var snm = SteamNetworkManager.Instance;
            if (snm.steamLobbyId != CSteamID.Nil)
            {
                SteamMatchmaking.SetLobbyMemberData(snm.steamLobbyId, "premade", GeneratePremadeMessage());
            }

            /// If became new lobby owner - start pinging chat
            if (IsLobbyOwner() && _pingCoroutine == null)
            {
                _pingCoroutine = StartCoroutine(PingChat());
            }
        }

        /// If user enters lobby
        else if (pCallback.m_rgfChatMemberStateChange == (uint)EChatMemberStateChange.k_EChatMemberStateChangeEntered &&
                 pCallback.m_ulSteamIDLobby == teambuilderLobbyId.m_SteamID)
        {
            if (C.LOG_INVITE)
            {
                Debug.LogWarning(SteamFriends.GetFriendPersonaName(new CSteamID(pCallback.m_ulSteamIDUserChanged)) + " joined lobby");
            }
        }
    }
Exemple #9
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;
        }
Exemple #10
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);
 }
        public void LobbyEntered(LobbyEnter_t enterLobby)
        {
            connectedPlayers.Clear();
            otherPlayers.Clear();
            ResetManagers();

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

            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 (!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));
        }
Exemple #13
0
        public void Update()
        {
            if (!Patches.patch_SteamManager.Initialized)
            {
                return;
            }

            timer -= Time.deltaTime;
            if (timer <= 0)
            {
                timer = 5f;

                int newMembers = SteamMatchmaking.GetNumLobbyMembers(lobbyID);
                DiscordManager.instance.SetPartyNumber(newMembers);
            }
        }
Exemple #14
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;
        }
Exemple #15
0
    void OnLobbyEntered(LobbyEnter_t result)
    {
        current_lobbyID = result.m_ulSteamIDLobby;

        if (result.m_EChatRoomEnterResponse == 1)
        {
            main_menu_canvas.enabled = false;
            lobby_canvas.enabled     = true;
            Debug.Log("Lobby joined!");
            lobbyID          = (Steamworks.CSteamID)current_lobbyID;
            players_in_lobby = SteamMatchmaking.GetNumLobbyMembers(lobbyID);
            update_lobby_labels();
        }
        else
        {
            Debug.Log("Failed to join lobby.");
        }
    }
Exemple #16
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);
    }
Exemple #17
0
        public static Dictionary <CSteamID, string> GetMembersInLobby()
        {
            Dictionary <CSteamID, string> members = new Dictionary <CSteamID, string>();

            if (!SteamManager.Initialized)
            {
                Logger.Error("CONNECTION FAILED");
                return(members);
            }
            int numMembers = SteamMatchmaking.GetNumLobbyMembers(_lobbyInfo.LobbyID);

            for (int i = 0; i < numMembers; i++)
            {
                CSteamID member = SteamMatchmaking.GetLobbyMemberByIndex(_lobbyInfo.LobbyID, i);
                members.Add(member, SteamFriends.GetFriendPersonaName(member));
            }

            return(members);
        }
Exemple #18
0
    private void HandleWaiting()
    {
        if (lobbyCursor.back())
        {
            SetText("lefthost");
            myMesh.gameObject.SetActive(true);
            SteamMatchmaking.LeaveLobby((CSteamID)current_lobbyID);
            initializedStatus = -2;
            current_lobbyID   = 0;
            return;
        }
        int numusers = SteamMatchmaking.GetNumLobbyMembers((CSteamID)current_lobbyID);

        if (numusers == 1)
        {
            return;
        }
        SteamMatchmaking.SetLobbyData((CSteamID)current_lobbyID, "status", "full");
        SetUpReadyButtons();
        otherUsr = SteamMatchmaking.GetLobbyMemberByIndex((CSteamID)current_lobbyID, 1);
        lastTimeMessageReceived = Time.time;

        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);
        }

        string p2 = SteamMatchmaking.GetLobbyMemberData((CSteamID)current_lobbyID, otherUsr, "player");

        if (string.IsNullOrEmpty(p2))
        {
            return;
        }
        parent.ForcePlayer2(int.Parse(p2));
        initializedStatus = 6;
        myMesh.gameObject.SetActive(false);
    }
    void UpdateLobbyInfo( CSteamID steamIDLobby, ref Lobby outLobby )
    {
        outLobby.m_SteamID = steamIDLobby;
        outLobby.m_Owner = SteamMatchmaking.GetLobbyOwner( steamIDLobby );
        outLobby.m_Members = new LobbyMembers[SteamMatchmaking.GetNumLobbyMembers(steamIDLobby)];
        outLobby.m_MemberLimit = SteamMatchmaking.GetLobbyMemberLimit(steamIDLobby);

        int nDataCount = SteamMatchmaking.GetLobbyDataCount(steamIDLobby);
        outLobby.m_Data = new LobbyMetaData[nDataCount];
        for (int i = 0; i < nDataCount; ++i)
        {
            bool lobbyDataRet = SteamMatchmaking.GetLobbyDataByIndex(steamIDLobby, i, out outLobby.m_Data[i].m_Key, Constants.k_nMaxLobbyKeyLength, out outLobby.m_Data[i].m_Value, Constants.k_cubChatMetadataMax);
            if (!lobbyDataRet)
            {
                Debug.LogError("SteamMatchmaking.GetLobbyDataByIndex returned false.");
                continue;
            }

        }
    }
    private void UpdateLobby()
    {
        if (!m_IsInLobby)
        {
            return;
        }
        var membernum = SteamMatchmaking.GetNumLobbyMembers(m_LobbyId);

        Debug.Log("房间更新,当前人数为:" + membernum);

        List <string> members = new List <string>();

        for (int i = 0; i < membernum; i++)
        {
            var memberId = SteamMatchmaking.GetLobbyMemberByIndex(m_LobbyId, i);

            members.Add(SteamFriends.GetFriendPersonaName(memberId));
            GameObject.Find("LobbyPanel").GetComponent <LobbyPanel>().updateMember(members.ToArray());
        }
    }
Exemple #21
0
    // Callback for Matchmaking JoinLobby
    private void OnLobbyJoin(LobbyEnter_t lobbyEnter)
    {
        m_lobbyID = new CSteamID(lobbyEnter.m_ulSteamIDLobby);
        EChatRoomEnterResponse response = (EChatRoomEnterResponse)lobbyEnter.m_EChatRoomEnterResponse;

        print("joined lobby waiting to test 3secs...");

        string hostSteamID = SteamMatchmaking.GetLobbyData(m_lobbyID, "Host");
        ulong  steamid     = ulong.Parse(hostSteamID);

        int neededPlayers = int.Parse(SteamMatchmaking.GetLobbyData(m_lobbyID, "NeededPlayers"));
        int playerCount   = SteamMatchmaking.GetNumLobbyMembers(m_lobbyID);

        SteamMatchmaking.SetLobbyMemberData(m_lobbyID, "cid", ClientPlayer.Singleton.Cid.ToString());

        Match.InitMatch();

        Match.NetworkLobby.SetSteamIDToConnect(steamid);
        Match.MatchSettings = new MatchSettings(BallersGamemode.SP_BOTS, 5, 60.0f * 6.0f, 4);
        Match.PlayersNeeded = int.Parse(SteamMatchmaking.GetLobbyData(m_lobbyID, "NeededPlayers"));;
        Match.MatchID       = 1;

        if (steamid == ClientPlayer.Singleton.SteamID)
        {
            Match.HostServer = true;
            //Match.AddPlayer(steamid, ClientPlayer.Singleton.Cid);
            //StartCoroutine(Test());
        }
//         Debug.Log($"{playerCount} / {neededPlayers}");
//         if (playerCount >= neededPlayers)
//         {
//             Debug.Log($"Required players met. Starting...");
//             m_matchSetup.Setup(Match.HostID);
//         }


        ClientPlayer.Singleton.State = ServerPlayerState.JOINED;

        // FOR DEBUGGING
        //m_matchSetup.Setup(lobbyEnter, steamid);
    }
        public void OnP2PSessionRequest(P2PSessionRequest_t pCallback)
        {
            try
            {
                Logger.Debug($"{pCallback.m_steamIDRemote} requested a P2P session");

                int numMembers = SteamMatchmaking.GetNumLobbyMembers(SteamAPI.getLobbyID());
                for (int i = 0; i < numMembers; i++)
                {
                    var member = SteamMatchmaking.GetLobbyMemberByIndex(SteamAPI.getLobbyID(), i);
                    if (member.m_SteamID == pCallback.m_steamIDRemote.m_SteamID)
                    {
                        Logger.Debug($"{pCallback.m_steamIDRemote} is in our lobby, lets accept their P2P session");
                        bool ret = SteamNetworking.AcceptP2PSessionWithUser(pCallback.m_steamIDRemote);
                    }
                }
            } catch (Exception e)
            {
                Logger.Error(e);
            }
        }
    private void UpdateLobbyMembers()
    {
        if (this.m_LobbyId == CSteamID.Nil)
        {
            this.m_LobbyMembers.Clear();
            return;
        }
        int numLobbyMembers = SteamMatchmaking.GetNumLobbyMembers(this.m_LobbyId);

        this.m_LobbyMembers.Resize(numLobbyMembers);
        for (int i = 0; i < numLobbyMembers; i++)
        {
            CSteamID           lobbyMemberByIndex = SteamMatchmaking.GetLobbyMemberByIndex(this.m_LobbyId, i);
            P2PLobbyMemberInfo p2PLobbyMemberInfo = this.m_LobbyMembers[i];
            p2PLobbyMemberInfo.m_Address = new P2PAddressSteam
            {
                m_SteamID = lobbyMemberByIndex
            };
            p2PLobbyMemberInfo.m_Name = SteamMatchmaking.GetLobbyMemberData(this.m_LobbyId, lobbyMemberByIndex, "member_name");
        }
    }
Exemple #24
0
        public static bool IsMemberInSteamLobby(CSteamID steamUser)
        {
            if (!SteamManager.Initialized)
            {
                Logger.Error("CONNECTION FAILED");
                return(false);
            }
            int numMembers = SteamMatchmaking.GetNumLobbyMembers(_lobbyInfo.LobbyID);

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

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

            return(false);
        }
Exemple #25
0
    private void OnLobbyChatUpdate(LobbyDataUpdate_t lobbyDataUpdate)
    {
        ulong steamid = lobbyDataUpdate.m_ulSteamIDMember;

        print("Player joining... " + steamid);

        string joinedCID = SteamMatchmaking.GetLobbyMemberData(
            m_lobbyID,
            new CSteamID(steamid),
            "cid");

        if (joinedCID == null)
        {
            return;
        }
        if (lobbyDataUpdate.m_bSuccess == 1)
        {
            Match.AddPlayer(steamid, int.Parse(joinedCID));

            int neededPlayers = int.Parse(SteamMatchmaking.GetLobbyData(m_lobbyID, "NeededPlayers"));
            int playerCount   = SteamMatchmaking.GetNumLobbyMembers(m_lobbyID);

            if (new CSteamID(steamid) == Match.HostID)
            {
                Match.HostServer = true;
                Match.AddPlayer(steamid, ClientPlayer.Singleton.Cid);
            }
            Debug.Log($"{playerCount} / {neededPlayers}");
            if (playerCount >= neededPlayers)
            {
                Debug.Log($"Required players met. Starting...");
                m_matchSetup.Setup(Match.HostID);
            }
        }
        else
        {
            Match.RemovePlayer(steamid);
        }
    }
Exemple #26
0
    protected void OnSessionRequest(P2PSessionRequest_t pCallback)
    {
        if (lobby.Equals(CSteamID.Nil))
        {
            Debug.Log("User trying to send packet to us, and our lobby doesn't exist!");
            return;
        }
        bool flag = false;

        for (int i = 0; i < SteamMatchmaking.GetNumLobbyMembers(lobby); i++)
        {
            if (SteamMatchmaking.GetLobbyMemberByIndex(lobby, i) == pCallback.m_steamIDRemote)
            {
                flag = true;
            }
        }

        if (flag)
        {
            SteamNetworking.AcceptP2PSessionWithUser(pCallback.m_steamIDRemote);
        }
    }
Exemple #27
0
        // Token: 0x06000003 RID: 3 RVA: 0x000022A8 File Offset: 0x000004A8
        private static void OnLobbyEnter(LobbyEnter_t result)
        {
            int      numLobbyMembers = SteamMatchmaking.GetNumLobbyMembers((CSteamID)result.m_ulSteamIDLobby);
            CSteamID lobbyOwner      = SteamMatchmaking.GetLobbyOwner((CSteamID)result.m_ulSteamIDLobby);

            Console.WriteLine(Math.Max(0, numLobbyMembers - 1));
            Console.WriteLine(lobbyOwner);
            Console.WriteLine(SteamFriends.GetFriendPersonaName(lobbyOwner));
            CSteamID steamID = SteamUser.GetSteamID();

            for (int i = 0; i < numLobbyMembers; i++)
            {
                CSteamID lobbyMemberByIndex = SteamMatchmaking.GetLobbyMemberByIndex((CSteamID)result.m_ulSteamIDLobby, i);
                if (lobbyMemberByIndex != steamID)
                {
                    Console.WriteLine(lobbyMemberByIndex);
                    Console.WriteLine(SteamFriends.GetFriendPersonaName(lobbyMemberByIndex));
                }
            }
            SteamMatchmaking.LeaveLobby((CSteamID)result.m_ulSteamIDLobby);
            Program.finished = true;
        }
	void OnLobbyEnter(LobbyEnter_t pCallback, bool bIOFailure) {
		if (bIOFailure) {
			ESteamAPICallFailure reason = SteamUtils.GetAPICallFailureReason(m_LobbyEnterCallResult.Handle);
			Debug.LogError("OnLobbyEnter encountered an IOFailure due to: " + reason);
			return; // TODO: Recovery
		}

		Debug.Log("[" + LobbyEnter_t.k_iCallback + " - LobbyEnter] - " + pCallback.m_ulSteamIDLobby + " -- " + pCallback.m_rgfChatPermissions + " -- " + pCallback.m_bLocked + " -- " + (EChatRoomEnterResponse)pCallback.m_EChatRoomEnterResponse);
		
		m_LobbyEnterResponse = (EChatRoomEnterResponse)pCallback.m_EChatRoomEnterResponse;
		
		if(m_LobbyEnterResponse != EChatRoomEnterResponse.k_EChatRoomEnterResponseSuccess) {
			ChangeState(EChatClientState.FailedToJoin);
			return;
		}
		
		m_CurrentLobby.m_SteamID = (CSteamID)pCallback.m_ulSteamIDLobby;
		m_CurrentLobby.m_Members = new LobbyMembers[SteamMatchmaking.GetNumLobbyMembers(m_CurrentLobby.m_SteamID)];
		m_CurrentLobby.m_MemberLimit = SteamMatchmaking.GetLobbyMemberLimit(m_CurrentLobby.m_SteamID);

		ChangeState(EChatClientState.InLobby);
	}
Exemple #29
0
        /// <summary>
        /// Handle the RequestLobbyData Steam API callback
        /// </summary>
        /// <param name="result">The <see cref="LobbyDataUpdate_t"/> result set</param>
        private void OnLobbyDataUpdated(LobbyDataUpdate_t result)
        {
            for (int i = 0; i < serverList.Count; i++)
            {
                if (serverList[i].SteamId.m_SteamID == result.m_ulSteamIDLobby)
                {
                    // Lobby no longer exists so remove it from the list
                    if (result.m_bSuccess == 0)
                    {
                        RemoveServer(i);
                        return;
                    }

                    serverList[i].ListItem.serverName.text = SteamMatchmaking.GetLobbyData(serverList[i].SteamId, "name");
                    serverList[i].ListItem.gameType.text   = SteamMatchmaking.GetLobbyData(serverList[i].SteamId, "fnr_gameType");
                    serverList[i].ListItem.gameMode.text   = SteamMatchmaking.GetLobbyData(serverList[i].SteamId, "fnr_gameMode");
                    var maxPlayers  = SteamMatchmaking.GetLobbyMemberLimit(serverList[i].SteamId);
                    var currPlayers = SteamMatchmaking.GetNumLobbyMembers(serverList[i].SteamId);
                    serverList[i].ListItem.playerCount.text = $"{currPlayers}/{maxPlayers}";
                    return;
                }
            }
        }
 // User Started Communication
 void OnP2PSessionRequest(P2PSessionRequest_t pCallback)
 {
     for (int i = 0; i < SteamMatchmaking.GetNumLobbyMembers(CLobbyID); i++)
     {
         if (SteamMatchmaking.GetLobbyMemberByIndex(CLobbyID, i).m_SteamID == pCallback.m_steamIDRemote.m_SteamID)
         {
             if (SteamNetworking.AcceptP2PSessionWithUser(pCallback.m_steamIDRemote))
             {
                 WriteEvent($"Accepted P2P Connection With User: {pCallback.m_steamIDRemote.m_SteamID}", LogType.Info);
                 long fakeAddress = 0;
                 SteamServerConnection NewClient = new SteamServerConnection(pCallback.m_steamIDRemote.m_SteamID, this, Interlocked.Increment(ref currentEndPointCount), out fakeAddress);
                 SteamMatchmaking.SetLobbyData(CLobbyID, fakeAddress.ToString(), pCallback.m_steamIDRemote.m_SteamID.ToString());
                 RegisterUser(NewClient);
                 RegisterConnection(NewClient);
             }
             else
             {
                 WriteEvent($"Failed P2P Connection With User: {pCallback.m_steamIDRemote.m_SteamID}", LogType.Info);
             }
             return;
         }
     }
 }