--- id: wiki-2026-0508-sector-breach-store title: Sector Breach Store category: 10_Wiki/Topics status: verified canonical_id: self aliases: [Breach Store, Event Currency Store, Sector Event Shop] duplicate_of: none source_trust_level: A confidence_score: 0.9 verification_status: applied tags: [game-design, monetization, event-economy, war-commander, liveops] raw_sources: [] last_reinforced: 2026-05-10 github_commit: pending tech_stack: language: typescript framework: liveops-store --- # Sector Breach Store ## 매 한 줄 > **"매 event currency 의 최고 sink 는 매 limited-time store 다."**. Sector Breach Store 는 War Commander 류 sector-event 의 핵심 reward delivery 메커니즘 — event 동안 earned breach token 을 매 limited-time exclusive item 으로 redeem 하는 store. 매 2026 LiveOps 에서 dual-currency (free token + paid premium token) 디자인 + scarcity timer + tier-locked stock 의 표준 패턴. ## 매 핵심 ### 매 Store Anatomy - **Currency**: breach token (event-specific, decays after event end) - **Stock tiers**: common (unlimited) / rare (limited per player) / mythic (limited globally) - **Refresh cadence**: rotating featured slots every 24h - **Decay rule**: unused token → converted at fixed ratio or expired ### 매 Monetization Lever - 매 paid premium token bundle = 매 fast-track to mythic stock - 매 store-only skin = collector retention - 매 last-day surge: 매 event final 24h 의 매출 peak (FOMO) - 매 alliance discount: 매 social engagement gate ### 매 응용 1. War Commander: sector breach event store. 2. Mobile Strike: faction war supply depot. 3. Clash Royale: clan war shop. 4. Brawl Stars: ranked season shop. ## 💻 패턴 ### Pattern 1 — Store catalog schema ```typescript interface BreachStoreItem { id: string; rarity: 'common'|'rare'|'mythic'; costToken: number; costPremiumToken?: number; stockGlobal?: number; stockPerPlayer?: number; startsAt: number; endsAt: number; } ``` ### Pattern 2 — Purchase transaction ```typescript async function purchase(playerId: string, itemId: string, useTokenType: 'free'|'premium') { return await db.transaction(async tx => { const item = await tx.fetchItem(itemId); const player = await tx.fetchPlayer(playerId); if (Date.now() > item.endsAt) throw new Error('EVENT_ENDED'); const cost = useTokenType === 'premium' ? item.costPremiumToken! : item.costToken; const balance = useTokenType === 'premium' ? player.premiumToken : player.token; if (balance < cost) throw new Error('INSUFFICIENT_TOKEN'); if (item.stockPerPlayer && player.purchases[itemId] >= item.stockPerPlayer) throw new Error('PER_PLAYER_LIMIT'); if (item.stockGlobal !== undefined) { const remaining = await tx.decrementStock(itemId); if (remaining < 0) throw new Error('SOLD_OUT'); } await tx.deductToken(playerId, cost, useTokenType); await tx.grantItem(playerId, itemId); return { ok: true }; }); } ``` ### Pattern 3 — Featured rotation ```typescript function selectFeaturedSlots(catalog: BreachStoreItem[], rng: RNG, count = 4): BreachStoreItem[] { const eligible = catalog.filter(i => i.rarity !== 'common'); return weightedSample(eligible, count, i => RARITY_WEIGHT[i.rarity], rng); } ``` ### Pattern 4 — Token decay on event end ```typescript async function settleEventEnd(eventId: string) { const players = await fetchEventParticipants(eventId); for (const p of players) { const leftover = p.token; const refunded = Math.floor(leftover * 0.1); // 매 10% conversion to permanent currency await grantPermanentCurrency(p.id, refunded); await zeroEventToken(p.id, eventId); } } ``` ### Pattern 5 — FOMO surge banner ```typescript function shouldShowSurgeBanner(now: number, eventEndsAt: number): boolean { const hoursLeft = (eventEndsAt - now) / 3600000; return hoursLeft <= 24; } ``` ### Pattern 6 — Anti-bot purchase rate-limit ```typescript const purchaseRate = new SlidingWindow({ windowMs: 60_000, max: 30 }); function checkPurchaseAllowed(playerId: string): boolean { return purchaseRate.tryAcquire(playerId); } ``` ### Pattern 7 — Alliance discount ```typescript function applyAllianceDiscount(cost: number, alliance: Alliance): number { const tier = alliance.eventTier; // 매 alliance event participation tier const discount = ALLIANCE_DISCOUNT_TABLE[tier] ?? 0; return Math.ceil(cost * (1 - discount)); } ``` ## 매 결정 기준 | 상황 | Approach | |---|---| | New event launch | Conservative stock, observe purchase telemetry | | Repeat seasonal event | Rotate skins, keep core items consistent | | Whale-targeted | Add premium-only mythic tier | | F2P-friendly | Generous token earn rate, no premium gate on rare tier | **기본값**: dual-currency, mythic stock global limit 1000, 24h featured rotation, 10% leftover-token conversion. ## 🔗 Graph - 부모: [[Live Operations (LiveOps)]] · [[Game_Monetization_Strategy]] - 변형: [[Sector-Breach-XP]] · [[Dynamic Offers]] - 응용: [[War-Commander-Event-Operations]] · [[Sector]] - Adjacent: [[Monetization at the Point of Friction]] · [[맞춤형 IAP 번들(Customizable IAP bundles)]] ## 🤖 LLM 활용 **언제**: event store catalog design, currency decay rule 검토, FOMO surge 분석. **언제 X**: persistent metagame store (event currency 부적합). ## ❌ 안티패턴 - **No decay rule**: event 후 token 영구화 → 매 future event 의 currency 가치 dilute. - **Premium-only mythic**: f2p 의 ceiling 명확화 → 신규 유저 churn. - **No stock cap**: scarcity 효과 사라짐 → 매출 떨어짐. - **Hidden cost change mid-event**: trust 파괴 → community backlash. ## 🧪 검증 / 중복 - Verified (Kixeye War Commander event docs, GDC LiveOps talks 2023-2025). - 신뢰도 A. ## 🕓 Changelog | 날짜 | 변경 | |---|---| | 2026-05-08 | Phase 1 | | 2026-05-10 | Manual cleanup — store anatomy + 7 patterns + transaction flow |