D:\ValheimDev\Dumps\Old\assembly_valheim\MasterClient.cs D:\ValheimDev\Dumps\Latest\assembly_valheim\MasterClient.cs
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using UnityEngine; using UnityEngine;
   
public class MasterClient public class MasterClient
{ {
    public static MasterClient instance     public static MasterClient instance
    {     {
        get         get
        {         {
            return MasterClient.m_instance;             return MasterClient.m_instance;
        }         }
    }     }
   
    public static void Initialize()     public static void Initialize()
    {     {
        if (MasterClient.m_instance == null)         if (MasterClient.m_instance == null)
        {         {
            MasterClient.m_instance = new MasterClient();             MasterClient.m_instance = new MasterClient();
        }         }
    }     }
   
    public MasterClient()     public MasterClient()
    {     {
        this.m_sessionUID = Utils.GenerateUID();         this.m_sessionUID = Utils.GenerateUID();
    }     }
   
    public void Dispose()     public void Dispose()
    {     {
        if (this.m_socket != null)         if (this.m_socket != null)
        {         {
            this.m_socket.Dispose();             this.m_socket.Dispose();
        }         }
        if (this.m_connector != null)         if (this.m_connector != null)
        {         {
            this.m_connector.Dispose();             this.m_connector.Dispose();
        }         }
        if (this.m_rpc != null)         if (this.m_rpc != null)
        {         {
            this.m_rpc.Dispose();             this.m_rpc.Dispose();
        }         }
        if (MasterClient.m_instance == this)         if (MasterClient.m_instance == this)
        {         {
            MasterClient.m_instance = null;             MasterClient.m_instance = null;
        }         }
    }     }
   
    public void Update(float dt)     public void Update(float dt)
    {     {
    }     }
   
    private void SendStats(float duration)     private void SendStats(float duration)
    {     {
        ZPackage zpackage = new ZPackage();         ZPackage zpackage = new ZPackage();
        zpackage.Write(2);         zpackage.Write(2);
        zpackage.Write(this.m_sessionUID);         zpackage.Write(this.m_sessionUID);
        zpackage.Write(Time.time);         zpackage.Write(Time.time);
        bool flag = Player.m_localPlayer != null;         bool flag = Player.m_localPlayer != null;
        zpackage.Write(flag ? duration : 0f);         zpackage.Write(flag ? duration : 0f);
        bool flag2 = ZNet.instance && !ZNet.instance.IsServer();         bool flag2 = ZNet.instance && !ZNet.instance.IsServer();
        zpackage.Write(flag2 ? duration : 0f);         zpackage.Write(flag2 ? duration : 0f);
        zpackage.Write(global::Version.CurrentVersion.ToString());         zpackage.Write(global::Version.CurrentVersion.ToString());
.        zpackage.Write(23U);         zpackage.Write(27U);
        bool flag3 = ZNet.instance && ZNet.instance.IsServer();         bool flag3 = ZNet.instance && ZNet.instance.IsServer();
        zpackage.Write(flag3);         zpackage.Write(flag3);
        if (flag3)         if (flag3)
        {         {
            zpackage.Write(ZNet.instance.GetWorldUID());             zpackage.Write(ZNet.instance.GetWorldUID());
            zpackage.Write(duration);             zpackage.Write(duration);
            int num = ZNet.instance.GetPeerConnections();             int num = ZNet.instance.GetPeerConnections();
            if (Player.m_localPlayer != null)             if (Player.m_localPlayer != null)
            {             {
                num++;                 num++;
            }             }
            zpackage.Write(num);             zpackage.Write(num);
            bool flag4 = ZNet.instance.GetZNat() != null && ZNet.instance.GetZNat().GetStatus();             bool flag4 = ZNet.instance.GetZNat() != null && ZNet.instance.GetZNat().GetStatus();
            zpackage.Write(flag4);             zpackage.Write(flag4);
        }         }
        PlayerProfile playerProfile = ((Game.instance != null) ? Game.instance.GetPlayerProfile() : null);         PlayerProfile playerProfile = ((Game.instance != null) ? Game.instance.GetPlayerProfile() : null);
        if (playerProfile != null)         if (playerProfile != null)
        {         {
            zpackage.Write(true);             zpackage.Write(true);
            zpackage.Write(playerProfile.GetPlayerID());             zpackage.Write(playerProfile.GetPlayerID());
            zpackage.Write(105);             zpackage.Write(105);
            for (int i = 0; i < 105; i++)             for (int i = 0; i < 105; i++)
            {             {
                zpackage.Write(playerProfile.m_playerStats.m_stats[(PlayerStatType)i]);                 zpackage.Write(playerProfile.m_playerStats.m_stats[(PlayerStatType)i]);
            }             }
            zpackage.Write(playerProfile.m_usedCheats);             zpackage.Write(playerProfile.m_usedCheats);
            zpackage.Write(new DateTimeOffset(playerProfile.m_dateCreated).ToUnixTimeSeconds());             zpackage.Write(new DateTimeOffset(playerProfile.m_dateCreated).ToUnixTimeSeconds());
            zpackage.Write(playerProfile.m_knownWorlds.Count);             zpackage.Write(playerProfile.m_knownWorlds.Count);
            foreach (KeyValuePair<string, float> keyValuePair in playerProfile.m_knownWorlds)             foreach (KeyValuePair<string, float> keyValuePair in playerProfile.m_knownWorlds)
            {             {
                zpackage.Write(keyValuePair.Key);                 zpackage.Write(keyValuePair.Key);
                zpackage.Write(keyValuePair.Value);                 zpackage.Write(keyValuePair.Value);
            }             }
            zpackage.Write(playerProfile.m_knownWorldKeys.Count);             zpackage.Write(playerProfile.m_knownWorldKeys.Count);
            foreach (KeyValuePair<string, float> keyValuePair2 in playerProfile.m_knownWorldKeys)             foreach (KeyValuePair<string, float> keyValuePair2 in playerProfile.m_knownWorldKeys)
            {             {
                zpackage.Write(keyValuePair2.Key);                 zpackage.Write(keyValuePair2.Key);
                zpackage.Write(keyValuePair2.Value);                 zpackage.Write(keyValuePair2.Value);
            }             }
            zpackage.Write(playerProfile.m_knownCommands.Count);             zpackage.Write(playerProfile.m_knownCommands.Count);
            using (Dictionary<string, float>.Enumerator enumerator = playerProfile.m_knownCommands.GetEnumerator())             using (Dictionary<string, float>.Enumerator enumerator = playerProfile.m_knownCommands.GetEnumerator())
            {             {
                while (enumerator.MoveNext())                 while (enumerator.MoveNext())
                {                 {
                    KeyValuePair<string, float> keyValuePair3 = enumerator.Current;                     KeyValuePair<string, float> keyValuePair3 = enumerator.Current;
                    zpackage.Write(keyValuePair3.Key);                     zpackage.Write(keyValuePair3.Key);
                    zpackage.Write(keyValuePair3.Value);                     zpackage.Write(keyValuePair3.Value);
                }                 }
                goto IL_2CD;                 goto IL_2CD;
            }             }
        }         }
        zpackage.Write(false);         zpackage.Write(false);
        IL_2CD:         IL_2CD:
        this.m_rpc.Invoke("Stats", new object[] { zpackage });         this.m_rpc.Invoke("Stats", new object[] { zpackage });
    }     }
   
    public void RegisterServer(string name, string host, int port, bool password, bool upnp, long worldUID, GameVersion gameVersion, uint networkVersion, List<string> modifiers)     public void RegisterServer(string name, string host, int port, bool password, bool upnp, long worldUID, GameVersion gameVersion, uint networkVersion, List<string> modifiers)
    {     {
        this.m_registerPkg = new ZPackage();         this.m_registerPkg = new ZPackage();
        this.m_registerPkg.Write(1);         this.m_registerPkg.Write(1);
        this.m_registerPkg.Write(name);         this.m_registerPkg.Write(name);
        this.m_registerPkg.Write(host);         this.m_registerPkg.Write(host);
        this.m_registerPkg.Write(port);         this.m_registerPkg.Write(port);
        this.m_registerPkg.Write(password);         this.m_registerPkg.Write(password);
        this.m_registerPkg.Write(upnp);         this.m_registerPkg.Write(upnp);
        this.m_registerPkg.Write(worldUID);         this.m_registerPkg.Write(worldUID);
        this.m_registerPkg.Write(gameVersion.ToString());         this.m_registerPkg.Write(gameVersion.ToString());
        this.m_registerPkg.Write(networkVersion);         this.m_registerPkg.Write(networkVersion);
        this.m_registerPkg.Write(StringUtils.EncodeStringListAsString(modifiers, true));         this.m_registerPkg.Write(StringUtils.EncodeStringListAsString(modifiers, true));
        if (this.m_rpc != null)         if (this.m_rpc != null)
        {         {
            this.m_rpc.Invoke("RegisterServer2", new object[] { this.m_registerPkg });             this.m_rpc.Invoke("RegisterServer2", new object[] { this.m_registerPkg });
        }         }
        ZLog.Log(string.Concat(new string[]         ZLog.Log(string.Concat(new string[]
        {         {
            "Registering server ",             "Registering server ",
            name,             name,
            "  ",             "  ",
            host,             host,
            ":",             ":",
            port.ToString()             port.ToString()
        }));         }));
    }     }
   
    public void UnregisterServer()     public void UnregisterServer()
    {     {
        if (this.m_registerPkg == null)         if (this.m_registerPkg == null)
        {         {
            return;             return;
        }         }
        if (this.m_rpc != null)         if (this.m_rpc != null)
        {         {
            this.m_rpc.Invoke("UnregisterServer", Array.Empty<object>());             this.m_rpc.Invoke("UnregisterServer", Array.Empty<object>());
        }         }
        this.m_registerPkg = null;         this.m_registerPkg = null;
    }     }
   
    public List<ServerStatus> GetServers()     public List<ServerStatus> GetServers()
    {     {
        return this.m_servers;         return this.m_servers;
    }     }
   
    public bool GetServers(List<ServerStatus> servers)     public bool GetServers(List<ServerStatus> servers)
    {     {
        if (!this.m_haveServerlist)         if (!this.m_haveServerlist)
        {         {
            return false;             return false;
        }         }
        servers.Clear();         servers.Clear();
        servers.AddRange(this.m_servers);         servers.AddRange(this.m_servers);
        return true;         return true;
    }     }
   
    public void RequestServerlist()     public void RequestServerlist()
    {     {
        if (this.m_rpc != null)         if (this.m_rpc != null)
        {         {
            this.m_rpc.Invoke("RequestServerlist2", Array.Empty<object>());             this.m_rpc.Invoke("RequestServerlist2", Array.Empty<object>());
        }         }
    }     }
   
    private void RPC_ServerList(ZRpc rpc, ZPackage pkg)     private void RPC_ServerList(ZRpc rpc, ZPackage pkg)
    {     {
        this.m_haveServerlist = true;         this.m_haveServerlist = true;
        this.m_serverListRevision++;         this.m_serverListRevision++;
        pkg.ReadInt();         pkg.ReadInt();
        int num = pkg.ReadInt();         int num = pkg.ReadInt();
        this.m_servers.Clear();         this.m_servers.Clear();
        for (int i = 0; i < num; i++)         for (int i = 0; i < num; i++)
        {         {
            string text = pkg.ReadString();             string text = pkg.ReadString();
            string text2 = pkg.ReadString();             string text2 = pkg.ReadString();
            int num2 = pkg.ReadInt();             int num2 = pkg.ReadInt();
            bool flag = pkg.ReadBool();             bool flag = pkg.ReadBool();
            pkg.ReadBool();             pkg.ReadBool();
            pkg.ReadLong();             pkg.ReadLong();
            string text3 = pkg.ReadString();             string text3 = pkg.ReadString();
            uint num3 = 0U;             uint num3 = 0U;
            GameVersion gameVersion;             GameVersion gameVersion;
            if (GameVersion.TryParseGameVersion(text3, out gameVersion) && gameVersion >= global::Version.FirstVersionWithNetworkVersion)             if (GameVersion.TryParseGameVersion(text3, out gameVersion) && gameVersion >= global::Version.FirstVersionWithNetworkVersion)
            {             {
                num3 = pkg.ReadUInt();                 num3 = pkg.ReadUInt();
            }             }
            int num4 = pkg.ReadInt();             int num4 = pkg.ReadInt();
            List<string> list = new List<string>();             List<string> list = new List<string>();
            if (gameVersion >= global::Version.FirstVersionWithModifiers)             if (gameVersion >= global::Version.FirstVersionWithModifiers)
            {             {
                StringUtils.TryDecodeStringAsICollection<List<string>>(pkg.ReadString(), out list);                 StringUtils.TryDecodeStringAsICollection<List<string>>(pkg.ReadString(), out list);
            }             }
            ServerStatus serverStatus = new ServerStatus(new ServerJoinDataDedicated(text2 + ":" + num2.ToString()));             ServerStatus serverStatus = new ServerStatus(new ServerJoinDataDedicated(text2 + ":" + num2.ToString()));
            serverStatus.UpdateStatus(OnlineStatus.Online, text, (uint)num4, gameVersion, list, num3, flag, PrivilegeManager.Platform.None, serverStatus.m_hostId, true);             serverStatus.UpdateStatus(OnlineStatus.Online, text, (uint)num4, gameVersion, list, num3, flag, PrivilegeManager.Platform.None, serverStatus.m_hostId, true);
            if (this.m_nameFilter.Length <= 0 || serverStatus.m_joinData.m_serverName.Contains(this.m_nameFilter))             if (this.m_nameFilter.Length <= 0 || serverStatus.m_joinData.m_serverName.Contains(this.m_nameFilter))
            {             {
                this.m_servers.Add(serverStatus);                 this.m_servers.Add(serverStatus);
            }             }
        }         }
        if (this.m_onServerList != null)         if (this.m_onServerList != null)
        {         {
            this.m_onServerList(this.m_servers);             this.m_onServerList(this.m_servers);
        }         }
    }     }
   
    public int GetServerListRevision()     public int GetServerListRevision()
    {     {
        return this.m_serverListRevision;         return this.m_serverListRevision;
    }     }
   
    public bool IsConnected()     public bool IsConnected()
    {     {
        return this.m_rpc != null;         return this.m_rpc != null;
    }     }
   
    public void SetNameFilter(string filter)     public void SetNameFilter(string filter)
    {     {
        this.m_nameFilter = filter;         this.m_nameFilter = filter;
        ZLog.Log("filter is " + filter);         ZLog.Log("filter is " + filter);
    }     }
   
    private const int statVersion = 2;     private const int statVersion = 2;
   
    public Action<List<ServerStatus>> m_onServerList;     public Action<List<ServerStatus>> m_onServerList;
   
    private string m_msHost = "dvoid.noip.me";     private string m_msHost = "dvoid.noip.me";
   
    private int m_msPort = 9983;     private int m_msPort = 9983;
   
    private long m_sessionUID;     private long m_sessionUID;
   
    private ZConnector2 m_connector;     private ZConnector2 m_connector;
   
    private ZSocket2 m_socket;     private ZSocket2 m_socket;
   
    private ZRpc m_rpc;     private ZRpc m_rpc;
   
    private bool m_haveServerlist;     private bool m_haveServerlist;
   
    private List<ServerStatus> m_servers = new List<ServerStatus>();     private List<ServerStatus> m_servers = new List<ServerStatus>();
   
    private ZPackage m_registerPkg;     private ZPackage m_registerPkg;
   
    private float m_sendStatsTimer;     private float m_sendStatsTimer;
   
    private int m_serverListRevision;     private int m_serverListRevision;
   
    private string m_nameFilter = "";     private string m_nameFilter = "";
   
    private static MasterClient m_instance;     private static MasterClient m_instance;
} }