Beispiel #1
0
        /// <summary>
        /// Uploads rich presence for a variety of situations.
        /// <param name="inp">Type of RP event to upload.</param>
        /// </summary>
        public void UploadRichPresence(RPType inp = RPType.Auto)
        {
            if (inp == RPType.Auto)
            {
                if (!Ready) inp = RPType.None;
                else if (Lobby != null && Lobby.state == CSODOTALobby.State.RUN) inp = RPType.Play;
                else inp = RPType.Init;
            }

            // Update rich presence
            var kv = new KeyValue("RP");
            switch (inp)
            {
                case RPType.None:
                    break;
                // todo: implement playing rich presence
                case RPType.Play:
                case RPType.Queue:
                case RPType.Init:
                    kv.Children.Add(new KeyValue("status", "#DOTA_RP_INIT"));
                    kv.Children.Add(new KeyValue("num_params", "0"));
                    kv.Children.Add(new KeyValue("engine", ((uint) Engine).ToString()));
                    if (Lobby != null)
                        kv.Children.Add(new KeyValue("lobby",
                            "lobby_id: " + Lobby.lobby_id + " lobby_state: " + Lobby.state.ToString("G") + " password: "******"false" : "true") + " game_mode: " +
                            ((DOTA_GameMode) Lobby.game_mode).ToString("G") + " member_count: " + Lobby.members.Count +
                            " max_member_count: " + (Lobby.custom_max_players == 0 ? 10 : Lobby.custom_max_players) +
                            " name: \"" + Lobby.game_name + "\""));
                    break;
            }
            var rpup = new ClientMsgProtobuf<CMsgClientRichPresenceUpload>(EMsg.ClientRichPresenceUpload);
            using (var ms = new MemoryStream())
            {
                kv.SaveToStream(ms, true);
                rpup.Body.rich_presence_kv = ms.ToArray();
            }
            var friends = Client.GetHandler<SteamFriends>();
            for (var i = 0; i < friends.GetFriendCount(); i++)
            {
                var sid = friends.GetFriendByIndex(i);
                var relationship = friends.GetFriendRelationship(sid);
                if (relationship == EFriendRelationship.Friend &&
                    friends.GetFriendGamePlayed(sid) == (new GameID((uint) GameID)))
                    rpup.Body.steamid_broadcast.Add(sid.ConvertToUInt64());
            }
            Client.Send(rpup);
        }
Beispiel #2
0
        /// <summary>
        /// Uploads rich presence for a variety of situations.
        /// <param name="inp">Type of RP event to upload.</param>
        /// </summary>
        public void UploadRichPresence(RPType inp = RPType.Auto)
        {
            if (inp == RPType.Auto)
            {
                if (!Ready)
                {
                    inp = RPType.None;
                }
                else if (Lobby != null && Lobby.state == CSODOTALobby.State.RUN)
                {
                    inp = RPType.Play;
                }
                else
                {
                    inp = RPType.Auto;
                }
            }

            // Update rich presence
            var kv = new KeyValue("RP");

            switch (inp)
            {
            case RPType.None:
                break;

            // todo: implement playing rich presence
            case RPType.Play:
            case RPType.Queue:
            case RPType.Init:
                kv.Children.Add(new KeyValue("status", "#DOTA_RP_INIT"));
                kv.Children.Add(new KeyValue("num_params", "0"));
                kv.Children.Add(new KeyValue("engine", ((uint)Engine).ToString()));
                if (Lobby != null)
                {
                    kv.Children.Add(new KeyValue("lobby",
                                                 "lobby_id: " + Lobby.lobby_id + " lobby_state: " + Lobby.state.ToString("G") + " password: "******"false" : "true") + " game_mode: " +
                                                 ((DOTA_GameMode)Lobby.game_mode).ToString("G") + " member_count: " + Lobby.members.Count +
                                                 " max_member_count: " + (Lobby.custom_max_players == 0 ? 10 : Lobby.custom_max_players) +
                                                 " name: \"" + Lobby.game_name + "\""));
                }
                break;
            }
            var rpup = new ClientMsgProtobuf <CMsgClientRichPresenceUpload>(EMsg.ClientRichPresenceUpload);

            using (var ms = new MemoryStream())
            {
                kv.SaveToStream(ms, true);
                rpup.Body.rich_presence_kv = ms.ToArray();
            }
            var friends = Client.GetHandler <SteamFriends>();

            for (var i = 0; i < friends.GetFriendCount(); i++)
            {
                var sid          = friends.GetFriendByIndex(i);
                var relationship = friends.GetFriendRelationship(sid);
                if (relationship == EFriendRelationship.Friend &&
                    friends.GetFriendGamePlayed(sid) == (new GameID((uint)GameID)))
                {
                    rpup.Body.steamid_broadcast.Add(sid.ConvertToUInt64());
                }
            }
            Client.Send(rpup);
        }