Autor Tema: Pedir un item al usar un ExtractableItem  (Leído 41 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado lordofcaos

  • No Grade
  • *
  • Topic Author
  • Mensajes: 9
  • mx
  • Agradecimientos: 0
    • l2 king of kings
  • Cronica: : H5
  • Revision: 20190616
  • S.O: Windows 10
  • Serverpack : l2jdevs
Pedir un item al usar un ExtractableItem
« en: Junio 14, 2019, 01:09:01 pm »
gracias
Este post tiene 0 agradecimientos
  • Añade a tus favoritos
    Buenas tardes comunidad una consulta alguno sabrá como hacerle porque le eh buscado muchas formas pero no logro hacer que un articulo por ejemplo una caja x pida una llave para que de x articulo alguno tendrá de casualidad algunas lineas para que esto sea posible a continuación les dejare un ejemplo de a cual caja quisiera ponerle que se tenga que usar una llave para poder abrirla.

    EN SIMPLES PALABRAS QUIERO QUE PARA PODER UTILIZAR UNA CAJA SEA NECESARIO UTILIZAR UN ITEM X.
     
    Les dejare un código en el que eh estado trabajando con un amigo el único detalle es que abre la caja pero no me consume el ítem :14:

    haber si me pueden dar una mano?
    les dejo el código que se coloco en  ExtractableItems.java

    Código: [Seleccionar]
    if (activeChar.getInventory().getInventoryItemCount(20189, -1, false) < 1)
            {
                if (!activeChar.destroyItemByItemId("Items", 57, 1, activeChar, true))
                {
                    return false;
                }
            }


    y aqui les dejo el codigo java completo

    Código: [Seleccionar]
    /*
     * Copyright © 2004-2019 L2JDevs
     *
     * This file is part of L2JDevs.
     *
     * L2JDevs is free software: you can redistribute it and/or modify
     * it under the terms of the GNU General Public License as published by
     * the Free Software Foundation, either version 3 of the License, or
     * (at your option) any later version.
     *
     * L2JDevs is distributed in the hope that it will be useful,
     * but WITHOUT ANY WARRANTY; without even the implied warranty of
     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
     * General Public License for more details.
     *
     * You should have received a copy of the GNU General Public License
     * along with this program. If not, see <http://www.gnu.org/licenses/>.
     */
    package handlers.itemhandlers;

    import java.util.List;

    import org.l2jdevs.Config;
    import org.l2jdevs.gameserver.handler.IItemHandler;
    import org.l2jdevs.gameserver.model.L2ExtractableProduct;
    import org.l2jdevs.gameserver.model.actor.L2Playable;
    import org.l2jdevs.gameserver.model.actor.instance.L2PcInstance;
    import org.l2jdevs.gameserver.model.items.L2EtcItem;
    import org.l2jdevs.gameserver.model.items.instance.L2ItemInstance;
    import org.l2jdevs.gameserver.network.SystemMessageId;
    import org.l2jdevs.util.Rnd;

    /**
     * Extractable Items handler.
     * @author HorridoJoho
     */
    public class ExtractableItems implements IItemHandler
    {
        @Override
        public boolean useItem(L2Playable playable, L2ItemInstance item, boolean forceUse)
        {
            if (!playable.isPlayer())
            {
                playable.sendPacket(SystemMessageId.ITEM_NOT_FOR_PETS);
                return false;
            }
           
            final L2PcInstance activeChar = playable.getActingPlayer();
            final L2EtcItem etcitem = (L2EtcItem) item.getItem();
            final List<L2ExtractableProduct> exitem = etcitem.getExtractableItems();
            if (exitem == null)
            {
                _log.info("No extractable data defined for " + etcitem);
                return false;
            }
           
            if (activeChar.getInventory().getInventoryItemCount(20189, -1, false) < 1)
            {
                if (!activeChar.destroyItemByItemId("Quest", 57, 1, activeChar, true))
                {
                    return false;
                }
            }
            else
            {
                if (!activeChar.destroyItem("Extract", item.getObjectId(), 1, activeChar, true))
                {
                    return false;
                }
            }
           
            boolean created = false;
            for (L2ExtractableProduct expi : exitem)
            {
                if (Rnd.get(100000) <= expi.getChance())
                {
                    final int min = (int) (expi.getMin() * Config.RATE_EXTRACTABLE);
                    final int max = (int) (expi.getMax() * Config.RATE_EXTRACTABLE);
                   
                    int createItemAmount = (max == min) ? min : (Rnd.get((max - min) + 1) + min);
                    if (createItemAmount == 0)
                    {
                        continue;
                    }
                   
                    if (item.isStackable() || (createItemAmount == 1))
                    {
                        activeChar.addItem("Extract", expi.getId(), createItemAmount, activeChar, true);
                    }
                    else
                    {
                        while (createItemAmount > 0)
                        {
                            activeChar.addItem("Extract", expi.getId(), 1, activeChar, true);
                            createItemAmount--;
                        }
                    }
                    created = true;
                }
            }
           
            if (!created)
            {
                activeChar.sendPacket(SystemMessageId.NOTHING_INSIDE_THAT);
            }
            return true;
        }
    }
    « Última modificación: Junio 15, 2019, 05:54:38 pm por lordofcaos »

    Conectado ReynalDev

    • Administrator
    • *
    • Mensajes: 4838
    • mx
    • Agradecimientos: 1690
    • I took a pill in Ibiza
      • ReynalDev
    • Cronica: : Interlude, C4
    • Revision: 1132, FREE,582
    • S.O: Linux CentOS
    • Serverpack : Frozen,aCis,Lisvus
    Re:Pedir un item al usar un ExtractableItem
    « Respuesta #1 en: Junio 14, 2019, 02:53:25 pm »
    gracias
    Este post tiene 0 agradecimientos
  • Añade a tus favoritos
  • Borra esto:

    Código: [Seleccionar]
            if (activeChar.getInventory().getInventoryItemCount(20189, -1, false) < 1)
            {
                if (!activeChar.destroyItemByItemId("Items", 57, 1, activeChar, true))
                {
                    return false;
                }
            }


    Ahora agrega los cambios, te dejaré las lineas de referencia:


    Código: [Seleccionar]
                   >>>>>>>>>>> REFERENCIA final L2PcInstance activeChar = playable.getActingPlayer();

    if(activeChar.getInventory().getInventoryItemCount(itemId, -1) < 1)
    {
    activeChar.sendMessage("Necesitas TANTOS NOMBRE ITEM para abrir esta caja");
    return false;
    }

                  >>>>>>>>>>> REFERENCIA final L2EtcItem etcitem = (L2EtcItem) item.getItem();



    Código: [Seleccionar]
            >>>>>>>>>>> REFERENCIA created = true;
            activeChar.getInventory().destroyItemByItemId("Extractable used", itemId, count, activeChar, this);
    Hay dos caminos; aprender a hacer lo que quieres o pagar para que alguien más lo haga.
    WTS Servicios de desarrollo
    - Facebook: https://goo.gl/DCzNiG
    - Youtube: https://goo.gl/a7m6tc
    - Messenger: https://goo.gl/QzgEBe

    Desconectado lordofcaos

    • No Grade
    • *
    • Topic Author
    • Mensajes: 9
    • mx
    • Agradecimientos: 0
      • l2 king of kings
    • Cronica: : H5
    • Revision: 20190616
    • S.O: Windows 10
    • Serverpack : l2jdevs
    Re:Pedir un item al usar un ExtractableItem
    « Respuesta #2 en: Junio 14, 2019, 03:41:11 pm »
    gracias
    Este post tiene 0 agradecimientos
  • Añade a tus favoritos
  • en esta linea
    if(activeChar.getInventory().getInventoryItemCount(itemId, -1) < 1)    en itemid imagino que va el id del items (caja)
          {
             activeChar.sendMessage("Necesitas TANTOS NOMBRE ITEM para abrir esta caja");
             return false;
          }

    segunda linea
     >>>>>>>>>>> REFERENCIA created = true;
            activeChar.getInventory().destroyItemByItemId("Extractable used", 57, 10, activeChar, this);

    lo coloque asi con los items pero me sigue sucediendo lo mismo no me quita el items  y me da el articulo adjunto el java de como quedo :


    Código: [Seleccionar]
    /*
     * Copyright © 2004-2019 L2J DataPack
     *
     * This file is part of L2J DataPack.
     *
     * L2J DataPack is free software: you can redistribute it and/or modify
     * it under the terms of the GNU General Public License as published by
     * the Free Software Foundation, either version 3 of the License, or
     * (at your option) any later version.
     *
     * L2J DataPack is distributed in the hope that it will be useful,
     * but WITHOUT ANY WARRANTY; without even the implied warranty of
     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
     * General Public License for more details.
     *
     * You should have received a copy of the GNU General Public License
     * along with this program. If not, see <http://www.gnu.org/licenses/>.
     */
    package handlers.itemhandlers;

    import java.util.List;

    import org.l2jdevs.Config;
    import org.l2jdevs.gameserver.handler.IItemHandler;
    import org.l2jdevs.gameserver.model.L2ExtractableProduct;
    import org.l2jdevs.gameserver.model.actor.L2Playable;
    import org.l2jdevs.gameserver.model.actor.instance.L2PcInstance;
    import org.l2jdevs.gameserver.model.items.L2EtcItem;
    import org.l2jdevs.gameserver.model.items.instance.L2ItemInstance;
    import org.l2jdevs.gameserver.network.SystemMessageId;
    import org.l2jdevs.util.Rnd;

    /**
     * Extractable Items handler.
     * @author HorridoJoho
     */
    public class ExtractableItems implements IItemHandler
    {
      @Override
      public boolean useItem(L2Playable playable, L2ItemInstance item, boolean forceUse)
      {
        if (!playable.isPlayer())
        {
          playable.sendPacket(SystemMessageId.ITEM_NOT_FOR_PETS);
          return false;
        }
       
        final L2PcInstance activeChar = playable.getActingPlayer();
        final L2EtcItem etcitem = (L2EtcItem) item.getItem();
        if(activeChar.getInventory().getInventoryItemCount(20189, -1) < 1)
        {
          activeChar.sendMessage("Necesitas TANTOS NOMBRE ITEM para abrir esta caja");
          return false;
        }
        final List<L2ExtractableProduct> exitem = etcitem.getExtractableItems();
        if (exitem == null)
        {
          _log.info("No extractable data defined for " + etcitem);
          return false;
        }
       
        // destroy item
        if (!activeChar.destroyItem("Extract", item.getObjectId(), 1, activeChar, true))
        {
          return false;
        }
       
        boolean created = false;
        for (L2ExtractableProduct expi : exitem)
        {
          if (Rnd.get(100000) <= expi.getChance())
          {
            final int min = (int) (expi.getMin() * Config.RATE_EXTRACTABLE);
            final int max = (int) (expi.getMax() * Config.RATE_EXTRACTABLE);
           
            int createItemAmount = (max == min) ? min : (Rnd.get((max - min) + 1) + min);
            if (createItemAmount == 0)
            {
              continue;
            }
           
            if (item.isStackable() || (createItemAmount == 1))
            {
              activeChar.addItem("Extract", expi.getId(), createItemAmount, activeChar, true);
            }
            else
            {
              while (createItemAmount > 0)
              {
                activeChar.addItem("Extract", expi.getId(), 1, activeChar, true);
                createItemAmount--;
              }
            }
            created = true;
            activeChar.getInventory().destroyItemByItemId("Extractable used", 57, 10, activeChar, this);      <<<< linea donde pide el item para abrir la caja
          }
        }
       
        if (!created)
        {
          activeChar.sendPacket(SystemMessageId.NOTHING_INSIDE_THAT);
        }
        return true;
      }
    }

    Conectado ReynalDev

    • Administrator
    • *
    • Mensajes: 4838
    • mx
    • Agradecimientos: 1690
    • I took a pill in Ibiza
      • ReynalDev
    • Cronica: : Interlude, C4
    • Revision: 1132, FREE,582
    • S.O: Linux CentOS
    • Serverpack : Frozen,aCis,Lisvus
    Re:Pedir un item al usar un ExtractableItem
    « Respuesta #3 en: Junio 14, 2019, 03:48:35 pm »
    gracias
    Este post tiene 0 agradecimientos
  • Añade a tus favoritos

  • Código: [Seleccionar]
    if(activeChar.getInventory().getInventoryItemCount(itemId, -1) < 1)

    Cambia el -1 por 0, quedando.

    Código: [Seleccionar]
    if(activeChar.getInventory().getInventoryItemCount(itemId, 0) < 1)
    Hay dos caminos; aprender a hacer lo que quieres o pagar para que alguien más lo haga.
    WTS Servicios de desarrollo
    - Facebook: https://goo.gl/DCzNiG
    - Youtube: https://goo.gl/a7m6tc
    - Messenger: https://goo.gl/QzgEBe

    Desconectado lordofcaos

    • No Grade
    • *
    • Topic Author
    • Mensajes: 9
    • mx
    • Agradecimientos: 0
      • l2 king of kings
    • Cronica: : H5
    • Revision: 20190616
    • S.O: Windows 10
    • Serverpack : l2jdevs
    Re:Pedir un item al usar un ExtractableItem
    « Respuesta #4 en: Junio 14, 2019, 03:59:36 pm »
    gracias
    Este post tiene 0 agradecimientos
  • Añade a tus favoritos
    sigue igual no quita el item  :11:

    Conectado ReynalDev

    • Administrator
    • *
    • Mensajes: 4838
    • mx
    • Agradecimientos: 1690
    • I took a pill in Ibiza
      • ReynalDev
    • Cronica: : Interlude, C4
    • Revision: 1132, FREE,582
    • S.O: Linux CentOS
    • Serverpack : Frozen,aCis,Lisvus
    Re:Pedir un item al usar un ExtractableItem
    « Respuesta #5 en: Junio 14, 2019, 04:08:02 pm »
    gracias
    Este post tiene 0 agradecimientos
  • Añade a tus favoritos
    Estas pidiendo el item con ID 20189 (ni idea cual sea) para poder extraer, si el jugador NO TIENE dicho item no podra extraer.  Luego mas adelante estas ELIMINANDO adena (itemd id 57) con una cantidad de 10. Solo se quitan 10 de adena si se ha extraido exitosamente algo del Extractable.

    Deberia enviarte el mensaje Necesitas TANTOS NOMBRE ITEM para abrir esta caja cuando no tienes el item con ID 20189 (ni idea cual sea).

    Para empezar, estas recibiendo este mensaje en el jugador?
    Hay dos caminos; aprender a hacer lo que quieres o pagar para que alguien más lo haga.
    WTS Servicios de desarrollo
    - Facebook: https://goo.gl/DCzNiG
    - Youtube: https://goo.gl/a7m6tc
    - Messenger: https://goo.gl/QzgEBe

    Desconectado lordofcaos

    • No Grade
    • *
    • Topic Author
    • Mensajes: 9
    • mx
    • Agradecimientos: 0
      • l2 king of kings
    • Cronica: : H5
    • Revision: 20190616
    • S.O: Windows 10
    • Serverpack : l2jdevs
    Re:Pedir un item al usar un ExtractableItem
    « Respuesta #6 en: Junio 14, 2019, 04:21:19 pm »
    gracias
    Este post tiene 0 agradecimientos
  • Añade a tus favoritos
    Bueno respondiendo a tus preguntas el item 20189 corresponde a esto

    Código: [Seleccionar]
    <item id="20189" type="EtcItem" name="Premium Valentine Decoration Pack">
        <set name="icon" val="BranchSys.icon.br_four_leaf_clover_box_i00" />
        <set name="default_action" val="PEEL" />
        <set name="immediate_effect" val="true" />
        <set name="material" val="PAPER" />
        <set name="weight" val="10" />
        <set name="is_tradable" val="false" />
        <set name="is_dropable" val="false" />
        <set name="is_sellable" val="false" />
        <set name="is_stackable" val="true" />
        <set name="is_premium" val="true" />
        <set name="is_freightable" val="true" />
        <set name="handler" val="ExtractableItems" />
        <set name="capsuled_items" val="20190,1,1,100" />
      </item>

    en el juego la caja no se bloquea, con esto quiero decir que no manda ningún mensaje  ni  me quita la adena. ( esta luego la cambiare por otro items, pero por ahora seria para el ejemplo)

    Conectado ReynalDev

    • Administrator
    • *
    • Mensajes: 4838
    • mx
    • Agradecimientos: 1690
    • I took a pill in Ibiza
      • ReynalDev
    • Cronica: : Interlude, C4
    • Revision: 1132, FREE,582
    • S.O: Linux CentOS
    • Serverpack : Frozen,aCis,Lisvus
    Re:Pedir un item al usar un ExtractableItem
    « Respuesta #7 en: Junio 14, 2019, 04:30:58 pm »
    gracias
    Este post tiene 0 agradecimientos
  • Añade a tus favoritos
    Que RAYOS estas haciendo? Pides la caja para abrir la misma caja, eso no tiene sentido.



    Estas compilando el código y actualizando el JAR???, sino NUNCA va a pasar eso.
    Hay dos caminos; aprender a hacer lo que quieres o pagar para que alguien más lo haga.
    WTS Servicios de desarrollo
    - Facebook: https://goo.gl/DCzNiG
    - Youtube: https://goo.gl/a7m6tc
    - Messenger: https://goo.gl/QzgEBe

    Desconectado lordofcaos

    • No Grade
    • *
    • Topic Author
    • Mensajes: 9
    • mx
    • Agradecimientos: 0
      • l2 king of kings
    • Cronica: : H5
    • Revision: 20190616
    • S.O: Windows 10
    • Serverpack : l2jdevs
    Re:Pedir un item al usar un ExtractableItem
    « Respuesta #8 en: Junio 14, 2019, 04:35:22 pm »
    gracias
    Este post tiene 0 agradecimientos
  • Añade a tus favoritos
    ok haber creo ya nos estamos confundiendo mi idea es esta :

    necesito  que la caja  x (20189 ) se pueda solo abrir si tengo x cantidad de adena o  x cantidad de un item :24:
    Respondiendo si estoy actualizando si lo estoy haciendo.

    Conectado ReynalDev

    • Administrator
    • *
    • Mensajes: 4838
    • mx
    • Agradecimientos: 1690
    • I took a pill in Ibiza
      • ReynalDev
    • Cronica: : Interlude, C4
    • Revision: 1132, FREE,582
    • S.O: Linux CentOS
    • Serverpack : Frozen,aCis,Lisvus
    Re:Pedir un item al usar un ExtractableItem
    « Respuesta #9 en: Junio 14, 2019, 04:43:49 pm »
    gracias
    Este post tiene 0 agradecimientos
  • Añade a tus favoritos
  • Veamos si es cierto, aqui te pide 10 de adena y eliminara 10 de adena en caso de obtener algo desde la caja


    Código: [Seleccionar]
    *
     * Copyright © 2004-2019 L2J DataPack
     *
     * This file is part of L2J DataPack.
     *
     * L2J DataPack is free software: you can redistribute it and/or modify
     * it under the terms of the GNU General Public License as published by
     * the Free Software Foundation, either version 3 of the License, or
     * (at your option) any later version.
     *
     * L2J DataPack is distributed in the hope that it will be useful,
     * but WITHOUT ANY WARRANTY; without even the implied warranty of
     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
     * General Public License for more details.
     *
     * You should have received a copy of the GNU General Public License
     * along with this program. If not, see <http://www.gnu.org/licenses/>.
     */
    package handlers.itemhandlers;

    import java.util.List;

    import org.l2jdevs.Config;
    import org.l2jdevs.gameserver.handler.IItemHandler;
    import org.l2jdevs.gameserver.model.L2ExtractableProduct;
    import org.l2jdevs.gameserver.model.actor.L2Playable;
    import org.l2jdevs.gameserver.model.actor.instance.L2PcInstance;
    import org.l2jdevs.gameserver.model.items.L2EtcItem;
    import org.l2jdevs.gameserver.model.items.instance.L2ItemInstance;
    import org.l2jdevs.gameserver.network.SystemMessageId;
    import org.l2jdevs.util.Rnd;

    /**
     * Extractable Items handler.
     * @author HorridoJoho
     */
    public class ExtractableItems implements IItemHandler
    {
      @Override
      public boolean useItem(L2Playable playable, L2ItemInstance item, boolean forceUse)
      {
        if (!playable.isPlayer())
        {
          playable.sendPacket(SystemMessageId.ITEM_NOT_FOR_PETS);
          return false;
        }
       
        final L2PcInstance activeChar = playable.getActingPlayer();
        final L2EtcItem etcitem = (L2EtcItem) item.getItem();
        activeChar.sendMessage("Estoy abriendo la caja");
        if(activeChar.getInventory().getInventoryItemCount(57, -1) < 10)
        {
          activeChar.sendMessage("Necesitas 10 adena para abrir esta caja");
          return false;
        }
        final List<L2ExtractableProduct> exitem = etcitem.getExtractableItems();
        if (exitem == null)
        {
          _log.info("No extractable data defined for " + etcitem);
          return false;
        }
       
        // destroy item
        if (!activeChar.destroyItem("Extract", item.getObjectId(), 1, activeChar, true))
        {
          return false;
        }
       
        boolean created = false;
        for (L2ExtractableProduct expi : exitem)
        {
          if (Rnd.get(100000) <= expi.getChance())
          {
            final int min = (int) (expi.getMin() * Config.RATE_EXTRACTABLE);
            final int max = (int) (expi.getMax() * Config.RATE_EXTRACTABLE);
           
            int createItemAmount = (max == min) ? min : (Rnd.get((max - min) + 1) + min);
            if (createItemAmount == 0)
            {
              continue;
            }
           
            if (item.isStackable() || (createItemAmount == 1))
            {
              activeChar.addItem("Extract", expi.getId(), createItemAmount, activeChar, true);
            }
            else
            {
              while (createItemAmount > 0)
              {
                activeChar.addItem("Extract", expi.getId(), 1, activeChar, true);
                createItemAmount--;
              }
            }
            created = true;
            activeChar.sendMessage("Obtuviste algo de la caja");
            activeChar.getInventory().destroyItemByItemId("Extractable used", 57, 10, activeChar, this);
          }
        }
       
        if (!created)
        {
          activeChar.sendPacket(SystemMessageId.NOTHING_INSIDE_THAT);
        }
        return true;
      }
    }

    Qué ocurrió?
    Hay dos caminos; aprender a hacer lo que quieres o pagar para que alguien más lo haga.
    WTS Servicios de desarrollo
    - Facebook: https://goo.gl/DCzNiG
    - Youtube: https://goo.gl/a7m6tc
    - Messenger: https://goo.gl/QzgEBe

    Desconectado lordofcaos

    • No Grade
    • *
    • Topic Author
    • Mensajes: 9
    • mx
    • Agradecimientos: 0
      • l2 king of kings
    • Cronica: : H5
    • Revision: 20190616
    • S.O: Windows 10
    • Serverpack : l2jdevs
    Re:Pedir un item al usar un ExtractableItem
    « Respuesta #10 en: Junio 14, 2019, 04:54:49 pm »
    gracias
    Este post tiene 0 agradecimientos
  • Añade a tus favoritos
    error de scrip   :04:

    Desconectado lordofcaos

    • No Grade
    • *
    • Topic Author
    • Mensajes: 9
    • mx
    • Agradecimientos: 0
      • l2 king of kings
    • Cronica: : H5
    • Revision: 20190616
    • S.O: Windows 10
    • Serverpack : l2jdevs
    Re:Pedir un item al usar un ExtractableItem
    « Respuesta #11 en: Junio 14, 2019, 05:28:04 pm »
    gracias
    Este post tiene 0 agradecimientos
  • Añade a tus favoritos
    ya logre que funcionara ahora nada mas  tengo un pequeño detalle la mochila el adena no se actualiza a menos que cierre la mochila y la vuelva a abrir