mirror of
https://git.ryujinx.app/projects/Kenji-NX.git
synced 2026-09-20 17:51:13 +02:00
HLE: Implement 10106 and 10107 in IPrepoService
In some games using newer SDK (e.g. Splatoon 3 11.0.0), when `nn::prepo::PlayReport::SetOptInCheckEnabled` is set to False, `nn::prepo::PlayReport::Save` will call `IPrepoService:10106` (SaveReport) and `IPrepoService:10107` (SaveReportWithUser) instead of 10104 (SaveReportOld) and 10105 (SaveReportWithUserOld). A new param (optInCheckEnabled) is added in 10106/10107 compare to 10104/10105. This should fix missing service error for Splatoon 3 11.0.0 and other games using newer SDK and has set `nn::prepo::PlayReport::SetOptInCheckEnabled` to False.
This commit is contained in:
@@ -39,7 +39,20 @@ namespace Ryujinx.Horizon.Prepo.Ipc
|
|||||||
[CmifCommand(10100)] // 1.0.0-5.1.0
|
[CmifCommand(10100)] // 1.0.0-5.1.0
|
||||||
[CmifCommand(10102)] // 6.0.0-9.2.0
|
[CmifCommand(10102)] // 6.0.0-9.2.0
|
||||||
[CmifCommand(10104)] // 10.0.0+
|
[CmifCommand(10104)] // 10.0.0+
|
||||||
public Result SaveReport([Buffer(HipcBufferFlags.In | HipcBufferFlags.Pointer)] ReadOnlySpan<byte> gameRoomBuffer, [Buffer(HipcBufferFlags.In | HipcBufferFlags.MapAlias)] ReadOnlySpan<byte> reportBuffer, [ClientProcessId] ulong pid)
|
public Result SaveReportOld([Buffer(HipcBufferFlags.In | HipcBufferFlags.Pointer)] ReadOnlySpan<byte> gameRoomBuffer, [Buffer(HipcBufferFlags.In | HipcBufferFlags.MapAlias)] ReadOnlySpan<byte> reportBuffer, [ClientProcessId] ulong pid)
|
||||||
|
{
|
||||||
|
if ((_permissionLevel & PrepoServicePermissionLevel.User) == 0)
|
||||||
|
{
|
||||||
|
return PrepoResult.PermissionDenied;
|
||||||
|
}
|
||||||
|
|
||||||
|
ProcessPlayReport(PlayReportKind.Normal, gameRoomBuffer, reportBuffer, pid, Uid.Null);
|
||||||
|
|
||||||
|
return Result.Success;
|
||||||
|
}
|
||||||
|
|
||||||
|
[CmifCommand(10106)] // 21.0.0+
|
||||||
|
public Result SaveReport([Buffer(HipcBufferFlags.In | HipcBufferFlags.Pointer)] ReadOnlySpan<byte> gameRoomBuffer, [Buffer(HipcBufferFlags.In | HipcBufferFlags.MapAlias)] ReadOnlySpan<byte> reportBuffer, [ClientProcessId] ulong pid, bool optInCheckEnabled)
|
||||||
{
|
{
|
||||||
if ((_permissionLevel & PrepoServicePermissionLevel.User) == 0)
|
if ((_permissionLevel & PrepoServicePermissionLevel.User) == 0)
|
||||||
{
|
{
|
||||||
@@ -54,7 +67,20 @@ namespace Ryujinx.Horizon.Prepo.Ipc
|
|||||||
[CmifCommand(10101)] // 1.0.0-5.1.0
|
[CmifCommand(10101)] // 1.0.0-5.1.0
|
||||||
[CmifCommand(10103)] // 6.0.0-9.2.0
|
[CmifCommand(10103)] // 6.0.0-9.2.0
|
||||||
[CmifCommand(10105)] // 10.0.0+
|
[CmifCommand(10105)] // 10.0.0+
|
||||||
public Result SaveReportWithUser(Uid userId, [Buffer(HipcBufferFlags.In | HipcBufferFlags.Pointer)] ReadOnlySpan<byte> gameRoomBuffer, [Buffer(HipcBufferFlags.In | HipcBufferFlags.MapAlias)] ReadOnlySpan<byte> reportBuffer, [ClientProcessId] ulong pid)
|
public Result SaveReportWithUserOld(Uid userId, [Buffer(HipcBufferFlags.In | HipcBufferFlags.Pointer)] ReadOnlySpan<byte> gameRoomBuffer, [Buffer(HipcBufferFlags.In | HipcBufferFlags.MapAlias)] ReadOnlySpan<byte> reportBuffer, [ClientProcessId] ulong pid)
|
||||||
|
{
|
||||||
|
if ((_permissionLevel & PrepoServicePermissionLevel.User) == 0)
|
||||||
|
{
|
||||||
|
return PrepoResult.PermissionDenied;
|
||||||
|
}
|
||||||
|
|
||||||
|
ProcessPlayReport(PlayReportKind.Normal, gameRoomBuffer, reportBuffer, pid, userId, true);
|
||||||
|
|
||||||
|
return Result.Success;
|
||||||
|
}
|
||||||
|
|
||||||
|
[CmifCommand(10107)] // 21.0.0+
|
||||||
|
public Result SaveReportWithUser(Uid userId, [Buffer(HipcBufferFlags.In | HipcBufferFlags.Pointer)] ReadOnlySpan<byte> gameRoomBuffer, [Buffer(HipcBufferFlags.In | HipcBufferFlags.MapAlias)] ReadOnlySpan<byte> reportBuffer, [ClientProcessId] ulong pid, bool optInCheckEnabled)
|
||||||
{
|
{
|
||||||
if ((_permissionLevel & PrepoServicePermissionLevel.User) == 0)
|
if ((_permissionLevel & PrepoServicePermissionLevel.User) == 0)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -8,8 +8,10 @@ namespace Ryujinx.Horizon.Sdk.Prepo
|
|||||||
{
|
{
|
||||||
interface IPrepoService : IServiceObject
|
interface IPrepoService : IServiceObject
|
||||||
{
|
{
|
||||||
Result SaveReport(ReadOnlySpan<byte> gameRoomBuffer, ReadOnlySpan<byte> reportBuffer, ulong pid);
|
Result SaveReportOld(ReadOnlySpan<byte> gameRoomBuffer, ReadOnlySpan<byte> reportBuffer, ulong pid);
|
||||||
Result SaveReportWithUser(Uid userId, ReadOnlySpan<byte> gameRoomBuffer, ReadOnlySpan<byte> reportBuffer, ulong pid);
|
Result SaveReport(ReadOnlySpan<byte> gameRoomBuffer, ReadOnlySpan<byte> reportBuffer, ulong pid, bool optInCheckEnabled);
|
||||||
|
Result SaveReportWithUserOld(Uid userId, ReadOnlySpan<byte> gameRoomBuffer, ReadOnlySpan<byte> reportBuffer, ulong pid);
|
||||||
|
Result SaveReportWithUser(Uid userId, ReadOnlySpan<byte> gameRoomBuffer, ReadOnlySpan<byte> reportBuffer, ulong pid, bool optInCheckEnabled);
|
||||||
Result RequestImmediateTransmission();
|
Result RequestImmediateTransmission();
|
||||||
Result GetTransmissionStatus(out int status);
|
Result GetTransmissionStatus(out int status);
|
||||||
Result GetSystemSessionId(out ulong systemSessionId);
|
Result GetSystemSessionId(out ulong systemSessionId);
|
||||||
|
|||||||
Reference in New Issue
Block a user