Files
2026-08-11 10:11:51 -04:00

11 KiB
Raw Permalink Blame History

name, description
name description
daily-objectives Guide for parsing/writing daily objectives in /api/config/v2

Daily objectives — config shape and the full type enum

Reference for authoring dailyObjectives in GET /api/config/v2. Extracted from the 20230414 client (GameAssembly.dll mtime 2026-07-23). See SHAPES.md for the method used.

This table survives game upgrades. Enum member names and values are not obfuscated — only type and method names re-roll per build. So the ids below stay valid across client versions unless Rec Room adds or removes members. The obfuscated names in this file (PNLFAAAPEID, LCPOOJEAMJA, …) are the only part that will go stale.

Where it lives

GET api/config/v2 (service API) → JAGPNOHGHBG.DownloadConfigSettings, deserialized as a bare LCPOOJEAMJA via SendWithRequiredResponseAsync — response required, no envelope.

Top-level keys, in declaration order (all accept three casings):

Wire name Type
levelProgressionMaps array of objects
dailyObjectives jagged arrayFCAOHDFPEAP[][]
serverMaintenance object
autoMicMutingConfig object
storefrontConfig object
roomKeyConfig object
roomCurrencyConfig object
shareBaseUrl string

A Dictionary<int,int> declared first on the type carries [IgnoreDataMember] — client-only, never on the wire.

dailyObjectives shape

Array of arrays. Each leaf element (FCAOHDFPEAP, formatter BMBOPLBKALL) has exactly two members:

Wire name Type
type int — a value from the table below
score int — the target / threshold
{
  "dailyObjectives": [
    [ { "type": 1,   "score": 1 },
      { "type": 6,   "score": 5 },
      { "type": 31,  "score": 3 } ],
    [ { "type": 2,   "score": 1 },
      { "type": 65,  "score": 2 },
      { "type": 300, "score": 1 } ]
  ]
}

Unverified: what the outer dimension indexes. The updateobjective DTO carries both index and group, which lines up with dailyObjectives[group][index], and DailyObjective1/2/3 existing as distinct types suggests three slots per set — but neither is confirmed against the consumer. Serve a distinctive jagged array and watch the group/index pairs your endpoint receives.

Numbering scheme

The ids are blocked, which tells you where new entries belong:

Range Meaning Count
-1 15 meta / rollup / social 16
20 26 onboarding (OOBE, NUX) 5
30 75 general engagement 45
100+ per-activity, one block each 67

Activity blocks follow a Games / Wins / <activity-specific> pattern. Quest (1000) additionally sub-blocks by scenario in steps of 10.

Careful with 1015. DailyObjective1/2/3, AllDailyObjectives, CompleteAnyDaily and CompleteAnyWeekly read as rollup types the reward system uses to track "you finished daily #1", not as objective definitions themselves. Using them as leaf type values in dailyObjectives is probably not what you want. (Inference from naming — not traced.)

Full enum — PNLFAAAPEID, 133 values

id name
-1 Default
1 FirstSessionOfDay
2 AddAFriend
3 PartyUp
4 AllOtherChallenges
5 LevelUp
6 CheerAPlayer
7 PointedAtPlayer
8 CheerARoom
9 SubscribeToPlayer
10 DailyObjective1
11 DailyObjective2
12 DailyObjective3
13 AllDailyObjectives
14 CompleteAnyDaily
15 CompleteAnyWeekly
20 OOBE_GoToLockerRoom
21 OOBE_GoToActivity
22 OOBE_FinishActivity
25 NUX_PunchcardObjective
26 NUX_AllPunchcardObjectives
30 GoToRecCenter
31 FinishActivity
32 VisitACustomRoom
33 CreateACustomRoom
35 ScoreBasketInRecCenter
36 UploadPhotoToRecNet
37 UpdatePlayerBio
38 SaveOutfitSlot
39 PurchaseClothingItem
40 PurchaseNonClothingItem
41 DrinkWater
42 ColorOnWhiteboard
43 SetBasketballSkin
44 ThrowBasketball
45 PlaceInventionInDorm
46 ChangeDormRoomSkin
47 ToggleOwnedClothes
48 EquipHat
49 LoadOutfit
50 SaveNewOutfitSlot
51 SpawnCamera
52 TakeSelfie
53 PrintSelfie
54 TakePictureOfPlayer
55 PrintPictureOfPlayer
56 PublishSelfieWithPlayer
57 SpawnFoodWithOtherPlayers
58 EmoteInRecCenter
59 SendRoomChatInRecCenter
60 UseFrendotron
61 GoToDormRoom
62 VisitSpecificRoom
63 VisitPublicRRO
64 VisitPublicRoomBySource
65 FavoriteARoom
66 TakePhotoWithFilter
67 OpenYourPlayerProfile
68 OpenOnlineStatusModal
69 ChangeProfilePicture
70 ChangePlayerDisplayName
71 ChangePlayerDescriptionText
72 OpenPlayerPronounsModal
73 OpenOtherPlayersProfile
74 VisitPlayersPortfolio
75 FavoriteAFriend
100 CharadesGames
101 CharadesWinsPerformer
102 CharadesWinsGuesser
200 DiscGolfWins
201 DiscGolfGames
202 DiscGolfHolesUnderPar
300 DodgeballWins
301 DodgeballGames
302 DodgeballHits
400 PaddleballGames
401 PaddleballWins
402 PaddleballScores
500 PaintballAnyModeGames
501 PaintballAnyModeWins
502 PaintballAnyModeHits
600 PaintballCTFWins
601 PaintballCTFGames
602 PaintballCTFHits
603 PaintballFlagCaptures
700 PaintballTeamBattleWins
701 PaintballTeamBattleGames
702 PaintballTeamBattleHits
710 PaintballFreeForAllWins
711 PaintballFreeForAllGames
712 PaintballFreeForAllHits
800 SoccerWins
801 SoccerGames
802 SoccerGoals
900 BowlingGames
901 BowlingWins
902 BowlingStrike
1000 QuestGames
1001 QuestWins
1002 QuestPlayerRevives
1003 QuestEnemyKills
1010 QuestGames_Goblin1
1011 QuestWins_Goblin1
1012 QuestPlayerRevives_Goblin1
1013 QuestEnemyKills_Goblin1
1020 QuestGames_Goblin2
1021 QuestWins_Goblin2
1022 QuestPlayerRevives_Goblin2
1023 QuestEnemyKills_Goblin2
1030 QuestGames_Scifi1
1031 QuestWins_Scifi1
1032 QuestPlayerRevives_Scifi1
1033 QuestEnemyKills_Scifi1
1040 QuestGames_Pirate1
1041 QuestWins_Pirate1
1042 QuestPlayerRevives_Pirate1
1043 QuestEnemyKills_Pirate1
1050 QuestGames_Dracula1
1051 QuestWins_Dracula1
1052 QuestPlayerRevives_Dracula1
1053 QuestEnemyKills_Dracula1
2000 ArenaGames
2001 ArenaWins
2002 ArenaPlayerRevives
2003 ArenaHeroTags
2004 ArenaBotTags
3000 RecRoyaleGames
3001 RecRoyaleWins
3002 RecRoyaleTags
4000 StuntRunnerGames
4001 StuntRunnerWins
5000 RecRallyGames
5001 RecRallyWins

Machine-readable

{"Default":-1,"FirstSessionOfDay":1,"AddAFriend":2,"PartyUp":3,"AllOtherChallenges":4,"LevelUp":5,"CheerAPlayer":6,"PointedAtPlayer":7,"CheerARoom":8,"SubscribeToPlayer":9,"DailyObjective1":10,"DailyObjective2":11,"DailyObjective3":12,"AllDailyObjectives":13,"CompleteAnyDaily":14,"CompleteAnyWeekly":15,"OOBE_GoToLockerRoom":20,"OOBE_GoToActivity":21,"OOBE_FinishActivity":22,"NUX_PunchcardObjective":25,"NUX_AllPunchcardObjectives":26,"GoToRecCenter":30,"FinishActivity":31,"VisitACustomRoom":32,"CreateACustomRoom":33,"ScoreBasketInRecCenter":35,"UploadPhotoToRecNet":36,"UpdatePlayerBio":37,"SaveOutfitSlot":38,"PurchaseClothingItem":39,"PurchaseNonClothingItem":40,"DrinkWater":41,"ColorOnWhiteboard":42,"SetBasketballSkin":43,"ThrowBasketball":44,"PlaceInventionInDorm":45,"ChangeDormRoomSkin":46,"ToggleOwnedClothes":47,"EquipHat":48,"LoadOutfit":49,"SaveNewOutfitSlot":50,"SpawnCamera":51,"TakeSelfie":52,"PrintSelfie":53,"TakePictureOfPlayer":54,"PrintPictureOfPlayer":55,"PublishSelfieWithPlayer":56,"SpawnFoodWithOtherPlayers":57,"EmoteInRecCenter":58,"SendRoomChatInRecCenter":59,"UseFrendotron":60,"GoToDormRoom":61,"VisitSpecificRoom":62,"VisitPublicRRO":63,"VisitPublicRoomBySource":64,"FavoriteARoom":65,"TakePhotoWithFilter":66,"OpenYourPlayerProfile":67,"OpenOnlineStatusModal":68,"ChangeProfilePicture":69,"ChangePlayerDisplayName":70,"ChangePlayerDescriptionText":71,"OpenPlayerPronounsModal":72,"OpenOtherPlayersProfile":73,"VisitPlayersPortfolio":74,"FavoriteAFriend":75,"CharadesGames":100,"CharadesWinsPerformer":101,"CharadesWinsGuesser":102,"DiscGolfWins":200,"DiscGolfGames":201,"DiscGolfHolesUnderPar":202,"DodgeballWins":300,"DodgeballGames":301,"DodgeballHits":302,"PaddleballGames":400,"PaddleballWins":401,"PaddleballScores":402,"PaintballAnyModeGames":500,"PaintballAnyModeWins":501,"PaintballAnyModeHits":502,"PaintballCTFWins":600,"PaintballCTFGames":601,"PaintballCTFHits":602,"PaintballFlagCaptures":603,"PaintballTeamBattleWins":700,"PaintballTeamBattleGames":701,"PaintballTeamBattleHits":702,"PaintballFreeForAllWins":710,"PaintballFreeForAllGames":711,"PaintballFreeForAllHits":712,"SoccerWins":800,"SoccerGames":801,"SoccerGoals":802,"BowlingGames":900,"BowlingWins":901,"BowlingStrike":902,"QuestGames":1000,"QuestWins":1001,"QuestPlayerRevives":1002,"QuestEnemyKills":1003,"QuestGames_Goblin1":1010,"QuestWins_Goblin1":1011,"QuestPlayerRevives_Goblin1":1012,"QuestEnemyKills_Goblin1":1013,"QuestGames_Goblin2":1020,"QuestWins_Goblin2":1021,"QuestPlayerRevives_Goblin2":1022,"QuestEnemyKills_Goblin2":1023,"QuestGames_Scifi1":1030,"QuestWins_Scifi1":1031,"QuestPlayerRevives_Scifi1":1032,"QuestEnemyKills_Scifi1":1033,"QuestGames_Pirate1":1040,"QuestWins_Pirate1":1041,"QuestPlayerRevives_Pirate1":1042,"QuestEnemyKills_Pirate1":1043,"QuestGames_Dracula1":1050,"QuestWins_Dracula1":1051,"QuestPlayerRevives_Dracula1":1052,"QuestEnemyKills_Dracula1":1053,"ArenaGames":2000,"ArenaWins":2001,"ArenaPlayerRevives":2002,"ArenaHeroTags":2003,"ArenaBotTags":2004,"RecRoyaleGames":3000,"RecRoyaleWins":3001,"RecRoyaleTags":3002,"StuntRunnerGames":4000,"StuntRunnerWins":4001,"RecRallyGames":5000,"RecRallyWins":5001}
Endpoint Purpose
GET api/config/v2 serves dailyObjectives (this file)
GET api/objectives/v1/myprogress player's current progress
POST api/objectives/v1/updateobjective one objective update — {index, group, progress, visualProgress, isCompleted, hasClaimedReward}{group, isCompleted, clearedAt}
POST api/objectives/v1/completegroup group completion
POST api/objectives/v1/cleargroup group reset

The objectives endpoints are on the Econ service (econ.*); config is on API (api.*).

How this was extracted

# in the il2cpp scratchpad, with Il2CppDumper output in ./out/
grep -n "enum PNLFAAAPEID" out/dump.cs      # find the block
# then parse `public const PNLFAAAPEID <name> = <value>;` lines until the closing brace

The dailyObjectives wire name came from the Utf8Json formatter, not the property name — see SHAPES.md §1. Formatter .ctor RVAs for this build: LCPOOJEAMJA0x3512E10, FCAOHDFPEAP0x34EE5F0.