-JRGames-

BeautyShop + New System Skin + Skin Item

Apr 14th, 2023
181
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. diff --git a/cfiles/game/config/main/L2jOrion.ini b/cfiles/game/config/main/L2jOrion.ini
  2. index bf1867e..eddb8e7 100644
  3. --- a/cfiles/game/config/main/L2jOrion.ini
  4. +++ b/cfiles/game/config/main/L2jOrion.ini
  5. @@ -333,4 +333,7 @@
  6.  NewPlayerEffect = False
  7.  
  8.  # It shows Castle's Lord clan crest in town nearby npc name
  9. -ShowNpcCrest = False
  10. \ No newline at end of file
  11. +ShowNpcCrest = False
  12. +
  13. +TextureSkinPackageName = MAYKE_MENDES_SKIN
  14. +TextureSkinSuffixName = _f
  15. \ No newline at end of file
  16. diff --git a/data/html/SkinManager/Main.htm b/data/html/SkinManager/Main.htm
  17. new file mode 100644
  18. index 0000000..c863c08
  19. --- /dev/null
  20. +++ b/data/html/SkinManager/Main.htm
  21. @@ -0,0 +1,31 @@
  22. +<html>
  23. +   <body>
  24. +   <title>Skin Manager</title>
  25. +   <br>
  26. +   <center>
  27. +       <center><img src="L2UI.SquareWhite" width=200 height=1></center>
  28. +<table bgcolor=3c3c3c width=204>
  29. +<tr>
  30. +<td><center><font color="FFFF00">Skin Test / Buy </font></center></td>
  31. +</tr>
  32. +</table></center>
  33. +<center><img src="L2UI.SquareWhite" width=200 height=1></center>
  34. +<br>
  35. +   </center>
  36. +       <table width=300>
  37. +           %skins%<br><br>
  38. +       </table>
  39. +       <center>
  40. +      
  41. +      
  42. +       <table width=270 align=center >
  43. +           <tr>
  44. +          
  45. +               %pages%
  46. +              
  47. +           </tr>
  48. +       </table>
  49. +       </center>
  50. +      
  51. +   </body>
  52. +</html>
  53. \ No newline at end of file
  54. diff --git a/data/html/SkinManager/Skin.htm b/data/html/SkinManager/Skin.htm
  55. new file mode 100644
  56. index 0000000..fb4d8cb
  57. --- /dev/null
  58. +++ b/data/html/SkinManager/Skin.htm
  59. @@ -0,0 +1,52 @@
  60. +<html>
  61. +   <body>
  62. +   <title>Skin Manager</title>
  63. +   <br><br>
  64. +   <center>
  65. +       <font color=LEVEL >SKIN DATA</font>
  66. +      
  67. +   </center>
  68. +       <table width=310 bgcolor=000000 height=80>
  69. +           <tr>
  70. +               <td width=50>
  71. +              
  72. +               </td>
  73. +               <td align=left>
  74. +              
  75. +                   <font color=LEVEL>- Skin Name: </font>
  76. +                   <font color=ff0000> %skiname% </font><br1>
  77. +                   <font color=LEVEL>- Skin Price:</font>
  78. +                   <font color=ff0000> %skinprice% </font>
  79. +                   <font color=87ff26> %skinpriceid% </font>
  80. +                  
  81. +                  
  82. +               </td>
  83. +              
  84. +           </tr>
  85. +      
  86. +       </table>
  87. +      
  88. +       <center><br><br><br>
  89. +       <font color=LEVEL > FUNCTIONS</font>
  90. +      
  91. +   </center>
  92. +      
  93. +       <table width=301 bgcolor=0000 >
  94. +  
  95. +          
  96. +           %showbutton%
  97. +              
  98. +       </table>
  99. +       <center>
  100. +       <table width=310 align=center>
  101. +           <tr>
  102. +               <td align=center><br><br>
  103. +               <button value="Back" action="bypass -h skinPage 1" width=75 height=21 back="L2UI_ch3.Btn1_normalOn" fore="L2UI_ch3.Btn1_normal">
  104. +               </td>
  105. +              
  106. +              
  107. +           </tr>
  108. +       </table>
  109. +       </center>
  110. +   </body>
  111. +</html>
  112. \ No newline at end of file
  113. diff --git a/data/xml/Skins.xml b/data/xml/Skins.xml
  114. new file mode 100644
  115. index 0000000..eaeaff8
  116. --- /dev/null
  117. +++ b/data/xml/Skins.xml
  118. @@ -0,0 +1,68 @@
  119. +<?xml version="1.0" encoding="utf-8"?>
  120. +<list>
  121. +<!-- Try Skins  -->
  122. +
  123. +   <skin id="1" name="Anakim Suit" utx_name="anakim" chest="10100" legs="0" gloves="0" feet="0" hair="10101" isVip="0" price_id="3470" price="100">
  124. +
  125. +   </skin>
  126. +  
  127. +   <skin id="2" name="White Knight" utx_name="rei2" chest="10129" legs="0" gloves="0" feet="0" hair="10130" isVip="0"  price_id="3470" price="10">
  128. +
  129. +   </skin>
  130. +  
  131. +   <skin id="3" name="Archer Suit B" utx_name="archer2" chest="10105" legs="0" gloves="0" feet="0" hair="10106" isVip="0"  price_id="3470" price="10">
  132. +
  133. +   </skin>
  134. +  
  135. +   <skin id="4" name="Beleth Suit" utx_name="beleth" chest="10124" legs="0" gloves="0" feet="0" hair="10125" isVip="0"  price_id="3470" price="10">
  136. +
  137. +   </skin>
  138. +  
  139. +   <skin id="5" name="Cat Suit" utx_name="cat" chest="10144" legs="0" gloves="0" feet="0" hair="15017" isVip="0"  price_id="3470" price="10">
  140. +   </skin>
  141. +  
  142. +   <skin id="6" name="CowBoy Suit" utx_name="cowboy" chest="10110" legs="0" gloves="0" feet="0" hair="0" isVip="0"  price_id="3470" price="10">
  143. +   </skin>
  144. +  
  145. +   <skin id="7" name="Cyborg Suit" utx_name="cyborg" chest="10105" legs="0" gloves="0" feet="0" hair="10106" isVip="0"  price_id="3470" price="10">
  146. +   </skin>
  147. +  
  148. +   <skin id="8" name="Dark Assassin Suit" utx_name="dark" chest="10122" legs="0" gloves="0" feet="0" hair="10123" isVip="0"  price_id="3470" price="10">
  149. +   </skin>
  150. +  
  151. +   <skin id="9" name="Dragon Born Suit" utx_name="dragon" chest="10156" legs="0" gloves="0" feet="0" hair="15047" isVip="0"  price_id="3470" price="10">
  152. +   </skin>
  153. +  
  154. +   <skin id="10" name="Dark Knight Suit" utx_name="knight" chest="10112" legs="0" gloves="0" feet="0" hair="10113" isVip="0"  price_id="3470" price="10">
  155. +   </skin>
  156. +  
  157. +   <skin id="11" name="Light Assassin Suit" utx_name="light" chest="10120" legs="0" gloves="0" feet="0" hair="10121" isVip="0"  price_id="3470" price="10">
  158. +   </skin>
  159. +  
  160. +   <skin id="12" name="Saxon Guard Suit" utx_name="valkyri" chest="10135" legs="0" gloves="0" feet="0" hair="0" isVip="0"  price_id="3470" price="10">
  161. +   </skin>
  162. +  
  163. +   <skin id="13" name="Ninja Suit" utx_name="ninja" chest="10118" legs="0" gloves="0" feet="0" hair="0" isVip="0"  price_id="3470" price="10">
  164. +   </skin>
  165. +  
  166. +   <skin id="14" name="Red Zaken Suit" utx_name="pirate" chest="10136" legs="0" gloves="0" feet="0" hair="10137" isVip="0"  price_id="3470" price="10">
  167. +   </skin>
  168. +  
  169. +   <skin id="15" name="Blue Zaken Suit" utx_name="pirate_blue" chest="10136" legs="0" gloves="0" feet="0" hair="10137" isVip="0"  price_id="3470" price="10">
  170. +   </skin>
  171. +  
  172. +   <skin id="16" name="King Setim Suit" utx_name="rei" chest="10127" legs="0" gloves="0" feet="0" hair="10128" isVip="0"  price_id="3470" price="10">
  173. +   </skin>
  174. +  
  175. +   <skin id="17" name="King White Setim Suit" utx_name="rei2" chest="10133" legs="0" gloves="0" feet="0" hair="10134" isVip="0"  price_id="3470" price="10">
  176. +   </skin>
  177. +  
  178. +   <skin id="18" name="Priest Suit" utx_name="saint" chest="10140" legs="0" gloves="0" feet="0" hair="10141" isVip="0"  price_id="3470" price="10">
  179. +   </skin>
  180. +  
  181. +   <skin id="19" name="Black Samurai Suit" utx_name="samurai" chest="10142" legs="0" gloves="0" feet="0" hair="10143" isVip="0"  price_id="3470" price="10">
  182. +   </skin>
  183. +  
  184. +   <!-- L2 Urban -->
  185. +  
  186. +</list>
  187. \ No newline at end of file
  188. diff --git a/src/Base/SkinBeauty/Skin.java b/src/Base/SkinBeauty/Skin.java
  189. new file mode 100644
  190. index 0000000..b69a76d
  191. --- /dev/null
  192. +++ b/src/Base/SkinBeauty/Skin.java
  193. @@ -0,0 +1,110 @@
  194. +package Base.SkinBeauty;
  195. +
  196. +import l2jorion.game.datatables.sql.ItemTable;
  197. +import l2jorion.game.templates.L2Item;
  198. +import l2jorion.game.templates.StatsSet;
  199. +
  200. +public class Skin
  201. +{
  202. +   private int id;
  203. +  
  204. +   private StatsSet stats;
  205. +  
  206. +   private boolean released;
  207. +  
  208. +   public Skin(int id, StatsSet stats)
  209. +   {
  210. +       this.id = id;
  211. +       this.stats = stats;
  212. +   }
  213. +  
  214. +   public StatsSet getStats()
  215. +   {
  216. +       return this.stats;
  217. +   }
  218. +  
  219. +   public void setStats(StatsSet stats)
  220. +   {
  221. +       this.stats = stats;
  222. +   }
  223. +  
  224. +   public int getId()
  225. +   {
  226. +       return this.id;
  227. +   }
  228. +  
  229. +   public void setId(int id)
  230. +   {
  231. +       this.id = id;
  232. +   }
  233. +  
  234. +   public boolean isReleased()
  235. +   {
  236. +       return this.released;
  237. +   }
  238. +  
  239. +   public void setReleased(boolean released)
  240. +   {
  241. +       this.released = released;
  242. +   }
  243. +  
  244. +   public int getPrice()
  245. +   {
  246. +       return getStats().getInteger("price");
  247. +   }
  248. +  
  249. +   public int getPriceId()
  250. +   {
  251. +       return getStats().getInteger("price_id");
  252. +   }
  253. +  
  254. +   public String getName()
  255. +   {
  256. +       return getStats().getString("name");
  257. +   }
  258. +  
  259. +   public boolean isVip()
  260. +   {
  261. +       return (getStats().getInteger("isVip") == 1);
  262. +   }
  263. +  
  264. +   public int getHair()
  265. +   {
  266. +       return getStats().getInteger("hair");
  267. +   }
  268. +  
  269. +   public int getChest()
  270. +   {
  271. +       return getStats().getInteger("chest");
  272. +   }
  273. +  
  274. +   public int getGloves()
  275. +   {
  276. +       return getStats().getInteger("gloves");
  277. +   }
  278. +  
  279. +   public int getLegs()
  280. +   {
  281. +       return getStats().getInteger("legs");
  282. +   }
  283. +  
  284. +   public int getFeet()
  285. +   {
  286. +       return getStats().getInteger("feet");
  287. +   }
  288. +  
  289. +   public String getUtxName()
  290. +   {
  291. +       return getStats().getString("utx_name");
  292. +   }
  293. +  
  294. +   public String getPriceItemName()
  295. +   {
  296. +       L2Item i = ItemTable.getInstance().getTemplate(getPriceId());
  297. +       if (i != null)
  298. +       {
  299. +           return i.getName();
  300. +       }
  301. +       return "No Price";
  302. +   }
  303. +}
  304. diff --git a/src/Base/SkinBeauty/SkinData.java b/src/Base/SkinBeauty/SkinData.java
  305. new file mode 100644
  306. index 0000000..2f0fa39
  307. --- /dev/null
  308. +++ b/src/Base/SkinBeauty/SkinData.java
  309. @@ -0,0 +1,253 @@
  310. +package Base.SkinBeauty;
  311. +
  312. +import java.io.File;
  313. +import java.util.ArrayList;
  314. +import java.util.HashMap;
  315. +import java.util.List;
  316. +import java.util.Map;
  317. +
  318. +import org.w3c.dom.Document;
  319. +import org.w3c.dom.NamedNodeMap;
  320. +import org.w3c.dom.Node;
  321. +
  322. +import Base.XML.XMLDocument;
  323. +import l2jorion.game.templates.StatsSet;
  324. +
  325. +public class SkinData extends XMLDocument
  326. +{
  327. +   public static Map<Skin, StatsSet> skinList = new HashMap<>();
  328. +  
  329. +   public SkinData()
  330. +   {
  331. +       load();
  332. +   }
  333. +  
  334. +   public static SkinData getInstance()
  335. +   {
  336. +       return SingleTonHolder._instance;
  337. +   }
  338. +  
  339. +   private static class SingleTonHolder
  340. +   {
  341. +       protected static final SkinData _instance = new SkinData();
  342. +   }
  343. +  
  344. +   @Override
  345. +   protected void load()
  346. +   {
  347. +       loadDocument("./data/xml/Skins.xml");
  348. +   }
  349. +  
  350. +   @Override
  351. +   protected void parseDocument(Document doc, File f)
  352. +   {
  353. +       try
  354. +       {
  355. +           for (Node n = doc.getFirstChild(); n != null; n = n.getNextSibling())
  356. +           {
  357. +               if ("list".equals(n.getNodeName()))
  358. +               {
  359. +                   for (Node d = n.getFirstChild(); d != null; d = d.getNextSibling())
  360. +                   {
  361. +                       if (d.getNodeName().equals("skin"))
  362. +                       {
  363. +                           NamedNodeMap attrs = d.getAttributes();
  364. +                           StatsSet stats = new StatsSet();
  365. +                           Node att = attrs.getNamedItem("id");
  366. +                           if (att == null)
  367. +                           {
  368. +                               LOG.severe("Skin Data: Missing ID for Skin, skipping.");
  369. +                           }
  370. +                           else
  371. +                           {
  372. +                               int id = Integer.parseInt(att.getNodeValue());
  373. +                               stats.set("id", id);
  374. +                               att = attrs.getNamedItem("name");
  375. +                               if (att == null)
  376. +                               {
  377. +                                   LOG.severe("Skin Data: Missing name for skin id: " + stats.getString("id") + ", skipping.");
  378. +                               }
  379. +                               else
  380. +                               {
  381. +                                   stats.set("name", att.getNodeValue());
  382. +                                   att = attrs.getNamedItem("utx_name");
  383. +                                   if (att == null)
  384. +                                   {
  385. +                                       LOG.severe("Skin Data: Missing name for utx_name id: " + stats.getString("id") + ", skipping.");
  386. +                                   }
  387. +                                   else
  388. +                                   {
  389. +                                       stats.set("utx_name", att.getNodeValue());
  390. +                                       att = attrs.getNamedItem("chest");
  391. +                                       if (att == null)
  392. +                                       {
  393. +                                           LOG.severe("Skin Data: Missing chest for skin id: " + stats.getString("id") + ", skipping.");
  394. +                                       }
  395. +                                       else
  396. +                                       {
  397. +                                           stats.set("chest", Integer.parseInt(att.getNodeValue()));
  398. +                                           att = attrs.getNamedItem("gloves");
  399. +                                           if (att == null)
  400. +                                           {
  401. +                                               LOG.severe("Skin Data: Missing gloves for skin id: " + stats.getString("id") + ", skipping.");
  402. +                                           }
  403. +                                           else
  404. +                                           {
  405. +                                               stats.set("gloves", Integer.parseInt(att.getNodeValue()));
  406. +                                               att = attrs.getNamedItem("legs");
  407. +                                               if (att == null)
  408. +                                               {
  409. +                                                   LOG.severe("Skin Data: Missing legs for skin id: " + stats.getString("id") + ", skipping.");
  410. +                                               }
  411. +                                               else
  412. +                                               {
  413. +                                                   stats.set("legs", Integer.parseInt(att.getNodeValue()));
  414. +                                                   att = attrs.getNamedItem("feet");
  415. +                                                   if (att == null)
  416. +                                                   {
  417. +                                                       LOG.severe("Skin Data: Missing gloves for skin id: " + stats.getString("id") + ", skipping.");
  418. +                                                   }
  419. +                                                   else
  420. +                                                   {
  421. +                                                       stats.set("feet", Integer.parseInt(att.getNodeValue()));
  422. +                                                       att = attrs.getNamedItem("hair");
  423. +                                                       if (att == null)
  424. +                                                       {
  425. +                                                           LOG.severe("Skin Data: Missing hair for skin id: " + stats.getString("id") + ", skipping.");
  426. +                                                       }
  427. +                                                       else
  428. +                                                       {
  429. +                                                           stats.set("hair", Integer.parseInt(att.getNodeValue()));
  430. +                                                           att = attrs.getNamedItem("price_id");
  431. +                                                           if (att == null)
  432. +                                                           {
  433. +                                                               LOG.severe("Skin Data: Missing price_id for skin id: " + stats.getString("id") + ", skipping.");
  434. +                                                           }
  435. +                                                           else
  436. +                                                           {
  437. +                                                               stats.set("price_id", Integer.parseInt(att.getNodeValue()));
  438. +                                                               att = attrs.getNamedItem("price");
  439. +                                                               if (att == null)
  440. +                                                               {
  441. +                                                                   LOG.severe("Skin Data: Missing price for skin id: " + stats.getString("id") + ", skipping.");
  442. +                                                               }
  443. +                                                               else
  444. +                                                               {
  445. +                                                                   stats.set("price", Integer.parseInt(att.getNodeValue()));
  446. +                                                                   att = attrs.getNamedItem("isVip");
  447. +                                                                   if (att == null)
  448. +                                                                   {
  449. +                                                                       LOG.severe("Skin Data: Missing price for isVip id: " + stats.getString("id") + ", skipping.");
  450. +                                                                   }
  451. +                                                                   else
  452. +                                                                   {
  453. +                                                                       stats.set("isVip", Integer.parseInt(att.getNodeValue()));
  454. +                                                                       for (Node data = d.getFirstChild(); data != null; data = data.getNextSibling())
  455. +                                                                       {
  456. +                                                                           attrs = data.getAttributes();
  457. +                                                                           if (data.getNodeName().equals("conditions"))
  458. +                                                                           {
  459. +                                                                               for (int i = 0; i < attrs.getLength(); i++)
  460. +                                                                               {
  461. +                                                                                   Node node = attrs.item(i);
  462. +                                                                                   stats.set(node.getNodeName(), node.getNodeValue());
  463. +                                                                               }
  464. +                                                                           }
  465. +                                                                       }
  466. +                                                                       Skin skin = new Skin(id, stats);
  467. +                                                                       skinList.put(skin, stats);
  468. +                                                                   }
  469. +                                                               }
  470. +                                                           }
  471. +                                                       }
  472. +                                                   }
  473. +                                               }
  474. +                                           }
  475. +                                       }
  476. +                                   }
  477. +                               }
  478. +                           }
  479. +                       }
  480. +                   }
  481. +                   System.out.println("SkinData: loaded " + skinList.size() + " skins from XML!");
  482. +               }
  483. +           }
  484. +       }
  485. +       catch (Exception e)
  486. +       {
  487. +           LOG.warning("SkinData: Error while creating table: " + e);
  488. +           e.printStackTrace();
  489. +       }
  490. +   }
  491. +  
  492. +   public Map<Skin, StatsSet> getAllSkins()
  493. +   {
  494. +       return skinList;
  495. +   }
  496. +  
  497. +   public void clear()
  498. +   {
  499. +       skinList.clear();
  500. +       skinList = new HashMap<>();
  501. +   }
  502. +  
  503. +   public void reload()
  504. +   {
  505. +       clear();
  506. +       loadDocument("./data/Skins.xml");
  507. +   }
  508. +  
  509. +   public List<Skin> getSkinList()
  510. +   {
  511. +       List<Skin> skins = new ArrayList<>();
  512. +       for (Map.Entry<Skin, StatsSet> map : skinList.entrySet())
  513. +       {
  514. +           skins.add(map.getKey());
  515. +       }
  516. +       return skins;
  517. +   }
  518. +  
  519. +   public Skin[] getSkinVec()
  520. +   {
  521. +       Skin[] vec = new Skin[getSkinList().size()];
  522. +       for (int i = 0; i < getSkinList().size(); i++)
  523. +       {
  524. +           vec[i] = getSkinList().get(i);
  525. +       }
  526. +       return vec;
  527. +   }
  528. +  
  529. +   public Skin getSkinById(int id)
  530. +   {
  531. +       for (Map.Entry<Skin, StatsSet> map : skinList.entrySet())
  532. +       {
  533. +           if (map.getKey().getId() == id)
  534. +           {
  535. +               return map.getKey();
  536. +           }
  537. +       }
  538. +       return null;
  539. +   }
  540. +  
  541. +   public Map<Integer, List<Skin>> getSkinPages()
  542. +   {
  543. +       Map<Integer, List<Skin>> skinPages = new HashMap<>();
  544. +       int page = 0;
  545. +       int counter = 0;
  546. +       for (Skin skin : getInstance().getSkinList())
  547. +       {
  548. +           if (counter >= 10)
  549. +           {
  550. +               page++;
  551. +               counter = 0;
  552. +           }
  553. +           if (skinPages.get(Integer.valueOf(page)) == null)
  554. +           {
  555. +               skinPages.put(Integer.valueOf(page), new ArrayList<>());
  556. +           }
  557. +           skinPages.get(Integer.valueOf(page)).add(skin);
  558. +           counter++;
  559. +       }
  560. +       return skinPages;
  561. +   }
  562. +}
  563. diff --git a/src/Base/Util/Mysql.java b/src/Base/Util/Mysql.java
  564. new file mode 100644
  565. index 0000000..31aba5f
  566. --- /dev/null
  567. +++ b/src/Base/Util/Mysql.java
  568. @@ -0,0 +1,198 @@
  569. +package Base.Util;
  570. +
  571. +import java.sql.Connection;
  572. +import java.sql.PreparedStatement;
  573. +import java.sql.ResultSet;
  574. +import java.sql.SQLException;
  575. +import java.sql.Statement;
  576. +import java.util.logging.Logger;
  577. +
  578. +import l2jorion.util.database.L2DatabaseFactory;
  579. +
  580. +public abstract class Mysql
  581. +{
  582. +   public static final Logger _log = Logger.getLogger(Mysql.class.getName());
  583. +  
  584. +   /**
  585. +    * Performs a simple sql queries where unnecessary control parameters <BR>
  586. +    * NOTE: In this method, the parameters passed are not valid for SQL-injection!
  587. +    * @param db
  588. +    * @param query
  589. +    * @param vars
  590. +    * @return
  591. +    */
  592. +   public static boolean setEx(L2DatabaseFactory db, String query, Object... vars)
  593. +   {
  594. +       Connection con = null;
  595. +       Statement statement = null;
  596. +       PreparedStatement pstatement = null;
  597. +       boolean successed = true;
  598. +      
  599. +       try
  600. +       {
  601. +           if (db == null)
  602. +           {
  603. +               db = L2DatabaseFactory.getInstance();
  604. +           }
  605. +          
  606. +           con = db.getConnection();
  607. +           if (vars.length == 0)
  608. +           {
  609. +               statement = con.createStatement();
  610. +               statement.executeUpdate(query);
  611. +               statement.close();
  612. +           }
  613. +           else
  614. +           {
  615. +               pstatement = con.prepareStatement(query);
  616. +               setVars(pstatement, vars);
  617. +               pstatement.executeUpdate();
  618. +               pstatement.close();
  619. +           }
  620. +           con.close();
  621. +       }
  622. +       catch (Exception e)
  623. +       {
  624. +           _log.warning("Could not execute update '" + query + "': " + e);
  625. +           e.printStackTrace();
  626. +           successed = false;
  627. +       }
  628. +       finally
  629. +       {
  630. +           closeQuietly(con, pstatement);
  631. +           closeQuietly(statement);
  632. +       }
  633. +       return successed;
  634. +   }
  635. +  
  636. +   public static void setVars(PreparedStatement statement, Object... vars) throws SQLException
  637. +   {
  638. +       Number n;
  639. +       long long_val;
  640. +       double double_val;
  641. +       for (int i = 0; i < vars.length; i++)
  642. +       {
  643. +           if (vars[i] instanceof Number)
  644. +           {
  645. +               n = (Number) vars[i];
  646. +               long_val = n.longValue();
  647. +               double_val = n.doubleValue();
  648. +               if (long_val == double_val)
  649. +               {
  650. +                   statement.setLong(i + 1, long_val);
  651. +               }
  652. +               else
  653. +               {
  654. +                   statement.setDouble(i + 1, double_val);
  655. +               }
  656. +           }
  657. +           else if (vars[i] instanceof String)
  658. +           {
  659. +               statement.setString(i + 1, (String) vars[i]);
  660. +           }
  661. +       }
  662. +   }
  663. +  
  664. +   public static boolean set(String query, Object... vars)
  665. +   {
  666. +       return setEx(null, query, vars);
  667. +   }
  668. +  
  669. +   public static boolean set(String query)
  670. +   {
  671. +       return setEx(null, query);
  672. +   }
  673. +  
  674. +   public static void closeQuietly(Connection conn)
  675. +   {
  676. +       try
  677. +       {
  678. +           close(conn);
  679. +       }
  680. +       catch (SQLException e)
  681. +       { // NOPMD
  682. +           // quiet
  683. +       }
  684. +   }
  685. +  
  686. +   public static void closeQuietly(Connection conn, Statement stmt, ResultSet rs)
  687. +   {
  688. +      
  689. +       try
  690. +       {
  691. +           closeQuietly(rs);
  692. +       }
  693. +       finally
  694. +       {
  695. +           try
  696. +           {
  697. +               closeQuietly(stmt);
  698. +           }
  699. +           finally
  700. +           {
  701. +               closeQuietly(conn);
  702. +           }
  703. +       }
  704. +   }
  705. +  
  706. +   public static void closeQuietly(Connection conn, Statement stmt)
  707. +   {
  708. +       try
  709. +       {
  710. +           closeQuietly(stmt);
  711. +       }
  712. +       finally
  713. +       {
  714. +           closeQuietly(conn);
  715. +       }
  716. +   }
  717. +  
  718. +   public static void closeQuietly(ResultSet rs)
  719. +   {
  720. +       try
  721. +       {
  722. +           close(rs);
  723. +       }
  724. +       catch (SQLException e)
  725. +       { // NOPMD
  726. +           // quiet
  727. +       }
  728. +   }
  729. +  
  730. +   public static void closeQuietly(Statement stmt)
  731. +   {
  732. +       try
  733. +       {
  734. +           close(stmt);
  735. +       }
  736. +       catch (SQLException e)
  737. +       { // NOPMD
  738. +           // quiet
  739. +       }
  740. +   }
  741. +  
  742. +   public static void close(Connection conn) throws SQLException
  743. +   {
  744. +       if (conn != null)
  745. +       {
  746. +           conn.close();
  747. +       }
  748. +   }
  749. +  
  750. +   public static void close(ResultSet rs) throws SQLException
  751. +   {
  752. +       if (rs != null)
  753. +       {
  754. +           rs.close();
  755. +       }
  756. +   }
  757. +  
  758. +   public static void close(Statement stmt) throws SQLException
  759. +   {
  760. +       if (stmt != null)
  761. +       {
  762. +           stmt.close();
  763. +       }
  764. +   }
  765. +  
  766. +}
  767. \ No newline at end of file
  768. diff --git a/src/Base/XML/XMLDocument.java b/src/Base/XML/XMLDocument.java
  769. new file mode 100644
  770. index 0000000..2e9bb7a
  771. --- /dev/null
  772. +++ b/src/Base/XML/XMLDocument.java
  773. @@ -0,0 +1,137 @@
  774. +package Base.XML;
  775. +
  776. +import java.io.File;
  777. +import java.util.function.Consumer;
  778. +import java.util.function.Predicate;
  779. +import java.util.logging.Level;
  780. +import java.util.logging.Logger;
  781. +
  782. +import javax.xml.parsers.DocumentBuilderFactory;
  783. +
  784. +import org.w3c.dom.Document;
  785. +import org.w3c.dom.NamedNodeMap;
  786. +import org.w3c.dom.Node;
  787. +import org.w3c.dom.NodeList;
  788. +
  789. +import l2jorion.game.templates.StatsSet;
  790. +
  791. +/**
  792. + * An XML document, relying on a static and single DocumentBuilderFactory.
  793. + */
  794. +public abstract class XMLDocument
  795. +{
  796. +   protected static final Logger LOG = Logger.getLogger(XMLDocument.class.getName());
  797. +  
  798. +   private static final DocumentBuilderFactory BUILDER;
  799. +   static
  800. +   {
  801. +       BUILDER = DocumentBuilderFactory.newInstance();
  802. +       BUILDER.setValidating(false);
  803. +       BUILDER.setIgnoringComments(true);
  804. +   }
  805. +  
  806. +   abstract protected void load();
  807. +  
  808. +   abstract protected void parseDocument(Document doc, File f);
  809. +  
  810. +   public void loadDocument(String filePath)
  811. +   {
  812. +       loadDocument(new File(filePath));
  813. +   }
  814. +  
  815. +   /**
  816. +    * Parse an entire directory or file if found.
  817. +    * @param file
  818. +    */
  819. +   public void loadDocument(File file)
  820. +   {
  821. +       if (!file.exists())
  822. +       {
  823. +           LOG.severe("The following file or directory doesn't exist: " + file.getName());
  824. +           return;
  825. +       }
  826. +      
  827. +       if (file.isDirectory())
  828. +       {
  829. +           for (File f : file.listFiles())
  830. +           {
  831. +               loadDocument(f);
  832. +           }
  833. +       }
  834. +       else if (file.isFile())
  835. +       {
  836. +           try
  837. +           {
  838. +               parseDocument(BUILDER.newDocumentBuilder().parse(file), file);
  839. +           }
  840. +           catch (Exception e)
  841. +           {
  842. +               LOG.log(Level.SEVERE, "Error loading XML file " + file.getName(), e);
  843. +           }
  844. +       }
  845. +   }
  846. +  
  847. +   public void forEach(Node node, Consumer<Node> action)
  848. +   {
  849. +       forEach(node, a -> true, action);
  850. +   }
  851. +  
  852. +   public void forEach(Node node, String nodeName, Consumer<Node> action)
  853. +   {
  854. +       forEach(node, innerNode ->
  855. +       {
  856. +           if (nodeName.contains("|"))
  857. +           {
  858. +               final String[] nodeNames = nodeName.split("\\|");
  859. +               for (String name : nodeNames)
  860. +               {
  861. +                   if (!name.isEmpty() && name.equals(innerNode.getNodeName()))
  862. +                   {
  863. +                       return true;
  864. +                   }
  865. +               }
  866. +               return false;
  867. +           }
  868. +           return nodeName.equals(innerNode.getNodeName());
  869. +       }, action);
  870. +   }
  871. +  
  872. +   public void forEach(Node node, Predicate<Node> filter, Consumer<Node> action)
  873. +   {
  874. +       final NodeList list = node.getChildNodes();
  875. +       for (int i = 0; i < list.getLength(); i++)
  876. +       {
  877. +           final Node targetNode = list.item(i);
  878. +           if (filter.test(targetNode))
  879. +           {
  880. +               action.accept(targetNode);
  881. +           }
  882. +       }
  883. +   }
  884. +  
  885. +   public StatsSet parseAttributes(Node node)
  886. +   {
  887. +       final NamedNodeMap attrs = node.getAttributes();
  888. +       final StatsSet map = new StatsSet();
  889. +       for (int i = 0; i < attrs.getLength(); i++)
  890. +       {
  891. +           final Node att = attrs.item(i);
  892. +           map.set(att.getNodeName(), att.getNodeValue());
  893. +       }
  894. +       return map;
  895. +   }
  896. +  
  897. +   /**
  898. +    * This method parses the content of a NamedNodeMap and feed the given StatsSet.
  899. +    * @param attrs : The NamedNodeMap to parse.
  900. +    * @param set : The StatsSet to feed.
  901. +    */
  902. +   public static void parseAndFeed(NamedNodeMap attrs, StatsSet set)
  903. +   {
  904. +       for (int i = 0; i < attrs.getLength(); i++)
  905. +       {
  906. +           final Node attr = attrs.item(i);
  907. +           set.set(attr.getNodeName(), attr.getNodeValue());
  908. +       }
  909. +   }
  910. +}
  911. \ No newline at end of file
  912. diff --git a/src/l2jorion/Config.java b/src/l2jorion/Config.java
  913. index bbf70a0..a713d3e 100644
  914. --- a/src/l2jorion/Config.java
  915. +++ b/src/l2jorion/Config.java
  916. @@ -2358,6 +2358,10 @@
  917.     public static String PM_TEXT2;
  918.     public static boolean NEW_PLAYER_EFFECT;
  919.    
  920. +   public static String TEXTURE_SKIN_PACKAGE;
  921. +  
  922. +   public static String ACQUIRED_SKIN_SUFFIX;
  923. +  
  924.     public static void loadL2jOrionConfig()
  925.     {
  926.         final String L2jOrion = ConfigLoader.L2jOrion_CONFIG_FILE;
  927. @@ -2381,6 +2385,9 @@
  928.                 LIST_FAKE_ARMOR_ITEMS.add(Integer.parseInt(id));
  929.             }
  930.            
  931. +           TEXTURE_SKIN_PACKAGE = L2jOrionSettings.getProperty("TextureSkinPackageName", "MAYKE_MENDES_SKIN");
  932. +           ACQUIRED_SKIN_SUFFIX = L2jOrionSettings.getProperty("TextureSkinSuffixName", "_f");
  933. +          
  934.             FREE_TELEPORT_UNTIL = Integer.parseInt(L2jOrionSettings.getProperty("FreeTeleportUntil", "1"));
  935.             REMOVAL_AUGMENTATION_FREE = Boolean.parseBoolean(L2jOrionSettings.getProperty("RemovalAugmentationFree", "False"));
  936.             ALLOW_FREIGHT_AUGMENTED = Boolean.parseBoolean(L2jOrionSettings.getProperty("AllowFreightAugmentedItem", "False"));
  937. diff --git a/src/l2jorion/game/GameServer.java b/src/l2jorion/game/GameServer.java
  938. index 214bbfe..99c3a68 100644
  939. --- a/src/l2jorion/game/GameServer.java
  940. +++ b/src/l2jorion/game/GameServer.java
  941. @@ -30,6 +30,7 @@
  942. import java.util.Date;
  943. import java.util.logging.LogManager;
  944.  
  945. +import Base.SkinBeauty.SkinData;
  946. import hwid.hwid;
  947. import l2jorion.Config;
  948. import l2jorion.ConfigLoader;
  949. @@ -467,6 +468,9 @@
  950.         Util.printSection("Scripts");
  951.         QuestManager.getInstance();
  952.        
  953. +       Util.printSection("Skin Manager");
  954. +       SkinData.getInstance();
  955. +      
  956.         // Donate Items
  957.         TaskItemDonate.getInstance();
  958.        
  959. diff --git a/src/l2jorion/game/handler/ItemHandler.java b/src/l2jorion/game/handler/ItemHandler.java
  960. index 041c584..eedc4e4 100644
  961. --- a/src/l2jorion/game/handler/ItemHandler.java
  962. +++ b/src/l2jorion/game/handler/ItemHandler.java
  963. @@ -65,6 +65,7 @@
  964. import l2jorion.game.handler.item.Scrolls;
  965. import l2jorion.game.handler.item.Seed;
  966. import l2jorion.game.handler.item.SevenSignsRecord;
  967. +import l2jorion.game.handler.item.Skins;
  968. import l2jorion.game.handler.item.SoulCrystals;
  969. import l2jorion.game.handler.item.SoulShots;
  970. import l2jorion.game.handler.item.SpecialXMas;
  971. @@ -134,6 +135,7 @@
  972.         registerItemHandler(new ChristmasTree());
  973.         registerItemHandler(new Crystals());
  974.         registerItemHandler(new HsItems());
  975. +       registerItemHandler(new Skins());
  976.        
  977.         LOG.info("ItemHandler: Loaded " + _datatable.size() + " handlers");
  978.     }
  979. diff --git a/src/l2jorion/game/handler/item/Skins.java b/src/l2jorion/game/handler/item/Skins.java
  980. new file mode 100644
  981. index 0000000..187d84e
  982. --- /dev/null
  983. +++ b/src/l2jorion/game/handler/item/Skins.java
  984. @@ -0,0 +1,222 @@
  985. +package l2jorion.game.handler.item;
  986. +
  987. +import Base.SkinBeauty.Skin;
  988. +import Base.SkinBeauty.SkinData;
  989. +
  990. +import l2jorion.game.handler.IItemHandler;
  991. +
  992. +import l2jorion.game.model.actor.instance.L2ItemInstance;
  993. +import l2jorion.game.model.actor.instance.L2PcInstance;
  994. +import l2jorion.game.model.actor.instance.L2PlayableInstance;
  995. +import l2jorion.game.network.serverpackets.MagicSkillUser;
  996. +import l2jorion.game.thread.ThreadPoolManager;
  997. +
  998. +/**
  999. + * @author Williams and Stinkymadness
  1000. + */
  1001. +public class Skins implements IItemHandler
  1002. +{
  1003. +   private static final int ITEM_IDS[] =
  1004. +   {
  1005. +       19000,
  1006. +       19001,
  1007. +       19002,
  1008. +       19003,
  1009. +       19004,
  1010. +       19005,
  1011. +       19006,
  1012. +       19007,
  1013. +       19008,
  1014. +       19009,
  1015. +       19010,
  1016. +       19011,
  1017. +       19012,
  1018. +       19013,
  1019. +       19014,
  1020. +       19015,
  1021. +       19016,
  1022. +       19017,
  1023. +       19018,
  1024. +       19019,
  1025. +       19020,
  1026. +       19021,
  1027. +       19022,
  1028. +       19023,
  1029. +       19024,
  1030. +       19025,
  1031. +       19026,
  1032. +       19027,
  1033. +       19028,
  1034. +       19029,
  1035. +       19030,
  1036. +       19031,
  1037. +       19033,
  1038. +       19034,
  1039. +       19035,
  1040. +       19036,
  1041. +       19037,
  1042. +       19038,
  1043. +       19039,
  1044. +       19040,
  1045. +       19041,
  1046. +       19042,
  1047. +       19043,
  1048. +       19044,
  1049. +       19045,
  1050. +       19046,
  1051. +       19047,
  1052. +       19048,
  1053. +       19049,
  1054. +       19050,
  1055. +       19051,
  1056. +       19052,
  1057. +       19053,
  1058. +       19054,
  1059. +       19055,
  1060. +       19056,
  1061. +       19057,
  1062. +       19058,
  1063. +       19059,
  1064. +       19060,
  1065. +       19061,
  1066. +       19062,
  1067. +       19063,
  1068. +       19064,
  1069. +       19065,
  1070. +       19066,
  1071. +       19067,
  1072. +       19068,
  1073. +       19069,
  1074. +       19070,
  1075. +       19071,
  1076. +       19072,
  1077. +       19073,
  1078. +       19074,
  1079. +       19075,
  1080. +       19076,
  1081. +       19077,
  1082. +       19078,
  1083. +       19079,
  1084. +       19080,
  1085. +       19081,
  1086. +       19082,
  1087. +       19083,
  1088. +       19084,
  1089. +       19085,
  1090. +       19086,
  1091. +       19087,
  1092. +       19088,
  1093. +       19089,
  1094. +       19090,
  1095. +       19091,
  1096. +       19092,
  1097. +       19093,
  1098. +       19094,
  1099. +       19095,
  1100. +       19096,
  1101. +       19097,
  1102. +       19098,
  1103. +       19099,
  1104. +       19100,
  1105. +       19101,
  1106. +       19102,
  1107. +       19103,
  1108. +       19104,
  1109. +       19105,
  1110. +       19106,
  1111. +       19107,
  1112. +       19108,
  1113. +       19109,
  1114. +       19110,
  1115. +       19111,
  1116. +       19112,
  1117. +       19113,
  1118. +       19114,
  1119. +       19115,
  1120. +       19116,
  1121. +       19117,
  1122. +       19118,
  1123. +       19119,
  1124. +       19120,
  1125. +       19121,
  1126. +       19122,
  1127. +       19123,
  1128. +       19124,
  1129. +       19125,
  1130. +       19126,
  1131. +       19127,
  1132. +       19128,
  1133. +       19129,
  1134. +       19130,
  1135. +       19131,
  1136. +       19132,
  1137. +       19133,
  1138. +       19134,
  1139. +       19135,
  1140. +       19136,
  1141. +       19137,
  1142. +       19138,
  1143. +       19139,
  1144. +       19140,
  1145. +       19141,
  1146. +       15020,
  1147. +       29142
  1148. +  
  1149. +   };
  1150. +  
  1151. +   public static void VisualTeste(L2PcInstance player)
  1152. +   {
  1153. +       Skin free = SkinData.getInstance().getSkinById(0);
  1154. +       player.setActiveSkin(free);
  1155. +       player.broadcastUserInfo();
  1156. +   }
  1157. +  
  1158. +   @Override
  1159. +   public void useItem(L2PlayableInstance playable, L2ItemInstance item)
  1160. +   {
  1161. +       final L2PcInstance player = (L2PcInstance) playable;
  1162. +      
  1163. +       ThreadPoolManager.getInstance().scheduleGeneral(new Runnable()
  1164. +       {
  1165. +           @Override
  1166. +           public void run()
  1167. +           {
  1168. +               playable.setIsImmobileUntilAttacked(false);
  1169. +           }
  1170. +       }, 1100);
  1171. +      
  1172. +       if (!(playable instanceof L2PcInstance))
  1173. +       {
  1174. +           return;
  1175. +       }
  1176. +      
  1177. +       final Skin dress = SkinData.getInstance().getSkinById(item.getItemId());
  1178. +      
  1179. +       if (dress == null)
  1180. +       {
  1181. +           return;
  1182. +       }
  1183. +      
  1184. +       if (!player.isDressMeEnabled())
  1185. +       {
  1186. +           player.setActiveSkin(dress);
  1187. +           playable.setIsImmobileUntilAttacked(true);
  1188. +           player.broadcastPacket(new MagicSkillUser(player, player, 1047, 1, 1100, 0));
  1189. +           player.broadcastUserInfo();
  1190. +       }
  1191. +       else
  1192. +       {
  1193. +           player.setActiveSkin(dress);
  1194. +           playable.setIsImmobileUntilAttacked(true);
  1195. +           player.broadcastPacket(new MagicSkillUser(player, player, 1047, 1, 1100, 0));
  1196. +           player.broadcastUserInfo();
  1197. +       }
  1198. +      
  1199. +   }
  1200. +  
  1201. +   @Override
  1202. +   public int[] getItemIds()
  1203. +   {
  1204. +       return ITEM_IDS;
  1205. +   }
  1206. +}
  1207. \ No newline at end of file
  1208. diff --git a/src/l2jorion/game/model/actor/instance/L2BeautyShopInstance.java b/src/l2jorion/game/model/actor/instance/L2BeautyShopInstance.java
  1209. new file mode 100644
  1210. index 0000000..867e34d
  1211. --- /dev/null
  1212. +++ b/src/l2jorion/game/model/actor/instance/L2BeautyShopInstance.java
  1213. @@ -0,0 +1,251 @@
  1214. +package l2jorion.game.model.actor.instance;
  1215. +
  1216. +import java.util.List;
  1217. +import java.util.concurrent.ScheduledFuture;
  1218. +
  1219. +import Base.SkinBeauty.Skin;
  1220. +import Base.SkinBeauty.SkinData;
  1221. +import l2jorion.Config;
  1222. +import l2jorion.game.ai.CtrlIntention;
  1223. +import l2jorion.game.model.PcInventory;
  1224. +import l2jorion.game.network.serverpackets.ActionFailed;
  1225. +import l2jorion.game.network.serverpackets.MoveToPawn;
  1226. +import l2jorion.game.network.serverpackets.MyTargetSelected;
  1227. +import l2jorion.game.network.serverpackets.NpcHtmlMessage;
  1228. +import l2jorion.game.network.serverpackets.ValidateLocation;
  1229. +import l2jorion.game.templates.L2NpcTemplate;
  1230. +
  1231. +public class L2BeautyShopInstance extends L2NpcInstance
  1232. +{
  1233. +   ScheduledFuture<?> task;
  1234. +  
  1235. +   public L2BeautyShopInstance(int objectId, L2NpcTemplate template)
  1236. +   {
  1237. +       super(objectId, template);
  1238. +   }
  1239. +  
  1240. +   @Override
  1241. +   public void onAction(L2PcInstance player)
  1242. +   {
  1243. +       if (this != player.getTarget())
  1244. +       {
  1245. +           player.setTarget(this);
  1246. +           player.sendPacket(new MyTargetSelected(getObjectId(), 0));
  1247. +           player.sendPacket(new ValidateLocation(this));
  1248. +       }
  1249. +       else if (!canInteract(player))
  1250. +       {
  1251. +           player.getAI().setIntention(CtrlIntention.AI_INTENTION_INTERACT, this);
  1252. +       }
  1253. +       else
  1254. +       {
  1255. +           player.sendPacket(new MoveToPawn(player, this, 150));
  1256. +           if (hasRandomAnimation())
  1257. +           {
  1258. +               onRandomAnimation();
  1259. +           }
  1260. +           showMainWindow(player, 0);
  1261. +           player.sendPacket(ActionFailed.STATIC_PACKET);
  1262. +       }
  1263. +   }
  1264. +  
  1265. +   public static String getIconPath(L2PcInstance player, Skin skin)
  1266. +   {
  1267. +       if (player.containsSkin(skin))
  1268. +       {
  1269. +           return skin.getUtxName();
  1270. +       }
  1271. +       return skin.getUtxName() + Config.ACQUIRED_SKIN_SUFFIX;
  1272. +   }
  1273. +  
  1274. +   public static String showButtons(L2PcInstance player, Skin skin)
  1275. +   {
  1276. +       StringBuilder sb = new StringBuilder();
  1277. +       if (!player.getSkins().contains(skin))
  1278. +       {
  1279. +           sb.append("<tr>");
  1280. +           sb.append("<td align=center><button value=\"Buy\" action=\"bypass -h acquireSkin " + skin.getId() + "\" width=75 height=21 back=\"L2UI_ch3.Btn1_normalOn\" fore=\"L2UI_ch3.Btn1_normal\"></td>");
  1281. +           sb.append("<td align=center><button value=\"Try\" action=\"bypass -h trySkin " + skin.getId() + "\" width=75 height=21 back=\"L2UI_ch3.Btn1_normalOn\" fore=\"L2UI_ch3.Btn1_normal\"></td>");
  1282. +           sb.append("</tr>");
  1283. +           sb.append("<tr>");
  1284. +           sb.append("<td align=center><button value=\"Equip\" action=\"bypass -h equipSkin " + skin.getId() + "\" width=75 height=21 back=\"L2UI_ch3.Btn1_normalOn\" fore=\"L2UI_ch3.Btn1_normal\"></td>");
  1285. +           sb.append("<td align=center><button value=\"Unequip\" action=\"bypass -h unequipSkin " + skin.getId() + "\" width=75 height=21 back=\"L2UI_ch3.Btn1_normalOn\" fore=\"L2UI_ch3.Btn1_normal\"></td>");
  1286. +           sb.append("</tr>");
  1287. +       }
  1288. +       else
  1289. +       {
  1290. +           sb.append("<tr>");
  1291. +           sb.append("<td align=center><button value=\"Equip\" action=\"bypass -h equipSkin " + skin.getId() + "\" width=75 height=21 back=\"L2UI_ch3.Btn1_normalOn\" fore=\"L2UI_ch3.Btn1_normal\"></td>");
  1292. +           sb.append("<td align=center><button value=\"Unequip\" action=\"bypass -h unequipSkin " + skin.getId() + "\" width=75 height=21 back=\"L2UI_ch3.Btn1_normalOn\" fore=\"L2UI_ch3.Btn1_normal\"></td>");
  1293. +           sb.append("</tr>");
  1294. +       }
  1295. +       return sb.toString();
  1296. +   }
  1297. +  
  1298. +   public static String generatePagesHtml(L2PcInstance player)
  1299. +   {
  1300. +       StringBuilder sb = new StringBuilder();
  1301. +       for (Integer i : SkinData.getInstance().getSkinPages().keySet())
  1302. +       {
  1303. +           sb.append("<td>");
  1304. +           sb.append("<table width=21 align=left >");
  1305. +           sb.append("<tr>");
  1306. +           sb.append("<td width=21 align=left><button value=\"Page " + i + "\" action=\"bypass -h skinPage " + i + "\" width=40 height=15 back=\"sek.cbui94\" fore=\"sek.cbui92\"></td>");
  1307. +           sb.append("</tr>");
  1308. +           sb.append("</table>");
  1309. +           sb.append("</td>");
  1310. +       }
  1311. +       return sb.toString();
  1312. +   }
  1313. +  
  1314. +   public static String generateSkinsHtml(L2PcInstance player, int page)
  1315. +   {
  1316. +       StringBuilder sb = new StringBuilder();
  1317. +       int i = 0;
  1318. +       List<Skin> list = SkinData.getInstance().getSkinPages().get(Integer.valueOf(page));
  1319. +       for (Skin skin : list)
  1320. +       {
  1321. +           sb.append("<tr>");
  1322. +           sb.append("<td>");
  1323. +           sb.append("<img src=\"L2UI.SquareGray\" width=295 height=1>");
  1324. +           if (i % 2 == 0)
  1325. +           {
  1326. +               sb.append("<table align=center  height=40 bgcolor=000000>");
  1327. +           }
  1328. +           else
  1329. +           {
  1330. +               sb.append("<table align=center  height=40");
  1331. +           }
  1332. +           sb.append("<tr>");
  1333. +           sb.append("<td width=40>");
  1334. +           sb.append("<img src=\"" + Config.TEXTURE_SKIN_PACKAGE + "." + getIconPath(player, skin) + "\" width=32 height=32/>");
  1335. +           sb.append("</td>");
  1336. +           sb.append("<td width=180>");
  1337. +           sb.append("<font color=LEVEL>" + getSkinName(skin) + "</font><br1>Price:" + skin.getPrice() + " " + skin.getPriceItemName());
  1338. +           if (player.getSkins().contains(skin))
  1339. +           {
  1340. +               sb.append("<font color=ff0000>(Acquired)</font>");
  1341. +           }
  1342. +           sb.append("</td>");
  1343. +           sb.append("<td align=center width=100 valign=center>");
  1344. +           sb.append("<button value=\"Open \" action=\"bypass -h skinhtm " + skin.getId() + "\" width=75 height=21 back=\"L2UI_ch3.Btn1_normalOn\" fore=\"L2UI_ch3.Btn1_normal\">");
  1345. +           sb.append("</td>");
  1346. +           sb.append("</tr>");
  1347. +           sb.append("</table>");
  1348. +           sb.append("</td>");
  1349. +           sb.append("</tr>");
  1350. +           i++;
  1351. +       }
  1352. +       return sb.toString();
  1353. +   }
  1354. +  
  1355. +   public static String getSkinName(Skin skin)
  1356. +   {
  1357. +       if (skin.isVip())
  1358. +       {
  1359. +           return skin.getName() + "<font color=\"ff0000\"> (VIP)</font>";
  1360. +       }
  1361. +       return skin.getName();
  1362. +   }
  1363. +  
  1364. +   public void showMainWindow(L2PcInstance player, int page)
  1365. +   {
  1366. +       String filename = "data/html/SkinManager/Main.htm";
  1367. +       NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
  1368. +       html.setFile(filename);
  1369. +       html.replace("%objectId%", String.valueOf(getObjectId()));
  1370. +       html.replace("%npcId%", String.valueOf(getNpcId()));
  1371. +       html.replace("%npcname%", getName());
  1372. +       html.replace("%hat%", player.isActiveHat() ? "ON" : "OFF");
  1373. +       html.replace("%skins%", generateSkinsHtml(player, page));
  1374. +       html.replace("%pages%", generatePagesHtml(player));
  1375. +       player.sendPacket(html);
  1376. +       filename = null;
  1377. +       html = null;
  1378. +   }
  1379. +  
  1380. +   @Override
  1381. +   public void onBypassFeedback(L2PcInstance activeChar, String _command)
  1382. +   {
  1383. +   }
  1384. +  
  1385. +   public static boolean reduceItem(L2PcInstance player, int itemId, int itemPrice)
  1386. +   {
  1387. +       PcInventory inv = player.getInventory();
  1388. +       try
  1389. +       {
  1390. +           if (inv.getItemByItemId(itemId) == null)
  1391. +           {
  1392. +               player.sendMessage("You don't have required items!");
  1393. +               return false;
  1394. +           }
  1395. +           if (inv.getItemByItemId(itemId).getCount() < itemPrice)
  1396. +           {
  1397. +               player.sendMessage("You don't have required items!");
  1398. +               return false;
  1399. +           }
  1400. +           player.destroyItemByItemId("skin buy", itemId, itemPrice, player, true);
  1401. +           return true;
  1402. +       }
  1403. +       catch (Exception e)
  1404. +       {
  1405. +           e.printStackTrace();
  1406. +           return false;
  1407. +       }
  1408. +   }
  1409. +  
  1410. +   public static boolean equipSkin(L2PcInstance activeChar, int id, boolean trying)
  1411. +   {
  1412. +       Skin skin = SkinData.getInstance().getSkinById(id);
  1413. +      
  1414. +       if (activeChar.getSkinId() == 0)
  1415. +       {
  1416. +           Skin dress = SkinData.getInstance().getSkinById(id);
  1417. +           activeChar.setActiveSkin(dress);
  1418. +          
  1419. +       }
  1420. +       if (trying)
  1421. +       {
  1422. +           Skin dress = SkinData.getInstance().getSkinById(id);
  1423. +           activeChar.setActiveSkin(dress);
  1424. +           activeChar.setActiveHat(true);
  1425. +           activeChar.setDressMeEnabled(true);
  1426. +           activeChar.broadcastUserInfo();
  1427. +           activeChar.setSkinId(skin.getId());
  1428. +           return true;
  1429. +       }
  1430. +       if (activeChar.isDressMeEnabled() && !trying)
  1431. +       {
  1432. +           activeChar.sendMessage("First unequip your actual skin!");
  1433. +           return false;
  1434. +       }
  1435. +       if (activeChar.getSkins().contains(skin))
  1436. +       {
  1437. +           Skin dress = SkinData.getInstance().getSkinById(id);
  1438. +           activeChar.setActiveSkin(dress);
  1439. +           activeChar.setActiveHat(true);
  1440. +           activeChar.setDressMeEnabled(true);
  1441. +           activeChar.broadcastUserInfo();
  1442. +           activeChar.setSkinId(skin.getId());
  1443. +           activeChar.sendMessage("Skin " + skin.getStats().getString("name") + " equiped!");
  1444. +           return true;
  1445. +       }
  1446. +       activeChar.sendMessage("You don't own this skin!");
  1447. +       return false;
  1448. +   }
  1449. +  
  1450. +   @Override
  1451. +   public String getHtmlPath(L2PcInstance player, int npcId, int val)
  1452. +   {
  1453. +       String pom = "";
  1454. +       if (val == 0)
  1455. +       {
  1456. +           pom = "" + npcId;
  1457. +       }
  1458. +       else
  1459. +       {
  1460. +           pom = npcId + "-" + val;
  1461. +       }
  1462. +       return "data/html/SkinManager/" + pom + ".htm";
  1463. +   }
  1464. +}
  1465. diff --git a/src/l2jorion/game/model/actor/instance/L2PcInstance.java b/src/l2jorion/game/model/actor/instance/L2PcInstance.java
  1466. index 8d9b411..eb7f14f 100644
  1467. --- a/src/l2jorion/game/model/actor/instance/L2PcInstance.java
  1468. +++ b/src/l2jorion/game/model/actor/instance/L2PcInstance.java
  1469. @@ -40,6 +40,9 @@
  1470.  import java.util.concurrent.TimeUnit;
  1471.  import java.util.concurrent.locks.ReentrantLock;
  1472.  
  1473. +import Base.SkinBeauty.Skin;
  1474. +import Base.SkinBeauty.SkinData;
  1475. +import Base.Util.Mysql;
  1476.  import javolution.text.TextBuilder;
  1477.  import javolution.util.FastList;
  1478.  import javolution.util.FastMap;
  1479. @@ -10027,7 +10030,7 @@
  1480.                 }
  1481.                
  1482.                 CursedWeaponsManager.getInstance().checkPlayer(player);
  1483. -              
  1484. +               player.loadSkins();
  1485.                 player.setAllianceWithVarkaKetra(rset.getInt("varka_ketra_ally"));
  1486.                
  1487.                 player.setDeathPenaltyBuffLevel(rset.getInt("death_penalty_level"));
  1488. @@ -10314,6 +10317,8 @@
  1489.         storeCharBase();
  1490.         storeCharSub();
  1491.        
  1492. +       saveSkins();
  1493. +      
  1494.         // Dont store effect if the char was on Offline trade
  1495.         if (!isStored())
  1496.         {
  1497. @@ -21169,6 +21174,134 @@
  1498.         _dressed = val;
  1499.     }
  1500.    
  1501. +   public ScheduledFuture<?> visualTask;
  1502. +  
  1503. +   public int visualizationTime;
  1504. +  
  1505. +   private Skin activeSkin;
  1506. +  
  1507. +   private boolean isActiveHat;
  1508. +  
  1509. +   private List<Skin> skins;
  1510. +  
  1511. +   private int skinId;
  1512. +  
  1513. +   public Skin getActiveSkin()
  1514. +   {
  1515. +       return this.activeSkin;
  1516. +   }
  1517. +  
  1518. +   public void setActiveSkin(Skin activeSkin)
  1519. +   {
  1520. +       this.activeSkin = activeSkin;
  1521. +   }
  1522. +  
  1523. +   public int getSkinId()
  1524. +   {
  1525. +       return this.skinId;
  1526. +   }
  1527. +  
  1528. +   public void setSkinId(int skinId)
  1529. +   {
  1530. +       this.skinId = skinId;
  1531. +   }
  1532. +  
  1533. +   public boolean isActiveHat()
  1534. +   {
  1535. +       return this.isActiveHat;
  1536. +   }
  1537. +  
  1538. +   public void setActiveHat(boolean isActiveHat)
  1539. +   {
  1540. +       this.isActiveHat = isActiveHat;
  1541. +   }
  1542. +  
  1543. +   public List<Skin> getSkins()
  1544. +   {
  1545. +       return this.skins;
  1546. +   }
  1547. +  
  1548. +   public void setSkins(List<Skin> skins)
  1549. +   {
  1550. +       this.skins = skins;
  1551. +   }
  1552. +  
  1553. +   public boolean containsSkin(Skin skin)
  1554. +   {
  1555. +       return getSkins().contains(skin);
  1556. +   }
  1557. +  
  1558. +   public boolean loadSkins()
  1559. +   {
  1560. +       if (this.skins == null)
  1561. +       {
  1562. +           this.skins = new ArrayList<>();
  1563. +       }
  1564. +       Connection con = null;
  1565. +       PreparedStatement offline = null;
  1566. +       ResultSet rs = null;
  1567. +       try
  1568. +       {
  1569. +           con = L2DatabaseFactory.getInstance().getConnection();
  1570. +           PreparedStatement statement = con.prepareStatement("SELECT skin_id FROM player_skins WHERE char_id=?");
  1571. +           statement.setInt(1, getObjectId());
  1572. +           ResultSet rset = statement.executeQuery();
  1573. +           while (rset.next())
  1574. +           {
  1575. +               this.skins.add(SkinData.getInstance().getSkinById(rset.getInt("skin_id")));
  1576. +           }
  1577. +           con.close();
  1578. +           return true;
  1579. +       }
  1580. +       catch (Exception e)
  1581. +       {
  1582. +           e.printStackTrace();
  1583. +           return false;
  1584. +       }
  1585. +       finally
  1586. +       {
  1587. +           Mysql.closeQuietly(con, offline, rs);
  1588. +       }
  1589. +   }
  1590. +  
  1591. +   public boolean saveSkins()
  1592. +   {
  1593. +       Connection con = null;
  1594. +       PreparedStatement offline = null;
  1595. +       ResultSet rs = null;
  1596. +      
  1597. +       if (skins == null)
  1598. +       {
  1599. +           skins = new ArrayList<>();
  1600. +       }
  1601. +      
  1602. +       try
  1603. +       {
  1604. +           con = L2DatabaseFactory.getInstance().getConnection();
  1605. +           PreparedStatement statement = con.prepareStatement("DELETE FROM player_skins WHERE char_id=?");
  1606. +           statement.setInt(1, getObjectId());
  1607. +           statement.execute();
  1608. +           statement = con.prepareStatement("INSERT INTO player_skins (char_id,skin_id) VALUES (?,?)");
  1609. +           for (Skin skin : getSkins())
  1610. +           {
  1611. +               statement.setInt(1, getObjectId());
  1612. +               statement.setInt(2, skin.getId());
  1613. +               statement.execute();
  1614. +           }
  1615. +           con.close();
  1616. +           return true;
  1617. +       }
  1618. +       catch (Exception e)
  1619. +       {
  1620. +           e.printStackTrace();
  1621. +           return false;
  1622. +       }
  1623. +       finally
  1624. +       {
  1625. +           Mysql.closeQuietly(con, offline, rs);
  1626. +       }
  1627. +   }
  1628. +  
  1629.     public void setFakeArmorObjectId(int objectId)
  1630.     {
  1631.         _fakeArmorObjectId = objectId;
  1632. diff --git a/src/l2jorion/game/network/clientpackets/RequestBypassToServer.java b/src/l2jorion/game/network/clientpackets/RequestBypassToServer.java
  1633. index 7bb0cf1..54d3fd4 100644
  1634. --- a/src/l2jorion/game/network/clientpackets/RequestBypassToServer.java
  1635. +++ b/src/l2jorion/game/network/clientpackets/RequestBypassToServer.java
  1636. @@ -23,7 +23,10 @@
  1637.  import java.sql.ResultSet;
  1638.  import java.text.NumberFormat;
  1639.  import java.util.StringTokenizer;
  1640. +import java.util.concurrent.ScheduledFuture;
  1641.  
  1642. +import Base.SkinBeauty.Skin;
  1643. +import Base.SkinBeauty.SkinData;
  1644.  import javolution.text.TextBuilder;
  1645.  import l2jorion.Config;
  1646.  import l2jorion.game.community.CommunityBoard;
  1647. @@ -47,6 +50,7 @@
  1648.  import l2jorion.game.model.L2Object;
  1649.  import l2jorion.game.model.L2Skill;
  1650.  import l2jorion.game.model.L2World;
  1651. +import l2jorion.game.model.actor.instance.L2BeautyShopInstance;
  1652.  import l2jorion.game.model.actor.instance.L2ClassMasterInstance;
  1653.  import l2jorion.game.model.actor.instance.L2GrandBossInstance;
  1654.  import l2jorion.game.model.actor.instance.L2ItemInstance;
  1655. @@ -71,6 +75,7 @@
  1656.  import l2jorion.game.network.serverpackets.PlaySound;
  1657.  import l2jorion.game.network.serverpackets.SystemMessage;
  1658.  import l2jorion.game.templates.L2Item;
  1659. +import l2jorion.game.thread.ThreadPoolManager;
  1660.  import l2jorion.game.util.GMAudit;
  1661.  import l2jorion.game.util.Util;
  1662.  import l2jorion.log.Log;
  1663. @@ -107,6 +112,9 @@
  1664.             return;
  1665.         }
  1666.        
  1667. +       StringTokenizer stSkin = new StringTokenizer(this._command, " ");
  1668. +       stSkin.nextToken();
  1669. +      
  1670.         try
  1671.         {
  1672.             if (_command.startsWith("admin_"))
  1673. @@ -572,6 +580,123 @@
  1674.                    
  1675.                 }
  1676.             }
  1677. +          
  1678. +           else if (this._command.startsWith("skinPage"))
  1679. +           {
  1680. +               int page = Integer.parseInt(stSkin.nextToken());
  1681. +               showMainWindow(activeChar, page);
  1682. +           }
  1683. +           else if (this._command.startsWith("skinHat"))
  1684. +           {
  1685. +               if (activeChar.isActiveHat())
  1686. +               {
  1687. +                   activeChar.setActiveHat(false);
  1688. +               }
  1689. +           }
  1690. +           else if (this._command.startsWith("acquireSkin"))
  1691. +           {
  1692. +               int id = Integer.parseInt(stSkin.nextToken());
  1693. +               Skin skin = SkinData.getInstance().getSkinById(id);
  1694. +               if (skin != null)
  1695. +               {
  1696. +                   if (activeChar.getSkins().contains(skin))
  1697. +                   {
  1698. +                       activeChar.sendMessage("Skin " + skin.getName() + " already acquired. Try other!");
  1699. +                       showSkinWindow(activeChar, skin);
  1700. +                       return;
  1701. +                   }
  1702. +                   if (skin.isVip())
  1703. +                   {
  1704. +                       if (activeChar.isDonator())
  1705. +                       {
  1706. +                           if (L2BeautyShopInstance.reduceItem(activeChar, skin.getPriceId(), skin.getPrice()) && activeChar.getSkins().add(skin))
  1707. +                           {
  1708. +                               activeChar.sendMessage("Skin " + skin.getStats().getString("name") + " acquired!");
  1709. +                               showSkinWindow(activeChar, skin);
  1710. +                           }
  1711. +                       }
  1712. +                       else
  1713. +                       {
  1714. +                           activeChar.sendMessage("This skin is only for Vip Players!");
  1715. +                           showSkinWindow(activeChar, skin);
  1716. +                           return;
  1717. +                       }
  1718. +                   }
  1719. +                   else if (L2BeautyShopInstance.reduceItem(activeChar, skin.getPriceId(), skin.getPrice()) && activeChar.getSkins().add(skin))
  1720. +                   {
  1721. +                       activeChar.sendMessage("Skin " + skin.getName() + " acquired!");
  1722. +                       showSkinWindow(activeChar, skin);
  1723. +                   }
  1724. +               }
  1725. +           }
  1726. +           else if (this._command.startsWith("trySkin"))
  1727. +           {
  1728. +               if (activeChar.visualizationTime > 0)
  1729. +               {
  1730. +                   activeChar.sendMessage("You already Trying a Skin!");
  1731. +                   return;
  1732. +               }
  1733. +               activeChar.visualizationTime = 5;
  1734. +               int id = Integer.parseInt(stSkin.nextToken());
  1735. +               L2BeautyShopInstance.equipSkin(activeChar, id, true);
  1736. +               activeChar.visualTask = startCounter(activeChar);
  1737. +           }
  1738. +           else if (this._command.startsWith("skinhtm"))
  1739. +           {
  1740. +               int id = Integer.parseInt(stSkin.nextToken());
  1741. +               Skin skin = SkinData.getInstance().getSkinById(id);
  1742. +               showSkinWindow(activeChar, skin);
  1743. +           }
  1744. +           else if (this._command.startsWith("equipSkin"))
  1745. +           {
  1746. +               int id = Integer.parseInt(stSkin.nextToken());
  1747. +               L2BeautyShopInstance.equipSkin(activeChar, id, false);
  1748. +               showSkinWindow(activeChar, SkinData.getInstance().getSkinById(id));
  1749. +           }
  1750. +           else if (this._command.startsWith("unequipSkin"))
  1751. +           {
  1752. +               int id = Integer.parseInt(stSkin.nextToken());
  1753. +               if (activeChar.isDressMeEnabled())
  1754. +               {
  1755. +                   Skin dress = SkinData.getInstance().getSkinById(0);
  1756. +                   activeChar.setActiveHat(false);
  1757. +                   activeChar.setDressMeEnabled(false);
  1758. +                   activeChar.broadcastUserInfo();
  1759. +                   activeChar.setSkinId(0);
  1760. +                   activeChar.setActiveSkin(dress);
  1761. +                   activeChar.sendMessage("Skin unequiped!");
  1762. +                   showSkinWindow(activeChar, SkinData.getInstance().getSkinById(id));
  1763. +               }
  1764. +               else
  1765. +               {
  1766. +                   activeChar.sendMessage("You don't have any skin equiped!");
  1767. +                   showMainWindow(activeChar, 0);
  1768. +                   return;
  1769. +               }
  1770. +           }
  1771. +           else if (this._command.startsWith("activeHat"))
  1772. +           {
  1773. +               if (!activeChar.isDressMeEnabled())
  1774. +               {
  1775. +                   activeChar.sendMessage("You don't have any skin equiped! First Equip a Skin!");
  1776. +                   showMainWindow(activeChar, 0);
  1777. +                   return;
  1778. +               }
  1779. +               if (activeChar.isActiveHat())
  1780. +               {
  1781. +                   activeChar.setActiveHat(false);
  1782. +                   activeChar.setDressMeEnabled(true);
  1783. +                   activeChar.broadcastUserInfo();
  1784. +               }
  1785. +               else
  1786. +               {
  1787. +                   activeChar.setActiveHat(true);
  1788. +                   activeChar.setDressMeEnabled(true);
  1789. +                   activeChar.broadcastUserInfo();
  1790. +               }
  1791. +               showMainWindow(activeChar, 0);
  1792. +           }
  1793. +          
  1794.             // Draw a Symbol
  1795.             else if (_command.equals("Draw"))
  1796.             {
  1797. @@ -1278,6 +1403,83 @@
  1798.         sendEditWindow(p, part);
  1799.     }
  1800.    
  1801. +   public static void showSkinWindow(L2PcInstance player, Skin skin)
  1802. +   {
  1803. +       String filename = "data/html/SkinManager/Skin.htm";
  1804. +       NpcHtmlMessage html = new NpcHtmlMessage(0);
  1805. +       html.setFile(filename);
  1806. +       html.replace("%hat%", player.isActiveHat() ? "<font color=\"00ff00\">ON</font>" : "<font color=\"ff0000\">OFF</font>");
  1807. +       html.replace("%showbutton%", L2BeautyShopInstance.showButtons(player, skin));
  1808. +       html.replace("%skinprice%", skin.getPrice());
  1809. +       html.replace("%skinpriceid%", skin.getPriceItemName());
  1810. +       html.replace("%skiname%", skin.getName());
  1811. +       html.replace("%icon%", "<img src=\"MAYKE_MENDES_SKIN" + L2BeautyShopInstance.getIconPath(player, skin) + "\" width=32 height=32/>");
  1812. +       html.replace("%skinstatus%", player.containsSkin(skin) ? "<font color=\"LEVEL\">Already Acquired</font>" : "Not Acquired");
  1813. +       html.replace("%skinvip%", skin.isVip() ? "<font color=\"00ff00\">TRUE</font>" : "<font color=\"ff0000\">FALSE</font>");
  1814. +       player.sendPacket(html);
  1815. +   }
  1816. +  
  1817. +   public void showMainWindow(L2PcInstance player, int page)
  1818. +   {
  1819. +       String filename = "data/html/SkinManager/Main.htm";
  1820. +       NpcHtmlMessage html = new NpcHtmlMessage(0);
  1821. +       html.setFile(filename);
  1822. +       html.replace("%hat%", player.isActiveHat() ? "ON" : "OFF");
  1823. +       html.replace("%skins%", L2BeautyShopInstance.generateSkinsHtml(player, page));
  1824. +       html.replace("%pages%", L2BeautyShopInstance.generatePagesHtml(player));
  1825. +       player.sendPacket(html);
  1826. +       filename = null;
  1827. +       html = null;
  1828. +   }
  1829. +  
  1830. +   class Counter implements Runnable
  1831. +   {
  1832. +       L2PcInstance p;
  1833. +      
  1834. +       int id;
  1835. +      
  1836. +       Counter(L2PcInstance p)
  1837. +       {
  1838. +           this.p = p;
  1839. +       }
  1840. +      
  1841. +       @Override
  1842. +       public void run()
  1843. +       {
  1844. +           if (this.p.visualizationTime >= 0)
  1845. +           {
  1846. +               this.p.sendPacket(new ExShowScreenMessage("Current skin visualization will end in: " + this.p.visualizationTime, 1100));
  1847. +           }
  1848. +           else
  1849. +           {
  1850. +               if (p.getSkinId() == 0)
  1851. +               {
  1852. +                   Skin dress = SkinData.getInstance().getSkinById(id);
  1853. +                   p.setActiveSkin(dress);
  1854. +               }
  1855. +               this.p.setSkinId(0);
  1856. +               Skin dress = SkinData.getInstance().getSkinById(0);
  1857. +               p.setActiveSkin(dress);
  1858. +               this.p.setDressMeEnabled(false);
  1859. +               this.p.broadcastUserInfo();
  1860. +               this.p.sendPacket(new ExShowScreenMessage("Current skin visualization time it's over!", 2000));
  1861. +               RequestBypassToServer.stopCounter(this.p.visualTask);
  1862. +           }
  1863. +           this.p.visualizationTime--;
  1864. +       }
  1865. +   }
  1866. +  
  1867. +   public static void stopCounter(ScheduledFuture<?> task)
  1868. +   {
  1869. +       task.cancel(true);
  1870. +       task = null;
  1871. +   }
  1872. +  
  1873. +   public ScheduledFuture<?> startCounter(L2PcInstance player)
  1874. +   {
  1875. +       return ThreadPoolManager.getInstance().scheduleAiAtFixedRate(new Counter(player), 1000L, 1000L);
  1876. +   }
  1877. +  
  1878.     public void sendEditWindow(L2PcInstance p, String part)
  1879.     {
  1880.         NpcHtmlMessage htm = new NpcHtmlMessage(0);
  1881. diff --git a/src/l2jorion/game/network/serverpackets/CharInfo.java b/src/l2jorion/game/network/serverpackets/CharInfo.java
  1882. index a8bf3be..c7eda05 100644
  1883. --- a/src/l2jorion/game/network/serverpackets/CharInfo.java
  1884. +++ b/src/l2jorion/game/network/serverpackets/CharInfo.java
  1885. @@ -23,6 +23,7 @@
  1886.  import java.util.Map;
  1887.  import java.util.Set;
  1888.  
  1889. +import Base.SkinBeauty.Skin;
  1890.  import l2jorion.Config;
  1891.  import l2jorion.game.datatables.sql.NpcTable;
  1892.  import l2jorion.game.managers.CursedWeaponsManager;
  1893. @@ -182,18 +183,38 @@
  1894.                 writeD(_activeChar.getBaseClass());
  1895.             }
  1896.            
  1897. -           writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_DHAIR));
  1898. -           writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_HEAD));
  1899. -           writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_RHAND));
  1900. -           writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_LHAND));
  1901. -           writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_GLOVES));
  1902. -           writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_CHEST));
  1903. -           writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_LEGS));
  1904. -           writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_FEET));
  1905. -           writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_BACK));
  1906. -           writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_RHAND));
  1907. -           writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_HAIR));
  1908. -           writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_FACE));
  1909. +           final Skin dress = _activeChar.getActiveSkin();
  1910. +          
  1911. +           if (!_activeChar.isDressMeEnabled())
  1912. +           {
  1913. +               writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_DHAIR));
  1914. +               writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_HEAD));
  1915. +               writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_RHAND));
  1916. +               writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_LHAND));
  1917. +               writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_GLOVES));
  1918. +               writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_CHEST));
  1919. +               writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_LEGS));
  1920. +               writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_FEET));
  1921. +               writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_BACK));
  1922. +               writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_RHAND));
  1923. +               writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_HAIR));
  1924. +               writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_FACE));
  1925. +           }
  1926. +           else
  1927. +           {
  1928. +               writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_DHAIR));
  1929. +               writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_HEAD));
  1930. +               writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_RHAND));
  1931. +               writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_LHAND));
  1932. +               writeD(dress != null ? dress.getGloves() : _inv.getPaperdollItemId(Inventory.PAPERDOLL_GLOVES));
  1933. +               writeD(dress != null ? dress.getChest() : _inv.getPaperdollItemId(Inventory.PAPERDOLL_CHEST));
  1934. +               writeD(dress != null ? dress.getLegs() : _inv.getPaperdollItemId(Inventory.PAPERDOLL_LEGS));
  1935. +               writeD(dress != null ? dress.getFeet() : _inv.getPaperdollItemId(Inventory.PAPERDOLL_FEET));
  1936. +               writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_BACK));
  1937. +               writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_RHAND));
  1938. +               writeD(dress != null ? dress.getHair() : _inv.getPaperdollItemId(Inventory.PAPERDOLL_HAIR));
  1939. +               writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_FACE));
  1940. +           }
  1941.            
  1942.             // c6 new h's
  1943.             writeH(0x00);
  1944. diff --git a/src/l2jorion/game/network/serverpackets/UserInfo.java b/src/l2jorion/game/network/serverpackets/UserInfo.java
  1945. index 7ec8b56..a04983d 100644
  1946. --- a/src/l2jorion/game/network/serverpackets/UserInfo.java
  1947. +++ b/src/l2jorion/game/network/serverpackets/UserInfo.java
  1948. @@ -20,6 +20,7 @@
  1949.   */
  1950.  package l2jorion.game.network.serverpackets;
  1951.  
  1952. +import Base.SkinBeauty.Skin;
  1953.  import l2jorion.Config;
  1954.  import l2jorion.game.datatables.sql.NpcTable;
  1955.  import l2jorion.game.managers.CursedWeaponsManager;
  1956. @@ -114,42 +115,84 @@
  1957.         writeD(_activeChar.getMaxLoad());
  1958.        
  1959.         writeD(_activeChar.getActiveWeaponItem() != null ? 40 : 20); // 20 no weapon, 40 weapon equippe
  1960. +       final Skin dress = _activeChar.getActiveSkin();
  1961.        
  1962. -       writeD(_activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_DHAIR));
  1963. -       writeD(_activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_REAR));
  1964. -       writeD(_activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_LEAR));
  1965. -       writeD(_activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_NECK));
  1966. -       writeD(_activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_RFINGER));
  1967. -       writeD(_activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_LFINGER));
  1968. -       writeD(_activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_HEAD));
  1969. -       writeD(_activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_RHAND));
  1970. -       writeD(_activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_LHAND));
  1971. -       writeD(_activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_GLOVES));
  1972. -       writeD(_activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_CHEST));
  1973. -       writeD(_activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_LEGS));
  1974. -       writeD(_activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_FEET));
  1975. -       writeD(_activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_BACK));
  1976. -       writeD(_activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_RHAND));
  1977. -       writeD(_activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_HAIR));
  1978. -       writeD(_activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_FACE));
  1979. -      
  1980. -       writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_DHAIR));
  1981. -       writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_REAR));
  1982. -       writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_LEAR));
  1983. -       writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_NECK));
  1984. -       writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_RFINGER));
  1985. -       writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_LFINGER));
  1986. -       writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_HEAD));
  1987. -       writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_RHAND));
  1988. -       writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_LHAND));
  1989. -       writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_GLOVES));
  1990. -       writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_CHEST));
  1991. -       writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_LEGS));
  1992. -       writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_FEET));
  1993. -       writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_BACK));
  1994. -       writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_RHAND));
  1995. -       writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_HAIR));
  1996. -       writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_FACE));
  1997. +       if (!_activeChar.isDressMeEnabled())
  1998. +       {
  1999. +           writeD(_activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_DHAIR));
  2000. +           writeD(_activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_REAR));
  2001. +           writeD(_activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_LEAR));
  2002. +           writeD(_activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_NECK));
  2003. +           writeD(_activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_RFINGER));
  2004. +           writeD(_activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_LFINGER));
  2005. +           writeD(_activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_HEAD));
  2006. +           writeD(_activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_RHAND));
  2007. +           writeD(_activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_LHAND));
  2008. +           writeD(_activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_GLOVES));
  2009. +           writeD(_activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_CHEST));
  2010. +           writeD(_activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_LEGS));
  2011. +           writeD(_activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_FEET));
  2012. +           writeD(_activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_BACK));
  2013. +           writeD(_activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_RHAND));
  2014. +           writeD(_activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_HAIR));
  2015. +           writeD(_activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_FACE));
  2016. +          
  2017. +           writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_DHAIR));
  2018. +           writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_REAR));
  2019. +           writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_LEAR));
  2020. +           writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_NECK));
  2021. +           writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_RFINGER));
  2022. +           writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_LFINGER));
  2023. +           writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_HEAD));
  2024. +           writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_RHAND));
  2025. +           writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_LHAND));
  2026. +           writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_GLOVES));
  2027. +           writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_CHEST));
  2028. +           writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_LEGS));
  2029. +           writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_FEET));
  2030. +           writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_BACK));
  2031. +           writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_RHAND));
  2032. +           writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_HAIR));
  2033. +           writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_FACE));
  2034. +       }
  2035. +       else
  2036. +       {
  2037. +           writeD(_activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_DHAIR));
  2038. +           writeD(_activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_REAR));
  2039. +           writeD(_activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_LEAR));
  2040. +           writeD(_activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_NECK));
  2041. +           writeD(_activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_RFINGER));
  2042. +           writeD(_activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_LFINGER));
  2043. +           writeD(_activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_HEAD));
  2044. +           writeD(_activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_RHAND));
  2045. +           writeD(_activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_LHAND));
  2046. +           writeD(dress != null ? dress.getGloves() : _activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_GLOVES));
  2047. +           writeD(dress != null ? dress.getChest() : _activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_CHEST));
  2048. +           writeD(dress != null ? dress.getLegs() : _activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_LEGS));
  2049. +           writeD(dress != null ? dress.getFeet() : _activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_FEET));
  2050. +           writeD(_activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_BACK));
  2051. +           writeD(_activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_RHAND));
  2052. +           writeD(dress != null ? dress.getHair() : _activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_HAIR));
  2053. +           writeD(_activeChar.getInventory().getPaperdollObjectId(Inventory.PAPERDOLL_FACE));
  2054. +          
  2055. +           writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_DHAIR));
  2056. +           writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_REAR));
  2057. +           writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_LEAR));
  2058. +           writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_NECK));
  2059. +           writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_RFINGER));
  2060. +           writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_LFINGER));
  2061. +           writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_HEAD));
  2062. +           writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_RHAND));
  2063. +           writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_LHAND));
  2064. +           writeD(dress != null ? dress.getGloves() : _activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_GLOVES));
  2065. +           writeD(dress != null ? dress.getChest() : _activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_CHEST));
  2066. +           writeD(dress != null ? dress.getLegs() : _activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_LEGS));
  2067. +           writeD(dress != null ? dress.getFeet() : _activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_FEET));
  2068. +           writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_BACK));
  2069. +           writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_RHAND));
  2070. +           writeD(dress != null ? dress.getHair() : _activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_HAIR));
  2071. +           writeD(_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_FACE));
  2072. +       }
  2073.        
  2074.         writeH(0x00);
  2075.         writeH(0x00);
  2076.  
Add Comment
Please, Sign In to add comment