콘텐츠로 이동
GameDesign

미션 / NPC / 상인 작성완료구현밸런싱미완료

본 문서는 로비의 메타 콘텐츠 — NPC 운영, 미션 시스템, 상인 거래 — 를 정의한다. 모두 로비에서 일어나는 행동이며 런 전후의 자산 흐름을 만든다.

flowchart LR
subgraph LOBBY [로비]
  NPC[NPC 상호작용]
  MENU{메뉴 선택}
  TALK[대화]
  TRADE[상인 거래]
  MISSION[미션]
end
subgraph RUN [런]
  PROGRESS[미션 카운트 누적<br/>Kill · Item 수집]
end
subgraph COMPLETE [완료]
  HAND[미션 반납 · 보상 수령]
end

NPC --> MENU
MENU --> TALK & TRADE & MISSION
MISSION --> PROGRESS
PROGRESS -->|탈출 성공| HAND
PROGRESS -->|사망 · 실패| ITEMLOSS[Item 미션 아이템 손실<br/>Kill 카운트 유지]
HAND --> NPC

classDef lobby fill:#e0f2fe,stroke:#0284c7,stroke-width:2px,color:#075985
classDef run fill:#fef3c7,stroke:#d97706,stroke-width:2px,color:#78350f
classDef ok fill:#bbf7d0,stroke:#16a34a,stroke-width:2.5px,color:#14532d
classDef bad fill:#fecaca,stroke:#dc2626,stroke-width:2.5px,color:#7f1d1d
classDef decide fill:#e9d5ff,stroke:#9333ea,stroke-width:2.5px,color:#581c87
class NPC,TALK,TRADE,MISSION lobby
class MENU decide
class PROGRESS run
class HAND ok
class ITEMLOSS bad
원칙규칙의미
NPC = 다기능 컨테이너한 NPC가 대화·상인·미션 중 여러 기능을 동시에 가진다복합 NPC가 자유롭게 정의된다
데이터 주도형 NPCID/태그 기반 시트 행으로 NPC를 정의한다코드 수정 없이 기획자가 NPC를 추가 가능
미션 = 카운트 누적Kill 카운트는 사망해도 유지, Item은 탈출 실패 시 손실미션 종류에 따라 손실 규칙이 다르다
거래 = 양방향 정산양측 제안 칸 + 차액 버튼 방식매매 조건을 동시에 협상하는 구조
평판이 가격을 결정매입·판매 모두 평판 5단계 보정관계 투자가 장기 경제 이득으로 이어진다

NPC는 ID/태그 기반 데이터 주도형으로 운영한다.

  • NPC 마스터 시트에 행 단위로 NPC 정의 (npc_blacksmith_01 같은 문자열 ID).
  • 기능(상인·미션·대화·수리·크래프팅)은 시트 컬럼 또는 태그로 표현.
  • 코드의 NPCType enum은 마이그레이션 후 폐기 또는 카테고리 분류 보조 용도로만 유지.
ID (가칭)이름시설핵심 기능
npc_blacksmith대장장이대장간수리·크래프팅·모루(파츠)
npc_peddler보부상잡화상잡템 매매
npc_herbalist약초상약초방치료·회복 거래
npc_innkeeper주막 아줌마주막(아지트)창고·휴식·도깨비 복귀

추가 NPC(미션 전용, 진영별)는 시트에 행을 추가하는 방식으로 자유롭게 확장된다.

컬럼의미
npcIDNPC 고유 식별자 (예: npc_blacksmith_01)
displayName표시명 (현지화 키)
spriteUI 일러스트 자산 키
tags[]기능 태그 (merchant, mission_giver, repair, craft, storage 등)
merchantBuyCategories[]매입 가능 카테고리
merchantSellPoolID판매 후보 풀 ID
reputationCurveID평판 곡선 ID
lines[]인사·기본 대사 텍스트 풀

상호작용 시 메뉴 등장. NPC 보유 기능에 따라 선택적으로 표시.

대화 / 상인 / 미션 / 떠나기
코드의미카운트 유지 규칙
Kill특정 몬스터 처치사망·탈출 실패해도 누적 유지
Item특정 아이템 수집·반납탈출 실패 시 아이템과 함께 손실
컬럼의미
id미션 식별자
npcID제공 NPC ID
missionTypeKill / Item
missionTargetIDs[]클리어 대상 ID 배열
missionCounts[]대상별 요구 수치 배열
rewardType보상 종류 (Item만 현재 코드에 정의)
rewardTargetIDs[], rewardCounts[], rewardItemGrades[]보상 상세

조건 그룹 3개 (condition1~condition3). 결합 규칙은 그룹 안은 AND, 그룹끼리는 OR.

예: condition1 = [1001, 1002], condition2 = [1005] → (1001 AND 1002) OR 1005.

상태표시의미
미등장리스트에 없음조건 미충족
미수령미션명조건 충족, 미수락
진행중미션명 (진행중)수락 후 완료 전
완료미션명 (완료)클리어 후 보상 수령 가능
조건 충족 → 미수령 → NPC 상호작용 수락 → 진행중
런 중 카운트 누적 → 완료 조건 충족
NPC 상호작용 → 보상 수령 → 완료
  • Kill 카운트는 런 종료 후에도 누적으로 유지된다.
  • Item 미션은 탈출 성공 시 NPC에 반납 가능한 인벤토리 상태가 된다.
  • 단위: 단일 통화 “푼”. 다단위 환산 미운영.
  • 인벤토리 점유: 1칸 스택형 (MoneyTableData.stack).
  • 거래 사용 범위: 휴대 내 화폐만 사용. 창고 화폐는 로비에서 휴대로 이동 후 사용.
매입가 = 기준가(Price) × 상태 × 평판
의미
Price아이템 테이블 기준가
상태0.5 + (0.5 × 내구도%)
평판5단계 0.8~1.2

Price가 없는 아이템(퀘스트 아이템 등)은 거래 불가.

판매가 = Price × 이윤(기본 1.5) × 평판

3.4 상점 진열 — 런 단위 재추첨

섹션 제목: “3.4 상점 진열 — 런 단위 재추첨”
  • 상인별 판매 가능 후보 풀을 시트에 정의 (카테고리·태그·등급 필터).
  • 플레이어가 런 종료 후 로비로 복귀할 때마다 상인 보유 아이템 재추첨.
  • 평판 단계에 따른 상위 등급 노출 확률 보정.

상인 앞에서 [F] 키 → 거래 UI 오픈.

영역내용
상인 보유 리스트좌측 — 상인이 팔 수 있는 아이템
구매 칸좌측 하단 — 플레이어가 사려는 아이템
캐릭터 보유 리스트우측 — 플레이어 휴대 + 창고
판매 칸우측 하단 — 플레이어가 팔 아이템
보관함 탭창고 인벤토리 (참조 전용, 거래 직접 사용 불가)
거래하기 버튼양측 차액 정산

차액 표시: 구매가 > 판매가 → “N푼 주기”, 구매가 < 판매가 → “N푼 받기”.

입력: 우클릭으로 보유 ↔ 거래 칸 이동. X키로 취소 (변경 전 상태로 복귀).

  • 수리 전담: 대장장이만 수리 가능.
  • 수리 비용: 미정 — 내구도·고장 시스템과 함께 기획 필요.
  • 크래프팅(파츠 조립)은 모루(Anvil)에서 운영 — 파츠 시스템 참조.
시스템연결 지점
런 구조출정 전 준비 단계에서 NPC 상호작용.
인벤토리·창고거래·모루·미션이 같은 InventoryInfo 구조 재사용.
아이템·루팅·드랍Item 미션 대상 아이템 ID 매칭.
몬스터 AIKill 미션 대상 몬스터 ID 매칭.
파츠모루 크래프팅이 상인 시스템과 분리 운영.
영역시트 / DTO
NPC 마스터(추후 ID/태그 기반 시트 추가 예정)
미션 정보MissionInfoTableSheet
미션 등장 조건MissionConditionTableSheet
상인 판매 리스트상인별 시트 (예정)
  • 보상 Trigger(맵/NPC/콘텐츠 해금) 도입 시점.
  • 수리 비용 산식.
  • 평판 컨텐츠 자체 미존재 — 평판 전이 조건은 평판 컨텐츠 추가 시 함께 정의.