버프상점 무기착용에따라 근거리 원거리 버프 나눠주기
이소스는 폭스서버의 버프상점을 디컴후 해석후
상점이용하는 케릭터의 무기를 체크해 근거리 원거리 버프를 구별해주기위한 소스입니다.
L1Shop.java
import l1j.server.server.model.skill.L1SkillUse;
import static l1j.server.server.model.skill.L1SkillId. *;
//임포트 시킵니다.
//배당을 측정하기 위한 추가 부분
if (getNpcId() == 70035 || getNpcId() == 70041 || getNpcId() == 70042) {
int[] ticket = L1BugBearRace.getInstance().getTicketInfo(order.getOrderNumber());
item.setSecondId(ticket[0]);
item.setRoundId(ticket[1]);
item.setTicketId(ticket[2]);
L1BugBearRace.getInstance().addBetting(order.getOrderNumber(), amount);
}
inv.storeItem(item);
}
}
////////////////////////////위 소스가 원본입니다.//////////////////////
//배당을 측정하기 위한 추가 부분
if (getNpcId() == 70035 || getNpcId() == 70041 || getNpcId() == 70042) {
int[] ticket = L1BugBearRace.getInstance().getTicketInfo(order.getOrderNumber());
item.setSecondId(ticket[0]);
item.setRoundId(ticket[1]);
item.setTicketId(ticket[2]);
L1BugBearRace.getInstance().addBetting(order.getOrderNumber(), amount);
}
L1PcInstance pc = inv.getOwner();
int weaponType = 0;
L1ItemInstance weapon = pc.getWeapon();
weaponType = weapon.getItem().getType1();
if (itemId == 상점이파는아이템아이디 && weaponType != 20 ) { //활착용아니라면
pc.getInventory().removeItem(상점이파는아이템아이디 , 1);
int[] allBuffSkill = {
PHYSICAL_ENCHANT_STR, PHYSICAL_ENCHANT_DEX,
BLESS_WEAPON, ADVANCE_SPIRIT, HASTE,
EARTH_SKIN, FIRE_WEAPON, CONCENTRATION, INSIGHT, NATURES_TOUCH };
// 힘,덱,
//블레스웨폰,어벤, 헤이,
//어스스킨, 파폰, 컨센트레이션, 인사이트, 네이쳐스터치
L1SkillUse l1skilluse = null;
l1skilluse = new L1SkillUse();
for (int i = 0; i < allBuffSkill.length ; i++) {
l1skilluse.handleCommands(pc, allBuffSkill[i], pc.getId(), pc.getX(), pc.getY(), null, 0, L1SkillUse.TYPE_GMBUFF);
}
}else if (itemId == 상점이파는아이템아이디 && weaponType == 20 ) { //활착용이라면
pc.getInventory().removeItem(상점이파는아이템아이디, 1);
int[] allBuffSkill = {
PHYSICAL_ENCHANT_STR, PHYSICAL_ENCHANT_DEX,
ADVANCE_SPIRIT, HASTE, EARTH_SKIN, WIND_SHOT,
CONCENTRATION, INSIGHT, NATURES_TOUCH };
//힘, 덱,
//어벤, 헤이, 어스스킨, 윈드샷,
//컨센트레이션, 인사이트, 네이쳐스터치
L1SkillUse l1skilluse = null;
l1skilluse = new L1SkillUse();
for (int i = 0; i < allBuffSkill.length ; i++) {
l1skilluse.handleCommands(pc, allBuffSkill[i], pc.getId(), pc.getX(), pc.getY(), null, 0, L1SkillUse.TYPE_GMBUFF);
}
} else
inv.storeItem(item);
}
}
응용해서 깃털상점이나 자기자신서버에 아데나대신 특화아이템 소모 상점이 있고
그상점에 위소스를 적용시키고 싶을때
깃털 상점에 추가하는방법으로 예를들어볼게요
1. 해당상점에서 유저가 구입시 어떻게할지 처리를 담아둔 부분을 찾는다
깃털상점 L1Shop 자바에서 해당되는 NPC아이디로 검색합니다
(안나오는것은 아데나 상점입니다)
// 사부상인
if(getNpcId() == 762677){
if (!REnsureSell(pc, orderList)) {
return;
}
RSellItems(pc.getInventory(), orderList); // 이부분 RSellItems 로 검색
return;
}
// 프리미엄 상점
if(getNpcId() == 4220000 || getNpcId() == 4220001 || getNpcId() == 4220002 || getNpcId() == 4220003
|| getNpcId() == 4220700){
if (!ensurePremiumSell(pc, orderList)) {
return;
}
sellPremiumItems(pc.getInventory(), orderList); //이부분sellPremiumItems 로 검색
return;
}
2. sellPremiumItems 로 검색하면 깃털상점에서 구입시 처리되는 부분입니다.
private void sellPremiumItems(L1PcInventory inv, L1ShopBuyOrderList orderList) {
if (!inv.consumeItem(41159, orderList.getTotalPrice())) {
throw new IllegalStateException("구입에 필요한 깃털을 소비할 수 없었습니다.");
}
L1ItemInstance item = null;
for (L1ShopBuyOrder order : orderList.getList()) {
int itemId = order.getItem().getItemId();
int amount = order.getCount();
item = ItemTable.getInstance().createItem(itemId);
item.setCount(amount);
item.setIdentified(true);
/////////////////이부분에 버프상점 소스를 끼워넣습니다.//////////////////
inv.storeItem(item);
}
}
이렇게해주시면 깃상이나 특화상점에 추가할수있겟죠....
이상 산소포럼의 사부였습니다.
소스를 퍼가시되 출처 보존 확실하게 해주세요
(출처 - http://o2.co1.kr 사부의 폭스팩디컴 소스 수정 )

로스트사가 님의 최근 댓글
감사합니다. 2019 06.13 감사합니다. 2019 06.12 감사합니다. 2019 05.03 감사합니다. 2019 05.03 감사합니다. 2018 03.11