Package l2p.gameserver.model.items

Examples of l2p.gameserver.model.items.PcInventory


    if(cheater)
    {
      activeChar.sendPacket(Msg.THE_SYMBOL_CANNOT_BE_DRAWN);
      return;
    }
    PcInventory inventory = activeChar.getInventory();
    L2ItemInstance item = inventory.getItemByItemId(temp.getItemIdDye());
    if(item != null && item.getCount() >= temp.getAmountDyeRequire() && activeChar.getAdena() >= temp.getPrice() && activeChar.addHenna(temp))
    {
      activeChar.sendPacket(new SystemMessage(SystemMessage.S1_HAS_DISAPPEARED).addString(temp.getName()), Msg.THE_SYMBOL_HAS_BEEN_ADDED);
      inventory.reduceAdena(temp.getPrice());
      if(inventory.destroyItemByItemId(temp.getItemIdDye(), temp.getAmountDyeRequire(), true) == null)
      {
        _log.info("RequestHennaEquip[50]: Item not found!!!");
      }
    }
    else
View Full Code Here


    {
      activeChar.sendPacket(Msg.WHILE_OPERATING_A_PRIVATE_STORE_OR_WORKSHOP_YOU_CANNOT_DISCARD_DESTROY_OR_TRADE_AN_ITEM);
      return;
    }
    Warehouse warehouse;
    PcInventory inventory = activeChar.getInventory();
    boolean privatewh = activeChar.getUsingWarehouseType() != WarehouseType.CLAN;
    int slotsleft;
    long adenaDeposit = 0;
    // Список предметов, уже находящихся на складе
    L2ItemInstance[] itemsOnWarehouse;
    if(privatewh)
    {
      warehouse = activeChar.getWarehouse();
      itemsOnWarehouse = warehouse.listItems(ItemClass.ALL);
      slotsleft = activeChar.getWarehouseLimit() - itemsOnWarehouse.length;
    }
    else
    {
      warehouse = activeChar.getClan().getWarehouse();
      itemsOnWarehouse = warehouse.listItems(ItemClass.ALL);
      slotsleft = activeChar.getClan().getWhBonus() + Config.WAREHOUSE_SLOTS_CLAN - itemsOnWarehouse.length;
    }
    // Список стекуемых предметов, уже находящихся на складе
    GArray<Integer> stackableList = new GArray<Integer>();
    for(L2ItemInstance i : itemsOnWarehouse)
    {
      if(i.isStackable())
      {
        stackableList.add(i.getItemId());
      }
    }
    // Создаем новый список передаваемых предметов, на основе полученных данных
    GArray<L2ItemInstance> itemsToStoreList = new GArray<L2ItemInstance>(_items.size() + 1);
    for(Integer itemObjectId : _items.keySet())
    {
      L2ItemInstance item = inventory.getItemByObjectId(itemObjectId);
      if(item == null || !item.canBeStored(activeChar, privatewh)) // а его вообще положить можно?
      {
        continue;
      }
      if(!item.isStackable() || !stackableList.contains(item.getItemId())) // вещь требует слота
      {
        if(slotsleft <= 0) // если слоты кончились нестекуемые вещи и отсутствующие стекуемые пропускаем
        {
          continue;
        }
        slotsleft--; // если слот есть то его уже нет
      }
      if(item.getItemId() == 57)
      {
        adenaDeposit = _items.get(itemObjectId);
      }
      itemsToStoreList.add(item);
    }
    // Проверяем, хватит ли у нас денег на уплату налога
    int fee = itemsToStoreList.size() * _WAREHOUSE_FEE;
    if(fee + adenaDeposit > activeChar.getAdena())
    {
      activeChar.sendPacket(Msg.YOU_LACK_THE_FUNDS_NEEDED_TO_PAY_FOR_THIS_TRANSACTION);
      return;
    }
    // Сообщаем о том, что слоты кончились
    if(slotsleft <= 0)
    {
      activeChar.sendPacket(Msg.YOUR_WAREHOUSE_IS_FULL);
    }
    // Перекидываем
    for(L2ItemInstance itemToStore : itemsToStoreList)
    {
      warehouse.addItem(inventory.dropItem(itemToStore, _items.get(itemToStore.getObjectId()), false), activeChar.getName());
    }
    // Платим налог
    activeChar.reduceAdena(fee, true);
    // Обновляем параметры персонажа
    activeChar.updateStats();
View Full Code Here

    {
      activeChar.sendActionFailed();
      return;
    }
    PetInventory petInventory = pet.getInventory();
    PcInventory playerInventory = activeChar.getInventory();
    L2ItemInstance petItem = petInventory.getItemByObjectId(_objectId);
    if(petItem == null)
    {
      _log.warning(activeChar.getName() + " requested item obj_id: " + _objectId + " from pet, but its not there.");
      return;
    }
    if(petItem.isEquipped())
    {
      activeChar.sendActionFailed();
      return;
    }
    long finalLoad = petItem.getItem().getWeight() * _amount;
    if(!activeChar.getInventory().validateWeight(finalLoad))
    {
      sendPacket(Msg.YOU_HAVE_EXCEEDED_THE_WEIGHT_LIMIT);
      return;
    }
    L2ItemInstance item = petInventory.dropItem(_objectId, _amount, false);
    item.setCustomFlags(item.getCustomFlags() & ~L2ItemInstance.FLAG_PET_EQUIPPED, true);
    playerInventory.addItem(item);
    pet.sendItemList();
    pet.broadcastPetInfo();
    Log.LogItem(activeChar, activeChar.getPet(), Log.GetItemFromPet, petItem);
  }
View Full Code Here

    L2Player activeChar = getClient().getActiveChar();
    if(activeChar == null)
    {
      return;
    }
    PcInventory inventory = activeChar.getInventory();
    L2ItemInstance itemToEnchant = inventory.getItemByObjectId(_itemId);
    L2ItemInstance catalyst = inventory.getItemByObjectId(_catalystId);
    if(checkCatalyst(itemToEnchant, catalyst))
    {
      activeChar.sendPacket(new ExPutEnchantSupportItemResult(1));
    }
    else
View Full Code Here

    }
  }

  private void doExchange(L2Player activeChar, MultiSellEntry entry)
  {
    PcInventory inv = activeChar.getInventory();
    int totalAdenaCost = 0;
    long tax;
    try
    {
      tax = SafeMath.safeMulLong(entry.getTax(), _amount);
    }
    catch(ArithmeticException e)
    {
      return;
    }
    L2NpcInstance merchant = activeChar.getLastNpc();
    Castle castle = merchant != null ? merchant.getCastle(activeChar) : null;
    GArray<MultiSellIngredient> productId = entry.getProduction();
    if(_keepenchant)
    {
      for(MultiSellIngredient p : productId)
      {
        _enchant = Math.max(_enchant, p.getItemEnchant());
      }
    }
    boolean logExchange = Config.LOG_MULTISELL_ID_LIST.contains(_listId);
    StringBuffer msgb = new StringBuffer();
    if(logExchange)
    {
      msgb.append("<multisell id=").append(_listId).append(" player=\"").append(activeChar.getName()).append("\" oid=").append(activeChar.getObjectId()).append(">\n");
    }
    synchronized(inv)
    {
      int slots = inv.slotsLeft();
      if(slots == 0)
      {
        activeChar.sendPacket(Msg.THE_WEIGHT_AND_VOLUME_LIMIT_OF_INVENTORY_MUST_NOT_BE_EXCEEDED);
        return;
      }
      int req = 0;
      long totalLoad = 0;
      for(MultiSellIngredient i : productId)
      {
        if(i.getItemId() <= 0)
        {
          continue;
        }
        totalLoad += ItemTable.getInstance().getTemplate(i.getItemId()).getWeight() * _amount;
        if(!ItemTable.getInstance().getTemplate(i.getItemId()).isStackable())
        {
          req += _amount;
        }
        else
        {
          req++;
        }
      }
      if(req > slots || !inv.validateWeight(totalLoad))
      {
        activeChar.sendPacket(Msg.THE_WEIGHT_AND_VOLUME_LIMIT_OF_INVENTORY_MUST_NOT_BE_EXCEEDED);
        return;
      }
      if(entry.getIngredients().size() == 0)
      {
        System.out.println("WARNING Ingredients list = 0 multisell id=:" + _listId + " player:" + activeChar.getName());
        activeChar.sendActionFailed();
        return;
      }
      L2Augmentation augmentation = null;
      // Перебор всех ингридиентов, проверка наличия и создание списка забираемого
      for(MultiSellIngredient ingridient : entry.getIngredients())
      {
        int ingridientItemId = ingridient.getItemId();
        long ingridientItemCount = ingridient.getItemCount();
        long total_amount;
        try
        {
          total_amount = SafeMath.safeMulLong(ingridientItemCount, _amount);
        }
        catch(ArithmeticException e)
        {
          activeChar.sendActionFailed();
          return;
        }
        if(ingridientItemId > 0 && !ItemTable.getInstance().getTemplate(ingridientItemId).isStackable())
        {
          for(int i = 0; i < ingridientItemCount * _amount; i++)
          {
            L2ItemInstance[] list = inv.getAllItemsById(ingridientItemId);
            // Если энчант имеет значение - то ищем вещи с точно таким энчантом
            if(_keepenchant)
            {
              L2ItemInstance itemToTake = null;
              for(L2ItemInstance itm : list)
              {
                if((itm.getEnchantLevel() == _enchant || itm.getItem().getType2() > 2) && !_items.contains(new ItemData(itm.getItemId(), itm.getCount(), itm)) && !itm.isShadowItem() && !itm.isTemporalItem() && (itm.getCustomFlags() & L2ItemInstance.FLAG_NO_TRADE) != L2ItemInstance.FLAG_NO_TRADE)
                {
                  itemToTake = itm;
                  if(itm.getAttributeElement() != L2Item.ATTRIBUTE_NONE)
                  {
                    _enchantAttr = itm.getAttributeElement();
                    _enchantAttrVal = itm.getAttributeElementValue();
                  }
                  break;
                }
              }
              if(itemToTake == null)
              {
                activeChar.sendPacket(Msg.YOU_DO_NOT_HAVE_ENOUGH_REQUIRED_ITEMS);
                return;
              }
              if(!checkItem(itemToTake, activeChar))
              {
                activeChar.sendActionFailed();
                return;
              }
              if(itemToTake.getAugmentation() != null)
              {
                augmentation = itemToTake.getAugmentation();
              }
              _items.add(new ItemData(itemToTake.getItemId(), 1, itemToTake));
            }
            // Если энчант не обрабатывается берется вещь с наименьшим энчантом
            else
            {
              L2ItemInstance itemToTake = null;
              for(L2ItemInstance itm : list)
              {
                if(!_items.contains(new ItemData(itm.getItemId(), itm.getCount(), itm)) && (itemToTake == null || itm.getEnchantLevel() < itemToTake.getEnchantLevel()) && !itm.isShadowItem() && !itm.isTemporalItem() && (itm.getCustomFlags() & L2ItemInstance.FLAG_NO_TRADE) != L2ItemInstance.FLAG_NO_TRADE && checkItem(itm, activeChar))
                {
                  itemToTake = itm;
                  if(itemToTake.getEnchantLevel() == 0)
                  {
                    break;
                  }
                }
              }
              if(itemToTake == null)
              {
                activeChar.sendPacket(Msg.YOU_DO_NOT_HAVE_ENOUGH_REQUIRED_ITEMS);
                return;
              }
              if(itemToTake.getAugmentation() != null)
              {
                augmentation = itemToTake.getAugmentation();
              }
              _items.add(new ItemData(itemToTake.getItemId(), 1, itemToTake));
            }
          }
        }
        else if(ingridientItemId == L2Item.ITEM_ID_CLAN_REPUTATION_SCORE)
        {
          if(activeChar.getClan() == null)
          {
            activeChar.sendPacket(Msg.YOU_ARE_NOT_A_CLAN_MEMBER);
            return;
          }
          if(activeChar.getClan().getReputationScore() < total_amount)
          {
            activeChar.sendPacket(Msg.THE_CLAN_REPUTATION_SCORE_IS_TOO_LOW);
            return;
          }
          if(activeChar.getClan().getLeaderId() != activeChar.getObjectId())
          {
            activeChar.sendPacket(new SystemMessage(SystemMessage.S1_IS_NOT_A_CLAN_LEADER).addString(activeChar.getName()));
            return;
          }
          _items.add(new ItemData(ingridientItemId, total_amount, null));
        }
        else if(ingridientItemId == L2Item.ITEM_ID_PC_BANG_POINTS)
        {
          if(activeChar.getPcBangPoints() < total_amount)
          {
            activeChar.sendPacket(Msg.YOU_ARE_SHORT_OF_ACCUMULATED_POINTS);
            return;
          }
          _items.add(new ItemData(ingridientItemId, total_amount, null));
        }
        else if(ingridientItemId == L2Item.ITEM_ID_FAME)
        {
          if(activeChar.getFame() < total_amount)
          {
            activeChar.sendPacket(Msg.NOT_ENOUGH_FAME_POINTS);
            return;
          }
          _items.add(new ItemData(ingridientItemId, total_amount, null));
        }
        else
        {
          if(ingridientItemId == 57)
          {
            totalAdenaCost += ingridientItemCount * _amount;
          }
          L2ItemInstance item = inv.getItemByItemId(ingridientItemId);
          if(item == null || item.getCount() < total_amount)
          {
            activeChar.sendPacket(Msg.YOU_DO_NOT_HAVE_ENOUGH_REQUIRED_ITEMS);
            return;
          }
          _items.add(new ItemData(item.getItemId(), total_amount, item));
        }
        if(activeChar.getAdena() < totalAdenaCost)
        {
          activeChar.sendPacket(Msg.YOU_DO_NOT_HAVE_ENOUGH_ADENA);
          return;
        }
      }
      for(ItemData id : _items)
      {
        long count = id.getCount();
        if(count > 0)
        {
          L2ItemInstance item = id.getItem();
          if(item != null)
          {
            activeChar.sendPacket(SystemMessage.removeItems(item.getItemId(), count));
            if(logExchange)
            {
              msgb.append("\t<destroy id=").append(item.getItemId()).append(" oid=").append(item.getObjectId()).append(" count=").append(count).append(">\n");
            }
            if(item.isEquipped())
            {
              inv.unEquipItemInSlot(item.getEquipSlot());
            }
            inv.destroyItem(item, count, true);
          }
          else if(id.getId() == L2Item.ITEM_ID_CLAN_REPUTATION_SCORE)
          {
            activeChar.getClan().incReputation((int) -count, false, "MultiSell" + _listId);
            activeChar.sendPacket(new SystemMessage(SystemMessage.S1_POINTS_HAVE_BEEN_DEDUCTED_FROM_THE_CLAN_REPUTATION_SCORE).addNumber(count));
          }
          else if(id.getId() == L2Item.ITEM_ID_PC_BANG_POINTS)
          {
            activeChar.setPcBangPoints(activeChar.getPcBangPoints() - (int) count);
            activeChar.sendPacket(new SystemMessage(SystemMessage.YOU_ARE_USING_S1_POINT).addNumber(count), new ExPCCafePointInfo(activeChar));
          }
          else if(id.getId() == L2Item.ITEM_ID_FAME)
          {
            activeChar.setFame(activeChar.getFame() - (int) count, "MultiSell" + _listId);
            activeChar.sendPacket(new SystemMessage(SystemMessage.S2_S1_HAS_DISAPPEARED).addNumber(count).addString("Fame"));
          }
        }
      }
      if(tax > 0 && !_notax)
      {
        if(castle != null)
        {
          activeChar.sendMessage("Tax: " + tax);
          if(merchant != null && merchant.getReflection().getId() == 0)
          {
            castle.addToTreasury(tax, true, false);
            Log.add(castle.getName() + "|" + tax + "|Multisell", "treasury");
          }
        }
      }
      for(MultiSellIngredient in : productId)
      {
        if(in.getItemId() <= 0)
        {
          if(in.getItemId() == L2Item.ITEM_ID_CLAN_REPUTATION_SCORE)
          {
            activeChar.getClan().incReputation((int) (in.getItemCount() * _amount), false, "MultiSell" + _listId);
            activeChar.sendPacket(new SystemMessage(SystemMessage.YOUR_CLAN_HAS_ADDED_1S_POINTS_TO_ITS_CLAN_REPUTATION_SCORE).addNumber(in.getItemCount() * _amount));
          }
          else if(in.getItemId() == L2Item.ITEM_ID_PC_BANG_POINTS)
          {
            activeChar.setPcBangPoints(activeChar.getPcBangPoints() + (int) (in.getItemCount() * _amount));
            activeChar.sendPacket(new SystemMessage(SystemMessage.YOU_ACQUIRED_S1_PC_BANG_POINT).addNumber(in.getItemCount() * _amount), new ExPCCafePointInfo(activeChar));
          }
          else if(in.getItemId() == L2Item.ITEM_ID_FAME)
          {
            activeChar.setFame(activeChar.getFame() + (int) (in.getItemCount() * _amount), "MultiSell" + _listId);
          }
        }
        else if(ItemTable.getInstance().getTemplate(in.getItemId()).isStackable())
        {
          L2ItemInstance product = ItemTable.getInstance().createItem(in.getItemId());
          double total = in.getItemCount() * _amount;
          if(total < 0 || total > Long.MAX_VALUE)
          {
            activeChar.sendActionFailed();
            return;
          }
          product.setCount((long) total);
          activeChar.sendPacket(SystemMessage.obtainItems(product));
          if(logExchange)
          {
            msgb.append("\t<add id=").append(product.getItemId()).append(" count=").append(product.getCount()).append(">\n");
          }
          inv.addItem(product);
        }
        else
        {
          for(int i = 0; i < _amount; i++)
          {
            L2ItemInstance product = inv.addItem(ItemTable.getInstance().createItem(in.getItemId()));
            if(_keepenchant)
            {
              product.setEnchantLevel(_enchant);
              if(_enchantAttr != L2Item.ATTRIBUTE_NONE)
              {
View Full Code Here

    if(activeChar.isOutOfControl() || activeChar.isActionsDisabled())
    {
      activeChar.sendPacket(new ExPutEnchantTargetItemResult(0, 0, 0));
      return;
    }
    PcInventory inventory = activeChar.getInventory();
    L2ItemInstance itemToEnchant = inventory.getItemByObjectId(_objectId);
    L2ItemInstance scroll = activeChar.getEnchantScroll();
    if(itemToEnchant == null || scroll == null)
    {
      activeChar.sendPacket(new ExPutEnchantTargetItemResult(0, 0, 0));
      return;
    }
    // С помощью Master Yogi's Scroll: Enchant Weapon можно точить только Staff of Master Yogi
    if(scroll.getItemId() == 13540 && itemToEnchant.getItemId() != 13539 || itemToEnchant.getItemId() == 13539 && scroll.getItemId() != 13540)
    {
      activeChar.sendActionFailed();
      activeChar.sendPacket(Msg.INAPPROPRIATE_ENCHANT_CONDITIONS);
      return;
    }
    Log.add(activeChar.getName() + "|Trying to put enchant|" + itemToEnchant.getItemId() + "|+" + itemToEnchant.getEnchantLevel() + "|" + itemToEnchant.getObjectId(), "enchants");
    // Затычка, разрешающая точить Staff of Master Yogi
    if(!itemToEnchant.canBeEnchanted() && itemToEnchant.getItemId() != 13539 && !(itemToEnchant.getItem().isCloak() && Config.ALLOW_ENCHANT_CLOAKS) || itemToEnchant.isStackable())
    {
      activeChar.sendActionFailed();
      activeChar.sendPacket(Msg.DOES_NOT_FIT_STRENGTHENING_CONDITIONS_OF_THE_SCROLL);
      return;
    }
    if(itemToEnchant.getLocation() != L2ItemInstance.ItemLocation.INVENTORY && itemToEnchant.getLocation() != L2ItemInstance.ItemLocation.PAPERDOLL)
    {
      activeChar.sendActionFailed();
      activeChar.sendPacket(Msg.INAPPROPRIATE_ENCHANT_CONDITIONS);
      return;
    }
    if(activeChar.getPrivateStoreType() != L2Player.STORE_PRIVATE_NONE)
    {
      activeChar.sendPacket(new ExPutEnchantTargetItemResult(0, 0, 0));
      activeChar.sendPacket(Msg.YOU_CANNOT_PRACTICE_ENCHANTING_WHILE_OPERATING_A_PRIVATE_STORE_OR_PRIVATE_MANUFACTURING_WORKSHOP);
      return;
    }
    if((scroll = inventory.getItemByObjectId(scroll.getObjectId())) == null)
    {
      activeChar.setEnchantScroll(null);
      activeChar.sendPacket(new ExPutEnchantTargetItemResult(0, 0, 0));
      return;
    }
View Full Code Here

    }
    if(!FloodProtector.tryPerformAction(activeChar, Action.ENCHANT_ITEM))
    {
      return;
    }
    PcInventory inventory = activeChar.getInventory();
    L2ItemInstance itemToEnchant = inventory.getItemByObjectId(_objectId);
    L2ItemInstance catalyst = _catalystObjId > 0 ? inventory.getItemByObjectId(_catalystObjId) : null;
    L2ItemInstance scroll = activeChar.getEnchantScroll();
    activeChar.setEnchantScroll(null);
    if(itemToEnchant == null || scroll == null)
    {
      activeChar.sendActionFailed();
      return;
    }
    // Затычка, ибо клиент криво обрабатывает RequestExTryToPutEnchantSupportItem
    if(!RequestExTryToPutEnchantSupportItem.checkCatalyst(itemToEnchant, catalyst))
    {
      catalyst = null;
    }
    // С помощью Master Yogi's Scroll: Enchant Weapon можно точить только Staff of Master Yogi
    if(scroll.getItemId() == 13540 && itemToEnchant.getItemId() != 13539 || itemToEnchant.getItemId() == 13539 && scroll.getItemId() != 13540)
    {
      activeChar.sendPacket(EnchantResult.CANCEL);
      activeChar.sendPacket(Msg.INAPPROPRIATE_ENCHANT_CONDITIONS);
      activeChar.sendActionFailed();
      return;
    }
    Log.add(activeChar.getName() + "|Trying to enchant|" + itemToEnchant.getItemId() + "|+" + itemToEnchant.getEnchantLevel() + "|" + itemToEnchant.getObjectId(), "enchants");
    // Затычка, разрешающая точить Staff of Master Yogi
    if(!itemToEnchant.canBeEnchanted() && !isYogiStaffEnchanting(scroll, itemToEnchant) && !(itemToEnchant.getItem().isCloak() && Config.ALLOW_ENCHANT_CLOAKS))
    {
      activeChar.sendPacket(EnchantResult.CANCEL);
      activeChar.sendPacket(Msg.INAPPROPRIATE_ENCHANT_CONDITIONS);
      activeChar.sendActionFailed();
      return;
    }
    if(itemToEnchant.getLocation() != L2ItemInstance.ItemLocation.INVENTORY && itemToEnchant.getLocation() != L2ItemInstance.ItemLocation.PAPERDOLL)
    {
      activeChar.sendPacket(EnchantResult.CANCEL);
      activeChar.sendPacket(Msg.INAPPROPRIATE_ENCHANT_CONDITIONS);
      activeChar.sendActionFailed();
      return;
    }
    if(activeChar.getPrivateStoreType() != L2Player.STORE_PRIVATE_NONE)
    {
      activeChar.sendPacket(EnchantResult.CANCEL);
      activeChar.sendPacket(Msg.YOU_CANNOT_PRACTICE_ENCHANTING_WHILE_OPERATING_A_PRIVATE_STORE_OR_PRIVATE_MANUFACTURING_WORKSHOP);
      activeChar.sendActionFailed();
      return;
    }
    if(itemToEnchant.isStackable() || (scroll = inventory.getItemByObjectId(scroll.getObjectId())) == null)
    {
      activeChar.sendPacket(EnchantResult.CANCEL);
      activeChar.sendActionFailed();
      return;
    }
    int crystalId = itemToEnchant.getEnchantCrystalId(scroll, catalyst);
    // Затычка, разрешающая точить Staff of Master Yogi
    if(crystalId == 0 && !isYogiStaffEnchanting(scroll, itemToEnchant))
    {
      activeChar.sendPacket(EnchantResult.CANCEL);
      activeChar.sendPacket(Msg.INAPPROPRIATE_ENCHANT_CONDITIONS);
      activeChar.sendActionFailed();
      return;
    }
    // Staff of Master Yogi можно точить до 23
    if(!isYogiStaffEnchanting(scroll, itemToEnchant) && itemToEnchant.getEnchantLevel() >= getMaxEnchant(itemToEnchant) || isYogiStaffEnchanting(scroll, itemToEnchant) && itemToEnchant.getEnchantLevel() >= 23)
    {
      activeChar.sendPacket(EnchantResult.CANCEL);
      activeChar.sendMessage(new CustomMessage("l2p.gameserver.clientpackets.RequestEnchantItem.MaxLevel", activeChar));
      activeChar.sendActionFailed();
      return;
    }
    // Запрет на заточку чужих вещей, баг может вылезти на серверных лагах
    if(itemToEnchant.getOwnerId() != activeChar.getObjectId())
    {
      activeChar.sendPacket(EnchantResult.CANCEL);
      activeChar.sendPacket(Msg.INAPPROPRIATE_ENCHANT_CONDITIONS);
      activeChar.sendActionFailed();
      return;
    }
    L2ItemInstance removedScroll, removedCatalyst = null;
    synchronized(inventory)
    {
      removedScroll = inventory.destroyItem(scroll.getObjectId(), 1, true);
      if(catalyst != null)
      {
        removedCatalyst = inventory.destroyItem(catalyst.getObjectId(), 1, true);
      }
    }
    //tries enchant without scrolls
    if(removedScroll == null || catalyst != null && removedCatalyst == null)
    {
      activeChar.sendPacket(EnchantResult.CANCEL);
      activeChar.sendActionFailed();
      return;
    }
    int itemType = itemToEnchant.getItem().getType2();
    int safeEnchantLevel = itemToEnchant.getItem().getBodyPart() == L2Item.SLOT_FULL_ARMOR ? Config.SAFE_ENCHANT_FULL_BODY : Config.SAFE_ENCHANT_COMMON;
    int enchantlevel = itemToEnchant.getEnchantLevel();
    double chance;
    if(itemToEnchant.getEnchantLevel() < safeEnchantLevel)
    {
      chance = 100;
    }
    else if(itemType == L2Item.TYPE2_WEAPON)
    {
    if (Config.USE_ALT_ENCHANT)
      {
      if (removedScroll.isCrystallEnchantScroll())
        chance = enchantlevel > Config.ENCHANT_WEAPON_FIGHT_CRYSTAL.size() ? Config.ENCHANT_WEAPON_FIGHT_CRYSTAL.get(Config.ENCHANT_WEAPON_FIGHT_CRYSTAL.size()-1) : Config.ENCHANT_WEAPON_FIGHT_CRYSTAL.get(enchantlevel);
      else if (removedScroll.isBlessedEnchantScroll())
        chance = enchantlevel > Config.ENCHANT_WEAPON_FIGHT_BLESSED.size() ? Config.ENCHANT_WEAPON_FIGHT_BLESSED.get(Config.ENCHANT_WEAPON_FIGHT_BLESSED.size()-1) : Config.ENCHANT_WEAPON_FIGHT_BLESSED.get(enchantlevel);
      else
        chance = enchantlevel > Config.ENCHANT_WEAPON_FIGHT.size() ? Config.ENCHANT_WEAPON_FIGHT.get(Config.ENCHANT_WEAPON_FIGHT.size()-1) : Config.ENCHANT_WEAPON_FIGHT.get(enchantlevel);
      }
      else
      chance = removedScroll.isCrystallEnchantScroll() ? Config.ENCHANT_CHANCE_CRYSTAL_WEAPON :removedScroll.isBlessedEnchantScroll() ? Config.ENCHANT_CHANCE_BLESSED_WEAPON : Config.ENCHANT_CHANCE_WEAPON;
    }
    else if(itemType == L2Item.TYPE2_SHIELD_ARMOR)
    {
      if (Config.USE_ALT_ENCHANT)
      {
      if (removedScroll.isCrystallEnchantScroll())
        chance = enchantlevel > Config.ENCHANT_ARMOR_CRYSTAL.size() ? Config.ENCHANT_ARMOR_CRYSTAL.get(Config.ENCHANT_ARMOR_CRYSTAL.size()-1) : Config.ENCHANT_ARMOR_CRYSTAL.get(enchantlevel);
      else if (removedScroll.isBlessedEnchantScroll())
        chance = enchantlevel > Config.ENCHANT_ARMOR_BLESSED.size() ? Config.ENCHANT_ARMOR_BLESSED.get(Config.ENCHANT_ARMOR_BLESSED.size()-1) : Config.ENCHANT_ARMOR_BLESSED.get(enchantlevel);
      else
        chance = enchantlevel > Config.ENCHANT_ARMOR.size() ? Config.ENCHANT_ARMOR.get(Config.ENCHANT_ARMOR.size()-1) : Config.ENCHANT_ARMOR.get(enchantlevel);
      }
      else
      chance = removedScroll.isCrystallEnchantScroll() ? Config.ENCHANT_CHANCE_CRYSTAL_ARMOR : removedScroll.isBlessedEnchantScroll() ? Config.ENCHANT_CHANCE_BLESSED_ARMOR : Config.ENCHANT_CHANCE_ARMOR;
    }
    else if(itemType == L2Item.TYPE2_ACCESSORY)
    {
      if (Config.USE_ALT_ENCHANT)
      {
      if (removedScroll.isCrystallEnchantScroll())
        chance = enchantlevel > Config.ENCHANT_ARMOR_JEWELRY_CRYSTAL.size() ? Config.ENCHANT_ARMOR_JEWELRY_CRYSTAL.get(Config.ENCHANT_ARMOR_JEWELRY_CRYSTAL.size()-1) : Config.ENCHANT_ARMOR_JEWELRY_CRYSTAL.get(enchantlevel);
      else if (removedScroll.isBlessedEnchantScroll())
        chance = enchantlevel > Config.ENCHANT_ARMOR_JEWELRY_BLESSED.size() ? Config.ENCHANT_ARMOR_JEWELRY_BLESSED.get(Config.ENCHANT_ARMOR_JEWELRY_BLESSED.size()-1) : Config.ENCHANT_ARMOR_JEWELRY_BLESSED.get(enchantlevel);
      else
        chance = enchantlevel > Config.ENCHANT_ARMOR_JEWELRY.size() ? Config.ENCHANT_ARMOR_JEWELRY.get(Config.ENCHANT_ARMOR_JEWELRY.size()-1) : Config.ENCHANT_ARMOR_JEWELRY.get(enchantlevel);
      }
      else
      chance = removedScroll.isCrystallEnchantScroll() ? Config.ENCHANT_CHANCE_CRYSTAL_ACCESSORY : removedScroll.isBlessedEnchantScroll() ? Config.ENCHANT_CHANCE_BLESSED_ACCESSORY : Config.ENCHANT_CHANCE_ACCESSORY;
    }
    else
    {
      System.out.println("WTF? Request to enchant " + itemToEnchant.getItemId());
      activeChar.sendPacket(EnchantResult.CANCEL);
      activeChar.sendActionFailed();
      activeChar.sendPacket(Msg.SYSTEM_ERROR);
      inventory.addItem(removedScroll);
      return;
    }
    if(scroll.isDivineEnchantScroll()) // Item Mall divine
    {
      chance = 100;
    }
    else if(scroll.isItemMallEnchantScroll()) // Item Mall normal/ancient
    {
      chance += 10;
    }
    if(removedCatalyst != null)
    {
      chance += removedCatalyst.getCatalystPower();
    }
    if (Config.ALT_ENCHANT_FOR_PVP)
    {
            int enchlvl = itemToEnchant.getEnchantLevel();
            L2Item.Grade crystaltype = itemToEnchant.getItem().getCrystalType();

            //для уровнения шансов дуальщиков и остальных на победу в PvP вставка SA в дули халявная
            if (itemType == L2Item.TYPE2_WEAPON && itemToEnchant.getItemType() == L2Weapon.WeaponType.DUAL)
                safeEnchantLevel += 1;

            if (enchlvl < safeEnchantLevel)
                chance = 100;
            else if (enchlvl > 11)
                chance = 1;
            else {
                // Выборка базового шанса
                if (itemType == L2Item.TYPE2_WEAPON) {
                    L2Weapon wepToEnchant = (L2Weapon) itemToEnchant.getItem();
                    boolean magewep = itemType == L2Item.TYPE2_WEAPON && crystaltype.cry >= L2Item.CRYSTAL_C && wepToEnchant.getPDamage() - wepToEnchant.getMDamage() <= wepToEnchant.getPDamage() * 0.4;
                    chance = !magewep ? Config.ENCHANT_CHANCE_WEAPON_PVP : Config.ENCHANT_CHANCE_MAGE_WEAPON_PVP;

                    // Штраф на двуручное оружие(немагическое)
                    if (itemToEnchant.getItem().getBodyPart() == L2Item.SLOT_LR_HAND && itemToEnchant.getItem().getItemType() == L2Weapon.WeaponType.BLUNT && !magewep)
                        chance -= Config.ENCHANT_PENALTY_FOR_BLUNT;
                } else
                    chance = Config.ENCHANT_CHANCE_ARMOR_PVP;

                int DeltaChance = 15;

                // Основная прогрессия
                for (int i = safeEnchantLevel; i < enchlvl; i++) {
                    if (i == safeEnchantLevel + 2)
                        DeltaChance -= 5;
                    if (i == safeEnchantLevel + 6)
                        DeltaChance -= 5;
                    chance -= DeltaChance;
                }

                // Учёт грейда
                int Delta2 = 5;
                for (int in = 0x00; in < crystaltype.ordinal(); in++) {
                    if (in == L2Item.CRYSTAL_C)
                        Delta2 -= 5;
                    if (in == L2Item.CRYSTAL_B)
                        Delta2 -= 5;
                    if (in == L2Item.CRYSTAL_A)
                        Delta2 -= 2;
                    if (in == L2Item.CRYSTAL_S)
                        Delta2 -= 1;
                }
                chance += Delta2;

                if (scroll.isBlessedEnchantScroll())
                    chance += 2;
                if (chance < 1)
                    chance = 1;
            }
        }
    if(Rnd.chance(chance))
    {
      itemToEnchant.setEnchantLevel(itemToEnchant.getEnchantLevel() + 1);
      itemToEnchant.updateDatabase();
      activeChar.sendPacket(new InventoryUpdate().addModifiedItem(itemToEnchant));
      Log.add(activeChar.getName() + "|Successfully enchanted|" + itemToEnchant.getItemId() + "|to+" + itemToEnchant.getEnchantLevel() + "|" + chance, "enchants");
      Log.LogItem(activeChar, Log.EnchantItem, itemToEnchant);
      activeChar.sendPacket(EnchantResult.SUCESS);
      if(Config.EnableFireworksEnhant && itemToEnchant.getEnchantLevel() >= (itemType == L2Item.TYPE2_WEAPON ? Config.FireworksEnhantWeapon : Config.FireworksEnhantArmor))
      {
        activeChar.altUseSkill(SkillTable.getInstance().getInfo(21006, 1), activeChar);
        activeChar.broadcastPacket(new SystemMessage(SystemMessage.C1_HAS_SUCCESSFULY_ENCHANTED_A__S2_S3).addName(activeChar).addNumber(itemToEnchant.getEnchantLevel()).addItemName(itemToEnchant.getItemId()));
      }
    }
    else
    {
      Log.add(activeChar.getName() + "|Failed to enchant|" + itemToEnchant.getItemId() + "|+" + itemToEnchant.getEnchantLevel() + "|" + chance, "enchants");
      if(scroll.isBlessedEnchantScroll()) // фейл, но заточка блесед
      {
        itemToEnchant.setEnchantLevel(Config.EnchantFail);
        activeChar.sendPacket(new InventoryUpdate().addModifiedItem(itemToEnchant));
        activeChar.sendPacket(Msg.FAILED_IN_BLESSED_ENCHANT_THE_ENCHANT_VALUE_OF_THE_ITEM_BECAME_0);
        activeChar.sendPacket(EnchantResult.BLESSED_FAILED);
      }
      else if(scroll.isAncientEnchantScroll()) // фейл, но заточка ancient
      {
        activeChar.sendPacket(EnchantResult.ANCIENT_FAILED);
      }
      else
      // фейл, разбиваем вещь
      {
        if(itemToEnchant.isEquipped())
        {
          inventory.unEquipItemInSlot(itemToEnchant.getEquipSlot());
        }
        L2ItemInstance destroyedItem = inventory.destroyItem(itemToEnchant.getObjectId(), 1, true);
        if(destroyedItem == null)
        {
          _log.warning("failed to destroy " + itemToEnchant.getObjectId() + " after unsuccessful enchant attempt by char " + activeChar.getName());
          activeChar.sendActionFailed();
          return;
        }
        Log.LogItem(activeChar, Log.EnchantItemFail, itemToEnchant);
        if(crystalId > 0)
        {
          L2ItemInstance crystalsToAdd = ItemTable.getInstance().createItem(crystalId);
          int count = (int) (itemToEnchant.getItem().getCrystalCount() * 0.87);
          if(destroyedItem.getEnchantLevel() > 3)
          {
            count += itemToEnchant.getItem().getCrystalCount() * 0.25 * (destroyedItem.getEnchantLevel() - 3);
          }
          if(count < 1)
          {
            count = 1;
          }
          crystalsToAdd.setCount(count);
          inventory.addItem(crystalsToAdd);
          Log.LogItem(activeChar, Log.Sys_GetItem, crystalsToAdd);
          activeChar.sendPacket(new EnchantResult(1, crystalsToAdd.getItemId(), count), SystemMessage.obtainItems(crystalId, count, 0));
        }
        else
        {
View Full Code Here

    {
      activeChar.sendActionFailed();
      return;
    }
    PetInventory petInventory = pet.getInventory();
    PcInventory playerInventory = activeChar.getInventory();
    L2ItemInstance playerItem = playerInventory.getItemByObjectId(_objectId);
    if(playerItem == null || playerItem.getObjectId() == pet.getControlItemObjId() || PetDataTable.isPetControlItem(playerItem))
    {
      activeChar.sendActionFailed();
      return;
    }
    if(pet.getInventory().getTotalWeight() + playerItem.getItem().getWeight() * _amount >= pet.getMaxLoad())
    {
      activeChar.sendPacket(Msg.EXCEEDED_PET_INVENTORYS_WEIGHT_LIMIT);
      return;
    }
    if(!playerItem.canBeDropped(activeChar, false))
    {
      activeChar.sendActionFailed();
      return;
    }
    if(_amount >= playerItem.getCount())
    {
      playerInventory.dropItem(_objectId, playerItem.getCount(), false);
      playerItem.setCustomFlags(playerItem.getCustomFlags() | L2ItemInstance.FLAG_PET_EQUIPPED, true);
      petInventory.addItem(playerItem);
    }
    else
    {
      L2ItemInstance newPetItem = playerInventory.dropItem(_objectId, _amount, false);
      petInventory.addItem(newPetItem);
    }
    pet.sendItemList();
    pet.broadcastPetInfo();
    Log.LogItem(activeChar, pet, Log.GiveItemToPet, playerItem);
View Full Code Here

    if(player == null)
    {
      return 0;
    }
    final int player_id = player.getObjectId();
    final PcInventory inv = player.getInventory();
    if(inv == null)
    {
      return 0;
    }
    ThreadConnection con = null;
    FiltredPreparedStatement st = null, st_delete = null;
    ResultSet rset = null;
    int restored_counter = 0;
    synchronized(_lock)
    {
      try
      {
        con = L2DatabaseFactory.getInstance().getConnection();
        st = con.prepareStatement("SELECT * FROM items_delayed WHERE owner_id=? AND payment_status=0");
        st.setInt(1, player_id);
        rset = st.executeQuery();
        L2ItemInstance item, newItem;
        st_delete = con.prepareStatement("UPDATE items_delayed SET payment_status=1 WHERE payment_id=?");
        while(rset.next())
        {
          final int ITEM_ID = rset.getShort("item_id");
          final long ITEM_COUNT = rset.getLong("count");
          final short ITEM_ENCHANT = rset.getShort("enchant_level");
          final int PAYMENT_ID = rset.getInt("payment_id");
          final int FLAGS = rset.getInt("flags");
          final byte ATTRIBUTE = rset.getByte("attribute");
          final int ATTRIBUTE_LEVEL = rset.getInt("attribute_level");
          boolean stackable = ItemTable.getInstance().getTemplate(ITEM_ID).isStackable();
          boolean success = false;
          for(int i = 0; i < (stackable ? 1 : ITEM_COUNT); i++)
          {
            item = ItemTable.getInstance().createItem(ITEM_ID);
            if(item.isStackable())
            {
              item.setCount(ITEM_COUNT);
            }
            else
            {
              item.setEnchantLevel(ITEM_ENCHANT);
              item.setAttributeElement(ATTRIBUTE, ATTRIBUTE_LEVEL, true);
            }
            item.setLocation(ItemLocation.INVENTORY);
            item.setCustomFlags(FLAGS, false);
            // При нулевом количестве выдача предмета не производится
            if(ITEM_COUNT > 0)
            {
              newItem = inv.addItem(item);
              if(newItem == null)
              {
                _log.warning("Unable to delayed create item " + ITEM_ID + " request " + PAYMENT_ID);
                continue;
              }
View Full Code Here

    if(activeChar.isOutOfControl() || activeChar.isActionsDisabled())
    {
      activeChar.sendActionFailed();
      return;
    }
    PcInventory inventory = activeChar.getInventory();
    L2ItemInstance itemToUnnchant = inventory.getItemByObjectId(_objectId);
    if(itemToUnnchant == null || itemToUnnchant.getAttributeElementValue() == 0 || activeChar.getPrivateStoreType() != L2Player.STORE_PRIVATE_NONE)
    {
      activeChar.sendActionFailed();
      return;
    }
View Full Code Here

TOP

Related Classes of l2p.gameserver.model.items.PcInventory

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.