예제 #1
0
    // Token: 0x0600295C RID: 10588 RVA: 0x00097C38 File Offset: 0x00095E38
    public void Init(ref global::ServerBrowser.Server s)
    {
        this.server           = s;
        this.textLabel.Text   = this.server.name;
        this.textPlayers.Text = this.server.currentplayers.ToString() + " / " + this.server.maxplayers.ToString();
        this.textPing.Text    = this.server.ping.ToString();
        global::dfScrollPanel component = base.transform.parent.GetComponent <global::dfScrollPanel>();

        if (component)
        {
            base.GetComponent <global::dfControl>().Width = component.Width;
            base.GetComponent <global::dfControl>().ResetLayout(true, false);
        }
        this.UpdateColours();
    }
예제 #2
0
    // Token: 0x06002938 RID: 10552 RVA: 0x0009713C File Offset: 0x0009533C
    private void Add_Server(int iMaxPlayers, int iCurrentPlayers, int iPing, uint iLastPlayed, [MarshalAs(UnmanagedType.LPStr)][In] string strHostname, [MarshalAs(UnmanagedType.LPStr)][In] string strAddress, int iPort, int iQueryPort, [MarshalAs(UnmanagedType.LPStr)][In] string tags, bool bPassworded, int iType)
    {
        string strName = strAddress + ":" + iPort.ToString();

        global::ServerBrowser.Server server = new global::ServerBrowser.Server();
        server.name           = strHostname;
        server.address        = strAddress;
        server.maxplayers     = iMaxPlayers;
        server.currentplayers = iCurrentPlayers;
        server.ping           = iPing;
        server.lastplayed     = iLastPlayed;
        server.port           = iPort;
        server.queryport      = iQueryPort;
        server.fave           = global::FavouriteList.Contains(strName);
        if (server.name.Length > 64)
        {
            server.name = server.name.Substring(0, 64);
        }
        if (this.ShouldIgnoreServer(server))
        {
            return;
        }
        this.playerCount += iCurrentPlayers;
        this.serverCount++;
        this.slotCount            += iMaxPlayers;
        this.needsServerListUpdate = true;
        int num = (int)((float)this.playerCount / (float)this.slotCount * 100f);

        this.detailsLabel.Text = string.Concat(new string[]
        {
            "Found ",
            this.playerCount.ToString(),
            " players on ",
            this.serverCount.ToString(),
            " servers. We are at ",
            num.ToString(),
            "% capacity."
        });
        if (iType == 3)
        {
            this.servers[5].Add(server);
            this.categoryButtons[5].UpdateServerCount(this.servers[5].Count);
            return;
        }
        if (iType == 4)
        {
            int    num2 = (int)POSIX.Time.ElapsedSecondsSince((int)server.lastplayed);
            string str  = string.Empty;
            if (num2 < 60)
            {
                str = num2.ToString() + " seconds ago";
            }
            else if (num2 < 3600)
            {
                str = (num2 / 60).ToString() + " minutes ago";
            }
            else if (num2 < 172800)
            {
                str = (num2 / 60 / 60).ToString() + " hours ago";
            }
            else
            {
                str = (num2 / 60 / 60 / 24).ToString() + " days ago";
            }
            global::ServerBrowser.Server server2 = server;
            server2.name = server2.name + " (" + str + ")";
            this.servers[4].Add(server);
            this.categoryButtons[4].UpdateServerCount(this.servers[4].Count);
            return;
        }
        if (tags.Contains("official"))
        {
            this.servers[0].Add(server);
            this.categoryButtons[0].UpdateServerCount(this.servers[0].Count);
            return;
        }
        string[] array = tags.Split(new char[]
        {
            ','
        });
        foreach (string text in array)
        {
            if (!text.StartsWith("mp"))
            {
                if (!text.StartsWith("cp"))
                {
                    if (text.StartsWith("sg:"))
                    {
                        string s = text.Substring(3);
                        ulong  iGroupID;
                        if (ulong.TryParse(s, NumberStyles.HexNumber, null, out iGroupID))
                        {
                            if (!Rust.Steam.SteamGroups.MemberOf(iGroupID))
                            {
                                return;
                            }
                            this.servers[3].Add(server);
                            this.categoryButtons[3].UpdateServerCount(this.servers[3].Count);
                            return;
                        }
                    }
                }
            }
        }
        if (tags.Contains("modded"))
        {
            this.servers[2].Add(server);
            this.categoryButtons[2].UpdateServerCount(this.servers[2].Count);
            return;
        }
        if (strHostname.Contains("oxide", true))
        {
            return;
        }
        if (strHostname.Contains("rust++", true))
        {
            return;
        }
        this.servers[1].Add(server);
        this.categoryButtons[1].UpdateServerCount(this.servers[1].Count);
    }
예제 #3
0
    // Token: 0x0600293A RID: 10554 RVA: 0x00097558 File Offset: 0x00095758
    public void UpdateServerList()
    {
        this.needsServerListUpdate = false;
        int num = this.GetMaxServers();

        num = Math.Min(this.servers[this.serverType].Count, num);
        int num2 = this.pageNumber * num;

        if (this.servers[this.serverType].Count == 0)
        {
            return;
        }
        if (num2 < 0)
        {
            return;
        }
        if (num2 > this.servers[this.serverType].Count)
        {
            return;
        }
        int iPages = (int)Mathf.Ceil((float)this.servers[this.serverType].Count / (float)num);

        if (this.serverType == 4)
        {
            this.servers[this.serverType].Sort((global::ServerBrowser.Server x, global::ServerBrowser.Server y) => (x.lastplayed == y.lastplayed) ? string.Compare(x.name, y.name) : y.lastplayed.CompareTo(x.lastplayed));
        }
        else
        {
            if (this.orderType == 0)
            {
                this.servers[this.serverType].Sort((global::ServerBrowser.Server x, global::ServerBrowser.Server y) => (x.fave == y.fave) ? string.Compare(x.name, y.name) : y.fave.CompareTo(x.fave));
            }
            if (this.orderType == 1)
            {
                this.servers[this.serverType].Sort((global::ServerBrowser.Server x, global::ServerBrowser.Server y) => (x.fave == y.fave) ? ((x.currentplayers == y.currentplayers) ? string.Compare(x.name, y.name) : y.currentplayers.CompareTo(x.currentplayers)) : y.fave.CompareTo(x.fave));
            }
            if (this.orderType == 2)
            {
                this.servers[this.serverType].Sort((global::ServerBrowser.Server x, global::ServerBrowser.Server y) => (x.fave == y.fave) ? ((x.ping == y.ping) ? string.Compare(x.name, y.name) : x.ping.CompareTo(y.ping)) : y.fave.CompareTo(x.fave));
            }
        }
        if (num2 + num > this.servers[this.serverType].Count)
        {
            num = this.servers[this.serverType].Count - num2;
        }
        List <global::ServerBrowser.Server> range = this.servers[this.serverType].GetRange(num2, num);

        this.pagination.Setup(iPages, this.pageNumber);
        string text = string.Empty;

        foreach (global::ServerBrowser.Server server in range)
        {
            text += server.address;
        }
        if (text == this.currentServerChecksum)
        {
            return;
        }
        this.ClearServers();
        Vector3 position;

        position..ctor(0f, 0f, 0f);
        this.currentServerChecksum = text;
        bool flag = false;

        foreach (global::ServerBrowser.Server server2 in range)
        {
            global::ServerBrowser.Server server3 = server2;
            if (flag && !server2.fave)
            {
                position.y -= 2f;
            }
            flag = server2.fave;
            GameObject gameObject = this.NewServerItem();
            gameObject.GetComponent <global::ServerItem>().Init(ref server3);
            global::dfControl component = gameObject.GetComponent <global::dfControl>();
            component.Width    = this.serverContainer.Width;
            component.Position = position;
            component.Show();
            position.y -= 34f;
        }
        this.serverContainer.Invalidate();
    }
예제 #4
0
    // Token: 0x06002937 RID: 10551 RVA: 0x00096F50 File Offset: 0x00095150
    private bool ShouldIgnoreServer(global::ServerBrowser.Server item)
    {
        string text = item.name.ToLower();

        if (text.Contains("[color"))
        {
            return(true);
        }
        if (text.Contains("[sprite"))
        {
            return(true);
        }
        if (text.Contains("--"))
        {
            return(true);
        }
        if (text.Contains("%%"))
        {
            return(true);
        }
        if (!char.IsLetterOrDigit(text[0]))
        {
            return(true);
        }
        if (!char.IsLetterOrDigit(text[text.Length - 1]))
        {
            return(true);
        }
        foreach (char c in text)
        {
            if (!char.IsLetterOrDigit(c))
            {
                if (c != '\'')
                {
                    if (c != '[')
                    {
                        if (c != ']')
                        {
                            if (c != '|')
                            {
                                if (c != ' ')
                                {
                                    if (c != '-')
                                    {
                                        if (c != '(')
                                        {
                                            if (c != '%')
                                            {
                                                if (c != ')')
                                                {
                                                    if (c != '_')
                                                    {
                                                        if (c != '@')
                                                        {
                                                            if (c != '+')
                                                            {
                                                                if (c != '&')
                                                                {
                                                                    if (c != ':')
                                                                    {
                                                                        if (c != '/')
                                                                        {
                                                                            if (c != '.')
                                                                            {
                                                                                if (c != '?')
                                                                                {
                                                                                    if (c != '#')
                                                                                    {
                                                                                        if (c != '!')
                                                                                        {
                                                                                            if (c != ',')
                                                                                            {
                                                                                                return(true);
                                                                                            }
                                                                                        }
                                                                                    }
                                                                                }
                                                                            }
                                                                        }
                                                                    }
                                                                }
                                                            }
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
        return(item.currentplayers > item.maxplayers || item.currentplayers > 500);
    }