--- 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 { 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 추가 |