diff --git a/rpcs3/Emu/NP/generated/np2_structs.fbs b/rpcs3/Emu/NP/generated/np2_structs.fbs index 634d3fe6b8..ae1d9b0b86 100644 --- a/rpcs3/Emu/NP/generated/np2_structs.fbs +++ b/rpcs3/Emu/NP/generated/np2_structs.fbs @@ -478,6 +478,7 @@ table TusDeleteMultiSlotDataRequest { table SetPresenceRequest { title:string; + title_id:string; status:string; comment:string; data:[uint8]; diff --git a/rpcs3/Emu/NP/generated/np2_structs_generated.h b/rpcs3/Emu/NP/generated/np2_structs_generated.h index a31fc0c9c4..25299d521d 100644 --- a/rpcs3/Emu/NP/generated/np2_structs_generated.h +++ b/rpcs3/Emu/NP/generated/np2_structs_generated.h @@ -6102,13 +6102,17 @@ struct SetPresenceRequest FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table typedef SetPresenceRequestBuilder Builder; enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE { VT_TITLE = 4, - VT_STATUS = 6, - VT_COMMENT = 8, - VT_DATA = 10 + VT_TITLE_ID = 6, + VT_STATUS = 8, + VT_COMMENT = 10, + VT_DATA = 12 }; const ::flatbuffers::String *title() const { return GetPointer(VT_TITLE); } + const ::flatbuffers::String *title_id() const { + return GetPointer(VT_TITLE_ID); + } const ::flatbuffers::String *status() const { return GetPointer(VT_STATUS); } @@ -6122,6 +6126,8 @@ struct SetPresenceRequest FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table return VerifyTableStart(verifier) && VerifyOffset(verifier, VT_TITLE) && verifier.VerifyString(title()) && + VerifyOffset(verifier, VT_TITLE_ID) && + verifier.VerifyString(title_id()) && VerifyOffset(verifier, VT_STATUS) && verifier.VerifyString(status()) && VerifyOffset(verifier, VT_COMMENT) && @@ -6139,6 +6145,9 @@ struct SetPresenceRequestBuilder { void add_title(::flatbuffers::Offset<::flatbuffers::String> title) { fbb_.AddOffset(SetPresenceRequest::VT_TITLE, title); } + void add_title_id(::flatbuffers::Offset<::flatbuffers::String> title_id) { + fbb_.AddOffset(SetPresenceRequest::VT_TITLE_ID, title_id); + } void add_status(::flatbuffers::Offset<::flatbuffers::String> status) { fbb_.AddOffset(SetPresenceRequest::VT_STATUS, status); } @@ -6162,6 +6171,7 @@ struct SetPresenceRequestBuilder { inline ::flatbuffers::Offset CreateSetPresenceRequest( ::flatbuffers::FlatBufferBuilder &_fbb, ::flatbuffers::Offset<::flatbuffers::String> title = 0, + ::flatbuffers::Offset<::flatbuffers::String> title_id = 0, ::flatbuffers::Offset<::flatbuffers::String> status = 0, ::flatbuffers::Offset<::flatbuffers::String> comment = 0, ::flatbuffers::Offset<::flatbuffers::Vector> data = 0) { @@ -6169,6 +6179,7 @@ inline ::flatbuffers::Offset CreateSetPresenceRequest( builder_.add_data(data); builder_.add_comment(comment); builder_.add_status(status); + builder_.add_title_id(title_id); builder_.add_title(title); return builder_.Finish(); } @@ -6176,16 +6187,19 @@ inline ::flatbuffers::Offset CreateSetPresenceRequest( inline ::flatbuffers::Offset CreateSetPresenceRequestDirect( ::flatbuffers::FlatBufferBuilder &_fbb, const char *title = nullptr, + const char *title_id = nullptr, const char *status = nullptr, const char *comment = nullptr, const std::vector *data = nullptr) { auto title__ = title ? _fbb.CreateString(title) : 0; + auto title_id__ = title_id ? _fbb.CreateString(title_id) : 0; auto status__ = status ? _fbb.CreateString(status) : 0; auto comment__ = comment ? _fbb.CreateString(comment) : 0; auto data__ = data ? _fbb.CreateVector(*data) : 0; return CreateSetPresenceRequest( _fbb, title__, + title_id__, status__, comment__, data__); diff --git a/rpcs3/Emu/NP/np_handler.cpp b/rpcs3/Emu/NP/np_handler.cpp index e3eafc7b9d..4f869c4152 100644 --- a/rpcs3/Emu/NP/np_handler.cpp +++ b/rpcs3/Emu/NP/np_handler.cpp @@ -881,6 +881,10 @@ namespace np presence_self.pr_com_id = *context; presence_self.pr_title = fmt::truncate(Emu.GetTitle(), SCE_NP_BASIC_PRESENCE_TITLE_SIZE_MAX - 1); + if (!Emu.GetTitleID().empty()) + { + presence_self.pr_title_id = Emu.GetTitleID(); + } } if (g_cfg.net.psn_status != np_psn_status::psn_rpcn || !is_psn_active) diff --git a/rpcs3/Emu/NP/np_handler.h b/rpcs3/Emu/NP/np_handler.h index 8b6f2f7110..16f170f5b7 100644 --- a/rpcs3/Emu/NP/np_handler.h +++ b/rpcs3/Emu/NP/np_handler.h @@ -509,6 +509,7 @@ namespace np { SceNpCommunicationId pr_com_id; std::string pr_title; + std::string pr_title_id; std::string pr_status; std::string pr_comment; std::vector pr_data; diff --git a/rpcs3/Emu/NP/rpcn_client.cpp b/rpcs3/Emu/NP/rpcn_client.cpp index ac23dcca18..992c721642 100644 --- a/rpcs3/Emu/NP/rpcn_client.cpp +++ b/rpcs3/Emu/NP/rpcn_client.cpp @@ -2205,10 +2205,10 @@ namespace rpcn return forge_request_with_com_id(builder, communication_id, CommandType::TusDeleteMultiSlotData, req_id); } - bool rpcn_client::send_presence(const SceNpCommunicationId& pr_com_id, const std::string& pr_title, const std::string& pr_status, const std::string& pr_comment, const std::vector& pr_data) + bool rpcn_client::send_presence(const SceNpCommunicationId& pr_com_id, const std::string& pr_title, const std::string& pr_title_id, const std::string& pr_status, const std::string& pr_comment, const std::vector& pr_data) { flatbuffers::FlatBufferBuilder builder(1024); - auto req_finished = CreateSetPresenceRequest(builder, builder.CreateString(pr_title), builder.CreateString(pr_status), builder.CreateString(pr_comment), builder.CreateVector(pr_data)); + auto req_finished = CreateSetPresenceRequest(builder, builder.CreateString(pr_title), builder.CreateString(pr_title_id), builder.CreateString(pr_status), builder.CreateString(pr_comment), builder.CreateVector(pr_data)); builder.Finish(req_finished); return forge_request_with_com_id(builder, pr_com_id, CommandType::SetPresence, rpcn_request_counter.fetch_add(1)); diff --git a/rpcs3/Emu/NP/rpcn_client.h b/rpcs3/Emu/NP/rpcn_client.h index 4f772f04c4..736d91a936 100644 --- a/rpcs3/Emu/NP/rpcn_client.h +++ b/rpcs3/Emu/NP/rpcn_client.h @@ -515,7 +515,7 @@ namespace rpcn bool tus_get_multiuser_data_status(u32 req_id, SceNpCommunicationId& communication_id, const std::vector& targetNpIdArray, SceNpTusSlotId slotId, s32 arrayNum, bool vuser); bool tus_get_friends_data_status(u32 req_id, SceNpCommunicationId& communication_id, SceNpTusSlotId slotId, bool includeSelf, s32 sortType, s32 arrayNum); bool tus_delete_multislot_data(u32 req_id, SceNpCommunicationId& communication_id, const SceNpOnlineId& targetNpId, vm::cptr slotIdArray, s32 arrayNum, bool vuser); - bool send_presence(const SceNpCommunicationId& pr_com_id, const std::string& pr_title, const std::string& pr_status, const std::string& pr_comment, const std::vector& pr_data); + bool send_presence(const SceNpCommunicationId& pr_com_id, const std::string& pr_title, const std::string& pr_title_id, const std::string& pr_status, const std::string& pr_comment, const std::vector& pr_data); bool createjoin_room_gui(u32 req_id, const SceNpCommunicationId& communication_id, const SceNpMatchingAttr* attr_list); bool join_room_gui(u32 req_id, const SceNpRoomId& room_id); bool leave_room_gui(u32 req_id, const SceNpRoomId& room_id);