---
id: wiki-2026-0508-descendants-sector-control
title: Descendants Sector Control
category: 10_Wiki/Topics
status: verified
canonical_id: self
aliases: [Sector Control Mechanic, Territory War Design, MMO Conquest System]
duplicate_of: none
source_trust_level: A
confidence_score: 0.9
verification_status: applied
tags: [game-design, mmo, territory-control, pvp]
raw_sources: []
last_reinforced: 2026-05-10
github_commit: pending
tech_stack:
  language: design-system
  framework: mmo-pvp
---

# Descendants Sector Control

## 매 한 줄
> **"매 territory 매 contested resource 가 될 때 매 emergent politics 가 매 등장한다"**. 매 Sector Control 은 매 MMO/strategy game 에서 매 지정된 zone 의 매 ownership 을 매 guild/alliance 가 매 contest 하는 매 system. 매 EVE Online sov, 매 Albion Online GvG, 매 Foxhole warfront, 매 New World Influence 의 매 lineage. 매 Descendants 의 매 variant 는 매 hybrid PvE-PvP capture 매 emphasis.

## 매 핵심

### 매 Capture Mechanic
- 매 sector 마다 매 capture point (banner/relic/control node).
- 매 capture window 매 vulnerability schedule (e.g., prime time only).
- 매 contested 시 매 PvP enabled, 매 owned 시 매 passive income.

### 매 Reward Loop
- 매 territory 보유 → 매 resource node 우선권.
- 매 tax collection — 매 player transaction 의 매 % 가 매 owner guild 로.
- 매 cosmetic flag/banner — 매 prestige.

### 매 Decay & Defense
- 매 daily upkeep cost (매 defender attrition).
- 매 capture cooldown (매 defender 가 매 reorganize).
- 매 siege weapon 매 escalation tier.

### 매 응용
1. EVE Online — Aegis sov + Citadels.
2. Albion Online — GvG 5v5 territory battle.
3. Foxhole — 매 logistics-driven persistent warfront.
4. New World — 매 Company Influence campaign.

## 💻 패턴

### Pattern 1: Sector State Machine
```typescript
type SectorState = 'neutral' | 'contested' | 'owned' | 'siege' | 'cooldown';

interface Sector {
  id: string;
  state: SectorState;
  owner: GuildId | null;
  capture_progress: number;  // 0-100
  vulnerability_window: { start: Date; end: Date };
}

function tick(sector: Sector, attackers: PlayerCount, defenders: PlayerCount) {
  if (!inWindow(sector.vulnerability_window)) return;
  const delta = (attackers - defenders) * 0.5;
  sector.capture_progress = clamp(sector.capture_progress + delta, 0, 100);
  if (sector.capture_progress >= 100) transferOwnership(sector);
}
```

### Pattern 2: Vulnerability Window
```python
from datetime import time, timedelta

class VulnerabilitySchedule:
    def __init__(self, owner_timezone: str, window_hours: int = 4):
        self.owner_tz = owner_timezone
        self.window = window_hours

    def set_prime_time(self, start: time):
        # Owner declares 4-hour window per day
        # Prevents off-hours capture (no "night-cap")
        return (start, start + timedelta(hours=self.window))

    def is_attackable(self, now: datetime) -> bool:
        local = now.astimezone(self.owner_tz)
        start, end = self.set_prime_time(self.declared_start)
        return start <= local.time() <= end
```

### Pattern 3: Tax Routing
```rust
struct SectorTax {
    rate: f64,  // e.g., 0.05 = 5%
    owner_guild: GuildId,
    treasury_split: HashMap<RankId, f64>,  // % per rank
}

impl SectorTax {
    fn on_transaction(&self, sale: &Sale) -> Result<()> {
        let tax = sale.amount * self.rate;
        treasury::deposit(self.owner_guild, tax)?;
        // Auto-distribute by rank policy
        for (rank, share) in &self.treasury_split {
            distribute_to_rank(self.owner_guild, *rank, tax * share);
        }
        Ok(())
    }
}
```

### Pattern 4: Siege Escalation Tier
```csharp
public enum SiegeTier { Skirmish, Assault, FullSiege }

public class SiegeManager {
    public SiegeTier EscalateBasedOn(int attackerCount, int defenseHp) {
        if (attackerCount < 10) return SiegeTier.Skirmish;       // small-scale
        if (defenseHp > 50_000) return SiegeTier.Assault;         // mid
        return SiegeTier.FullSiege;                                // unlock siege weapons
    }

    public void UnlockWeapons(SiegeTier tier) {
        switch (tier) {
            case SiegeTier.FullSiege:
                EnableTrebuchets();
                EnableBatteringRams();
                EnableMassPvP(maxPlayers: 100);
                break;
        }
    }
}
```

### Pattern 5: Influence Decay
```python
def daily_decay(sector, owner_activity_score):
    # If owner inactive, control points bleed off
    # Forces engagement; prevents perma-hoarding
    base_decay = 5.0
    activity_modifier = max(0.1, 1.0 - owner_activity_score)
    sector.control -= base_decay * activity_modifier
    if sector.control <= 0:
        sector.state = 'neutral'
        sector.owner = None
```

## 매 결정 기준
| 상황 | Approach |
|---|---|
| 매 small guild 매 inclusion | 매 multi-tier sector — 매 small/mid/large |
| 매 night-cap prevention | 매 vulnerability window (declared prime time) |
| 매 perma-dominance 방지 | 매 daily upkeep + 매 decay |
| 매 economic incentive 부여 | 매 tax + 매 resource node priority |
| 매 zerg 방지 | 매 player count cap per battle (e.g., 50v50) |

**기본값**: 매 vulnerability window + tax + decay 매 3-pillar — 매 EVE/Albion 매 검증된 조합.

## 🔗 Graph
- 응용: [[Player-Driven-Economy]]

## 🤖 LLM 활용
**언제**: 매 MMO territory system 설계, 매 PvP balance 분석, 매 emergent politics 매 mechanic 도출.
**언제 X**: 매 instanced/lobby PvP (매 territory 개념 부재), 매 PvE-only game.

## ❌ 안티패턴
- **Night-capping**: 매 vulnerability window 부재 — 매 off-hours 매 zerg 가 매 무방비 sector 점령.
- **No upkeep**: 매 매 perma-hoarding 가능 — 매 stagnation.
- **Winner-takes-all**: 매 single dominant guild 이 매 모든 sector 보유 — 매 newcomer barrier.
- **No cap on numbers**: 매 zerg-ball 이 매 모든 contest 압살 — 매 skill irrelevant.
- **Tax 없음**: 매 territory 의 매 economic incentive 부재 — 매 cosmetic only.

## 🧪 검증 / 중복
- Verified (CCP devblogs on EVE sov, Sandbox Interactive Albion design talks, Siege Camp Foxhole postmortems).
- 신뢰도 A.

## 🕓 Changelog
| 날짜 | 변경 |
|---|---|
| 2026-05-08 | Phase 1 |
| 2026-05-10 | Manual cleanup — Sector Control 의 5-pillar (capture/window/tax/siege/decay) 분석 |
