\ No newline at end of file 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 _dress = new HashMap<>(); + + 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 getDressme() + { + 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; + } +