private void deleteItem() { int numOfDeleted = 0; for (L1Object obj : L1World.getInstance().getObject()) { if (!(obj instanceof L1ItemInstance)) { continue; } L1ItemInstance item = (L1ItemInstance) obj; if (item.getX() == 0 && item.getY() == 0) { // 地面上のアイテムではなく、誰かの所有物 continue; } if (item.getItem().getItemId() == 40515) { // 精霊の石 continue; } if (L1HouseLocation.isInHouse(item.getX(), item.getY(), item.getMapId())) { // アジト内 continue; } List<L1PcInstance> players = L1World.getInstance().getVisiblePlayer(item, Config.ALT_ITEM_DELETION_RANGE); if (players.isEmpty()) { // 指定範囲内にプレイヤーが居なければ削除 L1Inventory groundInventory = L1World.getInstance().getInventory(item.getX(), item.getY(), item.getMapId()); groundInventory.removeItem(item); numOfDeleted++; } } _log.fine("ワールドマップ上のアイテムを自動削除。削除数: " + numOfDeleted); }
public ItemInfo getBuyItemInfo(L1ItemInstance item) { for (ItemInfo itemInfo : _idlist.values()) { if (itemInfo.id == item.getItemId() && itemInfo.bless == item.getBless() && itemInfo.enchantlvl == item.getEnchantLevel()) { return itemInfo; } } return null; }
// 비누 private void Soap( L1PcInstance pc, L1ItemInstance useItem, L1ItemInstance targetItem, int itemid) { if (targetItem.isEquipped()) { pc.sendPackets(new S_ServerMessage(1317)); return; } createNewItemR(pc, itemid, 1, targetItem.getEnchantLevel()); pc.getInventory().removeItem(useItem, 1); pc.getInventory().removeItem(targetItem, 1); pc.saveInventory(); }
private static void storeItem(L1PcInstance pc, L1ItemInstance item) { L1Inventory inventory; if (pc.getInventory().checkAddItem(item, item.getCount()) == L1Inventory.OK) { inventory = pc.getInventory(); } else { // 持てない場合は地面に落とす 処理のキャンセルはしない(不正防止) inventory = L1World.getInstance().getInventory(pc.getLocation()); } inventory.storeItem(item); pc.sendPackets(new S_ServerMessage(403, item.getLogName())); // %0を手に入れました。 }
/** * TreasureBoxを開けるPCにアイテムを入手させる。PCがアイテムを持ちきれなかった場合は アイテムは地面に落ちる。 * * @param pc - TreasureBoxを開けるPC * @return 開封した結果何らかのアイテムが出てきた場合はtrueを返す。 持ちきれず地面に落ちた場合もtrueになる。 */ public boolean open(L1PcInstance pc) { L1ItemInstance item = null; 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)) { // 出るアイテムがランダムに決まるもの RandomGenerator random = RandomGeneratorFactory.getSharedRandom(); 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 (item == null) { return false; } else { int itemId = getBoxId(); // 魂の結晶の破片、魔族のスクロール、ブラックエントの実 if (itemId == 40576 || itemId == 40577 || itemId == 40578 || itemId == 40411 || itemId == 49013) { pc.death(null); // キャラクターを死亡させる } return true; } }
// 변환석 private void Transform( L1PcInstance pc, L1ItemInstance useItem, L1ItemInstance targetItem, int enchant_check) { int itemid = targetItem.getItem().getItemId(); if (itemid >= 21028 && itemid <= 21033 || itemid >= 490000 && itemid <= 490017) { // 기존 스탯티 if (targetItem.getEnchantLevel() == enchant_check) { createNewItemR(pc, 20085, 1, targetItem.getEnchantLevel() + 1); pc.getInventory().removeItem(useItem, 1); pc.getInventory().removeItem(targetItem, 1); } else { pc.sendPackets(new S_ServerMessage(328)); } } else { pc.sendPackets(new S_ServerMessage(328)); } }
// 일반티 생성 private boolean createNewItemR(L1PcInstance pc, int item_id, int count, int enchant) { L1ItemInstance item = ItemTable.getInstance().createItem(item_id); item.setCount(count); item.setIdentified(true); item.setEnchantLevel(enchant); if (item != null) { if (pc.getInventory().checkAddItem(item, count) == L1Inventory.OK) { pc.getInventory().storeItem(item); pc.sendPackets(new S_ServerMessage(403, item.getLogName())); } else { L1World.getInstance().getInventory(pc.getX(), pc.getY(), pc.getMapId()).storeItem(item); } return true; } else { return false; } }
// 문양 private void PatternIn( L1PcInstance pc, L1ItemInstance useItem, L1ItemInstance targetItem, int pandoraset) { int targetItemId = targetItem.getItem().getItemId(); if (targetItem.getPandoraT() == pandoraset) { pc.sendPackets(new S_SystemMessage("이미 같은 문양이 부여되어 있습니다.")); return; } if (targetItem.isEquipped()) { pc.sendPackets(new S_ServerMessage(1317)); return; } if (targetItemId >= 22440 && targetItemId <= 22445 || targetItemId >= 22405 && targetItemId <= 22455) { // 판도라 티셔츠 targetItem.setPandoraT(pandoraset); pc.getInventory().updateItem(targetItem, L1PcInventory.COL_PANDORA); pc.getInventory().saveItem(targetItem, L1PcInventory.COL_PANDORA); pc.getInventory().removeItem(useItem, 1); pc.saveInventory(); } else { pc.sendPackets(new S_ServerMessage(328)); } }
// 檢查身上的鑰匙 private int checkInnKey(L1PcInstance pc, int npcid) { for (L1ItemInstance item : pc.getInventory().getItems()) { if (item.getInnNpcId() == npcid) { // 鑰匙與旅館NPC相符 for (int i = 0; i < 16; i++) { L1Inn inn = InnTable.getInstance().getTemplate(npcid, i); if (inn.getKeyId() == item.getKeyId()) { Timestamp dueTime = item.getDueTime(); if (dueTime != null) { // 時間不為空值 Calendar cal = Calendar.getInstance(); if (((cal.getTimeInMillis() - dueTime.getTime()) / 1000) < 0) { // 租用時間未到 pc.setInnKeyId(item.getKeyId()); // 登入此鑰匙 return item.checkRoomOrHall() ? 2 : 1; // 1:房間 2:會議室 } } } } } } return 0; }
private void buildPacket(L1PcInstance pc) { writeC(Opcodes.S_OPCODE_SELECTLIST); writeD(0x000000c8); // Price List<L1ItemInstance> weaponList = new FastTable<L1ItemInstance>(); List<L1ItemInstance> itemList = pc.getInventory().getItems(); for (L1ItemInstance item : itemList) { // Find Weapon if (item.getItem().getType2() == 1) { if (item.get_durability() > 0) { weaponList.add(item); } } } writeH(weaponList.size()); // Weapon Amount for (L1ItemInstance weapon : weaponList) { writeD(weapon.getId()); // Item ID writeC(weapon.get_durability()); // Fix Level } }
public C_DeleteInventoryItem(byte[] decrypt, LineageClient client) { super(decrypt); if (client == null) { return; } int itemObjectId = readD(); int count = readD(); // 추가 L1PcInstance pc = client.getActiveChar(); L1ItemInstance item = pc.getInventory().getItem(itemObjectId); // 삭제하려고 한 아이템이 서버상에 없는 경우 if (item == null) { return; } if (item.getItem().isCantDelete()) { pc.sendPackets(new S_ServerMessage(125)); return; } if (item.isEquipped()) { // \f1삭제할 수 없는 아이템이나 장비 하고 있는 아이템은 버릴 수 없습니다. pc.sendPackets(new S_ServerMessage(125)); return; } if (!pc.isGm() && (item.getItemId() >= 0 && (item.getItemId() == 46115 // 마빈 || item.getItemId() == 46116 // 구슬조각 || item.getItemId() == 46118 // 구슬조각 || item.getItemId() == 4500011 // 서버정보 || item.getItemId() == 41159 // 서버정보 || item.getItemId() == 46193))) { // 생존외침 pc.sendPackets(new S_ServerMessage(210, item.getItem().getName())); return; } // if (item.getBless() >= 128) {//봉인템삭제가능 // pc.sendPackets(new S_ServerMessage(210, item.getItem().getName())); // \f1%0은 // 버리거나 // 또는 // 타인에게 // 양일을 // 할 수 // 없습니다. // return; // } Object[] petlist = pc.getPetList().values().toArray(); L1PetInstance pet = null; for (Object petObject : petlist) { if (petObject instanceof L1PetInstance) { pet = (L1PetInstance) petObject; if (item.getId() == pet.getItemObjId()) { // \f1%0은 버리거나 또는 타인에게 양일을 할 수 없습니다. pc.sendPackets(new S_ServerMessage(210, item.getItem().getName())); return; } } } CodeLogger.getInstance().oblog("인벤삭제", pc.getName(), item, item.getCount()); // eva.LogObserverAppend("템삭제","<"+pc.getName()+">"+item.getName() // +"(+"+item.getEnchantLevel()+")"+"[갯수]"+" ("+item.getCount()+")"); // 추가 eva.LogObserverAppend("템삭제", pc.getName(), item, item.getCount(), itemObjectId); if (count == 0) count = item.getCount(); pc.getInventory().removeItem(item, count); pc.getLight().turnOnOffLight(); }
// 스탯티로 변환 private void PandoraTransform( L1PcInstance pc, L1ItemInstance useItem, L1ItemInstance targetItem, int itemid, int EndTime) { createNewItemR(pc, itemid, 1, targetItem.getEnchantLevel(), EndTime); pc.getInventory().removeItem(useItem, 1); pc.getInventory().removeItem(targetItem, 1); }
@Override public void clickItem(L1Character cha, ClientBasePacket packet) { try { if (cha instanceof L1PcInstance) { L1PcInstance pc = (L1PcInstance) cha; L1ItemInstance useItem = pc.getInventory().getItem(this.getId()); L1ItemInstance targetItem = pc.getInventory().getItem(packet.readD()); int targetItemId = targetItem.getItemId(); int itemId = this.getItemId(); int EndTime = 360000 * 1000; // 5일 switch (itemId) { /** * 스탯티 변환 * * <p>* */ case 89531: // 판도라의 완력꽃 향수:티[30일] switch (targetItemId) { case 20085: // 티셔츠 PandoraTransform(pc, useItem, targetItem, 22440, EndTime); // 판도라의 완력꽃향 티 break; case 20084: // 요정족 티셔츠 PandoraTransform(pc, useItem, targetItem, 22450, EndTime); // 판도라의 완력꽃향 요정족 티 break; default: pc.sendPackets(new S_ServerMessage(328)); } break; case 89532: // 판도라의 민첩꽃 향수:티[30일] switch (targetItemId) { case 20085: // 티셔츠 PandoraTransform(pc, useItem, targetItem, 22441, EndTime); // 판도라의 민첩꽃향 티 break; case 20084: // 요정족 티셔츠 PandoraTransform(pc, useItem, targetItem, 22451, EndTime); // 판도라의 민첩꽃향 요정족 티 break; default: pc.sendPackets(new S_ServerMessage(328)); } break; case 89533: // 판도라의 지식꽃 향수:티[30일] switch (targetItemId) { case 20085: // 티셔츠 PandoraTransform(pc, useItem, targetItem, 22442, EndTime); // 판도라의 지식꽃향 티 break; case 20084: // 요정족 티셔츠 PandoraTransform(pc, useItem, targetItem, 22452, EndTime); // 판도라의 지식꽃향 요정족 티 break; default: pc.sendPackets(new S_ServerMessage(328)); } break; case 89534: // 판도라의 지혜꽃 향수:티[30일] switch (targetItemId) { case 20085: // 티셔츠 PandoraTransform(pc, useItem, targetItem, 22443, EndTime); // 판도라의 지혜꽃향 티 break; case 20084: // 요정족 티셔츠 PandoraTransform(pc, useItem, targetItem, 22453, EndTime); // 판도라의 지혜꽃향 요정족 티 break; default: pc.sendPackets(new S_ServerMessage(328)); } break; case 89535: // 판도라의 체력꽃 향수:티[30일] switch (targetItemId) { case 20085: // 티셔츠 PandoraTransform(pc, useItem, targetItem, 22444, EndTime); // 판도라의 체력꽃향 티 break; case 20084: // 요정족 티셔츠 PandoraTransform(pc, useItem, targetItem, 22454, EndTime); // 판도라의 체력꽃향 요정족 티 break; default: pc.sendPackets(new S_ServerMessage(328)); } break; case 89536: // 판도라의 매력꽃 향수:티[30일] switch (targetItemId) { case 20085: // 티셔츠 PandoraTransform(pc, useItem, targetItem, 22445, EndTime); // 판도라의 매력꽃향 티 break; case 20084: // 요정족 티셔츠 PandoraTransform(pc, useItem, targetItem, 22455, EndTime); // 판도라의 매력꽃향 요정족 티 break; default: pc.sendPackets(new S_ServerMessage(328)); } break; /** * 천연 비누 * * <p>* */ case 89530: // 천연 비누:판도라 향기티 switch (targetItemId) { // 일반 티셔츠 case 22440: case 22441: case 22442: case 22443: case 22444: case 22445: Soap(pc, useItem, targetItem, 20085); break; // 요정족 티셔츠 case 22450: case 22451: case 22452: case 22453: case 22454: case 22455: Soap(pc, useItem, targetItem, 20084); break; default: pc.sendPackets(new S_ServerMessage(328)); } break; /** * 판도라의 문양:티 * * <p>* */ case 89550: // 판도라의 스턴 문양:티 PatternIn(pc, useItem, targetItem, 1); break; case 89551: // 판도라의 홀드 문양:티 PatternIn(pc, useItem, targetItem, 2); break; case 89552: // 판도라의 회복 문양:티 PatternIn(pc, useItem, targetItem, 3); break; case 89553: // 판도라의 강철 문양:티 PatternIn(pc, useItem, targetItem, 4); break; case 89554: // 판도라의 멸마 문양:티 PatternIn(pc, useItem, targetItem, 5); break; case 89555: // 판도라의 체력 문양:티 PatternIn(pc, useItem, targetItem, 6); break; case 89556: // 판도라의 마나 문양:티 PatternIn(pc, useItem, targetItem, 7); break; case 89557: // 판도라의 정령 문양:티 PatternIn(pc, useItem, targetItem, 8); break; case 89558: // 판도라의 석화 문양:티 PatternIn(pc, useItem, targetItem, 9); break; /** * 변환석 : 스탯티에서 +1 상승하여 일반 티셔츠로 변환. * * <p>* */ case 46030: // 변환석: +0 티 Transform(pc, useItem, targetItem, 0); break; case 46031: // 변환석: +1 티 Transform(pc, useItem, targetItem, 1); break; case 46032: // 변환석: +2 티 Transform(pc, useItem, targetItem, 2); break; case 46033: // 변환석: +3 티 Transform(pc, useItem, targetItem, 3); break; case 46034: // 변환석: +4 티 Transform(pc, useItem, targetItem, 4); break; case 46035: // 변환석: +5 티 Transform(pc, useItem, targetItem, 5); break; case 46036: // 변환석: +6 티 Transform(pc, useItem, targetItem, 6); break; case 46037: // 변환석: +7 티 Transform(pc, useItem, targetItem, 7); break; case 46038: // 변환석: +8 티 Transform(pc, useItem, targetItem, 8); break; case 46039: // 변환석: +9 티 Transform(pc, useItem, targetItem, 9); break; case 46040: // 변환석: +10 티 Transform(pc, useItem, targetItem, 10); break; case 46041: // 변환석: +11 티 Transform(pc, useItem, targetItem, 11); break; } } } catch (Exception e) { e.printStackTrace(); } }