2.7 벚꽃팩 몹드랍 템 편하게
2.7 벚꽃팩을 써본 분들은 아시겠지만
몬스터 드롭 수정하려고 나비캣에서 npc 찾고, droplist 매칭하고, 아이템 ID 따서 weapon, armor 테이블 뺑뺑이 도는 작업은 정말 번거롭고 직관적이지 못합니다.
무엇보다 "+7 무기"나 "+5 방어구" 같은 인챈트 아이템은 애초에 기본 드롭 테이블에서 지원하지도 않습니다.
이 기능은 지옥 같은 나비캣 드롭 노가다를 탈출하고, XML 파일 하나로 깔끔하게 몬스터별 독립 드롭 아이템(인챈트 장비 포함)을 구현하기 위해 제작되었습니다.
이미 팩을 수정해서 쓰고 계신 분들이 많아 자바 파일 자체를 덮어쓰면 기존 소스가 날아갈 수 있으므로, 누구나 자기 팩에 얹어 쓸 수 있도록 수동 가이드 형태로 공유합니다.
1. 아래 파일을 에디터로 열어서 [수정전]코드를 찾아서 [수정후] 코드로 바꿔줍니다.
2.7벚꽃팩\src\l1j\server\server\model\item\L1TreasureBox.java
[수정 전]
@XmlAccessorType(XmlAccessType.FIELD)
private static class Item {
@XmlAttribute(name = "ItemId")
private int _itemId;
@XmlAttribute(name = "Count")
private int _count;
private int _chance;
@XmlAttribute(name = "Chance")
private void setChance(double chance) {
_chance = (int) (chance * 10000);
}
public int getItemId() {
return _itemId;
}
public int getCount() {
return _count;
}
public double getChance() {
return _chance;
}
}
[수정 후]
@XmlAccessorType(XmlAccessType.FIELD)
private static class Item {
@XmlAttribute(name = "ItemId")
private int _itemId;
@XmlAttribute(name = "Count")
private int _count;
private int _chance;
@XmlAttribute(name = "Chance")
private void setChance(double chance) {
_chance = (int) (chance * 10000);
}
@XmlAttribute(name = "Enchant")
private int _enchant = 0; // 인챈트 속성 추가 (안 적으면 기본 0)
public int getItemId() {
return _itemId;
}
public int getCount() {
return _count;
}
public double getChance() {
return _chance;
}
public int getEnchant() {
return _enchant; // 인챈트 값 반환 메서드 추가
}
}
2. 하단 메서드 교체
[수정 전]
if (getType().equals(TYPE.SPECIFIC)) {
// 나오는 아이템이 정해져 있는 것
for (Item each : getItems()) {
item = ItemTable.getInstance().createItem(each.getItemId());
if (item != null) {
item.setCount(each.getCount());
storeItem(pc, item);
}
}
} else if (getType().equals(TYPE.RANDOM)) {
// 나오는 아이템이 랜덤으로 정해지는 것
Random random = new Random();
int chance = 0;
int r = random.nextInt(getTotalChance());
for (Item each : getItems()) {
chance += each.getChance();
if (r < chance) {
item = ItemTable.getInstance().createItem(each.getItemId());
if (item != null) {
item.setCount(each.getCount());
storeItem(pc, item);
}
break;
}
}
}
[수정 후]
if (getType().equals(TYPE.SPECIFIC)) {
// 나오는 아이템이 정해져 있는 것
for (Item each : getItems()) {
item = ItemTable.getInstance().createItem(each.getItemId());
if (item != null) {
item.setCount(each.getCount());
item.setEnchantLevel(each.getEnchant()); // 인챈트 수치 적용 추가
storeItem(pc, item);
}
}
} else if (getType().equals(TYPE.RANDOM)) {
// 나오는 아이템이 랜덤으로 정해지는 것
Random random = new Random();
int chance = 0;
int r = random.nextInt(getTotalChance());
for (Item each : getItems()) {
chance += each.getChance();
if (r < chance) {
item = ItemTable.getInstance().createItem(each.getItemId());
if (item != null) {
item.setCount(each.getCount());
item.setEnchantLevel(each.getEnchant()); // 인챈트 수치 적용 추가
storeItem(pc, item);
}
break;
}
}
}
3. 2.7벚꽃팩\config\rates.properties 파일 최하단에 아래 내용 삽입
# ---------------------------------------------------------
# 몬스터 직수령 설정 (MonsterDirectDrop + 숫자)
# 형식: npcId, 아이템ID, 인챈트, 확률(10000=1%, 100000=10%), 시스템메시지이름
# ---------------------------------------------------------
# 10% 확률로 설정 (100,000 / 1,000,000)
MonsterDirectDrop1 = 45165,42000,0,1000000,test
4. 나비켓 etcitem 테이블에서 질의마법사를 실행해서 아래 쿼리 실행
-- 1. 혹시 기존에 남아있을지 모를 42000번 아이템을 안전하게 삭제
DELETE FROM `etcitem` WHERE `item_id` = 42000;
-- 2. 카리프의 최고급 주머니 데이터 한 줄 추가 (etcitem 구조 완벽 매칭)
INSERT INTO `etcitem`
(`item_id`, `name`, `name_id`, `item_type`, `use_type`, `material`, `weight`, `invgfx`, `grdgfx`, `itemdesc_id`, `stackable`, `max_charge_count`, `dmg_small`, `dmg_large`, `min_lvl`, `max_lvl`, `locx`, `locy`, `mapid`, `bless`, `trade`, `delay_id`, `delay_time`, `delay_effect`, `food_volume`, `save_at_once`, `solvent`)
VALUES
(42000, '카리프의 최고급 주머니', '$3187', 'other', 'treasure_box', 'paper', 10, 2626, 6375, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, -1);
5. 2.70 벚꽃팩\data\xml\Item\TreasureBox.xml 파일의 <!--칼리프의 복주머니 다이아몬드--> 주석 위에 아래 코드 삽입
<!--칼리프의 최고급 주머니-->
<TreasureBox Type="RANDOM" ItemId="42000">
<Item ItemId="100164" Count="1" Chance="10" Enchant="7"/>
<Item ItemId="124" Count="1" Chance="10" Enchant="7"/>
<Item ItemId="123" Count="1" Chance="10" Enchant="7"/>
<Item ItemId="150" Count="1" Chance="10" Enchant="7"/>
<Item ItemId="100189" Count="1" Chance="10" Enchant="7"/>
<Item ItemId="40494" Count="5" Chance="10" />
<Item ItemId="40014" Count="1" Chance="10" />
<Item ItemId="40779" Count="1" Chance="10" />
<Item ItemId="40400" Count="1" Chance="10" />
<Item ItemId="40317" Count="1" Chance="10" />
<Item ItemId="40487" Count="1" Chance="10" />
<Item ItemId="40304" Count="1" Chance="10" />
<Item ItemId="40428" Count="1" Chance="10" />
</TreasureBox>

뷸바다 님의 최근 댓글