fix: correct badge item detection by checking classname prefix
CI / check (push) Successful in 30s
CI / release (push) Skipped
CI / deploy (push) Successful in 57s

Badge item_names already start with 'badge_' (e.g. badge_citycpa3),
so checking for badge_<item_name>_icon.png produces a double prefix
(badge_badge_citycpa3_icon.png). Now uses item_name.startsWith('badge_')
instead, which correctly identifies badge items without depending on
icon files existing in the directory.
This commit is contained in:
openhands committed 2026-08-03 21:47:10 +02:00
1 parent 1167a48344
commit 750973de38
3 files changed
+10 -11

No files matched your search

+2 -4
View File
@@ -240,11 +240,9 @@ export async function runCatalogAudit(
itemId: item.id, itemId: item.id,
message: `"${item.item_name}" (ID ${item.id}) has no catalog_items entry — not purchasable`, message: `"${item.item_name}" (ID ${item.id}) has no catalog_items entry — not purchasable`,
}); });
// Only include items that actually have a .nitro asset — a catalog
// entry for a furni without a bundle would be un-placeable in-game.
// Badge items use .gif files, not .nitro bundles. // Badge items use .gif files, not .nitro bundles.
if ( if (
!iconSet.has(`badge_${item.item_name}_icon.png`) && !item.item_name.startsWith("badge_") &&
nitroSet.has(`${item.item_name}.nitro`) nitroSet.has(`${item.item_name}.nitro`)
) { ) {
missingCatalogEntries.push({ missingCatalogEntries.push({
@@ -316,7 +314,7 @@ export async function runCatalogAudit(
for (let i = 0; i < items.length; i++) { for (let i = 0; i < items.length; i++) {
const item = items[i]; const item = items[i];
// Badge items use .gif files, not .nitro bundles. // Badge items use .gif files, not .nitro bundles.
if (iconSet.has(`badge_${item.item_name}_icon.png`)) continue; if (item.item_name.startsWith("badge_")) continue;
if (!nitroSet.has(`${item.item_name}.nitro`)) { if (!nitroSet.has(`${item.item_name}.nitro`)) {
missingNitroClassnames.push(item.item_name); missingNitroClassnames.push(item.item_name);
issues.push({ issues.push({
+4 -7
View File
@@ -159,13 +159,11 @@ export async function repairMissingIcons(
const processItem = async (classname: string) => { const processItem = async (classname: string) => {
const fileName = `${classname}_icon.png`; const fileName = `${classname}_icon.png`;
const badgeFileName = `badge_${classname}_icon.png`;
// Badge items store icons as badge_<code>_icon.png, not <code>_icon.png. // Badge items store icons as badge_<code>_icon.png (the classname already
const presentDirs = iconDirs.filter( // includes the `badge_` prefix, so fileName matches correctly).
(dir) => const presentDirs = iconDirs.filter((dir) =>
existsSync(path.join(dir, fileName)) || existsSync(path.join(dir, fileName)),
existsSync(path.join(dir, badgeFileName)),
); );
const missingDirs = iconDirs.filter((dir) => !presentDirs.includes(dir)); const missingDirs = iconDirs.filter((dir) => !presentDirs.includes(dir));
@@ -239,7 +237,6 @@ export async function repairMissingIcons(
for (const source of sources) { for (const source of sources) {
const iconCandidates = [ const iconCandidates = [
`${classname}_icon.png`, `${classname}_icon.png`,
`badge_${classname}_icon.png`,
// Variant classnames (e.g. `table_silo_med*10`) often only exist // Variant classnames (e.g. `table_silo_med*10`) often only exist
// on sources under their base name (e.g. `table_silo_med_icon.png`) // on sources under their base name (e.g. `table_silo_med_icon.png`)
// or with the `*` replaced by `_` (e.g. `table_silo_med_10_icon.png`). // or with the `*` replaced by `_` (e.g. `table_silo_med_10_icon.png`).
+4
View File
@@ -154,6 +154,10 @@ export async function repairMissingNitros(
onEvent?.({ type: "started", total }); onEvent?.({ type: "started", total });
const processItem = async (classname: string) => { const processItem = async (classname: string) => {
// Badge items use .gif files, not .nitro bundles.
if (classname.startsWith("badge_")) {
return { status: "skipped" } as const;
}
const fileName = `${classname}.nitro`; const fileName = `${classname}.nitro`;
const presentDirs = nitroDirs.filter((dir) => const presentDirs = nitroDirs.filter((dir) =>