/// <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); }
/// <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); }