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..89a3b70
--- /dev/null
+++ b/aCis_gameserver/java/net/sf/l2j/gameserver/data/xml/DressMeData.java
@@ -0,0 +1,70 @@
+package net.sf.l2j.gameserver.data.xml;
+
+import java.nio.file.Path;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
+
+import net.sf.l2j.commons.data.xml.IXmlReader;
+import net.sf.l2j.commons.util.StatsSet;
+
+import net.sf.l2j.gameserver.model.DressMe;
+import org.w3c.dom.Document;
+
+/**
+ * @author Williams
+ *
+ */
+public class DressMeData implements IXmlReader
+{
+ private final Map
+
+ public DressMeData()
+ {
+ load();
+ }
+
+ public void reload()
+ {
+ _dress.clear();
+ load();
+ }
+
+ @Override
+ public void load()
+ {
+ parseFile("./data/xml/dressme.xml");
+ LOGGER.info("Loaded {} dressme templates.", _dress.size());
+ }
+
+ @Override
+ public void parseDocument(Document doc, Path path)
+ {
+ forEach(doc, "list", listNode -> forEach(listNode, "dressme", node ->
+ {
+ final StatsSet set = parseAttributes(node);
+ forEach(node, "appearance", setNode -> set.putAll(parseAttributes(setNode)));
+ _dress.put(set.getInteger("itemId"), new DressMe(set));
+ }));
+ }
+
+ public DressMe getItemId(int itemId)
+ {
+ return _dress.get(itemId);
+ }
+
+ public Collection
+ {
+ return _dress.values();
+ }
+
+ 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/model/DressMe.java b/aCis_gameserver/java/net/sf/l2j/gameserver/model/DressMe.java
new file mode 100644
index 0000000..217ecc9
--- /dev/null
+++ b/aCis_gameserver/java/net/sf/l2j/gameserver/model/DressMe.java
@@ -0,0 +1,50 @@
+package net.sf.l2j.gameserver.model;
+
+import net.sf.l2j.commons.util.StatsSet;
+
+/**
+ * @author Williams
+ *
+ */
+public class DressMe
+{
+ private int _hairId;
+ private int _chestId;
+ private int _legsId;
+ private int _glovesId;
+ private int _feetId;
+
+ public DressMe(StatsSet set)
+ {
+ _hairId = set.getInteger("hairId", 0);
+ _chestId = set.getInteger("chestId", 0);
+ _legsId = set.getInteger("legsId", 0);
+ _glovesId = set.getInteger("glovesId", 0);
+ _feetId = set.getInteger("feetId", 0);
+ }
+
+ public int getHairId()
+ {
+ return _hairId;
+ }
+
+ public int getChestId()
+ {
+ return _chestId;
+ }
+
+ public int getLegsId()
+ {
+ return _legsId;
+ }
+
+ public int getGlovesId()
+ {
+ return _glovesId;
+ }
+
+ public int getFeetId()
+ {
+ return _feetId;
+ }
+}
\ No newline at end of file
diff --git a/aCis_datapack/data/xml/dressme.xml b/aCis_datapack/data/xml/dressme.xml
new file mode 100644
index 0000000..72e4b91
--- /dev/null
+++ b/aCis_datapack/data/xml/dressme.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
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..326b075
--- /dev/null
+++ b/aCis_gameserver/java/net/sf/l2j/gameserver/handler/itemhandlers/Skins.java
@@ -0,0 +1,34 @@
+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
+ *
+ */
+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(true);
+ player.broadcastPacket(new MagicSkillUse(player, player, 1036, 1, 4000, 0));
+ dress.getChestId();
+ dress.getHairId();
+ 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 36afaf0..7b6ee78 100644
--- a/aCis_gameserver/java/net/sf/l2j/gameserver/handler/ItemHandler.java
+++ b/aCis_gameserver/java/net/sf/l2j/gameserver/handler/ItemHandler.java
@@ -34,6 +34,7 @@
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;
@@ -82,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/network/serverpackets/UserInfo.java b/aCis_gameserver/java/net/sf/l2j/gameserver/network/serverpackets/UserInfo.java
index 4be8789..dea5360 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
@@ -2,8 +2,10 @@
import net.sf.l2j.Config;
import net.sf.l2j.gameserver.data.manager.CursedWeaponManager;
+import net.sf.l2j.gameserver.data.xml.DressMeData;
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,41 +57,44 @@
writeD(_player.getMaxLoad());
writeD(_player.getActiveWeaponItem() != null ? 40 : 20);
- writeD(_player.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_HAIRALL));
- writeD(_player.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_REAR));
- writeD(_player.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_LEAR));
- writeD(_player.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_NECK));
- writeD(_player.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_RFINGER));
- writeD(_player.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_LFINGER));
- 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(_player.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_BACK));
- writeD(_player.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_RHAND));
- writeD(_player.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_HAIR));
- writeD(_player.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_FACE));
-
- writeD(_player.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_HAIRALL));
- writeD(_player.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_REAR));
- writeD(_player.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_LEAR));
- writeD(_player.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_NECK));
- writeD(_player.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_RFINGER));
- writeD(_player.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_LFINGER));
- 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(_player.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_BACK));
- writeD(_player.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_RHAND));
- writeD(_player.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_HAIR));
- writeD(_player.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_FACE));
+ for (DressMe dress : DressMeData.getInstance().getDressme())
+ {
+ writeD(_player.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_HAIRALL));
+ writeD(_player.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_REAR));
+ writeD(_player.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_LEAR));
+ writeD(_player.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_NECK));
+ writeD(_player.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_RFINGER));
+ writeD(_player.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_LFINGER));
+ writeD(_player.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_HEAD));
+ writeD(_player.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_RHAND));
+ writeD(_player.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_LHAND));
+ writeD(_player.isDress() ? dress.getGlovesId() : _player.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_GLOVES));
+ writeD(_player.isDress() ? dress.getChestId() : _player.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_CHEST));
+ writeD(_player.isDress() ? dress.getLegsId() : _player.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_LEGS));
+ writeD(_player.isDress() ? dress.getFeetId() : _player.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_FEET));
+ writeD(_player.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_BACK));
+ writeD(_player.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_RHAND));
+ writeD(_player.isDress() ? dress.getHairId() : _player.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_HAIR));
+ writeD(_player.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_FACE));
+
+ writeD(_player.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_HAIRALL));
+ writeD(_player.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_REAR));
+ writeD(_player.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_LEAR));
+ writeD(_player.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_NECK));
+ writeD(_player.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_RFINGER));
+ writeD(_player.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_LFINGER));
+ writeD(_player.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_HEAD));
+ writeD(_player.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_RHAND));
+ writeD(_player.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_LHAND));
+ writeD(_player.isDress() ? dress.getGlovesId() : _player.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_GLOVES));
+ writeD(_player.isDress() ? dress.getChestId() : _player.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_CHEST));
+ writeD(_player.isDress() ? dress.getLegsId() : _player.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_LEGS));
+ writeD(_player.isDress() ? dress.getFeetId() : _player.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_FEET));
+ writeD(_player.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_BACK));
+ writeD(_player.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_RHAND));
+ writeD(_player.isDress() ? dress.getHairId() : _player.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_HAIR));
+ writeD(_player.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_FACE));
+ }
writeH(0x00);
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..e77b87a 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
@@ -2,7 +2,9 @@
import net.sf.l2j.Config;
import net.sf.l2j.gameserver.data.manager.CursedWeaponManager;
+import net.sf.l2j.gameserver.data.xml.DressMeData;
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,7 +31,7 @@
if (tmp != null && tmp.isGM())
canSeeInvis = true;
}
-
+
writeC(0x03);
writeD(_player.getX());
writeD(_player.getY());
@@ -41,18 +43,21 @@
writeD(_player.getAppearance().getSex().ordinal());
writeD((_player.getClassIndex() == 0) ? _player.getClassId().getId() : _player.getBaseClass());
- 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(_inv.getPaperdollItemId(Inventory.PAPERDOLL_BACK));
- writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_RHAND));
- writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_HAIR));
- writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_FACE));
+ for (DressMe dress : DressMeData.getInstance().getDressme())
+ {
+ 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(_player.isDress() ? dress.getGlovesId() : _inv.getPaperdollItemId(Inventory.PAPERDOLL_GLOVES));
+ writeD(_player.isDress() ? dress.getChestId() : _inv.getPaperdollItemId(Inventory.PAPERDOLL_CHEST));
+ writeD(_player.isDress() ? dress.getLegsId() : _inv.getPaperdollItemId(Inventory.PAPERDOLL_LEGS));
+ writeD(_player.isDress() ? dress.getFeetId() : _inv.getPaperdollItemId(Inventory.PAPERDOLL_FEET));
+ writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_BACK));
+ writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_RHAND));
+ writeD(_player.isDress() ? dress.getHairId() : _inv.getPaperdollItemId(Inventory.PAPERDOLL_HAIR));
+ writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_FACE));
+ }
writeH(0x00);
writeH(0x00);
diff --git a/aCis_gameserver/java/net/sf/l2j/gameserver/GameServer.java b/aCis_gameserver/java/net/sf/l2j/gameserver/GameServer.java
index 87b25b3..3961e1a 100644
--- a/aCis_gameserver/java/net/sf/l2j/gameserver/GameServer.java
+++ b/aCis_gameserver/java/net/sf/l2j/gameserver/GameServer.java
@@ -60,6 +60,7 @@
import net.sf.l2j.gameserver.data.xml.AugmentationData;
import net.sf.l2j.gameserver.data.xml.ClassBalanceData;
import net.sf.l2j.gameserver.data.xml.DoorData;
+import net.sf.l2j.gameserver.data.xml.DressMeData;
import net.sf.l2j.gameserver.data.xml.DropMonstersData;
import net.sf.l2j.gameserver.data.xml.EnchantData;
import net.sf.l2j.gameserver.data.xml.FishData;
@@ -205,6 +206,7 @@
RaidPointManager.getInstance();
SpreeKillsData.getInstance();
ItemRestrictionData.getInstance();
+ DressMeData.getInstance();
StringUtil.printSection("Community server");
if (Config.ENABLE_COMMUNITY_BOARD) // Forums has to be loaded before clan data
diff --git a/aCis_gameserver/java/net/sf/l2j/gameserver/model/actor/Player.java b/aCis_gameserver/java/net/sf/l2j/gameserver/model/actor/Player.java
index 7ae7a5a..c675e89 100644
--- a/aCis_gameserver/java/net/sf/l2j/gameserver/model/actor/Player.java
+++ b/aCis_gameserver/java/net/sf/l2j/gameserver/model/actor/Player.java
@@ -420,6 +420,7 @@
private boolean _isNoble;
private boolean _isHero;
private boolean _isVip;
+ private boolean _isDress;
private boolean _isEquip;
private boolean _isWepEquip;
@@ -7510,6 +7510,16 @@
sendSkillList();
}
+ public boolean isDress()
+ {
+ return _isDress;
+ }
+
+ public void setDress(boolean val)
+ {
+ _isDress = val;
+ }
+