Reward offers are local game-facing entitlements created from LynxRelay milestone versions.
They exist because server claim state and in-game reward state are not the same thing.
MVP policy
One offer per relay.
If multiple reward versions are available, offer the highest version.
The highest reward includes or replaces lower versions.
Example:
local claimed: 46
server completion: 49
available versions: 47, 48, 49
offer: reward_version 49
The player sees one chest, not three.
Correct claim order
var result := await LynxRewards.prepare_offer_claim(relay_id)
if result.get("ok", false):
var offer: Dictionary = result["offer"]
give_reward(offer)
save_game()
LynxRewards.complete_offer(relay_id)
Design requirement
If you use the highest-version MVP policy, reward version 49 should be designed to replace or include 47 and 48.