Files
2026-06-15 21:49:45 +02:00

98 lines
2.1 KiB
Markdown

# Earnings Center Packet Contract
This document is the emulator-side contract for the "Guadagni" UI.
## Incoming
### `RequestEarningsCenterEvent`
- Header: `9308`
- Body: empty
- Response: `EarningsCenterComposer`
### `ClaimEarningsRewardEvent`
- Header: `9309`
- Body:
- `String categoryKey`
- Response: `EarningsClaimResultComposer`
### `ClaimAllEarningsRewardsEvent`
- Header: `9310`
- Body: empty
- Response: `EarningsClaimResultComposer`
## Outgoing
### `EarningsCenterComposer`
- Header: `9407`
- Body:
- `int entryCount`
- repeated entry:
- `String categoryKey`
- `boolean enabled`
- `boolean claimable`
- `int nextClaimAt`
- `int rewardCount`
- repeated reward:
- `String type`
- `int amount`
- `int pointsType`
- `String data`
### `EarningsClaimResultComposer`
- Header: `9408`
- Body:
- `int resultCount`
- repeated result:
- `String categoryKey`
- `String status`
- `boolean success`
- `boolean hasEntry`
- entry body when `hasEntry=true`, same shape as `EarningsCenterComposer`
## Categories
- `daily_gift`
- `games`
- `achievements`
- `marketplace`
- `hc_payday`
- `level_progress`
- `donations`
- `bonus_bag`
- `mystery_boxes`
- `club_job`
## Reward Types
- `credits`
- `pixels`
- `points`
- `badge`
- `item`
- `hc_days`
For `points`, `pointsType` carries the currency type. For `badge`, `data` carries the badge code. For `item`, `data` carries the `items_base.id`. Other reward types keep `data` empty.
`marketplace` and `hc_payday` can be native rows. In native mode the amounts come from existing server state:
- `marketplace`: sold marketplace offers waiting for payout
- `hc_payday`: unclaimed rows in `logs_hc_payday`
- `achievements`: configured rewards gated by achievement score buckets
- `level_progress`: configured rewards gated by citizenship/helper talent level
## Result Status
- `success`
- `disabled`
- `unknown_category`
- `already_claimed`
- `no_reward`
- `error`
The client must not send reward amounts. Claim eligibility and rewards are always server authoritative.