fix(monster): gen-combat-monster 방어적 가드(componentNames/@components) + 코드블록 trailing newline

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-06-10 01:06:11 +09:00
parent 185e0f3a94
commit 9eef5eb66e
2 changed files with 8 additions and 4 deletions

View File

@@ -64,4 +64,4 @@
"EntityEventHandlers": [] "EntityEventHandlers": []
} }
} }
} }

View File

@@ -42,10 +42,10 @@ eventId = _TimerService:SetTimerRepeat(reg, 0.1)`),
EntityEventHandlers: [], EntityEventHandlers: [],
} }, } },
}; };
writeFileSync('RootDesk/MyDesk/CombatMonster.codeblock', JSON.stringify(cb, null, 2), 'utf8'); writeFileSync('RootDesk/MyDesk/CombatMonster.codeblock', JSON.stringify(cb, null, 2) + '\n', 'utf8');
} }
const isMonster = (e) => (e.componentNames || '').includes('script.Monster'); const isMonster = (e) => typeof e.componentNames === 'string' && e.componentNames.includes('script.Monster');
function patchMap(nn) { function patchMap(nn) {
const tag = String(nn).padStart(2, '0'); const tag = String(nn).padStart(2, '0');
@@ -53,9 +53,13 @@ function patchMap(nn) {
const map = JSON.parse(readFileSync(file, 'utf8')); const map = JSON.parse(readFileSync(file, 'utf8'));
let count = 0; let count = 0;
for (const e of map.ContentProto.Entities.filter(isMonster)) { for (const e of map.ContentProto.Entities.filter(isMonster)) {
const comps = e.jsonString && e.jsonString['@components'];
if (!Array.isArray(comps)) {
console.warn(`[gen-combat-monster] entity "${(e.jsonString && e.jsonString.name) || e.path}" has no @components — skipped`);
continue;
}
const name = (e.jsonString && e.jsonString.name) || ''; const name = (e.jsonString && e.jsonString.name) || '';
const enemyId = NAME_TO_ENEMY[name] || DEFAULT_ENEMY; const enemyId = NAME_TO_ENEMY[name] || DEFAULT_ENEMY;
const comps = e.jsonString['@components'];
e.jsonString['@components'] = comps.filter((c) => c['@type'] !== 'script.CombatMonster'); e.jsonString['@components'] = comps.filter((c) => c['@type'] !== 'script.CombatMonster');
e.jsonString['@components'].push({ '@type': 'script.CombatMonster', Enable: true, EnemyId: enemyId }); e.jsonString['@components'].push({ '@type': 'script.CombatMonster', Enable: true, EnemyId: enemyId });
const names = (e.componentNames || '').split(',').filter((s) => s && s !== 'script.CombatMonster'); const names = (e.componentNames || '').split(',').filter((s) => s && s !== 'script.CombatMonster');