좋아—**달팽이(100100)**가 죽을 때 “어떻게 아이템이 결정돼서 떨어지는지”를 코드 플로우로 풀어서 보여줄게. (파일/라인 함께)

전체 흐름(콜 체인)
  1. 몬스터 사망 처리 → 드랍 호출

  • MapleMap.killMonster(...) 내부에서 조건에 따라
    dropFromMonster(dropOwner, monster) 호출.
    └ 위치: src/server/maps/MapleMap.java:2225, 2228

  1. 드랍 후보 구성 → 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)

  1. 후보 추가 로직(달팽이에 해당되는 부분 위주)

  • 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 매칭 없음

  1. 후보 실제 스폰

  • for (MonsterDropEntry de : dropEntry) { ... } 루프에서

    • 아이템 타입 판별(EQUIP/USE/ETC) → idrop 생성

    • 위치 계산 후 spawnMobDrop(...) 호출 (:1415~1446)

    • spawnMobDrop 내부에서 맵에 드랍 오브젝트로 스폰 (:3400~3471, src/server/maps/MapleMap.java)

달팽이(100100)의 “드랍 가능 아이템” 정리
  • 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% 추가 시도