좋아—**달팽이(100100)**가 죽을 때 “어떻게 아이템이 결정돼서 떨어지는지”를 코드 플로우로 풀어서 보여줄게. (파일/라인 함께)
전체 흐름(콜 체인)-
몬스터 사망 처리 → 드랍 호출
-
MapleMap.killMonster(...) 내부에서 조건에 따라
dropFromMonster(dropOwner, monster) 호출.
└ 위치: src/server/maps/MapleMap.java:2225, 2228
-
드랍 후보 구성 → dropFromMonster(...)
-
초반 가드(드랍 비활성/특수상태/자폭몹 등) 통과 확인 (:520~535)
-
난수 생성: int cRand = Randomizer.rand(0, 9999); (:551)
-
몬스터 수가 많으면 cRand를 키워 확률 하락:
39마리: *1.5 (:554), >79마리: *2.0 (:557)
-
보스면 cRand /= 2 로 확률 상승 (:560)
-
-
후보 리스트: final List<MonsterDropEntry> dropEntry = new ArrayList<>(); (:544)
-
후보 추가 로직(달팽이에 해당되는 부분 위주)
-
MustDrop(확정 드랍)
-
DropEtc.isMustDropMob(...) 매칭 시 확정 추가 (:562~578)
-
달팽이(100100)는 매칭 없음(확정 드랍 없음)
-
-
Booty 게이트 (부티): if (cRand < DropEtc.booty_rate) (:579)
-
drop_booty에서 몹ID=100100인 항목 수집 → 하나 랜덤 선택해 추가
-
달팽이는 4000019(달팽이 껍질) 1개만 후보 매칭
-
후보 선택/추가: :590~596
-
-
-
Stuff(잡템) 게이트
-
현재 주석 처리됨 (:598~603) → 이 경로로는 추가 안 됨
-
-
(주석 라벨) “아케인 심볼” 추가 드랍
-
주석 라벨뿐이고 코드는 활성:
-
nSum = rand(2050010, 2050016)
-
pSum = rand(0, 777); if (pSum < 10) dropEntry.add(nSum) (:607~611)
→ 대략 10/778 ≈ 1.29% 확률로 2050010~2050016 중 1개 추가
-
-
-
퀘스트 아이템(비보스)
-
if (cRand < quest_rate || mobLv < 10)이면 drop_quest에서 해당 몹의 후보를 모아 1개 랜덤 추가 (:614~633)
-
달팽이는 drop_quest 매칭 없음
-
-
후보 실제 스폰
-
for (MonsterDropEntry de : dropEntry) { ... } 루프에서
-
아이템 타입 판별(EQUIP/USE/ETC) → idrop 생성
-
위치 계산 후 spawnMobDrop(...) 호출 (:1415~1446)
-
spawnMobDrop 내부에서 맵에 드랍 오브젝트로 스폰 (:3400~3471, src/server/maps/MapleMap.java)
-
-
Booty 후보: 4000019 (달팽이 껍질) — DropEtc.drop_booty 매칭
-
추가 랜덤 드랍(주석 라벨 “아케인 심볼” 블록):
-
2050010 ~ 2050016 중 하나가 **약 1.29%**로 추가될 수 있음 (:607~611)
-
-
MustDrop/Quest/Stuff: 이 소스 기준 매칭 없음(Stuff는 해당 코드가 주석 처리)
-
기본(맵에 몹 ≤39):
-
Booty ≈ 3.00%, Quest ≈ 2.00%(달팽이는 후보 없음), Stuff ≈ 0.29%(경로 비활성)
-
-
혼잡(>39): Booty ≈ 2.00%
-
매우 혼잡(>79): Booty ≈ 1.50%
-
위와 별개로 2050010~2050016 ≈ 1.29% 추가 시도
결론: 드랍률 좀 씨게 올려라
기타템 드롭 안되는 버그 어케 고쳐...