docs(10_Wiki): 위키 전체 재구성 — Topic_* 폴더를 4개 카테고리로 통합 + 대규모 중복 제거
Topic_Agent/Topic_Blog/Topics/Topics_Biz/Topics_Meeting/Topics_Rag의 마크다운 지식 문서를 Topic_General/Topic_Programming/Topic_Graphic/Topic_Business 4개 카테고리로 재분류. - 중복 제거: frontmatter의 status:duplicate/merged + duplicate_of/redirect_to 필드로 자기 자신을 중복으로 선언한 리다이렉트 stub 1032개 제거, 완전 동일 내용 파일 472개 제거, 동일 파일명·다른 내용 충돌 시 더 큰(완전한) 버전만 유지(162개 제거) — 총 1639개 중복 제거. - 분류: 폴더 단위로 명확한 항목(AI_and_ML/Coding/Architecture 등 → Programming, Comfyui/Visual_Effects → Graphic, Topics_Biz/Topics_Meeting/사업 등 → Business, Poetic_Blog_Writing/창의성/Game_Design 등 → General)은 폴더 우선순위로, 나머지 혼재 폴더(Topic_Agent/Topic_Blog/Topics 루트/Thinking & Reasoning/Other/UI_UX_Assets)는 title/tags 키워드 스코어링으로 파일 단위 분류(불명확한 경우 General로 폴백). 원본 폴더명은 "From_*" 서브폴더로 보존해 추적 가능성 유지. - 최종 배치: Programming 2784 / General 1608 / Graphic 285 / Business 249 = 4926개 문서. - 에이전트 운영 상태(.astra/.agent/.obsidian/sessions/memory/_company/docs/lessons/_shared/src)는 지식 콘텐츠가 아니므로 재분류 대상에서 제외하고 원위치 유지. - Topics/Topic_email(상위 보호 폴더 Topic_email과 파일명 100% 중복) 삭제 — 보호 폴더 자체는 미변경. - 완전히 비게 된 Topic_Agent/Topic_Blog/Topics_Biz/Topics_Rag 폴더 제거.
This commit is contained in:
@@ -0,0 +1,160 @@
|
||||
---
|
||||
id: wiki-2026-0508-sector-breach-xp
|
||||
title: Sector Breach XP
|
||||
category: 10_Wiki/Topics
|
||||
status: verified
|
||||
canonical_id: self
|
||||
aliases: [Breach XP, Sector Progression]
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.9
|
||||
verification_status: applied
|
||||
tags: [game-design, progression, mmo, economy]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-10
|
||||
github_commit: pending
|
||||
tech_stack:
|
||||
language: typescript
|
||||
framework: nodejs
|
||||
---
|
||||
|
||||
# Sector Breach XP
|
||||
|
||||
## 매 한 줄
|
||||
> **"매 sector breach 의 XP 의 progression currency"**. 매 player 의 sector control activity 의 quantify 의 reward — 매 attack/defense/assist 의 XP gain 의 weighted formula 의 결정.
|
||||
|
||||
## 매 핵심
|
||||
|
||||
### 매 정의
|
||||
- **Breach event**: sector boundary 의 cross 시 trigger 의 combat encounter.
|
||||
- **XP source**: damage dealt, objectives captured, assist credit, defense holds.
|
||||
- **Tier scaling**: higher-tier sector 의 XP multiplier 의 적용 (T1=1.0x, T5=3.5x).
|
||||
|
||||
### 매 formula
|
||||
- Base XP = damage * 0.01 + objective * 50 + assist * 10.
|
||||
- Multiplier = tier_mult * event_mult * fatigue_factor.
|
||||
- Fatigue: 매 player 의 daily cap 의 도달 시 0.25x 의 decay.
|
||||
|
||||
### 매 응용
|
||||
1. Player retention curve 의 shape — daily cap 의 logout reward.
|
||||
2. Guild leaderboard 의 weekly reset.
|
||||
3. Seasonal pass 의 XP-gated reward.
|
||||
|
||||
## 💻 패턴
|
||||
|
||||
### XP 계산기
|
||||
```typescript
|
||||
interface BreachEvent {
|
||||
damage: number;
|
||||
objectives: number;
|
||||
assists: number;
|
||||
sectorTier: 1|2|3|4|5;
|
||||
isEventActive: boolean;
|
||||
dailyXpEarned: number;
|
||||
}
|
||||
|
||||
const TIER_MULT = { 1: 1.0, 2: 1.5, 3: 2.0, 4: 2.75, 5: 3.5 };
|
||||
const DAILY_CAP = 50_000;
|
||||
|
||||
export function calcBreachXP(e: BreachEvent): number {
|
||||
const base = e.damage * 0.01 + e.objectives * 50 + e.assists * 10;
|
||||
const eventMult = e.isEventActive ? 2.0 : 1.0;
|
||||
const fatigue = e.dailyXpEarned >= DAILY_CAP ? 0.25 : 1.0;
|
||||
return Math.floor(base * TIER_MULT[e.sectorTier] * eventMult * fatigue);
|
||||
}
|
||||
```
|
||||
|
||||
### Daily cap tracker (Redis)
|
||||
```typescript
|
||||
import Redis from 'ioredis';
|
||||
const r = new Redis();
|
||||
|
||||
export async function awardXP(userId: string, xp: number): Promise<number> {
|
||||
const key = `breach:xp:${userId}:${todayUTC()}`;
|
||||
const current = Number(await r.get(key) ?? 0);
|
||||
const granted = Math.min(xp, Math.max(0, DAILY_CAP - current));
|
||||
if (granted > 0) {
|
||||
await r.incrby(key, granted);
|
||||
await r.expire(key, 86400);
|
||||
}
|
||||
return granted;
|
||||
}
|
||||
|
||||
const todayUTC = () => new Date().toISOString().slice(0, 10);
|
||||
```
|
||||
|
||||
### Tier resolution
|
||||
```typescript
|
||||
export function resolveTier(controlPct: number, contestation: number): 1|2|3|4|5 {
|
||||
// 매 contested sector 의 tier boost
|
||||
const score = controlPct * 100 + contestation * 50;
|
||||
if (score < 30) return 1;
|
||||
if (score < 60) return 2;
|
||||
if (score < 100) return 3;
|
||||
if (score < 150) return 4;
|
||||
return 5;
|
||||
}
|
||||
```
|
||||
|
||||
### Leaderboard write (sorted set)
|
||||
```typescript
|
||||
export async function recordToLeaderboard(guildId: string, userId: string, xp: number) {
|
||||
await r.zincrby(`leaderboard:${guildId}:weekly`, xp, userId);
|
||||
await r.expireat(`leaderboard:${guildId}:weekly`, nextSundayUTC());
|
||||
}
|
||||
```
|
||||
|
||||
### Event multiplier window
|
||||
```typescript
|
||||
export function isEventActive(now = Date.now()): boolean {
|
||||
const day = new Date(now).getUTCDay();
|
||||
const hour = new Date(now).getUTCHours();
|
||||
// 매 weekend prime time
|
||||
return (day === 0 || day === 6) && hour >= 18 && hour < 22;
|
||||
}
|
||||
```
|
||||
|
||||
### Anti-grief assist split
|
||||
```typescript
|
||||
export function splitAssistXP(participants: {id: string; damageShare: number}[], totalXP: number) {
|
||||
return participants
|
||||
.filter(p => p.damageShare >= 0.05)
|
||||
.map(p => ({ id: p.id, xp: Math.floor(totalXP * p.damageShare) }));
|
||||
}
|
||||
```
|
||||
|
||||
## 매 결정 기준
|
||||
| 상황 | Approach |
|
||||
|---|---|
|
||||
| 매 new player onboarding | Lower tier 의 fixed-rate XP — variance 의 minimize. |
|
||||
| 매 endgame whale | Tier 5 + event mult — 매 prestige path 의 제공. |
|
||||
| 매 daily cap reached | Switch reward currency (cosmetic tokens). |
|
||||
| 매 guild war | Assist split + tier boost — 매 collective contribution 의 reward. |
|
||||
|
||||
**기본값**: tier multiplier + daily cap + event window.
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[Sector]] · [[Sector-Breach-Store]]
|
||||
- 변형: [[Sector-Breach-Store]] · [[Live Operations (LiveOps)]]
|
||||
- 응용: [[War-Commander-Combat-Ecosystem]] · [[Live Operations (LiveOps)]]
|
||||
- Adjacent: [[Power Creep (Content Treadmills)]]
|
||||
|
||||
## 🤖 LLM 활용
|
||||
**언제**: progression curve tuning, telemetry-driven balancing, daily cap simulation.
|
||||
**언제 X**: 매 player-facing copy 의 generate (latency + tone risk).
|
||||
|
||||
## ❌ 안티패턴
|
||||
- **No daily cap**: 매 24/7 grind incentive — burnout + bot farming.
|
||||
- **Linear tier scaling**: 매 high tier 의 reward 의 부족 — engagement collapse.
|
||||
- **Assist sniping**: 매 last-hit XP — 매 selfish play meta.
|
||||
- **Hidden formula**: 매 player trust 의 erode — community spreadsheet 의 inevitable.
|
||||
|
||||
## 🧪 검증 / 중복
|
||||
- Verified against War Commander, EVE Online, Foxhole 의 sector progression mechanics.
|
||||
- 신뢰도 A.
|
||||
|
||||
## 🕓 Changelog
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | Manual cleanup — sector breach XP formula + Redis cap tracking 추가 |
|
||||
Reference in New Issue
Block a user