--- id: wiki-2026-0508-war-commander-event-operations title: War Commander Event Operations category: 10_Wiki/Topics status: verified canonical_id: self aliases: [WC Events, KIXEYE Event Ops, WC LiveOps] duplicate_of: none source_trust_level: A confidence_score: 0.85 verification_status: applied tags: [liveops, event-design, kixeye, mid-core, monetization] raw_sources: [] last_reinforced: 2026-05-10 github_commit: pending tech_stack: language: Python/JavaScript framework: 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 ```python 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) ```python 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) ```python 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 ```python 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) ```javascript 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 - 부모: [[Live Operations (LiveOps)]] - 응용: [[War-Commander-Combat-Ecosystem]] · [[Mobile Strike]] - Adjacent: [[KIXEYE]] · [[Power Creep (Content Treadmills)]] · [[Dynamic Offers]] ## 🤖 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 |