콘텐츠로 이동
GameDesign

아이템 / 루팅 / 드랍 작성완료구현밸런싱미완료

본 문서는 익스트랙션의 핵심 보상 구조인 아이템 생성·드랍·루팅 흐름을 정의한다. 카테고리·등급 같은 분류 기준은 아이템 분류 정책에 두고, 본 문서는 어디서 생성되어 어떻게 결정·획득되는가를 다룬다.

flowchart TD
subgraph GEN [맵 생성 시점]
  M[인게임 진입]
  A[드랍 후보 확정<br/>몹 착용 · 상자 내용물]
end
subgraph RUNZONE [런 진행]
  R[탐색 · 전투]
end
subgraph LOOT [루팅 행위]
  L[시체 루팅]
  C[상자 루팅]
  I[낱개 획득]
end
subgraph CORRECT [시점 보정]
  D[수량 · 등급 보정<br/>행운 · 수량 스탯]
end
subgraph DONE [결과]
  P[인벤토리 적재]
end

M --> A --> R
R -->|몹 처치| L
R -->|상자 상호작용| C
R -->|낱개 줍기| I
L --> D
C --> D
D --> P
I --> P

classDef gen fill:#ede9fe,stroke:#7c3aed,stroke-width:2px,color:#4c1d95
classDef run fill:#fef3c7,stroke:#d97706,stroke-width:2px,color:#78350f
classDef loot fill:#fed7aa,stroke:#ea580c,stroke-width:2px,color:#7c2d12
classDef correct fill:#e9d5ff,stroke:#9333ea,stroke-width:2.5px,color:#581c87
classDef done fill:#bbf7d0,stroke:#16a34a,stroke-width:2.5px,color:#14532d
class M,A gen
class R run
class L,C,I loot
class D correct
class P done
원칙규칙의미
맵 생성 시 확정몹 착용 아이템, 상자 내용물 후보는 인게임 진입 시점에 결정런 중간에 재추첨하지 않는다
루팅 시 확정실제 획득 등급·수량은 루팅 행위 시점에 보정행운·수량 스탯이 그 시점에 적용된다
100% 드랍 아님몹이 가진 아이템이 그대로 다 드러나지 않는다수량 수치로 노출 비율을 결정한다
카테고리 중복 회피한 몹/상자에서 같은 세부 카테고리(예: 신발)는 두 번 부여되지 않는다장비 조합 다양성 유지
무기는 별개 처리무기는 0개 또는 1개. 일반 장비 카테고리 카운트와 분리무기 과다 드랍 방지

플레이어가 런 중 아이템을 얻는 소스는 세 가지다.

소스정의핵심 클래스
몬스터 시체처치한 몬스터를 시체 상호작용으로 루팅MonsterGenerator, MonsterInfoTableData
상자맵에 배치된 상자 (ChestGroup 단위 관리)ChestGroup, ChestGroupTableData
낱개 아이템맵에 직접 배치된 단일 아이템ItemGroup, MapDropItemInfo

코드(DropTierTableData.woodChestValue / jewelChestValue / lockedChestValue) 기준 상자는 3종.

종류코드 키의도
나무 상자WoodChest일반 상자, 등급 보상 낮음
보석 상자JewelChest고급 상자, 등급 보상 상승
잠긴 상자LockedChest해제 행위 필요. 보상 더 큼 (추정)

1. 맵 생성 시 (인게임 진입 시점)

섹션 제목: “1. 맵 생성 시 (인게임 진입 시점)”

플레이어가 진입하면 다음이 한 번에 결정된다.

각 스폰된 몬스터마다 다음 절차를 거친다. 기준 테이블은 몬스터의 tier로 조회한 DropTier 테이블 한 행.

단계입력결정 내용관련 컬럼
1몬스터 tier무기 장착 여부 (0/1)weaponKinds0Value, weaponKinds1Value
2무기 장착 시가능한 무기 후보 리스트 — 몹의 weaponQueryTags로 의미 필터 (태그 시스템)몹 테이블 + 아이템 태그
3후보 안에서가치(WorthRarity) 가중치 기반 1개 선택 — 몹의 DropWorth 이하만 후보아이템 테이블
4선택된 무기파츠 부착 비율 결정partsRate20Value 등 5단계
5몹 tier방어구 장착 개수 (0~4)armorKinds0Value ~ armorKinds4Value
6개수만큼방어구 후보 리스팅 → 가치 가중치 추첨, 세부 카테고리 중복 금지
7몹 tier잡템(Misc) 개수 (0~6)miscKinds0Value ~ miscKinds6Value
8개수만큼잡템 후보 리스팅 → 가치 가중치 추첨, 세부 카테고리 중복 금지
9잡템마다스택 개수 결정DropStackCount (스택 α 함수)
10몹 tier골드 드랍 여부·최대값noneMoneyRate, minMoney, maxMoney

이렇게 정해진 결과가 **몹의 “착용 아이템”**이며 시체 루팅의 풀이 된다.

ChestGroup은 그룹 단위로 묶인 상자들이며, 각 그룹은 ChestGroupTableData로 카테고리별 의미 태그 쿼리를 가진다 (매칭 규칙은 태그 시스템 §4).

  • weaponQueryTags — 무기 의미 태그 쿼리
  • mainPartsQueryTags — Main 파츠 의미 태그 쿼리
  • subPartsQueryTags — Sub 파츠 의미 태그 쿼리
  • armorQueryTags — 방어구 의미 태그 쿼리
  • miscQueryTags — 잡템 의미 태그 쿼리

그룹 단위 파라미터(dropWorthValue, dropEquipKindsValue, dropPartsRateValue, dropMiscKindsValue, dropGradeValue, dropMoneyValue, dropStackCountValue, dropStackCountAlpha)는 몹과 동일한 알고리즘으로 작동한다.

ItemGroup 단위로 맵에 수동 배치된다. 후보 결정은 그룹별 정의를 따른다 (상세는 맵 모듈 시스템 문서에서 다룸).

루팅 후보가 정해진 아이템마다 등급이 부여된다. 등급은 7단계.

Poor → Common → Uncommon → Rare → Epic → Legendary → Artifact

등급은 DropTier 테이블의 등급 확률 컬럼으로 결정된다. 같은 tier라도 행마다 분포가 달라 고티어 몹일수록 상위 등급 비율이 높다.

컬럼의미
itemGradePoorRatePoor 등급 확률
itemGradeCommonRateCommon 등급 확률
itemGradeUncommonRateUncommon 등급 확률
itemGradeRareRateRare 등급 확률
itemGradeEpicRateEpic 등급 확률
itemGradeLegendaryRateLegendary 등급 확률
itemGradeArtifactRateArtifact 등급 확률

행 합은 항상 100%여야 한다.

후보가 정해져 있어도 플레이어가 실제로 얻는 양과 등급은 루팅 시점에 보정된다.

후보 아이템 중 얼마를 실제로 드러낼지 결정한다. 수량 수치가 높을수록 노출 비율이 올라간다.

수량 수치노출 확률
4020%
10040%
15060%
30080%
600100%

행운 수치가 높을수록 후보 아이템 등급이 한 단계씩 상향될 확률이 부여된다. 보정은 루팅 시 아이템 각각 개별로 적용된다.

행운 \ 등급 보정+1+2+3+4+5
401%1%
1001%1%1%
1502%1%1%1%
3003%2%1%1%1%
6004%3%1%1%1%

최대 등급 초과 시 Artifact로 고정.

확정된 DropItemInfo는 다음 정보를 담아 인벤토리에 들어간다.

필드의미
Category1최상위 카테고리
Category2세부 카테고리
ItemName아이템 식별자
ItemGrade결정된 등급
Count개수
Stack스택 크기
PartsInfo무기인 경우 부착된 파츠 정보
Affixes부가 옵션(접사) — 등급/태그로 결정

화폐(Money)는 별도 생성자로 처리되며 Count가 골드량, Stack이 스택을 의미한다.

시스템연결 지점
런 구조런 종료 시 루팅 자산 보존/손실 처리.
맵 모듈몹·상자·낱개 아이템 배치 위치와 그룹 정의.
인벤토리·창고루팅 결과(DropItemInfo)가 격자 인벤토리에 적재. 아이템 칸 크기·스택은 아이템 마스터 종속.
전투무기·파츠·방어구·방패의 실제 성능 적용.
캐릭터 스테이터스행운(Luck)·수량 보정 출처.
미션·NPC·상인아이템 수집 미션 조건 평가, 상인 매입 카테고리.
본 문서 절관련 테이블 / 시트
§1.1 몹 드랍몬스터 정보 테이블, DropTier 테이블, 아이템 마스터
§1.2 상자 드랍ChestGroup 테이블, DropTier 테이블, 아이템 마스터
§1.3 낱개ItemGroup / MapDropItem 테이블
§2 등급DropTier 테이블 (itemGrade*Rate)
§3 수량/행운별도 보정 곡선 표 (작성 예정)

코드–기획 불일치 (드랍 파이프라인 버그)

섹션 제목: “코드–기획 불일치 (드랍 파이프라인 버그)”

2026-05-28 코드 점검(Corpse.cs, ItemManager.cs, MonsterGenerator.cs)에서 확인한 의도-구현 괴리. 사용자가 보고한 **“100% 드랍” + “같은 아이템 폭주”**의 직접 원인이다. 상세는 리스크에도 기록.

#증상원인 (코드)의도 (기획)
1100% 드랍Corpse.Setup이 후보 리스트(weapon/armor/misc/money)를 전부 그대로 인벤토리에 추가. 노출 확률 적용 단계 없음§3.1 수량 수치 → 노출 확률(40→20% … 600→100%)
2빗자루 등 비스택 아이템 5개 복제스택 분배 루프(line 9821032)가 스택 불가(stack=1) 아이템을 구분 안 함. 스택 포인트 배정 시 plusedCount>stack이 되어 “새 칸 생성” 분기(line 10071021)로 빠져 칸 복제. 반복되어 빗자루 칸이 불어남. 종류 추첨 단계 자체는 Remove로 1차 중복 제거가 있어 정상비스택 아이템은 1개로 끝나야 함
3잡템 편향잡템 풀이 Belt/Accessory/Bag/Utility/Material/Money 6종을 한 리스트로 합쳐 추첨 → 등록 수 많은 카테고리 독점(기획 미명세 — 단일 풀 vs 카테고리별 분배)
4스택 한쪽 쏠림스택 분배가 result.RandomElement() 균등 무작위 → 같은 아이템에 누적(기획 미명세 — DropStackCount α 함수 형태 불명)
5무기·방어구 연동dropEquipKindsValue 한 컬럼이 무기·방어구 개수를 함께 결정무기 0/1, 방어구 0~4 별도 결정
6무기 후보 축소RemoveWeaponItemKeysWithAvailableParts가 파츠 호환 무기를 후보에서 제외(기획 근거 없음)

가치 가중치(GetRandomItemInfo)는 1/WorthRarity로 구현되어 의도(희귀할수록 덜 뽑힘)와 방향은 맞으나, 함수가 코드 상수로 박혀 시트 밸런싱이 불가하다. 등급 보정(행운, §3.2)은 Corpse.RollItemGrade로 정상 작동하나, 수량 보정(§3.1)은 통째로 미구현이다.

  • WorthRarity / DropWorth의 정확한 산식 및 가치 가중치 계산 방법.
  • DropStackCount의 “스택 α 함수” 정의 (PDF에 함수 형태 미정).
  • 잠긴 상자의 해제 방식 (키·도구·스킬·미니게임).
  • 시체 루팅의 시간 비용 (루팅 시 점유 시간이 있는지, 즉시인지).
  • 시체 루팅 중 피격 가능 여부.
  • Affixes(접사) 부여 규칙과 등급/카테고리 관계.
  • 도깨비 탈출 아이템 등 특수 카테고리 아이템의 드랍 경로.