const CLASSNAME_CHAR_RE = /^[a-z0-9_*\-.]+$/ export function getBaseClassname(classname: string): string { const star = classname.indexOf('*') return star >= 0 ? classname.substring(0, star) : classname } export function getSafeClassnameStem(classname: string): string { return classname.replace(/\*/g, '_') } export function getIconFileName(classname: string): string { return `${getSafeClassnameStem(classname)}_icon.png` } export function getSwfFileName(classname: string): string { return `${getBaseClassname(classname)}.swf` } export function getNitroFileName(classname: string): string { return `${getBaseClassname(classname)}.nitro` } export function normalizeClassname(raw: string): string { return raw.trim().toLowerCase() } export function isValidClassname(classname: string): boolean { if (!classname) return false return CLASSNAME_CHAR_RE.test(classname) } export const LOCAL_ICON_URL_PREFIX = '/swf/dcr/hof_furni/icons/' export function getLocalIconUrl(classname: string): string { return `${LOCAL_ICON_URL_PREFIX}${encodeURIComponent(getIconFileName(classname))}` } export function getHabboCdnIconUrl(classname: string, revision: number): string { const base = getBaseClassname(classname) return `https://images.habbo.com/dcr/hof_furni/${revision}/${encodeURIComponent(base)}_icon.png` }