Mod System DressMe

Iniciado por Jerry, Jun 23, 2025, 09:58 PM

Tema anterior - Siguiente tema

Jerry

🔥 Presentación del Sistema DressMe Custom


Te presento un sistema DressMe completamente personalizado, desarrollado para DreamV2, inspirado en los mejores servidores y mejorado con características únicas que garantizan máximo rendimiento, personalización y efectos visuales impresionantes.

✨ Características Principales
  • ✅ Aplicación de apariencia de armas/armaduras sin modificar el ítem equipado
  • ✅ Compatibilidad con todo tipo de armas/armaduras (ej: skins de arco solo visibles con arcos equipados)
  • ✅ Remoción automática del visual al desequipar partes del set
  • ✅ Efectos visuales (skills) con soporte para:

  • ▪ Aplicación única o recurrente

  • ▪ Intervalos configurables via XML

  • ▪ Remoción automática al desactivar el visual
  • ✅ Interfaz limpia y diseño modular para fácil expansión

📦 Ejemplo de Configuración XML
<?xml version="1.0" encoding="UTF-8"?>
<dressMeList>
  <dress skillId="9100" name="Armadura Dragónica" type="ARMOR" isVip="false">
    <visualSet chest="6379" legs="0" gloves="6380" feet="6381" helmet="6841"/>
    <visualEffect skillId="445" level="1" recurring="true" interval="35"/>
  </dress>

  <dress skillId="9102" name="Armadura Estilo Capa" type="CLOAK" isVip="false">
    <visualSet chest="7000" legs="0" gloves="0" feet="0" helmet="0"/>
    <visualEffect skillId="10005" level="1" recurring="false"/>
  </dress>
 
  <dress skillId="9103" name="Arma Estilo Valakas" type="WEAPON" isVip="false">
    <visualWep type="bow" rhand="7575" lhand="0" lrhand="0"/>
    <visualEffect skillId="10005" level="1" recurring="false"/>
  </dress>
</dressMeList>

📸 Capturas & Vídeo


🛠� Detalles Técnicos
• Desarrollado sobre L2J DreamV2
• Integración directa con L2PcInstance, Inventory y SkillTable
• Sistema centralizado de gestión mediante DressMeEffectManager
• Programación segura de efectos recurrentes
• Totalmente compatible con operaciones en segundo plano


📂 Instalación
Incluye todo lo necesario para implementar:
  • Clases principales (DressMeHolder, DressMeEffectManager)
  • Modificaciones en L2PcInstance
  • Archivos XML de configuración
  • Soporte para expansión de visuals

📎 Descarga
Enlace de Descarga

diff --git a/game/config/hexid.txt b/game/config/hexid.txt
index abfb004..9d92619 100644
--- a/game/config/hexid.txt
+++ b/game/config/hexid.txt
@@ -1,4 +1,4 @@
-#the hexID to auth into login
-#Thu Jun 05 09:42:23 BRT 2025
-HexID=-799cd2897113eca3680c51a702a74c7a
-ServerID=1
+#the hexID to auth into login
+#Fri Jun 06 07:37:15 BRT 2025
+HexID=-799cd2897113eca3680c51a702a74c7a
+ServerID=1
diff --git a/game/data/xml/DressMeData.xml b/game/data/xml/DressMeData.xml
new file mode 100644
index 0000000..d849fe3
--- /dev/null
+++ b/game/data/xml/DressMeData.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<dressMeList>
+  <dress skillId="9100" name="Draconic Armor" type="ARMOR" isVip="false" >
+    <visualSet chest="6379" legs="0" gloves="6380" feet="6381" helmet="6841" />
+    <visualEffect skillId="445" level="1" recurring="true" interval="35" />
+  </dress>
+
+  <dress skillId="9102" name="Cloak Style Armor" type="CLOAK" isVip="false">
+    <visualSet chest="7000" legs="0" gloves="0" feet="0" helmet="0" />
+    <visualEffect skillId="10005" level="1" recurring="false" />
+  </dress>

+   <dress skillId="9103" name="Valakas Style Weapon" type="WEAPON" isVip="false">
+    <visualWep type="bow" rhand="7575" lhand="0" lrhand="0" />
+    <visualEffect skillId="10005" level="1" recurring="false" />
+  </dress>
+</dressMeList>
\ No newline at end of file
diff --git a/game/data/xml/stats/skills/9000-9099.xml b/game/data/xml/stats/skills/9000-9099.xml
index 756b986..fd30a78 100644
--- a/game/data/xml/stats/skills/9000-9099.xml
+++ b/game/data/xml/stats/skills/9000-9099.xml
@@ -84,4 +84,52 @@
             <add val="#lvl" order="0x10" stat="STR" />
         </for>
     </skill>
+    <skill id="9100" levels="1" name="Visual Style Draconic">
+        <set name="mpConsume" val="100" />
+        <set name="target" val="TARGET_SELF" />
+        <set name="skillType" val="DRESSME" />
+        <set name="operateType" val="OP_ACTIVE" />
+        <set name="reuseDelay" val="23000" />
+        <set name="hitTime" val="1000" />
+    </skill>
+    <skill id="9101" levels="1" name="Visual Style Imperial">
+        <set name="mpConsume" val="100" />
+        <set name="target" val="TARGET_SELF" />
+        <set name="skillType" val="DRESSME" />
+        <set name="operateType" val="OP_ACTIVE" />
+        <set name="reuseDelay" val="23000" />
+        <set name="hitTime" val="1000" />
+    </skill>
+    <skill id="9102" levels="1" name="Visual Style Majo">
+        <set name="mpConsume" val="100" />
+        <set name="target" val="TARGET_SELF" />
+        <set name="skillType" val="DRESSME" />
+        <set name="operateType" val="OP_ACTIVE" />
+        <set name="reuseDelay" val="23000" />
+        <set name="hitTime" val="1000" />
+    </skill>
+    <skill id="9103" levels="1" name="Visual Style Titanium">
+        <set name="mpConsume" val="100" />
+        <set name="target" val="TARGET_SELF" />
+        <set name="skillType" val="DRESSME" />
+        <set name="operateType" val="OP_ACTIVE" />
+        <set name="reuseDelay" val="23000" />
+        <set name="hitTime" val="1000" />
+    </skill>
+    <skill id="9104" levels="1" name="Visual Style Titanium">
+        <set name="mpConsume" val="100" />
+        <set name="target" val="TARGET_SELF" />
+        <set name="skillType" val="DRESSME" />
+        <set name="operateType" val="OP_ACTIVE" />
+        <set name="reuseDelay" val="23000" />
+        <set name="hitTime" val="1000" />
+    </skill>
+    <skill id="9105" levels="1" name="Visual Style Titanium">
+        <set name="mpConsume" val="100" />
+        <set name="target" val="TARGET_SELF" />
+        <set name="skillType" val="DRESSME" />
+        <set name="operateType" val="OP_ACTIVE" />
+        <set name="reuseDelay" val="23000" />
+        <set name="hitTime" val="1000" />
+    </skill>
 </list>
\ No newline at end of file
diff --git a/java/com/dream/game/L2GameServer.java b/java/com/dream/game/L2GameServer.java
index 5c7eb79..811e567 100644
--- a/java/com/dream/game/L2GameServer.java
+++ b/java/com/dream/game/L2GameServer.java
@@ -25,6 +25,7 @@
 import com.dream.game.datatables.xml.CharTemplateTable;
 import com.dream.game.datatables.xml.ClanLeveLUpPricesData;
 import com.dream.game.datatables.xml.DoorTable;
+import com.dream.game.datatables.xml.DressMeData;
 import com.dream.game.datatables.xml.ExtractableItemsData;
 import com.dream.game.datatables.xml.FishTable;
 import com.dream.game.datatables.xml.GreetingData;
@@ -137,6 +138,7 @@
 import com.dream.game.scripting.L2ScriptEngineManager;
 import com.dream.game.taskmanager.AttackStanceTaskManager;
 import com.dream.game.taskmanager.DecayTaskManager;
+import com.dream.game.taskmanager.GreetingManager;
 import com.dream.game.taskmanager.KnownListUpdateTaskManager;
 import com.dream.game.taskmanager.LeakTaskManager;
 import com.dream.game.taskmanager.SQLQueue;
@@ -577,11 +579,15 @@
        
         Console.printSection("Greeter Data");
         GreetingData.getInstance();
+        GreetingManager.getInstance().start();
        
         Console.printSection("Reset Data");
         ResetData.getInstance();
         ResetManager.getInstance().start();
        
+        Console.printSection("DressMe Data");
+        DressMeData.getInstance();
+       
         Console.printSection("Oficial Event's");
         Cristmas.startEvent();
         EventMedals.startEvent();
diff --git a/java/com/dream/game/datatables/xml/DressMeData.java b/java/com/dream/game/datatables/xml/DressMeData.java
new file mode 100644
index 0000000..57f9100
--- /dev/null
+++ b/java/com/dream/game/datatables/xml/DressMeData.java
@@ -0,0 +1,71 @@
+package com.dream.game.datatables.xml;
+
+import com.dream.data.xml.IXmlReader;
+import com.dream.data.xml.StatSet;
+import com.dream.game.model.holders.DressMeEffectHolder;
+import com.dream.game.model.holders.DressMeHolder;
+
+import java.nio.file.Path;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.w3c.dom.Document;
+
+public class DressMeData implements IXmlReader
+{
+    private final List<DressMeHolder> _entries = new ArrayList<>();
+   
+    public DressMeData()
+    {
+        load();
+    }
+   
+    public void reload()
+    {
+        _entries.clear();
+        load();
+    }
+   
+    @Override
+    public void load()
+    {
+        parseFile("./data/xml/DressMeData.xml");
+        LOGGER.info("Loaded {" + _entries.size() + "} DressMe entries.");
+    }
+   
+    @Override
+    public void parseDocument(Document doc, Path path)
+    {
+        forEach(doc, "dressMeList", listNode -> forEach(listNode, "dress", dressNode -> {
+            final StatSet attrs = parseAttributes(dressNode);
+           
+            final DressMeHolder holder = new DressMeHolder(attrs);
+           
+            forEach(dressNode, "visualSet", setNode -> holder.setVisualSet(parseAttributes(setNode)));
+            forEach(dressNode, "visualWep", wepNode -> holder.setWeaponSet(parseAttributes(wepNode)));
+            forEach(dressNode, "visualEffect", fxNode -> holder.setEffect(new DressMeEffectHolder(parseAttributes(fxNode))));
+           
+            _entries.add(holder);
+        }));
+    }
+   
+    public List<DressMeHolder> getEntries()
+    {
+        return _entries;
+    }
+   
+    public DressMeHolder getBySkillId(int skillId)
+    {
+        return _entries.stream().filter(d -> d.getSkillId() == skillId).findFirst().orElse(null);
+    }
+   
+    public static DressMeData getInstance()
+    {
+        return SingletonHolder.INSTANCE;
+    }
+   
+    private static class SingletonHolder
+    {
+        protected static final DressMeData INSTANCE = new DressMeData();
+    }
+}
\ No newline at end of file

+package com.dream.game.datatables.xml;
+
+import com.dream.data.xml.IXmlReader;
+import com.dream.data.xml.StatSet;
+import com.dream.game.model.holders.GreetingHolder;
+
+import java.nio.file.Path;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.w3c.dom.Document;
+
+public class GreetingData implements IXmlReader
+{
+    private final Map<Integer, GreetingHolder> _greetings = new HashMap<>();
+   
+    public GreetingData()
+    {
+        load();
+    }
+   
+    @Override
+    public void load()
+    {
+        parseFile("./data/xml/greeting.xml");
+        LOGGER.info(getClass().getSimpleName() + ": Loaded " + _greetings.size() + " greetings.");
+       
+    }
+   
+    @Override
+    public void parseDocument(Document doc, Path path)
+    {
+        forEach(doc, "list", listNode -> {
+            forEach(listNode, "greeting", greetNode -> {
+                StatSet set = new StatSet(parseAttributes(greetNode));
+                GreetingHolder holder = new GreetingHolder(set);
+                _greetings.put(holder.getCastleId(), holder);
+            });
+        });
+    }
+   
+    public GreetingHolder getGreeting(int castleId)
+    {
+        return _greetings.get(castleId);
+    }
+   
+    public static GreetingData getInstance()
+    {
+        return SingletonHolder._instance;
+    }
+   
+    private static class SingletonHolder
+    {
+        protected static final GreetingData _instance = new GreetingData();
+    }
+}
diff --git a/java/com/dream/game/handler/skill/applySkins.java b/java/com/dream/game/handler/skill/applySkins.java
new file mode 100644
index 0000000..a765c61
--- /dev/null
+++ b/java/com/dream/game/handler/skill/applySkins.java
@@ -0,0 +1,65 @@
+package com.dream.game.handler.skill;
+
+import com.dream.game.datatables.xml.DressMeData;
+import com.dream.game.handler.ISkillHandler;
+import com.dream.game.model.L2Skill;
+import com.dream.game.model.actor.L2Character;
+import com.dream.game.model.actor.instance.L2PcInstance;
+import com.dream.game.model.holders.DressMeHolder;
+import com.dream.game.templates.skills.L2SkillType;
+
+public class applySkins implements ISkillHandler
+{
+    private static final L2SkillType[] SKILL_IDS =
+    {
+        L2SkillType.DRESSME
+    };
+   
+    @Override
+    public L2SkillType[] getSkillIds()
+    {
+        return SKILL_IDS;
+    }
+   
+    @Override
+    public void useSkill(L2Character activeChar, L2Skill skill, L2Character... targets)
+    {
+        if (!(activeChar instanceof L2PcInstance))
+            return;
+       
+        L2PcInstance player = (L2PcInstance) activeChar;
+        DressMeHolder dress = DressMeData.getInstance().getBySkillId(skill.getId());
+       
+        if (dress == null)
+        {
+            player.sendMessage("Visual not found.");
+            return;
+        }
+        final long cooldown = 10000;
+       
+        long currentTime = System.currentTimeMillis();
+        if (currentTime - player.getLastDressMeSummonTime() < cooldown)
+        {
+            player.sendMessage("You need to wait before summoning another DressMe.");
+            return;
+        }
+        if (player.getArmorSkin() != null && player.getArmorSkin().getSkillId() == skill.getId())
+        {
+            player.sendMessage("This armor look is already active.");
+            player.removeDressMeArmor();
+            return;
+        }
+       
+        if (player.getWeaponSkin() != null && player.getWeaponSkin().getSkillId() == skill.getId())
+        {
+            player.sendMessage("This weapon look is already active.");
+            player.removeDressMeWeapon();
+            return;
+        }
+
+       
+        player.setLastDressMeSummonTime(currentTime);
+        player.applyDressMe(dress);
+        player.broadcastUserInfo();
+    }
+}
\ No newline at end of file
diff --git a/java/com/dream/game/model/DressMeEffectManager.java b/java/com/dream/game/model/DressMeEffectManager.java
new file mode 100644
index 0000000..eaa1a5a
--- /dev/null
+++ b/java/com/dream/game/model/DressMeEffectManager.java
@@ -0,0 +1,100 @@
+package com.dream.game.model;
+
+import com.dream.game.datatables.xml.SkillTable;
+import com.dream.game.model.actor.instance.L2PcInstance;
+import com.dream.game.model.holders.DressMeHolder;
+import com.dream.game.model.world.L2World;
+import com.dream.game.network.ThreadPoolManager;
+import com.dream.game.network.serverpackets.MagicSkillUse;
+import com.dream.game.util.Broadcast;
+
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ScheduledFuture;
+
+public class DressMeEffectManager
+{
+   
+    private final Map<Integer, ActiveEffect> _activeEffects = new ConcurrentHashMap<>();
+   
+    private static class ActiveEffect
+    {
+        private final int _skillId;
+        private final ScheduledFuture<?> _task;
+       
+        public ActiveEffect(int skillId, ScheduledFuture<?> task)
+        {
+            _skillId = skillId;
+            _task = task;
+        }
+    }
+   
+    private DressMeEffectManager()
+    {
+    }
+   
+    public void startEffect(L2PcInstance player, DressMeHolder skin)
+    {
+        if (player == null || skin.getEffect() == null)
+            return;
+       
+        final int playerId = player.getObjectId();
+        final int skillId = skin.getEffect().getSkillId();
+        final int skillLevel = skin.getEffect().getLevel();
+        final int interval = skin.getEffect().getInterval(); // em segundos
+       
+        stopEffect(player); // Cancela qualquer anterior
+       
+        applySkill(player, skillId, skillLevel); // Aplica imediatamente
+       
+        ScheduledFuture<?> task = ThreadPoolManager.getInstance().scheduleGeneralAtFixedRate(() -> {
+           
+            L2PcInstance checkOnplayer = L2World.getInstance().getPlayer(player.getObjectId());
+           
+            if (checkOnplayer != null)
+            {
+                applySkill(player, skillId, skillLevel);
+            }
+            else
+            {
+                stopEffect(player);
+            }
+           
+        }, interval * 1000L, interval * 1000L);
+       
+        _activeEffects.put(playerId, new ActiveEffect(skillId, task));
+    }
+   
+    public void stopEffect(L2PcInstance player)
+    {
+        if (player == null)
+            return;
+       
+        ActiveEffect effect = _activeEffects.remove(player.getObjectId());
+        if (effect != null)
+        {
+            effect._task.cancel(false);
+            player.stopSkillEffects(effect._skillId); // Remove o efeito visual
+        }
+    }
+   
+    private static void applySkill(L2PcInstance player, int skillId, int skillLevel)
+    {
+        L2Skill skill = SkillTable.getInstance().getInfo(skillId, skillLevel);
+        if (skill != null)
+        {
+            Broadcast.toSelfAndKnownPlayers(player, new MagicSkillUse(player, player, skill.getId(), 1, 0, 0, false));
+           
+        }
+    }
+   
+    public static DressMeEffectManager getInstance()
+    {
+        return SingletonHolder.INSTANCE;
+    }
+   
+    private static class SingletonHolder
+    {
+        private static final DressMeEffectManager INSTANCE = new DressMeEffectManager();
+    }
+}
\ No newline at end of file
diff --git a/java/com/dream/game/model/actor/instance/L2PcInstance.java b/java/com/dream/game/model/actor/instance/L2PcInstance.java
index 3bfb0de..eb2e993 100644
--- a/java/com/dream/game/model/actor/instance/L2PcInstance.java
+++ b/java/com/dream/game/model/actor/instance/L2PcInstance.java
@@ -51,6 +51,7 @@
 import com.dream.game.manager.SiegeManager;
 import com.dream.game.model.BlockList;
 import com.dream.game.model.CursedWeapon;
+import com.dream.game.model.DressMeEffectManager;
 import com.dream.game.model.FishData;
 import com.dream.game.model.L2Clan;
 import com.dream.game.model.L2ClanMember;
@@ -101,6 +102,7 @@
 import com.dream.game.model.entity.siege.Fort;
 import com.dream.game.model.entity.siege.FortSiege;
 import com.dream.game.model.entity.siege.Siege;
+import com.dream.game.model.holders.DressMeHolder;
 import com.dream.game.model.itemcontainer.Inventory;
 import com.dream.game.model.itemcontainer.ItemContainer;
 import com.dream.game.model.itemcontainer.PcFreight;
@@ -13848,4 +13850,148 @@
         _scriptValues.clear();
     }
    
+    private long _lastDressMeSummonTime;
+   
+    public long getLastDressMeSummonTime()
+    {
+        return _lastDressMeSummonTime;
+    }
+   
+    public void setLastDressMeSummonTime(long time)
+    {
+        _lastDressMeSummonTime = time;
+    }
+   
+    private boolean _isDressMe;
+   
+    public boolean isDressMe()
+    {
+        return _isDressMe;
+    }
+   
+    public void setDressMe(boolean val)
+    {
+        _isDressMe = val;
+    }
+   
+    private DressMeHolder _armorSkin;
+    private DressMeHolder _weaponSkin;
+   
+    public DressMeHolder getArmorSkin()
+    {
+        return _armorSkin;
+    }
+   
+    public void setArmorSkin(DressMeHolder skin)
+    {
+        _armorSkin = skin;
+    }
+   
+    public DressMeHolder getWeaponSkin()
+    {
+        return _weaponSkin;
+    }
+   
+    public void setWeaponSkin(DressMeHolder skin)
+    {
+        _weaponSkin = skin;
+    }
+   
+    public void setDressVisual(int chest, int legs, int gloves, int feet, int helmet)
+    {
+        Inventory inv = getInventory();
+       
+        if (chest > 0)
+            inv.setPaperdollItemVisual(Inventory.PAPERDOLL_CHEST);
+        if (legs > 0)
+            inv.setPaperdollItemVisual(Inventory.PAPERDOLL_LEGS);
+        if (gloves > 0)
+            inv.setPaperdollItemVisual(Inventory.PAPERDOLL_GLOVES);
+        if (feet > 0)
+            inv.setPaperdollItemVisual(Inventory.PAPERDOLL_FEET);
+        if (helmet > 0)
+            inv.setPaperdollItemVisual(Inventory.PAPERDOLL_HEAD);
+       
+        broadcastUserInfo();
+    }
+   
+    public void setWeaponVisual(int rhand, int lhand, int lrhand)
+    {
+        Inventory inv = getInventory();
+       
+        if (rhand > 0)
+            inv.setPaperdollItemVisual(Inventory.PAPERDOLL_RHAND);
+        if (lhand > 0)
+            inv.setPaperdollItemVisual(Inventory.PAPERDOLL_LHAND);
+        if (lrhand > 0)
+            inv.setPaperdollItemVisual(Inventory.PAPERDOLL_LRHAND);
+       
+        broadcastUserInfo();
+    }
+   
+    public void applyDressMe(DressMeHolder skin)
+    {
+        if (skin == null)
+            return;
+       
+        switch (skin.getType())
+        {
+            case ARMOR:
+            case CLOAK:
+                setArmorSkin(skin);
+                setDressVisual(skin.getChestId(), skin.getLegsId(), skin.getGlovesId(), skin.getFeetId(), skin.getHelmetId());
+                break;
+           
+            case WEAPON:
+                setWeaponSkin(skin);
+                setWeaponVisual(skin.getRightHandId(), skin.getLeftHandId(), skin.getTwoHandId());
+                break;
+        }
+       
+        setDressMe(true);
+       
+        // Aplica efeito visual, se houver
+        if (skin.getEffect() != null && skin.getEffect().getSkillId() > 0)
+        {
+            if (skin.getEffect().isRecurring())
+            {
+                DressMeEffectManager.getInstance().startEffect(this, skin);
+            }
+        }
+    }
+   
+    public void removeDressMeArmor()
+    {
+        DressMeEffectManager.getInstance().stopEffect(this);
+        _armorSkin = null;
+        Inventory inv = getInventory();
+        inv.setPaperdollItemVisual(Inventory.PAPERDOLL_CHEST);
+        inv.setPaperdollItemVisual(Inventory.PAPERDOLL_LEGS);
+        inv.setPaperdollItemVisual(Inventory.PAPERDOLL_GLOVES);
+        inv.setPaperdollItemVisual(Inventory.PAPERDOLL_FEET);
+        inv.setPaperdollItemVisual(Inventory.PAPERDOLL_HEAD);
+        broadcastUserInfo();
+        checkIfNoDressMe();
+    }
+   
+    public void removeDressMeWeapon()
+    {
+        DressMeEffectManager.getInstance().stopEffect(this);
+        _weaponSkin = null;
+        Inventory inv = getInventory();
+        inv.setPaperdollItemVisual(Inventory.PAPERDOLL_RHAND);
+        inv.setPaperdollItemVisual(Inventory.PAPERDOLL_LHAND);
+        inv.setPaperdollItemVisual(Inventory.PAPERDOLL_LRHAND);
+        broadcastUserInfo();
+        checkIfNoDressMe();
+    }
+   
+    private void checkIfNoDressMe()
+    {
+        if (_armorSkin == null && _weaponSkin == null)
+        {
+            setDressMe(false);
+
+        }
+    }
 }
\ No newline at end of file
diff --git a/java/com/dream/game/model/holders/DressMeEffectHolder.java b/java/com/dream/game/model/holders/DressMeEffectHolder.java
new file mode 100644
index 0000000..c36824c
--- /dev/null
+++ b/java/com/dream/game/model/holders/DressMeEffectHolder.java
@@ -0,0 +1,39 @@
+package com.dream.game.model.holders;
+
+import com.dream.data.xml.StatSet;
+
+public class DressMeEffectHolder
+{
+    private final int _skillId;
+    private final int _level;
+    private final boolean _recurring;
+    private final int _interval;
+   
+    public DressMeEffectHolder(StatSet set)
+    {
+        _skillId = set.getInteger("skillId", 0);
+        _level = set.getInteger("level", 1);
+        _recurring = set.getBool("recurring", false);
+        _interval = set.getInteger("interval", 60);
+    }
+   
+    public int getSkillId()
+    {
+        return _skillId;
+    }
+   
+    public int getLevel()
+    {
+        return _level;
+    }
+   
+    public boolean isRecurring()
+    {
+        return _recurring;
+    }
+   
+    public int getInterval()
+    {
+        return _interval;
+    }
+}
\ No newline at end of file
diff --git a/java/com/dream/game/model/holders/DressMeHolder.java b/java/com/dream/game/model/holders/DressMeHolder.java
new file mode 100644
index 0000000..d503a32
--- /dev/null
+++ b/java/com/dream/game/model/holders/DressMeHolder.java
@@ -0,0 +1,117 @@
+package com.dream.game.model.holders;
+
+import com.dream.data.xml.StatSet;
+
+public class DressMeHolder
+{
+    private final int _skillId;
+    private final String _name;
+    private final boolean _isVip;
+    private final DressMeVisualType _type;
+   
+    private int _chestId, _legsId, _glovesId, _feetId, _helmetId;
+    private int _rHandId, _lHandId, _lrHandId;
+    private String _weaponTypeVisual;
+   
+    private DressMeEffectHolder _effect;
+   
+    public DressMeHolder(StatSet set)
+    {
+        _skillId = set.getInteger("skillId");
+        _name = set.getString("name", "");
+        _type = DressMeVisualType.valueOf(set.getString("type", "ARMOR"));
+        _isVip = set.getBool("isVip", false);
+    }
+   
+    public void setVisualSet(StatSet set)
+    {
+        _chestId = set.getInteger("chest", 0);
+        _legsId = set.getInteger("legs", 0);
+        _glovesId = set.getInteger("gloves", 0);
+        _feetId = set.getInteger("feet", 0);
+        _helmetId = set.getInteger("helmet", 0);
+    }
+   
+    public void setWeaponSet(StatSet set)
+    {
+        _rHandId = set.getInteger("rhand", 0);
+        _lHandId = set.getInteger("lhand", 0);
+        _lrHandId = set.getInteger("lrhand", 0);
+        _weaponTypeVisual = set.getString("type", "");
+    }
+   
+    public void setEffect(DressMeEffectHolder effect)
+    {
+        _effect = effect;
+    }
+   
+    public int getSkillId()
+    {
+        return _skillId;
+    }
+   
+    public String getName()
+    {
+        return _name;
+    }
+   
+    public boolean isVip()
+    {
+        return _isVip;
+    }
+   
+    public DressMeVisualType getType()
+    {
+        return _type;
+    }
+   
+    public int getChestId()
+    {
+        return _chestId;
+    }
+   
+    public int getLegsId()
+    {
+        return _legsId;
+    }
+   
+    public int getGlovesId()
+    {
+        return _glovesId;
+    }
+   
+    public int getFeetId()
+    {
+        return _feetId;
+    }
+   
+    public int getHelmetId()
+    {
+        return _helmetId;
+    }
+   
+    public String getWeaponTypeVisual()
+    {
+        return _weaponTypeVisual;
+    }
+   
+    public int getRightHandId()
+    {
+        return _rHandId;
+    }
+   
+    public int getLeftHandId()
+    {
+        return _lHandId;
+    }
+   
+    public int getTwoHandId()
+    {
+        return _lrHandId;
+    }
+   
+    public DressMeEffectHolder getEffect()
+    {
+        return _effect;
+    }
+}
diff --git a/java/com/dream/game/model/holders/DressMeVisualType.java b/java/com/dream/game/model/holders/DressMeVisualType.java
new file mode 100644
index 0000000..53d25ad
--- /dev/null
+++ b/java/com/dream/game/model/holders/DressMeVisualType.java
@@ -0,0 +1,8 @@
+package com.dream.game.model.holders;
+
+public enum DressMeVisualType
+{
+    ARMOR,
+    CLOAK,
+    WEAPON
+}
\ No newline at end of file
diff --git a/java/com/dream/game/model/itemcontainer/Inventory.java b/java/com/dream/game/model/itemcontainer/Inventory.java
index 3610144..95549f6 100644
--- a/java/com/dream/game/model/itemcontainer/Inventory.java
+++ b/java/com/dream/game/model/itemcontainer/Inventory.java
@@ -629,6 +629,7 @@
         return -1;
     }
 
+   
     private final L2ItemInstance[] _paperdoll;
 
     private final List<PaperdollListener> _paperdollListeners;
@@ -1262,6 +1263,66 @@
             _paperdollListeners.get(2).notifyEquiped(i, getPaperdollItem(i));
         }
     }
+   
+    public void setPaperdollItemVisual(int slot)
+    {
+        L2ItemInstance item = getPaperdollItem(slot);
+        L2ItemInstance old = _paperdoll[slot];
+        if (old != item)
+        {
+            if (old != null)
+            {
+                _paperdoll[slot] = null;
+                old.setLocation(getBaseLocation());
+                old.setLastChange(L2ItemInstance.MODIFIED);
+
+                int mask = 0;
+                for (int i = 0; i < PAPERDOLL_LRHAND; i++)
+                {
+                    L2ItemInstance pi = _paperdoll[i];
+                    if (pi != null)
+                    {
+                        mask |= pi.getItem().getItemMask();
+                    }
+                }
+                _wearedMask = mask;
+
+                for (PaperdollListener temp : _paperdollListeners)
+                {
+                    try
+                    {
+                        temp.notifyUnequiped(slot, old);
+                    }
+                    catch (Exception e)
+                    {
+                        e.printStackTrace();
+                    }
+                }
+            }
+
+            if (item != null)
+            {
+                _paperdoll[slot] = item;
+                item.setLocation(getEquipLocation(), slot);
+                item.setLastChange(L2ItemInstance.MODIFIED);
+                _wearedMask |= item.getItem().getItemMask();
+                for (PaperdollListener temp : _paperdollListeners)
+                {
+                    temp.notifyEquiped(slot, item);
+                }
+            }
+        }
+
+
+        L2PcInstance owner = getOwner() instanceof L2PcInstance ? (L2PcInstance) getOwner() : null;
+        if (owner != null)
+        {
+            owner.broadcastUserInfo();
+            owner.broadcastFullInfoImpl();
+        }
+    }
+
+   
 
     public synchronized L2ItemInstance setPaperdollItem(int slot, L2ItemInstance item)
     {
diff --git a/java/com/dream/game/network/serverpackets/CharInfo.java b/java/com/dream/game/network/serverpackets/CharInfo.java
index 080bbec..c98e25a 100644
--- a/java/com/dream/game/network/serverpackets/CharInfo.java
+++ b/java/com/dream/game/network/serverpackets/CharInfo.java
@@ -3,10 +3,13 @@
 import com.dream.game.datatables.sql.NpcTable;
 import com.dream.game.manager.CursedWeaponsManager;
 import com.dream.game.model.actor.L2Decoy;
+import com.dream.game.model.actor.instance.L2ItemInstance;
 import com.dream.game.model.actor.instance.L2PcInstance;
+import com.dream.game.model.holders.DressMeHolder;
 import com.dream.game.model.itemcontainer.Inventory;
 import com.dream.game.skills.AbnormalEffect;
 import com.dream.game.templates.chars.L2NpcTemplate;
+import com.dream.game.templates.item.L2Weapon;
 
 import org.apache.log4j.Logger;
 
@@ -194,18 +197,70 @@
                     writeD(_activeChar.getBaseClass());
                 }
                
-                writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_HAIRALL));
+                DressMeHolder armorSkin = _activeChar.getArmorSkin();
+                DressMeHolder weaponSkin = _activeChar.getWeaponSkin();
+               
+                int hairall = _inv.getPaperdollItemId(Inventory.PAPERDOLL_HAIRALL);
+                writeD((armorSkin != null && hairall > 0 && armorSkin.getHelmetId() > 0) ? armorSkin.getHelmetId() : 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));
+               
+               
+                int rhand = _inv.getPaperdollItemId(Inventory.PAPERDOLL_RHAND);
+                int lhand = _inv.getPaperdollItemId(Inventory.PAPERDOLL_LHAND);
+               
+                if (_activeChar.isDressMe() && weaponSkin != null)
+                {
+                    String equippedWeaponType = "";
+                    L2ItemInstance weaponInstance = _activeChar.getInventory().getPaperdollItem(Inventory.PAPERDOLL_RHAND);
+                   
+                    if (weaponInstance != null && weaponInstance.getItem() instanceof L2Weapon)
+                    {
+                        L2Weapon weapon = (L2Weapon) weaponInstance.getItem();
+                        equippedWeaponType = weapon.getItemType().toString().toLowerCase();
+                    }
+                   
+                    if (equippedWeaponType.equalsIgnoreCase(weaponSkin.getWeaponTypeVisual()))
+                    {
+                       
+                        if (weaponSkin.getTwoHandId() > 0)
+                        {
+                            rhand = weaponSkin.getTwoHandId();
+                            lhand = 0;
+                        }
+                        else
+                        {
+                            if (weaponSkin.getRightHandId() > 0 && rhand > 0)
+                                rhand = weaponSkin.getRightHandId();
+                            if (weaponSkin.getLeftHandId() > 0 && lhand > 0)
+                                lhand = weaponSkin.getLeftHandId();
+                        }
+                       
+                    }
+                }
+               
+                writeD(rhand); // PaperdollItemId RHAND
+                writeD(lhand); // PaperdollItemId LHAND
+
+               
+                int glovesOId = _inv.getPaperdollItemId(Inventory.PAPERDOLL_GLOVES);
+                int chestOId = _inv.getPaperdollItemId(Inventory.PAPERDOLL_CHEST);
+                int legsOId = _inv.getPaperdollItemId(Inventory.PAPERDOLL_LEGS);
+                int feetOId = _inv.getPaperdollItemId(Inventory.PAPERDOLL_FEET);
+               
+                writeD((armorSkin != null && glovesOId > 0 && armorSkin.getGlovesId() > 0) ? armorSkin.getGlovesId() : glovesOId);
+                writeD((armorSkin != null && chestOId > 0 && armorSkin.getChestId() > 0) ? armorSkin.getChestId() : chestOId);
+                writeD((armorSkin != null && legsOId > 0 && armorSkin.getLegsId() > 0) ? armorSkin.getLegsId() : legsOId);
+                writeD((armorSkin != null && feetOId > 0 && armorSkin.getFeetId() > 0) ? armorSkin.getFeetId() : feetOId);
+               
                 writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_BACK));
-                writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_RHAND));
-                writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_HAIR));
-                writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_FACE));
+                writeD(rhand); // PaperdollItemId RHAND
+               
+                int hair = _inv.getPaperdollItemId(Inventory.PAPERDOLL_HAIR);
+                writeD((armorSkin != null && hair > 0 && armorSkin.getHelmetId() > 0) ? armorSkin.getHelmetId() : hair);
+               
+                int face = _inv.getPaperdollItemId(Inventory.PAPERDOLL_FACE);
+                writeD((armorSkin != null && face > 0 && armorSkin.getHelmetId() > 0) ? armorSkin.getHelmetId() : face);
                
                 writeH(0x00);
                 writeH(0x00);
\ No newline at end of file
diff --git a/java/com/dream/game/network/serverpackets/UserInfo.java b/java/com/dream/game/network/serverpackets/UserInfo.java
index adcddcf..c32a4c0 100644
--- a/java/com/dream/game/network/serverpackets/UserInfo.java
+++ b/java/com/dream/game/network/serverpackets/UserInfo.java
@@ -3,9 +3,12 @@
 import com.dream.game.datatables.sql.NpcTable;
 import com.dream.game.manager.CursedWeaponsManager;
 import com.dream.game.model.actor.L2Summon;
+import com.dream.game.model.actor.instance.L2ItemInstance;
 import com.dream.game.model.actor.instance.L2PcInstance;
+import com.dream.game.model.holders.DressMeHolder;
 import com.dream.game.model.itemcontainer.Inventory;
 import com.dream.game.templates.chars.L2NpcTemplate;
+import com.dream.game.templates.item.L2Weapon;
 
 public class UserInfo extends L2GameServerPacket
 {
@@ -84,41 +87,137 @@
        
         writeD(0x28);
        
-        writeD(_activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_HAIRALL));
+        DressMeHolder armorSkin = _activeChar.getArmorSkin();
+        DressMeHolder weaponSkin = _activeChar.getWeaponSkin();
+       
+        int hairallObj = _activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_HAIRALL);
+        writeD((armorSkin != null && hairallObj > 0 && armorSkin.getHelmetId() > 0) ? armorSkin.getHelmetId() : hairallObj);
         writeD(_activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_REAR));
         writeD(_activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_LEAR));
         writeD(_activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_NECK));
         writeD(_activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_RFINGER));
         writeD(_activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_LFINGER));
         writeD(_activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_HEAD));
-        writeD(_activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_RHAND));
-        writeD(_activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_LHAND));
-        writeD(_activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_GLOVES));
-        writeD(_activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_CHEST));
-        writeD(_activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_LEGS));
-        writeD(_activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_FEET));
-        writeD(_activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_BACK));
-        writeD(_activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_RHAND));
-        writeD(_activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_HAIR));
-        writeD(_activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_FACE));
        
-        writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_HAIRALL));
+        int rhandObj = _activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_RHAND);
+        int lhandObj = _activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_LHAND);
+       
+        if (_activeChar.isDressMe() && weaponSkin != null)
+        {
+            String equippedWeaponType = "";
+            L2ItemInstance weaponInstance = _activeChar.getInventory().getPaperdollItem(Inventory.PAPERDOLL_RHAND);
+           
+            if (weaponInstance != null && weaponInstance.getItem() instanceof L2Weapon)
+            {
+                L2Weapon weapon = (L2Weapon) weaponInstance.getItem();
+                equippedWeaponType = weapon.getItemType().toString().toLowerCase();
+            }
+           
+            if (equippedWeaponType.equalsIgnoreCase(weaponSkin.getWeaponTypeVisual()))
+            {
+               
+                if (weaponSkin.getTwoHandId() > 0)
+                {
+                    rhandObj = weaponSkin.getTwoHandId();
+                    lhandObj = 0;
+                }
+                else
+                {
+                    if (weaponSkin.getRightHandId() > 0 && rhandObj > 0)
+                        rhandObj = weaponSkin.getRightHandId();
+                    if (weaponSkin.getLeftHandId() > 0 && lhandObj > 0)
+                        lhandObj = weaponSkin.getLeftHandId();
+                }
+               
+            }
+        }
+       
+        // Armas
+        writeD(rhandObj); // PaperdollItemId RHAND
+        writeD(lhandObj); // PaperdollItemId LHAND
+       
+        int glovesOId = _activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_GLOVES);
+        int chestOId = _activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_CHEST);
+        int legsOId = _activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_LEGS);
+        int feetOId = _activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_FEET);
+       
+        writeD((armorSkin != null && glovesOId > 0 && armorSkin.getGlovesId() > 0) ? armorSkin.getGlovesId() : glovesOId);
+        writeD((armorSkin != null && chestOId > 0 && armorSkin.getChestId() > 0) ? armorSkin.getChestId() : chestOId);
+        writeD((armorSkin != null && legsOId > 0 && armorSkin.getLegsId() > 0) ? armorSkin.getLegsId() : legsOId);
+        writeD((armorSkin != null && feetOId > 0 && armorSkin.getFeetId() > 0) ? armorSkin.getFeetId() : feetOId);
+       
+        writeD(_activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_BACK));
+        writeD(rhandObj);
+        int hairObj = _activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_HAIR);
+        writeD((armorSkin != null && hairObj > 0 && armorSkin.getHelmetId() > 0) ? armorSkin.getHelmetId() : hairObj);
+       
+        int faceObj = _activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_FACE);
+        writeD((armorSkin != null && faceObj > 0 && armorSkin.getHelmetId() > 0) ? armorSkin.getHelmetId() : faceObj);
+       
+        int hairall = _activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_HAIRALL);
+        writeD((armorSkin != null && hairall > 0 && armorSkin.getHelmetId() > 0) ? armorSkin.getHelmetId() : hairall);
+
         writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_REAR));
         writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_LEAR));
         writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_NECK));
         writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_RFINGER));
         writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_LFINGER));
         writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_HEAD));
-        writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_RHAND));
-        writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_LHAND));
-        writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_GLOVES));
-        writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_CHEST));
-        writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_LEGS));
-        writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_FEET));
+       
+        int rhand = _activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_RHAND);
+        int lhand = _activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_LHAND);
+       
+        if (_activeChar.isDressMe() && weaponSkin != null)
+        {
+            String equippedWeaponType = "";
+            L2ItemInstance weaponInstance = _activeChar.getInventory().getPaperdollItem(Inventory.PAPERDOLL_RHAND);
+           
+            if (weaponInstance != null && weaponInstance.getItem() instanceof L2Weapon)
+            {
+                L2Weapon weapon = (L2Weapon) weaponInstance.getItem();
+                equippedWeaponType = weapon.getItemType().toString().toLowerCase();
+            }
+           
+            if (equippedWeaponType.equalsIgnoreCase(weaponSkin.getWeaponTypeVisual()))
+            {
+               
+                if (weaponSkin.getTwoHandId() > 0)
+                {
+                    rhand = weaponSkin.getTwoHandId();
+                    lhand = 0;
+                }
+                else
+                {
+                    if (weaponSkin.getRightHandId() > 0 && rhand > 0)
+                        rhand = weaponSkin.getRightHandId();
+                    if (weaponSkin.getLeftHandId() > 0 && lhand > 0)
+                        lhand = weaponSkin.getLeftHandId();
+                }
+               
+       
+               
+            }
+        }
+       
+        writeD(rhand); // PaperdollItemId RHAND
+        writeD(lhand); // PaperdollItemId LHAND
+        int glovesId = _activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_GLOVES);
+        int chestId = _activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_CHEST);
+        int legsId = _activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_LEGS);
+        int feetId = _activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_FEET);
+       
+        writeD((armorSkin != null && glovesId > 0 && armorSkin.getGlovesId() > 0) ? armorSkin.getGlovesId() : glovesId);
+        writeD((armorSkin != null && chestId > 0 && armorSkin.getChestId() > 0) ? armorSkin.getChestId() : chestId);
+        writeD((armorSkin != null && legsId > 0 && armorSkin.getLegsId() > 0) ? armorSkin.getLegsId() : legsId);
+        writeD((armorSkin != null && feetId > 0 && armorSkin.getFeetId() > 0) ? armorSkin.getFeetId() : feetId);
+       
         writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_BACK));
-        writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_RHAND));
-        writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_HAIR));
-        writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_FACE));
+        writeD(rhand);
+       
+        int hair = _activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_HAIR);
+        writeD((armorSkin != null && hair > 0 && armorSkin.getHelmetId() > 0) ? armorSkin.getHelmetId() : hair);
+        int face = _activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_FACE);
+        writeD((armorSkin != null && face > 0 && armorSkin.getHelmetId() > 0) ? armorSkin.getHelmetId() : face);
        
         writeH(0x00);
         writeH(0x00);
diff --git a/java/com/dream/game/templates/skills/L2SkillType.java b/java/com/dream/game/templates/skills/L2SkillType.java
index 1394060..9acfda6 100644
--- a/java/com/dream/game/templates/skills/L2SkillType.java
+++ b/java/com/dream/game/templates/skills/L2SkillType.java
@@ -1,7 +1,5 @@
 package com.dream.game.templates.skills;
 
-import java.lang.reflect.Constructor;
-
 import com.dream.game.model.L2Skill;
 import com.dream.game.skills.l2skills.L2ScriptSkill;
 import com.dream.game.skills.l2skills.L2SkillChargeDmg;
@@ -13,8 +11,11 @@
 import com.dream.game.skills.l2skills.L2SkillSummon;
 import com.dream.util.StatsSet;
 
+import java.lang.reflect.Constructor;
+
 public enum L2SkillType
 {
+    DRESSME,
     PDAM,
     MDAM,
     CPDAM,