Commit Graph

975 Commits

Author SHA1 Message Date
DuckieTM abce531616 Merge pull request #238 from simoleo89/fix/inventory-state-bugs
fix(inventory): state-mutation & stale-read bugs
2026-06-15 07:14:28 +02:00
DuckieTM f1c9e1baee Merge pull request #237 from simoleo89/feat/furni-editor-create-missing
feat(furni-editor): create furnidata entry when missing (upsert Save)
2026-06-15 07:14:04 +02:00
simoleo89 b27f48f2a2 feat(furni-editor): sync empty public_name from furnidata name
When a furni has a matching furnidata entry with a display name but its
items_base.public_name (the DB fallback) is empty, the editor now shows a
'Sync from furnidata' button next to the Public Name field. It reuses the
generic item update (a partial { publicName } payload) to fill the DB column
from the stored furnidata name, so the read-only fallback stops being blank.
Button shows only when the entry's classname matches, the DB field is empty,
and the furnidata name is present; it disappears after the sync re-fetch.
2026-06-14 16:41:55 +02:00
simoleo89 88d2128295 docs(furni-editor): design for syncing empty public_name from furnidata 2026-06-14 15:53:13 +02:00
simoleo89 1676b3c871 fix(furni-editor): surface upsert failures and revert optimistic name on error
When creating a furnidata entry for a furni whose sprite id is already used
by another classname, the server rejects with ID_COLLISION. The client showed
the optimistic public-name change but never reverted it, so a failed create
looked like it had succeeded. On any FurniEditorResult failure, re-fetch the
item detail to restore the true state (the error alert was already shown).
2026-06-14 14:44:25 +02:00
simoleo89 af6f65b194 fix(inventory): drop leaking badge pending-counter; trust server active set
sendActiveBadges incremented pendingUpdatesRef on every edit, and the BadgesEvent
handler skipped applying the server's active badges while the counter was > 0,
decrementing once per BadgesEvent. The assumption was "one BadgesEvent echo per
SetActivatedBadges" — but the emulator's UserWearBadgeEvent answers with a
UserBadgesComposer room broadcast, NOT a BadgesEvent, so nothing ever decrements
the counter. It leaks upward with every toggle/reorder/swap and then silently
drops legitimate later BadgesEvent updates (the server-authoritative active set
never reapplies). Remove the counter and always apply the server's active badges
on BadgesEvent (edits are already persisted server-side, so this is correct).
2026-06-13 18:15:19 +02:00
simoleo89 39fbfdd9e2 fix(inventory): derive active prefix from the fresh list, not a stale closure
The ActivePrefixUpdatedEvent handler set the active prefix via
`setActivePrefix(prev => { const found = prefixes.find(...) })`, reading the
`prefixes` state from the closure — which lags by a render and is stale/empty when
the prefix was added earlier in the same event batch, so `found` was undefined and
the active prefix fell back to a partial item missing icon/color/displayName. Move
the derivation inside the `setPrefixes` updater so it reads the freshly-mapped list.
2026-06-13 18:15:19 +02:00
simoleo89 9cc9ef86c0 fix(inventory): stop unseen-tracker mutating shared state arrays in place
resetItems/removeUnseen/the UnseenItemsEvent handler each did `new Map(prevValue)`
(a shallow copy) then spliced/pushed the per-category array returned by
`.get(category)` — the SAME array reference still held by the previous Map. That
mutates state outside React's data flow (breaks under StrictMode double-invoke and
any updater replay). resetItems additionally did `splice(existing.indexOf(id), 1)`
with no guard, so an id not present (indexOf === -1) spliced off the wrong LAST
element. Replace each in-place splice/push with a cloned array set back on the new
Map (filter for removals, spread+push for the merge).
2026-06-13 18:15:19 +02:00
simoleo89 74cbeccb52 feat(furni-editor): create furnidata entry when missing (upsert Save)
When a furni has no furnidata entry (furniDataEntry === null), unlock the
name/description fields instead of locking them: the Save button becomes
"Create entry" and sends the existing FurniEditorUpdateFurnidataComposer (10046),
which the emulator now upserts (creates a complete entry from items_base). The
classname-mismatch case (entry resolved by id but for a different classname)
stays locked to avoid an id collision. On success the hook already re-fetches the
detail, so the panel flips to normal edit mode. Name input prefills (placeholder)
from the DB Public Name.
2026-06-13 18:01:02 +02:00
DuckieTM 93baedf206 Merge pull request #235 from duckietm/main
Sync Main to dev
2026-06-12 16:02:40 +02:00
DuckieTM 3c9332e798 Merge pull request #234 from duckietm/Dev
Dev
2026-06-12 16:01:58 +02:00
DuckieTM d0a7d200d1 Merge pull request #230 from hotellidev/multicolorfurnifix
Fix multicolor furni names
2026-06-12 15:54:27 +02:00
DuckieTM c62e041d46 Merge pull request #229 from simoleo89/feat/installer-configurable-renderer-dir
feat(installer): make the renderer folder configurable
2026-06-12 15:53:46 +02:00
DuckieTM 419cb4cbde Merge pull request #228 from RemcoEpicnabbo/Dev
Remove trailing comma in ui-config.example
2026-06-12 15:53:05 +02:00
hotellidev caf80e5386 Merge branch 'duckietm:main' into multicolorfurnifix 2026-06-12 03:15:02 +03:00
DuckieTM 32b0e2a370 Merge pull request #233 from duckietm/Dev
🆙 100% Guild Furni Catalog Page
2026-06-11 13:16:46 +02:00
duckietm de38371069 🆙 100% Guild Furni Catalog Page 2026-06-11 13:16:29 +02:00
DuckieTM 69b643761c Merge pull request #232 from duckietm/Dev
🆙 Fix scrollbar
2026-06-11 10:31:41 +02:00
duckietm 40864cf880 🆙 Fix scrollbar 2026-06-11 10:31:24 +02:00
DuckieTM c4d7070316 Merge pull request #231 from duckietm/Dev
🆙 Added colored background to items in group furni & fix catalog price
2026-06-11 10:14:58 +02:00
duckietm 5aa9dcd650 🆙 Added colored background to items in group furni & fix catalog price 2026-06-11 10:14:27 +02:00
hotellidev afaea87bcd Fix multicolor furni names 2026-06-11 04:07:06 +03:00
simoleo89 1cfa4ca9f0 feat(installer): make the renderer folder configurable
install.mjs hardcoded the renderer SDK location as ../Nitro_Render_V3, so re-running it next to a renderer checkout under a different name silently cloned a second copy.

Resolve the renderer dir by priority: --renderer-dir=<path> flag, NITRO_RENDERER_DIR env, interactive prompt, then auto-detect an existing sibling among Nitro_Render_V3 / renderer. A fresh clone with no flag/env still defaults to ../Nitro_Render_V3, and existing checkouts are auto-detected (no more duplicate clones). Adds --renderer-repo=<url> for the clone URL; --help, the step labels and the summary reflect the resolved dir.

Backward-compatible, pure installer change — no client/runtime code touched.
2026-06-10 22:18:48 +02:00
Remco Epicnabbo 477f974b7a Remove trailing comma in ui-config.example
Remove a trailing comma after the closing object in public/configuration/ui-config.example. This fixes invalid JSON syntax that could cause parsing errors when loading the UI configuration.
2026-06-10 21:45:21 +02:00
DuckieTM 7e9af4f37e Merge pull request #225 from duckietm/Dev
🆙 Fix Group Forum buy
2026-06-10 14:16:44 +02:00
duckietm 9fcbfba22f 🆙 Fix Group Forum buy 2026-06-10 14:16:18 +02:00
DuckieTM 7e63d5b844 Merge pull request #224 from duckietm/Dev
Dev
2026-06-10 10:24:47 +02:00
duckietm 4bfd5e96ec 🆙 Update catalogue Forum view 2026-06-10 10:17:20 +02:00
duckietm e5ca4936ea 🆙 Detached Theme from original NitroV3 2026-06-10 07:23:02 +02:00
DuckieTM b2000ba1a9 Merge pull request #223 from simoleo89/fix/skip-purchase-confirmation
fix(catalog): honor skip purchase confirmation setting
2026-06-10 06:18:46 +02:00
simoleo89 e6519c301f fix(catalog): honor skip purchase confirmation setting
Wire both classic and modern catalog purchase widgets to the shared catalogSkipPurchaseConfirmation setting used by User Settings. When enabled, the primary buy/rent button now calls the purchase flow directly instead of first switching to the CONFIRM state. Existing validation, gift purchases, club checks, limited sold-out handling, and Builders Club placement flows remain unchanged.
2026-06-09 22:29:11 +02:00
DuckieTM a1761d463f Merge pull request #222 from duckietm/Dev
Dev
2026-06-09 15:16:52 +02:00
duckietm 3ea6ec70a4 🆙 Update Purse 2026-06-09 13:55:33 +02:00
duckietm 3e92e718e5 🆙 Fix avatar head in friends chat 2026-06-09 07:11:28 +02:00
DuckieTM 4eb8efbebf Merge pull request #221 from duckietm/Dev
🆙  Added text
2026-06-08 13:02:54 +02:00
duckietm 9e309f4aaf 🆙 Added text 2026-06-08 13:02:32 +02:00
DuckieTM ac84d73f8a Merge pull request #220 from duckietm/Dev
Dev
2026-06-08 11:25:34 +02:00
duckietm ce8e6fa61f 🆙 Fix the avatar head in send pressent 2026-06-08 11:06:01 +02:00
duckietm b1f0fe64c0 🆙 Fix navigator fav. 2026-06-08 10:39:39 +02:00
duckietm 05653e7034 🆙 Better HK icoon 2026-06-08 10:16:03 +02:00
duckietm c427298926 🆙 Small fix for the clasic catalogue mobile view 2026-06-08 09:51:27 +02:00
duckietm cad30673ef 🆙 Updated Housekeeping icon 2026-06-08 08:50:41 +02:00
duckietm 4c36b595f5 🆙 Update the wheel of fortune icon 2026-06-08 08:42:01 +02:00
DuckieTM 50d4920194 Merge pull request #219 from duckietm/main
Sync Main to DEV
2026-06-08 07:29:21 +02:00
DuckieTM a030151171 Merge pull request #218 from hotellidev/item-descriptions
Add furni description and configuration options
2026-06-08 07:23:54 +02:00
hotellidev 10e3a9c93d Merge branch 'duckietm:main' into item-descriptions 2026-06-08 00:24:52 +03:00
hotellidev e5097b824e Add back missing <hr> separator. Cleaned previous commits. 2026-06-08 00:21:11 +03:00
hotellidev 8e834261d0 Add configuration to limit itemLocation to people with access. 2026-06-08 00:21:11 +03:00
hotellidev 0daa2aea66 Config options for description and location 2026-06-08 00:21:11 +03:00
hotellidev 9e21cf5be4 Fix position 2026-06-08 00:21:11 +03:00