diff --git a/aCis_gameserver/java/net/sf/l2j/gameserver/network/serverpackets/UserInfo.java b/aCis_gameserver/java/net/sf/l2j/gameserver/network/serverpackets/UserInfo.java index 4be8789..0c79f70 100644 --- a/aCis_gameserver/java/net/sf/l2j/gameserver/network/serverpackets/UserInfo.java +++ b/aCis_gameserver/java/net/sf/l2j/gameserver/network/serverpackets/UserInfo.java @@ -4,6 +4,7 @@ import net.sf.l2j.gameserver.data.manager.CursedWeaponManager; import net.sf.l2j.gameserver.enums.PolyType; import net.sf.l2j.gameserver.enums.skills.AbnormalEffect; +import net.sf.l2j.gameserver.model.DressMe; import net.sf.l2j.gameserver.model.actor.Player; import net.sf.l2j.gameserver.model.actor.Summon; import net.sf.l2j.gameserver.model.itemcontainer.Inventory; @@ -55,6 +56,7 @@ writeD(_player.getMaxLoad()); writeD(_player.getActiveWeaponItem() != null ? 40 : 20); + final DressMe dress = _player.getDress(); writeD(_player.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_HAIRALL)); writeD(_player.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_REAR)); writeD(_player.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_LEAR)); @@ -64,13 +66,13 @@ writeD(_player.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_HEAD)); writeD(_player.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_RHAND)); writeD(_player.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_LHAND)); - writeD(_player.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_GLOVES)); - writeD(_player.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_CHEST)); - writeD(_player.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_LEGS)); - writeD(_player.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_FEET)); + writeD(dress != null ? dress.getGlovesId() : _player.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_GLOVES)); + writeD(dress != null ? dress.getChestId() : _player.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_CHEST)); + writeD(dress != null ? dress.getLegsId() : _player.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_LEGS)); + writeD(dress != null ? dress.getFeetId() : _player.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_FEET)); writeD(_player.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_BACK)); writeD(_player.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_RHAND)); - writeD(_player.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_HAIR)); + writeD(dress != null ? dress.getHairId() : _player.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_HAIR)); writeD(_player.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_FACE)); writeD(_player.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_HAIRALL)); @@ -82,13 +84,13 @@ writeD(_player.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_HEAD)); writeD(_player.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_RHAND)); writeD(_player.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_LHAND)); - writeD(_player.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_GLOVES)); - writeD(_player.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_CHEST)); - writeD(_player.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_LEGS)); - writeD(_player.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_FEET)); + writeD(dress != null ? dress.getGlovesId() : _player.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_GLOVES)); + writeD(dress != null ? dress.getChestId() : _player.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_CHEST)); + writeD(dress != null ? dress.getLegsId() : _player.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_LEGS)); + writeD(dress != null ? dress.getFeetId() : _player.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_FEET)); writeD(_player.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_BACK)); writeD(_player.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_RHAND)); - writeD(_player.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_HAIR)); + writeD(dress != null ? dress.getHairId() : _player.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_HAIR)); writeD(_player.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_FACE)); writeH(0x00); diff --git a/aCis_gameserver/java/net/sf/l2j/gameserver/network/serverpackets/CharInfo.java b/aCis_gameserver/java/net/sf/l2j/gameserver/network/serverpackets/CharInfo.java index 6212b93..b81b28a 100644 --- a/aCis_gameserver/java/net/sf/l2j/gameserver/network/serverpackets/CharInfo.java +++ b/aCis_gameserver/java/net/sf/l2j/gameserver/network/serverpackets/CharInfo.java @@ -3,6 +3,7 @@ import net.sf.l2j.Config; import net.sf.l2j.gameserver.data.manager.CursedWeaponManager; import net.sf.l2j.gameserver.enums.skills.AbnormalEffect; +import net.sf.l2j.gameserver.model.DressMe; import net.sf.l2j.gameserver.model.actor.Player; import net.sf.l2j.gameserver.model.actor.Summon; import net.sf.l2j.gameserver.model.itemcontainer.Inventory; @@ -29,29 +30,30 @@ if (tmp != null && tmp.isGM()) canSeeInvis = true; } writeD((_player.getClassIndex() == 0) ? _player.getClassId().getId() : _player.getBaseClass()); + final DressMe dress = _player.getDress(); writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_HAIRALL)); writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_HEAD)); writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_RHAND)); writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_LHAND)); - writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_GLOVES)); - writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_CHEST)); - writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_LEGS)); - writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_FEET)); + writeD(dress != null ? dress.getGlovesId() : _inv.getPaperdollItemId(Inventory.PAPERDOLL_GLOVES)); + writeD(dress != null ? dress.getChestId() : _inv.getPaperdollItemId(Inventory.PAPERDOLL_CHEST)); + writeD(dress != null ? dress.getLegsId() : _inv.getPaperdollItemId(Inventory.PAPERDOLL_LEGS)); + writeD(dress != null ? dress.getFeetId() : _inv.getPaperdollItemId(Inventory.PAPERDOLL_FEET)); writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_BACK)); writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_RHAND)); - writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_HAIR)); + writeD(dress != null ? dress.getHairId() : _inv.getPaperdollItemId(Inventory.PAPERDOLL_HAIR)); writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_FACE)); writeH(0x00); diff --git a/aCis_gameserver/java/net/sf/l2j/gameserver/handler/itemhandlers/Skins.java b/aCis_gameserver/java/net/sf/l2j/gameserver/handler/itemhandlers/Skins.java new file mode 100644 index 0000000..98d8580 --- /dev/null +++ b/aCis_gameserver/java/net/sf/l2j/gameserver/handler/itemhandlers/Skins.java @@ -0,0 +1,31 @@ +package net.sf.l2j.gameserver.handler.itemhandlers; + +import net.sf.l2j.gameserver.data.xml.DressMeData; +import net.sf.l2j.gameserver.handler.IItemHandler; +import net.sf.l2j.gameserver.model.DressMe; +import net.sf.l2j.gameserver.model.actor.Playable; +import net.sf.l2j.gameserver.model.actor.Player; +import net.sf.l2j.gameserver.model.item.instance.ItemInstance; +import net.sf.l2j.gameserver.network.serverpackets.MagicSkillUse; + +/** + * @author Williams and Stinkymadness + */ +public class Skins implements IItemHandler +{ + @Override + public void useItem(Playable playable, ItemInstance item, boolean forceUse) + { + if (!(playable instanceof Player)) + return; + + final DressMe dress = DressMeData.getInstance().getItemId(item.getItemId()); + if (dress == null) + return; + + final Player player = (Player) playable; + player.setDress(dress); + player.broadcastPacket(new MagicSkillUse(player, player, 1036, 1, 4000, 0)); + player.broadcastUserInfo(); + } +} diff --git a/aCis_gameserver/java/net/sf/l2j/gameserver/handler/ItemHandler.java b/aCis_gameserver/java/net/sf/l2j/gameserver/handler/ItemHandler.java index b1df7fd..7b6ee78 100644 --- a/aCis_gameserver/java/net/sf/l2j/gameserver/handler/ItemHandler.java +++ b/aCis_gameserver/java/net/sf/l2j/gameserver/handler/ItemHandler.java @@ -28,11 +28,13 @@ import net.sf.l2j.gameserver.handler.itemhandlers.NobleCoin; import net.sf.l2j.gameserver.handler.itemhandlers.PaganKeys; import net.sf.l2j.gameserver.handler.itemhandlers.PetFood; import net.sf.l2j.gameserver.handler.itemhandlers.Recipes; import net.sf.l2j.gameserver.handler.itemhandlers.RollingDice; import net.sf.l2j.gameserver.handler.itemhandlers.ScrollOfResurrection; import net.sf.l2j.gameserver.handler.itemhandlers.SeedHandler; import net.sf.l2j.gameserver.handler.itemhandlers.SevenSignsRecord; +import net.sf.l2j.gameserver.handler.itemhandlers.Skins; import net.sf.l2j.gameserver.handler.itemhandlers.SoulCrystals; import net.sf.l2j.gameserver.handler.itemhandlers.SoulShots; import net.sf.l2j.gameserver.handler.itemhandlers.SpecialXMas; @@ -80,6 +83,7 @@ registerHandler(new SevenSignsRecord()); registerHandler(new SoulShots()); registerHandler(new SpecialXMas()); + registerHandler(new Skins()); registerHandler(new SoulCrystals()); registerHandler(new SpiritShot()); registerHandler(new SummonItems()); diff --git a/aCis_gameserver/java/net/sf/l2j/gameserver/data/xml/DressMeData.java b/aCis_gameserver/java/net/sf/l2j/gameserver/data/xml/DressMeData.java new file mode 100644 index 0000000..178bb63 --- /dev/null +++ b/aCis_gameserver/java/net/sf/l2j/gameserver/data/xml/DressMeData.java @@ -0,0 +1,63 @@ +package net.sf.l2j.gameserver.data.xml; + +import java.nio.file.Path; +import java.util.ArrayList; +import java.util.List; + +import net.sf.l2j.commons.data.xml.IXmlReader; + +import net.sf.l2j.gameserver.model.DressMe; + +import org.w3c.dom.Document; + +/** + * @author Williams and Stinkymadness + */ +public class DressMeData implements IXmlReader +{ + private final List _entries = new ArrayList<>(); + + public DressMeData() + { + load(); + } + + public void reload() + { + _entries.clear(); + load(); + } + + @Override + public void load() + { + parseFile("./data/xml/dressme.xml"); + LOGGER.info("Loaded {} dressme templates.", _entries.size()); + } + + @Override + public void parseDocument(Document doc, Path path) + { + forEach(doc, "list", listNode -> forEach(listNode, "dressme", dressNode -> _entries.add(new DressMe(parseAttributes(dressNode))))); + } + + public DressMe getItemId(int itemId) + { + return _entries.stream().filter(x -> x.getItemId() == itemId).findFirst().orElse(null); + } + + public List getEntries() + { + return _entries; + } + + public static DressMeData getInstance() + { + return SingletonHolder.INSTANCE; + } + + private static class SingletonHolder + { + protected static final DressMeData INSTANCE = new DressMeData(); + } +} diff --git a/aCis_gameserver/java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminAdmin.java b/aCis_gameserver/java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminAdmin.java index a9e88c0..64a30e8 100644 --- a/aCis_gameserver/java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminAdmin.java +++ b/aCis_gameserver/java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminAdmin.java @@ -13,8 +13,12 @@ import net.sf.l2j.gameserver.data.manager.ZoneManager; import net.sf.l2j.gameserver.data.xml.AdminData; import net.sf.l2j.gameserver.data.xml.AnnouncementData; import net.sf.l2j.gameserver.data.xml.DoorData; +import net.sf.l2j.gameserver.data.xml.DressMeData; import net.sf.l2j.gameserver.data.xml.EnchantData; +import net.sf.l2j.gameserver.data.xml.ItemRestrictionData; import net.sf.l2j.gameserver.data.xml.MultisellData; import net.sf.l2j.gameserver.data.xml.NpcData; import net.sf.l2j.gameserver.data.xml.PolymorphData; @@ -145,6 +154,16 @@ CursedWeaponManager.getInstance().reload(); activeChar.sendMessage("Cursed weapons have been reloaded."); } + else if (type.startsWith("dress")) + { + DressMeData.getInstance().reload(); + activeChar.sendMessage("Dress me have been reloaded."); + } @@ -208,8 +232,8 @@ else { activeChar.sendMessage("Usage : //reload "); - activeChar.sendMessage("Usage : //reload "); - activeChar.sendMessage("Usage : //reload "); + activeChar.sendMessage("Usage : //reload "); + activeChar.sendMessage("Usage : //reload "); } } while (st.hasMoreTokens()); @@ -217,8 +241,8 @@ catch (Exception e) { activeChar.sendMessage("Usage : //reload "); - activeChar.sendMessage("Usage : //reload "); - activeChar.sendMessage("Usage : //reload "); + activeChar.sendMessage("Usage : //reload "); + activeChar.sendMessage("Usage : //reload "); } } return true; diff --git a/aCis_datapack/data/html/admin/server_menu.htm b/aCis_datapack/data/html/admin/server_menu.htm index a8a32e4..68a1f06 100644 --- a/aCis_datapack/data/html/admin/server_menu.htm +++ b/aCis_datapack/data/html/admin/server_menu.htm @@ -18,7 +18,7 @@ Reload - +

diff --git a/aCis_datapack/data/xml/dressme.xml b/aCis_datapack/data/xml/dressme.xml new file mode 100644 index 0000000..06139d2 --- /dev/null +++ b/aCis_datapack/data/xml/dressme.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +