refactor(topics): 멀티 에이전트용 지식 재편 — _Common(공통 기본기) + Domain_* 구조
에이전트 8종(대화형/프로그래머 C·S/디자이너/설계자/기획자/QA/PD/PM)에게 [공통 기본 능력 + 롤별 Specialty] 2층으로 지식을 주입하기 위한 재분류. 문서 내용·포맷은 무수정, 폴더 이동만 (6,372개 문서 수 보존 확인). - Topic_Programming → Domain_Programming (내부 구조 보존) - Topic_Graphic → Domain_Design - Topic_Business → Domain_Product - Topic_General → Domain_General - _Common 신설: Math(구 Topic_Math_Specialty), Reasoning(구 General/From_Thinking & Reasoning), Reasoning_Creativity(구 General/From_창의성), Communication(Poetic_Blog_Writing + From_writing) - 타 도메인의 From_* 폴더는 유지 (출처 표기일 뿐, 이미 도메인에 맞게 분류된 문서) - 빈 폴더 정리 (memory/procedures) - 에이전트→폴더 매핑은 workspace의 .astra/agent-knowledge-map.json (9개 에이전트) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,201 @@
|
||||
---
|
||||
id: wiki-2026-0508-eve-온라인-eve-online
|
||||
title: EVE 온라인(EVE Online)
|
||||
category: 10_Wiki/Topics
|
||||
status: verified
|
||||
canonical_id: self
|
||||
aliases: [EVE Online, EVE, CCP Games]
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.9
|
||||
verification_status: applied
|
||||
tags: [game-design, mmo, sandbox, virtual-economy, distributed-systems]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-10
|
||||
github_commit: pending
|
||||
tech_stack:
|
||||
language: stackless-python
|
||||
framework: tranquility
|
||||
---
|
||||
|
||||
# EVE 온라인(EVE Online)
|
||||
|
||||
## 매 한 줄
|
||||
> **"매 single-shard MMO sandbox 의 player-driven economy 의 22-year proof"**. EVE Online (CCP Games, 2003-) 매 single persistent universe 매 모든 players 의 same world 의 share — 매 player-built corporations, wars, markets, espionage 의 ground truth. Architecture (Stackless Python + StacklessIO + cluster), economy, sandbox design 매 industry case study.
|
||||
|
||||
## 매 핵심
|
||||
|
||||
### 매 Architecture (Tranquility)
|
||||
- **Single shard**: 매 모든 players 매 one universe — 매 7,800+ star systems.
|
||||
- **Per-system simulation node**: 매 system 매 one node 의 simulate, 매 nodes 매 cluster 의 distribute.
|
||||
- **Stackless Python**: 매 lightweight tasklets 매 thousands 의 ships 의 concurrent simulation.
|
||||
- **Time Dilation (TiDi)**: 매 fleet fight 의 thousands 의 ships 시 매 time slow-down (10%까지) — 매 graceful degradation.
|
||||
|
||||
### 매 Economy
|
||||
- **Player-driven 99%**: 매 모든 ships, modules, structures 매 player-mined / built.
|
||||
- **PLEX**: 매 real-money item 의 in-game ISK 의 trade — 매 secondary market.
|
||||
- **Real economist**: 매 CCP 매 in-house economist (Eyjólfur Guðmundsson) 매 quarterly reports 의 publish — 매 inflation, sink/faucet balance.
|
||||
|
||||
### 매 응용
|
||||
1. Sandbox MMO design reference.
|
||||
2. Distributed simulation scaling case.
|
||||
3. Virtual economy research (papers).
|
||||
4. Emergent player politics — Goonswarm, Test Alliance.
|
||||
|
||||
## 💻 패턴
|
||||
|
||||
### TiDi-style adaptive tickrate
|
||||
```python
|
||||
class AdaptiveSimulation:
|
||||
def __init__(self, target_fps=10):
|
||||
self.target_dt = 1.0 / target_fps
|
||||
self.tidi = 1.0 # 1.0 = real-time, 0.1 = 10% speed
|
||||
|
||||
def step(self, entities):
|
||||
start = time.monotonic()
|
||||
for e in entities:
|
||||
e.update(self.target_dt * self.tidi)
|
||||
elapsed = time.monotonic() - start
|
||||
# If frame took longer than budget, dilate
|
||||
if elapsed > self.target_dt:
|
||||
self.tidi = max(0.1, self.target_dt / elapsed)
|
||||
else:
|
||||
self.tidi = min(1.0, self.tidi + 0.05)
|
||||
```
|
||||
|
||||
### Per-system node assignment
|
||||
```python
|
||||
SYSTEM_NODES = {} # system_id -> node_id
|
||||
|
||||
def route_player(player, system_id):
|
||||
node_id = SYSTEM_NODES.get(system_id)
|
||||
if node_id is None:
|
||||
node_id = pick_least_loaded_node()
|
||||
SYSTEM_NODES[system_id] = node_id
|
||||
forward_to_node(node_id, player)
|
||||
|
||||
def reinforce_system(system_id, expected_players):
|
||||
"""
|
||||
Pre-fight reinforcement: 매 large fleet 의 expected 시
|
||||
매 system 의 dedicated high-spec node 의 move
|
||||
"""
|
||||
if expected_players > 500:
|
||||
move_system_to_node(system_id, get_dedicated_node())
|
||||
```
|
||||
|
||||
### ISK economy faucet/sink tracking
|
||||
```python
|
||||
@dataclass
|
||||
class EconomicEvent:
|
||||
type: Literal['faucet', 'sink']
|
||||
source: str # 'mission_reward', 'market_fee', 'jump_clone_cost'
|
||||
amount: int # ISK
|
||||
actor_id: str
|
||||
ts: datetime
|
||||
|
||||
def monthly_economic_report(events: list[EconomicEvent]):
|
||||
by_source = defaultdict(lambda: {'in': 0, 'out': 0})
|
||||
for e in events:
|
||||
bucket = 'in' if e.type == 'faucet' else 'out'
|
||||
by_source[e.source][bucket] += e.amount
|
||||
total_in = sum(b['in'] for b in by_source.values())
|
||||
total_out = sum(b['out'] for b in by_source.values())
|
||||
return {
|
||||
'net': total_in - total_out,
|
||||
'inflation_signal': (total_in - total_out) / max(total_out, 1),
|
||||
'top_faucets': sorted(by_source.items(), key=lambda x: -x[1]['in'])[:5],
|
||||
'top_sinks': sorted(by_source.items(), key=lambda x: -x[1]['out'])[:5],
|
||||
}
|
||||
```
|
||||
|
||||
### Market order matching (regional)
|
||||
```python
|
||||
class MarketEngine:
|
||||
def __init__(self):
|
||||
self.buy_orders = defaultdict(list) # item_id -> [orders]
|
||||
self.sell_orders = defaultdict(list)
|
||||
|
||||
def place_buy(self, order):
|
||||
sells = sorted(self.sell_orders[order.item_id], key=lambda o: o.price)
|
||||
remaining = order.quantity
|
||||
for s in sells:
|
||||
if s.price > order.max_price: break
|
||||
qty = min(remaining, s.quantity)
|
||||
self.execute_trade(order.buyer, s.seller, order.item_id, qty, s.price)
|
||||
s.quantity -= qty
|
||||
remaining -= qty
|
||||
if remaining == 0: break
|
||||
if remaining > 0:
|
||||
order.quantity = remaining
|
||||
heapq.heappush(self.buy_orders[order.item_id], order)
|
||||
```
|
||||
|
||||
### Killmail event sourcing
|
||||
```python
|
||||
@dataclass
|
||||
class Killmail:
|
||||
victim_id: str; attackers: list[str]
|
||||
ship_type: str; system_id: str
|
||||
isk_destroyed: int
|
||||
ts: datetime
|
||||
final_blow: str
|
||||
|
||||
# 매 immutable log — 매 zKillboard / EveWho 의 derive
|
||||
def replay_corp_history(killmails: list[Killmail], corp_id: str):
|
||||
losses = sum(k.isk_destroyed for k in killmails if member_of(k.victim_id, corp_id))
|
||||
kills = sum(k.isk_destroyed for k in killmails
|
||||
if any(member_of(a, corp_id) for a in k.attackers))
|
||||
return {'isk_efficiency': kills / max(kills + losses, 1)}
|
||||
```
|
||||
|
||||
### Sovereignty / structure timer
|
||||
```python
|
||||
class StructureTimer:
|
||||
"""매 attacked structure 매 reinforce mode 의 enter — 매 24h timer."""
|
||||
def __init__(self, structure_id):
|
||||
self.id = structure_id
|
||||
self.state = 'anchored'
|
||||
self.timer_end = None
|
||||
|
||||
def take_damage(self, dmg):
|
||||
if self.state == 'anchored' and self.hp_below(50):
|
||||
self.state = 'reinforced'
|
||||
self.timer_end = now() + timedelta(hours=24, minutes=randint(0, 360))
|
||||
elif self.state == 'reinforced' and now() >= self.timer_end:
|
||||
self.state = 'vulnerable'
|
||||
```
|
||||
|
||||
## 매 결정 기준
|
||||
| 상황 | Approach |
|
||||
|---|---|
|
||||
| Massive single-world MMO | 매 EVE 의 per-system node + TiDi |
|
||||
| Sharded MMO (WoW-style) | 매 EVE pattern 의 not-needed |
|
||||
| Player economy 의 desire | 매 explicit faucet/sink design + economist |
|
||||
| Sandbox vs themepark | 매 EVE-style emergent vs scripted quests |
|
||||
| Anti-griefing | 매 EVE 의 high/low/null-sec gradient |
|
||||
|
||||
**기본값**: 매 single-shard 매 only 매 specific tradeoff 의 worth — 매 most MMOs 매 sharding 의 simpler. Economy 매 EVE pattern 의 broad applicability.
|
||||
|
||||
## 🔗 Graph
|
||||
- 응용: [[Virtual-Economy]]
|
||||
- Adjacent: [[CCP-Games]]
|
||||
|
||||
## 🤖 LLM 활용
|
||||
**언제**: 매 player-economy game design reference. Distributed simulation 매 graceful degradation case. Virtual economy academic study.
|
||||
**언제 X**: 매 non-MMO context. 매 small game 매 EVE complexity 의 over-apply.
|
||||
|
||||
## ❌ 안티패턴
|
||||
- **No sinks**: 매 only faucets — 매 hyperinflation. EVE 매 broker fees, jump clone, structure costs 의 sinks.
|
||||
- **Hard server cap**: 매 no TiDi 매 fleet fight 의 disconnect storm. Graceful slow-down 의 prefer.
|
||||
- **Dev intervention 의 economy**: 매 CCP 매 historically 의 hands-off — 매 player corp scams 매 allowed. 매 too much intervention 매 sandbox 의 break.
|
||||
- **Single-shard 의 cargo-cult**: 매 most games 매 single-shard 의 not-need — 매 sharding cost 의 cheaper.
|
||||
|
||||
## 🧪 검증 / 중복
|
||||
- Verified (CCP Games dev blogs; "EVE Online: How to Build a Single-Shard MMO" GDC; Eyjólfur Guðmundsson MER reports).
|
||||
- 신뢰도 A.
|
||||
|
||||
## 🕓 Changelog
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | Manual cleanup — EVE architecture + economy + 6 patterns |
|
||||
Reference in New Issue
Block a user