public void LobbyChatUpdated(LobbyChatUpdate_t update)
 {
     try {
         EChatMemberStateChange change = (EChatMemberStateChange)update.m_rgfChatMemberStateChange;
         if (change == EChatMemberStateChange.k_EChatMemberStateChangeEntered)
         {
             MultiplayerChat.AddChat(string.Format("User {0} joined the game!", SteamFriends.GetFriendPersonaName(new CSteamID(update.m_ulSteamIDUserChanged))));
             if (!connectedPlayers.Contains(update.m_ulSteamIDUserChanged))
             {
                 PlayerJoinedManagers(update.m_ulSteamIDUserChanged);
                 connectedPlayers.Add(update.m_ulSteamIDUserChanged);
             }
             if (update.m_ulSteamIDUserChanged != SteamUser.GetSteamID().m_SteamID)
             {
                 otherPlayers.Add(update.m_ulSteamIDUserChanged);
             }
         }
         else if (change == EChatMemberStateChange.k_EChatMemberStateChangeLeft || change == EChatMemberStateChange.k_EChatMemberStateChangeKicked || change == EChatMemberStateChange.k_EChatMemberStateChangeDisconnected)
         {
             MultiplayerChat.AddChat(string.Format("User {0} left the game!", SteamFriends.GetFriendPersonaName(new CSteamID(update.m_ulSteamIDUserChanged))));
             PlayerLeftManagers(update.m_ulSteamIDUserChanged);
             connectedPlayers.Remove(update.m_ulSteamIDUserChanged);
             MultiplayerPlayerList.RemovePlayerLabel(update.m_ulSteamIDUserChanged);
             if (update.m_ulSteamIDUserChanged != SteamUser.GetSteamID().m_SteamID)
             {
                 otherPlayers.Remove(update.m_ulSteamIDUserChanged);
             }
         }
     } catch (System.Exception e) {
         Debug.LogError(e);
     }
 }
        public void LobbyChatUpdated(LobbyChatUpdate_t update)
        {
            try {
                EChatMemberStateChange change = (EChatMemberStateChange)update.m_rgfChatMemberStateChange;
                if (change == EChatMemberStateChange.k_EChatMemberStateChangeEntered)
                {
                    MultiplayerChat.AddChat(string.Format("User {0} joined the game!", SteamFriends.GetFriendPersonaName(new CSteamID(update.m_ulSteamIDUserChanged))));
                    Log(string.Format("User {0} joined the game!", SteamFriends.GetFriendPersonaName(new CSteamID(update.m_ulSteamIDUserChanged))));

                    if (!connectedPlayers.Contains(update.m_ulSteamIDUserChanged))
                    {
                        PlayerJoinedManagers(update.m_ulSteamIDUserChanged);
                        connectedPlayers.Add(update.m_ulSteamIDUserChanged);
                    }
                    if (update.m_ulSteamIDUserChanged != SteamUser.GetSteamID().m_SteamID)
                    {
                        otherPlayers.Add(update.m_ulSteamIDUserChanged);
                    }
                }
                else if (change == EChatMemberStateChange.k_EChatMemberStateChangeLeft || change == EChatMemberStateChange.k_EChatMemberStateChangeKicked || change == EChatMemberStateChange.k_EChatMemberStateChangeDisconnected)
                {
                    MultiplayerChat.AddChat(string.Format("User {0} left the game!", SteamFriends.GetFriendPersonaName(new CSteamID(update.m_ulSteamIDUserChanged))));
                    Log(string.Format("User {0} left the game!", SteamFriends.GetFriendPersonaName(new CSteamID(update.m_ulSteamIDUserChanged))));
                    PlayerLeftManagers(update.m_ulSteamIDUserChanged);
                    connectedPlayers.Remove(update.m_ulSteamIDUserChanged);
                    MultiplayerPlayerList.RemovePlayerLabel(update.m_ulSteamIDUserChanged);
                    if (update.m_ulSteamIDUserChanged != SteamUser.GetSteamID().m_SteamID)
                    {
                        otherPlayers.Remove(update.m_ulSteamIDUserChanged);
                    }
                    if (update.m_ulSteamIDUserChanged == NetworkGameManager.managerID)
                    {
                        patch_ProcessManager patchPM = ((patch_ProcessManager)Patches.patch_Rainworld.mainRW.processManager);
                        //if ((patchPM.currentMainLoop is MultiplayerSleepAndDeathScreen) || (patchPM.currentMainLoop is SteamMultiplayerMenu)
                        if (patchPM.musicPlayer != null)
                        {
                            patchPM.musicPlayer.FadeOutAllSongs(5f);
                            patchPM.musicPlayer.MenuRequestsSong("RW_8 - Sundown", 1.4f, 2f);
                        }
                        if (patchPM.currentMainLoop is RainWorldGame)
                        {
                            (patchPM.currentMainLoop as RainWorldGame).ExitToMenu();
                        }
                        else
                        {
                            patchPM.RequestMainProcessSwitch(ProcessManager.ProcessID.MainMenu);
                        }
                        if (monklandUI != null)
                        {
                            monklandUI.ClearSprites();
                            monklandUI = null;
                        }
                        this.OnGameExit();
                    }
                }
            } catch (System.Exception e) {
                Debug.LogError(e);
            }
        }
        private void ChatResult(ChatMemberStateChange_t entry)
        {
            EChatMemberStateChange ch = entry.m_rgfChatMemberStateChange;

            if (ch == EChatMemberStateChange.k_EChatMemberStateChangeEntered)
            {
                IClient cl = GetSteamClient(entry.m_ulSteamIDUserChanged);

                if (cl == null)
                {
                    if (clientList.Clients.ContainsKey(entry.m_ulSteamIDUserChanged))
                    {
                        cl = clientList.Clients[entry.m_ulSteamIDUserChanged];
                    }
                    else
                    {
                        cl = new SteamClient(entry.m_ulSteamIDUserChanged);
                    }

                    EPersonaState st = clientFriends.GetFriendPersonaState(entry.m_ulSteamIDUserChanged);
                    cl.AwayMsg = (st == EPersonaState.k_EPersonaStateOnline ? "" : st.ToString().Remove(0, 15));
                    clients.Add(cl);
                }

                cl.AddMessage(IRCMessage.GetStatic().CreateMessage(cl, cl.UserString, "JOIN", new string[] { "&" + GetSteamChannel(entry.m_ulSteamIDChat).ChannelName }));

                /*Channel c = GetChannel(Server.StripString(clientFriends.GetChatRoomName(entry.m_ulSteamIDChat)));
                 * c.AddClient(cl);*/
            }
            else if (ch == EChatMemberStateChange.k_EChatMemberStateChangeLeft || ch == EChatMemberStateChange.k_EChatMemberStateChangeKicked || ch == EChatMemberStateChange.k_EChatMemberStateChangeDisconnected || ch == EChatMemberStateChange.k_EChatMemberStateChangeBanned)
            {
                IChannel c = GetSteamChannel(entry.m_ulSteamIDChat);

                IClient cl = GetSteamClient(entry.m_ulSteamIDUserChanged);

                if (cl == null || c == null)
                {
                    return;
                }

                string leaveMsg = entry.m_rgfChatMemberStateChange.ToString();

                if (leaveMsg.Length > 24)
                {
                    leaveMsg = leaveMsg.Remove(0, 24);
                }

                c.RemoveClient(cl, leaveMsg);
            }
        }
    void UpdateUserStatus(LobbyChatUpdate_t cb)
    {
        string name = SteamFriends.GetFriendPersonaName((CSteamID)cb.m_ulSteamIDUserChanged);
        EChatMemberStateChange chatType = (EChatMemberStateChange)cb.m_rgfChatMemberStateChange;

        switch (chatType)
        {
        case EChatMemberStateChange.k_EChatMemberStateChangeEntered:
            Text.text += "\n" + name + " joined the lobby";
            break;

        case EChatMemberStateChange.k_EChatMemberStateChangeLeft:
            Text.text += Text.text += "\n" + name + " left the lobby";
            break;

        case EChatMemberStateChange.k_EChatMemberStateChangeDisconnected:
            Text.text += Text.text += "\n" + name + " left the lobby";
            break;
        }
    }