コード例 #1
0
    public void Awake()
    {
        // Do not destroy on scene change.
        DontDestroyOnLoad(gameObject);

        // Tell unity what we are running on; Windows, Mac, Console, Potato...
        Config.ForUnity(Application.platform.ToString());

        new Client(AppID);

        if (Client.Instance == null)
        {
            // Failed to 'start steam'.
            Debug.LogError("Failed to create client instance!");
            return;
        }

        ServerRequest = Client.Instance.ServerList.Internet();
        Client.Instance.Achievements.Refresh();
        Client.Instance.Friends.Refresh();
        Client.Instance.Screenshots.Trigger();

        Client.Instance.Overlay.OpenProfile(Client.Instance.SteamId);

        SteamFriend first = null;

        foreach (SteamFriend f in Client.Instance.Friends.AllFriends)
        {
            if (first == null || Random.value < 0.2f)
            {
                first = f;
            }

            Debug.Log(f.Name + ": " + (f.IsOnline ? "Online" : "Offline") + ", playing: " + f.CurrentAppId);
        }

        Debug.Log("Avatar for " + first.Name);
        Facepunch.Steamworks.Image image = Client.Instance.Friends.GetAvatar(Friends.AvatarSize.Small, first.Id);
        Debug.Log(image.Width + "x" + image.Height + ": " + image.IsLoaded);
        Texture2D tex = new Texture2D(image.Width, image.Height);

        for (int x = 0; x < image.Width; x++)
        {
            for (int y = 0; y < image.Height; y++)
            {
                var c = image.GetPixel(x, (image.Height - 1) - y);
                tex.SetPixel(x, y, new UnityEngine.Color((float)(c.r / 255f), (float)(c.g / 255f), (float)(c.b / 255f), 1f));
            }
        }

        tex.Apply();
        Image.material.mainTexture = tex;
    }
コード例 #2
0
    IEnumerator Start()
    {
        //
        // Wait for client to start up
        //
        while (Client.Instance == null)
        {
            yield return(null);
        }


        Client.Instance.OnAnyCallback += DebugPrintSteamCallback;

        YourAvatar.Fetch(Client.Instance.SteamId);

        //
        // Request a list of servers
        //
        {
            serverRequest = Client.Instance.ServerList.Internet();
        }

        //
        // Request a leaderboard
        //
        {
            leaderBoard = Client.Instance.GetLeaderboard("TestLeaderboard", Client.LeaderboardSortMethod.Ascending, Client.LeaderboardDisplayType.Numeric);
        }

        //
        // Chang to random avatar every 20 seconds, to test callbacks
        //
        while (true)
        {
            ulong steamid = 76561197960279927 + (ulong)UnityEngine.Random.Range(0, 100000);

            foreach (var a in RandomAvatar)
            {
                a.Fetch(steamid);
            }

            yield return(new WaitForSeconds(11));
        }
    }
コード例 #3
0
    void Start()
    {
        //
        // Don't destroy this when loading new scenes
        //
        DontDestroyOnLoad(gameObject);

        //
        // Configure for Unity
        // This is VERY important - call this before
        //
        Facepunch.Steamworks.Config.ForUnity(Application.platform.ToString());

        //
        // Create the steam client using Rust's AppId
        //
        new Facepunch.Steamworks.Client(252490);

        //
        // Make sure we started up okay
        //
        if (Client.Instance == null)
        {
            Debug.LogError("Error starting Steam!");
            return;
        }

        //
        // Request a list of servers
        //
        {
            serverRequest = Client.Instance.ServerList.Internet();
        }

        //
        // Request a leaderboard
        //
        {
            leaderBoard = Client.Instance.GetLeaderboard("TestLeaderboard", Client.LeaderboardSortMethod.Ascending, Client.LeaderboardDisplayType.Numeric);
        }
    }
コード例 #4
0
ファイル: SteamManager.cs プロジェクト: marcelb/Barotrauma
        private static void UpdateServerQuery(ServerList.Request query, Action <Networking.ServerInfo> onServerFound, Action <Networking.ServerInfo> onServerRulesReceived, bool includeUnresponsive)
        {
            IEnumerable <ServerList.Server> servers = includeUnresponsive ?
                                                      new List <ServerList.Server>(query.Responded).Concat(query.Unresponsive) :
                                                      query.Responded;

            foreach (ServerList.Server s in servers)
            {
                if (!ValidateServerInfo(s))
                {
                    continue;
                }

                bool responded = query.Responded.Contains(s);
                if (responded)
                {
                    DebugConsole.Log(s.Name + " responded to server query.");
                }
                else
                {
                    DebugConsole.Log(s.Name + " did not respond to server query.");
                }
                var serverInfo = new ServerInfo()
                {
                    ServerName            = s.Name,
                    Port                  = s.ConnectionPort.ToString(),
                    IP                    = s.Address.ToString(),
                    PlayerCount           = s.Players,
                    MaxPlayers            = s.MaxPlayers,
                    HasPassword           = s.Passworded,
                    RespondedToSteamQuery = responded
                };
                serverInfo.PingChecked = true;
                serverInfo.Ping        = s.Ping;
                if (responded)
                {
                    s.FetchRules();
                }
                s.OnReceivedRules += (bool rulesReceived) =>
                {
                    if (!rulesReceived || s.Rules == null)
                    {
                        return;
                    }

                    if (s.Rules.ContainsKey("message"))
                    {
                        serverInfo.ServerMessage = s.Rules["message"];
                    }
                    if (s.Rules.ContainsKey("version"))
                    {
                        serverInfo.GameVersion = s.Rules["version"];
                    }

                    if (s.Rules.ContainsKey("playercount"))
                    {
                        if (int.TryParse(s.Rules["playercount"], out int playerCount))
                        {
                            serverInfo.PlayerCount = playerCount;
                        }
                    }

                    if (s.Rules.ContainsKey("contentpackage"))
                    {
                        serverInfo.ContentPackageNames.AddRange(s.Rules["contentpackage"].Split(','));
                    }
                    if (s.Rules.ContainsKey("contentpackagehash"))
                    {
                        serverInfo.ContentPackageHashes.AddRange(s.Rules["contentpackagehash"].Split(','));
                    }
                    if (s.Rules.ContainsKey("contentpackageurl"))
                    {
                        serverInfo.ContentPackageWorkshopUrls.AddRange(s.Rules["contentpackageurl"].Split(','));
                    }

                    if (s.Rules.ContainsKey("usingwhitelist"))
                    {
                        serverInfo.UsingWhiteList = s.Rules["usingwhitelist"] == "True";
                    }
                    if (s.Rules.ContainsKey("modeselectionmode"))
                    {
                        if (Enum.TryParse(s.Rules["modeselectionmode"], out SelectionMode selectionMode))
                        {
                            serverInfo.ModeSelectionMode = selectionMode;
                        }
                    }
                    if (s.Rules.ContainsKey("subselectionmode"))
                    {
                        if (Enum.TryParse(s.Rules["subselectionmode"], out SelectionMode selectionMode))
                        {
                            serverInfo.SubSelectionMode = selectionMode;
                        }
                    }
                    if (s.Rules.ContainsKey("allowspectating"))
                    {
                        serverInfo.AllowSpectating = s.Rules["allowspectating"] == "True";
                    }
                    if (s.Rules.ContainsKey("allowrespawn"))
                    {
                        serverInfo.AllowRespawn = s.Rules["allowrespawn"] == "True";
                    }
                    if (s.Rules.ContainsKey("voicechatenabled"))
                    {
                        serverInfo.VoipEnabled = s.Rules["voicechatenabled"] == "True";
                    }
                    if (s.Rules.ContainsKey("traitors"))
                    {
                        if (Enum.TryParse(s.Rules["traitors"], out YesNoMaybe traitorsEnabled))
                        {
                            serverInfo.TraitorsEnabled = traitorsEnabled;
                        }
                    }

                    if (s.Rules.ContainsKey("gamestarted"))
                    {
                        serverInfo.GameStarted = s.Rules["gamestarted"] == "True";
                    }

                    if (serverInfo.ContentPackageNames.Count != serverInfo.ContentPackageHashes.Count ||
                        serverInfo.ContentPackageHashes.Count != serverInfo.ContentPackageWorkshopUrls.Count)
                    {
                        //invalid contentpackage info
                        serverInfo.ContentPackageNames.Clear();
                        serverInfo.ContentPackageHashes.Clear();
                    }
                    onServerRulesReceived(serverInfo);
                };

                onServerFound(serverInfo);
            }
            query.Responded.Clear();
        }