---
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 |
