Понедельник ждите, написал же Дизер.Ну что там ? В этом году дождемся ?))
Понедельник ждите, написал же Дизер.Ну что там ? В этом году дождемся ?))
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() {
}
}
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() {
}
}
<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">
This code is only for dragonic armor? if we want to add more objects we have to fill in the code?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?
Ровно так же указываешь ID в лист и всеа шапку как примерять?
I think the code is incomplete because it's just for try skins, every time we need to add an item we should go add to the code.
work for aghations and cloaks?Exactamente de la misma manera indicas el DNI en la hoja y listo
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 ticketswork for aghations and cloaks?
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
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);
}
}
}
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);
}
}
}
<button width=100 height=18 action=“bypass -h scripts_services.dress:getDraconic” back=“L2UI_CH3.bigbutton2_down” fore=“L2UI_CH3.bigbutton2” value=“Show Skins”>.
<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.
<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.
<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.
Could you share the version for interlude? @In this updated version, the following changes have been added: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); } } }
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