리니지 운영자상점추가 소스
프리서버 오픈소스 리니지 운영자 상점 추가
L1NpcShopSwitch.java 를 command\excutor 에 넣고
나비켓 command 테이블에 영자상점 9999 L1NpcShopSwitch
S_Gmcommand.java 에 영자상점 추가
-------------------------------------------------------
datatable 경로에 NpcShopTable.java 넣는다
NpcShopSystem.java 를 GameSystem 에 . 파일첨부
NpcShopSpawnTable.java 를 datatables에 . 파일첨부
L1NpcShopInstance.java 를 Model.Instance에 . 파일첨부
L1NpcShop.java 를 templates에 . 파일첨부
S_PrivateShopforNpc 를 serverpacket 에
---------------------------------------------
server\server\templates\L1Shopitem.java에
private final int _packCount; //검색후 아래에
private final int _enchant;
private int _count; //추가
그리구 밑에 인수
이런식으로 변경
public L1ShopItem(int itemId, int price, int packCount, int enchant) {
_itemId = itemId;
_item = ItemTable.getInstance().getTemplate(itemId);
_price = price;
_packCount = packCount;
_enchant = enchant;
_count = 1;
}
---------------------
public int getPackCount() {
return _packCount; <--이부분 밑에 아래식으로 넣음
}
public int getEnchant() {
return _enchant;
}
public int getCount(){
return _count;
}
public void setCount(int i) {
_count = i;
}
----------------------
ShopTable.java 에 보면 에러가 2군데
private L1Shop loadShop(int npcId, ResultSet rs) throws SQLException { <---검색
item = new L1ShopItem(itemId, sellingPrice, packCount, 0); 뒤에 , 0 을 넣어줌.두군데
----------------------
GameServer.java에
import l1j.server.GameSystem.NpcShopSystem;
import l1j.server.server.datatables.NpcShopTable;
임포트 하고
HomeTownController.getInstance(); //검색
NpcShopTable.getInstance();
NpcShopSystem.getInstance(); //추가
------------------------
C_ShopAndWarehouse.java
import l1j.server.server.datatables.NpcShopTable; <--임포트
검색 --> if(size != 0 && npcImpl.equalsIgnoreCase("L1Merchant"))
buyItemFromShop(pc, npcId, size);
if(size != 0 && npcImpl.equalsIgnoreCase("L1NpcShop")){
buyItemFromNpcShop(pc, npcId, size);
break;
} //이런식으로 변경
if(size != 0 && isPrivateShop)
buyItemFromPrivateShop(pc, findObject, size);
break;
buyItemFromPrivateShop <--검색 이위에다가
/** 영자 상점 엔피씨 샵에서 구입 */
private void buyItemFromNpcShop(L1PcInstance pc, int npcId, int size){
L1Shop shop = NpcShopTable.getInstance().get(npcId);
L1ShopBuyOrderList orderList = shop.newBuyOrderList();
int itemNumber; long itemcount;
for (int i = 0; i < size; i++) {
itemNumber = readD();
itemcount = readD();
if(itemcount <= 0) {
return;
}
if(size >= 2){ //동시에 다른물건을 살수없게 2개가 선택된다면,
pc.sendPackets(new S_SystemMessage("\\fY한번에 서로 다른아이템을 구입할수없습니다."));
return;
}
if(pc.getMapId() == 360){//오렌시장을 잡템만 가능하게했기때문에, 오렌시장에선 15개씩 수량 이상 안사지게
if(itemcount > 15) {
pc.sendPackets(new S_SystemMessage("\\fY최대구매수량 : 잡템류(15개씩) / 장비류(1개씩)"));
return;
}
}
orderList.add(itemNumber, (int)itemcount , pc);
}
int bugok = orderList.BugOk();
if (bugok == 0){
shop.sellItems(pc, orderList);
//백섭복사 방지 수량성버그방지
pc.saveInventory();
//백섭복사 방지 수량성버그방지
}
}
------------------------
C_ShopList.java
import l1j.server.server.model.Instance.L1NpcShopInstance; 임포트
import l1j.server.server.serverpackets.S_PrivateShopforNpc; 임포트
if (pc.isGhost()) { return; } <--검색 아래처럼 변경
if (pc.isGhost()) { return; }
L1Object obj = L1World.getInstance().findObject(objectId);
if(obj instanceof L1PcInstance)
pc.sendPackets(new S_PrivateShop(pc, objectId, type));
else if(obj instanceof L1NpcShopInstance)
pc.sendPackets(new S_PrivateShopforNpc(pc, objectId, type));
else
return;
}
L1Shop.java
// 고대의 금화 상인 (트릭)
if(getNpcId() == 4208001){ 검색해서 위에
// 영자쫄따구 엔피씨 상점
if(getNpcId() >= 8000000){ //해당 번호 위부터 전부 인식
if(!NoTaxEnsureSell(pc, orderList)){
return;
}
NpcShopSellItems(pc.getInventory(), orderList);
return;
}
------------------------
Shop_npc 와 Spanwlist_npc_shop 를 배치해주고 npc 테이블에 상점들 추가
예 ) 8000001 영자상점 영자상점 무인상점 L1NpcShop 5869 99 0 0 -10000 18 14 16 6 15 60 0 3276 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0