Files
2nd/10_Wiki/Topics/Game_Design/War-Commander-Event-Operations.md
T
2026-05-10 22:08:15 +09:00

6.4 KiB

id, title, category, status, canonical_id, aliases, duplicate_of, source_trust_level, confidence_score, verification_status, tags, raw_sources, last_reinforced, github_commit, tech_stack
id title category status canonical_id aliases duplicate_of source_trust_level confidence_score verification_status tags raw_sources last_reinforced github_commit tech_stack
wiki-2026-0508-war-commander-event-operations War Commander Event Operations 10_Wiki/Topics verified self
WC Events
KIXEYE Event Ops
WC LiveOps
none A 0.85 applied
liveops
event-design
kixeye
mid-core
monetization
2026-05-10 pending
language framework
Python/JavaScript Custom LiveOps Backend

War Commander Event Operations

매 한 줄

"매 mid-core LiveOps 의 prototype". 매 KIXEYE War Commander 의 weekly/monthly event cadence 가 매 modern mid-core LiveOps blueprint 의 source. 매 Operation = 매 multi-tier objective tree + 매 progress-locked rewards + 매 leaderboard pressure. 매 매 매 retention pump + IAP funnel 의 dual purpose.

매 핵심

매 event taxonomy

  • Operation (PvE): 매 weekly story-skinned wave — 매 base attacks per tier.
  • Battle Pass / Tournament: 매 PvP leaderboard, 매 monthly cadence.
  • Faction Conflict: 매 alliance-war event, 매 sector control.
  • Limited unit teaser: 매 unit prelude — early access via reward track.

매 event lifecycle

  1. Tease (T-7d): cinematic + dev blog.
  2. Prelude (T-3d): pre-quests, login bonus.
  3. Main (T0-T+5d): tiered objectives.
  4. Cleanup (T+5d-T+7d): catch-up store, last-chance IAP.
  5. Recap (T+7d): leaderboard, top-100 banner.

매 reward structure

  • 매 free track + 매 paid (Premium Pass) parallel.
  • 매 tier completion → 매 incremental reward stack.
  • 매 milestone bonuses — 매 "complete by Tuesday" 의 추가 reward.
  • 매 leaderboard cutoff: top-1, top-10, top-100, top-1000.

💻 패턴

Event objective tree

class EventTier:
    def __init__(self, id, target, reward, prereq=None):
        self.id = id
        self.target = target  # e.g., {"wave_clears": 10}
        self.reward = reward
        self.prereq = prereq
        self.completed = False

EVENT_TREE = [
    EventTier("t1", {"wave_clears": 5},  Reward(metal=50000)),
    EventTier("t2", {"wave_clears": 10}, Reward(oil=80000), prereq="t1"),
    EventTier("t3", {"wave_clears": 20, "no_loss": True},
              Reward(unit_blueprint="reaper_drone"), prereq="t2"),
    EventTier("t4_premium", {"wave_clears": 30},
              Reward(cosmetic="reaper_skin"), prereq="t3"),
]

def update_progress(player, action):
    for tier in EVENT_TREE:
        if tier.completed: continue
        if tier.prereq and not is_completed(player, tier.prereq): continue
        if check_target(player.stats, tier.target):
            tier.completed = True
            grant_reward(player, tier.reward)
            log_event("tier_complete", player.id, tier.id)

Leaderboard scoring (Redis ZSET)

import redis
r = redis.Redis()

def record_score(event_id: str, player_id: str, points: int):
    key = f"event:{event_id}:lb"
    r.zincrby(key, points, player_id)

def get_top(event_id: str, n: int = 100):
    key = f"event:{event_id}:lb"
    return r.zrevrange(key, 0, n-1, withscores=True)

def get_player_rank(event_id: str, player_id: str):
    key = f"event:{event_id}:lb"
    return r.zrevrank(key, player_id)

Catch-up store (cleanup phase)

def generate_cleanup_offers(player, event):
    completed_tiers = sum(1 for t in event.tiers if is_completed(player, t.id))
    missing = len(event.tiers) - completed_tiers
    if missing == 0: return []
    discount = min(0.5, 0.1 * missing)  # more missed → bigger discount
    return [
        Offer(
            id=f"catchup_{event.id}",
            content=f"Skip remaining {missing} tiers",
            price_usd=4.99 + missing * 1.5,
            discount=discount,
            expires=event.end_time + timedelta(days=2)
        )
    ]

Pre-event tease scheduler

def schedule_tease(event_id: str, start_time):
    schedule(start_time - timedelta(days=7),
             lambda: send_push_all("New Operation incoming"))
    schedule(start_time - timedelta(days=3),
             lambda: enable_prelude_quests(event_id))
    schedule(start_time,
             lambda: activate_event(event_id))
    schedule(start_time + timedelta(days=5),
             lambda: enable_cleanup_store(event_id))
    schedule(start_time + timedelta(days=7),
             lambda: archive_event(event_id))

Server-side wave generator (PvE Operation)

function generateWave(tier, playerLevel) {
    const compMix = ['INFANTRY', 'VEHICLE', 'AIRCRAFT'];
    const waveSize = 5 + tier * 3;
    const units = [];
    for (let i = 0; i < waveSize; i++) {
        const role = compMix[i % compMix.length];
        const power = 100 * Math.pow(1.15, playerLevel - 1);
        units.push({
            type: role,
            level: Math.min(15, playerLevel),
            hp: power * roleMod(role).hp,
            dps: power * roleMod(role).dps,
            speed: roleMod(role).speed
        });
    }
    return units;
}

매 결정 기준

상황 Approach
New player onboarding Easy tier 1-2, generous rewards
Veteran retention Hard tier 4+ with prestige cosmetic
Monetization push Premium pass with exclusive blueprint
Power-creep introduction Operation tease + reward 7d before launch
Competitive players Leaderboard tournament, top-1k rewards

기본값: 매 weekly Operation + 매 monthly Tournament + 매 quarterly Faction Conflict.

🔗 Graph

🤖 LLM 활용

언제: Event design template, tiered reward structure 의 reference, LiveOps cadence planning. 언제 X: Single-player narrative games — 매 LiveOps cadence 의 mismatch.

안티패턴

  • No catch-up: 매 missed players 의 churn — 매 cleanup store + extended access 필요.
  • Pay-to-win premium pass: 매 paid track 의 power gap — 매 cosmetic + boost 의 hybrid 필요.
  • Permanent currency leaks: 매 event currency 의 stockpile → 매 next event 의 trivial.

🧪 검증 / 중복

  • Verified (KIXEYE WC LiveOps blog 2014-2017, community Operation guides).
  • 신뢰도 A.

🕓 Changelog

날짜 변경
2026-05-08 Phase 1
2026-05-10 Manual cleanup — WC Event Ops w/ tier tree + LB + cleanup store