mirror of
https://github.com/DorkSquadRR/DorkNet.git
synced 2026-10-26 07:28:45 -07:00
feat: Implement quest reward system with item selection and storage; update related services and database schema
This commit is contained in:
@@ -180,6 +180,30 @@ since 2020:
|
||||
|
||||
Coverage: `DorkNet.Server.Tests/WatchShop2023Tests.cs`.
|
||||
|
||||
## Shop Consumables tab (food / potions / KO / camera film)
|
||||
|
||||
The Shop's Consumables tab is fed by the same `giftdropstore` rows as
|
||||
Clothing; a row is a consumable when its `GiftDrop.ConsumableItemDesc`
|
||||
is set (bracketed literal item key, e.g. `[FoodConsumable_RootBeer]`)
|
||||
and it carries no avatar item (`AvatarItemDesc` empty, `AvatarItemType`
|
||||
null). Hair dyes are a hybrid — they set BOTH `ConsumableItemDesc` and
|
||||
an `AvatarItemDesc` colour guid.
|
||||
|
||||
The catalog of literal item keys lives in the client's baked
|
||||
`ConsumableCollectionRuntimeConfig` MonoBehaviour (in `resources.assets`,
|
||||
path_id 234695 for 2023.03.21). Each record is
|
||||
`[ desc "[Family_Name]" ][ guid 22ch ][ display name ][ int family ]
|
||||
[ tool desc ]`; families: CameraFilter, Food, KO, HandPotion,
|
||||
HeadPotion, VFX, HairDye, Coupon. Extracted (minus hair dyes, coupons,
|
||||
and promo-only bubbly variants) to `DorkNet.Server/Data/consumables.json`
|
||||
and seeded as `Category="consumable"` store rows;
|
||||
`StoreService.TryGetConsumableItemDesc` resolves a seeded slug to its
|
||||
literal desc so it flows through the gift-drop builder like a hair dye.
|
||||
|
||||
The exact per-item render gate (`INJHHPOOMKB.EEJKFKPAPAH`) dispatches
|
||||
through a runtime service and could not be resolved statically — confirm
|
||||
the tab actually populates in-game after seeding.
|
||||
|
||||
## Related: unprefixed 2023 commerce probes
|
||||
|
||||
The 2023 client also calls these commerce paths **without** the `api/`
|
||||
|
||||
@@ -34,6 +34,31 @@ on 2026-07-07. Diagnosed while fixing "Failed to save room" /
|
||||
`CurrentDataBlobName` (and the dorm-state row for dorms).
|
||||
`RoomData.Filename` is the FileType=6 metadata blob.
|
||||
|
||||
**Response contract** (deserializer `NEOPBOMGIOG`, mapper
|
||||
`KMBHAKAHNGH`): legacy `{success, value, error}` envelope where
|
||||
`value` MUST contain BOTH keys, non-null:
|
||||
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"value": {
|
||||
"Room": { …same DTO as GET rooms/{id} (BuildRoomServerDetails)… },
|
||||
"SubRoomDataSave": { "SubRoomDataSaveId": 0, "SubRoomId": 0,
|
||||
"UnityAssetId": "", "DataBlob": "<blob>.dat",
|
||||
"SavedByAccountId": 1, "SavedOnPlatform": 7,
|
||||
"SavedOnDeviceClass": 2, "CreatedAt": "…", … }
|
||||
},
|
||||
"error": ""
|
||||
}
|
||||
```
|
||||
|
||||
The client's post-parse validator NREs if `Room` or
|
||||
`SubRoomDataSave` is missing — the save persists server-side but the
|
||||
watch shows "Failed to save room". `SubRoomDataSave` keys per the
|
||||
`JKIFFPPAJNK` mapper (`PELEHJLMKJO`): SubRoomDataSaveId, SubRoomId,
|
||||
UnityAssetId, DataBlob, DataBlobHash, SavedByAccountId,
|
||||
SavedOnPlatform, SavedOnDeviceClass, Description, CreatedAt.
|
||||
|
||||
Server handling: `StorageController.Upload` (FileType 6 →
|
||||
`UploadGenericAsync("roommeta")`, CDN-servable) and
|
||||
`RoomsController.SubRoomData` → `ReadSaveRoomSceneRequestAsync` (nested
|
||||
@@ -45,6 +70,7 @@ Server handling: `StorageController.Upload` (FileType 6 →
|
||||
|---|---|
|
||||
| `NDIKGKCFOCG: An error occurred` at `UploadRoomDataBlobAndSyncReload`, upload frame (`KPLOPGMJOLE`) in stack | `storage.<apex>` host not routed at the edge (Traefik `404 page not found`) — the save dies before reaching DorkNet. Probe `https://storage.<apex>/healthz`. |
|
||||
| `NDIKGKCFOCG: Failed to save room`, no upload frame in stack | Commit POST rejected — historically 400 `missing_room_data_filename` because the server parsed only the flat 2020 body and missed `SubRoomData.Filename`. |
|
||||
| `NDIKGKCFOCG: Failed to save room` preceded by a `NullReferenceException` at `NEOPBOMGIOG.FKDDCNLJOLF` | Commit returned 200 but `value` wasn't `{Room, SubRoomDataSave}` — the save actually persisted; only the response parse failed. |
|
||||
|
||||
## Related 2023 quirks fixed alongside
|
||||
|
||||
|
||||
Reference in New Issue
Block a user