Files
Radicade/docs/GIFT-CONTEXT-DUMP.md
T
2026-10-16 23:33:13 -07:00

7.6 KiB

Gift context dump and implementation handoff

Snapshot: 2026-10-08. Source: current local server checkout. This is the complete server GiftContext enum, not an independently verified client enum dump. Numeric gaps are intentional. Context identifies a gift's source; it does not supply its item or implement its challenge.

Friendotron

  • There is no enum member named Friendotron.
  • POST /econ/api/freegifts/v1/sendmultiple currently returns an empty array and does not grant anything (Server/API/Compatibility/CompatibilityAPI.cs).
  • GET /api/config/v1/freegiftbutton currently returns false (Server/API/Config/ConfigAPI.cs).
  • The placeholder config contains Friendotron_AllowSelfGifting and Friendotron_MaxUsersPerSession (Server/DB/DBConfig.cs). Placeholder entries do not establish the live database configuration.
  • Notification enum FreeGiftButtonItemsAdded = 110 exists in Server/RecNet/Enums/Messages.
  • Local inspection log .tmp-gift.log identifies RecNet.MultiRecipientFreeGiftRequestDTO, DIEKLMGBLKA.RequestPurchaseForFreeGiftButtonDTO and DIEKLMGBLKA.GiftItemDTO. Their names are leads, not a verified request schema.
  • Next implementation work: inspect the target client's request/response/config schemas and context choice; implement recipient validation, eligibility/cooldowns, gift selection, durable grants and retry deduplication; then enable the feature with the expected config payload. Do not assume Purchased_Gift_A is Friendotron's context merely because it is used for purchased gifts.

Weeklys

  • All_Weekly_Challenge_Complete = 4.
  • Weekly_Challenge_Complete = 6.
  • RewardType.WeeklyCompleteButHaveSkin = 4 is a DIFFERENT enum from GiftContext.
  • Server/API/Progression/Challenges/V2/ChallengeV2.cs has GET getCurrent returning {} and POST updateProgress returning an empty successful response, under both /api/challenge/v2 and /econ/api/challenge/v2.
  • Server/API/GameRewards/V1/GameRewardsAPI.cs maps WeeklyCompleteButHaveSkin to All_Weekly_Challenge_Complete. Its BuildReward method constructs token choices of 300, 600 and 900 for that reward type; this does not implement weekly challenge progress or a weekly skin award.
  • Next implementation work: recover the target client's challenge DTOs/objectives; provide current weekly definitions, period dates and reward items; persist authenticated progress and completion; grant the configured reward once per period; verify the already-owned-skin fallback and rollover behavior.

Gift delivery and wire format

  • Server/RecNet/Avatar/Gift.cs stores Context as GiftContext and exposes integer GiftContext as an alias. Id and GiftPackageId alias GiftDropId; Message aliases Tooltip; GiftRarity aliases Rarity.
  • Item payloads include AvatarItemDesc, ConsumableItemDesc, EquipmentPrefabName / EquipmentModificationGuid, and CurrencyType / Currency. A context alone does not specify a skin.
  • POST /api/avatar/v2/gifts/generate (also /econ/api/avatar/v2/gifts/generate) accepts GiftContext or MFPELEJLJLD; AlternateGiftContext or CIEHFJEIOJJ; Message or DPAJDIEBNKM; and Xp / XP. The alternate context is parsed but is not used to select the reward in this method.
  • Generation first looks for an outstanding reward, a pending box, or a recently handed-over box; supported activity contexts can resolve a room reward. Otherwise BuildGeneratedGift makes a random token box of 10, 25, 50, 100, 250 or 500. Sending context 4 or 6 alone is therefore not a weekly-skin implementation.
  • Generated gifts are persisted with notify:false because the response hands the box to the client.
  • Server/API/Storefront/StorefrontShared.cs provides PersistGiftBoxAsync and SendGiftPackageNotificationAsync. Reuse the existing grant/claim lifecycle rather than inventing a separate inventory path.
  • Server/Utils/GameRewardRedemption.cs handles outstanding/pending/recent reward reuse; Server/Utils/RroRewardPools.cs maps activity contexts and pools.
  • AvatarV2 also implements gift claim and consume routes. Exercise generation, notification, claim, consume, retries and reconnects with the target client before declaring a new reward flow complete.

Full GiftContext enum

Value Name
-1 None
0 Default
1 First_Activity
2 Game_Drop
3 All_Daily_Challenges_Complete
4 All_Weekly_Challenge_Complete
5 Daily_Challenge_Complete
6 Weekly_Challenge_Complete
10 Unassigned_Equipment
11 Unassigned_Avatar
12 Unassigned_Consumable
20 Reacquisition
21 Membership
30 NUX_TokensAndDressUp
31 NUX_Experiment1
32 NUX_Experiment2
33 NUX_Experiment3
34 NUX_Experiment4
35 NUX_Experiment5
50 GameRewards
51 GameRewards_Tokens
100 LevelUp
500 Purchased_Gift_A
501 Purchased_Gift_B
502 Purchased_Gift_C
503 Purchased_Gift_D
1000 Holiday
1001 Contest
1002 Promotion
1003 SubscribersOnly
1100 Deprecated
1200 RecRoyale
2000 DEPRECATED_Paintball_ClearCut
2001 DEPRECATED_Paintball_Homestead
2002 DEPRECATED_Paintball_Quarry
2003 DEPRECATED_Paintball_River
2004 DEPRECATED_Paintball_Dam
2005 DEPRECATED_Paintball_DriveIn
2010 Paintball_ClearCut
2011 Paintball_Homestead
2012 Paintball_Quarry
2013 Paintball_River
2014 Paintball_Dam
2015 Paintball_DriveIn
3000 DEPRECATED_Discgolf_Propulsion
3001 DEPRECATED_Discgolf_Lake
3010 Discgolf_Propulsion
3011 Discgolf_Lake
3500 Discgolf_Mode_CoopCatch
4000 Quest_Goblin_A
4001 Quest_Goblin_B
4002 Quest_Goblin_C
4003 Quest_Goblin_S
4004 Quest_Goblin_Consumable
4010 Quest_Cauldron_A
4011 Quest_Cauldron_B
4012 Quest_Cauldron_C
4013 Quest_Cauldron_S
4014 Quest_Cauldron_Consumable
4100 Quest_Pirate1_A
4101 Quest_Pirate1_B
4102 Quest_Pirate1_C
4103 Quest_Pirate1_S
4104 Quest_Pirate1_X
4105 Quest_Pirate1_Consumable
4200 Quest_Dracula1_A
4201 Quest_Dracula1_B
4202 Quest_Dracula1_C
4203 Quest_Dracula1_S
4204 Quest_Dracula1_X
4205 Quest_Dracula1_Consumable
4206 Quest_Dracula1_SS
4500 Quest_SciFi_A
4501 Quest_SciFi_B
4502 Quest_SciFi_C
4503 Quest_SciFi_S
4504 Quest_Scifi_Consumable
5000 DEPRECATED_Charades
5001 Charades
6000 DEPRECATED_Soccer
6001 Soccer
7000 DEPRECATED_Paddleball
7001 Paddleball
8000 DEPRECATED_Dodgeball
8001 Dodgeball
9000 DEPRECATED_Lasertag
9001 Lasertag
10000 DEPRECATED_Bowling
10001 Bowling
11000 StuntRunner_TheMainEvent_A
11001 StuntRunner_TheMainEvent_B
11002 StuntRunner_TheMainEvent_C
11003 StuntRunner_TheMainEvent_D
11004 StuntRunner_TheMainEvent_S
11005 StuntRunner_TheMainEvent_X
11006 StuntRunner_TheMainEvent_Consumable
11007 StuntRunner_TheMainEvent_SS
100000 Store_LaserTag
100010 Store_RecCenter
110000 Consumable
110100 Token
110200 Punchcard_Challenge_Complete
110201 All_Punchcard_Challenges_Complete
200000 Commerce_Purchase

RewardType enum (separate numeric namespace)

Value Name
0 FirstActivityOfDay
1 DailyChallengesComplete
2 PostGameActivity
3 PostQuestActivity
4 WeeklyCompleteButHaveSkin
5 Levelup
6 ReferralReward

Scope and validation

Enum values were expanded directly from the C# source, including explicit resets and implicit increments. JSON is in docs/gift-context.json. No runtime code or live data was changed. Friendotron's exact client contract and weekly challenge payloads still require client inspection; this document does not claim those features work.