dressme for lucera?

Video

Code for Interlude
Code:
package services;

import l2.commons.threading.RunnableImpl;
import l2.gameserver.ThreadPoolManager;
import l2.gameserver.data.xml.holder.ItemHolder;
import l2.gameserver.model.Player;
import l2.gameserver.model.items.Inventory;
import l2.gameserver.network.l2.c2s.RequestPreviewItem;
import l2.gameserver.network.l2.components.SystemMsg;
import l2.gameserver.network.l2.s2c.ShopPreviewInfo;
import l2.gameserver.scripts.Functions;
import l2.gameserver.scripts.ScriptFile;
import l2.gameserver.templates.item.ItemTemplate;

import java.util.HashMap;
import java.util.Map;

public class dress extends Functions implements ScriptFile
{
public void getDraconic()
  {
Player player = getSelf();
    if (player == null) {
return;
    }

Map<Integer, Integer> itemList = new HashMap<>();
    // Items list
    int[] itemIds = {7575, 6379, 6382,6380, 6381};

    for (int itemId : itemIds) {
ItemTemplate template = ItemHolder.getInstance().getTemplate(itemId);
      if (template == null) {
continue;
      }
int paperdoll = Inventory.getPaperdollIndex(template.getBodyPart());
      itemList.put(paperdoll, itemId);
    }

player.sendPacket(new ShopPreviewInfo(itemList));
    // Schedule task
    ThreadPoolManager.getInstance().schedule(new RemoveWearItemsTask(player), 15000); // 15000 is preview time

  }

private static class RemoveWearItemsTask extends RunnableImpl
  {
private Player _activeChar;

    public RemoveWearItemsTask(Player activeChar)
    {
_activeChar = activeChar;
    }

public void runImpl() throws Exception
    {
_activeChar.sendPacket(SystemMsg.YOU_ARE_NO_LONGER_TRYING_ON_EQUIPMENT);
      _activeChar.sendUserInfo(true);
    }
  }

@Override
  public void onLoad() {
  }

@Override
  public void onReload() {
  }

@Override
  public void onShutdown() {
  }
}

Code for Classic/Legacy
Code:
package services;

import l2.commons.threading.RunnableImpl;
import l2.gameserver.ThreadPoolManager;
import l2.gameserver.cache.Msg;
import l2.gameserver.data.xml.holder.ItemHolder;
import l2.gameserver.model.Player;
import l2.gameserver.model.items.Inventory;
import l2.gameserver.network.l2.components.SystemMsg;
import l2.gameserver.network.l2.s2c.ExUserInfoEquipSlot;
import l2.gameserver.network.l2.s2c.InventorySlot;
import l2.gameserver.network.l2.s2c.ShopPreviewInfo;
import l2.gameserver.scripts.Functions;
import l2.gameserver.scripts.ScriptFile;
import l2.gameserver.templates.item.ItemTemplate;
import l2.gameserver.utils.ItemFunctions;

import java.util.HashMap;
import java.util.Map;

public class dress extends Functions implements ScriptFile
{
public void getDraconic()
  {
Player player = getSelf();
    if (player == null) {
return;
    }

Map<Integer, Integer> itemList = new HashMap<>();
    // Items list
    int[] itemIds = {7694, 7575, 6379, 6382,6380, 6381};

    for (int itemId : itemIds) {
ItemTemplate template = ItemHolder.getInstance().getTemplate(itemId);
      if (template == null) {
continue;
      }
int paperdoll = ItemFunctions.getPaperdollIndex(template.getBodyPart());
      itemList.put(paperdoll, itemId);
    }

player.sendPacket(new ShopPreviewInfo(itemList));
    // Schedule task
    ThreadPoolManager.getInstance().schedule(new RemoveWearItemsTask(player), 15000); // 15000 is preview time

  }

private static class RemoveWearItemsTask extends RunnableImpl
  {
private Player _activeChar;

    public RemoveWearItemsTask(Player activeChar)
    {
_activeChar = activeChar;
    }

public void runImpl() throws Exception
    {
_activeChar.sendPacket(Msg.TRYING_ON_MODE_HAS_ENDED);
      _activeChar.sendUserInfo(true);
      _activeChar.sendPacket(new ExUserInfoEquipSlot(_activeChar, InventorySlot.VALUES));
    }
  }

@Override
  public void onLoad() {
  }

@Override
  public void onReload() {
  }

@Override
  public void onShutdown() {
  }
}

Bypass
Code:
<button width=100 height=18 action="bypass -h scripts_services.dress:getDraconic" back="L2UI_CH3.bigbutton2_down" fore="L2UI_CH3.bigbutton2" value="Show Me Draconic">

You can copy and paste the method and enter your items there

Also for classic you can set abnormal and unset it after N seconds
 
Last edited:
Video

Code for Interlude
Code:
package services;

import l2.commons.threading.RunnableImpl;
import l2.gameserver.ThreadPoolManager;
import l2.gameserver.data.xml.holder.ItemHolder;
import l2.gameserver.model.Player;
import l2.gameserver.model.items.Inventory;
import l2.gameserver.network.l2.c2s.RequestPreviewItem;
import l2.gameserver.network.l2.components.SystemMsg;
import l2.gameserver.network.l2.s2c.ShopPreviewInfo;
import l2.gameserver.scripts.Functions;
import l2.gameserver.scripts.ScriptFile;
import l2.gameserver.templates.item.ItemTemplate;

import java.util.HashMap;
import java.util.Map;

public class dress extends Functions implements ScriptFile
{
public void getDraconic()
  {
Player player = getSelf();
    if (player == null) {
return;
    }

Map<Integer, Integer> itemList = new HashMap<>();
    // Items list
    int[] itemIds = {7575, 6379, 6382,6380, 6381};

    for (int itemId : itemIds) {
ItemTemplate template = ItemHolder.getInstance().getTemplate(itemId);
      if (template == null) {
continue;
      }
int paperdoll = Inventory.getPaperdollIndex(template.getBodyPart());
      itemList.put(paperdoll, itemId);
    }

player.sendPacket(new ShopPreviewInfo(itemList));
    // Schedule task
    ThreadPoolManager.getInstance().schedule(new RemoveWearItemsTask(player), 15000); // 15000 is preview time

  }

private static class RemoveWearItemsTask extends RunnableImpl
  {
private Player _activeChar;

    public RemoveWearItemsTask(Player activeChar)
    {
_activeChar = activeChar;
    }

public void runImpl() throws Exception
    {
_activeChar.sendPacket(SystemMsg.YOU_ARE_NO_LONGER_TRYING_ON_EQUIPMENT);
      _activeChar.sendUserInfo(true);
    }
  }

@Override
  public void onLoad() {
  }

@Override
  public void onReload() {
  }

@Override
  public void onShutdown() {
  }
}

Code for Classic/Legacy
Code:
package services;

import l2.commons.threading.RunnableImpl;
import l2.gameserver.ThreadPoolManager;
import l2.gameserver.data.xml.holder.ItemHolder;
import l2.gameserver.model.Player;
import l2.gameserver.model.items.Inventory;
import l2.gameserver.network.l2.c2s.RequestPreviewItem;
import l2.gameserver.network.l2.components.SystemMsg;
import l2.gameserver.network.l2.s2c.ShopPreviewInfo;
import l2.gameserver.scripts.Functions;
import l2.gameserver.scripts.ScriptFile;
import l2.gameserver.templates.item.ItemTemplate;

import java.util.HashMap;
import java.util.Map;

public class dress extends Functions implements ScriptFile
{
public void getDraconic()
  {
Player player = getSelf();
    if (player == null) {
return;
    }

Map<Integer, Integer> itemList = new HashMap<>();
    // Items list
    int[] itemIds = {7575, 6379, 6382,6380, 6381};

    for (int itemId : itemIds) {
ItemTemplate template = ItemHolder.getInstance().getTemplate(itemId);
      if (template == null) {
continue;
      }
int paperdoll = Inventory.getPaperdollIndex(template.getBodyPart());
      itemList.put(paperdoll, itemId);
    }

player.sendPacket(new ShopPreviewInfo(itemList));
    // Schedule task
    ThreadPoolManager.getInstance().schedule(new RemoveWearItemsTask(player), 15000); // 15000 is preview time

  }

private static class RemoveWearItemsTask extends RunnableImpl
{
private Player _activeChar;

  public RemoveWearItemsTask(Player activeChar)
  {
_activeChar = activeChar;
  }

public void runImpl() throws Exception
  {
_activeChar.sendPacket(Msg.TRYING_ON_MODE_HAS_ENDED);
   _activeChar.sendUserInfo(true);
   _activeChar.sendPacket(new ExUserInfoEquipSlot(_activeChar, InventorySlot.VALUES));
  }
}

@Override
  public void onLoad() {
  }

@Override
  public void onReload() {
  }

@Override
  public void onShutdown() {
  }
}

Bypass
Code:
<button width=100 height=18 action="bypass -h scripts_services.dress:getDraconic" back="L2UI_CH3.bigbutton2_down" fore="L2UI_CH3.bigbutton2" value="Show Me Draconic">

You can copy and paste the method and enter your items there

Also for classic you can set abnormal and unset it after N seconds
This code is only for dragonic armor? if we want to add more objects we have to fill in the code?
 
This code is only for dragonic armor? if we want to add more objects we have to fill in the code?
98872af895c75a5a71ee7c1dfc15181b.png
 
for cloaks yes, for aghations is not. But I can make example for aghations... I think. For now I have no time about custom thinks, I need to solve tickets
JavaScript:
package services;

import l2.commons.threading.RunnableImpl;
import l2.gameserver.ThreadPoolManager;
import l2.gameserver.cache.Msg;
import l2.gameserver.data.xml.holder.ItemHolder;
import l2.gameserver.model.Player;
import l2.gameserver.model.items.Inventory;
import l2.gameserver.network.l2.components.SystemMsg;
import l2.gameserver.network.l2.s2c.ExUserInfoEquipSlot;
import l2.gameserver.network.l2.s2c.InventorySlot;
import l2.gameserver.network.l2.s2c.ShopPreviewInfo;
import l2.gameserver.scripts.Functions;
import l2.gameserver.scripts.ScriptFile;
import l2.gameserver.templates.item.ItemTemplate;
import l2.gameserver.utils.ItemFunctions;

import java.util.HashMap;
import java.util.Map;

public class dress extends Functions implements ScriptFile {

    private static final int[] SKIN_ITEM_IDS = {7694, 7575, 6379, 6382, 6380, 6381};
    private static final int SKIN_PREVIEW_TIME = 15000; // 15 seconds

    public void getDraconic(Player player) {
        if (player == null) {
            return;
        }

        Map<Integer, Integer> itemList = new HashMap<>();

        for (int itemId : SKIN_ITEM_IDS) {
            ItemTemplate template = ItemHolder.getInstance().getTemplate(itemId);
            if (template == null) {
                continue;
            }
            int paperdoll = ItemFunctions.getPaperdollIndex(template.getBodyPart());
            itemList.put(paperdoll, itemId);
        }

        player.sendPacket(new ShopPreviewInfo(itemList));
        ThreadPoolManager.getInstance().schedule(new RemoveWearItemsTask(player), SKIN_PREVIEW_TIME);
    }

    public void buySkin(Player player, int itemId) {
        if (player == null) {
            return;
        }

        Inventory inventory = player.getInventory();
        int cost = ItemHolder.getInstance().getTemplate(itemId).getReferencePrice();

        if (inventory.getAdena() < cost) {
            player.sendPacket(SystemMsg.YOU_DO_NOT_HAVE_ENOUGH_ADENA);
            return;
        }

        if (inventory.addItem(itemId, 1) != null) {
            inventory.reduceAdena(cost, true);
            player.sendMessage("You have purchased the skin item.");
        } else {
            player.sendPacket(SystemMsg.INCORRECT_ITEM_COUNT);
        }
    }

    public void wearSkin(Player player, int itemId) {
        if (player == null) {
            return;
        }

        Inventory inventory = player.getInventory();
        if (inventory.destroyItemByItemId(itemId, 1)) {
            getDraconic(player);
            player.sendMessage("You are now wearing the skin item.");
        } else {
            player.sendPacket(SystemMsg.YOU_DO_NOT_HAVE_ENOUGH_ITEMS);
        }
    }

    public void removeSkin(Player player) {
        player.sendPacket(Msg.TRYING_ON_MODE_HAS_ENDED);
        player.sendUserInfo(true);
        player.sendPacket(new ExUserInfoEquipSlot(player, InventorySlot.VALUES));
    }

    @Override
    public void onLoad() {
    }

    @Override
    public void onReload() {
    }

    @Override
    public void onShutdown() {
    }

    private static class RemoveWearItemsTask extends RunnableImpl {
        private Player _activeChar;

        public RemoveWearItemsTask(Player activeChar) {
            _activeChar = activeChar;
        }

        @Override
        public void runImpl() throws Exception {
            removeSkin(_activeChar);
        }
    }
}
In this updated version, the following changes have been added:

New buySkin() and wearSkin() methods have been created to allow players to purchase and try on armor skins.

The getDraconic() method now receives the Player as a parameter so it can be used in other methods.

Added removeSkin() method to remove armor skins when the preview time is over.

A SKIN_ITEM_IDS constant has been created to store the IDs of the armor skin items.

A SKIN_PREVIEW_TIME constant has been created to set the preview time to 15 seconds.

I would like to know if I have done it right or if there is something wrong. @Deazer
 
And this for aghations/weapons/armors/cloaks, if someone can try please


JavaScript:
package services;

import l2.commons.threading.RunnableImpl;
import l2.gameserver.ThreadPoolManager;
import l2.gameserver.cache.Msg;
import l2.gameserver.data.xml.holder.ItemHolder;
import l2.gameserver.model.Player;
import l2.gameserver.model.items.Inventory;
import l2.gameserver.network.l2.components.SystemMsg;
import l2.gameserver.network.l2.s2c.ExUserInfoEquipSlot;
import l2.gameserver.network.l2.s2c.InventorySlot;
import l2.gameserver.network.l2.s2c.ShopPreviewInfo;
import l2.gameserver.scripts.Functions;
import l2.gameserver.scripts.ScriptFile;
import l2.gameserver.templates.item.ItemTemplate;
import l2.gameserver.utils.ItemFunctions;

import java.util.HashMap;
import java.util.Map;

public class dress extends Functions implements ScriptFile {

    private static final int[] SKIN_ITEM_IDS = {7694, 7575, 6379, 6382, 6380, 6381, 6650, 6646, 6647, 6648, 6649}; // Armors and Aghations
    private static final int[] WEAPON_ITEM_IDS = {7576, 7577, 7578, 7579, 7580}; // Weapons
    private static final int SKIN_PREVIEW_TIME = 15000; // 15 seconds

    public void getDraconic(Player player) {
        if (player == null) {
            return;
        }

        Map<Integer, Integer> itemList = new HashMap<>();

        for (int itemId : SKIN_ITEM_IDS) {
            ItemTemplate template = ItemHolder.getInstance().getTemplate(itemId);
            if (template == null) {
                continue;
            }
            int paperdoll = ItemFunctions.getPaperdollIndex(template.getBodyPart());
            itemList.put(paperdoll, itemId);
        }

        for (int itemId : WEAPON_ITEM_IDS) {
            ItemTemplate template = ItemHolder.getInstance().getTemplate(itemId);
            if (template == null) {
                continue;
            }
            int paperdoll = ItemFunctions.getPaperdollIndex(template.getBodyPart());
            itemList.put(paperdoll, itemId);
        }

        player.sendPacket(new ShopPreviewInfo(itemList));
        ThreadPoolManager.getInstance().schedule(new RemoveWearItemsTask(player), SKIN_PREVIEW_TIME);
    }

    public void buySkin(Player player, int itemId) {
        if (player == null) {
            return;
        }

        Inventory inventory = player.getInventory();
        int cost = ItemHolder.getInstance().getTemplate(itemId).getReferencePrice();

        if (inventory.getAdena() < cost) {
            player.sendPacket(SystemMsg.YOU_DO_NOT_HAVE_ENOUGH_ADENA);
            return;
        }

        if (inventory.addItem(itemId, 1) != null) {
            inventory.reduceAdena(cost, true);
            player.sendMessage("You have purchased the skin item.");
        } else {
            player.sendPacket(SystemMsg.INCORRECT_ITEM_COUNT);
        }
    }

    public void wearSkin(Player player, int itemId) {
        if (player == null) {
            return;
        }

        Inventory inventory = player.getInventory();
        if (inventory.destroyItemByItemId(itemId, 1)) {
            getDraconic(player);
            player.sendMessage("You are now wearing the skin item.");
        } else {
            player.sendPacket(SystemMsg.YOU_DO_NOT_HAVE_ENOUGH_ITEMS);
        }
    }

    public void removeSkin(Player player) {
        player.sendPacket(Msg.TRYING_ON_MODE_HAS_ENDED);
        player.sendUserInfo(true);
        player.sendPacket(new ExUserInfoEquipSlot(player, InventorySlot.VALUES));
    }

    @Override
    public void onLoad() {
    }

    @Override
    public void onReload() {
    }

    @Override
    public void onShutdown() {
    }

    private static class RemoveWearItemsTask extends RunnableImpl {
        private Player _activeChar;

        public RemoveWearItemsTask(Player activeChar) {
            _activeChar = activeChar;
        }

        @Override
        public void runImpl() throws Exception {
            removeSkin(_activeChar);
        }
    }
}
 
With the changes we made in the script, the structure of the bypass would be as follows:

To show the preview of the skins:

<button width=100 height=18 action=“bypass -h scripts_services.dress:getDraconic” back=“L2UI_CH3.bigbutton2_down” fore=“L2UI_CH3.bigbutton2” value=“Show Skins”>.

To buy a skin:

<button width=100 height=18 action=“bypass -h scripts_services.dress:buySkin ITEM_ID” back=“L2UI_CH3.bigbutton2_down” fore=“L2UI_CH3.bigbutton2” value=“Buy Skin”>
Replace ITEM_ID with the ID of the skin item you want to buy.

To put on a skin:

<button width=100 height=18 action=“bypass -h scripts_services.dress:wearSkin ITEM_ID” back=“L2UI_CH3.bigbutton2_down” fore=“L2UI_CH3.bigbutton2” value=“Wear Skin”>
Replace ITEM_ID with the ID of the skin item you want to wear.

To remove the skin:

<button width=100 height=18 action=“bypass -h scripts_services.dress:removeSkin” back=“L2UI_CH3.bigbutton2_down” fore=“L2UI_CH3.bigbutton2” value=“Remove Skin”>
These would be the updated bypasses for players to purchase, test and remove/put on armor, aghations and weapon skins.
 
How do I put it in the interlude code to charge a certain value of adena or any other item when you click on getDraconic?? or just for VIP players to be able to get it
 
Back
Top