Advertisement
LIONN

ItemEnchanter NPC v0.1

Jul 2nd, 2013
445
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ### Eclipse Workspace Patch 1.0
  2. #P L2jFrozen_DataPack
  3. Index: data/html/itemEnchanter/empty_list.htm
  4. ===================================================================
  5. --- data/html/itemEnchanter/empty_list.htm  (revision 0)
  6. +++ data/html/itemEnchanter/empty_list.htm  (working copy)
  7. @@ -0,0 +1,5 @@
  8. +<html>
  9. +   <body>
  10. +       <font color="LEVEL">You don't have any item to enchant!</font><br><br>
  11. +   </body>
  12. +</html>
  13. Index: data/html/itemEnchanter/template.htm
  14. ===================================================================
  15. --- data/html/itemEnchanter/template.htm    (revision 0)
  16. +++ data/html/itemEnchanter/template.htm    (working copy)
  17. @@ -0,0 +1,12 @@
  18. +<html>
  19. +   <body>
  20. +       <center>
  21. +           <img src="Sek.cbui371" width=280 height=1>
  22. +           <table width=286 height=26 bgcolor=000000>
  23. +               <tr><td align="center"><font color="LEVEL">Item Enchanter</font></td></tr>
  24. +           </table>
  25. +           <img src="Sek.cbui371" width=280 height=1>
  26. +           %list%
  27. +       </center>
  28. +   </body>
  29. +</html>
  30. Index: sql/customs/added_custom_npc.sql
  31. ===================================================================
  32. --- sql/customs/added_custom_npc.sql    (revision 1004)
  33. +++ sql/customs/added_custom_npc.sql    (working copy)
  34. @@ -33,5 +33,8 @@
  35.  INSERT INTO `custom_npc` VALUES
  36.  (54, 21654, 'Necromancer of Destruction', 1, 'Equip Manager', 1, 'Monster.vale_master_20_bi', 14.50, 48.00, 80, 'male', 'L2Merchant', 40, 4608, 1896, 67.15, 3.09, 40, 43, 30, 21, 20, 10, 8042, 913, 1863, 587, 1182, 477, 278, 150, 333, 0, 0, 0, 77, 154, 'fire_clan', 300, 0, 0, 'LAST_HIT');
  37.  
  38. +INSERT INTO `custom_npc` VALUES
  39. +(56, 30026, 'Mario', 1, 'Item Enchanter', 1, 'NPC.a_fighterguild_master_Mhuman', 8.00, 23.50, 70, 'male', 'L2ItemEnchanter', 40, 3862, 1493, 11.85, 2.78, 40, 43, 30, 21, 20, 10, 0, 0, 1314, 470, 780, 382, 278, 0, 333, 0, 0, 0, 55, 132, null, 0, 1, 0, 'LAST_HIT');
  40. +
  41.  insert into custom_npc values
  42.  (50020, 30298, 'Augmenter', 1, 'L2Frozen', 1, 'NPC.a_smith_MDwarf', 7.00, 16.50, 70, 'male', 'L2Trainer', 40, 3862, 1493, 11.85, 2.78, 40, 43, 30, 21, 20, 10, 0, 0, 1314, 470, 780, 382, 278, 0, 333, 89, 0, 0, 55, 132, '', 0, 1, 0, 'LAST_HIT');
  43. \ No newline at end of file
  44. Index: data/html/itemEnchanter/long_list.htm
  45. ===================================================================
  46. --- data/html/itemEnchanter/long_list.htm   (revision 0)
  47. +++ data/html/itemEnchanter/long_list.htm   (working copy)
  48. @@ -0,0 +1,5 @@
  49. +<html>
  50. +   <body>
  51. +       <font color="LEVEL">Your item list is too long!</font><br><br>
  52. +   </body>
  53. +</html>
  54. Index: data/html/itemEnchanter/start.htm
  55. ===================================================================
  56. --- data/html/itemEnchanter/start.htm   (revision 0)
  57. +++ data/html/itemEnchanter/start.htm   (working copy)
  58. @@ -0,0 +1,19 @@
  59. +<html>
  60. +   <body>
  61. +       <center>
  62. +           <img src="Sek.cbui371" width=280 height=1>
  63. +           <table width=286 height=26 bgcolor=000000>
  64. +               <tr><td align="center"><font color="LEVEL">Item Enchanter</font></td></tr>
  65. +           </table>
  66. +           <img src="Sek.cbui371" width=280 height=1>
  67. +           <br><br>
  68. +           <button value="Weapon" action="bypass -h npc_%objectId%_enchant_weapon" width=100 height=15 back="sek.cbui94" fore="sek.cbui92">
  69. +           <br>
  70. +           <button value="Armor" action="bypass -h npc_%objectId%_enchant_armor" width=100 height=15 back="sek.cbui94" fore="sek.cbui92">
  71. +           <br>
  72. +           <button value="Reset Weapon" action="bypass -h npc_%objectId%_reset_weapon" width=100 height=15 back="sek.cbui94" fore="sek.cbui92">
  73. +           <br>
  74. +           <button value="Reset Armor" action="bypass -h npc_%objectId%_reset_armor" width=100 height=15 back="sek.cbui94" fore="sek.cbui92">
  75. +       </center>
  76. +   </body>
  77. +</html>
  78. Index: data/html/itemEnchanter/disabled.htm
  79. ===================================================================
  80. --- data/html/itemEnchanter/disabled.htm    (revision 0)
  81. +++ data/html/itemEnchanter/disabled.htm    (working copy)
  82. @@ -0,0 +1,5 @@
  83. +<html>
  84. +   <body>
  85. +       <font color="LEVEL">This feature is currently disabled.</font><br><br>
  86. +   </body>
  87. +</html>
  88. #P L2jFrozen_GameServer
  89. Index: head-src/com/l2jfrozen/Config.java
  90. ===================================================================
  91. --- head-src/com/l2jfrozen/Config.java  (revision 1004)
  92. +++ head-src/com/l2jfrozen/Config.java  (working copy)
  93. @@ -2399,6 +2399,21 @@
  94.     public static String PVP1_CUSTOM_MESSAGE;
  95.     public static String PVP2_CUSTOM_MESSAGE;
  96.  
  97. +/*--------------------< Npc Enchant Items >------------------------*/
  98. +   public static boolean npcEnchantItemsEnabled;
  99. +   public static int weaponEnchantLevel;
  100. +   public static int armorEnchantLevel;
  101. +   public static int IngredientID;
  102. +   public static int InAmountWeapon;
  103. +   public static int InAmountArmor;
  104. +   public static int augmentItemChance;
  105. +   public static String nonEnchantableItems;
  106. +   public static List<Integer> nonEnchantableItemList;
  107. +
  108. +   public static boolean modifyItemEnchant;
  109. +   public static FastMap<Integer, Integer> modifyItemEnchantList;
  110. +/*--------------------< Npc Enchant Items >------------------------*/
  111. +
  112.     //============================================================
  113.     public static void loadL2JFrozenConfig()
  114.     {
  115. @@ -2517,6 +2532,47 @@
  116.             FARM2_CUSTOM_MESSAGE = L2JFrozenSettings.getProperty("Farm2CustomMeesage", "You have been teleported to Farm Zone 2!");
  117.             PVP1_CUSTOM_MESSAGE = L2JFrozenSettings.getProperty("PvP1CustomMeesage", "You have been teleported to PvP Zone 1!");
  118.             PVP2_CUSTOM_MESSAGE = L2JFrozenSettings.getProperty("PvP2CustomMeesage", "You have been teleported to PvP Zone 2!");
  119. +      
  120. +       /*---------------------------------------------< Npc Enchant Items >-------------------------------------------------*/
  121. +           npcEnchantItemsEnabled = Boolean.parseBoolean(L2JFrozenSettings.getProperty("EnableNpcEnchantItems", "False"));
  122. +           weaponEnchantLevel = Integer.parseInt(L2JFrozenSettings.getProperty("WeaponEnchantLevel", "20"));
  123. +           armorEnchantLevel = Integer.parseInt(L2JFrozenSettings.getProperty("ArmorEnchantLevel", "16"));
  124. +           IngredientID = Integer.parseInt(L2JFrozenSettings.getProperty("IngredientID", "57"));
  125. +           InAmountWeapon = Integer.parseInt(L2JFrozenSettings.getProperty("IngredientAmountWeapon", "15000"));
  126. +           InAmountArmor = Integer.parseInt(L2JFrozenSettings.getProperty("IngredientAmountArmor", "10000"));
  127. +           augmentItemChance = Integer.parseInt(L2JFrozenSettings.getProperty("AugmentItemChance", "30"));
  128. +           nonEnchantableItems = L2JFrozenSettings.getProperty("NonEnchantableItemList", "0");
  129. +           nonEnchantableItemList = new ArrayList<Integer>();
  130. +           for(String itemId : nonEnchantableItems.split(","))
  131. +               nonEnchantableItemList.add(Integer.parseInt(itemId));
  132. +
  133. +           modifyItemEnchant = Boolean.parseBoolean(L2JFrozenSettings.getProperty("ModifyItemEnchant", "false"));
  134. +           if(modifyItemEnchant)
  135. +           {
  136. +               modifyItemEnchantList = new FastMap<Integer, Integer>();
  137. +               String[] propertySplit = L2JFrozenSettings.getProperty("ModifyItemEnchantList", "").split(";");
  138. +               for(String item : propertySplit)
  139. +               {
  140. +                   String[] itemEnchantSplit = item.split(",");
  141. +                   if(itemEnchantSplit.length != 2)
  142. +                   {
  143. +                       System.out.println("invalid config property -> ModifyItemEnchantList \"" + item + "\"");
  144. +                   }
  145. +                   else
  146. +                   {
  147. +                       try
  148. +                       {
  149. +                           modifyItemEnchantList.put(Integer.parseInt(itemEnchantSplit[0]), Integer.parseInt(itemEnchantSplit[1]));
  150. +                       }
  151. +                       catch(NumberFormatException nfe)
  152. +                       {
  153. +                           if(Config.ENABLE_ALL_EXCEPTIONS)
  154. +                               nfe.printStackTrace();
  155. +                       }
  156. +                   }
  157. +               }
  158. +           }
  159. +       /*---------------------------------------------< Npc Enchant Items >-------------------------------------------------*/
  160.         }
  161.         catch(Exception e)
  162.         {
  163. Index: config/functions/l2jfrozen.properties
  164. ===================================================================
  165. --- config/functions/l2jfrozen.properties   (revision 1004)
  166. +++ config/functions/l2jfrozen.properties   (working copy)
  167. @@ -280,4 +280,33 @@
  168.  ProtectorSkillLevel = 13
  169.  ProtectorSkillTime = 600
  170.  # Npc Protector Message
  171. -ProtectorMessage = Hey You!, Never Kill On This Area, Go Read The Rules!
  172. \ No newline at end of file
  173. +ProtectorMessage = Hey You!, Never Kill On This Area, Go Read The Rules!
  174. +
  175. +# -------------------------------------------
  176. +#               Npc Enchant Items           -
  177. +# -------------------------------------------
  178. +# Npc Id = 56
  179. +# Enable Enchant Items NPC. Default: False
  180. +EnableNpcEnchantItems = False
  181. +
  182. +# Level of Weapon and Armor enchantment.
  183. +WeaponEnchantLevel = 20
  184. +ArmorEnchantLevel = 16
  185. +
  186. +# Price ID
  187. +IngredientID = 6393
  188. +
  189. +# Price Weapon Count
  190. +IngredientAmountWeapon = 50
  191. +
  192. +# Price Armor Count
  193. +IngredientAmountArmor = 10
  194. +
  195. +# Chance to augment item automatically on enchantment process.
  196. +AugmentItemChance = 30
  197. +
  198. +# List of Items that cannot be enchanted.
  199. +NonEnchantableItemList = 0
  200. +
  201. +ModifyItemEnchant = True
  202. +ModifyItemEnchantList = 0,0;
  203. Index: head-src/com/l2jfrozen/gameserver/model/PcInventory.java
  204. ===================================================================
  205. --- head-src/com/l2jfrozen/gameserver/model/PcInventory.java    (revision 1004)
  206. +++ head-src/com/l2jfrozen/gameserver/model/PcInventory.java    (working copy)
  207. @@ -25,6 +25,7 @@
  208.  
  209.  import javolution.util.FastList;
  210.  
  211. +import com.l2jfrozen.Config;
  212.  import com.l2jfrozen.gameserver.model.TradeList.TradeItem;
  213.  import com.l2jfrozen.gameserver.model.actor.instance.L2ItemInstance;
  214.  import com.l2jfrozen.gameserver.model.actor.instance.L2ItemInstance.ItemLocation;
  215. @@ -843,4 +844,84 @@
  216.        
  217.     }
  218.    
  219. +   public L2ItemInstance[] getWeaponsList(boolean positive)
  220. +   {
  221. +       FastList<L2ItemInstance> list = FastList.newInstance();
  222. +       if(positive)
  223. +       {
  224. +           for (L2ItemInstance item : _items)
  225. +           {
  226. +               if ((item != null) && (item.isEnchantable()) && item.isWeapon())
  227. +               {
  228. +                   int enchantLevel = Config.weaponEnchantLevel;
  229. +                   if (Config.modifyItemEnchant)
  230. +                   {
  231. +                       if (Config.modifyItemEnchantList.containsKey(item.getItemId()))
  232. +                       {
  233. +                           enchantLevel = Config.modifyItemEnchantList.get(item.getItemId());
  234. +                       }
  235. +                   }
  236. +                  
  237. +                   if(item.getEnchantLevel() < enchantLevel)
  238. +                       list.add(item);
  239. +               }
  240. +           }
  241. +       }
  242. +       else
  243. +       {
  244. +           for (L2ItemInstance item : _items)
  245. +           {
  246. +               if ((item != null) && (item.isEnchantable()) && item.isWeapon())
  247. +               {
  248. +                   if(item.getEnchantLevel() != 0)
  249. +                       list.add(item);
  250. +               }
  251. +           }
  252. +       }
  253. +      
  254. +       L2ItemInstance[] result = list.toArray(new L2ItemInstance[list.size()]);
  255. +       FastList.recycle(list);
  256. +       return result;
  257. +   }
  258. +  
  259. +   public L2ItemInstance[] getArmorsList(boolean positive)
  260. +   {
  261. +       FastList<L2ItemInstance> list = FastList.newInstance();
  262. +       if(positive)
  263. +       {
  264. +           for (L2ItemInstance item : _items)
  265. +           {
  266. +               if ((item != null) && (item.isEnchantable()) && item.isArmor())
  267. +               {
  268. +                   int enchantLevel = Config.armorEnchantLevel;
  269. +                   if (Config.modifyItemEnchant)
  270. +                   {
  271. +                       if (Config.modifyItemEnchantList.containsKey(item.getItemId()))
  272. +                       {
  273. +                           enchantLevel = Config.modifyItemEnchantList.get(item.getItemId());
  274. +                       }
  275. +                   }
  276. +                  
  277. +                   if(item.getEnchantLevel() < enchantLevel)
  278. +                   {
  279. +                       list.add(item);
  280. +                   }
  281. +               }
  282. +           }
  283. +       }
  284. +       else
  285. +       {
  286. +           for (L2ItemInstance item : _items)
  287. +           {
  288. +               if ((item != null) && (item.isEnchantable()) && item.isArmor())
  289. +               {
  290. +                   if(item.getEnchantLevel() != 0)
  291. +                       list.add(item);
  292. +               }
  293. +           }
  294. +       }
  295. +       L2ItemInstance[] result = list.toArray(new L2ItemInstance[list.size()]);
  296. +       FastList.recycle(list);
  297. +       return result;
  298. +   }
  299.  }
  300. Index: head-src/com/l2jfrozen/gameserver/model/actor/instance/L2ItemEnchanterInstance.java
  301. ===================================================================
  302. --- head-src/com/l2jfrozen/gameserver/model/actor/instance/L2ItemEnchanterInstance.java (revision 0)
  303. +++ head-src/com/l2jfrozen/gameserver/model/actor/instance/L2ItemEnchanterInstance.java (working copy)
  304. @@ -0,0 +1,380 @@
  305. +/*
  306. + * This program is free software; you can redistribute it and/or modify
  307. + * it under the terms of the GNU General Public License as published by
  308. + * the Free Software Foundation; either version 2, or (at your option)
  309. + * any later version.
  310. + *
  311. + * This program is distributed in the hope that it will be useful,
  312. + * but WITHOUT ANY WARRANTY; without even the implied warranty of
  313. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  314. + * GNU General Public License for more details.
  315. + *
  316. + * You should have received a copy of the GNU General Public License
  317. + * along with this program; if not, write to the Free Software
  318. + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
  319. + * 02111-1307, USA.
  320. + *
  321. + * http://www.gnu.org/copyleft/gpl.html
  322. + */
  323. +package com.l2jfrozen.gameserver.model.actor.instance;
  324. +
  325. +import java.util.StringTokenizer;
  326. +
  327. +import com.l2jfrozen.Config;
  328. +import com.l2jfrozen.gameserver.ai.CtrlIntention;
  329. +import com.l2jfrozen.gameserver.datatables.sql.IconTable;
  330. +import com.l2jfrozen.gameserver.datatables.sql.ItemTable;
  331. +import com.l2jfrozen.gameserver.datatables.xml.AugmentationData;
  332. +import com.l2jfrozen.gameserver.network.SystemMessageId;
  333. +import com.l2jfrozen.gameserver.network.serverpackets.ActionFailed;
  334. +import com.l2jfrozen.gameserver.network.serverpackets.InventoryUpdate;
  335. +import com.l2jfrozen.gameserver.network.serverpackets.MyTargetSelected;
  336. +import com.l2jfrozen.gameserver.network.serverpackets.NpcHtmlMessage;
  337. +import com.l2jfrozen.gameserver.network.serverpackets.SystemMessage;
  338. +import com.l2jfrozen.gameserver.network.serverpackets.ValidateLocation;
  339. +import com.l2jfrozen.gameserver.templates.L2NpcTemplate;
  340. +import com.l2jfrozen.util.random.Rnd;
  341. +
  342. +public class L2ItemEnchanterInstance extends L2FolkInstance
  343. +{
  344. +   boolean flip = true;
  345. +   String IngredientName = ItemTable.getInstance().getTemplate(Config.IngredientID).getName();
  346. +  
  347. +   /**
  348. +    * @param objectId the object id
  349. +    * @param template the template
  350. +    */
  351. +   public L2ItemEnchanterInstance(int objectId, L2NpcTemplate template)
  352. +   {
  353. +       super(objectId, template);
  354. +   }
  355. +  
  356. +   /* (non-Javadoc)
  357. +    * @see com.l2jfrozen.gameserver.model.actor.instance.L2NpcInstance#onAction(com.l2jfrozen.gameserver.model.actor.instance.L2PcInstance)
  358. +    */
  359. +   @Override
  360. +   public void onAction(L2PcInstance player)
  361. +   {
  362. +       if (!canTarget(player))
  363. +           return;
  364. +      
  365. +       // Check if the L2PcInstance already target the L2NpcInstance
  366. +       if (this != player.getTarget())
  367. +       {
  368. +           // Set the target of the L2PcInstance player
  369. +           player.setTarget(this);
  370. +          
  371. +           // Send a Server->Client packet MyTargetSelected to the L2PcInstance player
  372. +           MyTargetSelected my = new MyTargetSelected(getObjectId(), 0);
  373. +           player.sendPacket(my);
  374. +           my = null;
  375. +          
  376. +           // Send a Server->Client packet ValidateLocation to correct the L2NpcInstance position and heading on the client
  377. +           player.sendPacket(new ValidateLocation(this));
  378. +       }
  379. +       else
  380. +       {
  381. +           // Calculate the distance between the L2PcInstance and the L2NpcInstance
  382. +           if (!canInteract(player))
  383. +           {
  384. +               // Notify the L2PcInstance AI with AI_INTENTION_INTERACT
  385. +               player.getAI().setIntention(CtrlIntention.AI_INTENTION_INTERACT, this);
  386. +           }
  387. +           else
  388. +           {
  389. +               showChatWindow(player);
  390. +           }
  391. +       }
  392. +      
  393. +       // Send a Server->Client ActionFailed to the L2PcInstance in order to avoid that the client wait another packet
  394. +       player.sendPacket(new ActionFailed());
  395. +   }
  396. +  
  397. +   @Override
  398. +   public void showChatWindow(L2PcInstance player)
  399. +   {
  400. +       String filename = "data/html/itemEnchanter/disabled.htm";
  401. +      
  402. +       if (Config.npcEnchantItemsEnabled)
  403. +       {
  404. +           filename = "data/html/itemEnchanter/start.htm";
  405. +       }
  406. +      
  407. +       NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
  408. +       html.setFile(filename);
  409. +       html.replace("%objectId%", String.valueOf(getObjectId()));
  410. +       player.sendPacket(html);
  411. +   }
  412. +  
  413. +   @Override
  414. +   public void onBypassFeedback(L2PcInstance player, String command)
  415. +   {
  416. +       String filename = "data/html/itemEnchanter/template.htm";
  417. +      
  418. +       StringTokenizer st = new StringTokenizer(command, " ");
  419. +       String actualCommand = st.nextToken();
  420. +      
  421. +       if (actualCommand.equalsIgnoreCase("enchant_weapon"))
  422. +       {
  423. +           L2ItemInstance[] weapon = player.getInventory().getWeaponsList(true);
  424. +           final int size = weapon.length;
  425. +           String text = "";
  426. +           String bgcolor = "";
  427. +          
  428. +           if (size == 0)
  429. +           {
  430. +               filename = "data/html/itemEnchanter/empty_list.htm";
  431. +           }
  432. +           else if (size > 15)
  433. +           {
  434. +               filename = "data/html/itemEnchanter/long_list.htm";
  435. +           }
  436. +          
  437. +           for (int i = 0; i != size; i++)
  438. +           {
  439. +               flip = !flip;
  440. +               final int itemId = weapon[i].getItem().getItemId();
  441. +               String name = weapon[i].getItemName();
  442. +               String Action = "Item " + String.valueOf(weapon[i].getObjectId());
  443. +               bgcolor = "";
  444. +              
  445. +               int enchantLevel = Config.weaponEnchantLevel;
  446. +               if (Config.modifyItemEnchant)
  447. +               {
  448. +                   if (Config.modifyItemEnchantList.containsKey(weapon[i].getItemId()))
  449. +                   {
  450. +                       enchantLevel = Config.modifyItemEnchantList.get(weapon[i].getItemId());
  451. +                   }
  452. +               }
  453. +
  454. +               if (flip == true)
  455. +               {
  456. +                   bgcolor = "bgcolor=000000";
  457. +               }
  458. +              
  459. +               text += "<table " + bgcolor + "><tr><td width=40><button action=\"bypass -h npc_" + getObjectId() + "_" + Action + "\" width=32 height=32 back=" + IconTable.getIcon(itemId) + " fore=" + IconTable.getIcon(itemId) + "></td><td width=220><table width=300><tr><td><font color=799BB0>+" + enchantLevel + " " + name + "</font></td><td></td></tr><tr><td><font color=B09B79> " + Config.InAmountWeapon + " " + IngredientName + "</font></td></tr></table></td></tr></table>";
  460. +           }
  461. +          
  462. +           NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
  463. +           html.setFile(filename);
  464. +          
  465. +           html.replace("%objectId%", String.valueOf(getObjectId()));
  466. +           html.replace("%list%", String.valueOf(text));
  467. +           player.sendPacket(html);
  468. +       }
  469. +       if (actualCommand.equalsIgnoreCase("reset_weapon"))
  470. +       {
  471. +           L2ItemInstance[] weapon = player.getInventory().getWeaponsList(false);
  472. +           final int size = weapon.length;
  473. +           String text = "";
  474. +           String bgcolor = "";
  475. +          
  476. +           if (size == 0)
  477. +           {
  478. +               filename = "data/html/itemEnchanter/empty_list.htm";
  479. +           }
  480. +           else if (size > 15)
  481. +           {
  482. +               filename = "data/html/itemEnchanter/long_list.htm";
  483. +           }
  484. +          
  485. +           for (int i = 0; i != size; i++)
  486. +           {
  487. +               flip = !flip;
  488. +               final int itemId = weapon[i].getItem().getItemId();
  489. +               final int enchantLevel = weapon[i].getEnchantLevel();
  490. +               String name = weapon[i].getItemName();
  491. +               String Action = "Reset " + String.valueOf(weapon[i].getObjectId());
  492. +               bgcolor = "";
  493. +              
  494. +
  495. +               if (flip == true)
  496. +               {
  497. +                   bgcolor = "bgcolor=000000";
  498. +               }
  499. +              
  500. +               text += "<table " + bgcolor + "><tr><td width=40><button action=\"bypass -h npc_" + getObjectId() + "_" + Action + "\" width=32 height=32 back=" + IconTable.getIcon(itemId) + " fore=" + IconTable.getIcon(itemId) + "></td><td width=220><table width=300><tr><td><font color=799BB0>+" + enchantLevel + " " + name + "</font></td><td></td></tr></table></td></tr></table>";
  501. +           }
  502. +          
  503. +           NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
  504. +           html.setFile(filename);
  505. +          
  506. +           html.replace("%objectId%", String.valueOf(getObjectId()));
  507. +           html.replace("%list%", String.valueOf(text));
  508. +           player.sendPacket(html);
  509. +       }
  510. +       if (actualCommand.equalsIgnoreCase("enchant_armor"))
  511. +       {
  512. +           L2ItemInstance[] armor = player.getInventory().getArmorsList(true);
  513. +           final int size = armor.length;
  514. +           String text = "";
  515. +           String bgcolor = "";
  516. +          
  517. +           if (size == 0)
  518. +           {
  519. +               filename = "data/html/itemEnchanter/empty_list.htm";
  520. +           }
  521. +           else if (size > 15)
  522. +           {
  523. +               filename = "data/html/itemEnchanter/long_list.htm";
  524. +           }
  525. +          
  526. +           for (int i = 0; i != size; i++)
  527. +           {
  528. +               flip = !flip;
  529. +               int itemId = armor[i].getItem().getItemId();
  530. +               String name = armor[i].getItemName();
  531. +               String Action = "Item " + String.valueOf(armor[i].getObjectId());
  532. +               bgcolor = "";
  533. +              
  534. +               int enchantLevel = Config.armorEnchantLevel;
  535. +               if (Config.modifyItemEnchant)
  536. +               {
  537. +                   if (Config.modifyItemEnchantList.containsKey(armor[i].getItemId()))
  538. +                   {
  539. +                       enchantLevel = Config.modifyItemEnchantList.get(armor[i].getItemId());
  540. +                   }
  541. +               }
  542. +
  543. +               if (flip == true)
  544. +               {
  545. +                   bgcolor = "bgcolor=000000";
  546. +               }
  547. +              
  548. +               text += "<table " + bgcolor + "><tr><td width=40><button action=\"bypass -h npc_" + getObjectId() + "_" + Action + "\" width=32 height=32 back=" + IconTable.getIcon(itemId) + " fore=" + IconTable.getIcon(itemId) + "></td><td width=220><table width=300><tr><td><font color=799BB0>+" + enchantLevel + " " + name + "</font></td><td></td></tr><tr><td><font color=B09B79> " + Config.InAmountArmor + " " + IngredientName + "</font></td></tr></table></td></tr></table>";
  549. +           }
  550. +          
  551. +           NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
  552. +           html.setFile(filename);
  553. +          
  554. +           html.replace("%objectId%", String.valueOf(getObjectId()));
  555. +           html.replace("%list%", String.valueOf(text));
  556. +           player.sendPacket(html);
  557. +       }
  558. +       if (actualCommand.equalsIgnoreCase("reset_armor"))
  559. +       {
  560. +           L2ItemInstance[] armor = player.getInventory().getArmorsList(false);
  561. +           final int size = armor.length;
  562. +           String text = "";
  563. +           String bgcolor = "";
  564. +          
  565. +           if (size == 0)
  566. +           {
  567. +               filename = "data/html/itemEnchanter/empty_list.htm";
  568. +           }
  569. +           else if (size > 15)
  570. +           {
  571. +               filename = "data/html/itemEnchanter/long_list.htm";
  572. +           }
  573. +          
  574. +           for (int i = 0; i != size; i++)
  575. +           {
  576. +               flip = !flip;
  577. +               final int itemId = armor[i].getItem().getItemId();
  578. +               final int enchantLevel = armor[i].getEnchantLevel();
  579. +               String name = armor[i].getItemName();
  580. +               String Action = "Reset " + String.valueOf(armor[i].getObjectId());
  581. +               bgcolor = "";
  582. +              
  583. +               if (flip == true)
  584. +               {
  585. +                   bgcolor = "bgcolor=000000";
  586. +               }
  587. +              
  588. +               text += "<table " + bgcolor + "><tr><td width=40><button action=\"bypass -h npc_" + getObjectId() + "_" + Action + "\" width=32 height=32 back=" + IconTable.getIcon(itemId) + " fore=" + IconTable.getIcon(itemId) + "></td><td width=220><table width=300><tr><td><font color=799BB0>+" + enchantLevel + " " + name + "</font></td><td></td></tr></table></td></tr></table>";
  589. +           }
  590. +          
  591. +           NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
  592. +           html.setFile(filename);
  593. +          
  594. +           html.replace("%objectId%", String.valueOf(getObjectId()));
  595. +           html.replace("%list%", String.valueOf(text));
  596. +           player.sendPacket(html);
  597. +       }
  598. +      
  599. +       if (actualCommand.equalsIgnoreCase("Item"))
  600. +       {
  601. +           String bbx = st.nextToken();
  602. +           int itemId = Integer.valueOf(bbx);
  603. +           int itemCount = 0;
  604. +          
  605. +           int enchantLevel = Config.weaponEnchantLevel;
  606. +           int amount = Config.InAmountWeapon;
  607. +          
  608. +           L2ItemInstance item = player.getInventory().getItemByObjectId(itemId);
  609. +           if (item == null)
  610. +           {
  611. +               player.sendMessage("That item doesn't exist in your inventory.");
  612. +               return;
  613. +           }
  614. +          
  615. +           if (item.isArmor())
  616. +           {
  617. +               enchantLevel = Config.armorEnchantLevel;
  618. +               amount = Config.InAmountArmor;
  619. +           }
  620. +          
  621. +           if (Config.modifyItemEnchant)
  622. +           {
  623. +               if (Config.modifyItemEnchantList.containsKey(item.getItemId()))
  624. +               {
  625. +                   enchantLevel = Config.modifyItemEnchantList.get(item.getItemId());
  626. +               }
  627. +           }
  628. +
  629. +           if (player.getInventory().getItemByItemId(Config.IngredientID) != null)
  630. +           {
  631. +               itemCount = player.getInventory().getItemByItemId(Config.IngredientID).getCount();
  632. +               if (itemCount < amount)
  633. +               {
  634. +                   player.sendPacket(new SystemMessage(SystemMessageId.NOT_ENOUGH_ITEMS));
  635. +               }
  636. +               else
  637. +               {
  638. +                   player.destroyItemByItemId("enchantItem", Config.IngredientID, amount, player, true);
  639. +                   item.setEnchantLevel(enchantLevel);
  640. +                   player.sendPacket(new SystemMessage(SystemMessageId.S1_S2_SUCCESSFULLY_ENCHANTED).addNumber(item.getEnchantLevel()).addItemName(item.getItemId()));
  641. +                  
  642. +                   if (item.isAugmentable())
  643. +                   {
  644. +                       if (Rnd.get(100) <= Config.augmentItemChance)
  645. +                       {
  646. +                           item.setAugmentation(AugmentationData.getInstance().generateRandomAugmentation(item, Rnd.get(7, 9), Rnd.get(2, 3)));
  647. +                           player.sendPacket(new SystemMessage(SystemMessageId.THE_ITEM_WAS_SUCCESSFULLY_AUGMENTED));
  648. +                       }
  649. +                   }
  650. +                  
  651. +                   InventoryUpdate iu = new InventoryUpdate();
  652. +                   iu.addModifiedItem(item);
  653. +                   player.sendPacket(iu);
  654. +                   player.broadcastUserInfo();
  655. +               }
  656. +           }
  657. +           else
  658. +           {
  659. +               player.sendPacket(new SystemMessage(SystemMessageId.NOT_ENOUGH_ITEMS));
  660. +           }
  661. +       }
  662. +       if (actualCommand.equalsIgnoreCase("Reset"))
  663. +       {
  664. +           String bbx = st.nextToken();
  665. +           int itemId = Integer.valueOf(bbx);
  666. +          
  667. +           L2ItemInstance item = player.getInventory().getItemByObjectId(itemId);
  668. +           if (item == null)
  669. +           {
  670. +               player.sendMessage("That item doesn't exist in your inventory.");
  671. +               return;
  672. +           }
  673. +          
  674. +           item.setEnchantLevel(0);
  675. +           player.sendMessage("The enchantment state of item " + item.getItemName() + " has been reverted to 0.");
  676. +           InventoryUpdate iu = new InventoryUpdate();
  677. +           iu.addModifiedItem(item);
  678. +           player.sendPacket(iu);
  679. +           player.broadcastUserInfo();
  680. +       }
  681. +      
  682. +       super.onBypassFeedback(player, command);
  683. +   }
  684. +}
  685. \ No newline at end of file
  686. Index: head-src/com/l2jfrozen/gameserver/model/actor/instance/L2ItemInstance.java
  687. ===================================================================
  688. --- head-src/com/l2jfrozen/gameserver/model/actor/instance/L2ItemInstance.java  (revision 1004)
  689. +++ head-src/com/l2jfrozen/gameserver/model/actor/instance/L2ItemInstance.java  (working copy)
  690. @@ -49,6 +49,8 @@
  691.  import com.l2jfrozen.gameserver.templates.L2Armor;
  692.  import com.l2jfrozen.gameserver.templates.L2EtcItem;
  693.  import com.l2jfrozen.gameserver.templates.L2Item;
  694. +import com.l2jfrozen.gameserver.templates.L2Weapon;
  695. +import com.l2jfrozen.gameserver.templates.L2WeaponType;
  696.  import com.l2jfrozen.gameserver.thread.ThreadPoolManager;
  697.  import com.l2jfrozen.util.CloseUtil;
  698.  import com.l2jfrozen.util.database.L2DatabaseFactory;
  699. @@ -594,6 +596,75 @@
  700.     }
  701.  
  702.     /**
  703. +    * Returns true if item is an EtcItem
  704. +    * @return boolean
  705. +    */
  706. +   public boolean isEtcItem()
  707. +   {
  708. +       return (_item instanceof L2EtcItem);
  709. +   }
  710. +  
  711. +   /**
  712. +    * Returns true if item is a Weapon/Shield
  713. +    * @return boolean
  714. +    */
  715. +   public boolean isWeapon()
  716. +   {
  717. +       return (_item instanceof L2Weapon);
  718. +   }
  719. +  
  720. +   /**
  721. +    * Returns true if item is an Armor
  722. +    * @return boolean
  723. +    */
  724. +   public boolean isArmor()
  725. +   {
  726. +       return (_item instanceof L2Armor);
  727. +   }
  728. +  
  729. +   /**
  730. +    * Returns the characteristics of the L2EtcItem
  731. +    * @return L2EtcItem
  732. +    */
  733. +   public L2EtcItem getEtcItem()
  734. +   {
  735. +       if (_item instanceof L2EtcItem)
  736. +       {
  737. +           return (L2EtcItem) _item;
  738. +       }
  739. +      
  740. +       return null;
  741. +   }
  742. +  
  743. +   /**
  744. +    * Returns the characteristics of the L2Weapon
  745. +    * @return L2Weapon
  746. +    */
  747. +   public L2Weapon getWeaponItem()
  748. +   {
  749. +       if (_item instanceof L2Weapon)
  750. +       {
  751. +           return (L2Weapon) _item;
  752. +       }
  753. +      
  754. +       return null;
  755. +   }
  756. +  
  757. +   /**
  758. +    * Returns the characteristics of the L2Armor
  759. +    * @return L2Armor
  760. +    */
  761. +   public L2Armor getArmorItem()
  762. +   {
  763. +       if (_item instanceof L2Armor)
  764. +       {
  765. +           return (L2Armor) _item;
  766. +       }
  767. +      
  768. +       return null;
  769. +   }
  770. +  
  771. +   /**
  772.      * Returns the quantity of crystals for crystallization.
  773.      *
  774.      * @return int
  775. @@ -604,6 +675,16 @@
  776.     }
  777.  
  778.     /**
  779. +    * Returns the reference grade of the item.
  780. +    *
  781. +    * @return int
  782. +    */
  783. +   public final int getItemGrade()
  784. +   {
  785. +       return _item.getCrystalType();
  786. +   }
  787. +  
  788. +   /**
  789.      * Returns the reference price of the item.
  790.      *
  791.      * @return int
  792. @@ -1738,4 +1819,32 @@
  793.         return true;
  794.     }
  795.  
  796. +   /**
  797. +    * @return true if item can be enchanted.
  798. +    */
  799. +   public boolean isEnchantable()
  800. +   {
  801. +       if (isHeroItem() || isShadowItem() || isEtcItem() || (getItem().getItemType() == L2WeaponType.ROD))
  802. +           return false;
  803. +      
  804. +       if (getItemGrade() == L2Item.CRYSTAL_NONE)
  805. +           return false;
  806. +      
  807. +       if (Config.nonEnchantableItemList.contains(_itemId))
  808. +           return false;
  809. +      
  810. +       // only equipped items or in inventory can be enchanted
  811. +       if ((getLocation() != L2ItemInstance.ItemLocation.INVENTORY) && (getLocation() != L2ItemInstance.ItemLocation.PAPERDOLL))
  812. +           return false;
  813. +      
  814. +       return true;
  815. +   }
  816. +  
  817. +   public boolean isAugmentable()
  818. +   {
  819. +       if(isAugmented() || isArmor() || getItem().getItemType() == L2WeaponType.NONE)
  820. +           return false;
  821. +      
  822. +       return true;
  823. +   }
  824.  }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement