fix: nested room-details objects carry only keys the client reads

Extends the parity check into the payload's nested objects — sub-room 0, the
first role, stats and the first tag each have their own generated reader, and a
key set that disagrees with one of those breaks the room just as hard as a
wrong top-level set.

It immediately found seven invented keys. Six on every sub-room (CurrentSave,
DefaultMatchmakingPolicy, LastModeratedSaveModerationState, ShouldAutoStageSaves,
StagedSubRoomDataSaveId, SubRoomUnityAssetId) and IsPrimaryGenre on every tag,
whose real shape is exactly {Tag, Type}. Six of the seven appear NOWHERE in the
decompile; SubRoomUnityAssetId exists but belongs to another DTO, not this one.

The extractor's minimum field count drops from 4 to 2, which is what let this
hide: a room tag has two fields, so a 4-field floor skipped its reader entirely
and the invented third key had nothing to be checked against. The alias rule in
fields_in() is what rejects false positives — the field count never was.

This does not explain the clone failure on its own: the captured response
carries all 41 top-level keys and is still rejected. But it removes the whole
class of "we send something the reader has no slot for" from the search.
This commit is contained in:
Alexa
2026-07-28 11:27:35 +03:00
parent 078d576383
commit 4a1ac47007
4 changed files with 1103 additions and 47 deletions
@@ -85,7 +85,39 @@ public sealed class ClientDtoParityTests : IClassFixture<DorkNetServerFactory>
Assert.True(response.IsSuccessStatusCode, $"GET /rooms/{roomId} -> {(int)response.StatusCode}: {body}"); Assert.True(response.IsSuccessStatusCode, $"GET /rooms/{roomId} -> {(int)response.StatusCode}: {body}");
AssertKeyParity(RoomDetailsReader, body, $"GET rooms/{roomId}"); AssertKeyParity(RoomDetailsReader, body, $"GET rooms/{roomId}");
// The reader walks into the nested objects too, and a wrong key set
// there fails exactly the same way — a 200 the client throws on.
var details = JsonDocument.Parse(body).RootElement;
foreach (var (property, reader) in NestedReaders)
{
if (!details.TryGetProperty(property, out var value)) continue;
var element = value.ValueKind switch
{
JsonValueKind.Array when value.GetArrayLength() > 0 => value[0],
JsonValueKind.Object => value,
_ => default,
};
if (element.ValueKind != JsonValueKind.Object) continue;
AssertKeyParity(reader, element.GetRawText(),
$"GET rooms/{roomId} → {property}{(value.ValueKind == JsonValueKind.Array ? "[0]" : "")}");
} }
}
/// <summary>Nested objects in the room-details payload and the reader each
/// one is deserialised by. Sub-room 0, the first role, the stats object and
/// the first tag all have their own generated readers, and a key set that
/// disagrees with them breaks the whole room just as hard as a wrong
/// top-level one.</summary>
private static readonly (string Property, string Reader)[] NestedReaders =
[
("SubRooms", "JDEKAFDPGBE"),
("Roles", "LMEECKCCPHG"),
("Stats", "MLHBPDKBABN"),
("Tags", "GEGADPCDGBO"),
];
[Fact] [Fact]
public async Task Chat_thread_carries_exactly_the_keys_the_client_reads() public async Task Chat_thread_carries_exactly_the_keys_the_client_reads()
@@ -8,6 +8,11 @@
"Price", "Price",
"ModifiedAt" "ModifiedAt"
], ],
"ABJLKAFOPMP": [
"GiftDropIds",
"Message",
"SubscriptionPurchase"
],
"ACKNGEEHHAE": [ "ACKNGEEHHAE": [
"RoomId", "RoomId",
"SubRoomId", "SubRoomId",
@@ -24,6 +29,11 @@
"DefaultBroadcastPermissions", "DefaultBroadcastPermissions",
"CanRequestBroadcastPermissions" "CanRequestBroadcastPermissions"
], ],
"ADAFNGNADFH": [
"InviteeAccountId",
"CreatedAt",
"VerifiedAt"
],
"ADDGMGGOLHM": [ "ADDGMGGOLHM": [
"BlobName", "BlobName",
"Title", "Title",
@@ -31,6 +41,20 @@
"ThumbnailBlobName", "ThumbnailBlobName",
"SourceUrl" "SourceUrl"
], ],
"ADMGGPDGKCE": [
"Msg",
"Id"
],
"AECJMONHBHM": [
"ClubId",
"LastReadAnnouncementId",
"Announcements"
],
"AEGADMDIKNE": [
"Value",
"Success",
"Error"
],
"AEGCKMKICFG": [ "AEGCKMKICFG": [
"AccountId", "AccountId",
"UserName", "UserName",
@@ -45,6 +69,19 @@
"CreatedAt", "CreatedAt",
"IsJunior" "IsJunior"
], ],
"AEHFGHPLNDO": [
"AccountId",
"LastVisitedAt"
],
"AFHCKGCJNFM": [
"Msg",
"Id"
],
"AFJDLEFKNFP": [
"Value",
"Success",
"Error"
],
"AHJKILCAGML": [ "AHJKILCAGML": [
"ChallengeId", "ChallengeId",
"Name", "Name",
@@ -78,12 +115,20 @@
"Platform", "Platform",
"CreatedAt" "CreatedAt"
], ],
"AKKPACEJJFK": [
"Msg",
"Id"
],
"ALGKCAKCFAJ": [ "ALGKCAKCFAJ": [
"BalanceUpdates", "BalanceUpdates",
"Balance", "Balance",
"CurrencyType", "CurrencyType",
"Platform" "Platform"
], ],
"ALJPHDEAHBK": [
"Result",
"Tags"
],
"AMPFGJPKHOD": [ "AMPFGJPKHOD": [
"Device_code", "Device_code",
"User_code", "User_code",
@@ -118,6 +163,11 @@
"CreatedAt", "CreatedAt",
"ModifiedAt" "ModifiedAt"
], ],
"ANPJKOOEEBB": [
"Identifier",
"Genuine",
"GenuineCheckAvailable"
],
"AOAACMFGAGK": [ "AOAACMFGAGK": [
"ChallengeMapId", "ChallengeMapId",
"ChallengeThemeString", "ChallengeThemeString",
@@ -159,6 +209,23 @@
"CurrencyType", "CurrencyType",
"Platform" "Platform"
], ],
"BBFGGPEMLLE": [
"Value",
"Success",
"Error"
],
"BBMJLKMGFGA": [
"Msg",
"Id"
],
"BCEJDGGBBHC": [
"Price",
"CurrencyId"
],
"BCMOCNHAJCL": [
"Status",
"Consumable"
],
"BGFBJCIOIFP": [ "BGFBJCIOIFP": [
"SkuId", "SkuId",
"Name", "Name",
@@ -176,6 +243,20 @@
"ShouldAppearInTokenStore", "ShouldAppearInTokenStore",
"Data" "Data"
], ],
"BIMHOENEGII": [
"Group",
"IsCompleted",
"ClearedAt"
],
"BJHOKILBIML": [
"FeedItemType",
"FeedItemId"
],
"BKCOBJILFEI": [
"KeepsakeFeatureEnabled",
"KeepsakeRoomLimit",
"SocialXpBoostEnabled"
],
"BKFOGBGPLFP": [ "BKFOGBGPLFP": [
"SavedImageId", "SavedImageId",
"ImageName", "ImageName",
@@ -217,6 +298,19 @@
"ClubhouseRoomId", "ClubhouseRoomId",
"ClubType" "ClubType"
], ],
"BLPIIBBPOJM": [
"Action",
"Reason",
"Error"
],
"BLPNLMALDAC": [
"AccountId",
"Bio"
],
"BPAPIKPFDAH": [
"Difficulty",
"EN_US"
],
"BPHCOIBNCDP": [ "BPHCOIBNCDP": [
"ClubId", "ClubId",
"Type", "Type",
@@ -227,6 +321,14 @@
"EditPermissionSettings", "EditPermissionSettings",
"BanUnban" "BanUnban"
], ],
"CAAJPHFCIPK": [
"ReportCategory",
"Reason"
],
"CAEHDIMCGLD": [
"Msg",
"Id"
],
"CAKCKAMAAPP": [ "CAKCKAMAAPP": [
"ClubId", "ClubId",
"LastAnnouncementId", "LastAnnouncementId",
@@ -241,6 +343,21 @@
"Contents", "Contents",
"ModerationState" "ModerationState"
], ],
"CBNEDELBFAJ": [
"Clubs",
"TotalClubs",
"ContinuationToken"
],
"CCAGOJFGLLO": [
"FeedItemType",
"FeedItemId",
"FeedAlgorithmVersion"
],
"CCKEEAMMHPJ": [
"UnityAssetId",
"CreatedByAccountId",
"BakedUnityAssets"
],
"CDEDNEPPPND": [ "CDEDNEPPPND": [
"LevelProgressionMaps", "LevelProgressionMaps",
"DailyObjectives", "DailyObjectives",
@@ -313,6 +430,10 @@
"CanRequestBroadcastPermissions", "CanRequestBroadcastPermissions",
"BroadcastingRoomInstanceId" "BroadcastingRoomInstanceId"
], ],
"CGACOKHBJCB": [
"Msg",
"Id"
],
"CGCKIMIEHNM": [ "CGCKIMIEHNM": [
"Name", "Name",
"Description", "Description",
@@ -336,6 +457,11 @@
"Stats", "Stats",
"RankingContext" "RankingContext"
], ],
"CHEMHPGCJBM": [
"PlayerId",
"Score",
"Rank"
],
"CHKOLCGMCKJ": [ "CHKOLCGMCKJ": [
"ReportBudget", "ReportBudget",
"FilterType", "FilterType",
@@ -418,6 +544,15 @@
"AvatarItemId", "AvatarItemId",
"IsBaseAvatarItem" "IsBaseAvatarItem"
], ],
"CMBHBADOOAF": [
"Msg",
"Id"
],
"CMHEJKENPBH": [
"TriggerType",
"TriggerId",
"TriggeredAt"
],
"CMLNDGCIPIH": [ "CMLNDGCIPIH": [
"Index", "Index",
"Group", "Group",
@@ -426,6 +561,29 @@
"IsCompleted", "IsCompleted",
"HasClaimedReward" "HasClaimedReward"
], ],
"CNFFPECMOHE": [
"Value",
"Success",
"Error"
],
"CNNAFLNKDCL": [
"AccountId",
"KeepsakeInstanceId",
"CollectedAt"
],
"CNNEAFEIMPP": [
"Msg",
"Id"
],
"COIELAHKALG": [
"Enabled",
"Key",
"Region"
],
"DCECPNPOEFG": [
"Msg",
"Id"
],
"DDDLCGDEPNH": [ "DDDLCGDEPNH": [
"PlayerEventResponseId", "PlayerEventResponseId",
"PlayerEventId", "PlayerEventId",
@@ -433,6 +591,33 @@
"CreatedAt", "CreatedAt",
"Type" "Type"
], ],
"DDFBPFOBIAO": [
"ImageName",
"Accessibility"
],
"DDFNNBDLBKF": [
"AccountId",
"ClubId",
"SubscriberCount"
],
"DEIDIGKKLHE": [
"Results",
"TotalResults"
],
"DFKDBJMNKCO": [
"Event",
"NewSubscription"
],
"DHAPGKPJDKH": [
"Value",
"Success",
"Error"
],
"DHMKNFOLCGM": [
"Value",
"Success",
"Error"
],
"DICIOFKDIEE": [ "DICIOFKDIEE": [
"Season", "Season",
"Name", "Name",
@@ -446,6 +631,69 @@
"NextUpdate", "NextUpdate",
"NewUntil" "NewUntil"
], ],
"DIEEOOKELHG": [
"AccountId",
"IsRecentHistoryVisible"
],
"DILNAKMDJOF": [
"RoomId",
"SubRoomId",
"KeepsakeCategory"
],
"DJCLNEEBAJP": [
"Value",
"Success",
"Error"
],
"DJFEOAGKKAK": [
"FreshnessSeconds",
"Url"
],
"DJFIAOIFLDI": [
"Memberships",
"TotalMemberships",
"ContinuationToken"
],
"DJHIABKJLBD": [
"RoomInstanceId",
"PhotonAccessToken",
"Permissions"
],
"DKHBLLDMDHB": [
"Msg",
"Id"
],
"DKMBKPLABAG": [
"Type",
"Score"
],
"DKNKIEOODHK": [
"Value",
"Success",
"Error"
],
"DLJCLHBGADL": [
"Msg",
"Id"
],
"DNBAAJILMPE": [
"RoomId",
"ClubId",
"PlayerCount"
],
"DOINHLNFOCP": [
"Msg",
"Id"
],
"DOJEJNECAAI": [
"Value",
"Success",
"Error"
],
"DOMOBFDIAJA": [
"AccountId",
"CheeredAt"
],
"DPHFOPBAAPN": [ "DPHFOPBAAPN": [
"PlayerId", "PlayerId",
"StatChannel", "StatChannel",
@@ -453,6 +701,15 @@
"FilterType", "FilterType",
"SortAscending" "SortAscending"
], ],
"DPIECEMDKPL": [
"CreatorPlayerId",
"Data",
"IsValid"
],
"DPKHIGPMCIP": [
"InviteId",
"Name"
],
"DPNLANKOHON": [ "DPNLANKOHON": [
"AccountId", "AccountId",
"CurrencyId", "CurrencyId",
@@ -469,6 +726,16 @@
"NMTOKENS", "NMTOKENS",
"NOTATION" "NOTATION"
], ],
"EACKMEGHIGM": [
"AccountId",
"ClubId",
"CreatedAt"
],
"ECEBBLBCFKO": [
"AccountId",
"BannedByAccountId",
"BanStartTime"
],
"ECHJAKNMEEC": [ "ECHJAKNMEEC": [
"KeepsakeRoomListId", "KeepsakeRoomListId",
"ProgressionEventId", "ProgressionEventId",
@@ -488,6 +755,19 @@
"Platform", "Platform",
"CurrencyType" "CurrencyType"
], ],
"EDMKBBPGJAB": [
"Balance",
"RoomKeyResponse"
],
"EEAAGIJHLOJ": [
"PlayerEvent",
"Result",
"TagModifyResult"
],
"EHFKGCIDOFL": [
"Results",
"TotalResults"
],
"EHKEOCKBCDH": [ "EHKEOCKBCDH": [
"Items", "Items",
"FeedInstanceId", "FeedInstanceId",
@@ -511,6 +791,14 @@
"Type", "Type",
"Order" "Order"
], ],
"EJIHDJDKKEC": [
"AccountId",
"RoomKeyId"
],
"EJNFJPNOFFO": [
"Msg",
"Id"
],
"EKEFFNBIOHJ": [ "EKEFFNBIOHJ": [
"ChatThreadId", "ChatThreadId",
"LastReadMessageId", "LastReadMessageId",
@@ -571,6 +859,28 @@
"PlayerEventInviteEmails", "PlayerEventInviteEmails",
"PlayerEventReminderEmails" "PlayerEventReminderEmails"
], ],
"ENJDEONHNMO": [
"Created",
"Responses"
],
"EOFEKNIHNNC": [
"PlayerEventId",
"BroadcastRoomInstanceId"
],
"EOILOIMIJLJ": [
"Value",
"Success",
"Error"
],
"EOIMIBBJBCB": [
"ImageName",
"Title",
"Subtitle"
],
"EPPPACFECMH": [
"Type",
"Reference"
],
"EncodingTable": [ "EncodingTable": [
"Big5", "Big5",
"GB2312", "GB2312",
@@ -580,6 +890,15 @@
"IBM861", "IBM861",
"IBM869" "IBM869"
], ],
"FAMGNALGHPN": [
"Msg",
"Id"
],
"FBNOJCDDBJK": [
"XPAwardStrings",
"TotalXPAwarded",
"NewProgress"
],
"FCIBLPCOODP": [ "FCIBLPCOODP": [
"RoomConsumableId", "RoomConsumableId",
"RoomId", "RoomId",
@@ -590,6 +909,34 @@
"PurchaseCurrencyId", "PurchaseCurrencyId",
"ModifiedAt" "ModifiedAt"
], ],
"FCJNIBGKHDM": [
"ClubId",
"MembershipType"
],
"FDPFICCCJNM": [
"Msg",
"Id"
],
"FEJOMKJBOOE": [
"RoomId",
"EarningsDistributionMapping",
"EarningsDistributionMethod"
],
"FIFFMMLKKCJ": [
"PlayerId",
"Level",
"XP"
],
"FJJIJOGNMCP": [
"ReferralRewardTierId",
"RequiredReferralCount",
"RewardSelectionCount"
],
"FJNBDGFCLOF": [
"Value",
"Success",
"Error"
],
"FKANCKLCCDI": [ "FKANCKLCCDI": [
"Id", "Id",
"FromPlayerId", "FromPlayerId",
@@ -608,6 +955,41 @@
"PlatformsToSpawnOn", "PlatformsToSpawnOn",
"BalanceType" "BalanceType"
], ],
"FKPPDBLFKHJ": [
"Msg",
"Id"
],
"FLEDNKHKIND": [
"InfluencerIds",
"ContinuationToken"
],
"FLELPHJDLNG": [
"Filename",
"Hash",
"OwnershipProof"
],
"FLMCOHEGJEI": [
"RequiresEliteUpgrade",
"GiftDrop",
"SeasonXpBoost"
],
"FMIDLABJCLM": [
"Strings",
"StringPackageVersion"
],
"FMKALNIKMKF": [
"AccountId",
"MembershipType"
],
"FMNDPHMOIIH": [
"Msg",
"Id"
],
"FNDBGOGAIFL": [
"Value",
"Success",
"Error"
],
"FNIDAIDJBBO": [ "FNIDAIDJBBO": [
"PlayerID", "PlayerID",
"RelationshipType", "RelationshipType",
@@ -615,6 +997,10 @@
"Ignored", "Ignored",
"Favorited" "Favorited"
], ],
"FNNAJDFFICN": [
"ReportId",
"Client"
],
"FOIMFMEEGDI": [ "FOIMFMEEGDI": [
"SupportsJoinInProgress", "SupportsJoinInProgress",
"UseLevelBasedMatchmaking", "UseLevelBasedMatchmaking",
@@ -634,6 +1020,20 @@
"MaxPlayers", "MaxPlayers",
"Accessibility" "Accessibility"
], ],
"FOKKDBJEFOO": [
"Value",
"Success",
"Error"
],
"FOOOKJCPBKC": [
"Msg",
"Id"
],
"FPGBBCLENDA": [
"StorefrontType",
"NextUpdate",
"NewUntil"
],
"FPLGJGDJIJG": [ "FPLGJGDJIJG": [
"StorefrontType", "StorefrontType",
"PurchasableItemId", "PurchasableItemId",
@@ -642,6 +1042,10 @@
"CouponConsumablePlayerMappingId", "CouponConsumablePlayerMappingId",
"Gift" "Gift"
], ],
"FPNMHECOPPF": [
"UpdateResponse",
"Data"
],
"FPNOOOFJBJF": [ "FPNOOOFJBJF": [
"RankStart", "RankStart",
"RankEnd", "RankEnd",
@@ -725,6 +1129,10 @@
"Delta", "Delta",
"Press" "Press"
], ],
"GACOLGJKHBI": [
"VersionStatus",
"UpdateNotificationStage"
],
"GAGIJHJGFJD": [ "GAGIJHJGFJD": [
"AccountId", "AccountId",
"CurrencyId", "CurrencyId",
@@ -732,6 +1140,18 @@
"AmountAwarded", "AmountAwarded",
"AwardedAt" "AwardedAt"
], ],
"GAODOHODBDE": [
"FailedInvites",
"Result"
],
"GBPDOLJBABB": [
"Success",
"Message"
],
"GBPHFPMCGHH": [
"Subscription",
"PlatformAccountSubscribedPlayerId"
],
"GCKGIDLDBNH": [ "GCKGIDLDBNH": [
"Error", "Error",
"Error_description", "Error_description",
@@ -749,6 +1169,26 @@
"MicSpamSamplePercentageForForceMuteToEnd", "MicSpamSamplePercentageForForceMuteToEnd",
"MicSpamWarningStateVolumeMultiplier" "MicSpamWarningStateVolumeMultiplier"
], ],
"GEEKOKDMAHG": [
"AccountId",
"ApiKey"
],
"GEGADPCDGBO": [
"Tag",
"Type"
],
"GEMBOCLPFGE": [
"AccountId",
"FavoritedAt"
],
"GFCIGEIEPGH": [
"Msg",
"Id"
],
"GFGBAAADKEL": [
"Msg",
"Id"
],
"GFGKDCENJMB": [ "GFGKDCENJMB": [
"AccountId", "AccountId",
"Xp", "Xp",
@@ -757,6 +1197,10 @@
"BonusRewardsCollected", "BonusRewardsCollected",
"XpBoostLastPurchasedAt" "XpBoostLastPurchasedAt"
], ],
"GFHNJMMBHFD": [
"PlayerEventId",
"Type"
],
"GFIHPOOFHLC": [ "GFIHPOOFHLC": [
"AnnouncementId", "AnnouncementId",
"CreatorAccountId", "CreatorAccountId",
@@ -784,6 +1228,14 @@
"CheerGreatHost", "CheerGreatHost",
"CheerSportsman" "CheerSportsman"
], ],
"GGFHKCDELJH": [
"Id",
"Link"
],
"GHBIGGJKPFI": [
"Events",
"ContinuationToken"
],
"GIFNHCGDNEM": [ "GIFNHCGDNEM": [
"Platform", "Platform",
"PlatformId", "PlatformId",
@@ -792,6 +1244,21 @@
"RequirePassword", "RequirePassword",
"RefreshToken" "RefreshToken"
], ],
"GIJCKEDKGLH": [
"ReportCategory",
"PlayerEventId",
"Details"
],
"GJGLBNABMNL": [
"CreatorAccountId",
"ClubId",
"MembershipType"
],
"GKFBDCHILOD": [
"Value",
"Success",
"Error"
],
"GLEGPFFPDBE": [ "GLEGPFFPDBE": [
"DataBlob", "DataBlob",
"DataBlobHash", "DataBlobHash",
@@ -841,6 +1308,15 @@
"Url", "Url",
"RedemptionUrl" "RedemptionUrl"
], ],
"GMBGBPNMGBA": [
"Status",
"Invention",
"InventionVersion"
],
"GMDIDJMOEBB": [
"Objectives",
"ObjectiveGroups"
],
"GMFJIAMOIEO": [ "GMFJIAMOIEO": [
"SubscriptionId", "SubscriptionId",
"RecNetPlayerId", "RecNetPlayerId",
@@ -854,6 +1330,10 @@
"CreatedAt", "CreatedAt",
"ModifiedAt" "ModifiedAt"
], ],
"GMNMHECGEGD": [
"CurrencyType",
"BalanceAdds"
],
"GNIPAKCCOOE": [ "GNIPAKCCOOE": [
"ProgressionEventId", "ProgressionEventId",
"Name", "Name",
@@ -918,6 +1398,22 @@
"Stats", "Stats",
"RankingContext" "RankingContext"
], ],
"GUISkin": [
"HorizontalSliderThumbExtent",
"VerticalSliderThumbExtent"
],
"HADOHMCCLEO": [
"Msg",
"Id"
],
"HBKAFCAEFCC": [
"CreatedAt",
"Comment"
],
"HDLOMAGLILM": [
"Msg",
"Id"
],
"HDOJMEBCAGP": [ "HDOJMEBCAGP": [
"Permission", "Permission",
"Role", "Role",
@@ -925,6 +1421,34 @@
"Type", "Type",
"Value" "Value"
], ],
"HECILPKCKMK": [
"FeaturedRoomGroupId",
"Name",
"Rooms"
],
"HEIPMIFEFEE": [
"Value",
"Success",
"Error"
],
"HEKMOMJFFGJ": [
"Value",
"Success",
"Error"
],
"HFHNOHAODOF": [
"ValidTill",
"Images"
],
"HFODJDLIJPG": [
"TargetPlayerId",
"RoomName",
"ActionCode"
],
"HGJDGKFIOCK": [
"Msg",
"Id"
],
"HHJLCKPJOIA": [ "HHJLCKPJOIA": [
"PlayerId", "PlayerId",
"StatusVisibility", "StatusVisibility",
@@ -935,6 +1459,10 @@
"AppVersion", "AppVersion",
"ClientJoinData" "ClientJoinData"
], ],
"HHOJLJGGNKN": [
"Msg",
"Id"
],
"HIKOJENMDKE": [ "HIKOJENMDKE": [
"KeepsakeCategoryId", "KeepsakeCategoryId",
"VisualId", "VisualId",
@@ -943,6 +1471,20 @@
"IconOutlineImageName", "IconOutlineImageName",
"IconFilledImageName" "IconFilledImageName"
], ],
"HIOJNFKGAOK": [
"Value",
"Success",
"Error"
],
"HIOPBEPNFOO": [
"Value",
"Success",
"Error"
],
"HJKLIIPPPEM": [
"PlayerEvent",
"PlayerEventResponse"
],
"HJOIJBMAIPO": [ "HJOIJBMAIPO": [
"PlaylistId", "PlaylistId",
"Name", "Name",
@@ -967,6 +1509,11 @@
"Stats", "Stats",
"RankingContext" "RankingContext"
], ],
"HJOKFJKKEJM": [
"BalanceUpdateResult",
"TokenBalanceResponse",
"OperationResult"
],
"HJPEABLEEKL": [ "HJPEABLEEKL": [
"RoomConsumableId", "RoomConsumableId",
"RoomId", "RoomId",
@@ -975,6 +1522,10 @@
"ImageName", "ImageName",
"PriceAndCurrency" "PriceAndCurrency"
], ],
"HKAGNIGNBOJ": [
"Msg",
"Id"
],
"HKIJINJGBGD": [ "HKIJINJGBGD": [
"Type", "Type",
"User_id", "User_id",
@@ -983,6 +1534,49 @@
"Gameplay_session_id", "Gameplay_session_id",
"Transaction_id" "Transaction_id"
], ],
"HKPKGOPHLHE": [
"RoomInstanceCount",
"PlayerCount"
],
"HLDLKOPNDPF": [
"Value",
"Success",
"Error"
],
"HMDONHHKKGA": [
"PinnedFilters",
"PopularFilters",
"TrendingFilters"
],
"HMGHGBMGNJG": [
"Msg",
"Id"
],
"HMKMGPNMHBM": [
"Instances",
"CollectionRecords",
"KeepsakeProgressionEventIds"
],
"HMMFNEEAFGP": [
"Results",
"TotalResults"
],
"HNLGHDMNMDB": [
"UpdateResponse",
"Data"
],
"HOGIMIPDDGP": [
"ImageName",
"ImageUrl"
],
"HPAKKJFOFDF": [
"Msg",
"Id"
],
"HPEGLGGMNMC": [
"ChatThread",
"ChatResult"
],
"HPMMKFGDAEC": [ "HPMMKFGDAEC": [
"PlayerEventId", "PlayerEventId",
"CreatorPlayerId", "CreatorPlayerId",
@@ -1002,6 +1596,11 @@
"CanRequestBroadcastPermissions", "CanRequestBroadcastPermissions",
"BroadcastingRoomInstanceId" "BroadcastingRoomInstanceId"
], ],
"IACBFJEMJMJ": [
"Value",
"Success",
"Error"
],
"IAPMDDFENDD": [ "IAPMDDFENDD": [
"PurchasableItemId", "PurchasableItemId",
"CouponConsumablePlayerMappingId", "CouponConsumablePlayerMappingId",
@@ -1029,6 +1628,44 @@
"CheerCount", "CheerCount",
"CommentCount" "CommentCount"
], ],
"ICMBGNCJMJG": [
"Value",
"Success",
"Error"
],
"ICNLODNGFJJ": [
"Value",
"Success",
"Error"
],
"IDBFKCFEAHM": [
"BalanceUpdateResult",
"CurrencyBalanceResponse",
"OperationResult"
],
"IDBLMMAGACO": [
"Key",
"Value"
],
"IDFEIMCEMCC": [
"Level",
"Period",
"IsAutoRenewing"
],
"IEIKHFIPDMD": [
"CurrencyType",
"Price",
"StorefrontSaleData"
],
"IFFEHJEPKOH": [
"ReferralsVerifiedCount",
"PlayerReferralRewards"
],
"IFLDEEGLKFG": [
"Level",
"RequiredXp",
"GiftDropId"
],
"IGMCJEFBJCF": [ "IGMCJEFBJCF": [
"ServerTime", "ServerTime",
"PlayerId", "PlayerId",
@@ -1040,12 +1677,30 @@
"AppVersion", "AppVersion",
"ClientJoinData" "ClientJoinData"
], ],
"IGNECOJDECH": [
"Info",
"ReferrerId"
],
"IHGDKHPLIGH": [
"RoomId",
"RoomName",
"ImageName"
],
"IJFKOMJBJMI": [ "IJFKOMJBJMI": [
"StatChannel", "StatChannel",
"RoomId", "RoomId",
"StatValue", "StatValue",
"CurrentStatValue" "CurrentStatValue"
], ],
"ILAHMLLJDLE": [
"Value",
"Success",
"Error"
],
"ILEHDPADJJF": [
"Nouns",
"Adjectives"
],
"ILJOBJDPBNJ": [ "ILJOBJDPBNJ": [
"Name", "Name",
"Description", "Description",
@@ -1127,6 +1782,14 @@
"MemberPermissions", "MemberPermissions",
"MyMembershipType" "MyMembershipType"
], ],
"JBGKGCLPCHP": [
"Results",
"TotalResults"
],
"JBIEJIKHBMG": [
"SeedRoom",
"Rooms"
],
"JCPFCOEEELK": [ "JCPFCOEEELK": [
"AccountId", "AccountId",
"CurrencyId", "CurrencyId",
@@ -1155,6 +1818,14 @@
"MaxPlayers", "MaxPlayers",
"Accessibility" "Accessibility"
], ],
"JEBCHNDADKK": [
"ConcurrencyCodes",
"ExpectedPriceAndCurrency"
],
"JFEKPNOKFBP": [
"Msg",
"Id"
],
"JGJFCFAFGCM": [ "JGJFCFAFGCM": [
"TotalXP", "TotalXP",
"Level", "Level",
@@ -1164,6 +1835,10 @@
"NextLevelXPThreshold", "NextLevelXPThreshold",
"NextLevelAcornReward" "NextLevelAcornReward"
], ],
"JHNAJMDHFKH": [
"Msg",
"Id"
],
"JICIOMDBPDO": [ "JICIOMDBPDO": [
"Id", "Id",
"ConsumableItemDesc", "ConsumableItemDesc",
@@ -1174,6 +1849,10 @@
"IsActive", "IsActive",
"IsTransferable" "IsTransferable"
], ],
"JIOEIEENGNO": [
"Msg",
"Id"
],
"JJEKBGHDCEG": [ "JJEKBGHDCEG": [
"Tier", "Tier",
"Rewards", "Rewards",
@@ -1199,6 +1878,10 @@
"GiftContext", "GiftContext",
"GiftRarity" "GiftRarity"
], ],
"JKJHOAKNOCF": [
"CurrentConcurrencyCode",
"NewConcurrencyCode"
],
"JLIBBFMMLFF": [ "JLIBBFMMLFF": [
"CurrencyType", "CurrencyType",
"BalanceAddType", "BalanceAddType",
@@ -1211,6 +1894,18 @@
"RateLimit", "RateLimit",
"BalanceInGiftBox" "BalanceInGiftBox"
], ],
"JLNFEFHNFBP": [
"Title",
"Description"
],
"JLNKMODEKKM": [
"BaseAvatarItemId",
"BaseAvatarItemColor"
],
"JMJLMOJCBCK": [
"UpdateResponse",
"Data"
],
"JNFDPPCIPHG": [ "JNFDPPCIPHG": [
"CategoryId", "CategoryId",
"Importance", "Importance",
@@ -1253,6 +1948,14 @@
"Stats", "Stats",
"RankingContext" "RankingContext"
], ],
"JPKBLKGJNCA": [
"Msg",
"Id"
],
"JPLIIMKJAEL": [
"AccountId",
"DisallowInAppPurchases"
],
"JPNMBICAMEE": [ "JPNMBICAMEE": [
"RoomInstanceId", "RoomInstanceId",
"RoomId", "RoomId",
@@ -1261,12 +1964,51 @@
"CreatedAt", "CreatedAt",
"PlayerIds" "PlayerIds"
], ],
"JsonParser_NestedType_JsonValue": [
"False",
"True"
],
"KAONMCEONPF": [
"Name",
"Price",
"ProductId"
],
"KBHFIPFPCMN": [
"Msg",
"Id"
],
"KBLOCDGCGFA": [
"Msg",
"Id"
],
"KBMAAKAIPLE": [
"UpdateResponse",
"Data"
],
"KCMDEFMLDJF": [ "KCMDEFMLDJF": [
"Balance", "Balance",
"CurrencyType", "CurrencyType",
"BalanceType", "BalanceType",
"Data" "Data"
], ],
"KDAHIOHGPBN": [
"Value",
"Success",
"Error"
],
"KDJILJAIDFG": [
"RoomId",
"Count"
],
"KEOLHAONMIF": [
"Value",
"Success",
"Error"
],
"KFAOOJLFCGC": [
"Msg",
"Id"
],
"KFPHOKPEMOF": [ "KFPHOKPEMOF": [
"ItemType", "ItemType",
"ItemId", "ItemId",
@@ -1279,6 +2021,20 @@
"CreatedAt", "CreatedAt",
"ModifiedAt" "ModifiedAt"
], ],
"KGNFNBHMAFL": [
"Value",
"Success",
"Error"
],
"KHBGNAMFAHK": [
"Msg",
"Id"
],
"KHFKIJEGPDG": [
"AccountId",
"RoomKeyId",
"DoesPlayerOwnRoomKey"
],
"KIANAKFJGCP": [ "KIANAKFJGCP": [
"FeaturedPlayer", "FeaturedPlayer",
"FeaturedRoomGroup", "FeaturedRoomGroup",
@@ -1292,6 +2048,10 @@
"CurrencyType", "CurrencyType",
"Platform" "Platform"
], ],
"KJEIGGBIIHP": [
"SavedImageId",
"IsCheered"
],
"KKOHONLGIHL": [ "KKOHONLGIHL": [
"Id", "Id",
"FromPlayerId", "FromPlayerId",
@@ -1301,12 +2061,32 @@
"RoomId", "RoomId",
"PlayerEventId" "PlayerEventId"
], ],
"KLHCKBPJKPF_NestedType_DHKPMMHMIJF_NestedType_KKNKAJBPNPC": [
"SerializeUnsafe",
"ToJsonString"
],
"KMBHAKAHNGH": [
"Room",
"SubRoomDataSave"
],
"KMHNOGNHDLO": [ "KMHNOGNHDLO": [
"SubscriptionSeasonMilestoneId", "SubscriptionSeasonMilestoneId",
"SeasonId", "SeasonId",
"StartAt", "StartAt",
"GiftDrops" "GiftDrops"
], ],
"KNGMIABFJHK": [
"CurrencyBalanceResponse",
"TokenBalanceResponse"
],
"KOEEACLMAFE": [
"Referrals",
"ContinuationToken"
],
"KPEIHOCIGGE": [
"Msg",
"Id"
],
"KPMMGJELBPP": [ "KPMMGJELBPP": [
"WindowSize", "WindowSize",
"PlayerId", "PlayerId",
@@ -1356,6 +2136,24 @@
"MaxPlayers", "MaxPlayers",
"Accessibility" "Accessibility"
], ],
"LDGHHCCJAMC": [
"Status",
"RoomKey"
],
"LEEAJGDIOHI": [
"Value",
"Success",
"Error"
],
"LEINHCHGFON": [
"Msg",
"Id"
],
"LEMIBENHABD": [
"Value",
"Success",
"Error"
],
"LIJHBNDJKNP": [ "LIJHBNDJKNP": [
"RewardSelectionId", "RewardSelectionId",
"RewardType", "RewardType",
@@ -1367,6 +2165,19 @@
"Subscriber_GiftDrop3", "Subscriber_GiftDrop3",
"CreatedAt" "CreatedAt"
], ],
"LIODMDILCAJ": [
"Value",
"Success",
"Error"
],
"LKBGCOELLIN": [
"CurrencyId",
"PurchaseOffers"
],
"LKJLPNENINM": [
"RoomKeyResponse",
"BalanceUpdateResponse"
],
"LKJPKMBEPCG": [ "LKJPKMBEPCG": [
"PrefabName", "PrefabName",
"ModificationGuid", "ModificationGuid",
@@ -1382,18 +2193,34 @@
"Filename", "Filename",
"Hash" "Hash"
], ],
"LKMEPPOFHLK": [
"Msg",
"Id"
],
"LMCCNLLHLCJ": [
"Success",
"Error"
],
"LMEECKCCPHG": [ "LMEECKCCPHG": [
"AccountId", "AccountId",
"Role", "Role",
"LastChangedByAccountId", "LastChangedByAccountId",
"InvitedRole" "InvitedRole"
], ],
"LMHKHIJIDEO": [
"SavedImageId",
"Cheer"
],
"LNMAMOCCBAK": [ "LNMAMOCCBAK": [
"Filename", "Filename",
"UnityAssetId", "UnityAssetId",
"CreatedByAccountId", "CreatedByAccountId",
"BakedUnityAssets" "BakedUnityAssets"
], ],
"LOEHGGMCKAM": [
"ChatResult",
"SnoozedUntil"
],
"LOOLOADLJPG": [ "LOOLOADLJPG": [
"SubscriptionSeasonId", "SubscriptionSeasonId",
"Name", "Name",
@@ -1410,6 +2237,15 @@
"SupportsQuest2", "SupportsQuest2",
"SupportsMobile" "SupportsMobile"
], ],
"LPFAFIGAIOE": [
"Status",
"InventoryItem"
],
"MACBLLENLFD": [
"Value",
"Success",
"Error"
],
"MADLMAFINGF": [ "MADLMAFINGF": [
"KeepsakeInstanceId", "KeepsakeInstanceId",
"KeepsakeCategoryConfigId", "KeepsakeCategoryConfigId",
@@ -1417,12 +2253,24 @@
"RoomId", "RoomId",
"SubRoomId" "SubRoomId"
], ],
"MAHHAAEGEEP": [
"InventionResponse",
"BalanceUpdateResponse"
],
"MBFADJPOGDI": [
"Msg",
"Id"
],
"MCDADMNCDEI": [ "MCDADMNCDEI": [
"WishlistItemId", "WishlistItemId",
"AccountId", "AccountId",
"PurchasableItemId", "PurchasableItemId",
"CreatedAt" "CreatedAt"
], ],
"MCMPJPNBJBI": [
"Msg",
"Id"
],
"MEBAFOGDHBB": [ "MEBAFOGDHBB": [
"PurchaseCampaignId", "PurchaseCampaignId",
"PurchaseReminder", "PurchaseReminder",
@@ -1446,6 +2294,11 @@
"PositionY", "PositionY",
"PositionZ" "PositionZ"
], ],
"MFNBIPCHKHC": [
"MembershipRequests",
"TotalMembershipRequests",
"ContinuationToken"
],
"MGOLBEMMNDA": [ "MGOLBEMMNDA": [
"BalanceAddType", "BalanceAddType",
"BaseAward", "BaseAward",
@@ -1456,6 +2309,28 @@
"Platform", "Platform",
"BalanceInGiftBox" "BalanceInGiftBox"
], ],
"MIFGPMGEMEK": [
"RefreshesAt",
"RefreshIntervalMinutes",
"Room"
],
"MIHDILLIAFE": [
"Instances",
"CollectionRecords"
],
"MIHJPKMLADF": [
"Msg",
"Id"
],
"MIHKAJFMIPE": [
"RoomId",
"CurrencyId"
],
"MJGHCJDOJLH": [
"Value",
"Success",
"Error"
],
"MJJDCIAIDKI": [ "MJJDCIAIDKI": [
"HasEliteUpgrade", "HasEliteUpgrade",
"HasEliteUpgradePlatformMask", "HasEliteUpgradePlatformMask",
@@ -1477,18 +2352,98 @@
"CreatedAt", "CreatedAt",
"IsJunior" "IsJunior"
], ],
"MJNABIBJDMO": [
"Order",
"Objective",
"Count"
],
"MKAIABAJIAJ": [
"CustomAvatarItemId",
"BodyPart"
],
"MKBLHNGJOBA": [
"Msg",
"Id"
],
"MLHBPDKBABN": [ "MLHBPDKBABN": [
"CheerCount", "CheerCount",
"FavoriteCount", "FavoriteCount",
"VisitorCount", "VisitorCount",
"VisitCount" "VisitCount"
], ],
"MMDMDIJLIEH": [
"Msg",
"Id"
],
"MMFCMCPCAJP": [
"ChatMessage",
"ChatResult"
],
"MMPLMIAEBLE": [
"Msg",
"Id"
],
"MOJLGDKFECO": [
"InvitedPlayerId",
"Result"
],
"MOLNFPGNEGP": [
"Value",
"Success",
"Error"
],
"MOMDMDMGEOA": [
"ItemType",
"ItemId"
],
"Matchmaking": [
"PlayerId",
"RoomInstanceId"
],
"NAGNGCMPGOP": [
"RoomId",
"KeepsakeInstanceIds"
],
"NAPOKFHELLC": [
"Multiplier",
"BalanceAddType"
],
"NBGPICODFEE": [
"Value",
"Success",
"Error"
],
"NCBBKAMCPBC": [
"Msg",
"Id"
],
"NCHBANKEJMP": [
"Results",
"TotalResults"
],
"NDIIFIGNAAM": [ "NDIIFIGNAAM": [
"Error", "Error",
"Identifier", "Identifier",
"Genuine", "Genuine",
"GenuineCheckAvailable" "GenuineCheckAvailable"
], ],
"NEJOPOKDPKE": [
"Msg",
"Id"
],
"NEKEOJFNCCJ": [
"UpdateResponse",
"Data"
],
"NFBJOAGJHME": [
"Value",
"Success",
"Error"
],
"NGCPIKDINEI": [
"Provider",
"Data"
],
"NHGOFGABJIN": [ "NHGOFGABJIN": [
"RoomInstanceId", "RoomInstanceId",
"RoomId", "RoomId",
@@ -1519,6 +2474,15 @@
"JiraUrl", "JiraUrl",
"Comments" "Comments"
], ],
"NKMEHOHCKOH": [
"Value",
"Success",
"Error"
],
"NLIAAGLJBNN": [
"Results",
"TotalResults"
],
"NMGHOIMEJIK": [ "NMGHOIMEJIK": [
"Name", "Name",
"Description", "Description",
@@ -1557,6 +2521,11 @@
"Stats", "Stats",
"RankingContext" "RankingContext"
], ],
"OBACBEGPKAK": [
"ReportCategory",
"Details",
"ReportedPlayerId"
],
"OBGIGMCOMDE": [ "OBGIGMCOMDE": [
"AdCarouselItemId", "AdCarouselItemId",
"ImageName", "ImageName",
@@ -1565,6 +2534,28 @@
"PurchasableItemIds", "PurchasableItemIds",
"PurchaseReminderId" "PurchaseReminderId"
], ],
"OBIBPCLDPGA": [
"Message",
"MoreInfoUrl"
],
"OCFNOBAONAP": [
"Cheered",
"Favorited",
"LastVisitedAt"
],
"OCGICPIMNEB": [
"ErrorCode",
"RoomInstance"
],
"ODNKLIIJIOH": [
"Msg",
"Id"
],
"OEHMNIAOAOH": [
"Value",
"Success",
"Error"
],
"OFGIPBHIAGF": [ "OFGIPBHIAGF": [
"ProgressionEventPurchasableXpBoostId", "ProgressionEventPurchasableXpBoostId",
"Cost", "Cost",
@@ -1582,6 +2573,23 @@
"SubRoomData", "SubRoomData",
"SavedByAccountId" "SavedByAccountId"
], ],
"OGCMIDEFOEE": [
"ChatResult",
"IsFavorited"
],
"OGEDLCFDDIO": [
"Msg",
"Id"
],
"OHNEMFHCBIJ": [
"Value",
"Success",
"Error"
],
"OKHGCKDIILD": [
"ImageName",
"Index"
],
"OLACHOEDKFB": [ "OLACHOEDKFB": [
"ReportCategory", "ReportCategory",
"YesVotes", "YesVotes",
@@ -1594,6 +2602,10 @@
"BalanceType", "BalanceType",
"Data" "Data"
], ],
"OLKCALBDDOI": [
"Msg",
"Id"
],
"OLPHKLCPFEF": [ "OLPHKLCPFEF": [
"InventionId", "InventionId",
"ReplicationId", "ReplicationId",
@@ -1605,6 +2617,11 @@
"BlobName", "BlobName",
"BlobHash" "BlobHash"
], ],
"OMAPLLOIDNA": [
"ToPlayerIds",
"Message",
"GiftContext"
],
"ONGJBLFBHGC": [ "ONGJBLFBHGC": [
"PurchasableItemId", "PurchasableItemId",
"Type", "Type",
@@ -1615,18 +2632,40 @@
"AvailableUntil", "AvailableUntil",
"NewUntil" "NewUntil"
], ],
"OOGKPMKKJBE": [
"SalePercent",
"SaleStartDate",
"SaleEndDate"
],
"PAKGKIKFGAE": [
"Id",
"TitleOverride",
"UrlOverride"
],
"PCBAACNNDBH": [ "PCBAACNNDBH": [
"FriendlyImageName", "FriendlyImageName",
"ImageName", "ImageName",
"StartTime", "StartTime",
"EndTime" "EndTime"
], ],
"PCMLHLIBLNJ": [
"Tag",
"Type"
],
"PCODFCJECKL": [
"Msg",
"Id"
],
"PCPOMPIAFMA": [ "PCPOMPIAFMA": [
"Key", "Key",
"Value", "Value",
"StartTime", "StartTime",
"EndTime" "EndTime"
], ],
"PDGENCNGCJI": [
"RoomId",
"Ids"
],
"PDIFGFKAMBG": [ "PDIFGFKAMBG": [
"PlayerCount", "PlayerCount",
"IsFull", "IsFull",
@@ -1648,6 +2687,11 @@
"CanRequestBroadcastPermissions", "CanRequestBroadcastPermissions",
"BroadcastingRoomInstanceId" "BroadcastingRoomInstanceId"
], ],
"PECGEJAAMHB": [
"Balance",
"CurrencyType",
"Platform"
],
"PELEHJLMKJO": [ "PELEHJLMKJO": [
"SubRoomDataSaveId", "SubRoomDataSaveId",
"SubRoomId", "SubRoomId",
@@ -1677,6 +2721,14 @@
"Anonymous", "Anonymous",
"GiftContext" "GiftContext"
], ],
"PJPBJKLDMNA": [
"Results",
"TotalResults"
],
"PKCMBJFBHBO": [
"TotalXp",
"SocialBoostXp"
],
"PLLNLPADHCN": [ "PLLNLPADHCN": [
"Resolution", "Resolution",
"Language", "Language",
@@ -1710,6 +2762,10 @@
"OnDeviceRegained", "OnDeviceRegained",
"OnControlsChanged" "OnControlsChanged"
], ],
"PlayerInputManager": [
"OnPlayerJoined",
"OnPlayerLeft"
],
"StringHelpers": [ "StringHelpers": [
"Mouse", "Mouse",
"Mice", "Mice",
@@ -1745,5 +2801,15 @@
"PostalCode", "PostalCode",
"BusinessCategory", "BusinessCategory",
"TelephoneNumber" "TelephoneNumber"
],
"XSDSchema": [
"True",
"False",
"Name"
],
"XmlTreeGen": [
"Namespace",
"Unique",
"Attribute"
] ]
} }
@@ -1795,7 +1795,6 @@ public class RoomsController(
{ {
Type = RoomTagTypeForWire(t), Type = RoomTagTypeForWire(t),
Tag = t, Tag = t,
IsPrimaryGenre = false,
}) })
.ToArray(); .ToArray();
@@ -2006,7 +2005,6 @@ public class RoomsController(
RoomId = room.Id, RoomId = room.Id,
Name = s.Name, Name = s.Name,
UnityAssetId = s.StudioUnityAssetId, UnityAssetId = s.StudioUnityAssetId,
SubRoomUnityAssetId = s.StudioUnityAssetId,
UnityAsset = unityAsset?.Filename ?? string.Empty, UnityAsset = unityAsset?.Filename ?? string.Empty,
UnityAssetHash = string.Empty, UnityAssetHash = string.Empty,
DataBlob = dataBlob, DataBlob = dataBlob,
@@ -2017,36 +2015,6 @@ public class RoomsController(
MaxPlayers = s.MaxPlayers, MaxPlayers = s.MaxPlayers,
Accessibility = room.Accessibility, Accessibility = room.Accessibility,
UnitySceneId = s.RoomSceneLocationId, UnitySceneId = s.RoomSceneLocationId,
CurrentSave = new
{
SubRoomDataSaveId = s.StudioSubRoomDataSaveId ?? 0L,
SubRoomId = (long)s.OrderIndex,
UnityAssetId = s.StudioUnityAssetId,
SubRoomUnityAssetId = s.StudioUnityAssetId,
CreatedByAccountId = room.CreatorPlayerId,
ReferencedUnityAssetIds = Array.Empty<string>(),
DataBlob = dataBlob,
DataBlobHash = (string?)null,
PersistenceVersion = saveVersion,
OMVersion = 0,
SavedByAccountId = room.CreatorPlayerId,
SavedOnPlatform = 0,
SavedOnDeviceClass = 2,
Description = string.Empty,
ModerationState = 0,
CreatedAt = (s.DataModifiedAt == default ? DateTime.UtcNow : s.DataModifiedAt)
.ToString("yyyy-MM-ddTHH:mm:ssZ"),
UgcSubVersion = saveVersion,
UnityAssetHash = string.Empty,
UnityAsset = unityAssetParent,
UnityAssetFilename = unityAsset?.Filename ?? string.Empty,
BakedUnityAssets = bakedAssets,
UnitySubAssets = Array.Empty<object>(),
},
LastModeratedSaveModerationState = 0,
DefaultMatchmakingPolicy = 0,
ShouldAutoStageSaves = true,
StagedSubRoomDataSaveId = (long?)null,
}; };
}).ToArray() }).ToArray()
: new object[] : new object[]
@@ -2063,7 +2031,6 @@ public class RoomsController(
RoomId = room.Id, RoomId = room.Id,
Name = "Home", Name = "Home",
UnityAssetId = string.Empty, UnityAssetId = string.Empty,
SubRoomUnityAssetId = string.Empty,
UnityAsset = string.Empty, UnityAsset = string.Empty,
UnityAssetHash = string.Empty, UnityAssetHash = string.Empty,
// Same rule as the populated branch: honour the override, // Same rule as the populated branch: honour the override,
@@ -2076,15 +2043,6 @@ public class RoomsController(
MaxPlayers = 8, MaxPlayers = 8,
Accessibility = room.Accessibility, Accessibility = room.Accessibility,
UnitySceneId = room.LocationReplicationId, UnitySceneId = room.LocationReplicationId,
CurrentSave = new
{
SubRoomDataSaveId = 0L,
SubRoomId = 0L,
UnityAssetId = string.Empty,
SubRoomUnityAssetId = string.Empty,
ReferencedUnityAssetIds = Array.Empty<string>(),
DataBlob = dataBlobName,
},
}, },
}; };
@@ -2102,7 +2060,6 @@ public class RoomsController(
{ {
Type = RoomTagTypeForWire(t), Type = RoomTagTypeForWire(t),
Tag = t, Tag = t,
IsPrimaryGenre = false,
}) })
.ToArray(); .ToArray();
@@ -3384,7 +3341,6 @@ public class RoomsController(
{ {
Type = RoomTagTypeForWire(t), Type = RoomTagTypeForWire(t),
Tag = t, Tag = t,
IsPrimaryGenre = false,
}) })
.ToList(); .ToList();
+5 -3
View File
@@ -35,9 +35,11 @@ import re
import sys import sys
from pathlib import Path from pathlib import Path
# A type with only a couple of fields is usually a wrapper or a false positive # Two is deliberate, not lax. Several real wire DTOs are exactly that small —
# (enum name tables register short literal runs too). Real wire DTOs are wider. # a room tag is {Tag, Type} — and a higher floor hides them, which is how an
MIN_FIELDS = 4 # invented third key on the tag object went unnoticed. The alias rule in
# fields_in() is what rejects false positives, not the field count.
MIN_FIELDS = 2
LITERAL = re.compile(r'Move \w+, "([A-Za-z][A-Za-z0-9_]*)"') LITERAL = re.compile(r'Move \w+, "([A-Za-z][A-Za-z0-9_]*)"')