f8b21af4be
10_Wiki/Topics 대규모 정리: - 오류 캡처/미완성 stub 문서 227개 제거 - 교차폴더 중복 43클러스터 병합 (63파일 → redirect) - 링크명 정규화: 깨진 링크 수정·redirect 직결·개념 매핑 ~2,400건 - 카테고리 MOC 6개 신규 생성 - Graph 섹션 미해결 related-keyword 링크 10,058건 제거 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5.7 KiB
5.7 KiB
id, title, category, status, canonical_id, aliases, duplicate_of, source_trust_level, confidence_score, verification_status, tags, raw_sources, last_reinforced, github_commit, tech_stack
| id | title | category | status | canonical_id | aliases | duplicate_of | source_trust_level | confidence_score | verification_status | tags | raw_sources | last_reinforced | github_commit | tech_stack | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| wiki-2026-0508-skybound-skill-asset-integration | Skybound Skill Asset Integration | 10_Wiki/Topics | verified | self |
|
none | B | 0.85 | applied |
|
2026-05-10 | pending |
|
Skybound Skill Asset Integration
매 한 줄
"매 skill 은 매 asset bundle 의 contract 다.". Skybound Skill Asset Integration 은 War Commander 의 Skybound faction 새로운 skill 추가 시, design data (json), VFX (particle), audio, animation, UI icon 의 5 개 asset 을 단일 manifest 로 묶고 매 client 가 atomic 으로 load 하도록 하는 pipeline. 매 2026 LiveOps 의 hot-patch skill drop 의 표준 패턴 — skill 추가 시 client 강제 update 없이 OTA 적용 가능.
매 핵심
매 Pipeline Stages
- Design: skill stat json (cooldown, damage, type)
- VFX: particle effect bundle (Unity/Unreal addressable)
- Audio: SFX wav + mixer routing
- Animation: skeletal anim clip + state machine entry
- UI: icon, tooltip locale strings
매 Manifest Contract
- 매 skill = 매 unique skillId
- manifest 는 asset hash + version + dependencies
- client 가 매 skill 사용 시 manifest verify → fallback to default if missing
- 매 OTA delivery: CDN-backed, signed manifest
매 응용
- War Commander Skybound expansion: monthly new skill drop.
- Generic faction-DLC pipeline.
- Live event one-shot skills.
💻 패턴
Pattern 1 — Manifest schema
interface SkillManifest {
skillId: string;
version: string;
designJson: AssetRef;
vfxBundle: AssetRef;
audioBundle: AssetRef;
animClip: AssetRef;
uiIcon: AssetRef;
signature: string; // 매 server-signed
}
interface AssetRef { url: string; hash: string; sizeBytes: number; }
Pattern 2 — Atomic loader
async function loadSkill(manifest: SkillManifest): Promise<Skill> {
await verifySignature(manifest);
const [design, vfx, audio, anim, icon] = await Promise.all([
fetchAsset(manifest.designJson),
fetchAsset(manifest.vfxBundle),
fetchAsset(manifest.audioBundle),
fetchAsset(manifest.animClip),
fetchAsset(manifest.uiIcon),
]);
for (const [a, ref] of [
[design, manifest.designJson], [vfx, manifest.vfxBundle],
[audio, manifest.audioBundle], [anim, manifest.animClip], [icon, manifest.uiIcon],
] as const) {
if (sha256(a) !== ref.hash) throw new Error('HASH_MISMATCH');
}
return assembleSkill(design, vfx, audio, anim, icon);
}
Pattern 3 — Fallback to default
async function loadSkillSafe(skillId: string): Promise<Skill> {
try {
const manifest = await fetchManifest(skillId);
return await loadSkill(manifest);
} catch (e) {
logger.warn('Skill load failed; falling back', { skillId, err: e });
return loadDefaultSkill();
}
}
Pattern 4 — Hot-patch detection
async function checkForSkillUpdate(skillId: string, currentVersion: string): Promise<boolean> {
const remote = await fetchManifestHead(skillId);
return remote.version !== currentVersion;
}
Pattern 5 — Server-side signing
function signManifest(manifest: Omit<SkillManifest, 'signature'>, key: PrivateKey): string {
const payload = canonicalJson(manifest);
return ed25519.sign(key, payload).toString('hex');
}
Pattern 6 — CDN cache prewarming
async function prewarmManifests(skillIds: string[]): Promise<void> {
const manifests = await Promise.all(skillIds.map(fetchManifest));
const refs = manifests.flatMap(m => [m.designJson, m.vfxBundle, m.audioBundle, m.animClip, m.uiIcon]);
await Promise.all(refs.map(r => prefetch(r.url)));
}
Pattern 7 — Localization fallback
function resolveTooltip(localeStrings: Record<string, string>, locale: string): string {
return localeStrings[locale] ?? localeStrings['en'] ?? '<missing>';
}
매 결정 기준
| 상황 | Approach |
|---|---|
| Mobile + bandwidth concern | Lazy-load: only fetch on first use |
| Frequent hot-drop skill | Prewarm all active manifests on app start |
| Dev/testing | Local override manifest |
| Highly competitive PvP | Mandatory pre-load to prevent visual desync |
기본값: lazy-load + prewarm popular skills, mandatory hash verify, ed25519 signature, fallback to default skill.
🔗 Graph
- 부모: Live Operations (LiveOps) · CI_CD_Pipeline
- 변형: Sarkis-Cloning-Technology · Beresnev Studio
- 응용: War-Commander-Combat-Ecosystem · War-Commander-Event-Operations
- Adjacent: Code Splitting Lazy Loading (코드 분할 및 지연 로딩) · Server Architecture
🤖 LLM 활용
언제: skill OTA 파이프라인 설계, manifest schema 검토, asset versioning. 언제 X: built-in only static skill 게임 — pipeline overhead 불필요.
❌ 안티패턴
- No signature verify: 매 client 가 매 임의 manifest 로 skill replace 가능 → cheat.
- No hash check: 매 corrupted asset → 매 silent crash.
- All-or-nothing load: 매 single asset 실패 → 매 entire skill 사용 불가 (fallback 누락).
- Cache poisoning: CDN edge 의 stale manifest → version drift.
🧪 검증 / 중복
- Verified (Unity Addressables docs, Unreal Pak system, Skybound expansion notes).
- 신뢰도 B.
🕓 Changelog
| 날짜 | 변경 |
|---|---|
| 2026-05-08 | Phase 1 |
| 2026-05-10 | Manual cleanup — manifest schema + 7 patterns + OTA flow |