Created
May 17, 2022 02:24
-
-
Save Williams0ff/eb366d8b4e3e2240017925a2efc0e790 to your computer and use it in GitHub Desktop.
Skin Code
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git a/L2jOne_C6_Interlude/data/html/admin/server_menu.htm b/L2jOne_C6_Interlude/data/html/admin/server_menu.htm | |
index 1814604..f289e41 100644 | |
--- a/L2jOne_C6_Interlude/data/html/admin/server_menu.htm | |
+++ b/L2jOne_C6_Interlude/data/html/admin/server_menu.htm | |
@@ -18,7 +18,7 @@ | |
Reload | |
<table width=240> | |
<tr> | |
- <td><combobox width=160 height=21 var="cb" list=admin;announcement;buylist;config;crest;cw;door;htm;item;multisell;npc;npcwalker;script;skill;teleport;zone;></td> | |
+ <td><combobox width=160 height=21 var="cb" list=admin;announcement;buylist;config;crest;cw;door;dress;htm;item;multisell;npc;npcwalker;script;skill;teleport;zone;></td> | |
<td><button value="Reload" action="bypass -h admin_reload $cb" width=65 height=19 back="L2UI_ch3.smallbutton2_over" fore="L2UI_ch3.smallbutton2"></td> | |
</tr> | |
</table><br> | |
diff --git a/L2jOne_C6_Interlude/data/xml/dressme.xml b/L2jOne_C6_Interlude/data/xml/dressme.xml | |
new file mode 100644 | |
index 0000000..09dc764 | |
--- /dev/null | |
+++ b/L2jOne_C6_Interlude/data/xml/dressme.xml | |
@@ -0,0 +1,4 @@ | |
+<?xml version="1.0" encoding="UTF-8"?> | |
+<list> | |
+ <dressme itemId="9999" chest="6373" legs="6374" hair="0" gloves="6375" feet="6376"/> | |
+</list> | |
\ No newline at end of file | |
diff --git a/L2jOne_C6_Interlude/java/net/sf/l2j/gameserver/GameServer.java b/L2jOne_C6_Interlude/java/net/sf/l2j/gameserver/GameServer.java | |
index 83b57fe..57459d6 100644 | |
--- a/L2jOne_C6_Interlude/java/net/sf/l2j/gameserver/GameServer.java | |
+++ b/L2jOne_C6_Interlude/java/net/sf/l2j/gameserver/GameServer.java | |
@@ -107,6 +107,7 @@ | |
PetitionManager.getInstance(); | |
StringUtil.printSection("Characters"); | |
+ DressMeData.getInstance(); | |
PlayerData.getInstance(); | |
PlayerInfoTable.getInstance(); | |
PlayerLevelData.getInstance(); | |
diff --git a/L2jOne_C6_Interlude/java/net/sf/l2j/gameserver/data/xml/DressMeData.java b/L2jOne_C6_Interlude/java/net/sf/l2j/gameserver/data/xml/DressMeData.java | |
new file mode 100644 | |
index 0000000..33dc094 | |
--- /dev/null | |
+++ b/L2jOne_C6_Interlude/java/net/sf/l2j/gameserver/data/xml/DressMeData.java | |
@@ -0,0 +1,67 @@ | |
+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; | |
+import org.w3c.dom.NamedNodeMap; | |
+ | |
+public class DressMeData implements IXmlReader | |
+{ | |
+ private final List<DressMe> _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", enchantNode -> | |
+ { | |
+ NamedNodeMap attrs = enchantNode.getAttributes(); | |
+ | |
+ final int itemId = Integer.valueOf(attrs.getNamedItem("itemId").getNodeValue()); | |
+ final int chest = Integer.valueOf(attrs.getNamedItem("chest").getNodeValue()); | |
+ final int legs = Integer.valueOf(attrs.getNamedItem("legs").getNodeValue()); | |
+ final int hair = Integer.valueOf(attrs.getNamedItem("hair").getNodeValue()); | |
+ final int gloves = Integer.valueOf(attrs.getNamedItem("gloves").getNodeValue()); | |
+ final int feet = Integer.valueOf(attrs.getNamedItem("feet").getNodeValue()); | |
+ | |
+ _entries.add(new DressMe(itemId, chest, legs, hair, gloves, feet)); | |
+ })); | |
+ } | |
+ | |
+ public DressMe getItemId(int itemId) | |
+ { | |
+ return _entries.stream().filter(x -> x.getItemId() == itemId).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 | |
diff --git a/L2jOne_C6_Interlude/java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminReload.java b/L2jOne_C6_Interlude/java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminReload.java | |
index 229e1c3..af834dc 100644 | |
--- a/L2jOne_C6_Interlude/java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminReload.java | |
+++ b/L2jOne_C6_Interlude/java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminReload.java | |
@@ -12,6 +12,7 @@ | |
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.InstantTeleportData; | |
import net.sf.l2j.gameserver.data.xml.ItemData; | |
import net.sf.l2j.gameserver.data.xml.MultisellData; | |
@@ -75,6 +76,11 @@ | |
DoorData.getInstance().reload(); | |
player.sendMessage("Doors instance has been reloaded."); | |
} | |
+ else if (type.startsWith("dress")) | |
+ { | |
+ DressMeData.getInstance().reload(); | |
+ player.sendMessage("Dress me have been reloaded."); | |
+ } | |
else if (type.startsWith("htm")) | |
{ | |
HtmCache.getInstance().reload(); | |
@@ -136,7 +142,7 @@ | |
public void sendUsage(Player player) | |
{ | |
player.sendMessage("Usage : //reload <admin|announcement|buylist|config>"); | |
- player.sendMessage("Usage : //reload <crest|cw|door|htm|item|multisell|npc>"); | |
+ player.sendMessage("Usage : //reload <crest|cw|door|dress|htm|item|multisell|npc>"); | |
player.sendMessage("Usage : //reload <npcwalker|script|skill|teleport|zone>"); | |
} | |
diff --git a/L2jOne_C6_Interlude/java/net/sf/l2j/gameserver/handler/itemhandlers/Skins.java b/L2jOne_C6_Interlude/java/net/sf/l2j/gameserver/handler/itemhandlers/Skins.java | |
new file mode 100644 | |
index 0000000..242db16 | |
--- /dev/null | |
+++ b/L2jOne_C6_Interlude/java/net/sf/l2j/gameserver/handler/itemhandlers/Skins.java | |
@@ -0,0 +1,28 @@ | |
+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; | |
+ | |
+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(); | |
+ } | |
+} | |
\ No newline at end of file | |
diff --git a/L2jOne_C6_Interlude/java/net/sf/l2j/gameserver/model/DressMe.java b/L2jOne_C6_Interlude/java/net/sf/l2j/gameserver/model/DressMe.java | |
new file mode 100644 | |
index 0000000..e1387ff | |
--- /dev/null | |
+++ b/L2jOne_C6_Interlude/java/net/sf/l2j/gameserver/model/DressMe.java | |
@@ -0,0 +1,51 @@ | |
+package net.sf.l2j.gameserver.model; | |
+ | |
+public class DressMe | |
+{ | |
+ private final int _itemId; | |
+ private final int _hair; | |
+ private final int _chest; | |
+ private final int _legs; | |
+ private final int _gloves; | |
+ private final int _feet; | |
+ | |
+ public DressMe(int itemId, int chest, int legs, int hair, int gloves, int feet) | |
+ { | |
+ _itemId = itemId; | |
+ _chest = chest; | |
+ _legs = legs; | |
+ _hair = hair; | |
+ _gloves = gloves; | |
+ _feet = feet; | |
+ } | |
+ | |
+ public final int getItemId() | |
+ { | |
+ return _itemId; | |
+ } | |
+ | |
+ public int getChest() | |
+ { | |
+ return _chest; | |
+ } | |
+ | |
+ public int getLegs() | |
+ { | |
+ return _legs; | |
+ } | |
+ | |
+ public int getHair() | |
+ { | |
+ return _hair; | |
+ } | |
+ | |
+ public int getGloves() | |
+ { | |
+ return _gloves; | |
+ } | |
+ | |
+ public int getFeet() | |
+ { | |
+ return _feet; | |
+ } | |
+} | |
\ No newline at end of file | |
diff --git a/L2jOne_C6_Interlude/java/net/sf/l2j/gameserver/model/actor/Player.java b/L2jOne_C6_Interlude/java/net/sf/l2j/gameserver/model/actor/Player.java | |
index 37c0a0e..48e009a 100644 | |
--- a/L2jOne_C6_Interlude/java/net/sf/l2j/gameserver/model/actor/Player.java | |
+++ b/L2jOne_C6_Interlude/java/net/sf/l2j/gameserver/model/actor/Player.java | |
@@ -88,9 +89,11 @@ | |
import net.sf.l2j.gameserver.handler.ItemHandler; | |
import net.sf.l2j.gameserver.handler.skillhandlers.SummonFriend; | |
import net.sf.l2j.gameserver.model.AccessLevel; | |
+import net.sf.l2j.gameserver.model.DressMe; | |
import net.sf.l2j.gameserver.model.PetDataEntry; | |
import net.sf.l2j.gameserver.model.World; | |
import net.sf.l2j.gameserver.model.WorldObject; | |
@@ -327,6 +319,8 @@ | |
private Boat _boat; | |
private final SpawnLocation _boatPosition = new SpawnLocation(0, 0, 0, 0); | |
+ private DressMe _dress; | |
+ | |
private boolean _canFeed; | |
protected PetTemplate _petTemplate; | |
private PetDataEntry _petData; | |
@@ -4084,6 +4035,16 @@ | |
{ | |
return _canFeed && getCurrentFeed() < _petData.getMaxMeal() * state; | |
} | |
+ | |
+ public DressMe getDress() | |
+ { | |
+ return _dress; | |
+ } | |
+ | |
+ public void setDress(DressMe dress) | |
+ { | |
+ _dress = dress; | |
+ } | |
public void setUptime(long time) | |
{ | |
\ No newline at end of file | |
diff --git a/L2jOne_C6_Interlude/java/net/sf/l2j/gameserver/network/serverpackets/CharInfo.java b/L2jOne_C6_Interlude/java/net/sf/l2j/gameserver/network/serverpackets/CharInfo.java | |
index fb0b4af..5bf92b9 100644 | |
--- a/L2jOne_C6_Interlude/java/net/sf/l2j/gameserver/network/serverpackets/CharInfo.java | |
+++ b/L2jOne_C6_Interlude/java/net/sf/l2j/gameserver/network/serverpackets/CharInfo.java | |
@@ -5,8 +5,10 @@ | |
import net.sf.l2j.gameserver.enums.Paperdoll; | |
import net.sf.l2j.gameserver.enums.TeamType; | |
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.actor.ai.type.BootAi; | |
import net.sf.l2j.gameserver.model.actor.instance.Cubic; | |
public class CharInfo extends L2GameServerPacket | |
@@ -41,17 +43,18 @@ | |
writeD(_player.getAppearance().getSex().ordinal()); | |
writeD((_player.getClassIndex() == 0) ? _player.getClassId().getId() : _player.getBaseClass()); | |
+ final DressMe dress = _player.getDress(); | |
writeD(_player.getInventory().getItemIdFrom(Paperdoll.HAIRALL)); | |
writeD(_player.getInventory().getItemIdFrom(Paperdoll.HEAD)); | |
writeD(_player.getInventory().getItemIdFrom(Paperdoll.RHAND)); | |
writeD(_player.getInventory().getItemIdFrom(Paperdoll.LHAND)); | |
- writeD(_player.getInventory().getItemIdFrom(Paperdoll.GLOVES)); | |
- writeD(_player.getInventory().getItemIdFrom(Paperdoll.CHEST)); | |
- writeD(_player.getInventory().getItemIdFrom(Paperdoll.LEGS)); | |
- writeD(_player.getInventory().getItemIdFrom(Paperdoll.FEET)); | |
+ writeD(dress != null ? dress.getGloves() : _player.getInventory().getItemIdFrom(Paperdoll.GLOVES)); | |
+ writeD(dress != null ? dress.getChest() : _player.getInventory().getItemIdFrom(Paperdoll.CHEST)); | |
+ writeD(dress != null ? dress.getLegs() : _player.getInventory().getItemIdFrom(Paperdoll.LEGS)); | |
+ writeD(dress != null ? dress.getFeet() : _player.getInventory().getItemIdFrom(Paperdoll.FEET)); | |
writeD(_player.getInventory().getItemIdFrom(Paperdoll.CLOAK)); | |
writeD(_player.getInventory().getItemIdFrom(Paperdoll.RHAND)); | |
- writeD(_player.getInventory().getItemIdFrom(Paperdoll.HAIR)); | |
+ writeD(dress != null ? dress.getHair() : _player.getInventory().getItemIdFrom(Paperdoll.HAIR)); | |
writeD(_player.getInventory().getItemIdFrom(Paperdoll.FACE)); | |
writeH(0x00); | |
\ No newline at end of file | |
diff --git a/L2jOne_C6_Interlude/java/net/sf/l2j/gameserver/network/serverpackets/UserInfo.java b/L2jOne_C6_Interlude/java/net/sf/l2j/gameserver/network/serverpackets/UserInfo.java | |
index c608e5a..a376b73 100644 | |
--- a/L2jOne_C6_Interlude/java/net/sf/l2j/gameserver/network/serverpackets/UserInfo.java | |
+++ b/L2jOne_C6_Interlude/java/net/sf/l2j/gameserver/network/serverpackets/UserInfo.java | |
@@ -5,8 +5,10 @@ | |
import net.sf.l2j.gameserver.enums.Paperdoll; | |
import net.sf.l2j.gameserver.enums.TeamType; | |
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.actor.ai.type.BootAi; | |
import net.sf.l2j.gameserver.model.actor.instance.Cubic; | |
public class UserInfo extends L2GameServerPacket | |
@@ -56,6 +58,7 @@ | |
writeD(_player.getWeightLimit()); | |
writeD(_player.getActiveWeaponItem() != null ? 40 : 20); | |
+ final DressMe dress = _player.getDress(); | |
writeD(_player.getInventory().getItemObjectIdFrom(Paperdoll.HAIRALL)); | |
writeD(_player.getInventory().getItemObjectIdFrom(Paperdoll.REAR)); | |
writeD(_player.getInventory().getItemObjectIdFrom(Paperdoll.LEAR)); | |
@@ -65,13 +68,13 @@ | |
writeD(_player.getInventory().getItemObjectIdFrom(Paperdoll.HEAD)); | |
writeD(_player.getInventory().getItemObjectIdFrom(Paperdoll.RHAND)); | |
writeD(_player.getInventory().getItemObjectIdFrom(Paperdoll.LHAND)); | |
- writeD(_player.getInventory().getItemObjectIdFrom(Paperdoll.GLOVES)); | |
- writeD(_player.getInventory().getItemObjectIdFrom(Paperdoll.CHEST)); | |
- writeD(_player.getInventory().getItemObjectIdFrom(Paperdoll.LEGS)); | |
- writeD(_player.getInventory().getItemObjectIdFrom(Paperdoll.FEET)); | |
+ writeD(dress != null ? dress.getGloves() : _player.getInventory().getItemObjectIdFrom(Paperdoll.GLOVES)); | |
+ writeD(dress != null ? dress.getChest() : _player.getInventory().getItemObjectIdFrom(Paperdoll.CHEST)); | |
+ writeD(dress != null ? dress.getLegs() : _player.getInventory().getItemObjectIdFrom(Paperdoll.LEGS)); | |
+ writeD(dress != null ? dress.getFeet() : _player.getInventory().getItemObjectIdFrom(Paperdoll.FEET)); | |
writeD(_player.getInventory().getItemObjectIdFrom(Paperdoll.CLOAK)); | |
writeD(_player.getInventory().getItemObjectIdFrom(Paperdoll.RHAND)); | |
- writeD(_player.getInventory().getItemObjectIdFrom(Paperdoll.HAIR)); | |
+ writeD(dress != null ? dress.getHair() : _player.getInventory().getItemObjectIdFrom(Paperdoll.HAIR)); | |
writeD(_player.getInventory().getItemObjectIdFrom(Paperdoll.FACE)); | |
writeD(_player.getInventory().getItemIdFrom(Paperdoll.HAIRALL)); | |
@@ -83,13 +86,13 @@ | |
writeD(_player.getInventory().getItemIdFrom(Paperdoll.HEAD)); | |
writeD(_player.getInventory().getItemIdFrom(Paperdoll.RHAND)); | |
writeD(_player.getInventory().getItemIdFrom(Paperdoll.LHAND)); | |
- writeD(_player.getInventory().getItemIdFrom(Paperdoll.GLOVES)); | |
- writeD(_player.getInventory().getItemIdFrom(Paperdoll.CHEST)); | |
- writeD(_player.getInventory().getItemIdFrom(Paperdoll.LEGS)); | |
- writeD(_player.getInventory().getItemIdFrom(Paperdoll.FEET)); | |
+ writeD(dress != null ? dress.getGloves() : _player.getInventory().getItemIdFrom(Paperdoll.GLOVES)); | |
+ writeD(dress != null ? dress.getChest() : _player.getInventory().getItemIdFrom(Paperdoll.CHEST)); | |
+ writeD(dress != null ? dress.getLegs() : _player.getInventory().getItemIdFrom(Paperdoll.LEGS)); | |
+ writeD(dress != null ? dress.getFeet() : _player.getInventory().getItemIdFrom(Paperdoll.FEET)); | |
writeD(_player.getInventory().getItemIdFrom(Paperdoll.CLOAK)); | |
writeD(_player.getInventory().getItemIdFrom(Paperdoll.RHAND)); | |
- writeD(_player.getInventory().getItemIdFrom(Paperdoll.HAIR)); | |
+ writeD(dress != null ? dress.getHair() : _player.getInventory().getItemIdFrom(Paperdoll.HAIR)); | |
writeD(_player.getInventory().getItemIdFrom(Paperdoll.FACE)); | |
writeH(0x00); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment