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>
198 lines
6.8 KiB
Markdown
198 lines
6.8 KiB
Markdown
---
|
|
id: wiki-2026-0508-초인플레이션-hyperinflation
|
|
title: 초인플레이션(Hyperinflation)
|
|
category: 10_Wiki/Topics
|
|
status: verified
|
|
canonical_id: self
|
|
aliases: [Hyperinflation, 초인플레이션, Game Economy Inflation]
|
|
duplicate_of: none
|
|
source_trust_level: A
|
|
confidence_score: 0.92
|
|
verification_status: applied
|
|
tags: [game-economy, mmorpg, monetization, telemetry]
|
|
raw_sources: []
|
|
last_reinforced: 2026-05-10
|
|
github_commit: pending
|
|
tech_stack:
|
|
language: typescript
|
|
framework: Telemetry/Analytics
|
|
---
|
|
|
|
# 초인플레이션 (Hyperinflation)
|
|
|
|
## 매 한 줄
|
|
> **"매 currency supply > sink capacity 의 누적 결과"**. game economy 에서 매 closed loop 가 leak 되면 매 가격이 exponential 로 증가. EVE Online, Diablo 2, Path of Exile 의 매 historic crisis. 2026 의 매 design 답: 매 sink scaling + telemetry-driven faucet throttle + seasonal reset.
|
|
|
|
## 매 핵심
|
|
|
|
### 매 정의
|
|
- **Inflation rate**: 매 (M/V) 증가율 — 매 monetary supply / velocity
|
|
- **Hyperinflation threshold**: 매 50%+ price increase per month (Cagan 정의)
|
|
- **Faucet**: 매 currency 발생 source (mob drop, quest reward)
|
|
- **Sink**: 매 currency 소멸 destination (repair, tax, fee)
|
|
- **Velocity**: 매 currency 의 unit time per transaction
|
|
|
|
### 매 hyperinflation 원인
|
|
- **Faucet > Sink imbalance**: 매 net positive money creation
|
|
- **Bot farming**: 매 24/7 currency creation, real-money trading
|
|
- **Item duplication exploit**: 매 supply spike
|
|
- **Player-base growth**: 매 new player 의 income 이 sink 보다 빠름
|
|
- **Power creep**: 매 high-tier item price 가 inflate, 매 wealth concentration
|
|
|
|
### 매 응용
|
|
1. Live-ops dashboard — 매 inflation rate alarm.
|
|
2. Sink design — 매 luxury sink + repair sink 조합.
|
|
3. Seasonal reset (Diablo / PoE) — 매 economy 의 reset valve.
|
|
|
|
## 💻 패턴
|
|
|
|
### Inflation index (CPI-like)
|
|
```typescript
|
|
type PriceSnapshot = { itemId: string; medianPrice: number; ts: number }
|
|
|
|
class InflationIndex {
|
|
private basket: string[] // 매 representative items
|
|
private base: Map<string, number> = new Map()
|
|
|
|
init(snapshots: PriceSnapshot[]) {
|
|
for (const s of snapshots) if (this.basket.includes(s.itemId)) {
|
|
this.base.set(s.itemId, s.medianPrice)
|
|
}
|
|
}
|
|
|
|
current(snapshots: PriceSnapshot[]): number {
|
|
let ratioSum = 0, n = 0
|
|
for (const s of snapshots) {
|
|
const b = this.base.get(s.itemId)
|
|
if (b) { ratioSum += s.medianPrice / b; n++ }
|
|
}
|
|
return n > 0 ? ratioSum / n : 1
|
|
}
|
|
|
|
monthlyRate(history: number[]): number {
|
|
if (history.length < 30) return 0
|
|
return history[history.length - 1] / history[history.length - 30] - 1
|
|
}
|
|
}
|
|
```
|
|
|
|
### Faucet/sink balance
|
|
```typescript
|
|
type EconFlow = { faucet: number; sink: number; ts: number }
|
|
|
|
function netFlow(flows: EconFlow[], windowMs: number): number {
|
|
const cutoff = Date.now() - windowMs
|
|
const recent = flows.filter(f => f.ts > cutoff)
|
|
return recent.reduce((s, f) => s + f.faucet - f.sink, 0)
|
|
}
|
|
|
|
function isInflating(flows: EconFlow[]): boolean {
|
|
return netFlow(flows, 24 * 3600 * 1000) > 0
|
|
}
|
|
```
|
|
|
|
### Adaptive sink (repair scaling)
|
|
```typescript
|
|
function repairCost(item: Item, econ: EconState): number {
|
|
const base = item.value * 0.05
|
|
// 매 inflation index 와 비례
|
|
const adjusted = base * econ.inflationIndex
|
|
// 매 high-tier 일수록 누진세
|
|
const progressive = item.tier > 5 ? adjusted * 1.5 : adjusted
|
|
return Math.round(progressive)
|
|
}
|
|
```
|
|
|
|
### Bot detection (currency velocity)
|
|
```typescript
|
|
function suspiciousAccount(account: Account): boolean {
|
|
const tx = account.transactions
|
|
const earnRate = tx.filter(t => t.type === "earn").length / 3600 // per hour
|
|
const sleepGap = maxGapMs(tx) // longest no-tx gap
|
|
// 매 24/7 high earn + no sleep gap = bot
|
|
return earnRate > 200 && sleepGap < 6 * 3600 * 1000
|
|
}
|
|
```
|
|
|
|
### Luxury sink design
|
|
```typescript
|
|
type LuxurySink = {
|
|
id: string
|
|
cost: number
|
|
effect: "cosmetic" | "buff" | "social"
|
|
permanent: boolean
|
|
}
|
|
|
|
const LUXURY: LuxurySink[] = [
|
|
{ id: "guild_castle_lv2", cost: 50_000_000, effect: "social", permanent: true },
|
|
{ id: "name_color", cost: 5_000_000, effect: "cosmetic", permanent: false },
|
|
{ id: "global_announce", cost: 1_000_000, effect: "social", permanent: false },
|
|
]
|
|
|
|
// 매 wealth-concentration drain
|
|
function balancedLuxury(econ: EconState): LuxurySink[] {
|
|
const target = econ.top1PctReserve * 0.05
|
|
return LUXURY.map(l => ({ ...l, cost: Math.round(l.cost * econ.inflationIndex) }))
|
|
}
|
|
```
|
|
|
|
### Seasonal reset
|
|
```typescript
|
|
async function startNewSeason(seasonId: string) {
|
|
await archiveCharacters("legacy")
|
|
// 매 new season 은 currency 0, items 0
|
|
await createFreshLeague(seasonId)
|
|
// 매 legacy economy 는 sink 처리 (item museum, retirement bonus)
|
|
await migrateToLegacy("legacy", { incomeMultiplier: 0.0, allowTrade: false })
|
|
}
|
|
```
|
|
|
|
### Real-time inflation alert
|
|
```typescript
|
|
function monitorInflation(idx: InflationIndex, history: number[]) {
|
|
const monthly = idx.monthlyRate(history)
|
|
if (monthly > 0.5) alert("HYPERINFLATION", { rate: monthly })
|
|
else if (monthly > 0.2) alert("INFLATION_HIGH", { rate: monthly })
|
|
else if (monthly < -0.1) alert("DEFLATION", { rate: monthly })
|
|
}
|
|
```
|
|
|
|
## 매 결정 기준
|
|
| 인플레이션 상태 | Action |
|
|
|---|---|
|
|
| < 5% / month | Healthy, no action |
|
|
| 5-20% / month | 매 sink boost (repair, tax) |
|
|
| 20-50% / month | 매 faucet throttle (drop nerf) + new sink |
|
|
| > 50% / month (hyper) | 매 emergency sink + seasonal reset 검토 |
|
|
| Deflation (< 0%) | 매 sink reduction, faucet boost |
|
|
|
|
**기본값**: weekly inflation index check + adaptive repair cost + bi-annual season reset.
|
|
|
|
## 🔗 Graph
|
|
- 부모: [[Hyperinflation-in-Closed-Loop-Systems]]
|
|
- 변형: [[가차(Gacha)]] · [[부분_유료화(Free-to-Play)]]
|
|
- 응용: [[EVE_온라인(EVE_Online)]] · [[디아블로_2(Diablo_II)]] · [[알비온_온라인(Albion_Online)]]
|
|
- Adjacent: [[Telemetry_Balancing]] · [[배수구(Sinks)]] · [[탭과_싱크(Taps_and_Sinks)]]
|
|
|
|
## 🤖 LLM 활용
|
|
**언제**: economy crisis post-mortem, sink mechanic ideation, patch note 작성.
|
|
**언제 X**: 매 real-time price aggregation — 매 SQL/Streaming 으로.
|
|
|
|
## ❌ 안티패턴
|
|
- **Static sink**: 매 fixed cost — 매 inflation 시 무력화.
|
|
- **Faucet-only nerf**: sink 안 늘리고 drop 만 줄임 — 매 player frustration spike.
|
|
- **No bot detection**: 매 24/7 farmer 방치 — 매 supply 폭발.
|
|
- **No seasonal valve**: 매 perpetual server 의 매 wealth concentration.
|
|
- **Top-down price control**: 매 NPC 가격 freeze → black market 으로 도피.
|
|
|
|
## 🧪 검증 / 중복
|
|
- Verified (CCP EVE Monthly Economic Report, GGG PoE league design talks, Cagan 1956).
|
|
- 신뢰도 A.
|
|
- 관련 canonical: [[Hyperinflation-in-Closed-Loop-Systems]] (general systems 관점).
|
|
|
|
## 🕓 Changelog
|
|
| 날짜 | 변경 |
|
|
|---|---|
|
|
| 2026-05-08 | Phase 1 |
|
|
| 2026-05-10 | Manual cleanup — game economy hyperinflation + sink design |
|