fix: show correct SCUM catalog item names

This commit is contained in:
npc0-hue
2026-09-25 02:08:00 +08:00
parent abc392d22c
commit 2785feb745
2 changed files with 32 additions and 14 deletions
@@ -32,6 +32,18 @@ const directNames: Record<string, string> = {
Aspirin: "阿司匹林", Aspirin: "阿司匹林",
Animal_Skin: "动物皮", Animal_Skin: "动物皮",
Air_Pump: "打气筒", Air_Pump: "打气筒",
Bundle_Of_Rags_Dirty: "脏布条捆",
Bundle_Of_Safety_Pins: "安全别针捆",
Bundle_Of_Stone_Tips: "石箭头捆",
Bundle_Rag_Stripes: "布条捆",
Bundle_Wooden_Plank: "木板捆",
CementBag: "水泥袋",
Charcoal: "木炭",
Christmas_Tree: "圣诞树",
Coal_01: "煤块",
Copper_Strip: "铜条",
Depleted_Uranium: "贫铀",
Donkey_Head: "驴头",
Backpack_02_01: "红色背包", Backpack_02_01: "红色背包",
"1H_Cleaver": "菜刀", "1H_Cleaver": "菜刀",
Water_05l: "水", Water_05l: "水",
@@ -82,11 +94,6 @@ const phraseNames: Array<readonly [RegExp, string]> = [
[/^(.+) Level (\d+)$/i, "$1 $2 级"] [/^(.+) Level (\d+)$/i, "$1 $2 级"]
]; ];
const catalogKindNames: Record<string, string> = { item: "物品", vehicle: "载具", animal: "动物", zombie: "丧尸", "armed-npc": "非玩家角色", razor: "其他" };
const fallbackNameGroups: Array<readonly [string, string]> = [
["/backpacks/", "背包"], ["/head armor/", "头部装备"], ["/weapons/", "武器"], ["/medicals/", "医疗物品"], ["/food/", "食物"], ["/clothes/", "服装"], ["/vehicles/", "载具部件"], ["/fishing/", "钓鱼用品"], ["/farming/", "农业用品"], ["/crafting/", "制作材料"]
];
export function scumCatalogNameZh(entry: ScumCatalogEntry): string { export function scumCatalogNameZh(entry: ScumCatalogEntry): string {
const direct = directNames[entry.code]; const direct = directNames[entry.code];
if (direct) return direct; if (direct) return direct;
@@ -105,7 +112,7 @@ export function scumCatalogNameZh(entry: ScumCatalogEntry): string {
if (!/[A-Za-z]/.test(translated)) return translated; if (!/[A-Za-z]/.test(translated)) return translated;
const translatedCode = compactLabel(translateWords(code)); const translatedCode = compactLabel(translateWords(code));
if (!/[A-Za-z]/.test(translatedCode)) return translatedCode; if (!/[A-Za-z]/.test(translatedCode)) return translatedCode;
return catalogFallbackName(entry); return compactLabel(source || code);
} }
export function scumCatalogDisplayName(entry: ScumCatalogEntry): string { return scumCatalogNameZh(entry); } export function scumCatalogDisplayName(entry: ScumCatalogEntry): string { return scumCatalogNameZh(entry); }
@@ -131,12 +138,4 @@ function translateWords(value: string): string {
return spaced.replace(/[A-Za-z][A-Za-z'-]*/g, (word) => additionalWordNames[word.toLowerCase()] ?? wordNames[word.toLowerCase()] ?? word); return spaced.replace(/[A-Za-z][A-Za-z'-]*/g, (word) => additionalWordNames[word.toLowerCase()] ?? wordNames[word.toLowerCase()] ?? word);
} }
function catalogFallbackName(entry: ScumCatalogEntry): string {
const icon = entry.icon.toLowerCase();
const group = fallbackNameGroups.find(([needle]) => icon.includes(needle));
const prefix = group?.[1] ?? catalogKindNames[entry.kind] ?? "物品";
const serial = entry.code.match(/\d+/g)?.join("-");
return serial ? prefix + " " + serial : prefix + "条目";
}
function compactLabel(value: string): string { return value.replace(/\s+/g, " ").trim(); } function compactLabel(value: string): string { return value.replace(/\s+/g, " ").trim(); }
+19
View File
@@ -352,6 +352,25 @@ describe("SCUM plugin feature module", () => {
expect(scumCatalogDisplayName(aloe)).toBe("芦荟"); expect(scumCatalogDisplayName(aloe)).toBe("芦荟");
expect(scumCatalogDisplayName(vehicle)).toBe("莱卡"); expect(scumCatalogDisplayName(vehicle)).toBe("莱卡");
expect(scumCatalogDisplayName(militaryBackpack)).toBe("军用背包 黑色"); expect(scumCatalogDisplayName(militaryBackpack)).toBe("军用背包 黑色");
const correctedNames: Record<string, string> = {
Bundle_Of_Rags_Dirty: "脏布条捆",
Bundle_Of_Safety_Pins: "安全别针捆",
Bundle_Of_Stone_Tips: "石箭头捆",
Bundle_Rag_Stripes: "布条捆",
Bundle_Wooden_Plank: "木板捆",
CementBag: "水泥袋",
Charcoal: "木炭",
Christmas_Tree: "圣诞树",
Coal_01: "煤块",
Copper_Strip: "铜条",
Depleted_Uranium: "贫铀",
Donkey_Head: "驴头"
};
for (const [code, name] of Object.entries(correctedNames)) {
expect(scumCatalogDisplayName(scumCatalogEntries.find((item) => item.code === code)!)).toBe(name);
}
const untranslated = scumCatalogEntries.find((item) => item.code === "Agaricus_Augustus")!;
expect(scumCatalogDisplayName(untranslated)).toBe("Agaricus Augustus");
expect(scumCatalogSearchText(aloe)).toContain("芦荟"); expect(scumCatalogSearchText(aloe)).toContain("芦荟");
expect(scumCatalogSearchText(bigBackpack)).toContain("大背包"); expect(scumCatalogSearchText(bigBackpack)).toContain("大背包");
expect(scumCatalogSearchText(militaryHelmet)).toContain("军用头盔"); expect(scumCatalogSearchText(militaryHelmet)).toContain("军用头盔");