diff --git a/src/lib/services/furni-data.ts b/src/lib/services/furni-data.ts index e09f18053e..322759f05e 100644 --- a/src/lib/services/furni-data.ts +++ b/src/lib/services/furni-data.ts @@ -449,6 +449,8 @@ export interface FurniDataReconcileResult { fixedIds: number; /** Entries whose stale offerid was corrected to the DB id. */ fixedOfferIds: number; + /** Cross-section copies (same classname in both sections) whose stale id was aligned to their offerid. */ + normalizedIds: number; /** items_base rows with no matching furnitype entry (need re-import). */ missing: number; /** spriteIds used by a different classname in the file; left untouched. */ @@ -503,6 +505,7 @@ export async function reconcileFurniDataWithItemsBase(): Promise 0 || fixedOfferIds > 0) { await writeFurniData(furniData as Record); } - return { fixedIds, fixedOfferIds, missing, conflicts }; + return { fixedIds, fixedOfferIds, normalizedIds, missing, conflicts }; }); } diff --git a/src/lib/services/furni-import.ts b/src/lib/services/furni-import.ts index 4e9af03458..903f1e0fa7 100644 --- a/src/lib/services/furni-import.ts +++ b/src/lib/services/furni-import.ts @@ -908,6 +908,19 @@ export async function importSingleFurni(params: { }); const interactionModesCount = autoInteraction.interactionModesCount; + // When the .nitro logicType produced no specific handler, fall back to the + // auto-detected type (classname mechanic + keyword + real flags) exactly + // like the post-import verification sweep, so newly imported items carry the + // correct interaction_type immediately instead of waiting for the sweep. + // Never applied to updates — existing emulator handler types must survive. + if ( + !isUpdate && + interactionType === "default" && + autoInteraction.interactionType !== "default" + ) { + interactionType = autoInteraction.interactionType; + } + // Update items_base with ALL enriched data try { const update = buildItemsBaseEnrichmentUpdate({