diff --git a/UPDATES.md b/UPDATES.md index acf4ece..ae374c8 100644 --- a/UPDATES.md +++ b/UPDATES.md @@ -1,5 +1,13 @@ --- -updatedAt: 2026-09-04T23:39:07+09:00 +updatedAt: 2026-09-05T10:20:00+09:00 +--- + +## 2026년 9월 5일 + +### 게이머즈 소속 조건 판정 수정 + +`FIXED` 게이머즈 멤버가 소속 조건에서 누락되던 문제를 수정했습니다. 수영복 오카유, 일반 5성 미오, 4성 오카유·코로네의 게이머즈 조건 및 대상 지정이 있는 리더 의상·패시브·스킬 효과가 정상 적용됩니다. + --- ## 2026년 9월 4일 diff --git a/src/lib/engine/skill-condition.test.ts b/src/lib/engine/skill-condition.test.ts index 3d3cfa2..74ee495 100644 --- a/src/lib/engine/skill-condition.test.ts +++ b/src/lib/engine/skill-condition.test.ts @@ -29,6 +29,12 @@ test('복수 소속 멤버는 표기된 각 기수에 모두 속한다', () => { assert.equal(skillConditionSatisfied('1기생(이)가 1명 이상이면', [fubuki]), true); }); +test('한글 게이머즈 소속은 영문 GAMERS 조건과 일치한다', () => { + const okayu = { type: '해피', generation: 'hololive 게이머즈' }; + assert.equal(skillTargetBelongsTo(okayu, 'GAMERS'), true); + assert.equal(skillConditionSatisfied('GAMERS(이)가 2명 이상이면', [okayu, okayu]), true); +}); + test('ID 기수는 같은 번호의 JP 기수와 구분한다', () => { for (const number of [1, 2, 3]) { const member = { type: '퓨어', generation: `hololive ID ${number}기생` }; diff --git a/src/lib/engine/skill-condition.ts b/src/lib/engine/skill-condition.ts index 0ab4f1d..966c07b 100644 --- a/src/lib/engine/skill-condition.ts +++ b/src/lib/engine/skill-condition.ts @@ -8,13 +8,14 @@ export function plainSkillText(value: string): string { } function normalizedGroup(value: string): string { - return value + const normalized = value .replace(/^hololive\s+/i, '') .replace(/^(?:EN|DEV_IS)\s+/i, '') .replace(/\(이\)가$/, '') .replace(/\s*타입$/, '') .trim() .toLowerCase(); + return normalized === '게이머즈' ? 'gamers' : normalized; } function memberBelongsTo(member: SkillConditionMember, group: string): boolean {