Advertisement
tensador125

l2jorion skin system para rev 21

Apr 19th, 2023
1,047
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 109.38 KB | Gaming | 0 0
  1. ### Eclipse Workspace Patch 1.0
  2. #P Orion2.0
  3. diff --git cfiles/game/config/main/L2jOrion.ini cfiles/game/config/main/L2jOrion.ini
  4. index bf1867e..a005574 100644
  5. --- cfiles/game/config/main/L2jOrion.ini
  6. +++ cfiles/game/config/main/L2jOrion.ini
  7. @@ -333,4 +333,17 @@
  8.  NewPlayerEffect = False
  9.  
  10.  # It shows Castle's Lord clan crest in town nearby npc name
  11. -ShowNpcCrest = False
  12. \ No newline at end of file
  13. +ShowNpcCrest = False
  14. +
  15. +# DressMe system.
  16. +AllowDressMeSystem = True
  17. +
  18. +# DressMe Command
  19. +DressMeCommand = dressme
  20. +
  21. +# Only for premium account
  22. +AllowDressMeForPremiumOnly = True
  23. +
  24. +
  25. +# Players won't see the skins in Olympiad
  26. +AllowDressMeInOly = True
  27. \ No newline at end of file
  28. diff --git data/html/dressme/allskins.htm data/html/dressme/allskins.htm
  29. new file mode 100644
  30. index 0000000..f46a2bd
  31. --- /dev/null
  32. +++ data/html/dressme/allskins.htm
  33. @@ -0,0 +1,20 @@
  34. +<html>
  35. +<body>
  36. +<img src="L2UI.Squaregray" width="300" height="1">
  37. +<table width=300 border=0 cellspacing=0 cellpadding=1 bgcolor=000000 height=15>
  38. +<tr>
  39. +<td width=36 align=center></td>
  40. +<td width=120 align=left>Name</td>
  41. +<td width=65 align=left>Actions</td>
  42. +</tr>
  43. +</table>
  44. +<img src="L2UI.Squaregray" width="300" height="1">
  45. +
  46. +%showList%
  47. +
  48. +<center>
  49. +<button value="Back" action="bypass -h custom_dressme_back" width=65 height=19 back="L2UI_ch3.smallbutton2_over" fore="L2UI_ch3.smallbutton2">
  50. +</center>
  51. +
  52. +</body>
  53. +</html>
  54. \ No newline at end of file
  55. diff --git data/html/dressme/index.htm data/html/dressme/index.htm
  56. new file mode 100644
  57. index 0000000..36f3b4a
  58. --- /dev/null
  59. +++ data/html/dressme/index.htm
  60. @@ -0,0 +1,29 @@
  61. +<html>
  62. +<title>Skins Shop</title>
  63. +<body>
  64. +<br>
  65. +<center>Skins:</center>
  66. +
  67. +<table width=300>
  68. +<tr>
  69. +<td align=center><button value="Armor buy/try" action="bypass -h dressme 1 skinlist armor" width=134 height=19 back="L2UI_ch3.BigButton3_over" fore="L2UI_ch3.BigButton3"></td>
  70. +</tr>
  71. +<tr>
  72. +<td align=center><button value="Weapon buy/try" action="bypass -h dressme 1 skinlist weapon" width=134 height=19 back="L2UI_ch3.BigButton3_over" fore="L2UI_ch3.BigButton3"></td>
  73. +</tr>
  74. +<tr>
  75. +<td align=center><button value="Hair buy/try" action="bypass -h dressme 1 skinlist hair" width=134 height=19 back="L2UI_ch3.BigButton3_over" fore="L2UI_ch3.BigButton3"></td>
  76. +</tr>
  77. +<tr>
  78. +<td align=center><button value="Face buy/try" action="bypass -h dressme 1 skinlist face" width=134 height=19 back="L2UI_ch3.BigButton3_over" fore="L2UI_ch3.BigButton3"></td>
  79. +</tr>
  80. +<tr>
  81. +<td align=center><button value="Shield buy/try" action="bypass -h dressme 1 skinlist shield" width=134 height=19 back="L2UI_ch3.BigButton3_over" fore="L2UI_ch3.BigButton3"></td>
  82. +</tr>
  83. +<tr>
  84. +<td align=center><button value="My skins" action="bypass -h dressme 1 myskinlist" width=134 height=19 back="L2UI_ch3.BigButton3_over" fore="L2UI_ch3.BigButton3"></td>
  85. +</tr>
  86. +</table>
  87. +
  88. +</body>
  89. +</html>
  90. \ No newline at end of file
  91. diff --git data/html/dressme/myskins.htm data/html/dressme/myskins.htm
  92. new file mode 100644
  93. index 0000000..381164c
  94. --- /dev/null
  95. +++ data/html/dressme/myskins.htm
  96. @@ -0,0 +1,21 @@
  97. +<html>
  98. +<body>
  99. +<img src="L2UI.Squaregray" width="300" height="1">
  100. +<table border=0 cellspacing=0 cellpadding=2 bgcolor=000000 height=20>
  101. +<tr>
  102. +<td width=32 align=center></td>
  103. +<td width=203 align=left>Name</td>
  104. +<td width=65 align=left>Actions</td>
  105. +</tr>
  106. +</table>
  107. +<img src="L2UI.Squaregray" width="300" height="1">
  108. +
  109. +%showList%
  110. +
  111. +<br>
  112. +<br>
  113. +<center>
  114. +<button value="Back" action="bypass -h custom_dressme_back" width=65 height=19 back="L2UI_ch3.Btn1_normalOn" fore="L2UI_ch3.Btn1_normal">
  115. +</center>
  116. +</body>
  117. +</html>
  118. \ No newline at end of file
  119. diff --git data/xml/dressme.xml data/xml/dressme.xml
  120. new file mode 100644
  121. index 0000000..7156269
  122. --- /dev/null
  123. +++ data/xml/dressme.xml
  124. @@ -0,0 +1,22 @@
  125. +<?xml version="1.0" encoding="UTF-8"?>
  126. +<list>
  127. +   <skin type="armor"> <!-- Armors -->
  128. +       <type id="1" name="Draconic Armor" chestId="6379" legsId="0" glovesId="6380" feetId="6381" priceId="57" priceCount="100"/>
  129. +       <type id="2" name="Blue Wolf Leather Armor" chestId="2391" legsId="0" glovesId="0" feetId="0" priceId="57" priceCount="100"/>
  130. +   </skin>
  131. +   <skin type="weapon"> <!-- Weapons -->
  132. +       <type id="1" name="Draconic Bow" weaponId="7575" priceId="57" priceCount="100"/>
  133. +       <type id="2" name="Arcana Mace" weaponId="6608"  priceId="57" priceCount="100"/>
  134. +       <type id="3" name="Keshanberk*Keshanberk" weaponId="5704" priceId="57" priceCount="100"/>
  135. +   </skin>
  136. +   <skin type="hair"> <!-- Hairs -->
  137. +       <type id="1" name="Cat Ear" hairId="6843" priceId="57" priceCount="100"/>
  138. +   </skin>
  139. +   <skin type="face"> <!-- Faces -->
  140. +       <type id="1" name="Party Mask" faceId="5808" priceId="57" priceCount="100"/>
  141. +   </skin>
  142. +   <skin type="shield"> <!-- Shields -->
  143. +       <type id="1" name="Shield of Night" shieldId="2498" priceId="57" priceCount="100"/>
  144. +       <type id="2" name="Imperial Shield" shieldId="6377" priceId="57" priceCount="100"/>
  145. +   </skin>
  146. +</list>
  147. \ No newline at end of file
  148. diff --git src/l2jorion/Config.java src/l2jorion/Config.java
  149. index bbf70a0..ad4830a 100644
  150. --- src/l2jorion/Config.java
  151. +++ src/l2jorion/Config.java
  152. @@ -2358,6 +2358,11 @@
  153.     public static String PM_TEXT2;
  154.     public static boolean NEW_PLAYER_EFFECT;
  155.    
  156. +   public static boolean ALLOW_DRESS_ME_SYSTEM;
  157. +   public static String DRESS_ME_COMMAND;
  158. +   public static boolean ALLOW_DRESS_ME_FOR_PREMIUM;
  159. +   public static boolean ALLOW_DRESS_ME_IN_OLY;
  160. +  
  161.     public static void loadL2jOrionConfig()
  162.     {
  163.         final String L2jOrion = ConfigLoader.L2jOrion_CONFIG_FILE;
  164. @@ -2381,6 +2386,11 @@
  165.                 LIST_FAKE_ARMOR_ITEMS.add(Integer.parseInt(id));
  166.             }
  167.            
  168. +           ALLOW_DRESS_ME_SYSTEM = Boolean.parseBoolean(L2jOrionSettings.getProperty("AllowDressMeSystem", "false"));
  169. +           DRESS_ME_COMMAND = String.valueOf(L2jOrionSettings.getProperty("DressMeCommand", "dressme"));
  170. +           ALLOW_DRESS_ME_FOR_PREMIUM = Boolean.parseBoolean(L2jOrionSettings.getProperty("AllowDressMeForPremiumOnly", "false"));
  171. +           ALLOW_DRESS_ME_IN_OLY = Boolean.parseBoolean(L2jOrionSettings.getProperty("AllowDressMeInOly", "false"));
  172. +          
  173.             FREE_TELEPORT_UNTIL = Integer.parseInt(L2jOrionSettings.getProperty("FreeTeleportUntil", "1"));
  174.             REMOVAL_AUGMENTATION_FREE = Boolean.parseBoolean(L2jOrionSettings.getProperty("RemovalAugmentationFree", "False"));
  175.             ALLOW_FREIGHT_AUGMENTED = Boolean.parseBoolean(L2jOrionSettings.getProperty("AllowFreightAugmentedItem", "False"));
  176. @@ -4773,109 +4783,6 @@
  177.         }
  178.     }
  179.    
  180. -   public static boolean ALLOW_DRESS_ME_SYSTEM;
  181. -   public static boolean ALLOW_DRESS_ME_FOR_ITEM;
  182. -   public static int DRESS_ME_ITEM_ID;
  183. -   public static int DRESS_ME_ITEM_COUNT;
  184. -   public static boolean ALLOW_DRESS_ME_FOR_PREMIUM;
  185. -   public static Map<String, Integer> DRESS_ME_CHESTS = new HashMap<>();
  186. -   public static Map<String, Integer> DRESS_ME_LEGS = new HashMap<>();
  187. -   public static Map<String, Integer> DRESS_ME_BOOTS = new HashMap<>();
  188. -   public static Map<String, Integer> DRESS_ME_GLOVES = new HashMap<>();
  189. -   public static Map<String, Integer> DRESS_ME_WEAPONS = new HashMap<>();
  190. -  
  191. -   public static void loadDressMeConfig()
  192. -   {
  193. -       final PropertiesParser dressMe = new PropertiesParser(ConfigLoader.DRESSME_CONFIG_FILE);
  194. -      
  195. -       ALLOW_DRESS_ME_SYSTEM = dressMe.getBoolean("AllowDressMeSystem", false);
  196. -       ALLOW_DRESS_ME_FOR_ITEM = dressMe.getBoolean("DressMeForItem", false);
  197. -       DRESS_ME_ITEM_ID = dressMe.getInt("DressMeItemId", 57);
  198. -       DRESS_ME_ITEM_COUNT = dressMe.getInt("DressMeItemCount", 1);
  199. -       ALLOW_DRESS_ME_FOR_PREMIUM = dressMe.getBoolean("AllowDressMeForPremiumOnly", false);
  200. -      
  201. -       String temp = dressMe.getString("DressMeChests", "");
  202. -       String[] temp2 = temp.split(";");
  203. -       for (String s : temp2)
  204. -       {
  205. -           String[] t = s.split(",");
  206. -           DRESS_ME_CHESTS.put(t[0], Integer.parseInt(t[1]));
  207. -       }
  208. -      
  209. -       temp = dressMe.getString("DressMeLegs", "");
  210. -       temp2 = temp.split(";");
  211. -       for (String s : temp2)
  212. -       {
  213. -           String[] t = s.split(",");
  214. -           DRESS_ME_LEGS.put(t[0], Integer.parseInt(t[1]));
  215. -       }
  216. -      
  217. -       temp = dressMe.getString("DressMeBoots", "");
  218. -       temp2 = temp.split(";");
  219. -       for (String s : temp2)
  220. -       {
  221. -           String[] t = s.split(",");
  222. -           DRESS_ME_BOOTS.put(t[0], Integer.parseInt(t[1]));
  223. -       }
  224. -      
  225. -       temp = dressMe.getString("DressMeGloves", "");
  226. -       temp2 = temp.split(";");
  227. -       for (String s : temp2)
  228. -       {
  229. -           String[] t = s.split(",");
  230. -           DRESS_ME_GLOVES.put(t[0], Integer.parseInt(t[1]));
  231. -       }
  232. -      
  233. -       temp = dressMe.getString("DressMeWeapons", "");
  234. -       temp2 = temp.split(";");
  235. -       for (String s : temp2)
  236. -       {
  237. -           String[] t = s.split(",");
  238. -           DRESS_ME_WEAPONS.put(t[0], Integer.parseInt(t[1]));
  239. -       }
  240. -      
  241. -       temp = dressMe.getString("DressMeChests", "");
  242. -       temp2 = temp.split(";");
  243. -       for (String s : temp2)
  244. -       {
  245. -           String[] t = s.split(",");
  246. -           DRESS_ME_CHESTS.put(t[0], Integer.parseInt(t[1]));
  247. -       }
  248. -      
  249. -       temp = dressMe.getString("DressMeLegs", "");
  250. -       temp2 = temp.split(";");
  251. -       for (String s : temp2)
  252. -       {
  253. -           String[] t = s.split(",");
  254. -           DRESS_ME_LEGS.put(t[0], Integer.parseInt(t[1]));
  255. -       }
  256. -      
  257. -       temp = dressMe.getString("DressMeBoots", "");
  258. -       temp2 = temp.split(";");
  259. -       for (String s : temp2)
  260. -       {
  261. -           String[] t = s.split(",");
  262. -           DRESS_ME_BOOTS.put(t[0], Integer.parseInt(t[1]));
  263. -       }
  264. -      
  265. -       temp = dressMe.getString("DressMeGloves", "");
  266. -       temp2 = temp.split(";");
  267. -       for (String s : temp2)
  268. -       {
  269. -           String[] t = s.split(",");
  270. -           DRESS_ME_GLOVES.put(t[0], Integer.parseInt(t[1]));
  271. -       }
  272. -      
  273. -       temp = dressMe.getString("DressMeWeapons", "");
  274. -       temp2 = temp.split(";");
  275. -       for (String s : temp2)
  276. -       {
  277. -           String[] t = s.split(",");
  278. -           DRESS_ME_WEAPONS.put(t[0], Integer.parseInt(t[1]));
  279. -       }
  280. -      
  281. -   }
  282. -  
  283.     /** Enumeration for type of ID Factory */
  284.     public static enum IdFactoryType
  285.     {
  286. @@ -4906,7 +4813,6 @@
  287.            
  288.             loadUserConfig();
  289.             loadSellBuffConfig();
  290. -           loadDressMeConfig();
  291.            
  292.             // Load network
  293.             loadServerConfig();
  294. diff --git src/l2jorion/game/GameServer.java src/l2jorion/game/GameServer.java
  295. index 214bbfe..94a2df6 100644
  296. --- src/l2jorion/game/GameServer.java
  297. +++ src/l2jorion/game/GameServer.java
  298. @@ -102,6 +102,7 @@
  299.  import l2jorion.game.datatables.sql.TeleportLocationTable;
  300.  import l2jorion.game.datatables.xml.AugmentScrollData;
  301.  import l2jorion.game.datatables.xml.AugmentationData;
  302. +import l2jorion.game.datatables.xml.DressMeData;
  303.  import l2jorion.game.datatables.xml.ExperienceData;
  304.  import l2jorion.game.geo.GeoData;
  305.  import l2jorion.game.geo.pathfinding.PathFinding;
  306. @@ -547,6 +548,14 @@
  307.             PowerPack.getInstance();
  308.         }
  309.        
  310. +       L2Item.LoadAllIcons();
  311. +      
  312. +       if (Config.ALLOW_DRESS_ME_SYSTEM)
  313. +       {
  314. +           Util.printSection("Dress Me / Skins");
  315. +           DressMeData.getInstance();
  316. +       }
  317. +      
  318.         EventManager.getInstance().startEventRegistration();
  319.        
  320.         if (EventManager.TVT_EVENT_ENABLED || EventManager.CTF_EVENT_ENABLED || EventManager.DM_EVENT_ENABLED)
  321. @@ -688,4 +697,5 @@
  322.     {
  323.         return _deadDetectThread;
  324.     }
  325. +  
  326.  }
  327. \ No newline at end of file
  328. diff --git src/l2jorion/game/datatables/xml/DressMeData.java src/l2jorion/game/datatables/xml/DressMeData.java
  329. new file mode 100644
  330. index 0000000..cda2e91
  331. --- /dev/null
  332. +++ src/l2jorion/game/datatables/xml/DressMeData.java
  333. @@ -0,0 +1,215 @@
  334. +package l2jorion.game.datatables.xml;
  335. +
  336. +import java.util.HashMap;
  337. +import java.util.Map;
  338. +
  339. +import org.w3c.dom.Document;
  340. +import org.w3c.dom.NamedNodeMap;
  341. +import org.w3c.dom.Node;
  342. +
  343. +import l2jorion.game.model.base.SkinPackage;
  344. +import l2jorion.game.templates.StatsSet;
  345. +import l2jorion.logger.Logger;
  346. +import l2jorion.logger.LoggerFactory;
  347. +import l2jorion.util.xml.IXmlReader;
  348. +
  349. +public class DressMeData implements IXmlReader
  350. +{
  351. +   private static final Logger LOG = LoggerFactory.getLogger(DressMeData.class);
  352. +  
  353. +   private final static Map<Integer, SkinPackage> _armorSkins = new HashMap<>();
  354. +   private final static Map<Integer, SkinPackage> _weaponSkins = new HashMap<>();
  355. +   private final static Map<Integer, SkinPackage> _hairSkins = new HashMap<>();
  356. +   private final static Map<Integer, SkinPackage> _faceSkins = new HashMap<>();
  357. +   private final static Map<Integer, SkinPackage> _shieldSkins = new HashMap<>();
  358. +  
  359. +   public DressMeData()
  360. +   {
  361. +       load();
  362. +   }
  363. +  
  364. +   public void reload()
  365. +   {
  366. +       _armorSkins.clear();
  367. +       _weaponSkins.clear();
  368. +       _hairSkins.clear();
  369. +       _faceSkins.clear();
  370. +       _shieldSkins.clear();
  371. +      
  372. +       load();
  373. +   }
  374. +  
  375. +   @Override
  376. +   public void load()
  377. +   {
  378. +       parseDatapackFile("./data/xml/dressme.xml");
  379. +       LOG.info(getClass().getSimpleName() + ": Loaded " + _armorSkins.size() + " armor skins");
  380. +       LOG.info(getClass().getSimpleName() + ": Loaded " + _weaponSkins.size() + " weapon skins");
  381. +       LOG.info(getClass().getSimpleName() + ": Loaded " + _hairSkins.size() + " hair skins");
  382. +       LOG.info(getClass().getSimpleName() + ": Loaded " + _faceSkins.size() + " face skins");
  383. +       LOG.info(getClass().getSimpleName() + ": Loaded " + _shieldSkins.size() + " shield skins");
  384. +   }
  385. +  
  386. +   @Override
  387. +   public void parseDocument(Document doc)
  388. +   {
  389. +       for (Node list = doc.getFirstChild(); list != null; list = list.getNextSibling())
  390. +       {
  391. +           if ("list".equalsIgnoreCase(list.getNodeName()))
  392. +           {
  393. +               for (Node skin = list.getFirstChild(); skin != null; skin = skin.getNextSibling())
  394. +               {
  395. +                   if ("skin".equalsIgnoreCase(skin.getNodeName()))
  396. +                   {
  397. +                       final NamedNodeMap attrs = skin.getAttributes();
  398. +                      
  399. +                       String type = parseString(attrs, "type");
  400. +                      
  401. +                       final StatsSet set = new StatsSet();
  402. +                      
  403. +                       for (Node typeN = skin.getFirstChild(); typeN != null; typeN = typeN.getNextSibling())
  404. +                       {
  405. +                           if ("type".equalsIgnoreCase(typeN.getNodeName()))
  406. +                           {
  407. +                               final NamedNodeMap attrs2 = typeN.getAttributes();
  408. +                              
  409. +                               int id = parseInteger(attrs2, "id");
  410. +                               String name = parseString(attrs2, "name");
  411. +                               int weaponId = parseInteger(attrs2, "weaponId", 0);
  412. +                               int shieldId = parseInteger(attrs2, "shieldId", 0);
  413. +                               int chestId = parseInteger(attrs2, "chestId", 0);
  414. +                               int hairId = parseInteger(attrs2, "hairId", 0);
  415. +                               int faceId = parseInteger(attrs2, "faceId", 0);
  416. +                               int legsId = parseInteger(attrs2, "legsId", 0);
  417. +                               int glovesId = parseInteger(attrs2, "glovesId", 0);
  418. +                               int feetId = parseInteger(attrs2, "feetId", 0);
  419. +                               int priceId = parseInteger(attrs2, "priceId", 0);
  420. +                               int priceCount = parseInteger(attrs2, "priceCount", 0);
  421. +                              
  422. +                               set.set("type", type);
  423. +                              
  424. +                               set.set("id", id);
  425. +                               set.set("name", name);
  426. +                               set.set("weaponId", weaponId);
  427. +                               set.set("shieldId", shieldId);
  428. +                               set.set("chestId", chestId);
  429. +                               set.set("hairId", hairId);
  430. +                               set.set("faceId", faceId);
  431. +                               set.set("legsId", legsId);
  432. +                               set.set("glovesId", glovesId);
  433. +                               set.set("feetId", feetId);
  434. +                               set.set("priceId", priceId);
  435. +                               set.set("priceCount", priceCount);
  436. +                              
  437. +                               switch (type.toLowerCase())
  438. +                               {
  439. +                                   case "armor":
  440. +                                       _armorSkins.put(id, new SkinPackage(set));
  441. +                                       break;
  442. +                                   case "weapon":
  443. +                                       _weaponSkins.put(id, new SkinPackage(set));
  444. +                                       break;
  445. +                                   case "hair":
  446. +                                       _hairSkins.put(id, new SkinPackage(set));
  447. +                                       break;
  448. +                                   case "face":
  449. +                                       _faceSkins.put(id, new SkinPackage(set));
  450. +                                       break;
  451. +                                   case "shield":
  452. +                                       _shieldSkins.put(id, new SkinPackage(set));
  453. +                                       break;
  454. +                               }
  455. +                           }
  456. +                       }
  457. +                   }
  458. +               }
  459. +           }
  460. +       }
  461. +      
  462. +   }
  463. +  
  464. +   public SkinPackage getArmorSkinsPackage(int id)
  465. +   {
  466. +       if (!_armorSkins.containsKey(id))
  467. +       {
  468. +           return null;
  469. +       }
  470. +      
  471. +       return _armorSkins.get(id);
  472. +   }
  473. +  
  474. +   public Map<Integer, SkinPackage> getArmorSkinOptions()
  475. +   {
  476. +       return _armorSkins;
  477. +   }
  478. +  
  479. +   public SkinPackage getWeaponSkinsPackage(int id)
  480. +   {
  481. +       if (!_weaponSkins.containsKey(id))
  482. +       {
  483. +           return null;
  484. +       }
  485. +      
  486. +       return _weaponSkins.get(id);
  487. +   }
  488. +  
  489. +   public Map<Integer, SkinPackage> getWeaponSkinOptions()
  490. +   {
  491. +       return _weaponSkins;
  492. +   }
  493. +  
  494. +   public SkinPackage getHairSkinsPackage(int id)
  495. +   {
  496. +       if (!_hairSkins.containsKey(id))
  497. +       {
  498. +           return null;
  499. +       }
  500. +      
  501. +       return _hairSkins.get(id);
  502. +   }
  503. +  
  504. +   public Map<Integer, SkinPackage> getHairSkinOptions()
  505. +   {
  506. +       return _hairSkins;
  507. +   }
  508. +  
  509. +   public SkinPackage getFaceSkinsPackage(int id)
  510. +   {
  511. +       if (!_faceSkins.containsKey(id))
  512. +       {
  513. +           return null;
  514. +       }
  515. +      
  516. +       return _faceSkins.get(id);
  517. +   }
  518. +  
  519. +   public Map<Integer, SkinPackage> getFaceSkinOptions()
  520. +   {
  521. +       return _faceSkins;
  522. +   }
  523. +  
  524. +   public SkinPackage getShieldSkinsPackage(int id)
  525. +   {
  526. +       if (!_shieldSkins.containsKey(id))
  527. +       {
  528. +           return null;
  529. +       }
  530. +      
  531. +       return _shieldSkins.get(id);
  532. +   }
  533. +  
  534. +   public Map<Integer, SkinPackage> getShieldSkinOptions()
  535. +   {
  536. +       return _shieldSkins;
  537. +   }
  538. +  
  539. +   public static DressMeData getInstance()
  540. +   {
  541. +       return SingletonHolder._instance;
  542. +   }
  543. +  
  544. +   private static class SingletonHolder
  545. +   {
  546. +       protected static final DressMeData _instance = new DressMeData();
  547. +   }
  548. +}
  549. \ No newline at end of file
  550. diff --git src/l2jorion/game/handler/BypassHandler.java src/l2jorion/game/handler/BypassHandler.java
  551. new file mode 100644
  552. index 0000000..899a49b
  553. --- /dev/null
  554. +++ src/l2jorion/game/handler/BypassHandler.java
  555. @@ -0,0 +1,62 @@
  556. +package l2jorion.game.handler;
  557. +
  558. +import java.util.HashMap;
  559. +import java.util.Map;
  560. +import java.util.logging.Logger;
  561. +
  562. +import l2jorion.Config;
  563. +
  564. +public class BypassHandler
  565. +{
  566. +   private static Logger _log = Logger.getLogger(BypassHandler.class.getName());
  567. +   private final Map<Integer, IBypassHandler> _datatable = new HashMap<>();
  568. +  
  569. +   public static BypassHandler getInstance()
  570. +   {
  571. +       return SingletonHolder._instance;
  572. +   }
  573. +  
  574. +   private BypassHandler()
  575. +   {
  576. +      
  577. +   }
  578. +  
  579. +   public void registerBypassHandler(IBypassHandler handler)
  580. +   {
  581. +       String[] ids = handler.getBypassHandlersList();
  582. +       for (int i = 0; i < ids.length; i++)
  583. +       {
  584. +           if (Config.DEBUG)
  585. +           {
  586. +               _log.fine("Adding handler for command " + ids[i]);
  587. +           }
  588. +           _datatable.put(ids[i].hashCode(), handler);
  589. +       }
  590. +   }
  591. +  
  592. +   public IBypassHandler getBypassHandler(String bypass)
  593. +   {
  594. +       String command = bypass;
  595. +      
  596. +       if (bypass.indexOf(" ") != -1)
  597. +       {
  598. +           command = bypass.substring(0, bypass.indexOf(" "));
  599. +       }
  600. +      
  601. +       if (Config.DEBUG)
  602. +       {
  603. +           _log.fine("getting handler for command: " + command + " -> " + (_datatable.get(command.hashCode()) != null));
  604. +       }
  605. +       return _datatable.get(command.hashCode());
  606. +   }
  607. +  
  608. +   public int size()
  609. +   {
  610. +       return _datatable.size();
  611. +   }
  612. +  
  613. +   private static class SingletonHolder
  614. +   {
  615. +       protected static final BypassHandler _instance = new BypassHandler();
  616. +   }
  617. +}
  618. diff --git src/l2jorion/game/handler/IBypassHandler.java src/l2jorion/game/handler/IBypassHandler.java
  619. new file mode 100644
  620. index 0000000..e75d83a
  621. --- /dev/null
  622. +++ src/l2jorion/game/handler/IBypassHandler.java
  623. @@ -0,0 +1,10 @@
  624. +package l2jorion.game.handler;
  625. +
  626. +import l2jorion.game.model.actor.instance.L2PcInstance;
  627. +
  628. +public interface IBypassHandler
  629. +{
  630. +   public boolean handleBypass(String bypass, L2PcInstance activeChar);
  631. +  
  632. +   public String[] getBypassHandlersList();
  633. +}
  634. diff --git src/l2jorion/game/handler/voice/DressMe.java src/l2jorion/game/handler/voice/DressMe.java
  635. index d057559..474d423 100644
  636. --- src/l2jorion/game/handler/voice/DressMe.java
  637. +++ src/l2jorion/game/handler/voice/DressMe.java
  638. @@ -1,71 +1,116 @@
  639. -/*
  640. - * This program is free software: you can redistribute it and/or modify it under
  641. - * the terms of the GNU General Public License as published by the Free Software
  642. - * Foundation, either version 3 of the License, or (at your option) any later
  643. - * version.
  644. - *
  645. - * This program is distributed in the hope that it will be useful, but WITHOUT
  646. - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
  647. - * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
  648. - * details.
  649. - *
  650. - * You should have received a copy of the GNU General Public License along with
  651. - * this program. If not, see <http://www.gnu.org/licenses/>.
  652. - */
  653. +
  654.  package l2jorion.game.handler.voice;
  655.  
  656. -import l2jorion.game.datatables.sql.ItemTable;
  657. +import java.text.SimpleDateFormat;
  658. +import java.util.Date;
  659. +
  660. +import l2jorion.Config;
  661. +import l2jorion.game.cache.HtmCache;
  662. +import l2jorion.game.community.manager.BaseBBSManager;
  663. +import l2jorion.game.handler.ICustomByPassHandler;
  664.  import l2jorion.game.handler.IVoicedCommandHandler;
  665.  import l2jorion.game.model.actor.instance.L2PcInstance;
  666. +import l2jorion.game.network.serverpackets.ExShowScreenMessage;
  667.  import l2jorion.game.network.serverpackets.NpcHtmlMessage;
  668. +import l2jorion.game.network.serverpackets.PlaySound;
  669.  
  670. -public class DressMe implements IVoicedCommandHandler
  671. +public class DressMe implements IVoicedCommandHandler, ICustomByPassHandler
  672.  {
  673. -   private static final String[] VOICED_COMMANDS =
  674. +   private static String[] _voicedCommands =
  675.     {
  676. -       "dressme"
  677. +       Config.DRESS_ME_COMMAND
  678.     };
  679.    
  680.     @Override
  681. -   public boolean useVoicedCommand(String command, L2PcInstance activeChar, String parameter)
  682. +   public boolean useVoicedCommand(String command, L2PcInstance activeChar, String target)
  683.     {
  684. -       if (command.equals("dressme"))
  685. +       if (Config.ALLOW_DRESS_ME_FOR_PREMIUM && activeChar.getPremiumService() == 0)
  686.         {
  687. -           sendMainWindow(activeChar);
  688. +           activeChar.sendMessage("You're not The Premium account.");
  689. +           activeChar.sendPacket(new ExShowScreenMessage("You're not The Premium account.", 1000, 2, false));
  690. +           activeChar.sendPacket(new PlaySound("ItemSound3.sys_impossible"));
  691. +           return false;
  692.         }
  693.        
  694. +       if (command.startsWith("testd"))
  695. +       {
  696. +           showHtm2(activeChar);
  697. +       }
  698. +      
  699. +       if (command.startsWith(Config.DRESS_ME_COMMAND))
  700. +       {
  701. +           showHtm(activeChar);
  702. +       }
  703.         return true;
  704.     }
  705.    
  706. -   public static void sendMainWindow(L2PcInstance activeChar)
  707. +   private static void showHtm(L2PcInstance player)
  708.     {
  709. -       NpcHtmlMessage htm = new NpcHtmlMessage(0);
  710. -       htm.setFile("./data/html/custom/dressme/main.htm");
  711. -       htm.replace("%enabled%", activeChar.isDressMeEnabled() ? "enabled" : "disabled");
  712. +       NpcHtmlMessage htm = new NpcHtmlMessage(1);
  713. +       String text = HtmCache.getInstance().getHtm("data/html/dressme/index.htm");
  714.        
  715. -       if (activeChar.getDressMeData() == null)
  716. +       htm.setHtml(text);
  717. +      
  718.         {
  719. -           htm.replace("%chestinfo%", "You have no custom chest.");
  720. -           htm.replace("%legsinfo%", "You have no custom legs.");
  721. -           htm.replace("%bootsinfo%", "You have no custom boots.");
  722. -           htm.replace("%glovesinfo%", "You have no custom gloves.");
  723. -           htm.replace("%weapinfo%", "You have no custom weapon.");
  724. -       }
  725. -       else
  726. -       {
  727. -           htm.replace("%chestinfo%", activeChar.getDressMeData().getChestId() == 0 ? "You have no custom chest." : ItemTable.getInstance().getTemplate(activeChar.getDressMeData().getChestId()).getName());
  728. -           htm.replace("%legsinfo%", activeChar.getDressMeData().getLegsId() == 0 ? "You have no custom legs." : ItemTable.getInstance().getTemplate(activeChar.getDressMeData().getLegsId()).getName());
  729. -           htm.replace("%bootsinfo%", activeChar.getDressMeData().getBootsId() == 0 ? "You have no custom boots." : ItemTable.getInstance().getTemplate(activeChar.getDressMeData().getBootsId()).getName());
  730. -           htm.replace("%glovesinfo%", activeChar.getDressMeData().getGlovesId() == 0 ? "You have no custom gloves." : ItemTable.getInstance().getTemplate(activeChar.getDressMeData().getGlovesId()).getName());
  731. -           htm.replace("%weapinfo%", activeChar.getDressMeData().getWeapId() == 0 ? "You have no custom weapon." : ItemTable.getInstance().getTemplate(activeChar.getDressMeData().getWeapId()).getName());
  732. +           htm.replace("%time%", sdf.format(new Date(System.currentTimeMillis())));
  733. +           htm.replace("%dat%", (new SimpleDateFormat("dd/MM/yyyy")).format(new Date(System.currentTimeMillis())));
  734. +          
  735.         }
  736.        
  737. -       activeChar.sendPacket(htm);
  738. +       player.sendPacket(htm);
  739.     }
  740.    
  741. +   private static void showHtm2(L2PcInstance activeChar)
  742. +   {
  743. +       String content = HtmCache.getInstance().getHtm("data/html/CommunityBoard/Shop/1.htm");
  744. +       content = content.replace("%CharName%", String.valueOf(activeChar.getName()));
  745. +       if (content == null)
  746. +       {
  747. +           content = "<html><body><br><br><center>404 :File Not foud: 'data/html/CommunityBoard/shop/index.htm' </center></body></html>";
  748. +       }
  749. +       BaseBBSManager.separateAndSend(content, activeChar);
  750. +       content = null;
  751. +   }
  752. +  
  753. +   static SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
  754. +  
  755.     @Override
  756.     public String[] getVoicedCommandList()
  757.     {
  758. -       return VOICED_COMMANDS;
  759. +       return _voicedCommands;
  760. +   }
  761. +  
  762. +   @Override
  763. +   public String[] getByPassCommands()
  764. +   {
  765. +       return new String[]
  766. +       {
  767. +           "dressme_back"
  768. +       };
  769. +   }
  770. +  
  771. +   private enum CommandEnum
  772. +   {
  773. +       dressme_back,
  774. +   }
  775. +  
  776. +   @Override
  777. +   public void handleCommand(String command, L2PcInstance player, String parameters)
  778. +   {
  779. +       CommandEnum comm = CommandEnum.valueOf(command);
  780. +      
  781. +       if (comm == null)
  782. +       {
  783. +           return;
  784. +       }
  785. +      
  786. +       switch (comm)
  787. +       {
  788. +           case dressme_back:
  789. +           {
  790. +               showHtm(player);
  791. +           }
  792. +               break;
  793. +       }
  794.     }
  795.  }
  796. \ No newline at end of file
  797. diff --git src/l2jorion/game/model/actor/instance/L2PcInstance.java src/l2jorion/game/model/actor/instance/L2PcInstance.java
  798. index 8d9b411..f6c3536 100644
  799. --- src/l2jorion/game/model/actor/instance/L2PcInstance.java
  800. +++ src/l2jorion/game/model/actor/instance/L2PcInstance.java
  801. @@ -35,6 +35,7 @@
  802.  import java.util.List;
  803.  import java.util.Map;
  804.  import java.util.Set;
  805. +import java.util.concurrent.CopyOnWriteArrayList;
  806.  import java.util.concurrent.Future;
  807.  import java.util.concurrent.ScheduledFuture;
  808.  import java.util.concurrent.TimeUnit;
  809. @@ -282,6 +283,24 @@
  810.    
  811.     private FastSet<String> Favorites = new FastSet<>();
  812.    
  813. +   private int _armorSkinOption = 0;
  814. +   private int _weaponSkinOption = 0;
  815. +   private int _hairSkinOption = 0;
  816. +   private int _faceSkinOption = 0;
  817. +   private int _shieldSkinOption = 0;
  818. +  
  819. +   private boolean isTryingSkin = false;
  820. +   private boolean isTryingSkinPremium = false;
  821. +   private List<Integer> _armorSkins = new CopyOnWriteArrayList<>();
  822. +   private List<Integer> _weaponSkins = new CopyOnWriteArrayList<>();
  823. +   private List<Integer> _hairSkins = new CopyOnWriteArrayList<>();
  824. +   private List<Integer> _faceSkins = new CopyOnWriteArrayList<>();
  825. +   private List<Integer> _shieldSkins = new CopyOnWriteArrayList<>();
  826. +  
  827. +   private static final String INSERT_OR_UPDATE_CHARACTER_DRESSME_DATA = "INSERT INTO characters_dressme_data (obj_Id, armor_skins, armor_skin_option, weapon_skins, weapon_skin_option, hair_skins, hair_skin_option, face_skins, face_skin_option) VALUES (?,?,?,?,?,?,?,?,?) "
  828. +       + "ON DUPLICATE KEY UPDATE obj_Id=?, armor_skins=?, armor_skin_option=?, weapon_skins=?, weapon_skin_option=?, hair_skins=?, hair_skin_option=?, face_skins=?, face_skin_option=?, shield_skins=?, shield_skin_option=?";
  829. +   private static final String RESTORE_CHARACTER_DRESSME_DATA = "SELECT obj_Id, armor_skins, armor_skin_option, weapon_skins, weapon_skin_option, hair_skins, hair_skin_option, face_skins, face_skin_option, shield_skins, shield_skin_option FROM characters_dressme_data WHERE obj_id=?";
  830. +  
  831.     private static final String UPDATE_CHARACTER = "UPDATE characters SET level=?,maxHp=?,curHp=?,maxCp=?,curCp=?,maxMp=?,curMp=?,str=?,con=?,dex=?,_int=?,men=?,wit=?,face=?,hairStyle=?,hairColor=?,heading=?,x=?,y=?,z=?,exp=?,expBeforeDeath=?,sp=?,karma=?,pvpkills=?,pkkills=?,rec_have=?,rec_left=?,clanid=?,maxload=?,race=?,classid=?,deletetime=?,title=?,accesslevel=?,online=?,isin7sdungeon=?,clan_privs=?,wantspeace=?,base_class=?,onlinetime=?,punish_level=?,punish_timer=?,newbie=?,nobless=?,power_grade=?,subpledge=?,last_recom_date=?,lvl_joined_academy=?,apprentice=?,sponsor=?,varka_ketra_ally=?,clan_join_expiry_time=?,clan_create_expiry_time=?,char_name=?,death_penalty_level=?,pc_point=?,name_color=?,title_color=?,aio=?,aio_end=?,hitman_target=?,autoloot=?,autoloot_herbs=? WHERE obj_id=?";
  832.     private static final String RESTORE_CHARACTER = "SELECT account_name, obj_Id, char_name, level, maxHp, curHp, maxCp, curCp, maxMp, curMp, acc, crit, evasion, mAtk, mDef, mSpd, pAtk, pDef, pSpd, runSpd, walkSpd, str, con, dex, _int, men, wit, face, hairStyle, hairColor, sex, heading, x, y, z, movement_multiplier, attack_speed_multiplier, colRad, colHeight, exp, expBeforeDeath, sp, karma, pvpkills, pkkills, clanid, maxload, race, classid, deletetime, cancraft, title, rec_have, rec_left, accesslevel, online, char_slot, lastAccess, clan_privs, wantspeace, base_class, onlinetime, isin7sdungeon,punish_level,punish_timer,"
  833.         + "newbie, nobless, power_grade, subpledge, last_recom_date, lvl_joined_academy, apprentice, sponsor, varka_ketra_ally,clan_join_expiry_time,clan_create_expiry_time,death_penalty_level,pc_point"
  834. @@ -10096,6 +10115,7 @@
  835.             player.refreshOverloaded();
  836.            
  837.             player.restoreFriendList();
  838. +           player.restoreDressMeData();
  839.         }
  840.         catch (Exception e)
  841.         {
  842. @@ -10314,6 +10334,11 @@
  843.         storeCharBase();
  844.         storeCharSub();
  845.        
  846. +       if (!isTryingSkin() || !isTryingSkinPremium())
  847. +       {
  848. +           storeDressMeData();
  849. +       }
  850. +      
  851.         // Dont store effect if the char was on Offline trade
  852.         if (!isStored())
  853.         {
  854. @@ -21241,4 +21266,446 @@
  855.     {
  856.         return _achievement;
  857.     }
  858. +  
  859. +   @SuppressWarnings("resource")
  860. +   private synchronized void storeDressMeData()
  861. +   {
  862. +      
  863. +       Connection con = null;
  864. +       try
  865. +       {
  866. +           con = L2DatabaseFactory.getInstance().getConnection();
  867. +           PreparedStatement statement = con.prepareStatement(INSERT_OR_UPDATE_CHARACTER_DRESSME_DATA);
  868. +          
  869. +           statement.setInt(1, getObjectId());
  870. +           if (_armorSkins.isEmpty())
  871. +           {
  872. +               statement.setString(2, "");
  873. +           }
  874. +           else
  875. +           {
  876. +               String s = "";
  877. +               for (int i : _armorSkins)
  878. +               {
  879. +                   s += String.valueOf(i) + ",";
  880. +               }
  881. +               statement.setString(2, s);
  882. +           }
  883. +           statement.setInt(3, getArmorSkinOption());
  884. +          
  885. +           if (_weaponSkins.isEmpty())
  886. +           {
  887. +               statement.setString(4, "");
  888. +           }
  889. +           else
  890. +           {
  891. +               String s = "";
  892. +               for (int i : _weaponSkins)
  893. +               {
  894. +                   s += String.valueOf(i) + ",";
  895. +               }
  896. +               statement.setString(4, s);
  897. +           }
  898. +           statement.setInt(5, getWeaponSkinOption());
  899. +          
  900. +           if (_hairSkins.isEmpty())
  901. +           {
  902. +               statement.setString(6, "");
  903. +           }
  904. +           else
  905. +           {
  906. +               String s = "";
  907. +               for (int i : _hairSkins)
  908. +               {
  909. +                   s += String.valueOf(i) + ",";
  910. +               }
  911. +               statement.setString(6, s);
  912. +           }
  913. +           statement.setInt(7, getHairSkinOption());
  914. +          
  915. +           if (_faceSkins.isEmpty())
  916. +           {
  917. +               statement.setString(8, "");
  918. +           }
  919. +           else
  920. +           {
  921. +               String s = "";
  922. +               for (int i : _faceSkins)
  923. +               {
  924. +                   s += String.valueOf(i) + ",";
  925. +               }
  926. +               statement.setString(8, s);
  927. +           }
  928. +           statement.setInt(9, getFaceSkinOption());
  929. +          
  930. +           if (_shieldSkins.isEmpty())
  931. +           {
  932. +               statement.setString(10, "");
  933. +           }
  934. +           else
  935. +           {
  936. +               String s = "";
  937. +               for (int i : _shieldSkins)
  938. +               {
  939. +                   s += String.valueOf(i) + ",";
  940. +               }
  941. +               statement.setString(10, s);
  942. +           }
  943. +           statement.setInt(11, getShieldSkinOption());
  944. +          
  945. +           // second part
  946. +          
  947. +           statement.setInt(10, getObjectId());
  948. +           if (_armorSkins.isEmpty())
  949. +           {
  950. +               statement.setString(11, "");
  951. +           }
  952. +           else
  953. +           {
  954. +               String s = "";
  955. +               for (int i : _armorSkins)
  956. +               {
  957. +                   s += String.valueOf(i) + ",";
  958. +               }
  959. +               statement.setString(11, s);
  960. +           }
  961. +           statement.setInt(12, getArmorSkinOption());
  962. +          
  963. +           if (_weaponSkins.isEmpty())
  964. +           {
  965. +               statement.setString(13, "");
  966. +           }
  967. +           else
  968. +           {
  969. +               String s = "";
  970. +               for (int i : _weaponSkins)
  971. +               {
  972. +                   s += String.valueOf(i) + ",";
  973. +               }
  974. +               statement.setString(13, s);
  975. +           }
  976. +           statement.setInt(14, getWeaponSkinOption());
  977. +          
  978. +           if (_hairSkins.isEmpty())
  979. +           {
  980. +               statement.setString(15, "");
  981. +           }
  982. +           else
  983. +           {
  984. +               String s = "";
  985. +               for (int i : _hairSkins)
  986. +               {
  987. +                   s += String.valueOf(i) + ",";
  988. +               }
  989. +               statement.setString(15, s);
  990. +           }
  991. +           statement.setInt(16, getHairSkinOption());
  992. +          
  993. +           if (_faceSkins.isEmpty())
  994. +           {
  995. +               statement.setString(17, "");
  996. +           }
  997. +           else
  998. +           {
  999. +               String s = "";
  1000. +               for (int i : _faceSkins)
  1001. +               {
  1002. +                   s += String.valueOf(i) + ",";
  1003. +               }
  1004. +               statement.setString(17, s);
  1005. +           }
  1006. +           statement.setInt(18, getFaceSkinOption());
  1007. +          
  1008. +           if (_shieldSkins.isEmpty())
  1009. +           {
  1010. +               statement.setString(19, "");
  1011. +           }
  1012. +           else
  1013. +           {
  1014. +               String s = "";
  1015. +               for (int i : _shieldSkins)
  1016. +               {
  1017. +                   s += String.valueOf(i) + ",";
  1018. +               }
  1019. +               statement.setString(19, s);
  1020. +           }
  1021. +           statement.setInt(20, getShieldSkinOption());
  1022. +          
  1023. +           statement.execute();
  1024. +           statement.close();
  1025. +       }
  1026. +       catch (Exception e)
  1027. +       {
  1028. +          
  1029. +           LOG.warn("Could not store storeDressMeData():");
  1030. +           e.printStackTrace();
  1031. +          
  1032. +       }
  1033. +       finally
  1034. +       {
  1035. +          
  1036. +       }
  1037. +   }
  1038. +  
  1039. +   @SuppressWarnings("resource")
  1040. +   private void restoreDressMeData()
  1041. +   {
  1042. +      
  1043. +       Connection con = null;
  1044. +       try
  1045. +       {
  1046. +           con = L2DatabaseFactory.getInstance().getConnection();
  1047. +           PreparedStatement statement = con.prepareStatement(RESTORE_CHARACTER_DRESSME_DATA);
  1048. +          
  1049. +           statement.setInt(1, getObjectId());
  1050. +           ResultSet rset = statement.executeQuery();
  1051. +          
  1052. +           while (rset.next())
  1053. +           {
  1054. +               String armorskinIds = rset.getString("armor_skins");
  1055. +               if (armorskinIds != null && armorskinIds.length() > 0)
  1056. +               {
  1057. +                   for (String s : armorskinIds.split(","))
  1058. +                   {
  1059. +                       if (s == null)
  1060. +                       {
  1061. +                           continue;
  1062. +                       }
  1063. +                       buyArmorSkin(Integer.parseInt(s));
  1064. +                   }
  1065. +               }
  1066. +               setArmorSkinOption(rset.getInt("armor_skin_option"));
  1067. +              
  1068. +               String weaponskinIds = rset.getString("weapon_skins");
  1069. +               if (weaponskinIds != null && weaponskinIds.length() > 0)
  1070. +               {
  1071. +                   for (String s : weaponskinIds.split(","))
  1072. +                   {
  1073. +                       if (s == null)
  1074. +                       {
  1075. +                           continue;
  1076. +                       }
  1077. +                       buyWeaponSkin(Integer.parseInt(s));
  1078. +                   }
  1079. +               }
  1080. +               setWeaponSkinOption(rset.getInt("weapon_skin_option"));
  1081. +              
  1082. +               String hairskinIds = rset.getString("hair_skins");
  1083. +               if (hairskinIds != null && hairskinIds.length() > 0)
  1084. +               {
  1085. +                   for (String s : hairskinIds.split(","))
  1086. +                   {
  1087. +                       if (s == null)
  1088. +                       {
  1089. +                           continue;
  1090. +                       }
  1091. +                       buyHairSkin(Integer.parseInt(s));
  1092. +                   }
  1093. +               }
  1094. +               setHairSkinOption(rset.getInt("hair_skin_option"));
  1095. +              
  1096. +               String faceskinIds = rset.getString("face_skins");
  1097. +               if (faceskinIds != null && faceskinIds.length() > 0)
  1098. +               {
  1099. +                   for (String s : faceskinIds.split(","))
  1100. +                   {
  1101. +                       if (s == null)
  1102. +                       {
  1103. +                           continue;
  1104. +                       }
  1105. +                       buyFaceSkin(Integer.parseInt(s));
  1106. +                   }
  1107. +               }
  1108. +               setFaceSkinOption(rset.getInt("face_skin_option"));
  1109. +              
  1110. +               String shieldkinIds = rset.getString("shield_skins");
  1111. +               if (shieldkinIds != null && shieldkinIds.length() > 0)
  1112. +               {
  1113. +                   for (String s : shieldkinIds.split(","))
  1114. +                   {
  1115. +                       if (s == null)
  1116. +                       {
  1117. +                           continue;
  1118. +                       }
  1119. +                       buyShieldSkin(Integer.parseInt(s));
  1120. +                   }
  1121. +               }
  1122. +               setShieldSkinOption(rset.getInt("shield_skin_option"));
  1123. +           }
  1124. +          
  1125. +           rset.close();
  1126. +           statement.close();
  1127. +       }
  1128. +       catch (Exception e)
  1129. +       {
  1130. +           LOG.warn("Could not restore char data:");
  1131. +           e.printStackTrace();
  1132. +       }
  1133. +       finally
  1134. +       {
  1135. +          
  1136. +       }
  1137. +   }
  1138. +  
  1139. +   // Dress Me
  1140. +   public boolean isTryingSkin()
  1141. +   {
  1142. +       return isTryingSkin;
  1143. +   }
  1144. +  
  1145. +   public void setIsTryingSkin(boolean b)
  1146. +   {
  1147. +       isTryingSkin = b;
  1148. +   }
  1149. +  
  1150. +   public boolean isTryingSkinPremium()
  1151. +   {
  1152. +       return isTryingSkinPremium;
  1153. +   }
  1154. +  
  1155. +   public void setIsTryingSkinPremium(boolean b)
  1156. +   {
  1157. +       isTryingSkinPremium = b;
  1158. +   }
  1159. +  
  1160. +   public boolean hasArmorSkin(int skin)
  1161. +   {
  1162. +       return _armorSkins.contains(skin);
  1163. +   }
  1164. +  
  1165. +   public boolean hasWeaponSkin(int skin)
  1166. +   {
  1167. +       return _weaponSkins.contains(skin);
  1168. +   }
  1169. +  
  1170. +   public boolean hasHairSkin(int skin)
  1171. +   {
  1172. +       return _hairSkins.contains(skin);
  1173. +   }
  1174. +  
  1175. +   public boolean hasFaceSkin(int skin)
  1176. +   {
  1177. +       return _faceSkins.contains(skin);
  1178. +   }
  1179. +  
  1180. +   public boolean hasShieldSkin(int skin)
  1181. +   {
  1182. +       return _shieldSkins.contains(skin);
  1183. +   }
  1184. +  
  1185. +   public boolean hasEquippedArmorSkin(String skin)
  1186. +   {
  1187. +       return String.valueOf(_armorSkinOption).contains(String.valueOf(skin));
  1188. +   }
  1189. +  
  1190. +   public boolean hasEquippedWeaponSkin(String skin)
  1191. +   {
  1192. +       return String.valueOf(_weaponSkinOption).contains(String.valueOf(skin));
  1193. +   }
  1194. +  
  1195. +   public boolean hasEquippedHairSkin(String skin)
  1196. +   {
  1197. +       return String.valueOf(_hairSkinOption).contains(String.valueOf(skin));
  1198. +   }
  1199. +  
  1200. +   public boolean hasEquippedFaceSkin(String skin)
  1201. +   {
  1202. +       return String.valueOf(_faceSkinOption).contains(String.valueOf(skin));
  1203. +   }
  1204. +  
  1205. +   public boolean hasEquippedShieldSkin(String skin)
  1206. +   {
  1207. +       return String.valueOf(_shieldSkinOption).contains(String.valueOf(skin));
  1208. +   }
  1209. +  
  1210. +   public void buyArmorSkin(int id)
  1211. +   {
  1212. +       if (!_armorSkins.contains(id))
  1213. +       {
  1214. +           _armorSkins.add(id);
  1215. +       }
  1216. +   }
  1217. +  
  1218. +   public void buyWeaponSkin(int id)
  1219. +   {
  1220. +       if (!_weaponSkins.contains(id))
  1221. +       {
  1222. +           _weaponSkins.add(id);
  1223. +       }
  1224. +   }
  1225. +  
  1226. +   public void buyHairSkin(int id)
  1227. +   {
  1228. +       if (!_hairSkins.contains(id))
  1229. +       {
  1230. +           _hairSkins.add(id);
  1231. +       }
  1232. +   }
  1233. +  
  1234. +   public void buyFaceSkin(int id)
  1235. +   {
  1236. +       if (!_faceSkins.contains(id))
  1237. +       {
  1238. +           _faceSkins.add(id);
  1239. +       }
  1240. +   }
  1241. +  
  1242. +   public void buyShieldSkin(int id)
  1243. +   {
  1244. +       if (!_shieldSkins.contains(id))
  1245. +       {
  1246. +           _shieldSkins.add(id);
  1247. +       }
  1248. +   }
  1249. +  
  1250. +   public void setArmorSkinOption(int armorSkinOption)
  1251. +   {
  1252. +       _armorSkinOption = armorSkinOption;
  1253. +   }
  1254. +  
  1255. +   public int getArmorSkinOption()
  1256. +   {
  1257. +       return _armorSkinOption;
  1258. +   }
  1259. +  
  1260. +   public void setWeaponSkinOption(int weaponSkinOption)
  1261. +   {
  1262. +       _weaponSkinOption = weaponSkinOption;
  1263. +   }
  1264. +  
  1265. +   public int getWeaponSkinOption()
  1266. +   {
  1267. +       return _weaponSkinOption;
  1268. +   }
  1269. +  
  1270. +   public void setHairSkinOption(int hairSkinOption)
  1271. +   {
  1272. +       _hairSkinOption = hairSkinOption;
  1273. +   }
  1274. +  
  1275. +   public int getHairSkinOption()
  1276. +   {
  1277. +       return _hairSkinOption;
  1278. +   }
  1279. +  
  1280. +   public void setFaceSkinOption(int faceSkinOption)
  1281. +   {
  1282. +       _faceSkinOption = faceSkinOption;
  1283. +   }
  1284. +  
  1285. +   public int getFaceSkinOption()
  1286. +   {
  1287. +       return _faceSkinOption;
  1288. +   }
  1289. +  
  1290. +   public void setShieldSkinOption(int shieldSkinOption)
  1291. +   {
  1292. +       _shieldSkinOption = shieldSkinOption;
  1293. +   }
  1294. +  
  1295. +   public int getShieldSkinOption()
  1296. +   {
  1297. +       return _shieldSkinOption;
  1298. +   }
  1299. +  
  1300.  }
  1301. \ No newline at end of file
  1302. diff --git src/l2jorion/game/model/base/SkinPackage.java src/l2jorion/game/model/base/SkinPackage.java
  1303. new file mode 100644
  1304. index 0000000..1dad239
  1305. --- /dev/null
  1306. +++ src/l2jorion/game/model/base/SkinPackage.java
  1307. @@ -0,0 +1,102 @@
  1308. +package l2jorion.game.model.base;
  1309. +
  1310. +import l2jorion.game.templates.StatsSet;
  1311. +
  1312. +public class SkinPackage
  1313. +{
  1314. +   private String _type;
  1315. +   private String _name;
  1316. +   private int _id;
  1317. +   private int _weaponId;
  1318. +   private int _shieldId;
  1319. +   private int _chestId;
  1320. +   private int _hairId;
  1321. +   private int _faceId;
  1322. +   private int _legsId;
  1323. +   private int _glovesId;
  1324. +   private int _feetId;
  1325. +   private int _priceId;
  1326. +   private int _priceCount;
  1327. +  
  1328. +   public SkinPackage(StatsSet set)
  1329. +   {
  1330. +       _type = set.getString("type", "default");
  1331. +       _name = set.getString("name", "NoName");
  1332. +       _id = set.getInteger("id", 0);
  1333. +       _weaponId = set.getInteger("weaponId", 0);
  1334. +       _shieldId = set.getInteger("shieldId", 0);
  1335. +       _chestId = set.getInteger("chestId", 0);
  1336. +       _hairId = set.getInteger("hairId", 0);
  1337. +       _faceId = set.getInteger("faceId", 0);
  1338. +       _legsId = set.getInteger("legsId", 0);
  1339. +       _glovesId = set.getInteger("glovesId", 0);
  1340. +       _feetId = set.getInteger("feetId", 0);
  1341. +       _priceId = set.getInteger("priceId", 0);
  1342. +       _priceCount = set.getInteger("priceCount", 0);
  1343. +   }
  1344. +  
  1345. +   public int getId()
  1346. +   {
  1347. +       return _id;
  1348. +   }
  1349. +  
  1350. +   public String getType()
  1351. +   {
  1352. +       return _type;
  1353. +   }
  1354. +  
  1355. +   public String getName()
  1356. +   {
  1357. +       return _name;
  1358. +   }
  1359. +  
  1360. +   public int getWeaponId()
  1361. +   {
  1362. +       return _weaponId;
  1363. +   }
  1364. +  
  1365. +   public int getShieldId()
  1366. +   {
  1367. +       return _shieldId;
  1368. +   }
  1369. +  
  1370. +   public int getChestId()
  1371. +   {
  1372. +       return _chestId;
  1373. +   }
  1374. +  
  1375. +   public int getHairId()
  1376. +   {
  1377. +       return _hairId;
  1378. +   }
  1379. +  
  1380. +   public int getFaceId()
  1381. +   {
  1382. +       return _faceId;
  1383. +   }
  1384. +  
  1385. +   public int getLegsId()
  1386. +   {
  1387. +       return _legsId;
  1388. +   }
  1389. +  
  1390. +   public int getGlovesId()
  1391. +   {
  1392. +       return _glovesId;
  1393. +   }
  1394. +  
  1395. +   public int getFeetId()
  1396. +   {
  1397. +       return _feetId;
  1398. +   }
  1399. +  
  1400. +   public int getPriceId()
  1401. +   {
  1402. +       return _priceId;
  1403. +   }
  1404. +  
  1405. +   public int getPriceCount()
  1406. +   {
  1407. +       return _priceCount;
  1408. +   }
  1409. +}
  1410. \ No newline at end of file
  1411. diff --git src/l2jorion/game/network/clientpackets/RequestBypassToServer.java src/l2jorion/game/network/clientpackets/RequestBypassToServer.java
  1412. index 7bb0cf1..91070a7 100644
  1413. --- src/l2jorion/game/network/clientpackets/RequestBypassToServer.java
  1414. +++ src/l2jorion/game/network/clientpackets/RequestBypassToServer.java
  1415. @@ -22,18 +22,24 @@
  1416.  import java.sql.PreparedStatement;
  1417.  import java.sql.ResultSet;
  1418.  import java.text.NumberFormat;
  1419. +import java.text.SimpleDateFormat;
  1420. +import java.util.Date;
  1421. +import java.util.List;
  1422.  import java.util.StringTokenizer;
  1423. +import java.util.stream.Collectors;
  1424. +import java.util.stream.Stream;
  1425.  
  1426.  import javolution.text.TextBuilder;
  1427.  import l2jorion.Config;
  1428. +import l2jorion.game.cache.HtmCache;
  1429.  import l2jorion.game.community.CommunityBoard;
  1430.  import l2jorion.game.datatables.SkillTable;
  1431.  import l2jorion.game.datatables.sql.AdminCommandAccessRights;
  1432.  import l2jorion.game.datatables.sql.ItemTable;
  1433. +import l2jorion.game.datatables.xml.DressMeData;
  1434.  import l2jorion.game.handler.AdminCommandHandler;
  1435.  import l2jorion.game.handler.IAdminCommandHandler;
  1436.  import l2jorion.game.handler.custom.CustomBypassHandler;
  1437. -import l2jorion.game.handler.voice.DressMe;
  1438.  import l2jorion.game.handler.voice.Vote;
  1439.  import l2jorion.game.handler.vote.Brasil;
  1440.  import l2jorion.game.handler.vote.Hopzone;
  1441. @@ -41,7 +47,6 @@
  1442.  import l2jorion.game.handler.vote.L2TopOnline;
  1443.  import l2jorion.game.handler.vote.Network;
  1444.  import l2jorion.game.handler.vote.Topzone;
  1445. -import l2jorion.game.model.Inventory;
  1446.  import l2jorion.game.model.L2DropCategory;
  1447.  import l2jorion.game.model.L2DropData;
  1448.  import l2jorion.game.model.L2Object;
  1449. @@ -56,7 +61,7 @@
  1450.  import l2jorion.game.model.actor.instance.L2PcInstance;
  1451.  import l2jorion.game.model.actor.instance.L2RaidBossInstance;
  1452.  import l2jorion.game.model.actor.instance.L2SymbolMakerInstance;
  1453. -import l2jorion.game.model.custom.DressMeData;
  1454. +import l2jorion.game.model.base.SkinPackage;
  1455.  import l2jorion.game.model.entity.event.CTF;
  1456.  import l2jorion.game.model.entity.event.DM;
  1457.  import l2jorion.game.model.entity.event.L2Event;
  1458. @@ -71,6 +76,8 @@
  1459.  import l2jorion.game.network.serverpackets.PlaySound;
  1460.  import l2jorion.game.network.serverpackets.SystemMessage;
  1461.  import l2jorion.game.templates.L2Item;
  1462. +import l2jorion.game.templates.L2WeaponType;
  1463. +import l2jorion.game.thread.ThreadPoolManager;
  1464.  import l2jorion.game.util.GMAudit;
  1465.  import l2jorion.game.util.Util;
  1466.  import l2jorion.log.Log;
  1467. @@ -765,6 +772,429 @@
  1468.                 final int arenaId = Integer.parseInt(_command.substring(12).trim());
  1469.                 activeChar.enterOlympiadObserverMode(arenaId);
  1470.             }
  1471. +          
  1472. +           else if (_command.startsWith("dressme"))
  1473. +           {
  1474. +               if (!Config.ALLOW_DRESS_ME_IN_OLY && activeChar.isInOlympiadMode())
  1475. +               {
  1476. +                   activeChar.sendMessage("DressMe can't be used on The Olympiad game.");
  1477. +                   return;
  1478. +               }
  1479. +              
  1480. +               StringTokenizer st = new StringTokenizer(_command, " ");
  1481. +               st.nextToken();
  1482. +               if (!st.hasMoreTokens())
  1483. +               {
  1484. +                   showDressMeMainPage(activeChar);
  1485. +                   return;
  1486. +               }
  1487. +               int page = Integer.parseInt(st.nextToken());
  1488. +              
  1489. +               if (!st.hasMoreTokens())
  1490. +               {
  1491. +                   showDressMeMainPage(activeChar);
  1492. +                   return;
  1493. +               }
  1494. +               String next = st.nextToken();
  1495. +               if (next.startsWith("skinlist"))
  1496. +               {
  1497. +                   String type = st.nextToken();
  1498. +                   showSkinList(activeChar, type, page);
  1499. +               }
  1500. +               else if (next.startsWith("myskinlist"))
  1501. +               {
  1502. +                  
  1503. +                   showMySkinList(activeChar, page);
  1504. +               }
  1505. +               if (next.equals("clean"))
  1506. +               {
  1507. +                   String type = st.nextToken();
  1508. +                  
  1509. +                   if (activeChar.isTryingSkin())
  1510. +                   {
  1511. +                       activeChar.sendMessage("You can't do this while trying a skin.");
  1512. +                       activeChar.sendPacket(new ExShowScreenMessage("You can't do this while trying a skin.", 2000, 2, false));
  1513. +                       activeChar.sendPacket(new PlaySound("ItemSound3.sys_impossible"));
  1514. +                       showDressMeMainPage(activeChar);
  1515. +                       return;
  1516. +                   }
  1517. +                  
  1518. +                   switch (type.toLowerCase())
  1519. +                   {
  1520. +                       case "armor":
  1521. +                           activeChar.setArmorSkinOption(0);
  1522. +                           break;
  1523. +                       case "weapon":
  1524. +                           activeChar.setWeaponSkinOption(0);
  1525. +                           break;
  1526. +                       case "hair":
  1527. +                           activeChar.setHairSkinOption(0);
  1528. +                           break;
  1529. +                       case "face":
  1530. +                           activeChar.setFaceSkinOption(0);
  1531. +                           break;
  1532. +                       case "shield":
  1533. +                           activeChar.setShieldSkinOption(0);
  1534. +                           break;
  1535. +                   }
  1536. +                  
  1537. +                   activeChar.broadcastUserInfo();
  1538. +                   showMySkinList(activeChar, page);
  1539. +               }
  1540. +               else if (next.startsWith("buyskin"))
  1541. +               {
  1542. +                   if (!st.hasMoreTokens())
  1543. +                   {
  1544. +                       showDressMeMainPage(activeChar);
  1545. +                       return;
  1546. +                   }
  1547. +                  
  1548. +                   int skinId = Integer.parseInt(st.nextToken());
  1549. +                   String type = st.nextToken();
  1550. +                   int itemId = Integer.parseInt(st.nextToken());
  1551. +                  
  1552. +                   SkinPackage sp = null;
  1553. +                  
  1554. +                   switch (type.toLowerCase())
  1555. +                   {
  1556. +                       case "armor":
  1557. +                           sp = DressMeData.getInstance().getArmorSkinsPackage(skinId);
  1558. +                           break;
  1559. +                       case "weapon":
  1560. +                           sp = DressMeData.getInstance().getWeaponSkinsPackage(skinId);
  1561. +                          
  1562. +                           if (activeChar.getActiveWeaponItem() == null)
  1563. +                           {
  1564. +                               activeChar.sendMessage("You can't buy this skin without a weapon.");
  1565. +                               activeChar.sendPacket(new ExShowScreenMessage("You can't buy this skin without a weapon.", 2000, 2, false));
  1566. +                               activeChar.sendPacket(new PlaySound("ItemSound3.sys_impossible"));
  1567. +                               showSkinList(activeChar, type, page);
  1568. +                               return;
  1569. +                           }
  1570. +                          
  1571. +                           L2ItemInstance skinWeapon = null;
  1572. +                           if (ItemTable.getInstance().getTemplate(itemId) != null)
  1573. +                           {
  1574. +                               skinWeapon = ItemTable.getInstance().createDummyItem(itemId);
  1575. +                              
  1576. +                               if (!checkWeapons(activeChar, skinWeapon, L2WeaponType.BOW, L2WeaponType.BOW) //
  1577. +                                   || !checkWeapons(activeChar, skinWeapon, L2WeaponType.SWORD, L2WeaponType.SWORD) //
  1578. +                                   || !checkWeapons(activeChar, skinWeapon, L2WeaponType.BLUNT, L2WeaponType.BLUNT) //
  1579. +                                   || !checkWeapons(activeChar, skinWeapon, L2WeaponType.DAGGER, L2WeaponType.DAGGER) //
  1580. +                                   || !checkWeapons(activeChar, skinWeapon, L2WeaponType.POLE, L2WeaponType.POLE) //
  1581. +                                   || !checkWeapons(activeChar, skinWeapon, L2WeaponType.DUAL, L2WeaponType.DUAL) //
  1582. +                                   || !checkWeapons(activeChar, skinWeapon, L2WeaponType.DUALFIST, L2WeaponType.DUALFIST) //
  1583. +                                   || !checkWeapons(activeChar, skinWeapon, L2WeaponType.BIGSWORD, L2WeaponType.BIGSWORD) //
  1584. +                                   || !checkWeapons(activeChar, skinWeapon, L2WeaponType.FIST, L2WeaponType.FIST) //
  1585. +                                   || !checkWeapons(activeChar, skinWeapon, L2WeaponType.BIGBLUNT, L2WeaponType.BIGBLUNT))
  1586. +                               {
  1587. +                                   activeChar.sendMessage("This skin is not suitable for your weapon type.");
  1588. +                                   activeChar.sendPacket(new ExShowScreenMessage("This skin is not suitable for your weapon type.", 2000, 2, false));
  1589. +                                   activeChar.sendPacket(new PlaySound("ItemSound3.sys_impossible"));
  1590. +                                   showSkinList(activeChar, type, page);
  1591. +                                   return;
  1592. +                               }
  1593. +                           }
  1594. +                           break;
  1595. +                       case "hair":
  1596. +                           sp = DressMeData.getInstance().getHairSkinsPackage(skinId);
  1597. +                           break;
  1598. +                       case "face":
  1599. +                           sp = DressMeData.getInstance().getFaceSkinsPackage(skinId);
  1600. +                           break;
  1601. +                       case "shield":
  1602. +                           sp = DressMeData.getInstance().getShieldSkinsPackage(skinId);
  1603. +                           if (activeChar.getActiveWeaponItem() == null)
  1604. +                           {
  1605. +                               activeChar.sendMessage("You can't buy this skin without a weapon.");
  1606. +                               activeChar.sendPacket(new ExShowScreenMessage("You can't buy this skin without a weapon.", 2000, 2, false));
  1607. +                               activeChar.sendPacket(new PlaySound("ItemSound3.sys_impossible"));
  1608. +                               showSkinList(activeChar, type, page);
  1609. +                               return;
  1610. +                           }
  1611. +                          
  1612. +                           L2ItemInstance skinShield = null;
  1613. +                           if (ItemTable.getInstance().getTemplate(itemId) != null)
  1614. +                           {
  1615. +                               skinShield = ItemTable.getInstance().createDummyItem(itemId);
  1616. +                              
  1617. +                               if (!checkWeapons(activeChar, skinShield, L2WeaponType.BOW, L2WeaponType.BOW) //
  1618. +                                   || !checkWeapons(activeChar, skinShield, L2WeaponType.POLE, L2WeaponType.POLE) //
  1619. +                                   || !checkWeapons(activeChar, skinShield, L2WeaponType.DUAL, L2WeaponType.DUAL) //
  1620. +                                   || !checkWeapons(activeChar, skinShield, L2WeaponType.DUALFIST, L2WeaponType.DUALFIST) //
  1621. +                                   || !checkWeapons(activeChar, skinShield, L2WeaponType.BIGSWORD, L2WeaponType.BIGSWORD) //
  1622. +                                   || !checkWeapons(activeChar, skinShield, L2WeaponType.FIST, L2WeaponType.FIST) //
  1623. +                                   || !checkWeapons(activeChar, skinShield, L2WeaponType.BIGBLUNT, L2WeaponType.BIGBLUNT))
  1624. +                               {
  1625. +                                   activeChar.sendMessage("This skin is not suitable for your weapon type.");
  1626. +                                   activeChar.sendPacket(new ExShowScreenMessage("This skin is not suitable for your weapon type.", 2000, 2, false));
  1627. +                                   activeChar.sendPacket(new PlaySound("ItemSound3.sys_impossible"));
  1628. +                                   showSkinList(activeChar, type, page);
  1629. +                                   return;
  1630. +                               }
  1631. +                           }
  1632. +                           break;
  1633. +                   }
  1634. +                  
  1635. +                   if (sp == null)
  1636. +                   {
  1637. +                       activeChar.sendMessage("There is no such skin.");
  1638. +                       activeChar.sendPacket(new ExShowScreenMessage("There is no such skin.", 2000, 2, false));
  1639. +                       activeChar.sendPacket(new PlaySound("ItemSound3.sys_impossible"));
  1640. +                       showSkinList(activeChar, type, page);
  1641. +                       return;
  1642. +                   }
  1643. +                  
  1644. +                   if (activeChar.getPremiumService() >= 1)
  1645. +                   {
  1646. +                       activeChar.sendMessage("You have successfully purchased " + sp.getName() + " skin.");
  1647. +                       activeChar.sendPacket(new ExShowScreenMessage("You have successfully purchased " + sp.getName() + " skin.", 2000, 2, false));
  1648. +                      
  1649. +                       activeChar.setIsTryingSkinPremium(true);
  1650. +                      
  1651. +                       switch (type.toLowerCase())
  1652. +                       {
  1653. +                           case "armor":
  1654. +                               activeChar.setArmorSkinOption(skinId);
  1655. +                               break;
  1656. +                           case "weapon":
  1657. +                               activeChar.setWeaponSkinOption(skinId);
  1658. +                               break;
  1659. +                           case "hair":
  1660. +                               activeChar.setHairSkinOption(skinId);
  1661. +                               break;
  1662. +                           case "face":
  1663. +                               activeChar.setFaceSkinOption(skinId);
  1664. +                               break;
  1665. +                           case "shield":
  1666. +                               activeChar.setShieldSkinOption(skinId);
  1667. +                               break;
  1668. +                       }
  1669. +                      
  1670. +                       activeChar.broadcastUserInfo();
  1671. +                       showSkinList(activeChar, type, page);
  1672. +                       return;
  1673. +                   }
  1674. +                  
  1675. +                   if (activeChar.destroyItemByItemId("dressme", sp.getPriceId(), sp.getPriceCount(), activeChar, true))
  1676. +                   {
  1677. +                       activeChar.sendMessage("You have successfully purchased " + sp.getName() + " skin.");
  1678. +                       activeChar.sendPacket(new ExShowScreenMessage("You have successfully purchased " + sp.getName() + " skin.", 2000, 2, false));
  1679. +                      
  1680. +                       switch (type.toLowerCase())
  1681. +                       {
  1682. +                           case "armor":
  1683. +                               activeChar.buyArmorSkin(skinId);
  1684. +                               activeChar.setArmorSkinOption(skinId);
  1685. +                               break;
  1686. +                           case "weapon":
  1687. +                               activeChar.buyWeaponSkin(skinId);
  1688. +                               activeChar.setWeaponSkinOption(skinId);
  1689. +                               break;
  1690. +                           case "hair":
  1691. +                               activeChar.buyHairSkin(skinId);
  1692. +                               activeChar.setHairSkinOption(skinId);
  1693. +                               break;
  1694. +                           case "face":
  1695. +                               activeChar.buyFaceSkin(skinId);
  1696. +                               activeChar.setFaceSkinOption(skinId);
  1697. +                               break;
  1698. +                           case "shield":
  1699. +                               activeChar.buyShieldSkin(skinId);
  1700. +                               activeChar.setShieldSkinOption(skinId);
  1701. +                               break;
  1702. +                       }
  1703. +                      
  1704. +                       activeChar.broadcastUserInfo();
  1705. +                   }
  1706. +                   showSkinList(activeChar, type, page);
  1707. +               }
  1708. +               else if (next.startsWith("tryskin"))
  1709. +               {
  1710. +                  
  1711. +                   int skinId = Integer.parseInt(st.nextToken());
  1712. +                  
  1713. +                   String type = st.nextToken();
  1714. +                  
  1715. +                   if (activeChar.isTryingSkin())
  1716. +                   {
  1717. +                       activeChar.sendMessage("You are already trying a skin.");
  1718. +                       activeChar.sendPacket(new ExShowScreenMessage("You are already trying a skin.", 2000, 2, false));
  1719. +                       activeChar.sendPacket(new PlaySound("ItemSound3.sys_impossible"));
  1720. +                       showSkinList(activeChar, type, page);
  1721. +                       return;
  1722. +                   }
  1723. +                  
  1724. +                   activeChar.setIsTryingSkin(true);
  1725. +                  
  1726. +                   int oldArmorSkinId = activeChar.getArmorSkinOption();
  1727. +                   int oldWeaponSkinId = activeChar.getWeaponSkinOption();
  1728. +                   int oldHairSkinId = activeChar.getHairSkinOption();
  1729. +                   int oldFaceSkinId = activeChar.getFaceSkinOption();
  1730. +                   int oldShieldSkinId = activeChar.getShieldSkinOption();
  1731. +                  
  1732. +                   switch (type.toLowerCase())
  1733. +                   {
  1734. +                       case "armor":
  1735. +                           activeChar.setArmorSkinOption(skinId);
  1736. +                           break;
  1737. +                       case "weapon":
  1738. +                           activeChar.setWeaponSkinOption(skinId);
  1739. +                           break;
  1740. +                       case "hair":
  1741. +                           activeChar.setHairSkinOption(skinId);
  1742. +                           break;
  1743. +                       case "face":
  1744. +                           activeChar.setFaceSkinOption(skinId);
  1745. +                           break;
  1746. +                       case "shield":
  1747. +                          
  1748. +                           activeChar.setShieldSkinOption(skinId);
  1749. +                          
  1750. +                           break;
  1751. +                   }
  1752. +                  
  1753. +                   activeChar.broadcastUserInfo();
  1754. +                   showSkinList(activeChar, type, page);
  1755. +                  
  1756. +                   ThreadPoolManager.getInstance().scheduleGeneral(() ->
  1757. +                   {
  1758. +                       switch (type.toLowerCase())
  1759. +                       {
  1760. +                           case "armor":
  1761. +                               activeChar.setArmorSkinOption(oldArmorSkinId);
  1762. +                               break;
  1763. +                           case "weapon":
  1764. +                               activeChar.setWeaponSkinOption(oldWeaponSkinId);
  1765. +                               break;
  1766. +                           case "hair":
  1767. +                               activeChar.setHairSkinOption(oldHairSkinId);
  1768. +                               break;
  1769. +                           case "face":
  1770. +                               activeChar.setFaceSkinOption(oldFaceSkinId);
  1771. +                               break;
  1772. +                           case "shield":
  1773. +                               activeChar.setShieldSkinOption(oldShieldSkinId);
  1774. +                               break;
  1775. +                       }
  1776. +                      
  1777. +                       activeChar.broadcastUserInfo();
  1778. +                       activeChar.setIsTryingSkin(false);
  1779. +                   }, 5000);
  1780. +               }
  1781. +               else if (next.startsWith("setskin"))
  1782. +               {
  1783. +                   int id = Integer.parseInt(st.nextToken());
  1784. +                   String type = st.nextToken();
  1785. +                   int itemId = Integer.parseInt(st.nextToken());
  1786. +                  
  1787. +                   if (activeChar.isTryingSkin())
  1788. +                   {
  1789. +                       activeChar.sendMessage("You can't do this while trying skins.");
  1790. +                       activeChar.sendPacket(new ExShowScreenMessage("You can't do this while trying skins.", 2000, 2, false));
  1791. +                       activeChar.sendPacket(new PlaySound("ItemSound3.sys_impossible"));
  1792. +                       showMySkinList(activeChar, page);
  1793. +                       return;
  1794. +                   }
  1795. +                  
  1796. +                   if (type.toLowerCase().contains("armor") && activeChar.hasEquippedArmorSkin(String.valueOf(id)) || type.toLowerCase().contains("weapon") && activeChar.hasEquippedWeaponSkin(String.valueOf(id))
  1797. +                       || type.toLowerCase().contains("hair") && activeChar.hasEquippedHairSkin(String.valueOf(id)) || type.toLowerCase().contains("face") && activeChar.hasEquippedFaceSkin(String.valueOf(id)))
  1798. +                   {
  1799. +                       activeChar.sendMessage("You are already equipped this skin.");
  1800. +                       activeChar.sendPacket(new ExShowScreenMessage("You are already equipped this skin.", 2000, 2, false));
  1801. +                       activeChar.sendPacket(new PlaySound("ItemSound3.sys_impossible"));
  1802. +                       showMySkinList(activeChar, page);
  1803. +                       return;
  1804. +                   }
  1805. +                  
  1806. +                   switch (type.toLowerCase())
  1807. +                   {
  1808. +                       case "armor":
  1809. +                           activeChar.setArmorSkinOption(id);
  1810. +                           break;
  1811. +                       case "weapon":
  1812. +                           if (activeChar.getActiveWeaponItem() == null)
  1813. +                           {
  1814. +                               activeChar.sendMessage("You can't use this skin without a weapon.");
  1815. +                               activeChar.sendPacket(new ExShowScreenMessage("You can't use this skin without a weapon.", 2000, 2, false));
  1816. +                               activeChar.sendPacket(new PlaySound("ItemSound3.sys_impossible"));
  1817. +                               showMySkinList(activeChar, page);
  1818. +                               return;
  1819. +                           }
  1820. +                          
  1821. +                           L2ItemInstance skinWeapon = null;
  1822. +                           if (ItemTable.getInstance().getTemplate(itemId) != null)
  1823. +                           {
  1824. +                               skinWeapon = ItemTable.getInstance().createDummyItem(itemId);
  1825. +                              
  1826. +                               if (!checkWeapons(activeChar, skinWeapon, L2WeaponType.BOW, L2WeaponType.BOW) //
  1827. +                                   || !checkWeapons(activeChar, skinWeapon, L2WeaponType.SWORD, L2WeaponType.SWORD) //
  1828. +                                   || !checkWeapons(activeChar, skinWeapon, L2WeaponType.BLUNT, L2WeaponType.BLUNT) //
  1829. +                                   || !checkWeapons(activeChar, skinWeapon, L2WeaponType.DAGGER, L2WeaponType.DAGGER) //
  1830. +                                   || !checkWeapons(activeChar, skinWeapon, L2WeaponType.POLE, L2WeaponType.POLE) //
  1831. +                                   || !checkWeapons(activeChar, skinWeapon, L2WeaponType.DUAL, L2WeaponType.DUAL) //
  1832. +                                   || !checkWeapons(activeChar, skinWeapon, L2WeaponType.DUALFIST, L2WeaponType.DUALFIST) //
  1833. +                                   || !checkWeapons(activeChar, skinWeapon, L2WeaponType.BIGSWORD, L2WeaponType.BIGSWORD) //
  1834. +                                   || !checkWeapons(activeChar, skinWeapon, L2WeaponType.FIST, L2WeaponType.FIST) //
  1835. +                                   || !checkWeapons(activeChar, skinWeapon, L2WeaponType.BIGBLUNT, L2WeaponType.BIGBLUNT))
  1836. +                               {
  1837. +                                   activeChar.sendMessage("This skin is not suitable for your weapon type.");
  1838. +                                   activeChar.sendPacket(new ExShowScreenMessage("This skin is not suitable for your weapon type.", 2000, 2, false));
  1839. +                                   activeChar.sendPacket(new PlaySound("ItemSound3.sys_impossible"));
  1840. +                                   showMySkinList(activeChar, page);
  1841. +                                   return;
  1842. +                               }
  1843. +                              
  1844. +                               activeChar.setWeaponSkinOption(id);
  1845. +                           }
  1846. +                           break;
  1847. +                       case "hair":
  1848. +                           activeChar.setHairSkinOption(id);
  1849. +                           break;
  1850. +                       case "face":
  1851. +                           activeChar.setFaceSkinOption(id);
  1852. +                           break;
  1853. +                       case "shield":
  1854. +                           if (activeChar.getActiveWeaponItem() == null)
  1855. +                           {
  1856. +                               activeChar.sendMessage("You can't use this skin without a weapon.");
  1857. +                               activeChar.sendPacket(new ExShowScreenMessage("You can't use this skin without a weapon.", 2000, 2, false));
  1858. +                               activeChar.sendPacket(new PlaySound("ItemSound3.sys_impossible"));
  1859. +                               showMySkinList(activeChar, page);
  1860. +                               return;
  1861. +                           }
  1862. +                          
  1863. +                           L2ItemInstance skinShield = null;
  1864. +                           if (ItemTable.getInstance().getTemplate(itemId) != null)
  1865. +                           {
  1866. +                               skinShield = ItemTable.getInstance().createDummyItem(itemId);
  1867. +                              
  1868. +                               if (!checkWeapons(activeChar, skinShield, L2WeaponType.BOW, L2WeaponType.BOW) //
  1869. +                                   || !checkWeapons(activeChar, skinShield, L2WeaponType.POLE, L2WeaponType.POLE) //
  1870. +                                   || !checkWeapons(activeChar, skinShield, L2WeaponType.DUAL, L2WeaponType.DUAL) //
  1871. +                                   || !checkWeapons(activeChar, skinShield, L2WeaponType.DUALFIST, L2WeaponType.DUALFIST) //
  1872. +                                   || !checkWeapons(activeChar, skinShield, L2WeaponType.BIGSWORD, L2WeaponType.BIGSWORD) //
  1873. +                                   || !checkWeapons(activeChar, skinShield, L2WeaponType.FIST, L2WeaponType.FIST) //
  1874. +                                   || !checkWeapons(activeChar, skinShield, L2WeaponType.BIGBLUNT, L2WeaponType.BIGBLUNT))
  1875. +                               {
  1876. +                                   activeChar.sendMessage("This skin is not suitable for your weapon type.");
  1877. +                                   activeChar.sendPacket(new ExShowScreenMessage("This skin is not suitable for your weapon type.", 2000, 2, false));
  1878. +                                   activeChar.sendPacket(new PlaySound("ItemSound3.sys_impossible"));
  1879. +                                   showMySkinList(activeChar, page);
  1880. +                                   return;
  1881. +                               }
  1882. +                              
  1883. +                               activeChar.setShieldSkinOption(id);
  1884. +                           }
  1885. +                          
  1886. +                           break;
  1887. +                   }
  1888. +                  
  1889. +                   activeChar.broadcastUserInfo();
  1890. +                   showMySkinList(activeChar, page);
  1891. +               }
  1892. +           }
  1893. +          
  1894.             else if (_command.startsWith("dropInfo"))
  1895.             {
  1896.                 final String[] val = _command.split(" ");
  1897. @@ -929,51 +1359,7 @@
  1898.                     activeChar.sendPacket(html);
  1899.                 }
  1900.             }
  1901. -           else if (_command.equals("bp_changedressmestatus"))
  1902. -           {
  1903. -               if (activeChar.isDressMeEnabled())
  1904. -               {
  1905. -                   activeChar.setDressMeEnabled(false);
  1906. -                   activeChar.broadcastUserInfo();
  1907. -               }
  1908. -               else
  1909. -               {
  1910. -                   activeChar.setDressMeEnabled(true);
  1911. -                   activeChar.broadcastUserInfo();
  1912. -               }
  1913. -              
  1914. -               DressMe.sendMainWindow(activeChar);
  1915. -           }
  1916. -           else if (_command.startsWith("bp_editWindow"))
  1917. -           {
  1918. -               String bp = _command.substring(14);
  1919. -               StringTokenizer st = new StringTokenizer(bp);
  1920. -              
  1921. -               sendEditWindow(activeChar, st.nextToken());
  1922. -           }
  1923. -           else if (_command.startsWith("bp_setpart"))
  1924. -           {
  1925. -               String bp = _command.substring(11);
  1926. -               StringTokenizer st = new StringTokenizer(bp);
  1927. -              
  1928. -               String part = st.nextToken();
  1929. -               String type = st.nextToken();
  1930. -              
  1931. -               setPart(activeChar, part, type);
  1932. -           }
  1933. -           else if (_command.startsWith("bp_gettarget"))
  1934. -           {
  1935. -               String bp = _command.substring(13);
  1936. -               StringTokenizer st = new StringTokenizer(bp);
  1937. -              
  1938. -               String part = st.nextToken();
  1939. -              
  1940. -               stealTarget(activeChar, part);
  1941. -           }
  1942. -           else if (_command.equals("bp_main"))
  1943. -           {
  1944. -               DressMe.sendMainWindow(activeChar);
  1945. -           }
  1946. +          
  1947.         }
  1948.         catch (Exception e)
  1949.         {
  1950. @@ -1038,144 +1424,6 @@
  1951.         return formatedChance;
  1952.     }
  1953.    
  1954. -   public void stealTarget(L2PcInstance p, String part)
  1955. -   {
  1956. -       if (p.getTarget() == null || !(p.getTarget() instanceof L2PcInstance))
  1957. -       {
  1958. -           p.sendMessage("Invalid target.");
  1959. -           return;
  1960. -       }
  1961. -      
  1962. -       L2PcInstance t = (L2PcInstance) p.getTarget();
  1963. -      
  1964. -       if (p.getDressMeData() == null)
  1965. -       {
  1966. -           DressMeData dmd = new DressMeData();
  1967. -           p.setDressMeData(dmd);
  1968. -       }
  1969. -      
  1970. -       boolean returnMain = false;
  1971. -      
  1972. -       switch (part)
  1973. -       {
  1974. -           case "chest":
  1975. -           {
  1976. -               if (t.getInventory().getPaperdollItem(Inventory.PAPERDOLL_CHEST) == null)
  1977. -               {
  1978. -                   p.getDressMeData().setChestId(0);
  1979. -               }
  1980. -               else
  1981. -               {
  1982. -                   p.getDressMeData().setChestId(t.getInventory().getPaperdollItem(Inventory.PAPERDOLL_CHEST).getItemId());
  1983. -               }
  1984. -               break;
  1985. -           }
  1986. -           case "legs":
  1987. -           {
  1988. -               if (t.getInventory().getPaperdollItem(Inventory.PAPERDOLL_LEGS) == null)
  1989. -               {
  1990. -                   p.getDressMeData().setLegsId(0);
  1991. -               }
  1992. -               else
  1993. -               {
  1994. -                   p.getDressMeData().setLegsId(t.getInventory().getPaperdollItem(Inventory.PAPERDOLL_LEGS).getItemId());
  1995. -               }
  1996. -               break;
  1997. -           }
  1998. -           case "gloves":
  1999. -           {
  2000. -               if (t.getInventory().getPaperdollItem(Inventory.PAPERDOLL_GLOVES) == null)
  2001. -               {
  2002. -                   p.getDressMeData().setGlovesId(0);
  2003. -               }
  2004. -               else
  2005. -               {
  2006. -                   p.getDressMeData().setGlovesId(t.getInventory().getPaperdollItem(Inventory.PAPERDOLL_GLOVES).getItemId());
  2007. -               }
  2008. -               break;
  2009. -           }
  2010. -           case "boots":
  2011. -           {
  2012. -               if (t.getInventory().getPaperdollItem(Inventory.PAPERDOLL_FEET) == null)
  2013. -               {
  2014. -                   p.getDressMeData().setBootsId(0);
  2015. -               }
  2016. -               else
  2017. -               {
  2018. -                   p.getDressMeData().setBootsId(t.getInventory().getPaperdollItem(Inventory.PAPERDOLL_FEET).getItemId());
  2019. -               }
  2020. -               break;
  2021. -           }
  2022. -           case "weap":
  2023. -           {
  2024. -               if (t.getInventory().getPaperdollItem(Inventory.PAPERDOLL_RHAND) == null)
  2025. -               {
  2026. -                   p.getDressMeData().setWeapId(0);
  2027. -               }
  2028. -               else
  2029. -               {
  2030. -                   p.getDressMeData().setWeapId(t.getInventory().getPaperdollItem(Inventory.PAPERDOLL_RHAND).getItemId());
  2031. -               }
  2032. -               break;
  2033. -           }
  2034. -           case "all":
  2035. -           {
  2036. -               if (t.getInventory().getPaperdollItem(Inventory.PAPERDOLL_CHEST) == null)
  2037. -               {
  2038. -                   p.getDressMeData().setChestId(0);
  2039. -               }
  2040. -               else
  2041. -               {
  2042. -                   p.getDressMeData().setChestId(t.getInventory().getPaperdollItem(Inventory.PAPERDOLL_CHEST).getItemId());
  2043. -               }
  2044. -               if (t.getInventory().getPaperdollItem(Inventory.PAPERDOLL_LEGS) == null)
  2045. -               {
  2046. -                   p.getDressMeData().setLegsId(0);
  2047. -               }
  2048. -               else
  2049. -               {
  2050. -                   p.getDressMeData().setLegsId(t.getInventory().getPaperdollItem(Inventory.PAPERDOLL_LEGS).getItemId());
  2051. -               }
  2052. -               if (t.getInventory().getPaperdollItem(Inventory.PAPERDOLL_GLOVES) == null)
  2053. -               {
  2054. -                   p.getDressMeData().setGlovesId(0);
  2055. -               }
  2056. -               else
  2057. -               {
  2058. -                   p.getDressMeData().setGlovesId(t.getInventory().getPaperdollItem(Inventory.PAPERDOLL_GLOVES).getItemId());
  2059. -               }
  2060. -               if (t.getInventory().getPaperdollItem(Inventory.PAPERDOLL_FEET) == null)
  2061. -               {
  2062. -                   p.getDressMeData().setBootsId(0);
  2063. -               }
  2064. -               else
  2065. -               {
  2066. -                   p.getDressMeData().setBootsId(t.getInventory().getPaperdollItem(Inventory.PAPERDOLL_FEET).getItemId());
  2067. -               }
  2068. -               if (t.getInventory().getPaperdollItem(Inventory.PAPERDOLL_RHAND) == null)
  2069. -               {
  2070. -                   p.getDressMeData().setWeapId(0);
  2071. -               }
  2072. -               else
  2073. -               {
  2074. -                   p.getDressMeData().setWeapId(t.getInventory().getPaperdollItem(Inventory.PAPERDOLL_RHAND).getItemId());
  2075. -               }
  2076. -               returnMain = true;
  2077. -               break;
  2078. -           }
  2079. -       }
  2080. -      
  2081. -       p.broadcastUserInfo();
  2082. -       if (!returnMain)
  2083. -       {
  2084. -           sendEditWindow(p, part);
  2085. -       }
  2086. -       else
  2087. -       {
  2088. -           DressMe.sendMainWindow(p);
  2089. -       }
  2090. -   }
  2091. -  
  2092.     public String getItemNameById(int itemId)
  2093.     {
  2094.         L2Item item = ItemTable.getInstance().getTemplate(itemId);
  2095. @@ -1190,195 +1438,246 @@
  2096.         return itemName;
  2097.     }
  2098.    
  2099. -   public void setPart(L2PcInstance p, String part, String type)
  2100. +   public static void showDressMeMainPage(L2PcInstance player)
  2101.     {
  2102. -       if (p.getDressMeData() == null)
  2103. -       {
  2104. -           DressMeData dmd = new DressMeData();
  2105. -           p.setDressMeData(dmd);
  2106. -       }
  2107. +       NpcHtmlMessage htm = new NpcHtmlMessage(1);
  2108. +       String text = HtmCache.getInstance().getHtm("data/html/dressme/index.htm");
  2109.        
  2110. -       if (Config.ALLOW_DRESS_ME_FOR_ITEM)
  2111. +       htm.setHtml(text);
  2112. +      
  2113.         {
  2114. -           final int currency = Config.DRESS_ME_ITEM_ID;
  2115. -           final L2ItemInstance item = p.getInventory().getItemByItemId(currency);
  2116. +           htm.replace("%time%", sdf.format(new Date(System.currentTimeMillis())));
  2117. +           htm.replace("%dat%", (new SimpleDateFormat("dd/MM/yyyy")).format(new Date(System.currentTimeMillis())));
  2118.            
  2119. -           if (item == null || item.getCount() < Config.DRESS_ME_ITEM_COUNT)
  2120. -           {
  2121. -               p.sendMessage("You don't have enough " + getItemNameById(currency) + ".");
  2122. -               p.sendPacket(new ExShowScreenMessage("You don't have enough " + getItemNameById(currency) + ".", 3000, 2, false));
  2123. -               p.sendPacket(new PlaySound("ItemSound3.sys_impossible"));
  2124. -               return;
  2125. -           }
  2126. -          
  2127. -           p.destroyItem("Consume", item.getObjectId(), Config.DRESS_ME_ITEM_COUNT, null, true);
  2128.         }
  2129.        
  2130. -       if (Config.ALLOW_DRESS_ME_FOR_PREMIUM)
  2131. -       {
  2132. -           if (p.getPremiumService() == 0)
  2133. -           {
  2134. -               p.sendMessage("You're not The Premium Account.");
  2135. -               p.sendPacket(new ExShowScreenMessage("You're not The Premium account.", 3000, 2, false));
  2136. -               p.sendPacket(new PlaySound("ItemSound3.sys_impossible"));
  2137. -               return;
  2138. -           }
  2139. -       }
  2140. -      
  2141. -       switch (part)
  2142. -       {
  2143. -           case "chest":
  2144. -           {
  2145. -               if (Config.DRESS_ME_CHESTS.keySet().contains(type))
  2146. -               {
  2147. -                   p.getDressMeData().setChestId(Config.DRESS_ME_CHESTS.get(type));
  2148. -               }
  2149. -              
  2150. -               break;
  2151. -           }
  2152. -           case "legs":
  2153. -           {
  2154. -               if (Config.DRESS_ME_LEGS.keySet().contains(type))
  2155. -               {
  2156. -                   p.getDressMeData().setLegsId(Config.DRESS_ME_LEGS.get(type));
  2157. -               }
  2158. -              
  2159. -               break;
  2160. -           }
  2161. -           case "gloves":
  2162. -           {
  2163. -               if (Config.DRESS_ME_GLOVES.keySet().contains(type))
  2164. -               {
  2165. -                   p.getDressMeData().setGlovesId(Config.DRESS_ME_GLOVES.get(type));
  2166. -               }
  2167. -              
  2168. -               break;
  2169. -           }
  2170. -           case "boots":
  2171. -           {
  2172. -               if (Config.DRESS_ME_BOOTS.keySet().contains(type))
  2173. -               {
  2174. -                   p.getDressMeData().setBootsId(Config.DRESS_ME_BOOTS.get(type));
  2175. -               }
  2176. -              
  2177. -               break;
  2178. -           }
  2179. -           case "weap":
  2180. -           {
  2181. -               if (Config.DRESS_ME_WEAPONS.keySet().contains(type))
  2182. -               {
  2183. -                   p.getDressMeData().setWeapId(Config.DRESS_ME_WEAPONS.get(type));
  2184. -               }
  2185. -              
  2186. -               break;
  2187. -           }
  2188. -       }
  2189. -      
  2190. -       p.broadcastUserInfo();
  2191. -       sendEditWindow(p, part);
  2192. +       player.sendPacket(htm);
  2193.     }
  2194.    
  2195. -   public void sendEditWindow(L2PcInstance p, String part)
  2196. +   static SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
  2197. +  
  2198. +   private static void showSkinList(L2PcInstance player, String type, int page)
  2199.     {
  2200. -       NpcHtmlMessage htm = new NpcHtmlMessage(0);
  2201. -       htm.setFile("./data/html/custom/dressme/edit.htm");
  2202. -       htm.replace("%part%", part);
  2203. +       NpcHtmlMessage html = new NpcHtmlMessage(1);
  2204.        
  2205. -       switch (part)
  2206. +       html.setFile("data/html/dressme/allskins.htm");
  2207. +      
  2208. +       html.replace("%time%", sdf.format(new Date(System.currentTimeMillis())));
  2209. +       html.replace("%dat%", (new SimpleDateFormat("dd/MM/yyyy")).format(new Date(System.currentTimeMillis())));
  2210. +      
  2211. +       final int ITEMS_PER_PAGE = 8;
  2212. +      
  2213. +       int myPage = 1;
  2214. +       int i = 0;
  2215. +       int shown = 0;
  2216. +       boolean hasMore = false;
  2217. +       int itemId = 0;
  2218. +      
  2219. +       final StringBuilder sb = new StringBuilder();
  2220. +      
  2221. +       List<SkinPackage> tempList = null;
  2222. +       switch (type.toLowerCase())
  2223.         {
  2224. -           case "chest":
  2225. -           {
  2226. -               if (p.getDressMeData() == null)
  2227. -               {
  2228. -                   htm.replace("%partinfo%", "You have no custom chest.");
  2229. -               }
  2230. -               else
  2231. -               {
  2232. -                   htm.replace("%partinfo%", p.getDressMeData().getChestId() == 0 ? "You have no custom chest." : ItemTable.getInstance().getTemplate(p.getDressMeData().getChestId()).getName());
  2233. -               }
  2234. -               String temp = "";
  2235. -               for (String s : Config.DRESS_ME_CHESTS.keySet())
  2236. -               {
  2237. -                   temp += s + ";";
  2238. -               }
  2239. -               htm.replace("%dropboxdata%", temp);
  2240. +           case "armor":
  2241. +               tempList = DressMeData.getInstance().getArmorSkinOptions().values().stream().filter(s -> !player.hasArmorSkin(s.getId())).collect(Collectors.toList());
  2242.                 break;
  2243. -           }
  2244. -           case "legs":
  2245. -           {
  2246. -               if (p.getDressMeData() == null)
  2247. -               {
  2248. -                   htm.replace("%partinfo%", "You have no custom legs.");
  2249. -               }
  2250. -               else
  2251. -               {
  2252. -                   htm.replace("%partinfo%", p.getDressMeData().getLegsId() == 0 ? "You have no custom legs." : ItemTable.getInstance().getTemplate(p.getDressMeData().getLegsId()).getName());
  2253. -               }
  2254. -               String temp = "";
  2255. -               for (String s : Config.DRESS_ME_LEGS.keySet())
  2256. -               {
  2257. -                   temp += s + ";";
  2258. -               }
  2259. -               htm.replace("%dropboxdata%", temp);
  2260. +           case "weapon":
  2261. +               tempList = DressMeData.getInstance().getWeaponSkinOptions().values().stream().filter(s -> !player.hasWeaponSkin(s.getId())).collect(Collectors.toList());
  2262.                 break;
  2263. -           }
  2264. -           case "gloves":
  2265. -           {
  2266. -               if (p.getDressMeData() == null)
  2267. -               {
  2268. -                   htm.replace("%partinfo%", "You have no custom gloves.");
  2269. -               }
  2270. -               else
  2271. -               {
  2272. -                   htm.replace("%partinfo%", p.getDressMeData().getGlovesId() == 0 ? "You have no custom gloves." : ItemTable.getInstance().getTemplate(p.getDressMeData().getGlovesId()).getName());
  2273. -               }
  2274. -               String temp = "";
  2275. -               for (String s : Config.DRESS_ME_GLOVES.keySet())
  2276. -               {
  2277. -                   temp += s + ";";
  2278. -               }
  2279. -               htm.replace("%dropboxdata%", temp);
  2280. +           case "hair":
  2281. +               tempList = DressMeData.getInstance().getHairSkinOptions().values().stream().filter(s -> !player.hasHairSkin(s.getId())).collect(Collectors.toList());
  2282.                 break;
  2283. -           }
  2284. -           case "boots":
  2285. -           {
  2286. -               if (p.getDressMeData() == null)
  2287. -               {
  2288. -                   htm.replace("%partinfo%", "You have no custom boots.");
  2289. -               }
  2290. -               else
  2291. -               {
  2292. -                   htm.replace("%partinfo%", p.getDressMeData().getBootsId() == 0 ? "You have no custom boots." : ItemTable.getInstance().getTemplate(p.getDressMeData().getBootsId()).getName());
  2293. -               }
  2294. -               String temp = "";
  2295. -               for (String s : Config.DRESS_ME_BOOTS.keySet())
  2296. -               {
  2297. -                   temp += s + ";";
  2298. -               }
  2299. -               htm.replace("%dropboxdata%", temp);
  2300. +           case "face":
  2301. +               tempList = DressMeData.getInstance().getFaceSkinOptions().values().stream().filter(s -> !player.hasFaceSkin(s.getId())).collect(Collectors.toList());
  2302.                 break;
  2303. -           }
  2304. -           case "weap":
  2305. -           {
  2306. -               if (p.getDressMeData() == null)
  2307. -               {
  2308. -                   htm.replace("%partinfo%", "You have no custom weapon.");
  2309. -               }
  2310. -               else
  2311. -               {
  2312. -                   htm.replace("%partinfo%", p.getDressMeData().getWeapId() == 0 ? "You have no custom weapon." : ItemTable.getInstance().getTemplate(p.getDressMeData().getWeapId()).getName());
  2313. -               }
  2314. -               String temp = "";
  2315. -               for (String s : Config.DRESS_ME_WEAPONS.keySet())
  2316. -               {
  2317. -                   temp += s + ";";
  2318. -               }
  2319. -               htm.replace("%dropboxdata%", temp);
  2320. +           case "shield":
  2321. +               tempList = DressMeData.getInstance().getShieldSkinOptions().values().stream().filter(s -> !player.hasShieldSkin(s.getId())).collect(Collectors.toList());
  2322.                 break;
  2323. +       }
  2324. +      
  2325. +       if (tempList != null && !tempList.isEmpty())
  2326. +       {
  2327. +           for (SkinPackage sp : tempList)
  2328. +           {
  2329. +               if (sp == null)
  2330. +               {
  2331. +                   continue;
  2332. +               }
  2333. +              
  2334. +               if (shown == ITEMS_PER_PAGE)
  2335. +               {
  2336. +                   hasMore = true;
  2337. +                   break;
  2338. +               }
  2339. +              
  2340. +               if (myPage != page)
  2341. +               {
  2342. +                   i++;
  2343. +                   if (i == ITEMS_PER_PAGE)
  2344. +                   {
  2345. +                       myPage++;
  2346. +                       i = 0;
  2347. +                   }
  2348. +                   continue;
  2349. +               }
  2350. +              
  2351. +               if (shown == ITEMS_PER_PAGE)
  2352. +               {
  2353. +                   hasMore = true;
  2354. +                   break;
  2355. +               }
  2356. +              
  2357. +               switch (type.toLowerCase())
  2358. +               {
  2359. +                   case "armor":
  2360. +                       itemId = sp.getChestId();
  2361. +                       break;
  2362. +                   case "weapon":
  2363. +                       itemId = sp.getWeaponId();
  2364. +                       break;
  2365. +                   case "hair":
  2366. +                       itemId = sp.getHairId();
  2367. +                       break;
  2368. +                   case "face":
  2369. +                       itemId = sp.getFaceId();
  2370. +                       break;
  2371. +                   case "shield":
  2372. +                       itemId = sp.getShieldId();
  2373. +                       break;
  2374. +               }
  2375. +              
  2376. +               sb.append("<table border=0 cellspacing=0 cellpadding=2 height=36><tr>");
  2377. +               sb.append("<td width=32 align=center>" + "<button width=32 height=32 back=" + L2Item.getItemIcon(itemId) + " fore=" + L2Item.getItemIcon(itemId) + ">" + "</td>");
  2378. +               sb.append("<td width=124>" + sp.getName() + "<br1> <font color=999999>Price:</font> <font color=339966>" + L2Item.getItemNameById(sp.getPriceId()) + "</font> (<font color=LEVEL>" + sp.getPriceCount() + "</font>)</td>");
  2379. +               sb.append("<td align=center width=65>" + "<button value=\"Buy\" action=\"bypass -h dressme " + page + " buyskin  " + sp.getId() + " " + type + " " + itemId + "\" width=65 height=19 back=L2UI_ch3.smallbutton2_over fore=L2UI_ch3.smallbutton2>" + "</td>");
  2380. +               sb.append("<td align=center width=65>" + "<button value=\"Try\" action=\"bypass -h dressme " + page + " tryskin  " + sp.getId() + " " + type + "\" width=65 height=19 back=L2UI_ch3.smallbutton2_over fore=L2UI_ch3.smallbutton2>" + "</td>");
  2381. +              
  2382. +               sb.append("</tr></table>");
  2383. +               sb.append("<img src=\"L2UI.Squaregray\" width=\"300\" height=\"1\">");
  2384. +               shown++;
  2385.             }
  2386.         }
  2387.        
  2388. -       p.sendPacket(htm);
  2389. +       sb.append("<table width=300><tr>");
  2390. +       sb.append("<td align=center width=70>" + (page > 1 ? "<button value=\"< PREV\" action=\"bypass -h dressme " + (page - 1) + " skinlist " + type + "\" width=65 height=19 back=L2UI_ch3.smallbutton2_over fore=L2UI_ch3.smallbutton2>" : "") + "</td>");
  2391. +       sb.append("<td align=center width=140>Page: " + page + "</td>");
  2392. +       sb.append("<td align=center width=70>" + (hasMore ? "<button value=\"NEXT >\" action=\"bypass -h dressme " + (page + 1) + " skinlist " + type + "\" width=65 height=19 back=L2UI_ch3.smallbutton2_over fore=L2UI_ch3.smallbutton2>" : "") + "</td>");
  2393. +       sb.append("</tr></table>");
  2394. +      
  2395. +       html.replace("%showList%", sb.toString());
  2396. +       player.sendPacket(html);
  2397. +   }
  2398. +  
  2399. +   private static void showMySkinList(L2PcInstance player, int page)
  2400. +   {
  2401. +       NpcHtmlMessage html = new NpcHtmlMessage(1);
  2402. +       html.setFile("data/html/dressme/myskins.htm");
  2403. +      
  2404. +       html.replace("%time%", sdf.format(new Date(System.currentTimeMillis())));
  2405. +       html.replace("%dat%", (new SimpleDateFormat("dd/MM/yyyy")).format(new Date(System.currentTimeMillis())));
  2406. +      
  2407. +       final int ITEMS_PER_PAGE = 8;
  2408. +       int itemId = 0;
  2409. +      
  2410. +       int myPage = 1;
  2411. +       int i = 0;
  2412. +       int shown = 0;
  2413. +       boolean hasMore = false;
  2414. +      
  2415. +       final StringBuilder sb = new StringBuilder();
  2416. +      
  2417. +       List<SkinPackage> armors = DressMeData.getInstance().getArmorSkinOptions().values().stream().filter(s -> player.hasArmorSkin(s.getId())).collect(Collectors.toList());
  2418. +       List<SkinPackage> weapons = DressMeData.getInstance().getWeaponSkinOptions().values().stream().filter(s -> player.hasWeaponSkin(s.getId())).collect(Collectors.toList());
  2419. +       List<SkinPackage> hairs = DressMeData.getInstance().getHairSkinOptions().values().stream().filter(s -> player.hasHairSkin(s.getId())).collect(Collectors.toList());
  2420. +       // List<SkinPackage> faces = DressMeData.getInstance().getFaceSkinOptions().values().stream().filter(s -> player.hasFaceSkin(s.getId())).collect(Collectors.toList());
  2421. +       List<SkinPackage> shield = DressMeData.getInstance().getShieldSkinOptions().values().stream().filter(s -> player.hasShieldSkin(s.getId())).collect(Collectors.toList());
  2422. +      
  2423. +       List<SkinPackage> list = Stream.concat(armors.stream(), weapons.stream()).collect(Collectors.toList());
  2424. +       shield.stream().collect(Collectors.toList());
  2425. +       List<SkinPackage> list2 = Stream.concat(hairs.stream(), shield.stream()).collect(Collectors.toList());
  2426. +      
  2427. +       List<SkinPackage> allLists = Stream.concat(list.stream(), list2.stream()).collect(Collectors.toList());
  2428. +      
  2429. +       if (!allLists.isEmpty())
  2430. +       {
  2431. +           for (SkinPackage sp : allLists)
  2432. +           {
  2433. +               if (sp == null)
  2434. +               {
  2435. +                   continue;
  2436. +               }
  2437. +              
  2438. +               if (shown == ITEMS_PER_PAGE)
  2439. +               {
  2440. +                   hasMore = true;
  2441. +                   break;
  2442. +               }
  2443. +              
  2444. +               if (myPage != page)
  2445. +               {
  2446. +                   i++;
  2447. +                   if (i == ITEMS_PER_PAGE)
  2448. +                   {
  2449. +                       myPage++;
  2450. +                       i = 0;
  2451. +                   }
  2452. +                   continue;
  2453. +               }
  2454. +              
  2455. +               if (shown == ITEMS_PER_PAGE)
  2456. +               {
  2457. +                   hasMore = true;
  2458. +                   break;
  2459. +               }
  2460. +              
  2461. +               switch (sp.getType().toLowerCase())
  2462. +               {
  2463. +                   case "armor":
  2464. +                       itemId = sp.getChestId();
  2465. +                       break;
  2466. +                   case "weapon":
  2467. +                       itemId = sp.getWeaponId();
  2468. +                       break;
  2469. +                   case "hair":
  2470. +                       itemId = sp.getHairId();
  2471. +                       break;
  2472. +                   case "face":
  2473. +                       itemId = sp.getFaceId();
  2474. +                       break;
  2475. +                   case "shield":
  2476. +                       itemId = sp.getShieldId();
  2477. +                       break;
  2478. +               }
  2479. +              
  2480. +               sb.append("<table border=0 cellspacing=0 cellpadding=2 height=36><tr>");
  2481. +               sb.append("<td width=32 align=center>" + "<button width=32 height=32 back=" + L2Item.getItemIcon(itemId) + " fore=" + L2Item.getItemIcon(itemId) + ">" + "</td>");
  2482. +               sb.append("<td width=124>" + sp.getName() + "</td>");
  2483. +               sb.append("<td align=center width=65>" + "<button value=\"Equip\" action=\"bypass -h dressme " + page + " setskin " + sp.getId() + " " + sp.getType() + " " + itemId + "\" width=65 height=19 back=L2UI_ch3.smallbutton2_over fore=L2UI_ch3.smallbutton2>" + "</td>");
  2484. +               sb.append("<td align=center width=65>" + "<button value=\"Remove\" action=\"bypass -h dressme " + page + " clean " + sp.getType() + "\" width=65 height=19 back=L2UI_ch3.smallbutton2_over fore=L2UI_ch3.smallbutton2>" + "</td>");
  2485. +               sb.append("</tr></table>");
  2486. +               sb.append("<img src=\"L2UI.Squaregray\" width=\"300\" height=\"1\">");
  2487. +               shown++;
  2488. +           }
  2489. +       }
  2490. +      
  2491. +       sb.append("<table width=300><tr>");
  2492. +       sb.append("<td align=center width=70>" + (page > 1 ? "<button value=\"< PREV\" action=\"bypass -h dressme " + (page - 1) + " myskinlist\" width=65 height=19 back=L2UI_ch3.smallbutton2_over fore=L2UI_ch3.smallbutton2>" : "") + "</td>");
  2493. +       sb.append("<td align=center width=140>Page: " + page + "</td>");
  2494. +       sb.append("<td align=center width=70>" + (hasMore ? "<button value=\"NEXT >\" action=\"bypass -h dressme " + (page + 1) + " myskinlist\" width=65 height=19 back=L2UI_ch3.smallbutton2_over fore=L2UI_ch3.smallbutton2>" : "") + "</td>");
  2495. +       sb.append("</tr></table>");
  2496. +      
  2497. +       html.replace("%showList%", sb.toString());
  2498. +       player.sendPacket(html);
  2499. +   }
  2500. +  
  2501. +   public boolean checkWeapons(L2PcInstance player, L2ItemInstance skin, L2WeaponType weapon1, L2WeaponType weapon2)
  2502. +   {
  2503. +       if (player.getActiveWeaponItem().getItemType() == weapon1 && skin.getItem().getItemType() != weapon2)
  2504. +       {
  2505. +           return false;
  2506. +       }
  2507. +      
  2508. +       return true;
  2509.     }
  2510.    
  2511.     @Override
  2512. diff --git src/l2jorion/game/network/serverpackets/CharInfo.java src/l2jorion/game/network/serverpackets/CharInfo.java
  2513. index 862911a..7473b11 100644
  2514. --- src/l2jorion/game/network/serverpackets/CharInfo.java
  2515. +++ src/l2jorion/game/network/serverpackets/CharInfo.java
  2516. @@ -25,11 +25,13 @@
  2517.  
  2518.  import l2jorion.Config;
  2519.  import l2jorion.game.datatables.sql.NpcTable;
  2520. +import l2jorion.game.datatables.xml.DressMeData;
  2521.  import l2jorion.game.managers.CursedWeaponsManager;
  2522.  import l2jorion.game.model.Inventory;
  2523.  import l2jorion.game.model.L2Character;
  2524.  import l2jorion.game.model.actor.instance.L2CubicInstance;
  2525.  import l2jorion.game.model.actor.instance.L2PcInstance;
  2526. +import l2jorion.game.model.base.SkinPackage;
  2527.  import l2jorion.game.templates.L2NpcTemplate;
  2528.  import l2jorion.logger.Logger;
  2529.  import l2jorion.logger.LoggerFactory;
  2530. @@ -182,55 +184,81 @@
  2531.                 writeD(_activeChar.getBaseClass());
  2532.             }
  2533.            
  2534. -           if (!_activeChar.isDressMeEnabled())
  2535. +           if (Config.ALLOW_DRESS_ME_SYSTEM)
  2536.             {
  2537. -              
  2538. -               writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_DHAIR));
  2539. -              
  2540. -               if (!Config.FAKE_ARMORS)
  2541. +               if (_activeChar.getWeaponSkinOption() > 0 && getWeaponOption(_activeChar.getWeaponSkinOption()) != null)
  2542.                 {
  2543. -                   writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_HEAD));
  2544. +                   writeD(getWeaponOption(_activeChar.getWeaponSkinOption()).getWeaponId() != 0 ? getWeaponOption(_activeChar.getWeaponSkinOption()).getWeaponId() : _activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_RHAND));
  2545.                 }
  2546.                 else
  2547.                 {
  2548. -                   writeD(_fakeArmorItemId == 0 ? _inv.getPaperdollItemId(Inventory.PAPERDOLL_HEAD) : 0);
  2549. +                   writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_RHAND));
  2550.                 }
  2551.                
  2552. -               writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_RHAND));
  2553. -               writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_LHAND));
  2554. -              
  2555. -               if (!Config.FAKE_ARMORS)
  2556. +               if (_activeChar.getShieldSkinOption() > 0 && getShieldOption(_activeChar.getShieldSkinOption()) != null)
  2557.                 {
  2558. -                   writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_GLOVES));
  2559. -                   writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_CHEST));
  2560. -                   writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_LEGS));
  2561. -                   writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_FEET));
  2562. +                   writeD(getShieldOption(_activeChar.getShieldSkinOption()).getShieldId() != 0 ? getShieldOption(_activeChar.getShieldSkinOption()).getShieldId() : _activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_LHAND));
  2563.                 }
  2564.                 else
  2565.                 {
  2566. -                   writeD(_fakeArmorItemId == 0 ? _inv.getPaperdollItemId(Inventory.PAPERDOLL_GLOVES) : 0);
  2567. -                   writeD(_fakeArmorItemId == 0 ? _inv.getPaperdollItemId(Inventory.PAPERDOLL_CHEST) : _fakeArmorItemId);
  2568. -                   writeD(_fakeArmorItemId == 0 ? _inv.getPaperdollItemId(Inventory.PAPERDOLL_LEGS) : 0);
  2569. -                   writeD(_fakeArmorItemId == 0 ? _inv.getPaperdollItemId(Inventory.PAPERDOLL_FEET) : 0);
  2570. +                   writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_LHAND));
  2571.                 }
  2572.                
  2573. -               writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_BACK));
  2574. -               writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_LRHAND));
  2575. -               writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_HAIR));
  2576. -               writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_FACE));
  2577. +               if (_activeChar.getArmorSkinOption() > 0 && getArmorOption(_activeChar.getArmorSkinOption()) != null)
  2578. +               {
  2579. +                   writeD(getArmorOption(_activeChar.getArmorSkinOption()).getGlovesId() != 0 ? getArmorOption(_activeChar.getArmorSkinOption()).getGlovesId() : _activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_GLOVES));
  2580. +                   writeD(getArmorOption(_activeChar.getArmorSkinOption()).getChestId() != 0 ? getArmorOption(_activeChar.getArmorSkinOption()).getChestId() : _activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_CHEST));
  2581. +                   writeD(getArmorOption(_activeChar.getArmorSkinOption()).getLegsId() != 0 ? getArmorOption(_activeChar.getArmorSkinOption()).getLegsId() : _activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_LEGS));
  2582. +                   writeD(getArmorOption(_activeChar.getArmorSkinOption()).getFeetId() != 0 ? getArmorOption(_activeChar.getArmorSkinOption()).getFeetId() : _activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_FEET));
  2583. +               }
  2584. +               else
  2585. +               {
  2586. +                   writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_GLOVES));
  2587. +                   writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_CHEST));
  2588. +                   writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_LEGS));
  2589. +                   writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_FEET));
  2590. +               }
  2591. +              
  2592. +               writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_BACK));
  2593. +              
  2594. +               if (_activeChar.getWeaponSkinOption() > 0 && getWeaponOption(_activeChar.getWeaponSkinOption()) != null)
  2595. +               {
  2596. +                   writeD(getWeaponOption(_activeChar.getWeaponSkinOption()).getWeaponId() != 0 ? getWeaponOption(_activeChar.getWeaponSkinOption()).getWeaponId() : _activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_LRHAND));
  2597. +               }
  2598. +               else
  2599. +               {
  2600. +                   writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_LRHAND));
  2601. +               }
  2602. +              
  2603. +               if (_activeChar.getHairSkinOption() > 0 && getHairOption(_activeChar.getHairSkinOption()) != null)
  2604. +               {
  2605. +                   writeD(getHairOption(_activeChar.getHairSkinOption()).getHairId() != 0 ? getHairOption(_activeChar.getHairSkinOption()).getHairId() : _activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_HAIR));
  2606. +               }
  2607. +               else
  2608. +               {
  2609. +                   writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_HAIR));
  2610. +               }
  2611. +              
  2612. +               if (_activeChar.getFaceSkinOption() > 0 && getFaceOption(_activeChar.getFaceSkinOption()) != null)
  2613. +               {
  2614. +                   writeD(getFaceOption(_activeChar.getFaceSkinOption()).getFaceId() != 0 ? getFaceOption(_activeChar.getFaceSkinOption()).getFaceId() : _activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_FACE));
  2615. +               }
  2616. +               else
  2617. +               {
  2618. +                   writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_FACE));
  2619. +               }
  2620. +              
  2621.             }
  2622.             else
  2623.             {
  2624. -               writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_DHAIR));
  2625. -               writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_HEAD));
  2626. -               writeD(_activeChar.getDressMeData() == null ? _activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_RHAND) : (_activeChar.getDressMeData().getWeapId() == 0 ? _activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_RHAND) : _activeChar.getDressMeData().getWeapId()));
  2627. +               writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_RHAND));
  2628.                 writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_LHAND));
  2629. -               writeD(_activeChar.getDressMeData() == null ? _activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_GLOVES) : (_activeChar.getDressMeData().getGlovesId() == 0 ? _activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_GLOVES) : _activeChar.getDressMeData().getGlovesId()));
  2630. -               writeD(_activeChar.getDressMeData() == null ? _activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_CHEST) : (_activeChar.getDressMeData().getChestId() == 0 ? _activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_CHEST) : _activeChar.getDressMeData().getChestId()));
  2631. -               writeD(_activeChar.getDressMeData() == null ? _activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_LEGS) : (_activeChar.getDressMeData().getLegsId() == 0 ? _activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_LEGS) : _activeChar.getDressMeData().getLegsId()));
  2632. -               writeD(_activeChar.getDressMeData() == null ? _activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_FEET) : (_activeChar.getDressMeData().getBootsId() == 0 ? _activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_FEET) : _activeChar.getDressMeData().getBootsId()));
  2633. +               writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_GLOVES));
  2634. +               writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_CHEST));
  2635. +               writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_LEGS));
  2636. +               writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_FEET));
  2637.                 writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_BACK));
  2638. -               writeD(_activeChar.getDressMeData() == null ? _activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_RHAND) : (_activeChar.getDressMeData().getWeapId() == 0 ? _activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_RHAND) : _activeChar.getDressMeData().getWeapId()));
  2639. +               writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_LRHAND));
  2640.                 writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_HAIR));
  2641.                 writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_FACE));
  2642.             }
  2643. @@ -393,6 +421,31 @@
  2644.         }
  2645.     }
  2646.    
  2647. +   public SkinPackage getArmorOption(int option)
  2648. +   {
  2649. +       return (DressMeData.getInstance().getArmorSkinsPackage(option));
  2650. +   }
  2651. +  
  2652. +   public SkinPackage getWeaponOption(int option)
  2653. +   {
  2654. +       return DressMeData.getInstance().getWeaponSkinsPackage(option);
  2655. +   }
  2656. +  
  2657. +   public SkinPackage getHairOption(int option)
  2658. +   {
  2659. +       return DressMeData.getInstance().getHairSkinsPackage(option);
  2660. +   }
  2661. +  
  2662. +   public SkinPackage getFaceOption(int option)
  2663. +   {
  2664. +       return DressMeData.getInstance().getFaceSkinsPackage(option);
  2665. +   }
  2666. +  
  2667. +   public SkinPackage getShieldOption(int option)
  2668. +   {
  2669. +       return DressMeData.getInstance().getShieldSkinsPackage(option);
  2670. +   }
  2671. +  
  2672.     @Override
  2673.     public String getType()
  2674.     {
  2675. diff --git src/l2jorion/game/network/serverpackets/UserInfo.java src/l2jorion/game/network/serverpackets/UserInfo.java
  2676. index bdc941f..94dcaf8 100644
  2677. --- src/l2jorion/game/network/serverpackets/UserInfo.java
  2678. +++ src/l2jorion/game/network/serverpackets/UserInfo.java
  2679. @@ -22,10 +22,12 @@
  2680.  
  2681.  import l2jorion.Config;
  2682.  import l2jorion.game.datatables.sql.NpcTable;
  2683. +import l2jorion.game.datatables.xml.DressMeData;
  2684.  import l2jorion.game.managers.CursedWeaponsManager;
  2685.  import l2jorion.game.model.Inventory;
  2686.  import l2jorion.game.model.L2Summon;
  2687.  import l2jorion.game.model.actor.instance.L2PcInstance;
  2688. +import l2jorion.game.model.base.SkinPackage;
  2689.  import l2jorion.game.templates.L2NpcTemplate;
  2690.  
  2691.  public class UserInfo extends L2GameServerPacket
  2692. @@ -115,125 +117,178 @@
  2693.        
  2694.         writeD(_activeChar.getActiveWeaponItem() != null ? 40 : 20); // 20 no weapon, 40 weapon equippe
  2695.        
  2696. -       if (!_activeChar.isDressMeEnabled())
  2697. +       writeD(_activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_DHAIR));
  2698. +       writeD(_activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_REAR));
  2699. +       writeD(_activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_LEAR));
  2700. +       writeD(_activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_NECK));
  2701. +       writeD(_activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_RFINGER));
  2702. +       writeD(_activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_LFINGER));
  2703. +       writeD(_activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_HEAD));
  2704. +       if (Config.ALLOW_DRESS_ME_SYSTEM)
  2705.         {
  2706. -           writeD(_activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_DHAIR));
  2707. -           writeD(_activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_REAR));
  2708. -           writeD(_activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_LEAR));
  2709. -           writeD(_activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_NECK));
  2710. -           writeD(_activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_RFINGER));
  2711. -           writeD(_activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_LFINGER));
  2712. -          
  2713. -           if (!Config.FAKE_ARMORS)
  2714. +           if (_activeChar.getWeaponSkinOption() > 0 && getWeaponOption(_activeChar.getWeaponSkinOption()) != null)
  2715.             {
  2716. -               writeD(_activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_HEAD));
  2717. +               writeD(getWeaponOption(_activeChar.getWeaponSkinOption()).getWeaponId() != 0 ? getWeaponOption(_activeChar.getWeaponSkinOption()).getWeaponId() : _activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_RHAND));
  2718.             }
  2719.             else
  2720.             {
  2721. -               writeD(_fakeArmorObjectId == 0 ? _activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_HEAD) : 0);
  2722. +               writeD(_activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_RHAND));
  2723.             }
  2724.            
  2725. -           writeD(_activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_RHAND));
  2726. -           writeD(_activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_LHAND));
  2727. +           if (_activeChar.getShieldSkinOption() > 0 && getShieldOption(_activeChar.getShieldSkinOption()) != null)
  2728. +           {
  2729. +               writeD(getShieldOption(_activeChar.getShieldSkinOption()).getShieldId() != 0 ? getShieldOption(_activeChar.getShieldSkinOption()).getShieldId() : _activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_LHAND));
  2730. +           }
  2731. +           else
  2732. +           {
  2733. +               writeD(_activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_LHAND));
  2734. +           }
  2735.            
  2736. -           if (!Config.FAKE_ARMORS)
  2737. +           if (_activeChar.getArmorSkinOption() > 0 && getArmorOption(_activeChar.getArmorSkinOption()) != null)
  2738. +           {
  2739. +               writeD(getArmorOption(_activeChar.getArmorSkinOption()).getGlovesId() != 0 ? getArmorOption(_activeChar.getArmorSkinOption()).getGlovesId() : _activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_GLOVES));
  2740. +               writeD(getArmorOption(_activeChar.getArmorSkinOption()).getChestId() != 0 ? getArmorOption(_activeChar.getArmorSkinOption()).getChestId() : _activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_CHEST));
  2741. +               writeD(getArmorOption(_activeChar.getArmorSkinOption()).getLegsId() != 0 ? getArmorOption(_activeChar.getArmorSkinOption()).getLegsId() : _activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_LEGS));
  2742. +               writeD(getArmorOption(_activeChar.getArmorSkinOption()).getFeetId() != 0 ? getArmorOption(_activeChar.getArmorSkinOption()).getFeetId() : _activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_FEET));
  2743. +           }
  2744. +           else
  2745.             {
  2746.                 writeD(_activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_GLOVES));
  2747.                 writeD(_activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_CHEST));
  2748.                 writeD(_activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_LEGS));
  2749.                 writeD(_activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_FEET));
  2750.             }
  2751. +          
  2752. +           writeD(_activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_BACK));
  2753. +          
  2754. +           if (_activeChar.getWeaponSkinOption() > 0 && getWeaponOption(_activeChar.getWeaponSkinOption()) != null)
  2755. +           {
  2756. +               writeD(getWeaponOption(_activeChar.getWeaponSkinOption()).getWeaponId() != 0 ? getWeaponOption(_activeChar.getWeaponSkinOption()).getWeaponId() : _activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_LRHAND));
  2757. +           }
  2758.             else
  2759.             {
  2760. -               writeD(_fakeArmorObjectId == 0 ? _activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_GLOVES) : 0);
  2761. -               writeD(_fakeArmorObjectId == 0 ? _activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_CHEST) : _fakeArmorObjectId);
  2762. -               writeD(_fakeArmorObjectId == 0 ? _activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_LEGS) : 0);
  2763. -               writeD(_fakeArmorObjectId == 0 ? _activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_FEET) : 0);
  2764. +               writeD(_activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_LRHAND));
  2765.             }
  2766.            
  2767. +           if (_activeChar.getHairSkinOption() > 0 && getHairOption(_activeChar.getHairSkinOption()) != null)
  2768. +           {
  2769. +               writeD(getHairOption(_activeChar.getHairSkinOption()).getHairId() != 0 ? getHairOption(_activeChar.getHairSkinOption()).getHairId() : _activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_HAIR));
  2770. +           }
  2771. +           else
  2772. +           {
  2773. +               writeD(_activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_HAIR));
  2774. +           }
  2775. +          
  2776. +           if (_activeChar.getFaceSkinOption() > 0 && getFaceOption(_activeChar.getFaceSkinOption()) != null)
  2777. +           {
  2778. +               writeD(getFaceOption(_activeChar.getFaceSkinOption()).getFaceId() != 0 ? getFaceOption(_activeChar.getFaceSkinOption()).getFaceId() : _activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_FACE));
  2779. +           }
  2780. +           else
  2781. +           {
  2782. +               writeD(_activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_FACE));
  2783. +           }
  2784. +          
  2785. +       }
  2786. +       else
  2787. +       {
  2788. +           writeD(_activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_RHAND));
  2789. +           writeD(_activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_LHAND));
  2790. +           writeD(_activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_GLOVES));
  2791. +           writeD(_activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_CHEST));
  2792. +           writeD(_activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_LEGS));
  2793. +           writeD(_activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_FEET));
  2794.             writeD(_activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_BACK));
  2795.             writeD(_activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_LRHAND));
  2796.             writeD(_activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_HAIR));
  2797.             writeD(_activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_FACE));
  2798. -          
  2799. -           writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_DHAIR));
  2800. -           writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_REAR));
  2801. -           writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_LEAR));
  2802. -           writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_NECK));
  2803. -           writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_RFINGER));
  2804. -           writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_LFINGER));
  2805. -          
  2806. -           if (!Config.FAKE_ARMORS)
  2807. +       }
  2808. +      
  2809. +       writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_DHAIR));
  2810. +       writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_REAR));
  2811. +       writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_LEAR));
  2812. +       writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_NECK));
  2813. +       writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_RFINGER));
  2814. +       writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_LFINGER));
  2815. +       writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_HEAD));
  2816. +      
  2817. +       if (Config.ALLOW_DRESS_ME_SYSTEM)
  2818. +       {
  2819. +           if (_activeChar.getWeaponSkinOption() > 0 && getWeaponOption(_activeChar.getWeaponSkinOption()) != null)
  2820.             {
  2821. -               writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_HEAD));
  2822. +               writeD(getWeaponOption(_activeChar.getWeaponSkinOption()).getWeaponId() != 0 ? getWeaponOption(_activeChar.getWeaponSkinOption()).getWeaponId() : _activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_RHAND));
  2823.             }
  2824.             else
  2825.             {
  2826. -               writeD(_fakeArmorObjectId == 0 ? _activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_HEAD) : 0);
  2827. +               writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_RHAND));
  2828.             }
  2829.            
  2830. -           writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_RHAND));
  2831. -           writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_LHAND));
  2832. +           if (_activeChar.getShieldSkinOption() > 0 && getShieldOption(_activeChar.getShieldSkinOption()) != null)
  2833. +           {
  2834. +               writeD(getShieldOption(_activeChar.getShieldSkinOption()).getShieldId() != 0 ? getShieldOption(_activeChar.getShieldSkinOption()).getShieldId() : _activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_LHAND));
  2835. +           }
  2836. +           else
  2837. +           {
  2838. +               writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_LHAND));
  2839. +           }
  2840.            
  2841. -           if (!Config.FAKE_ARMORS)
  2842. +           if (_activeChar.getArmorSkinOption() > 0 && getArmorOption(_activeChar.getArmorSkinOption()) != null)
  2843. +           {
  2844. +               writeD(getArmorOption(_activeChar.getArmorSkinOption()).getGlovesId() != 0 ? getArmorOption(_activeChar.getArmorSkinOption()).getGlovesId() : _activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_GLOVES));
  2845. +               writeD(getArmorOption(_activeChar.getArmorSkinOption()).getChestId() != 0 ? getArmorOption(_activeChar.getArmorSkinOption()).getChestId() : _activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_CHEST));
  2846. +               writeD(getArmorOption(_activeChar.getArmorSkinOption()).getLegsId() != 0 ? getArmorOption(_activeChar.getArmorSkinOption()).getLegsId() : _activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_LEGS));
  2847. +               writeD(getArmorOption(_activeChar.getArmorSkinOption()).getFeetId() != 0 ? getArmorOption(_activeChar.getArmorSkinOption()).getFeetId() : _activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_FEET));
  2848. +           }
  2849. +           else
  2850.             {
  2851.                 writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_GLOVES));
  2852.                 writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_CHEST));
  2853.                 writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_LEGS));
  2854.                 writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_FEET));
  2855.             }
  2856. +          
  2857. +           writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_BACK));
  2858. +          
  2859. +           if (_activeChar.getWeaponSkinOption() > 0 && getWeaponOption(_activeChar.getWeaponSkinOption()) != null)
  2860. +           {
  2861. +               writeD(getWeaponOption(_activeChar.getWeaponSkinOption()).getWeaponId() != 0 ? getWeaponOption(_activeChar.getWeaponSkinOption()).getWeaponId() : _activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_LRHAND));
  2862. +           }
  2863.             else
  2864.             {
  2865. -               writeD(_fakeArmorObjectId == 0 ? _activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_GLOVES) : 0);
  2866. -               writeD(_fakeArmorObjectId == 0 ? _activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_CHEST) : _fakeArmorItemId);
  2867. -               writeD(_fakeArmorObjectId == 0 ? _activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_LEGS) : 0);
  2868. -               writeD(_fakeArmorObjectId == 0 ? _activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_FEET) : 0);
  2869. +               writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_LRHAND));
  2870.             }
  2871.            
  2872. +           if (_activeChar.getHairSkinOption() > 0 && getHairOption(_activeChar.getHairSkinOption()) != null)
  2873. +           {
  2874. +               writeD(getHairOption(_activeChar.getHairSkinOption()).getHairId() != 0 ? getHairOption(_activeChar.getHairSkinOption()).getHairId() : _activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_HAIR));
  2875. +           }
  2876. +           else
  2877. +           {
  2878. +               writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_HAIR));
  2879. +           }
  2880. +          
  2881. +           if (_activeChar.getFaceSkinOption() > 0 && getFaceOption(_activeChar.getFaceSkinOption()) != null)
  2882. +           {
  2883. +               writeD(getFaceOption(_activeChar.getFaceSkinOption()).getFaceId() != 0 ? getFaceOption(_activeChar.getFaceSkinOption()).getFaceId() : _activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_FACE));
  2884. +           }
  2885. +           else
  2886. +           {
  2887. +               writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_FACE));
  2888. +           }
  2889. +          
  2890. +       }
  2891. +       else
  2892. +       {
  2893. +           writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_RHAND));
  2894. +           writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_LHAND));
  2895. +           writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_GLOVES));
  2896. +           writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_CHEST));
  2897. +           writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_LEGS));
  2898. +           writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_FEET));
  2899.             writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_BACK));
  2900.             writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_LRHAND));
  2901.             writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_HAIR));
  2902.             writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_FACE));
  2903.         }
  2904. -       else
  2905. -       {
  2906. -           writeD(_activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_DHAIR));
  2907. -           writeD(_activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_REAR));
  2908. -           writeD(_activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_LEAR));
  2909. -           writeD(_activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_NECK));
  2910. -           writeD(_activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_RFINGER));
  2911. -           writeD(_activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_LFINGER));
  2912. -           writeD(_activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_HEAD));
  2913. -           writeD(_activeChar.getDressMeData() == null ? _activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_RHAND) : (_activeChar.getDressMeData().getWeapId() == 0 ? _activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_RHAND) : _activeChar.getDressMeData().getWeapId()));
  2914. -           writeD(_activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_LHAND));
  2915. -           writeD(_activeChar.getDressMeData() == null ? _activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_GLOVES) : (_activeChar.getDressMeData().getGlovesId() == 0 ? _activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_GLOVES) : _activeChar.getDressMeData().getGlovesId()));
  2916. -           writeD(_activeChar.getDressMeData() == null ? _activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_CHEST) : (_activeChar.getDressMeData().getChestId() == 0 ? _activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_CHEST) : _activeChar.getDressMeData().getChestId()));
  2917. -           writeD(_activeChar.getDressMeData() == null ? _activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_LEGS) : (_activeChar.getDressMeData().getLegsId() == 0 ? _activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_LEGS) : _activeChar.getDressMeData().getLegsId()));
  2918. -           writeD(_activeChar.getDressMeData() == null ? _activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_FEET) : (_activeChar.getDressMeData().getBootsId() == 0 ? _activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_FEET) : _activeChar.getDressMeData().getBootsId()));
  2919. -           writeD(_activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_BACK));
  2920. -           writeD(_activeChar.getDressMeData() == null ? _activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_RHAND) : (_activeChar.getDressMeData().getWeapId() == 0 ? _activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_RHAND) : _activeChar.getDressMeData().getWeapId()));
  2921. -           writeD(_activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_HAIR));
  2922. -           writeD(_activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_FACE));
  2923. -          
  2924. -           writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_DHAIR));
  2925. -           writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_REAR));
  2926. -           writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_LEAR));
  2927. -           writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_NECK));
  2928. -           writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_RFINGER));
  2929. -           writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_LFINGER));
  2930. -           writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_HEAD));
  2931. -           writeD(_activeChar.getDressMeData() == null ? _activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_RHAND) : (_activeChar.getDressMeData().getWeapId() == 0 ? _activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_RHAND) : _activeChar.getDressMeData().getWeapId()));
  2932. -           writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_LHAND));
  2933. -           writeD(_activeChar.getDressMeData() == null ? _activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_GLOVES) : (_activeChar.getDressMeData().getGlovesId() == 0 ? _activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_GLOVES) : _activeChar.getDressMeData().getGlovesId()));
  2934. -           writeD(_activeChar.getDressMeData() == null ? _activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_CHEST) : (_activeChar.getDressMeData().getChestId() == 0 ? _activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_CHEST) : _activeChar.getDressMeData().getChestId()));
  2935. -           writeD(_activeChar.getDressMeData() == null ? _activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_LEGS) : (_activeChar.getDressMeData().getLegsId() == 0 ? _activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_LEGS) : _activeChar.getDressMeData().getLegsId()));
  2936. -           writeD(_activeChar.getDressMeData() == null ? _activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_FEET) : (_activeChar.getDressMeData().getBootsId() == 0 ? _activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_FEET) : _activeChar.getDressMeData().getBootsId()));
  2937. -           writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_BACK));
  2938. -           writeD(_activeChar.getDressMeData() == null ? _activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_RHAND) : (_activeChar.getDressMeData().getWeapId() == 0 ? _activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_RHAND) : _activeChar.getDressMeData().getWeapId()));
  2939. -           writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_HAIR));
  2940. -           writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_FACE));
  2941. -          
  2942. -       }
  2943.        
  2944.         writeH(0x00);
  2945.         writeH(0x00);
  2946. @@ -407,6 +462,31 @@
  2947.         }
  2948.     }
  2949.    
  2950. +   public SkinPackage getArmorOption(int option)
  2951. +   {
  2952. +       return (DressMeData.getInstance().getArmorSkinsPackage(option));
  2953. +   }
  2954. +  
  2955. +   public SkinPackage getWeaponOption(int option)
  2956. +   {
  2957. +       return DressMeData.getInstance().getWeaponSkinsPackage(option);
  2958. +   }
  2959. +  
  2960. +   public SkinPackage getHairOption(int option)
  2961. +   {
  2962. +       return DressMeData.getInstance().getHairSkinsPackage(option);
  2963. +   }
  2964. +  
  2965. +   public SkinPackage getFaceOption(int option)
  2966. +   {
  2967. +       return DressMeData.getInstance().getFaceSkinsPackage(option);
  2968. +   }
  2969. +  
  2970. +   public SkinPackage getShieldOption(int option)
  2971. +   {
  2972. +       return DressMeData.getInstance().getShieldSkinsPackage(option);
  2973. +   }
  2974. +  
  2975.     @Override
  2976.     public String getType()
  2977.     {
  2978. diff --git src/l2jorion/game/templates/L2Item.java src/l2jorion/game/templates/L2Item.java
  2979. index 7cc35b9..7372f22 100644
  2980. --- src/l2jorion/game/templates/L2Item.java
  2981. +++ src/l2jorion/game/templates/L2Item.java
  2982. @@ -29,6 +29,7 @@
  2983.  import javolution.util.FastList;
  2984.  import javolution.util.FastMap;
  2985.  import l2jorion.Config;
  2986. +import l2jorion.game.datatables.sql.ItemTable;
  2987.  import l2jorion.game.model.L2Character;
  2988.  import l2jorion.game.model.L2Effect;
  2989.  import l2jorion.game.model.L2Skill;
  2990. @@ -648,7 +649,21 @@
  2991.         return (getItemType() == L2EtcItemType.QUEST);
  2992.     }
  2993.    
  2994. -   public String getItemIcon(int itemId)
  2995. +   public static String getItemNameById(int itemId)
  2996. +   {
  2997. +       L2Item item = ItemTable.getInstance().getTemplate(itemId);
  2998. +      
  2999. +       String itemName = "NoName";
  3000. +      
  3001. +       if (itemId != 0)
  3002. +       {
  3003. +           itemName = item.getName();
  3004. +       }
  3005. +      
  3006. +       return itemName;
  3007. +   }
  3008. +  
  3009. +   public static String getItemIcon(int itemId)
  3010.     {
  3011.         if (_Icons != null && !_Icons.isEmpty())
  3012.         {
  3013.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement