Guest User

Multishop

a guest
Jul 17th, 2017
1,831
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 107.11 KB | None | 0 0
  1. ### Eclipse Workspace Patch 1.0
  2. #P aCis_gameserverr
  3. Index: java/net/sf/l2j/gameserver/network/clientpackets/RequestEnchantItem.java
  4. ===================================================================
  5. --- java/net/sf/l2j/gameserver/network/clientpackets/RequestEnchantItem.java    (revision 6)
  6. +++ java/net/sf/l2j/gameserver/network/clientpackets/RequestEnchantItem.java    (working copy)
  7. @@ -112,7 +112,7 @@
  8.        
  9.         synchronized (item)
  10.         {
  11. -           double chance = scrollTemplate.getChance(item);
  12. +           double chance = scrollTemplate.getChance(item, activeChar);
  13.            
  14.             // last validation check
  15.             if (item.getOwnerId() != activeChar.getObjectId() || !isEnchantable(item) || chance < 0)
  16. Index: java/net/sf/l2j/gameserver/model/actor/instance/L2MultiShopInstance.java
  17. ===================================================================
  18. --- java/net/sf/l2j/gameserver/model/actor/instance/L2MultiShopInstance.java    (nonexistent)
  19. +++ java/net/sf/l2j/gameserver/model/actor/instance/L2MultiShopInstance.java    (working copy)
  20. @@ -0,0 +1,1248 @@
  21. +/*
  22. + * This program is free software: you can redistribute it and/or modify it under
  23. + * the terms of the GNU General Public License as published by the Free Software
  24. + * Foundation, either version 3 of the License, or (at your option) any later
  25. + * version.
  26. + *
  27. + * This program is distributed in the hope that it will be useful, but WITHOUT
  28. + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
  29. + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
  30. + * details.
  31. + *
  32. + * You should have received a copy of the GNU General Public License along with
  33. + * this program. If not, see <http://www.gnu.org/licenses/>.
  34. + */
  35. +package net.sf.l2j.gameserver.model.actor.instance;
  36. +
  37. +import java.security.MessageDigest;
  38. +import java.sql.Connection;
  39. +import java.sql.PreparedStatement;
  40. +import java.sql.SQLException;
  41. +import java.util.Base64;
  42. +import java.util.StringTokenizer;
  43. +
  44. +import net.sf.l2j.Config;
  45. +import net.sf.l2j.L2DatabaseFactory;
  46. +import net.sf.l2j.commons.concurrent.ThreadPool;
  47. +import net.sf.l2j.gameserver.ai.CtrlIntention;
  48. +import net.sf.l2j.gameserver.datatables.CharNameTable;
  49. +import net.sf.l2j.gameserver.datatables.SkillTable;
  50. +import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminVipStatus;
  51. +import net.sf.l2j.gameserver.instancemanager.CastleManager;
  52. +import net.sf.l2j.gameserver.model.L2Augmentation;
  53. +import net.sf.l2j.gameserver.model.L2Skill;
  54. +import net.sf.l2j.gameserver.model.L2World;
  55. +import net.sf.l2j.gameserver.model.actor.template.NpcTemplate;
  56. +import net.sf.l2j.gameserver.model.base.Sex;
  57. +import net.sf.l2j.gameserver.model.entity.Castle;
  58. +import net.sf.l2j.gameserver.model.item.instance.ItemInstance;
  59. +import net.sf.l2j.gameserver.model.itemcontainer.Inventory;
  60. +import net.sf.l2j.gameserver.model.olympiad.OlympiadManager;
  61. +import net.sf.l2j.gameserver.network.SystemMessageId;
  62. +import net.sf.l2j.gameserver.network.serverpackets.ExShowScreenMessage;
  63. +import net.sf.l2j.gameserver.network.serverpackets.InventoryUpdate;
  64. +import net.sf.l2j.gameserver.network.serverpackets.ItemList;
  65. +import net.sf.l2j.gameserver.network.serverpackets.MagicSkillUse;
  66. +import net.sf.l2j.gameserver.network.serverpackets.NpcHtmlMessage;
  67. +import net.sf.l2j.gameserver.network.serverpackets.SiegeInfo;
  68. +import net.sf.l2j.gameserver.network.serverpackets.SystemMessage;
  69. +
  70. +/**
  71. + * @author Baggos
  72. + */
  73. +public class L2MultiShopInstance extends L2NpcInstance
  74. +{
  75. +   public L2MultiShopInstance(int objectId, NpcTemplate template)
  76. +   {
  77. +       super(objectId, template);
  78. +   }
  79. +  
  80. +   @Override
  81. +   public void onBypassFeedback(L2PcInstance player, String command)
  82. +   {
  83. +       if (player == null)
  84. +           return;
  85. +      
  86. +       if (command.startsWith("donate"))
  87. +       {
  88. +           StringTokenizer st = new StringTokenizer(command);
  89. +           st.nextToken();
  90. +           try
  91. +           {
  92. +               String type = st.nextToken();
  93. +               switch (type)
  94. +               {
  95. +                   case "Noblesse":
  96. +                       Nobless(player);
  97. +                       break;
  98. +                   case "ChangeSex":
  99. +                       Sex(player);
  100. +                       break;
  101. +                   case "CleanPk":
  102. +                       CleanPk(player);
  103. +                       break;
  104. +                   case "FullRec":
  105. +                       Rec(player);
  106. +                       break;
  107. +                   case "ChangeClass":
  108. +                       final NpcHtmlMessage html = new NpcHtmlMessage(0);
  109. +                       html.setFile("data/html/mods/donateNpc/50091-2.htm");
  110. +                       player.sendPacket(html);
  111. +                       break;
  112. +               }
  113. +           }
  114. +           catch (Exception e)
  115. +           {
  116. +           }
  117. +       }
  118. +       else if (command.startsWith("clan"))
  119. +       {
  120. +           StringTokenizer st = new StringTokenizer(command);
  121. +           st.nextToken();
  122. +           try
  123. +           {
  124. +               String type = st.nextToken();
  125. +               switch (type)
  126. +               {
  127. +                   case "ClanLevel":
  128. +                       Clanlvl(player);
  129. +                       break;
  130. +                   case "ClanRep_20k":
  131. +                       ClanRep(player);
  132. +                       break;
  133. +                   case "ClanSkills":
  134. +                       ClanSkill(player);
  135. +                       break;
  136. +               }
  137. +           }
  138. +           catch (Exception e)
  139. +           {
  140. +           }
  141. +       }
  142. +       else if (command.startsWith("siege"))
  143. +       {
  144. +          
  145. +           StringTokenizer st = new StringTokenizer(command);
  146. +           st.nextToken();
  147. +           try
  148. +           {
  149. +               String type = st.nextToken();
  150. +               int castleId = 0;
  151. +              
  152. +               if (type.startsWith("Gludio"))
  153. +                   castleId = 1;
  154. +               else if (type.startsWith("Dion"))
  155. +                   castleId = 2;
  156. +               else if (type.startsWith("Giran"))
  157. +                   castleId = 3;
  158. +               else if (type.startsWith("Oren"))
  159. +                   castleId = 4;
  160. +               else if (type.startsWith("Aden"))
  161. +                   castleId = 5;
  162. +               else if (type.startsWith("Innadril"))
  163. +                   castleId = 6;
  164. +               else if (type.startsWith("Goddard"))
  165. +                   castleId = 7;
  166. +               else if (type.startsWith("Rune"))
  167. +                   castleId = 8;
  168. +               else if (type.startsWith("Schuttgart"))
  169. +                   castleId = 9;
  170. +              
  171. +               Castle castle = CastleManager.getInstance().getCastleById(castleId);
  172. +              
  173. +               if (castle != null && castleId != 0)
  174. +                   player.sendPacket(new SiegeInfo(castle));
  175. +           }
  176. +           catch (Exception e)
  177. +           {
  178. +           }
  179. +       }
  180. +       else if (command.startsWith("color"))
  181. +       {
  182. +           StringTokenizer st = new StringTokenizer(command);
  183. +           st.nextToken();
  184. +           try
  185. +           {
  186. +               String type = st.nextToken();
  187. +               switch (type)
  188. +               {
  189. +                   case "Green":
  190. +                       GreenColor(player);
  191. +                       break;
  192. +                   case "Blue":
  193. +                       BlueColor(player);
  194. +                       break;
  195. +                   case "Purple":
  196. +                       PurpleColor(player);
  197. +                       break;
  198. +                   case "Yellow":
  199. +                       YellowColor(player);
  200. +                       break;
  201. +                   case "Gold":
  202. +                       GoldColor(player);
  203. +                       break;
  204. +               }
  205. +           }
  206. +           catch (Exception e)
  207. +           {
  208. +           }
  209. +       }
  210. +       else if (command.startsWith("vip"))
  211. +       {
  212. +           StringTokenizer st = new StringTokenizer(command);
  213. +           st.nextToken();
  214. +           try
  215. +           {
  216. +               String type = st.nextToken();
  217. +               switch (type)
  218. +               {
  219. +                   case "Vip7Days":
  220. +                       Vip7(player);
  221. +                       break;
  222. +                   case "Vip15Days":
  223. +                       Vip15(player);
  224. +                       break;
  225. +                   case "Vip30Days":
  226. +                       Vip30(player);
  227. +                       break;
  228. +               }
  229. +           }
  230. +           catch (Exception e)
  231. +           {
  232. +           }
  233. +       }
  234. +       else if (command.startsWith("active"))
  235. +       {
  236. +           StringTokenizer st = new StringTokenizer(command);
  237. +           st.nextToken();
  238. +           try
  239. +           {
  240. +               String type = st.nextToken();
  241. +               switch (type)
  242. +               {
  243. +                   case "Might":
  244. +                       augments(player, 1062079106, 3132, 10);
  245. +                       break;
  246. +                   case "Empower":
  247. +                       augments(player, 1061423766, 3133, 10);
  248. +                       break;
  249. +                   case "DuelMight":
  250. +                       augments(player, 1062406807, 3134, 10);
  251. +                       break;
  252. +                   case "Shield":
  253. +                       augments(player, 968884225, 3135, 10);
  254. +                       break;
  255. +                   case "MagicBarrier":
  256. +                       augments(player, 956760065, 3136, 10);
  257. +                       break;
  258. +                   case "WildMagic":
  259. +                       augments(player, 1067850844, 3142, 10);
  260. +                       break;
  261. +                   case "Focus":
  262. +                       augments(player, 1067523168, 3141, 10);
  263. +                       break;
  264. +                   case "BattleRoad":
  265. +                       augments(player, 968228865, 3125, 10);
  266. +                       break;
  267. +                   case "BlessedBody":
  268. +                       augments(player, 991625216, 3124, 10);
  269. +                       break;
  270. +                   case "Agility":
  271. +                       augments(player, 1060444351, 3139, 10);
  272. +                       break;
  273. +                   case "Heal":
  274. +                       augments(player, 1061361888, 3123, 10);
  275. +                       break;
  276. +                   case "HydroBlast":
  277. +                       augments(player, 1063590051, 3167, 10);
  278. +                       break;
  279. +                   case "AuraFlare":
  280. +                       augments(player, 1063455338, 3172, 10);
  281. +                       break;
  282. +                   case "Hurricane":
  283. +                       augments(player, 1064108032, 3168, 10);
  284. +                       break;
  285. +                   case "ReflectDamage":
  286. +                       augments(player, 1067588698, 3204, 3);
  287. +                       break;
  288. +                   case "Celestial":
  289. +                       augments(player, 974454785, 3158, 1);
  290. +                       break;
  291. +                   case "Stone":
  292. +                       augments(player, 1060640984, 3169, 10);
  293. +                       break;
  294. +                   case "HealEmpower":
  295. +                       augments(player, 1061230760, 3138, 10);
  296. +                       break;
  297. +                   case "ShadowFlare":
  298. +                       augments(player, 1063520931, 3171, 10);
  299. +                       break;
  300. +                   case "Prominence":
  301. +                       augments(player, 1063327898, 3165, 10);
  302. +                       break;
  303. +               }
  304. +           }
  305. +           catch (Exception e)
  306. +           {
  307. +               player.sendMessage("Usage : Bar>");
  308. +           }
  309. +       }
  310. +       else if (command.startsWith("passive"))
  311. +       {
  312. +           StringTokenizer st = new StringTokenizer(command);
  313. +           st.nextToken();
  314. +           try
  315. +           {
  316. +               String type = st.nextToken();
  317. +               switch (type)
  318. +               {
  319. +                   case "DuelMight":
  320. +                       augments(player, 1067260101, 3243, 10);
  321. +                       break;
  322. +                   case "Might":
  323. +                       augments(player, 1067125363, 3240, 10);
  324. +                       break;
  325. +                   case "Shield":
  326. +                       augments(player, 1067194549, 3244, 10);
  327. +                       break;
  328. +                   case "MagicBarrier":
  329. +                       augments(player, 962068481, 3245, 10);
  330. +                       break;
  331. +                   case "Empower":
  332. +                       augments(player, 1066994296, 3241, 10);
  333. +                       break;
  334. +                   case "Agility":
  335. +                       augments(player, 965279745, 3247, 10);
  336. +                       break;
  337. +                   case "Guidance":
  338. +                       augments(player, 1070537767, 3248, 10);
  339. +                       break;
  340. +                   case "Focus":
  341. +                       augments(player, 1070406728, 3249, 10);
  342. +                       break;
  343. +                   case "WildMagic":
  344. +                       augments(player, 1070599653, 3250, 10);
  345. +                       break;
  346. +                   case "ReflectDamage":
  347. +                       augments(player, 1070472227, 3259, 3);
  348. +                       break;
  349. +                   case "HealEmpower":
  350. +                       augments(player, 1066866909, 3246, 10);
  351. +                       break;
  352. +                   case "Prayer":
  353. +                       augments(player, 1066932422, 3238, 10);
  354. +                       break;
  355. +                  
  356. +               }
  357. +           }
  358. +           catch (Exception e)
  359. +           {
  360. +               player.sendMessage("Usage : Bar>");
  361. +           }
  362. +       }
  363. +       else if (command.startsWith("name"))
  364. +       {
  365. +           StringTokenizer st = new StringTokenizer(command);
  366. +           st.nextToken();
  367. +          
  368. +           String newName = "";
  369. +           try
  370. +           {
  371. +               if (st.hasMoreTokens())
  372. +               {
  373. +                   newName = st.nextToken();
  374. +               }
  375. +           }
  376. +           catch (Exception e)
  377. +           {
  378. +           }
  379. +           if (!conditionsname(newName, player))
  380. +               return;
  381. +           player.destroyItemByItemId("Consume", Config.DONATE_ITEM, Config.NAME_ITEM_COUNT, player, true);
  382. +           player.setName(newName);
  383. +           player.store();
  384. +           player.sendMessage("Your new character name is " + newName);
  385. +           player.broadcastUserInfo();
  386. +       }
  387. +       else if (command.startsWith("password"))
  388. +       {
  389. +           StringTokenizer st = new StringTokenizer(command);
  390. +           st.nextToken();
  391. +          
  392. +           String newPass = "";
  393. +           String repeatNewPass = "";
  394. +          
  395. +           try
  396. +           {
  397. +               if (st.hasMoreTokens())
  398. +               {
  399. +                   newPass = st.nextToken();
  400. +                   repeatNewPass = st.nextToken();
  401. +               }
  402. +           }
  403. +           catch (Exception e)
  404. +           {
  405. +               player.sendMessage("Please fill all the blanks before requesting for a password change.");
  406. +               return;
  407. +           }
  408. +          
  409. +           if (!conditions(newPass, repeatNewPass, player))
  410. +               return;
  411. +           changePassword(newPass, repeatNewPass, player);
  412. +       }
  413. +       else if (command.startsWith("partytp"))
  414. +       {
  415. +           StringTokenizer st = new StringTokenizer(command);
  416. +           st.nextToken();
  417. +          
  418. +           String val = "";
  419. +           try
  420. +           {
  421. +               if (st.hasMoreTokens())
  422. +               {
  423. +                   val = st.nextToken();
  424. +               }
  425. +               L2PcInstance activeChar = L2World.getInstance().getPlayer(val);
  426. +               teleportTo(val, player, activeChar);
  427. +           }
  428. +           catch (Exception e)
  429. +           {
  430. +               // Case of empty or missing coordinates
  431. +               player.sendMessage("Incorrect target");
  432. +           }
  433. +       }
  434. +       else if (command.startsWith("teleport"))
  435. +       {
  436. +           StringTokenizer st = new StringTokenizer(command);
  437. +           st.nextToken();
  438. +          
  439. +           String clan = "";
  440. +           try
  441. +           {
  442. +               if (st.hasMoreTokens())
  443. +               {
  444. +                   clan = st.nextToken();
  445. +               }
  446. +               L2PcInstance activeChar = L2World.getInstance().getPlayer(clan);
  447. +               teleportToClan(clan, player, activeChar);
  448. +           }
  449. +           catch (Exception e)
  450. +           {
  451. +               // Case if the player is not in the same clan.
  452. +               player.sendMessage("Incorrect target");
  453. +           }
  454. +       }
  455. +       else if (command.startsWith("enchant"))
  456. +       {
  457. +           StringTokenizer st = new StringTokenizer(command);
  458. +           st.nextToken();
  459. +           try
  460. +           {
  461. +               String type = st.nextToken();
  462. +               switch (type)
  463. +               {
  464. +                   case "Weapon":
  465. +                       Enchant(player, Config.ENCHANT_MAX_VALUE, Inventory.PAPERDOLL_RHAND);
  466. +                       break;
  467. +                   case "Shield":
  468. +                       Enchant(player, Config.ENCHANT_MAX_VALUE, Inventory.PAPERDOLL_LHAND);
  469. +                       break;
  470. +                   case "R-Earring":
  471. +                       Enchant(player, Config.ENCHANT_MAX_VALUE, Inventory.PAPERDOLL_REAR);
  472. +                       break;
  473. +                   case "L-Earring":
  474. +                       Enchant(player, Config.ENCHANT_MAX_VALUE, Inventory.PAPERDOLL_LEAR);
  475. +                       break;
  476. +                   case "R-Ring":
  477. +                       Enchant(player, Config.ENCHANT_MAX_VALUE, Inventory.PAPERDOLL_RFINGER);
  478. +                       break;
  479. +                   case "L-Ring":
  480. +                       Enchant(player, Config.ENCHANT_MAX_VALUE, Inventory.PAPERDOLL_LFINGER);
  481. +                       break;
  482. +                   case "Necklace":
  483. +                       Enchant(player, Config.ENCHANT_MAX_VALUE, Inventory.PAPERDOLL_NECK);
  484. +                       break;
  485. +                   case "Helmet":
  486. +                       Enchant(player, Config.ENCHANT_MAX_VALUE, Inventory.PAPERDOLL_HEAD);
  487. +                       break;
  488. +                   case "Boots":
  489. +                       Enchant(player, Config.ENCHANT_MAX_VALUE, Inventory.PAPERDOLL_FEET);
  490. +                       break;
  491. +                   case "Gloves":
  492. +                       Enchant(player, Config.ENCHANT_MAX_VALUE, Inventory.PAPERDOLL_GLOVES);
  493. +                       break;
  494. +                   case "Chest":
  495. +                       Enchant(player, Config.ENCHANT_MAX_VALUE, Inventory.PAPERDOLL_CHEST);
  496. +                       break;
  497. +                   case "Legs":
  498. +                       Enchant(player, Config.ENCHANT_MAX_VALUE, Inventory.PAPERDOLL_LEGS);
  499. +                       break;
  500. +                   case "Tattoo":
  501. +                       Enchant(player, Config.ENCHANT_MAX_VALUE, Inventory.PAPERDOLL_UNDER);
  502. +                       break;
  503. +               }
  504. +           }
  505. +          
  506. +           catch (Exception e)
  507. +           {
  508. +           }
  509. +       }
  510. +       else if (command.startsWith("Chat"))
  511. +           showChatWindow(player, command);
  512. +   }
  513. +  
  514. +   @Override
  515. +   public void showChatWindow(L2PcInstance player, String command)
  516. +   {
  517. +       StringTokenizer st = new StringTokenizer(command);
  518. +       st.nextToken();
  519. +       int page = Integer.parseInt(st.nextToken());
  520. +       String filename = "data/html/mods/donateNpc/" + page + ".htm";
  521. +       filename = "data/html/mods/donateNpc/50091-" + page + ".htm";
  522. +      
  523. +       final NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
  524. +       html.setFile(filename);
  525. +       html.replace("%objectId%", getObjectId());
  526. +       html.replace("%npcname%", getName());
  527. +       player.sendPacket(html);
  528. +   }
  529. +  
  530. +   public void Nobless(L2PcInstance player)
  531. +   {
  532. +       if (player.isNoble())
  533. +       {
  534. +           player.sendMessage("You Are Already A Noblesse!.");
  535. +           return;
  536. +       }
  537. +       if (player.getInventory().getInventoryItemCount(Config.DONATE_ITEM, -1) < Config.NOBL_ITEM_COUNT)
  538. +       {
  539. +           player.sendMessage("You do not have enough Donate Coins.");
  540. +           return;
  541. +       }
  542. +       player.destroyItemByItemId("Consume", Config.DONATE_ITEM, Config.NOBL_ITEM_COUNT, player, true);
  543. +       player.setNoble(true, true);
  544. +       player.sendMessage("You Are Now a Noble,You Are Granted With Noblesse Status , And Noblesse Skills.");
  545. +       player.broadcastUserInfo();
  546. +      
  547. +   }
  548. +  
  549. +   public void Vip7(L2PcInstance player)
  550. +   {
  551. +       if (player.isVipStatus())
  552. +       {
  553. +           player.sendMessage("You are Already A Vip");
  554. +           return;
  555. +       }
  556. +       if (player.getInventory().getInventoryItemCount(Config.DONATE_ITEM, -1) < Config.VIP7_ITEM_COUNT)
  557. +       {
  558. +           player.sendMessage("You do not have enough Donate Coins.");
  559. +           return;
  560. +       }
  561. +       player.destroyItemByItemId("Consume", Config.DONATE_ITEM, Config.VIP7_ITEM_COUNT, player, true);
  562. +       AdminVipStatus.AddVipStatus(player, player, 7);
  563. +       player.sendMessage("You engage VIP Status for 7 Days.");
  564. +      
  565. +   }
  566. +  
  567. +   public void Vip15(L2PcInstance player)
  568. +   {
  569. +       if (player.isVipStatus())
  570. +       {
  571. +           player.sendMessage("You are Already A Vip");
  572. +           return;
  573. +       }
  574. +      
  575. +       if (player.getInventory().getInventoryItemCount(Config.DONATE_ITEM, -1) < Config.VIP15_ITEM_COUNT)
  576. +       {
  577. +           player.sendMessage("You do not have enough Donate Coins.");
  578. +           return;
  579. +       }
  580. +       player.destroyItemByItemId("Consume", Config.DONATE_ITEM, Config.VIP15_ITEM_COUNT, player, true);
  581. +       AdminVipStatus.AddVipStatus(player, player, 15);
  582. +       player.sendMessage("You engage VIP Status for 15 Days.");
  583. +      
  584. +   }
  585. +  
  586. +   public void Vip30(L2PcInstance player)
  587. +   {
  588. +       if (player.isVipStatus())
  589. +       {
  590. +           player.sendMessage("Your character has already Vip Status.");
  591. +           return;
  592. +       }
  593. +      
  594. +       if (player.getInventory().getInventoryItemCount(Config.DONATE_ITEM, -1) < Config.VIP30_ITEM_COUNT)
  595. +       {
  596. +           player.sendMessage("You do not have enough Donate Coins.");
  597. +           return;
  598. +       }
  599. +       player.destroyItemByItemId("Consume", Config.DONATE_ITEM, Config.VIP30_ITEM_COUNT, player, true);
  600. +       AdminVipStatus.AddVipStatus(player, player, 30);
  601. +       player.sendMessage("You engage VIP Status for 30 Days.");
  602. +      
  603. +   }
  604. +  
  605. +   public void GreenColor(L2PcInstance player)
  606. +   {
  607. +       if (player.getInventory().getInventoryItemCount(Config.DONATE_ITEM, -1) < Config.COLOR_ITEM_COUNT)
  608. +       {
  609. +           player.sendMessage("You do not have enough Donate Coins.");
  610. +           return;
  611. +       }
  612. +       player.destroyItemByItemId("Consume", Config.DONATE_ITEM, Config.COLOR_ITEM_COUNT, player, true);
  613. +       player.setColor(1);
  614. +       player.getAppearance().setNameColor(0x009900);
  615. +       player.broadcastUserInfo();
  616. +       player.sendMessage("Your color name has changed!");
  617. +   }
  618. +  
  619. +   public void BlueColor(L2PcInstance player)
  620. +   {
  621. +       if (player.getInventory().getInventoryItemCount(Config.DONATE_ITEM, -1) < Config.COLOR_ITEM_COUNT)
  622. +       {
  623. +           player.sendMessage("You do not have enough Donate Coins.");
  624. +           return;
  625. +       }
  626. +       player.destroyItemByItemId("Consume", Config.DONATE_ITEM, Config.COLOR_ITEM_COUNT, player, true);
  627. +       player.setColor(2);
  628. +       player.getAppearance().setNameColor(0xff7f00);
  629. +       player.broadcastUserInfo();
  630. +       player.sendMessage("Your color name has changed!");
  631. +   }
  632. +  
  633. +   public void PurpleColor(L2PcInstance player)
  634. +   {
  635. +       if (player.getInventory().getInventoryItemCount(Config.DONATE_ITEM, -1) < Config.COLOR_ITEM_COUNT)
  636. +       {
  637. +           player.sendMessage("You do not have enough Donate Coins.");
  638. +           return;
  639. +       }
  640. +       player.destroyItemByItemId("Consume", Config.DONATE_ITEM, Config.COLOR_ITEM_COUNT, player, true);
  641. +       player.setColor(3);
  642. +       player.getAppearance().setNameColor(0xff00ff);
  643. +       player.broadcastUserInfo();
  644. +       player.sendMessage("Your color name has changed!");
  645. +   }
  646. +  
  647. +   public void YellowColor(L2PcInstance player)
  648. +   {
  649. +       if (player.getInventory().getInventoryItemCount(Config.DONATE_ITEM, -1) < Config.COLOR_ITEM_COUNT)
  650. +       {
  651. +           player.sendMessage("You do not have enough Donate Coins.");
  652. +           return;
  653. +       }
  654. +       player.destroyItemByItemId("Consume", Config.DONATE_ITEM, Config.COLOR_ITEM_COUNT, player, true);
  655. +       player.setColor(4);
  656. +       player.getAppearance().setNameColor(0x00ffff);
  657. +       player.broadcastUserInfo();
  658. +       player.sendMessage("Your color name has changed!");
  659. +   }
  660. +  
  661. +   public void GoldColor(L2PcInstance player)
  662. +   {
  663. +       if (player.getInventory().getInventoryItemCount(Config.DONATE_ITEM, -1) < Config.COLOR_ITEM_COUNT)
  664. +       {
  665. +           player.sendMessage("You do not have enough Donate Coins.");
  666. +           return;
  667. +       }
  668. +       player.destroyItemByItemId("Consume", Config.DONATE_ITEM, Config.COLOR_ITEM_COUNT, player, true);
  669. +       player.setColor(5);
  670. +       player.getAppearance().setNameColor(0x0099ff);
  671. +       player.broadcastUserInfo();
  672. +       player.sendMessage("Your color name has changed!");
  673. +   }
  674. +  
  675. +   public void Sex(L2PcInstance player)
  676. +   {
  677. +       if (player.getInventory().getInventoryItemCount(Config.DONATE_ITEM, -1) < Config.SEX_ITEM_COUNT)
  678. +       {
  679. +           player.sendMessage("You do not have enough Donate Coins.");
  680. +           return;
  681. +       }
  682. +       player.getAppearance().setSex(player.getAppearance().getSex() == Sex.MALE ? Sex.FEMALE : Sex.MALE);
  683. +       player.destroyItemByItemId("Consume", Config.DONATE_ITEM, Config.SEX_ITEM_COUNT, player, true);
  684. +       player.sendMessage("Your gender has been changed,You will Be Disconected in 3 Seconds!");
  685. +       player.broadcastUserInfo();
  686. +       player.decayMe();
  687. +       player.spawnMe();
  688. +       ThreadPool.schedule(() -> player.logout(false), 3000);
  689. +   }
  690. +  
  691. +   public void Rec(L2PcInstance player)
  692. +   {
  693. +       if (player.getInventory().getInventoryItemCount(Config.DONATE_ITEM, -1) < Config.REC_ITEM_COUNT)
  694. +       {
  695. +           player.sendMessage("You do not have enough Donate Coins.");
  696. +           return;
  697. +       }
  698. +       if (player.getRecomHave() == 255)
  699. +       {
  700. +           player.sendMessage("You already have full recommends.");
  701. +           return;
  702. +       }
  703. +       player.destroyItemByItemId("Consume", Config.DONATE_ITEM, Config.REC_ITEM_COUNT, player, true);
  704. +       player.setRecomHave(255);
  705. +       player.getLastRecomUpdate();
  706. +       player.broadcastUserInfo();
  707. +   }
  708. +  
  709. +   public void CleanPk(L2PcInstance player)
  710. +   {
  711. +       if (player.getInventory().getInventoryItemCount(Config.DONATE_ITEM, -1) < Config.PK_ITEM_COUNT)
  712. +       {
  713. +           player.sendMessage("You do not have enough Donate Coins.");
  714. +           return;
  715. +       }
  716. +       if (player.getPkKills() < 50)
  717. +       {
  718. +           player.sendMessage("You do not have enough Pk kills for clean.");
  719. +           return;
  720. +       }
  721. +       player.destroyItemByItemId("Consume", Config.DONATE_ITEM, Config.PK_ITEM_COUNT, player, true);
  722. +       player.setPkKills(player.getPkKills() - Config.PK_CLEAN);
  723. +       player.sendMessage("You have successfully clean " + Config.PK_CLEAN + " pks!");
  724. +       player.broadcastUserInfo();
  725. +   }
  726. +  
  727. +   public void ClanRep(L2PcInstance player)
  728. +   {
  729. +       if (player.getInventory().getInventoryItemCount(Config.DONATE_ITEM, -1) < Config.CLAN_REP_ITEM_COUNT)
  730. +       {
  731. +           player.sendMessage("You do not have enough Donate Coins.");
  732. +           return;
  733. +       }
  734. +       if (player.getClan() == null)
  735. +       {
  736. +           player.sendPacket(SystemMessageId.YOU_ARE_NOT_A_CLAN_MEMBER);
  737. +           return;
  738. +       }
  739. +       if (!player.isClanLeader())
  740. +       {
  741. +           player.sendPacket(SystemMessageId.NOT_AUTHORIZED_TO_BESTOW_RIGHTS);
  742. +           return;
  743. +       }
  744. +       player.destroyItemByItemId("Consume", Config.DONATE_ITEM, Config.CLAN_REP_ITEM_COUNT, player, true);
  745. +       player.getClan().addReputationScore(Config.CLAN_REPS);
  746. +       player.getClan().broadcastClanStatus();
  747. +       player.sendMessage("Your clan reputation score has been increased.");
  748. +   }
  749. +  
  750. +   public void Clanlvl(L2PcInstance player)
  751. +   {
  752. +       if (player.getInventory().getInventoryItemCount(Config.DONATE_ITEM, -1) < Config.CLAN_ITEM_COUNT)
  753. +       {
  754. +           player.sendMessage("You do not have enough Donate Coins.");
  755. +           return;
  756. +       }
  757. +       else if (player.getClan() == null)
  758. +       {
  759. +           player.sendPacket(SystemMessageId.YOU_ARE_NOT_A_CLAN_MEMBER);
  760. +           return;
  761. +       }
  762. +       if (!player.isClanLeader())
  763. +       {
  764. +           player.sendPacket(SystemMessageId.NOT_AUTHORIZED_TO_BESTOW_RIGHTS);
  765. +           return;
  766. +       }
  767. +       if (player.getClan().getLevel() == 8)
  768. +       {
  769. +           player.sendMessage("Your clan is already level 8.");
  770. +           return;
  771. +       }
  772. +       player.getClan().changeLevel(player.getClan().getLevel() + 1);
  773. +       player.getClan().broadcastClanStatus();
  774. +       player.broadcastPacket(new MagicSkillUse(player, player, 5103, 1, 1000, 0));
  775. +       player.destroyItemByItemId("Consume", Config.DONATE_ITEM, Config.CLAN_ITEM_COUNT, player, true);
  776. +   }
  777. +  
  778. +   public void augments(L2PcInstance player, int attributes, int idaugment, int levelaugment)
  779. +   {
  780. +       ItemInstance rhand = player.getInventory().getPaperdollItem(Inventory.PAPERDOLL_RHAND);
  781. +      
  782. +       if (rhand == null)
  783. +       {
  784. +           player.sendMessage(player.getName() + " have to equip a weapon.");
  785. +           return;
  786. +       }
  787. +       else if (rhand.getItem().getCrystalType().getId() == 0 || rhand.getItem().getCrystalType().getId() == 1 || rhand.getItem().getCrystalType().getId() == 2)
  788. +       {
  789. +           player.sendMessage("You can't augment under " + rhand.getItem().getCrystalType() + " Grade Weapon!");
  790. +           return;
  791. +       }
  792. +       else if (rhand.isHeroItem())
  793. +       {
  794. +           player.sendMessage("You Cannot be add Augment On " + rhand.getItemName() + " !");
  795. +           return;
  796. +       }
  797. +       else if (player.getInventory().getInventoryItemCount(Config.DONATE_ITEM, -1) < Config.AUGM_ITEM_COUNT)
  798. +       {
  799. +           player.sendMessage("You do not have enough Donate Coins.");
  800. +           return;
  801. +       }
  802. +       if (!rhand.isAugmented())
  803. +       {
  804. +           player.sendMessage("Successfully To Add " + SkillTable.getInstance().getInfo(idaugment, levelaugment).getName() + ".");
  805. +           augmentweapondatabase(player, attributes, idaugment, levelaugment);
  806. +       }
  807. +       else
  808. +       {
  809. +           player.sendMessage("You Have Augment on weapon!");
  810. +           return;
  811. +       }
  812. +   }
  813. +  
  814. +   public void augmentweapondatabase(L2PcInstance player, int attributes, int id, int level)
  815. +   {
  816. +       ItemInstance item = player.getInventory().getPaperdollItem(Inventory.PAPERDOLL_RHAND);
  817. +       L2Augmentation augmentation = new L2Augmentation(attributes, id, level);
  818. +       augmentation.applyBonus(player);
  819. +       player.destroyItemByItemId("Consume", Config.DONATE_ITEM, Config.AUGM_ITEM_COUNT, player, true);
  820. +       item.setAugmentation(augmentation);
  821. +       player.disarmWeapons();
  822. +      
  823. +       try (Connection con = L2DatabaseFactory.getInstance().getConnection())
  824. +       {
  825. +           PreparedStatement statement = con.prepareStatement("REPLACE INTO augmentations VALUES(?,?,?,?)");
  826. +           statement.setInt(1, item.getObjectId());
  827. +           statement.setInt(2, attributes);
  828. +           statement.setInt(3, id);
  829. +           statement.setInt(4, level);
  830. +           InventoryUpdate iu = new InventoryUpdate();
  831. +           player.sendPacket(iu);
  832. +           statement.execute();
  833. +           statement.close();
  834. +       }
  835. +       catch (SQLException e)
  836. +       {
  837. +           System.out.println(e);
  838. +       }
  839. +   }
  840. +  
  841. +   /**
  842. +    * @param player
  843. +    */
  844. +   public void removeAugmentation(L2PcInstance player)
  845. +   {
  846. +       ItemInstance item = player.getInventory().getPaperdollItem(Inventory.PAPERDOLL_RHAND);
  847. +      
  848. +       if (item == null)
  849. +       {
  850. +           player.sendMessage("Equipped first a weapon!");
  851. +           return;
  852. +       }
  853. +      
  854. +       if (!item.isAugmented())
  855. +       {
  856. +           player.sendMessage("The weapon is not augmented.");
  857. +           return;
  858. +       }
  859. +      
  860. +       item.getAugmentation().removeBonus(player);
  861. +       item.removeAugmentation();
  862. +       {
  863. +           player.sendMessage("Your augmented has been removed!");
  864. +           // Unequip the weapon
  865. +           player.disarmWeapons();
  866. +       }
  867. +   }
  868. +  
  869. +   public void ClanSkill(L2PcInstance player)
  870. +   {
  871. +      
  872. +       if (!player.isClanLeader())
  873. +       {
  874. +           player.sendMessage("Only a clan leader can add clan skills.!");
  875. +           return;
  876. +       }
  877. +       if (player.getInventory().getInventoryItemCount(Config.DONATE_ITEM, -1) < Config.CLAN_SKILL_ITEM_COUNT)
  878. +       {
  879. +           player.sendMessage("You do not have enough Donate Coins.");
  880. +           return;
  881. +       }
  882. +       player.getClan().addNewSkill(SkillTable.getInstance().getInfo(370, 3));
  883. +       player.getClan().addNewSkill(SkillTable.getInstance().getInfo(371, 3));
  884. +       player.getClan().addNewSkill(SkillTable.getInstance().getInfo(372, 3));
  885. +       player.getClan().addNewSkill(SkillTable.getInstance().getInfo(373, 3));
  886. +       player.getClan().addNewSkill(SkillTable.getInstance().getInfo(374, 3));
  887. +       player.getClan().addNewSkill(SkillTable.getInstance().getInfo(375, 3));
  888. +       player.getClan().addNewSkill(SkillTable.getInstance().getInfo(376, 3));
  889. +       player.getClan().addNewSkill(SkillTable.getInstance().getInfo(377, 3));
  890. +       player.getClan().addNewSkill(SkillTable.getInstance().getInfo(378, 3));
  891. +       player.getClan().addNewSkill(SkillTable.getInstance().getInfo(379, 3));
  892. +       player.getClan().addNewSkill(SkillTable.getInstance().getInfo(380, 3));
  893. +       player.getClan().addNewSkill(SkillTable.getInstance().getInfo(381, 3));
  894. +       player.getClan().addNewSkill(SkillTable.getInstance().getInfo(382, 3));
  895. +       player.getClan().addNewSkill(SkillTable.getInstance().getInfo(383, 3));
  896. +       player.getClan().addNewSkill(SkillTable.getInstance().getInfo(384, 3));
  897. +       player.getClan().addNewSkill(SkillTable.getInstance().getInfo(385, 3));
  898. +       player.getClan().addNewSkill(SkillTable.getInstance().getInfo(386, 3));
  899. +       player.getClan().addNewSkill(SkillTable.getInstance().getInfo(387, 3));
  900. +       player.getClan().addNewSkill(SkillTable.getInstance().getInfo(388, 3));
  901. +       player.getClan().addNewSkill(SkillTable.getInstance().getInfo(389, 3));
  902. +       player.getClan().addNewSkill(SkillTable.getInstance().getInfo(390, 3));
  903. +       player.getClan().addNewSkill(SkillTable.getInstance().getInfo(391, 1));
  904. +       player.destroyItemByItemId("Consume", Config.DONATE_ITEM, Config.CLAN_SKILL_ITEM_COUNT, player, true);
  905. +   }
  906. +  
  907. +   public void Enchant(L2PcInstance player, int enchant, int type)
  908. +   {
  909. +       ItemInstance item = player.getInventory().getPaperdollItem(type);
  910. +      
  911. +       if (item == null)
  912. +       {
  913. +           player.sendMessage("That item doesn't exist in your inventory.");
  914. +           return;
  915. +       }
  916. +       else if (item.getEnchantLevel() == Config.ENCHANT_MAX_VALUE || item.getEnchantLevel() == Config.ENCHANT_MAX_VALUE)
  917. +       {
  918. +           player.sendMessage("Your " + item.getItemName() + " is already on maximun enchant!");
  919. +           return;
  920. +       }
  921. +       else if (item.getItem().getCrystalType().getId() == 0)
  922. +       {
  923. +           player.sendMessage("You can't Enchant under " + item.getItem().getCrystalType() + " Grade Weapon!");
  924. +           return;
  925. +       }
  926. +       else if (item.isHeroItem())
  927. +       {
  928. +           player.sendMessage("You Cannot be Enchant On " + item.getItemName() + " !");
  929. +           return;
  930. +       }
  931. +       else if (player.getInventory().getInventoryItemCount(Config.DONATE_ITEM, -1) < Config.ENCHANT_ITEM_COUNT)
  932. +       {
  933. +           player.sendMessage("You do not have enough Donate Coins.");
  934. +           return;
  935. +       }
  936. +       if (item.isEquipped())
  937. +       {
  938. +           player.destroyItemByItemId("Consume", Config.DONATE_ITEM, Config.ENCHANT_ITEM_COUNT, player, true);
  939. +           item.setEnchantLevel(enchant);
  940. +           item.updateDatabase();
  941. +           player.sendPacket(new ItemList(player, false));
  942. +           player.broadcastUserInfo();
  943. +           player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.S1_S2_SUCCESSFULLY_ENCHANTED).addNumber(item.getEnchantLevel()).addItemName(item.getItemId()));
  944. +       }
  945. +   }
  946. +  
  947. +   public static boolean conditionsclass(L2PcInstance player)
  948. +   {
  949. +       if (player.isSubClassActive())
  950. +       {
  951. +           player.sendMessage("You cannot change your Main Class while you're with Sub Class.");
  952. +           return false;
  953. +       }
  954. +       else if (OlympiadManager.getInstance().isRegisteredInComp(player))
  955. +       {
  956. +           player.sendMessage("You cannot change your Main Class while you have been registered for olympiad match.");
  957. +           return false;
  958. +       }
  959. +       else if (player.getInventory().getInventoryItemCount(Config.DONATE_ITEM, -1) < Config.CLASS_ITEM_COUNT)
  960. +       {
  961. +           player.sendMessage("You do not have enough Donate Coins.");
  962. +           return false;
  963. +       }
  964. +       return true;
  965. +   }
  966. +  
  967. +   public static boolean conditionsname(String newName, L2PcInstance player)
  968. +   {
  969. +       if (!newName.matches("^[a-zA-Z0-9]+$"))
  970. +       {
  971. +           player.sendMessage("Incorrect name. Please try again.");
  972. +           return false;
  973. +       }
  974. +       else if (newName.equals(player.getName()))
  975. +       {
  976. +           player.sendMessage("Please, choose a different name.");
  977. +           return false;
  978. +       }
  979. +       else if (CharNameTable.getInstance().getPlayerObjectId(newName) > 0)
  980. +       {
  981. +           player.sendMessage("The name " + newName + " already exists.");
  982. +           return false;
  983. +       }
  984. +       else if (player.getInventory().getInventoryItemCount(Config.DONATE_ITEM, -1) < Config.NAME_ITEM_COUNT)
  985. +       {
  986. +           player.sendMessage("You do not have enough Donate Coins.");
  987. +           return false;
  988. +       }
  989. +       return true;
  990. +   }
  991. +  
  992. +   public static boolean conditions(String newPass, String repeatNewPass, L2PcInstance player)
  993. +   {
  994. +       if (newPass.length() < 3)
  995. +       {
  996. +           player.sendMessage("The new password is too short!");
  997. +           return false;
  998. +       }
  999. +       else if (newPass.length() > 45)
  1000. +       {
  1001. +           player.sendMessage("The new password is too long!");
  1002. +           return false;
  1003. +       }
  1004. +       else if (!newPass.equals(repeatNewPass))
  1005. +       {
  1006. +           player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.PASSWORD_ENTERED_INCORRECT2));
  1007. +           return false;
  1008. +       }
  1009. +       else if (player.getInventory().getInventoryItemCount(Config.DONATE_ITEM, -1) < Config.PASSWORD_ITEM_COUNT)
  1010. +       {
  1011. +           player.sendMessage("You do not have enough Donate Coins.");
  1012. +           return false;
  1013. +       }
  1014. +       return true;
  1015. +   }
  1016. +  
  1017. +   public void changePassword(String newPass, String repeatNewPass, L2PcInstance activeChar)
  1018. +   {
  1019. +       try (Connection con = L2DatabaseFactory.getInstance().getConnection(); PreparedStatement ps = con.prepareStatement("UPDATE accounts SET password=? WHERE login=?"))
  1020. +       {
  1021. +           byte[] newPassword = MessageDigest.getInstance("SHA").digest(newPass.getBytes("UTF-8"));
  1022. +          
  1023. +           ps.setString(1, Base64.getEncoder().encodeToString(newPassword));
  1024. +           ps.setString(2, activeChar.getAccountName());
  1025. +           ps.executeUpdate();
  1026. +          
  1027. +           activeChar.destroyItemByItemId("Consume", Config.DONATE_ITEM, Config.PASSWORD_ITEM_COUNT, activeChar, true);
  1028. +           activeChar.sendMessage("Congratulations! Your password has been changed. You will now be disconnected for security reasons. Please login again.");
  1029. +           ThreadPool.schedule(() -> activeChar.logout(false), 3000);
  1030. +       }
  1031. +       catch (Exception e)
  1032. +       {
  1033. +          
  1034. +       }
  1035. +   }
  1036. +  
  1037. +   public void teleportTo(String val, L2PcInstance activeChar, L2PcInstance target)
  1038. +   {
  1039. +       if (target.getObjectId() == activeChar.getObjectId())
  1040. +           activeChar.sendPacket(SystemMessageId.CANNOT_USE_ON_YOURSELF);
  1041. +      
  1042. +       // Check if the attacker is not in the same party
  1043. +       if (!activeChar.getParty().getPartyMembers().contains(target))
  1044. +       {
  1045. +           activeChar.sendMessage("Your target Isn't in your party.");
  1046. +           return;
  1047. +       }
  1048. +       // Simple checks to avoid exploits
  1049. +       if (target.isInJail() || target.isInOlympiadMode() || target.isInDuel() || target.isFestivalParticipant() || (target.isInParty() && target.getParty().isInDimensionalRift()) || target.inObserverMode())
  1050. +       {
  1051. +           activeChar.sendMessage("Due to the current friend's status, the teleportation failed.");
  1052. +           return;
  1053. +       }
  1054. +       if (target.getClan() != null && CastleManager.getInstance().getCastleByOwner(target.getClan()) != null && CastleManager.getInstance().getCastleByOwner(target.getClan()).getSiege().isInProgress())
  1055. +       {
  1056. +           activeChar.sendMessage("As your friend is in siege, you can't go to him/her.");
  1057. +           return;
  1058. +       }
  1059. +       if (activeChar.getPvpFlag() > 0 || activeChar.getKarma() > 0)
  1060. +       {
  1061. +           activeChar.sendMessage("Go away! Flag or Pk player can not be teleported.");
  1062. +           return;
  1063. +       }
  1064. +       int x = target.getX();
  1065. +       int y = target.getY();
  1066. +       int z = target.getZ();
  1067. +      
  1068. +       activeChar.getAI().setIntention(CtrlIntention.IDLE);
  1069. +       activeChar.doCast(SkillTable.getInstance().getInfo(2100, 1));
  1070. +       activeChar.sendPacket(new ExShowScreenMessage("You will be teleported to " + target.getName() + " in 5 Seconds!", 5000, 2, true));
  1071. +       ThreadPool.schedule(() -> activeChar.teleToLocation(x, y, z, 0), 5000);
  1072. +       activeChar.sendMessage("You have teleported to " + target.getName() + ".");
  1073. +   }
  1074. +  
  1075. +   public void teleportToClan(String clan, L2PcInstance activeChar, L2PcInstance target)
  1076. +   {
  1077. +       if (target.getObjectId() == activeChar.getObjectId())
  1078. +           activeChar.sendPacket(SystemMessageId.CANNOT_USE_ON_YOURSELF);
  1079. +      
  1080. +       // Check if the player is not in the same clan.
  1081. +       if (!activeChar.getClan().isMember(target.getObjectId()))
  1082. +           return;
  1083. +      
  1084. +       // Simple checks to avoid exploits
  1085. +       if (target.isInJail() || target.isInOlympiadMode() || target.isInDuel() || target.isFestivalParticipant() || (target.isInParty() && target.getParty().isInDimensionalRift()) || target.inObserverMode())
  1086. +       {
  1087. +           activeChar.sendMessage("Due to the current clan member's status, the teleportation failed.");
  1088. +           return;
  1089. +       }
  1090. +       if (target.getClan() != null && CastleManager.getInstance().getCastleByOwner(target.getClan()) != null && CastleManager.getInstance().getCastleByOwner(target.getClan()).getSiege().isInProgress())
  1091. +       {
  1092. +           activeChar.sendMessage("As your clan member is in siege, you can't go to him/her.");
  1093. +           return;
  1094. +       }
  1095. +       if (activeChar.getPvpFlag() > 0 || activeChar.getKarma() > 0)
  1096. +       {
  1097. +           activeChar.sendMessage("Go away! Flag or Pk player can not be teleported.");
  1098. +           return;
  1099. +       }
  1100. +       int x = target.getX();
  1101. +       int y = target.getY();
  1102. +       int z = target.getZ();
  1103. +      
  1104. +       activeChar.getAI().setIntention(CtrlIntention.IDLE);
  1105. +       activeChar.doCast(SkillTable.getInstance().getInfo(2100, 1));
  1106. +       activeChar.sendPacket(new ExShowScreenMessage("You will be teleported to " + target.getName() + " in 5 Seconds!", 5000, 2, true));
  1107. +       ThreadPool.schedule(() -> activeChar.teleToLocation(x, y, z, 0), 5000);
  1108. +       activeChar.sendMessage("You have teleported to " + target.getName() + ".");
  1109. +   }
  1110. +  
  1111. +   public static void Classes(String command, final L2PcInstance player)
  1112. +   {
  1113. +       if (!conditionsclass(player))
  1114. +           return;
  1115. +      
  1116. +       player.destroyItemByItemId("Consume", Config.DONATE_ITEM, Config.CLASS_ITEM_COUNT, player, true);
  1117. +       for (final L2Skill skill : player.getSkills().values())
  1118. +           player.removeSkill(skill);
  1119. +      
  1120. +       String classes = command.substring(command.indexOf("_") + 1);
  1121. +       switch (classes)
  1122. +       {
  1123. +           case "duelist":
  1124. +               player.setClassId(88);
  1125. +               player.setBaseClass(88);
  1126. +               break;
  1127. +           case "dreadnought":
  1128. +               player.setClassId(89);
  1129. +               player.setBaseClass(89);
  1130. +               break;
  1131. +           case "phoenix":
  1132. +               player.setClassId(90);
  1133. +               player.setBaseClass(90);
  1134. +               break;
  1135. +           case "hell":
  1136. +               player.setClassId(91);
  1137. +               player.setBaseClass(91);
  1138. +               break;
  1139. +           case "sagittarius":
  1140. +               player.setClassId(92);
  1141. +               player.setBaseClass(92);
  1142. +               break;
  1143. +           case "adventurer":
  1144. +               player.setClassId(93);
  1145. +               player.setBaseClass(93);
  1146. +               break;
  1147. +           case "archmage":
  1148. +               player.setClassId(94);
  1149. +               player.setBaseClass(94);
  1150. +               break;
  1151. +           case "soultaker":
  1152. +               player.setClassId(95);
  1153. +               player.setBaseClass(95);
  1154. +               break;
  1155. +           case "arcana":
  1156. +               player.setClassId(96);
  1157. +               player.setBaseClass(96);
  1158. +               break;
  1159. +           case "cardinal":
  1160. +               player.setClassId(97);
  1161. +               player.setBaseClass(97);
  1162. +               break;
  1163. +           case "hierophant":
  1164. +               player.setClassId(98);
  1165. +               player.setBaseClass(98);
  1166. +               break;
  1167. +           case "evas":
  1168. +               player.setClassId(99);
  1169. +               player.setBaseClass(99);
  1170. +               break;
  1171. +           case "muse":
  1172. +               player.setClassId(100);
  1173. +               player.setBaseClass(100);
  1174. +               break;
  1175. +           case "windrider":
  1176. +               player.setClassId(101);
  1177. +               player.setBaseClass(101);
  1178. +               break;
  1179. +           case "sentinel":
  1180. +               player.setClassId(102);
  1181. +               player.setBaseClass(102);
  1182. +               break;
  1183. +           case "mystic":
  1184. +               player.setClassId(103);
  1185. +               player.setBaseClass(103);
  1186. +               break;
  1187. +           case "elemental":
  1188. +               player.setClassId(104);
  1189. +               player.setBaseClass(104);
  1190. +               break;
  1191. +           case "saint":
  1192. +               player.setClassId(105);
  1193. +               player.setBaseClass(105);
  1194. +               break;
  1195. +           case "templar":
  1196. +               player.setClassId(106);
  1197. +               player.setBaseClass(106);
  1198. +               break;
  1199. +           case "dancer":
  1200. +               player.setClassId(107);
  1201. +               player.setBaseClass(107);
  1202. +               break;
  1203. +           case "hunter":
  1204. +               player.setClassId(108);
  1205. +               player.setBaseClass(108);
  1206. +               break;
  1207. +           case "gsentinel":
  1208. +               player.setClassId(109);
  1209. +               player.setBaseClass(109);
  1210. +               break;
  1211. +           case "screamer":
  1212. +               player.setClassId(110);
  1213. +               player.setBaseClass(110);
  1214. +               break;
  1215. +           case "master":
  1216. +               player.setClassId(111);
  1217. +               player.setBaseClass(111);
  1218. +               break;
  1219. +           case "ssaint":
  1220. +               player.setClassId(112);
  1221. +               player.setBaseClass(112);
  1222. +               break;
  1223. +           case "titan":
  1224. +               player.setClassId(113);
  1225. +               player.setBaseClass(113);
  1226. +               break;
  1227. +           case "khavatari":
  1228. +               player.setClassId(114);
  1229. +               player.setBaseClass(114);
  1230. +               break;
  1231. +           case "domi":
  1232. +               player.setClassId(115);
  1233. +               player.setBaseClass(115);
  1234. +               break;
  1235. +           case "doom":
  1236. +               player.setClassId(116);
  1237. +               player.setBaseClass(116);
  1238. +               break;
  1239. +           case "fortune":
  1240. +               player.setClassId(117);
  1241. +               player.setBaseClass(117);
  1242. +               break;
  1243. +           case "maestro":
  1244. +               player.setClassId(118);
  1245. +               player.setBaseClass(118);
  1246. +               break;
  1247. +       }
  1248. +       player.store();
  1249. +       player.broadcastUserInfo();
  1250. +       player.sendSkillList();
  1251. +       player.giveAvailableSkills();
  1252. +       player.sendMessage("Your base class has been changed! You will Be Disconected in 5 Seconds!");
  1253. +       ThreadPool.schedule(() -> player.logout(false), 5000);
  1254. +   }
  1255. +  
  1256. +   @Override
  1257. +   public String getHtmlPath(int npcId, int val)
  1258. +   {
  1259. +       String filename = "";
  1260. +      
  1261. +       if (val == 0)
  1262. +           filename = "" + npcId;
  1263. +       else
  1264. +           filename = npcId + "-" + val;
  1265. +      
  1266. +       return "data/html/mods/donateNpc/" + filename + ".htm";
  1267. +   }
  1268. +}
  1269. Index: java/net/sf/l2j/gameserver/network/clientpackets/AbstractEnchantPacket.java
  1270. ===================================================================
  1271. --- java/net/sf/l2j/gameserver/network/clientpackets/AbstractEnchantPacket.java (revision 6)
  1272. +++ java/net/sf/l2j/gameserver/network/clientpackets/AbstractEnchantPacket.java (working copy)
  1273. @@ -18,6 +18,7 @@
  1274.  import java.util.Map;
  1275.  
  1276.  import net.sf.l2j.Config;
  1277. +import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
  1278.  import net.sf.l2j.gameserver.model.item.instance.ItemInstance;
  1279.  import net.sf.l2j.gameserver.model.item.kind.Item;
  1280.  import net.sf.l2j.gameserver.model.item.kind.Weapon;
  1281. @@ -59,7 +60,6 @@
  1282.                     if (!_isWeapon || (Config.ENCHANT_MAX_WEAPON > 0 && enchantItem.getEnchantLevel() >= Config.ENCHANT_MAX_WEAPON))
  1283.                         return false;
  1284.                     break;
  1285. -              
  1286.                 case Item.TYPE2_SHIELD_ARMOR:
  1287.                 case Item.TYPE2_ACCESSORY:
  1288.                     if (_isWeapon || (Config.ENCHANT_MAX_ARMOR > 0 && enchantItem.getEnchantLevel() >= Config.ENCHANT_MAX_ARMOR))
  1289. @@ -107,9 +107,10 @@
  1290.          * <li>full body armors has a chance of 1/1 for +4, 2/3 for +5, 1/3 for +6, ..., 1/17 for +20. If you've made a +20 armor, chance to make it +21 will be equal to zero (0%).</li>
  1291.          * </ul>
  1292.          * @param enchantItem : The item to enchant.
  1293. +        * @param player
  1294.          * @return the enchant chance under double format (0.7 / 0.35 / 0.44324...).
  1295.          */
  1296. -       public final double getChance(ItemInstance enchantItem)
  1297. +       public final double getChance(ItemInstance enchantItem, L2PcInstance player)
  1298.         {
  1299.             if (!isValid(enchantItem))
  1300.                 return -1;
  1301. @@ -122,16 +123,20 @@
  1302.            
  1303.             // Armor formula : 0.66^(current-2), chance is lower and lower for each enchant.
  1304.             if (enchantItem.isArmor())
  1305. -               chance = Math.pow(Config.ENCHANT_CHANCE_ARMOR, (enchantItem.getEnchantLevel() - 2));
  1306. +               if (player.isVipStatus())
  1307. +                   chance = Math.pow(Config.VIP_ENCHANT_CHANCE_ARMOR, (enchantItem.getEnchantLevel() - 2));
  1308. +               else
  1309. +                   chance = Math.pow(Config.ENCHANT_CHANCE_ARMOR, (enchantItem.getEnchantLevel() - 2));
  1310.             // Weapon formula is 70% for fighter weapon, 40% for mage weapon. Special rates after +14.
  1311.             else if (enchantItem.isWeapon())
  1312.             {
  1313. +               if (player.isVipStatus())
  1314. +                   chance = (enchantItem.getEnchantLevel() > 14) ? Config.VIP_ENCHANT_CHANCE_WEAPON_15PLUS : Config.VIP_ENCHANT_CHANCE_WEAPON;
  1315.                 if (((Weapon) enchantItem.getItem()).isMagical())
  1316.                     chance = (enchantItem.getEnchantLevel() > 14) ? Config.ENCHANT_CHANCE_WEAPON_MAGIC_15PLUS : Config.ENCHANT_CHANCE_WEAPON_MAGIC;
  1317.                 else
  1318.                     chance = (enchantItem.getEnchantLevel() > 14) ? Config.ENCHANT_CHANCE_WEAPON_NONMAGIC_15PLUS : Config.ENCHANT_CHANCE_WEAPON_NONMAGIC;
  1319.             }
  1320. -          
  1321.             return chance;
  1322.         }
  1323.     }
  1324. Index: java/net/sf/l2j/gameserver/handler/itemhandlers/VipStatusItem.java
  1325. ===================================================================
  1326. --- java/net/sf/l2j/gameserver/handler/itemhandlers/VipStatusItem.java  (nonexistent)
  1327. +++ java/net/sf/l2j/gameserver/handler/itemhandlers/VipStatusItem.java  (working copy)
  1328. @@ -0,0 +1,57 @@
  1329. +/*
  1330. + * This program is free software: you can redistribute it and/or modify it under
  1331. + * the terms of the GNU General Public License as published by the Free Software
  1332. + * Foundation, either version 3 of the License, or (at your option) any later
  1333. + * version.
  1334. + *
  1335. + * This program is distributed in the hope that it will be useful, but WITHOUT
  1336. + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
  1337. + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
  1338. + * details.
  1339. + *
  1340. + * You should have received a copy of the GNU General Public License along with
  1341. + * this program. If not, see <http://www.gnu.org/licenses/>.
  1342. + */
  1343. +package net.sf.l2j.gameserver.handler.itemhandlers;
  1344. +
  1345. +import net.sf.l2j.Config;
  1346. +import net.sf.l2j.gameserver.handler.IItemHandler;
  1347. +import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminVipStatus;
  1348. +import net.sf.l2j.gameserver.model.actor.L2Playable;
  1349. +import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
  1350. +import net.sf.l2j.gameserver.model.item.instance.ItemInstance;
  1351. +import net.sf.l2j.gameserver.network.SystemMessageId;
  1352. +import net.sf.l2j.gameserver.network.serverpackets.SocialAction;
  1353. +
  1354. +/**
  1355. + * @author Baggos
  1356. + */
  1357. +public class VipStatusItem implements IItemHandler
  1358. +{
  1359. +   @Override
  1360. +   public void useItem(L2Playable playable, ItemInstance item, boolean forceUse)
  1361. +   {
  1362. +       if (Config.ENABLE_VIP_ITEM)
  1363. +       {
  1364. +           if (!(playable instanceof L2PcInstance))
  1365. +               return;
  1366. +          
  1367. +           L2PcInstance activeChar = (L2PcInstance) playable;
  1368. +           if (activeChar.isVipStatus())
  1369. +               activeChar.sendMessage("Your character has already VIP Status!");
  1370. +           else if (activeChar.isInOlympiadMode())
  1371. +               activeChar.sendPacket(SystemMessageId.YOU_ARE_NOT_AUTHORIZED_TO_DO_THAT);
  1372. +           else
  1373. +           {
  1374. +               AdminVipStatus.AddVipStatus(activeChar, activeChar, Config.VIP_DAYS);
  1375. +               activeChar.broadcastPacket(new SocialAction(activeChar, 16));
  1376. +               playable.destroyItem("Consume", item.getObjectId(), 1, null, false);
  1377. +           }
  1378. +       }
  1379. +   }
  1380. +  
  1381. +   public int getItemIds()
  1382. +   {
  1383. +       return Config.VIP_ITEM_ID;
  1384. +   }
  1385. +}
  1386. Index: java/net/sf/l2j/gameserver/model/actor/L2Attackable.java
  1387. ===================================================================
  1388. --- java/net/sf/l2j/gameserver/model/actor/L2Attackable.java    (revision 6)
  1389. +++ java/net/sf/l2j/gameserver/model/actor/L2Attackable.java    (working copy)
  1390. @@ -326,6 +326,12 @@
  1391.                         sp *= Config.CHAMPION_REWARDS;
  1392.                     }
  1393.                    
  1394. +                   if (attacker.isVipStatus())
  1395. +                   {
  1396. +                       exp *= Config.VIP_XP_SP_RATES;
  1397. +                       sp *= Config.VIP_XP_SP_RATES;
  1398. +                   }
  1399. +                  
  1400.                     exp *= 1 - penalty;
  1401.                    
  1402.                     if (isOverhit() && _overhitAttacker != null && _overhitAttacker.getActingPlayer() != null && attacker == _overhitAttacker.getActingPlayer())
  1403. @@ -405,6 +411,12 @@
  1404.                     sp *= Config.CHAMPION_REWARDS;
  1405.                 }
  1406.                
  1407. +               if (attacker.isVipStatus())
  1408. +               {
  1409. +                   exp *= Config.VIP_XP_SP_RATES;
  1410. +                   sp *= Config.VIP_XP_SP_RATES;
  1411. +               }
  1412. +              
  1413.                 exp *= partyMul;
  1414.                 sp *= partyMul;
  1415.                
  1416. @@ -766,11 +778,23 @@
  1417.        
  1418.         // Applies Drop rates
  1419.         if (drop.getItemId() == 57)
  1420. -           dropChance *= Config.RATE_DROP_ADENA;
  1421. +           if (lastAttacker.isVipStatus())
  1422. +               dropChance *= Config.VIP_ADENA_RATES;
  1423. +           else
  1424. +               dropChance *= Config.RATE_DROP_ADENA;
  1425.         else if (isSweep)
  1426. -           dropChance *= Config.RATE_DROP_SPOIL;
  1427. +           if (lastAttacker.isVipStatus())
  1428. +               dropChance *= Config.VIP_SPOIL_RATES;
  1429. +           else
  1430. +               dropChance *= Config.RATE_DROP_SPOIL;
  1431.         else
  1432. -           dropChance *= isRaid() && !isRaidMinion() ? Config.RATE_DROP_ITEMS_BY_RAID : Config.RATE_DROP_ITEMS;
  1433. +       {
  1434. +           if (lastAttacker.isVipStatus())
  1435. +               dropChance *= isRaid() && !isRaidMinion() ? Config.VIP_RATE_DROP_ITEMS_BY_RAID : Config.VIP_DROP_RATES;
  1436. +           else
  1437. +               dropChance *= isRaid() && !isRaidMinion() ? Config.RATE_DROP_ITEMS_BY_RAID : Config.RATE_DROP_ITEMS;
  1438. +          
  1439. +       }
  1440.        
  1441.         if (isChampion())
  1442.             dropChance *= Config.CHAMPION_REWARDS;
  1443. @@ -805,7 +829,7 @@
  1444.         if (isChampion())
  1445.             if (drop.getItemId() == 57 || (drop.getItemId() >= 6360 && drop.getItemId() <= 6362))
  1446.                 itemCount *= Config.CHAMPION_ADENAS_REWARDS;
  1447. -      
  1448. +          
  1449.         if (itemCount > 0)
  1450.             return new IntIntHolder(drop.getItemId(), itemCount);
  1451.        
  1452. @@ -824,7 +848,7 @@
  1453.     {
  1454.         if (categoryDrops == null)
  1455.             return null;
  1456. -      
  1457. +          
  1458.         // Get default drop chance for the category (that's the sum of chances for all items in the category)
  1459.         // keep track of the base category chance as it'll be used later, if an item is drop from the category.
  1460.         // for everything else, use the total "categoryDropChance"
  1461. @@ -855,7 +879,7 @@
  1462.             DropData drop = categoryDrops.dropOne(isRaid() && !isRaidMinion());
  1463.             if (drop == null)
  1464.                 return null;
  1465. -          
  1466. +              
  1467.             // Now decide the quantity to drop based on the rates and penalties. To get this value
  1468.             // simply divide the modified categoryDropChance by the base category chance. This
  1469.             // results in a chance that will dictate the drops amounts: for each amount over 100
  1470. @@ -870,7 +894,12 @@
  1471.            
  1472.             double dropChance = drop.getChance();
  1473.             if (drop.getItemId() == 57)
  1474. -               dropChance *= Config.RATE_DROP_ADENA;
  1475. +               if (lastAttacker.isVipStatus())
  1476. +                   dropChance *= Config.VIP_ADENA_RATES;
  1477. +               else
  1478. +                   dropChance *= Config.RATE_DROP_ADENA;
  1479. +           else if (lastAttacker.isVipStatus())
  1480. +               dropChance *= isRaid() && !isRaidMinion() ? Config.VIP_RATE_DROP_ITEMS_BY_RAID : Config.VIP_DROP_RATES;
  1481.             else
  1482.                 dropChance *= isRaid() && !isRaidMinion() ? Config.RATE_DROP_ITEMS_BY_RAID : Config.RATE_DROP_ITEMS;
  1483.            
  1484. @@ -906,7 +935,7 @@
  1485.             if (isChampion())
  1486.                 if (drop.getItemId() == 57 || (drop.getItemId() >= 6360 && drop.getItemId() <= 6362))
  1487.                     itemCount *= Config.CHAMPION_ADENAS_REWARDS;
  1488. -          
  1489. +              
  1490.             if (itemCount > 0)
  1491.                 return new IntIntHolder(drop.getItemId(), itemCount);
  1492.         }
  1493. @@ -927,7 +956,7 @@
  1494.             for (L2Character atkChar : _attackByList)
  1495.                 if (atkChar.getLevel() > highestLevel)
  1496.                     highestLevel = atkChar.getLevel();
  1497. -          
  1498. +              
  1499.             // According to official data (Prima), deep blue mobs are 9 or more levels below players
  1500.             if (highestLevel - 9 >= getLevel())
  1501.                 return ((highestLevel - (getLevel() + 8)) * 9);
  1502. @@ -1456,7 +1485,7 @@
  1503.         // Over-hit damage percentages are limited to 25% max
  1504.         if (overhitPercentage > 25)
  1505.             overhitPercentage = 25;
  1506. -      
  1507. +          
  1508.         // Get the overhit exp bonus according to the above over-hit damage percentage
  1509.         // (1/1 basis - 13% of over-hit damage, 13% of extra exp is given, and so on...)
  1510.         double overhitExp = ((overhitPercentage / 100) * normalExp);
  1511. Index: java/net/sf/l2j/gameserver/network/clientpackets/EnterWorld.java
  1512. ===================================================================
  1513. --- java/net/sf/l2j/gameserver/network/clientpackets/EnterWorld.java    (revision 6)
  1514. +++ java/net/sf/l2j/gameserver/network/clientpackets/EnterWorld.java    (working copy)
  1515. @@ -17,6 +17,7 @@
  1516.  import java.sql.Connection;
  1517.  import java.sql.PreparedStatement;
  1518.  import java.sql.ResultSet;
  1519. +import java.util.Calendar;
  1520.  import java.util.logging.Level;
  1521.  
  1522.  import net.sf.l2j.Config;
  1523. @@ -27,6 +28,7 @@
  1524.  import net.sf.l2j.gameserver.datatables.GmListTable;
  1525.  import net.sf.l2j.gameserver.datatables.MapRegionTable.TeleportWhereType;
  1526.  import net.sf.l2j.gameserver.datatables.SkillTable.FrequentSkill;
  1527. +import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminVipStatus;
  1528.  import net.sf.l2j.gameserver.instancemanager.ClanHallManager;
  1529.  import net.sf.l2j.gameserver.instancemanager.CoupleManager;
  1530.  import net.sf.l2j.gameserver.instancemanager.DimensionalRiftManager;
  1531. @@ -88,6 +90,36 @@
  1532.             return;
  1533.         }
  1534.        
  1535. +       int color = activeChar.isColor();
  1536. +       switch (color)
  1537. +       {
  1538. +           case 1:
  1539. +               activeChar.setColor(1);
  1540. +               activeChar.getAppearance().setNameColor(0x009900);
  1541. +               activeChar.broadcastUserInfo();
  1542. +               break;
  1543. +           case 2:
  1544. +               activeChar.setColor(2);
  1545. +               activeChar.getAppearance().setNameColor(0xff7f00);
  1546. +               activeChar.broadcastUserInfo();
  1547. +               break;
  1548. +           case 3:
  1549. +               activeChar.setColor(3);
  1550. +               activeChar.getAppearance().setNameColor(0xff00ff);
  1551. +               activeChar.broadcastUserInfo();
  1552. +               break;
  1553. +           case 4:
  1554. +               activeChar.setColor(4);
  1555. +               activeChar.getAppearance().setNameColor(0x00ffff);
  1556. +               activeChar.broadcastUserInfo();
  1557. +               break;
  1558. +           case 5:
  1559. +               activeChar.setColor(5);
  1560. +               activeChar.getAppearance().setNameColor(0x0099ff);
  1561. +               activeChar.broadcastUserInfo();
  1562. +               break;
  1563. +       }
  1564. +      
  1565.         final int objectId = activeChar.getObjectId();
  1566.        
  1567.         if (activeChar.isGM())
  1568. @@ -231,6 +263,9 @@
  1569.         activeChar.sendPacket(new EtcStatusUpdate(activeChar));
  1570.         activeChar.sendSkillList();
  1571.        
  1572. +       if (activeChar.getMemos().getLong("TimeOfVip", 0) > 0)
  1573. +           onEnterVip(activeChar);
  1574. +      
  1575.         // Load quests.
  1576.         try (Connection con = L2DatabaseFactory.getInstance().getConnection())
  1577.         {
  1578. @@ -334,6 +369,19 @@
  1579.         activeChar.sendPacket(ActionFailed.STATIC_PACKET);
  1580.     }
  1581.    
  1582. +   private static void onEnterVip(L2PcInstance activeChar)
  1583. +   {
  1584. +       long now = Calendar.getInstance().getTimeInMillis();
  1585. +       long endDay = activeChar.getMemos().getLong("TimeOfVip");
  1586. +       if (now > endDay)
  1587. +           AdminVipStatus.RemoveVipStatus(activeChar);
  1588. +       else
  1589. +       {
  1590. +           activeChar.setVipStatus(true);
  1591. +           activeChar.broadcastUserInfo();
  1592. +       }
  1593. +   }
  1594. +  
  1595.     @Override
  1596.     protected boolean triggersOnActionRequest()
  1597.     {
  1598. Index: config/vip.properties
  1599. ===================================================================
  1600. --- config/vip.properties   (nonexistent)
  1601. +++ config/vip.properties   (working copy)
  1602. @@ -0,0 +1,25 @@
  1603. +# ================================================
  1604. +#                    VIP System            
  1605. +# ================================================
  1606. +# If True, player can got VIP Status by item.
  1607. +VipItemEnabled = True
  1608. +
  1609. +# Id of VIP Item.
  1610. +# Do not forget to add the item handler on xml/items 3481.
  1611. +# <set name="handler" val="VipStatusItem" />
  1612. +VipItemId = 3481
  1613. +
  1614. +# Days of VIP.
  1615. +VipDays = 10
  1616. +
  1617. +# Set Exp/Sp/Drop.
  1618. +VipExp/SpRates = 50
  1619. +VipAdenaDrop = 50
  1620. +VipSpoilRates = 50
  1621. +VipRaidDrop = 1
  1622. +VipDrop = 1
  1623. +
  1624. +# Set Enchant Chance.
  1625. +VipEnchantChanceArmor = 0.77
  1626. +VipEnchantChanceWeapon15Plus = 0.77
  1627. +VipEnchantChanceWeapon = 0.77
  1628. \ No newline at end of file
  1629. Index: java/net/sf/l2j/gameserver/handler/ItemHandler.java
  1630. ===================================================================
  1631. --- java/net/sf/l2j/gameserver/handler/ItemHandler.java (revision 6)
  1632. +++ java/net/sf/l2j/gameserver/handler/ItemHandler.java (working copy)
  1633. @@ -43,6 +43,7 @@
  1634.  import net.sf.l2j.gameserver.handler.itemhandlers.SpecialXMas;
  1635.  import net.sf.l2j.gameserver.handler.itemhandlers.SpiritShot;
  1636.  import net.sf.l2j.gameserver.handler.itemhandlers.SummonItems;
  1637. +import net.sf.l2j.gameserver.handler.itemhandlers.VipStatusItem;
  1638.  import net.sf.l2j.gameserver.model.item.kind.EtcItem;
  1639.  
  1640.  public class ItemHandler
  1641. @@ -82,6 +83,7 @@
  1642.         registerItemHandler(new SoulCrystals());
  1643.         registerItemHandler(new SpiritShot());
  1644.         registerItemHandler(new SummonItems());
  1645. +       registerItemHandler(new VipStatusItem());
  1646.     }
  1647.    
  1648.     public void registerItemHandler(IItemHandler handler)
  1649. Index: java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java
  1650. ===================================================================
  1651. --- java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java   (revision 6)
  1652. +++ java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java   (working copy)
  1653. @@ -239,6 +239,7 @@
  1654.  import net.sf.l2j.gameserver.taskmanager.ItemsOnGroundTaskManager;
  1655.  import net.sf.l2j.gameserver.taskmanager.PvpFlagTaskManager;
  1656.  import net.sf.l2j.gameserver.taskmanager.ShadowItemTaskManager;
  1657. +import net.sf.l2j.gameserver.taskmanager.VipTimeTaskManager;
  1658.  import net.sf.l2j.gameserver.taskmanager.WaterTaskManager;
  1659.  import net.sf.l2j.gameserver.templates.skills.L2EffectFlag;
  1660.  import net.sf.l2j.gameserver.templates.skills.L2EffectType;
  1661. @@ -314,8 +315,8 @@
  1662.     private static final String DELETE_SKILL_SAVE = "DELETE FROM character_skills_save WHERE char_obj_id=? AND class_index=?";
  1663.    
  1664.     private static final String INSERT_CHARACTER = "INSERT INTO characters (account_name,obj_Id,char_name,level,maxHp,curHp,maxCp,curCp,maxMp,curMp,face,hairStyle,hairColor,sex,exp,sp,karma,pvpkills,pkkills,clanid,race,classid,deletetime,cancraft,title,accesslevel,online,isin7sdungeon,clan_privs,wantspeace,base_class,nobless,power_grade,last_recom_date) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
  1665. -   private static final String UPDATE_CHARACTER = "UPDATE characters SET level=?,maxHp=?,curHp=?,maxCp=?,curCp=?,maxMp=?,curMp=?,face=?,hairStyle=?,hairColor=?,sex=?,heading=?,x=?,y=?,z=?,exp=?,expBeforeDeath=?,sp=?,karma=?,pvpkills=?,pkkills=?,rec_have=?,rec_left=?,clanid=?,race=?,classid=?,deletetime=?,title=?,accesslevel=?,online=?,isin7sdungeon=?,clan_privs=?,wantspeace=?,base_class=?,onlinetime=?,punish_level=?,punish_timer=?,nobless=?,power_grade=?,subpledge=?,last_recom_date=?,lvl_joined_academy=?,apprentice=?,sponsor=?,varka_ketra_ally=?,clan_join_expiry_time=?,clan_create_expiry_time=?,char_name=?,death_penalty_level=? WHERE obj_id=?";
  1666. -   private static final String RESTORE_CHARACTER = "SELECT account_name, obj_Id, char_name, level, maxHp, curHp, maxCp, curCp, maxMp, curMp, face, hairStyle, hairColor, sex, heading, x, y, z, exp, expBeforeDeath, sp, karma, pvpkills, pkkills, clanid, race, classid, deletetime, cancraft, title, rec_have, rec_left, accesslevel, online, char_slot, lastAccess, clan_privs, wantspeace, base_class, onlinetime, isin7sdungeon, punish_level, punish_timer, nobless, power_grade, subpledge, last_recom_date, lvl_joined_academy, apprentice, sponsor, varka_ketra_ally,clan_join_expiry_time,clan_create_expiry_time,death_penalty_level FROM characters WHERE obj_id=?";
  1667. +   private static final String UPDATE_CHARACTER = "UPDATE characters SET level=?,maxHp=?,curHp=?,maxCp=?,curCp=?,maxMp=?,curMp=?,face=?,hairStyle=?,hairColor=?,sex=?,heading=?,x=?,y=?,z=?,exp=?,expBeforeDeath=?,sp=?,karma=?,pvpkills=?,pkkills=?,rec_have=?,rec_left=?,clanid=?,race=?,classid=?,deletetime=?,title=?,accesslevel=?,online=?,isin7sdungeon=?,clan_privs=?,wantspeace=?,base_class=?,onlinetime=?,punish_level=?,punish_timer=?,nobless=?,power_grade=?,subpledge=?,last_recom_date=?,lvl_joined_academy=?,apprentice=?,sponsor=?,varka_ketra_ally=?,clan_join_expiry_time=?,clan_create_expiry_time=?,char_name=?,death_penalty_level=?,color=? WHERE obj_id=?";
  1668. +   private static final String RESTORE_CHARACTER = "SELECT account_name, obj_Id, char_name, level, maxHp, curHp, maxCp, curCp, maxMp, curMp, face, hairStyle, hairColor, sex, heading, x, y, z, exp, expBeforeDeath, sp, karma, pvpkills, pkkills, clanid, race, classid, deletetime, cancraft, title, rec_have, rec_left, accesslevel, online, char_slot, lastAccess, clan_privs, wantspeace, base_class, onlinetime, isin7sdungeon, punish_level, punish_timer, nobless, power_grade, subpledge, last_recom_date, lvl_joined_academy, apprentice, sponsor, varka_ketra_ally,clan_join_expiry_time,clan_create_expiry_time,death_penalty_level,color FROM characters WHERE obj_id=?";
  1669.    
  1670.     private static final String RESTORE_CHAR_SUBCLASSES = "SELECT class_id,exp,sp,level,class_index FROM character_subclasses WHERE char_obj_id=? ORDER BY class_index ASC";
  1671.     private static final String ADD_CHAR_SUBCLASS = "INSERT INTO character_subclasses (char_obj_id,class_id,exp,sp,level,class_index) VALUES (?,?,?,?,?,?)";
  1672. @@ -507,6 +508,9 @@
  1673.    
  1674.     private int _deathPenaltyBuffLevel;
  1675.    
  1676. +   private int _isColor;
  1677. +   private boolean _isVipStatus;
  1678. +  
  1679.     private final AtomicInteger _charges = new AtomicInteger();
  1680.     private ScheduledFuture<?> _chargeTask;
  1681.    
  1682. @@ -3969,7 +3973,7 @@
  1683.         for (L2Character character : getKnownList().getKnownType(L2Character.class))
  1684.             if (character.getFusionSkill() != null && character.getFusionSkill().getTarget() == this)
  1685.                 character.abortCast();
  1686. -      
  1687. +          
  1688.         if (isInParty() && getParty().isInDimensionalRift())
  1689.             getParty().getDimensionalRift().getDeadMemberList().add(this);
  1690.        
  1691. @@ -4283,6 +4287,8 @@
  1692.         PvpFlagTaskManager.getInstance().remove(this);
  1693.         GameTimeTaskManager.getInstance().remove(this);
  1694.         ShadowItemTaskManager.getInstance().remove(this);
  1695. +       if (isVipStatus())
  1696. +           VipTimeTaskManager.getInstance().remove(this);
  1697.     }
  1698.    
  1699.     /**
  1700. @@ -5401,6 +5407,8 @@
  1701.                
  1702.                 player.setDeathPenaltyBuffLevel(rset.getInt("death_penalty_level"));
  1703.                
  1704. +               player.setColor(rset.getInt("color"));
  1705. +              
  1706.                 // Set the x,y,z position of the L2PcInstance and make it invisible
  1707.                 player.setXYZInvisible(rset.getInt("x"), rset.getInt("y"), rset.getInt("z"));
  1708.                
  1709. @@ -5733,7 +5741,8 @@
  1710.             statement.setLong(47, getClanCreateExpiryTime());
  1711.             statement.setString(48, getName());
  1712.             statement.setLong(49, getDeathPenaltyBuffLevel());
  1713. -           statement.setInt(50, getObjectId());
  1714. +           statement.setInt(50, isColor());
  1715. +           statement.setInt(51, getObjectId());
  1716.            
  1717.             statement.execute();
  1718.             statement.close();
  1719. @@ -6700,7 +6709,7 @@
  1720.        
  1721.         switch (sklTargetType)
  1722.         {
  1723. -       // Target the player if skill type is AURA, PARTY, CLAN or SELF
  1724. +           // Target the player if skill type is AURA, PARTY, CLAN or SELF
  1725.             case TARGET_AURA:
  1726.             case TARGET_FRONT_AURA:
  1727.             case TARGET_BEHIND_AURA:
  1728. @@ -7964,7 +7973,7 @@
  1729.         else
  1730.             for (L2Skill s : SkillTable.getNobleSkills())
  1731.                 super.removeSkill(s); // Just Remove skills without deleting from Sql
  1732. -          
  1733. +              
  1734.         _isNoble = val;
  1735.        
  1736.         sendSkillList();
  1737. @@ -8296,7 +8305,7 @@
  1738.             for (L2Character character : getKnownList().getKnownType(L2Character.class))
  1739.                 if (character.getFusionSkill() != null && character.getFusionSkill().getTarget() == this)
  1740.                     character.abortCast();
  1741. -          
  1742. +              
  1743.             store();
  1744.             _reuseTimeStamps.clear();
  1745.            
  1746. @@ -8440,6 +8449,9 @@
  1747.         // Add to the GameTimeTask to keep inform about activity time.
  1748.         GameTimeTaskManager.getInstance().add(this);
  1749.        
  1750. +       if (isVipStatus())
  1751. +           VipTimeTaskManager.getInstance().add(this);
  1752. +      
  1753.         // Teleport player if the Seven Signs period isn't the good one, or if the player isn't in a cabal.
  1754.         if (isIn7sDungeon() && !isGM())
  1755.         {
  1756. @@ -8917,7 +8929,7 @@
  1757.             for (L2Character character : getKnownList().getKnownType(L2Character.class))
  1758.                 if (character.getFusionSkill() != null && character.getFusionSkill().getTarget() == this)
  1759.                     character.abortCast();
  1760. -          
  1761. +              
  1762.             // Stop signets & toggles effects.
  1763.             for (L2Effect effect : getAllEffects())
  1764.             {
  1765. @@ -8969,7 +8981,7 @@
  1766.             // If the L2PcInstance is a GM, remove it from the GM List
  1767.             if (isGM())
  1768.                 GmListTable.getInstance().deleteGm(this);
  1769. -          
  1770. +              
  1771.             // Check if the L2PcInstance is in observer mode to set its position to its position
  1772.             // before entering in observer mode
  1773.             if (inObserverMode())
  1774. @@ -9083,13 +9095,13 @@
  1775.             case 7809: // yellow for beginners
  1776.             case 8486: // prize-winning for beginners
  1777.                 return 0;
  1778. -              
  1779. +          
  1780.             case 8485: // prize-winning luminous
  1781.             case 8506: // green luminous
  1782.             case 8509: // purple luminous
  1783.             case 8512: // yellow luminous
  1784.                 return 2;
  1785. -              
  1786. +          
  1787.             default:
  1788.                 return 1;
  1789.         }
  1790. @@ -10410,6 +10422,26 @@
  1791.         return _selectedBlocksList;
  1792.     }
  1793.    
  1794. +   public int isColor()
  1795. +   {
  1796. +       return _isColor;
  1797. +   }
  1798. +  
  1799. +   public int setColor(int colors)
  1800. +   {
  1801. +       return _isColor = colors;
  1802. +   }
  1803. +  
  1804. +   public boolean isVipStatus()
  1805. +   {
  1806. +       return _isVipStatus;
  1807. +   }
  1808. +  
  1809. +   public void setVipStatus(boolean vip)
  1810. +   {
  1811. +       _isVipStatus = vip;
  1812. +   }
  1813. +  
  1814.     @Override
  1815.     public void broadcastRelationsChanges()
  1816.     {
  1817. Index: java/net/sf/l2j/Config.java
  1818. ===================================================================
  1819. --- java/net/sf/l2j/Config.java (revision 6)
  1820. +++ java/net/sf/l2j/Config.java (working copy)
  1821. @@ -51,6 +51,8 @@
  1822.     public static final String PLAYERS_FILE = "./config/players.properties";
  1823.     public static final String SERVER_FILE = "./config/server.properties";
  1824.     public static final String SIEGE_FILE = "./config/siege.properties";
  1825. +   public static final String MULTI_FILE = "./config/multishop.properties";
  1826. +   public static final String VIP_FILE = "./config/vip.properties";
  1827.    
  1828.     // --------------------------------------------------
  1829.     // Clans settings
  1830. @@ -282,6 +284,28 @@
  1831.     // NPCs / Monsters
  1832.     // --------------------------------------------------
  1833.    
  1834. +   /** Multi Shop Manager */
  1835. +   public static int DONATE_ITEM;
  1836. +   public static int NOBL_ITEM_COUNT;
  1837. +   public static int SEX_ITEM_COUNT;
  1838. +   public static int PK_ITEM_COUNT;
  1839. +   public static int PK_CLEAN;
  1840. +   public static int CLAN_ITEM_COUNT;
  1841. +   public static int CLAN_REP_ITEM_COUNT;
  1842. +   public static int CLAN_REPS;
  1843. +   public static int AUGM_ITEM_COUNT;
  1844. +   public static int CLAN_SKILL_ITEM_COUNT;
  1845. +   public static int REC_ITEM_COUNT;
  1846. +   public static int PASSWORD_ITEM_COUNT;
  1847. +   public static int COLOR_ITEM_COUNT;
  1848. +   public static int NAME_ITEM_COUNT;
  1849. +   public static int ENCHANT_ITEM_COUNT;
  1850. +   public static int ENCHANT_MAX_VALUE;
  1851. +   public static int CLASS_ITEM_COUNT;
  1852. +   public static int VIP7_ITEM_COUNT;
  1853. +   public static int VIP15_ITEM_COUNT;
  1854. +   public static int VIP30_ITEM_COUNT;
  1855. +  
  1856.     /** Champion Mod */
  1857.     public static int CHAMPION_FREQUENCY;
  1858.     public static int CHAMP_MIN_LVL;
  1859. @@ -495,6 +519,19 @@
  1860.     public static boolean STORE_SKILL_COOLTIME;
  1861.     public static int BUFFS_MAX_AMOUNT;
  1862.    
  1863. +   /** Vip Settings */
  1864. +   public static boolean ENABLE_VIP_ITEM;
  1865. +   public static int VIP_ITEM_ID;
  1866. +   public static int VIP_DAYS;
  1867. +   public static int VIP_XP_SP_RATES;
  1868. +   public static int VIP_ADENA_RATES;
  1869. +   public static int VIP_SPOIL_RATES;
  1870. +   public static int VIP_RATE_DROP_ITEMS_BY_RAID;
  1871. +   public static int VIP_DROP_RATES;
  1872. +   public static double VIP_ENCHANT_CHANCE_ARMOR;
  1873. +   public static double VIP_ENCHANT_CHANCE_WEAPON_15PLUS;
  1874. +   public static double VIP_ENCHANT_CHANCE_WEAPON;
  1875. +  
  1876.     // --------------------------------------------------
  1877.     // Server
  1878.     // --------------------------------------------------
  1879. @@ -860,7 +897,7 @@
  1880.         ALT_GAME_CASTLE_DUSK = events.getProperty("AltCastleForDusk", true);
  1881.         ALT_FESTIVAL_MIN_PLAYER = events.getProperty("AltFestivalMinPlayer", 5);
  1882.         ALT_MAXIMUM_PLAYER_CONTRIB = events.getProperty("AltMaxPlayerContrib", 1000000);
  1883. -       ALT_FESTIVAL_MANAGER_START = events.getProperty("AltFestivalManagerStart", 120000);
  1884. +       ALT_FESTIVAL_MANAGER_START = events.getProperty("AltFestivalmultitart", 120000);
  1885.         ALT_FESTIVAL_LENGTH = events.getProperty("AltFestivalLength", 1080000);
  1886.         ALT_FESTIVAL_CYCLE_LENGTH = events.getProperty("AltFestivalCycleLength", 2280000);
  1887.         ALT_FESTIVAL_FIRST_SPAWN = events.getProperty("AltFestivalFirstSpawn", 120000);
  1888. @@ -1082,6 +1119,55 @@
  1889.     }
  1890.    
  1891.     /**
  1892. +    * Load Multishop settings.
  1893. +    */
  1894. +   private static final void loadMultiShop()
  1895. +   {
  1896. +       final ExProperties multi = initProperties(MULTI_FILE);
  1897. +       DONATE_ITEM = multi.getProperty("DonateItemId", 57);
  1898. +       NOBL_ITEM_COUNT = multi.getProperty("NoblesseItemCount", 100);
  1899. +       SEX_ITEM_COUNT = multi.getProperty("SexItemCount", 100);
  1900. +       PK_ITEM_COUNT = multi.getProperty("PkItemCount", 100);
  1901. +       PK_CLEAN = multi.getProperty("PkCleanValue", 50);
  1902. +       CLAN_ITEM_COUNT = multi.getProperty("ClanItemCount", 100);
  1903. +       CLAN_REP_ITEM_COUNT = multi.getProperty("ClanRepsCount", 100);
  1904. +       CLAN_REPS = multi.getProperty("ClanReps", 20000);
  1905. +       AUGM_ITEM_COUNT = multi.getProperty("AugmentionItemCount", 100);
  1906. +       NOBL_ITEM_COUNT = multi.getProperty("ClanSkillsItemCount", 100);
  1907. +       REC_ITEM_COUNT = multi.getProperty("RecItemCount", 100);
  1908. +       PASSWORD_ITEM_COUNT = multi.getProperty("PasswordItemCount", 100);
  1909. +       COLOR_ITEM_COUNT = multi.getProperty("ColorItemCount", 100);
  1910. +       NAME_ITEM_COUNT = multi.getProperty("NameItemCount", 100);
  1911. +       ENCHANT_ITEM_COUNT = multi.getProperty("EnchantItemCount", 100);
  1912. +       ENCHANT_MAX_VALUE = multi.getProperty("MaxEnchantValue", 15);
  1913. +       CLASS_ITEM_COUNT = multi.getProperty("ClassItemCount", 100);
  1914. +       VIP7_ITEM_COUNT = multi.getProperty("Vip7DaysItemCount", 100);
  1915. +       VIP15_ITEM_COUNT = multi.getProperty("Vip15DaysItemCount", 100);
  1916. +       VIP30_ITEM_COUNT = multi.getProperty("Vip30DaysItemCount", 100);
  1917. +   }
  1918. +  
  1919. +   /**
  1920. +    * Load Vip player settings.
  1921. +    */
  1922. +   private static final void loadVip()
  1923. +   {
  1924. +       final ExProperties vip = initProperties(VIP_FILE);
  1925. +       ENABLE_VIP_ITEM = vip.getProperty("VipItemEnabled", true);
  1926. +       VIP_ITEM_ID = vip.getProperty("VipItemId", 3481);
  1927. +       VIP_DAYS = vip.getProperty("VipDays", 5);
  1928. +      
  1929. +       VIP_XP_SP_RATES = vip.getProperty("VipExp/SpRates", 1000);
  1930. +       VIP_ADENA_RATES = vip.getProperty("VipAdenaDrop", 1000);
  1931. +       VIP_SPOIL_RATES = vip.getProperty("VipSpoilRates", 1000);
  1932. +       VIP_RATE_DROP_ITEMS_BY_RAID = vip.getProperty("VipRaidDrop", 1);
  1933. +       VIP_DROP_RATES = vip.getProperty("VipDrop", 1);
  1934. +      
  1935. +       VIP_ENCHANT_CHANCE_ARMOR = vip.getProperty("VipEnchantChanceArmor", 0.77);
  1936. +       VIP_ENCHANT_CHANCE_WEAPON_15PLUS = vip.getProperty("VipEnchantChanceWeapon15Plus", 0.77);
  1937. +       VIP_ENCHANT_CHANCE_WEAPON = vip.getProperty("VipEnchantChanceWeapon", 0.77);
  1938. +   }
  1939. +  
  1940. +   /**
  1941.      * Loads player settings.<br>
  1942.      * Such as stats, inventory/warehouse, enchant, augmentation, karma, party, admin, petition, skill learn.
  1943.      */
  1944. @@ -1422,6 +1508,12 @@
  1945.         // NPCs/monsters settings
  1946.         loadNpcs();
  1947.        
  1948. +       // Mulishop settings
  1949. +       loadMultiShop();
  1950. +      
  1951. +       // Vip settings
  1952. +       loadVip();
  1953. +      
  1954.         // players settings
  1955.         loadPlayers();
  1956.        
  1957. Index: java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminVipStatus.java
  1958. ===================================================================
  1959. --- java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminVipStatus.java (nonexistent)
  1960. +++ java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminVipStatus.java (working copy)
  1961. @@ -0,0 +1,134 @@
  1962. +/*
  1963. + * This program is free software: you can redistribute it and/or modify it under
  1964. + * the terms of the GNU General Public License as published by the Free Software
  1965. + * Foundation, either version 3 of the License, or (at your option) any later
  1966. + * version.
  1967. + *
  1968. + * This program is distributed in the hope that it will be useful, but WITHOUT
  1969. + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
  1970. + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
  1971. + * details.
  1972. + *
  1973. + * You should have received a copy of the GNU General Public License along with
  1974. + * this program. If not, see <http://www.gnu.org/licenses/>.
  1975. + */
  1976. +package net.sf.l2j.gameserver.handler.admincommandhandlers;
  1977. +
  1978. +import java.util.StringTokenizer;
  1979. +import java.util.concurrent.TimeUnit;
  1980. +
  1981. +import net.sf.l2j.gameserver.handler.IAdminCommandHandler;
  1982. +import net.sf.l2j.gameserver.model.L2World;
  1983. +import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
  1984. +import net.sf.l2j.gameserver.network.clientpackets.Say2;
  1985. +import net.sf.l2j.gameserver.network.serverpackets.CreatureSay;
  1986. +import net.sf.l2j.gameserver.network.serverpackets.SocialAction;
  1987. +import net.sf.l2j.gameserver.taskmanager.VipTimeTaskManager;
  1988. +
  1989. +/**
  1990. + * @author Baggos
  1991. + */
  1992. +public class AdminVipStatus implements IAdminCommandHandler
  1993. +{
  1994. +   private static String[] _adminCommands = new String[]
  1995. +   {
  1996. +       "admin_vipon",
  1997. +       "admin_vipoff"
  1998. +   };
  1999. +  
  2000. +   @Override
  2001. +   public boolean useAdminCommand(String command, L2PcInstance activeChar)
  2002. +   {
  2003. +       StringTokenizer st = new StringTokenizer(command);
  2004. +       st.nextToken();
  2005. +       String player = "";
  2006. +       int time = 1;
  2007. +       L2PcInstance target = null;
  2008. +       if (st.hasMoreTokens())
  2009. +       {
  2010. +           player = st.nextToken();
  2011. +           target = L2World.getInstance().getPlayer(player);
  2012. +           if (st.hasMoreTokens())
  2013. +           {
  2014. +               try
  2015. +               {
  2016. +                   time = Integer.parseInt(st.nextToken());
  2017. +               }
  2018. +               catch (NumberFormatException nfe)
  2019. +               {
  2020. +                   activeChar.sendMessage("Invalid number format used: " + nfe);
  2021. +                   return false;
  2022. +               }
  2023. +           }
  2024. +       }
  2025. +       else if (activeChar.getTarget() != null && activeChar.getTarget() instanceof L2PcInstance)
  2026. +           target = (L2PcInstance) activeChar.getTarget();
  2027. +      
  2028. +       if (command.startsWith("admin_vipon"))
  2029. +       {
  2030. +           if (target == null && player.equals(""))
  2031. +           {
  2032. +               activeChar.sendMessage("Usage: //vipon <char_name> [days]");
  2033. +               return false;
  2034. +           }
  2035. +           if (target != null)
  2036. +           {
  2037. +               AdminVipStatus.AddVipStatus(target, activeChar, time);
  2038. +               activeChar.sendMessage(target.getName() + " got VIP Status for " + time + " day(s).");
  2039. +           }
  2040. +       }
  2041. +       else if (command.startsWith("admin_vipoff"))
  2042. +       {
  2043. +           if (target == null && player.equals(""))
  2044. +           {
  2045. +               activeChar.sendMessage("Usage: //removevip <char_name>");
  2046. +               return false;
  2047. +           }
  2048. +           if (target != null)
  2049. +           {
  2050. +               if (target.isVipStatus())
  2051. +               {
  2052. +                   AdminVipStatus.RemoveVipStatus(target);
  2053. +                   activeChar.sendMessage(target.getName() + "'s VIP Status has been removed.");
  2054. +               }
  2055. +               else
  2056. +                   activeChar.sendMessage("Player " +target.getName() + " is not an VIP.");
  2057. +           }
  2058. +       }
  2059. +       return true;
  2060. +   }
  2061. +  
  2062. +   public static void AddVipStatus(L2PcInstance target, L2PcInstance player, int time)
  2063. +   {
  2064. +       target.broadcastPacket(new SocialAction(target, 16));
  2065. +       target.setVipStatus(true);
  2066. +       VipTimeTaskManager.getInstance().add(target);
  2067. +       long remainingTime = target.getMemos().getLong("TimeOfVip", 0);
  2068. +       if (remainingTime > 0)
  2069. +       {
  2070. +           target.getMemos().set("TimeOfVip", remainingTime + TimeUnit.DAYS.toMillis(time));
  2071. +           target.sendPacket(new CreatureSay(0, Say2.HERO_VOICE, "VIP Manager", "Dear " + player.getName() + ", your VIP status has been extended by " + time + " day(s)."));
  2072. +       }
  2073. +       else
  2074. +       {
  2075. +           target.getMemos().set("TimeOfVip", System.currentTimeMillis() + TimeUnit.DAYS.toMillis(time));
  2076. +           target.sendPacket(new CreatureSay(0, Say2.HERO_VOICE, "VIP Manager", "Dear " + player.getName() + ", you got VIP Status for " + time + " day(s)."));
  2077. +           target.broadcastUserInfo();
  2078. +       }
  2079. +   }
  2080. +  
  2081. +   public static void RemoveVipStatus(L2PcInstance target)
  2082. +   {
  2083. +       VipTimeTaskManager.getInstance().remove(target);
  2084. +       target.getMemos().set("TimeOfVip", 0);
  2085. +       target.setVipStatus(false);
  2086. +       target.broadcastPacket(new SocialAction(target, 13));
  2087. +       target.broadcastUserInfo();
  2088. +   }
  2089. +  
  2090. +   @Override
  2091. +   public String[] getAdminCommandList()
  2092. +   {
  2093. +       return _adminCommands;
  2094. +   }
  2095. +}
  2096. Index: config/multishop.properties
  2097. ===================================================================
  2098. --- config/multishop.properties (nonexistent)
  2099. +++ config/multishop.properties (working copy)
  2100. @@ -0,0 +1,41 @@
  2101. +#=============================================================
  2102. +# Multi Shop Npc Manager ID 50008
  2103. +#=============================================================
  2104. +# Add the Item ID for Donate Coin
  2105. +DonateItemId = 57
  2106. +
  2107. +# Bellow you can add the price of Donate Coins
  2108. +# Make your character Noblesse
  2109. +NoblesseItemCount = 100
  2110. +# Change the Gender of the player
  2111. +SexItemCount = 100
  2112. +# Clean Characters PKs.
  2113. +PkItemCount = 100
  2114. +# How much Pk for clean?
  2115. +PkCleanValue = 50
  2116. +# Level up the player clan
  2117. +ClanItemCount = 100
  2118. +# Give clan reps to the clan
  2119. +ClanRepsCount = 100
  2120. +ClanReps = 20000
  2121. +# Add augment skills
  2122. +AugmentionItemCount = 100
  2123. +# Add Full clan skills
  2124. +ClanSkillsItemCount = 100
  2125. +# Give full recs to players
  2126. +RecItemCount = 100
  2127. +# Change the password
  2128. +PasswordItemCount = 100
  2129. +# Change the name color
  2130. +ColorItemCount = 100
  2131. +# Change the player name
  2132. +NameItemCount = 100
  2133. +# Full enchant Items
  2134. +EnchantItemCount = 100
  2135. +MaxEnchantValue = 15
  2136. +# Change the Main class of the players
  2137. +ClassItemCount = 100
  2138. +# Set price for Vip Days
  2139. +Vip7DaysItemCount = 100
  2140. +Vip15DaysItemCount = 100
  2141. +Vip30DaysItemCount = 100
  2142. \ No newline at end of file
  2143. Index: java/net/sf/l2j/gameserver/taskmanager/VipTimeTaskManager.java
  2144. ===================================================================
  2145. --- java/net/sf/l2j/gameserver/taskmanager/VipTimeTaskManager.java  (nonexistent)
  2146. +++ java/net/sf/l2j/gameserver/taskmanager/VipTimeTaskManager.java  (working copy)
  2147. @@ -0,0 +1,75 @@
  2148. +/*
  2149. + * This program is free software: you can redistribute it and/or modify it under
  2150. + * the terms of the GNU General Public License as published by the Free Software
  2151. + * Foundation, either version 3 of the License, or (at your option) any later
  2152. + * version.
  2153. + *
  2154. + * This program is distributed in the hope that it will be useful, but WITHOUT
  2155. + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
  2156. + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
  2157. + * details.
  2158. + *
  2159. + * You should have received a copy of the GNU General Public License along with
  2160. + * this program. If not, see <http://www.gnu.org/licenses/>.
  2161. + */
  2162. +package net.sf.l2j.gameserver.taskmanager;
  2163. +
  2164. +import java.util.Map;
  2165. +import java.util.concurrent.ConcurrentHashMap;
  2166. +
  2167. +import net.sf.l2j.commons.concurrent.ThreadPool;
  2168. +import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminVipStatus;
  2169. +import net.sf.l2j.gameserver.model.actor.L2Character;
  2170. +import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
  2171. +
  2172. +/**
  2173. + * @author Baggos
  2174. + */
  2175. +public class VipTimeTaskManager implements Runnable
  2176. +{
  2177. +   private final Map<L2PcInstance, Long> _players = new ConcurrentHashMap<>();
  2178. +  
  2179. +   protected VipTimeTaskManager()
  2180. +   {
  2181. +       // Run task each 10 second.
  2182. +       ThreadPool.scheduleAtFixedRate(this, 10000, 10000);
  2183. +   }
  2184. +  
  2185. +   public final void add(L2PcInstance player)
  2186. +   {
  2187. +       _players.put(player, System.currentTimeMillis());
  2188. +   }
  2189. +  
  2190. +   public final void remove(L2Character player)
  2191. +   {
  2192. +       _players.remove(player);
  2193. +   }
  2194. +  
  2195. +   @Override
  2196. +   public final void run()
  2197. +   {
  2198. +       if (_players.isEmpty())
  2199. +           return;
  2200. +      
  2201. +       for (Map.Entry<L2PcInstance, Long> entry : _players.entrySet())
  2202. +       {
  2203. +           final L2PcInstance player = entry.getKey();
  2204. +          
  2205. +           if (player.getMemos().getLong("TimeOfVip") < System.currentTimeMillis())
  2206. +           {
  2207. +               AdminVipStatus.RemoveVipStatus(player);
  2208. +               remove(player);
  2209. +           }
  2210. +       }
  2211. +   }
  2212. +  
  2213. +   public static final VipTimeTaskManager getInstance()
  2214. +   {
  2215. +       return SingletonHolder._instance;
  2216. +   }
  2217. +  
  2218. +   private static class SingletonHolder
  2219. +   {
  2220. +       protected static final VipTimeTaskManager _instance = new VipTimeTaskManager();
  2221. +   }
  2222. +}
  2223. Index: java/net/sf/l2j/gameserver/network/clientpackets/RequestBypassToServer.java
  2224. ===================================================================
  2225. --- java/net/sf/l2j/gameserver/network/clientpackets/RequestBypassToServer.java (revision 6)
  2226. +++ java/net/sf/l2j/gameserver/network/clientpackets/RequestBypassToServer.java (working copy)
  2227. @@ -25,6 +25,7 @@
  2228.  import net.sf.l2j.gameserver.model.L2Object;
  2229.  import net.sf.l2j.gameserver.model.L2World;
  2230.  import net.sf.l2j.gameserver.model.actor.L2Npc;
  2231. +import net.sf.l2j.gameserver.model.actor.instance.L2MultiShopInstance;
  2232.  import net.sf.l2j.gameserver.model.actor.instance.L2OlympiadManagerInstance;
  2233.  import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
  2234.  import net.sf.l2j.gameserver.model.entity.Hero;
  2235. @@ -162,6 +163,8 @@
  2236.                 if (heroid > 0)
  2237.                     Hero.getInstance().showHeroDiary(activeChar, heroclass, heroid, heropage);
  2238.             }
  2239. +           else if (_command.startsWith("base"))
  2240. +               L2MultiShopInstance.Classes(_command, activeChar);
  2241.             else if (_command.startsWith("arenachange")) // change
  2242.             {
  2243.                 final boolean isManager = activeChar.getCurrentFolkNPC() instanceof L2OlympiadManagerInstance;
  2244. Index: java/net/sf/l2j/gameserver/handler/AdminCommandHandler.java
  2245. ===================================================================
  2246. --- java/net/sf/l2j/gameserver/handler/AdminCommandHandler.java (revision 6)
  2247. +++ java/net/sf/l2j/gameserver/handler/AdminCommandHandler.java (working copy)
  2248. @@ -62,6 +62,7 @@
  2249.  import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminSpawn;
  2250.  import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminTarget;
  2251.  import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminTeleport;
  2252. +import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminVipStatus;
  2253.  import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminZone;
  2254.  
  2255.  public class AdminCommandHandler
  2256. @@ -121,6 +122,7 @@
  2257.         registerAdminCommandHandler(new AdminTarget());
  2258.         registerAdminCommandHandler(new AdminTeleport());
  2259.         registerAdminCommandHandler(new AdminZone());
  2260. +       registerAdminCommandHandler(new AdminVipStatus());
  2261.     }
  2262.    
  2263.     public void registerAdminCommandHandler(IAdminCommandHandler handler)
  2264. #P aCis_datapackk
  2265. Index: data/xml/skills/2100-2199.xml
  2266. ===================================================================
  2267. --- data/xml/skills/2100-2199.xml   (revision 6)
  2268. +++ data/xml/skills/2100-2199.xml   (working copy)
  2269. @@ -1,8 +1,8 @@
  2270.  <?xml version='1.0' encoding='utf-8'?>
  2271.  <list>
  2272. -   <skill id="2100" levels="1" name="Escape: 1 second">
  2273. +   <skill id="2100" levels="1" name="Escape: 5 second">
  2274.         <set name="target" val="TARGET_SELF" />
  2275. -       <set name="hitTime" val="1000" />
  2276. +       <set name="hitTime" val="5000" />
  2277.         <set name="staticHitTime" val="true" />
  2278.         <set name="skillType" val="RECALL" />
  2279.         <set name="operateType" val="OP_ACTIVE" />
  2280. Index: data/xml/npcs/MultiShop.xml
  2281. ===================================================================
  2282. --- data/xml/npcs/MultiShop.xml (nonexistent)
  2283. +++ data/xml/npcs/MultiShop.xml (working copy)
  2284. @@ -0,0 +1,39 @@
  2285. +<?xml version="1.0" encoding="utf-8"?>
  2286. +<list>
  2287. +       <npc id="50091" idTemplate="30540" name="MULTI SHOP" title="L2jNetwork.com">
  2288. +       <set name="level" val="70"/>
  2289. +       <set name="radius" val="8"/>
  2290. +       <set name="height" val="20.5"/>
  2291. +       <set name="rHand" val="0"/>
  2292. +       <set name="lHand" val="0"/>
  2293. +       <set name="type" val="L2MultiShop"/>
  2294. +       <set name="exp" val="0"/>
  2295. +       <set name="sp" val="0"/>
  2296. +       <set name="hp" val="2444.46819"/>
  2297. +       <set name="mp" val="1345.8"/>
  2298. +       <set name="hpRegen" val="7.5"/>
  2299. +       <set name="mpRegen" val="2.7"/>
  2300. +       <set name="pAtk" val="688.86373"/>
  2301. +       <set name="pDef" val="295.91597"/>
  2302. +       <set name="mAtk" val="470.40463"/>
  2303. +       <set name="mDef" val="216.53847"/>
  2304. +       <set name="crit" val="4"/>
  2305. +       <set name="atkSpd" val="253"/>
  2306. +       <set name="str" val="40"/>
  2307. +       <set name="int" val="21"/>
  2308. +       <set name="dex" val="30"/>
  2309. +       <set name="wit" val="20"/>
  2310. +       <set name="con" val="43"/>
  2311. +       <set name="men" val="20"/>
  2312. +       <set name="corpseTime" val="7"/>
  2313. +       <set name="walkSpd" val="50"/>
  2314. +       <set name="runSpd" val="120"/>
  2315. +       <set name="dropHerbGroup" val="0"/>
  2316. +       <set name="attackRange" val="40"/>
  2317. +       <ai type="DEFAULT" ssCount="0" ssRate="0" spsCount="0" spsRate="0" aggro="0" canMove="true" seedable="false"/>
  2318. +       <skills>
  2319. +           <skill id="4045" level="1"/>
  2320. +           <skill id="4416" level="14"/>
  2321. +       </skills>
  2322. +   </npc>
  2323. +</list>
  2324. \ No newline at end of file
  2325. Index: data/html/mods/donateNpc/50091-2.htm
  2326. ===================================================================
  2327. --- data/html/mods/donateNpc/50091-2.htm    (nonexistent)
  2328. +++ data/html/mods/donateNpc/50091-2.htm    (working copy)
  2329. @@ -0,0 +1,77 @@
  2330. +<html>
  2331. +<body>
  2332. +<title>Main Class Changer</title>
  2333. +<center>
  2334. +
  2335. +<table border="1" width="296" height="65" bgcolor="000000">
  2336. +<tr>
  2337. +<td width=99 align=center>Change the main class of your character!<br1>
  2338. +You cannot change your class while:<br1>
  2339. +You're with sub class or olympiad register.</td>
  2340. +</tr>
  2341. +</table>
  2342. +<br>
  2343. +
  2344. +<center><button value="Duelist" action="bypass -h base_duelist" width=134 height=21 back="L2UI_ch3.BigButton3_over" fore="L2UI_ch3.BigButton3">
  2345. +<br>
  2346. +<center><button value="Dreadnought" action="bypass -h base_dreadnought" width=134 height=21 back="L2UI_ch3.BigButton3_over" fore="L2UI_ch3.BigButton3">
  2347. +<br>
  2348. +<center><button value="Phoenix Knight" action="bypass -h base_phoenix" width=134 height=21 back="L2UI_ch3.BigButton3_over" fore="L2UI_ch3.BigButton3">
  2349. +<br>
  2350. +<center><button value="Hell Knight" action="bypass -h base_hell" width=134 height=21 back="L2UI_ch3.BigButton3_over" fore="L2UI_ch3.BigButton3">
  2351. +<br>
  2352. +<center><button value="Sagittarius" action="bypass -h base_sagittarius" width=134 height=21 back="L2UI_ch3.BigButton3_over" fore="L2UI_ch3.BigButton3">
  2353. +<br>
  2354. +<center><button value="Adventurer" action="bypass -h base_adventurer" width=134 height=21 back="L2UI_ch3.BigButton3_over" fore="L2UI_ch3.BigButton3">
  2355. +<br>
  2356. +<center><button value="Archmage" action="bypass -h base_archmage" width=134 height=21 back="L2UI_ch3.BigButton3_over" fore="L2UI_ch3.BigButton3">
  2357. +<br>
  2358. +<center><button value="Soultaker" action="bypass -h base_soultaker" width=134 height=21 back="L2UI_ch3.BigButton3_over" fore="L2UI_ch3.BigButton3">
  2359. +<br>
  2360. +<center><button value="Arcana Lord" action="bypass -h base_arcana" width=134 height=21 back="L2UI_ch3.BigButton3_over" fore="L2UI_ch3.BigButton3">
  2361. +<br>
  2362. +<center><button value="Cardinal" action="bypass -h base_cardinal" width=134 height=21 back="L2UI_ch3.BigButton3_over" fore="L2UI_ch3.BigButton3">
  2363. +<br>
  2364. +<center><button value="Hierophant" action="bypass -h base_hierophant" width=134 height=21 back="L2UI_ch3.BigButton3_over" fore="L2UI_ch3.BigButton3">
  2365. +<br>
  2366. +<center><button value="Evas Templar" action="bypass -h base_evas" width=134 height=21 back="L2UI_ch3.BigButton3_over" fore="L2UI_ch3.BigButton3">
  2367. +<br>
  2368. +<center><button value="Sword Muse" action="bypass -h base_muse" width=134 height=21 back="L2UI_ch3.BigButton3_over" fore="L2UI_ch3.BigButton3">
  2369. +<br>
  2370. +<center><button value="Wind Rider" action="bypass -h base_windrider" width=134 height=21 back="L2UI_ch3.BigButton3_over" fore="L2UI_ch3.BigButton3">
  2371. +<br>
  2372. +<center><button value="Moonlight Sentinel" action="bypass -h base_sentinel" width=134 height=21 back="L2UI_ch3.BigButton3_over" fore="L2UI_ch3.BigButton3">
  2373. +<br>
  2374. +<center><button value="Mystic Muse" action="bypass -h base_mystic" width=134 height=21 back="L2UI_ch3.BigButton3_over" fore="L2UI_ch3.BigButton3">
  2375. +<br>
  2376. +<center><button value="Elemental Master" action="bypass -h base_elemental" width=134 height=21 back="L2UI_ch3.BigButton3_over" fore="L2UI_ch3.BigButton3">
  2377. +<br>
  2378. +<center><button value="Evas Saint" action="bypass -h base_saint" width=134 height=21 back="L2UI_ch3.BigButton3_over" fore="L2UI_ch3.BigButton3">
  2379. +<br>
  2380. +<center><button value="Shillien Templar" action="bypass -h base_templar" width=134 height=21 back="L2UI_ch3.BigButton3_over" fore="L2UI_ch3.BigButton3">
  2381. +<br>
  2382. +<center><button value="Spectral Dancer" action="bypass -h base_dancer" width=134 height=21 back="L2UI_ch3.BigButton3_over" fore="L2UI_ch3.BigButton3">
  2383. +<br>
  2384. +<center><button value="Ghost Hunter" action="bypass -h base_hunter" width=134 height=21 back="L2UI_ch3.BigButton3_over" fore="L2UI_ch3.BigButton3">
  2385. +<br>
  2386. +<center><button value="Ghost Sentinel" action="bypass -h base_gsentinel" width=134 height=21 back="L2UI_ch3.BigButton3_over" fore="L2UI_ch3.BigButton3">
  2387. +<br>
  2388. +<center><button value="Storm Screamer" action="bypass -h base_screamer" width=134 height=21 back="L2UI_ch3.BigButton3_over" fore="L2UI_ch3.BigButton3">
  2389. +<br>
  2390. +<center><button value="Spectral Master" action="bypass -h base_master" width=134 height=21 back="L2UI_ch3.BigButton3_over" fore="L2UI_ch3.BigButton3">
  2391. +<br>
  2392. +<center><button value="Shillien Saint" action="bypass -h base_ssaint" width=134 height=21 back="L2UI_ch3.BigButton3_over" fore="L2UI_ch3.BigButton3">
  2393. +<br>
  2394. +<center><button value="Titan" action="bypass -h base_titan" width=134 height=21 back="L2UI_ch3.BigButton3_over" fore="L2UI_ch3.BigButton3">
  2395. +<br>
  2396. +<center><button value="Grand Khavatari" action="bypass -h base_khavatari" width=134 height=21 back="L2UI_ch3.BigButton3_over" fore="L2UI_ch3.BigButton3">
  2397. +<br>
  2398. +<center><button value="Dominator" action="bypass -h base_domi" width=134 height=21 back="L2UI_ch3.BigButton3_over" fore="L2UI_ch3.BigButton3">
  2399. +<br>
  2400. +<center><button value="Doomcryer" action="bypass -h base_doom" width=134 height=21 back="L2UI_ch3.BigButton3_over" fore="L2UI_ch3.BigButton3">
  2401. +<br>
  2402. +<center><button value="Fortune Seeker" action="bypass -h base_fortune" width=134 height=21 back="L2UI_ch3.BigButton3_over" fore="L2UI_ch3.BigButton3">
  2403. +<br>
  2404. +<center><button value="Maestro" action="bypass -h base_maestro" width=134 height=21 back="L2UI_ch3.BigButton3_over" fore="L2UI_ch3.BigButton3">
  2405. +
  2406. +</body></html>
  2407. \ No newline at end of file
  2408. Index: data/html/mods/donateNpc/50091.htm
  2409. ===================================================================
  2410. --- data/html/mods/donateNpc/50091.htm  (nonexistent)
  2411. +++ data/html/mods/donateNpc/50091.htm  (working copy)
  2412. @@ -0,0 +1,150 @@
  2413. +<html>
  2414. +<title>
  2415. +Donate Manager
  2416. +</title>
  2417. +<body>
  2418. +<br>
  2419. +<table width=300 height=32 bgcolor=000000>
  2420. +<tr>
  2421. +<td fixwidth=5>
  2422. +</td>
  2423. +<td fixwidth=32 height=42>
  2424. +       <center><button value="" action="bypass -h npc_%objectId%_donate $dona" width=32 height=32 back="L2UI_CH3.Minimap.mapbutton_zoomin1" fore="icon.skill0434">
  2425. +
  2426. +</td>
  2427. +<td fixwidth=250>
  2428. +<center><font color=F2F5A9>Character Services:</font>
  2429. +       <center><combobox width=120 height=17 var="dona" list=Noblesse;ChangeSex;CleanPk;FullRec;ChangeClass;
  2430. +</td>
  2431. +<td fixwidth=50>
  2432. +</td>
  2433. +</tr>
  2434. +</table>
  2435. +
  2436. +<table width=300 height=32 bgcolor=000000>
  2437. +<tr>
  2438. +<td fixwidth=5>
  2439. +</td>
  2440. +<td fixwidth=32 height=42><br>
  2441. +       <center><button value="" action="bypass -h npc_%objectId%_clan $clan" width=32 height=32 back="L2UI_CH3.Minimap.mapbutton_zoomin1" fore="icon.skill0391">
  2442. +
  2443. +</td>
  2444. +<td fixwidth=250>
  2445. +<br>
  2446. +<center><font color=F2F5A9>Clan Services:</font>
  2447. +       <center><combobox width=120 height=17 var="clan" list=ClanLevel;ClanRep_20k;ClanSkills
  2448. +</td>
  2449. +<td fixwidth=50>
  2450. +</td>
  2451. +</tr>
  2452. +</table>
  2453. +
  2454. +<table width=300 height=32 bgcolor=000000>
  2455. +<tr>
  2456. +<td fixwidth=5>
  2457. +</td>
  2458. +<td fixwidth=32 height=42>
  2459. +       <center><button value="" action="bypass -h npc_%objectId%_siege $siege" width=32 height=32 back="L2UI_CH3.Minimap.mapbutton_zoomin1" fore="icon.skill0216">
  2460. +</td>
  2461. +<td fixwidth=250>
  2462. +<br>
  2463. +<center><font color=F2F5A9>Siege Services:</font>
  2464. +       <center><combobox width=120 height=17 var="siege" list=Gludio;Dion;Giran;Oren;Aden;Innadril;Goddard;Rune;Schuttgart;
  2465. +</td>
  2466. +<td fixwidth=50>
  2467. +</td>
  2468. +</tr>
  2469. +</table>
  2470. +
  2471. +<table width=300 height=32 bgcolor=000000>
  2472. +<tr>
  2473. +<td fixwidth=5>
  2474. +</td>
  2475. +<td fixwidth=32 height=42>
  2476. +       <center><button value="" action="bypass -h npc_%objectId%_active $active" width=32 height=32 back="L2UI_CH3.Minimap.mapbutton_zoomin1" fore="icon.skill3123">
  2477. +</td>
  2478. +<td fixwidth=250>
  2479. +<br>
  2480. +<center><font color=F2F5A9>Augment Services [Active]:</font>
  2481. +       <center><combobox width=120 height=17 var="active" list=Might;Empower;DuelMight;Shield;MagicBarrier;WildMagic;Focus;BattleRoad;SolarFlare;Guidance;BlessedBody;Agility;Heal;HydroBlast;AuraFlare;Hurricane;ReflectDamage;Prominence;
  2482. +</td>
  2483. +<td fixwidth=50>
  2484. +</td>
  2485. +</tr>
  2486. +</table>
  2487. +
  2488. +<table width=300 height=32 bgcolor=000000>
  2489. +<tr>
  2490. +<td fixwidth=5>
  2491. +</td>
  2492. +<td fixwidth=32 height=42>
  2493. +       <center><button value="" action="bypass -h npc_%objectId%_passive $passive" width=32 height=32 back="L2UI_CH3.Minimap.mapbutton_zoomin1" fore="icon.skill3238">
  2494. +</td>
  2495. +<td fixwidth=250>
  2496. +<br>
  2497. +<center><font color=F2F5A9>Augment Services [Passive]:</font>
  2498. +       <center><combobox width=120 height=17 var="passive" list=Empower;DuelMight;Might;Shield;MagicBarrier;Agility;Guidance;Focus;WildMagic;ReflectDamage;Prayer;Clarity;
  2499. +</td>
  2500. +<td fixwidth=50>
  2501. +</td>
  2502. +</tr>
  2503. +</table>
  2504. +
  2505. +<table width=300 height=32 bgcolor=000000>
  2506. +<tr>
  2507. +<td fixwidth=5>
  2508. +</td>
  2509. +<td fixwidth=32 height=42>
  2510. +<center><button action="bypass -h npc_%objectId%_color $color" value="" width=32 height=32 back="L2UI_CH3.Minimap.mapbutton_zoomin1" fore="icon.skill0106">
  2511. +</td>
  2512. +<td fixwidth=250>
  2513. +<br>
  2514. +<center><font color=F2F5A9>Change Color:</font>
  2515. +       <center><combobox width=120 height=17 var="color" list=Green;Blue;Purple;Yellow;Gold;
  2516. +</td>
  2517. +<td fixwidth=50>
  2518. +</td>
  2519. +</tr>
  2520. +</table>
  2521. +
  2522. +<table width=300 height=32 bgcolor=000000>
  2523. +<tr>
  2524. +<td fixwidth=5>
  2525. +</td>
  2526. +<td fixwidth=32 height=42>
  2527. +<center><button value="" action="bypass -h npc_%objectId%_vip $vip" width=32 height=32 back="L2UI_CH3.Minimap.mapbutton_zoomin1" fore="icon.skill0212">
  2528. +</td>
  2529. +<td fixwidth=250>
  2530. +<br>
  2531. +<center><font color=F2F5A9>Vip Services:</font>
  2532. +       <center><combobox width=120 height=17 var="vip" list=Vip7Days;Vip15Days;Vip30Days;
  2533. +</td>
  2534. +<td fixwidth=50>
  2535. +</td>
  2536. +</tr>
  2537. +</table>
  2538. +
  2539. +<table width=300 height=32 bgcolor=000000>
  2540. +<tr>
  2541. +<td fixwidth=5>
  2542. +</td>
  2543. +<td fixwidth=32 height=42>
  2544. +</td>
  2545. +<td fixwidth=250>
  2546. +<br>
  2547. +<center><a action="bypass -h npc_%objectId%_Chat 1">Page 2</a></center>
  2548. +</td>
  2549. +<td fixwidth=50>
  2550. +</td>
  2551. +</tr>
  2552. +</table>
  2553. +
  2554. +<table width=300 height=22 bgcolor=000000>
  2555. +<tr>
  2556. +<td fixwidth=5>
  2557. +</td>
  2558. +<td fixwidth=300 height=10>
  2559. +</td>
  2560. +</tr>
  2561. +</table>
  2562. +</body></html>
  2563. \ No newline at end of file
  2564. Index: data/html/mods/donateNpc/50091-1.htm
  2565. ===================================================================
  2566. --- data/html/mods/donateNpc/50091-1.htm    (nonexistent)
  2567. +++ data/html/mods/donateNpc/50091-1.htm    (working copy)
  2568. @@ -0,0 +1,115 @@
  2569. +<html>
  2570. +<title>
  2571. +Donate Manager
  2572. +</title>
  2573. +<body>
  2574. +<br>
  2575. +
  2576. +<table width=300 height=32 bgcolor=000000>
  2577. +<tr>
  2578. +<td fixwidth=5>
  2579. +</td>
  2580. +<td fixwidth=32 height=42>
  2581. +<button action="bypass -h npc_%objectId%_partytp $val" value="" value="" width=32 height=32 back="L2UI_CH3.Minimap.mapbutton_zoomin1" fore="icon.skill1429">
  2582. +</td>
  2583. +<td fixwidth=250>
  2584. +<center><font color=F2F5A9>Teleport to your party member:</font>
  2585. +<center><edit var="val" width=120></td>
  2586. +<td fixwidth=50>
  2587. +</td>
  2588. +</tr>
  2589. +</table>
  2590. +
  2591. +<table width=300 height=32 bgcolor=000000>
  2592. +<tr>
  2593. +<td fixwidth=5>
  2594. +</td>
  2595. +<td fixwidth=32 height=42>
  2596. +<button action="bypass -h npc_%objectId%_teleport $clan" value="" value="" width=32 height=32 back="L2UI_CH3.Minimap.mapbutton_zoomin1" fore="icon.skill1429">
  2597. +</td>
  2598. +<td fixwidth=250>
  2599. +<center><font color=F2F5A9>Teleport to your Clan member:</font>
  2600. +<center><edit var="clan" width=120></td>
  2601. +<td fixwidth=50>
  2602. +</td>
  2603. +</tr>
  2604. +</table>
  2605. +
  2606. +<table width=300 height=32 bgcolor=000000>
  2607. +<tr>
  2608. +<td fixwidth=5>
  2609. +</td>
  2610. +<td fixwidth=32 height=42>
  2611. +<button action="bypass -h npc_%objectId%_name $newName" width=32 height=32 back="L2UI_CH3.Minimap.mapbutton_zoomin1" fore="icon.skill1430">
  2612. +</td>
  2613. +<td fixwidth=250>
  2614. +<center><font color=F2F5A9>Change your character name:</font>
  2615. +<center><edit var="newName" width=120></td>
  2616. +<td fixwidth=50>
  2617. +</td>
  2618. +</tr>
  2619. +</table>
  2620. +
  2621. +<table width=300 height=32 bgcolor=000000>
  2622. +<tr>
  2623. +<td fixwidth=5>
  2624. +</td>
  2625. +<td fixwidth=32 height=42>
  2626. +<button action="bypass -h npc_%objectId%_enchant $ench" value="" width=32 height=32 back="L2UI_CH3.Minimap.mapbutton_zoomin1" fore="icon.skill1400">
  2627. +</td>
  2628. +<td fixwidth=250>
  2629. +<br>
  2630. +<center><font color=F2F5A9>Enchant Services [Max]:</font>
  2631. +       <center><combobox width=120 height=17 var="ench" list=Tattoo;Weapon;Helmet;Boots;Gloves;Chest;Legs;Shield;Necklace;R-Ring;L-Ring;R-Earring;L-Earring;
  2632. +</td>
  2633. +<td fixwidth=50>
  2634. +</td>
  2635. +</tr>
  2636. +</table>
  2637. +
  2638. +
  2639. +<table width=300 height=32 bgcolor=000000>
  2640. +<tr>
  2641. +<td fixwidth=5>
  2642. +</td>
  2643. +<td fixwidth=32 height=42>
  2644. +<button action="bypass -h npc_%objectId%_password $newPass $repeatNewPass" value="" width=32 height=32 back="L2UI_CH3.Minimap.mapbutton_zoomin1" fore="icon.skill1409">
  2645. +</td>
  2646. +<td fixwidth=250>
  2647. +<br>
  2648. +<center><font color=F2F5A9>Change Password:</font>
  2649. +<center><edit var="newPass" width=120>
  2650. +<center><edit var="repeatNewPass" width=120></td>
  2651. +<td fixwidth=50>
  2652. +</td>
  2653. +</tr>
  2654. +</table>
  2655. +
  2656. +<table width=300 height=20 bgcolor=000000>
  2657. +<tr>
  2658. +<td fixwidth=5>
  2659. +</td>
  2660. +<td fixwidth=300 height=30>
  2661. +</td>
  2662. +</tr>
  2663. +</table>
  2664. +
  2665. +<table width=300 height=20 bgcolor=000000>
  2666. +<tr>
  2667. +<td fixwidth=5>
  2668. +</td>
  2669. +<td fixwidth=300 height=30>
  2670. +</td>
  2671. +</tr>
  2672. +</table>
  2673. +
  2674. +<table width=300 height=20 bgcolor=000000>
  2675. +<tr>
  2676. +<td fixwidth=5>
  2677. +</td>
  2678. +<td fixwidth=300 height=45>
  2679. +</td>
  2680. +</tr>
  2681. +</table>
  2682. +
  2683. +</body></html>
  2684. \ No newline at end of file
  2685. Index: data/html/mods/donateNpc/50091-2.htm
  2686. ===================================================================
  2687. --- data/html/mods/donateNpc/50091-2.htm    (nonexistent)
  2688. +++ data/html/mods/donateNpc/50091-2.htm    (working copy)
  2689. @@ -0,0 +1,77 @@
  2690. +<html>
  2691. +<body>
  2692. +<title>Main Class Changer</title>
  2693. +<center>
  2694. +
  2695. +<table border="1" width="296" height="65" bgcolor="000000">
  2696. +<tr>
  2697. +<td width=99 align=center>Change the main class of your character!<br1>
  2698. +You cannot change your class while:<br1>
  2699. +You're with sub class or olympiad register.</td>
  2700. +</tr>
  2701. +</table>
  2702. +<br>
  2703. +
  2704. +<center><button value="Duelist" action="bypass -h base_duelist" width=134 height=21 back="L2UI_ch3.BigButton3_over" fore="L2UI_ch3.BigButton3">
  2705. +<br>
  2706. +<center><button value="Dreadnought" action="bypass -h base_dreadnought" width=134 height=21 back="L2UI_ch3.BigButton3_over" fore="L2UI_ch3.BigButton3">
  2707. +<br>
  2708. +<center><button value="Phoenix Knight" action="bypass -h base_phoenix" width=134 height=21 back="L2UI_ch3.BigButton3_over" fore="L2UI_ch3.BigButton3">
  2709. +<br>
  2710. +<center><button value="Hell Knight" action="bypass -h base_hell" width=134 height=21 back="L2UI_ch3.BigButton3_over" fore="L2UI_ch3.BigButton3">
  2711. +<br>
  2712. +<center><button value="Sagittarius" action="bypass -h base_sagittarius" width=134 height=21 back="L2UI_ch3.BigButton3_over" fore="L2UI_ch3.BigButton3">
  2713. +<br>
  2714. +<center><button value="Adventurer" action="bypass -h base_adventurer" width=134 height=21 back="L2UI_ch3.BigButton3_over" fore="L2UI_ch3.BigButton3">
  2715. +<br>
  2716. +<center><button value="Archmage" action="bypass -h base_archmage" width=134 height=21 back="L2UI_ch3.BigButton3_over" fore="L2UI_ch3.BigButton3">
  2717. +<br>
  2718. +<center><button value="Soultaker" action="bypass -h base_soultaker" width=134 height=21 back="L2UI_ch3.BigButton3_over" fore="L2UI_ch3.BigButton3">
  2719. +<br>
  2720. +<center><button value="Arcana Lord" action="bypass -h base_arcana" width=134 height=21 back="L2UI_ch3.BigButton3_over" fore="L2UI_ch3.BigButton3">
  2721. +<br>
  2722. +<center><button value="Cardinal" action="bypass -h base_cardinal" width=134 height=21 back="L2UI_ch3.BigButton3_over" fore="L2UI_ch3.BigButton3">
  2723. +<br>
  2724. +<center><button value="Hierophant" action="bypass -h base_hierophant" width=134 height=21 back="L2UI_ch3.BigButton3_over" fore="L2UI_ch3.BigButton3">
  2725. +<br>
  2726. +<center><button value="Evas Templar" action="bypass -h base_evas" width=134 height=21 back="L2UI_ch3.BigButton3_over" fore="L2UI_ch3.BigButton3">
  2727. +<br>
  2728. +<center><button value="Sword Muse" action="bypass -h base_muse" width=134 height=21 back="L2UI_ch3.BigButton3_over" fore="L2UI_ch3.BigButton3">
  2729. +<br>
  2730. +<center><button value="Wind Rider" action="bypass -h base_windrider" width=134 height=21 back="L2UI_ch3.BigButton3_over" fore="L2UI_ch3.BigButton3">
  2731. +<br>
  2732. +<center><button value="Moonlight Sentinel" action="bypass -h base_sentinel" width=134 height=21 back="L2UI_ch3.BigButton3_over" fore="L2UI_ch3.BigButton3">
  2733. +<br>
  2734. +<center><button value="Mystic Muse" action="bypass -h base_mystic" width=134 height=21 back="L2UI_ch3.BigButton3_over" fore="L2UI_ch3.BigButton3">
  2735. +<br>
  2736. +<center><button value="Elemental Master" action="bypass -h base_elemental" width=134 height=21 back="L2UI_ch3.BigButton3_over" fore="L2UI_ch3.BigButton3">
  2737. +<br>
  2738. +<center><button value="Evas Saint" action="bypass -h base_saint" width=134 height=21 back="L2UI_ch3.BigButton3_over" fore="L2UI_ch3.BigButton3">
  2739. +<br>
  2740. +<center><button value="Shillien Templar" action="bypass -h base_templar" width=134 height=21 back="L2UI_ch3.BigButton3_over" fore="L2UI_ch3.BigButton3">
  2741. +<br>
  2742. +<center><button value="Spectral Dancer" action="bypass -h base_dancer" width=134 height=21 back="L2UI_ch3.BigButton3_over" fore="L2UI_ch3.BigButton3">
  2743. +<br>
  2744. +<center><button value="Ghost Hunter" action="bypass -h base_hunter" width=134 height=21 back="L2UI_ch3.BigButton3_over" fore="L2UI_ch3.BigButton3">
  2745. +<br>
  2746. +<center><button value="Ghost Sentinel" action="bypass -h base_gsentinel" width=134 height=21 back="L2UI_ch3.BigButton3_over" fore="L2UI_ch3.BigButton3">
  2747. +<br>
  2748. +<center><button value="Storm Screamer" action="bypass -h base_screamer" width=134 height=21 back="L2UI_ch3.BigButton3_over" fore="L2UI_ch3.BigButton3">
  2749. +<br>
  2750. +<center><button value="Spectral Master" action="bypass -h base_master" width=134 height=21 back="L2UI_ch3.BigButton3_over" fore="L2UI_ch3.BigButton3">
  2751. +<br>
  2752. +<center><button value="Shillien Saint" action="bypass -h base_ssaint" width=134 height=21 back="L2UI_ch3.BigButton3_over" fore="L2UI_ch3.BigButton3">
  2753. +<br>
  2754. +<center><button value="Titan" action="bypass -h base_titan" width=134 height=21 back="L2UI_ch3.BigButton3_over" fore="L2UI_ch3.BigButton3">
  2755. +<br>
  2756. +<center><button value="Grand Khavatari" action="bypass -h base_khavatari" width=134 height=21 back="L2UI_ch3.BigButton3_over" fore="L2UI_ch3.BigButton3">
  2757. +<br>
  2758. +<center><button value="Dominator" action="bypass -h base_domi" width=134 height=21 back="L2UI_ch3.BigButton3_over" fore="L2UI_ch3.BigButton3">
  2759. +<br>
  2760. +<center><button value="Doomcryer" action="bypass -h base_doom" width=134 height=21 back="L2UI_ch3.BigButton3_over" fore="L2UI_ch3.BigButton3">
  2761. +<br>
  2762. +<center><button value="Fortune Seeker" action="bypass -h base_fortune" width=134 height=21 back="L2UI_ch3.BigButton3_over" fore="L2UI_ch3.BigButton3">
  2763. +<br>
  2764. +<center><button value="Maestro" action="bypass -h base_maestro" width=134 height=21 back="L2UI_ch3.BigButton3_over" fore="L2UI_ch3.BigButton3">
  2765. +
  2766. +</body></html>
  2767. \ No newline at end of file
  2768. Index: data/html/mods/donateNpc/50091.htm
  2769. ===================================================================
  2770. --- data/html/mods/donateNpc/50091.htm  (nonexistent)
  2771. +++ data/html/mods/donateNpc/50091.htm  (working copy)
  2772. @@ -0,0 +1,150 @@
  2773. +<html>
  2774. +<title>
  2775. +Donate Manager
  2776. +</title>
  2777. +<body>
  2778. +<br>
  2779. +<table width=300 height=32 bgcolor=000000>
  2780. +<tr>
  2781. +<td fixwidth=5>
  2782. +</td>
  2783. +<td fixwidth=32 height=42>
  2784. +       <center><button value="" action="bypass -h npc_%objectId%_donate $dona" width=32 height=32 back="L2UI_CH3.Minimap.mapbutton_zoomin1" fore="icon.skill0434">
  2785. +
  2786. +</td>
  2787. +<td fixwidth=250>
  2788. +<center><font color=F2F5A9>Character Services:</font>
  2789. +       <center><combobox width=120 height=17 var="dona" list=Noblesse;ChangeSex;CleanPk;FullRec;ChangeClass;
  2790. +</td>
  2791. +<td fixwidth=50>
  2792. +</td>
  2793. +</tr>
  2794. +</table>
  2795. +
  2796. +<table width=300 height=32 bgcolor=000000>
  2797. +<tr>
  2798. +<td fixwidth=5>
  2799. +</td>
  2800. +<td fixwidth=32 height=42><br>
  2801. +       <center><button value="" action="bypass -h npc_%objectId%_clan $clan" width=32 height=32 back="L2UI_CH3.Minimap.mapbutton_zoomin1" fore="icon.skill0391">
  2802. +
  2803. +</td>
  2804. +<td fixwidth=250>
  2805. +<br>
  2806. +<center><font color=F2F5A9>Clan Services:</font>
  2807. +       <center><combobox width=120 height=17 var="clan" list=ClanLevel;ClanRep_20k;ClanSkills
  2808. +</td>
  2809. +<td fixwidth=50>
  2810. +</td>
  2811. +</tr>
  2812. +</table>
  2813. +
  2814. +<table width=300 height=32 bgcolor=000000>
  2815. +<tr>
  2816. +<td fixwidth=5>
  2817. +</td>
  2818. +<td fixwidth=32 height=42>
  2819. +       <center><button value="" action="bypass -h npc_%objectId%_siege $siege" width=32 height=32 back="L2UI_CH3.Minimap.mapbutton_zoomin1" fore="icon.skill0216">
  2820. +</td>
  2821. +<td fixwidth=250>
  2822. +<br>
  2823. +<center><font color=F2F5A9>Siege Services:</font>
  2824. +       <center><combobox width=120 height=17 var="siege" list=Gludio;Dion;Giran;Oren;Aden;Innadril;Goddard;Rune;Schuttgart;
  2825. +</td>
  2826. +<td fixwidth=50>
  2827. +</td>
  2828. +</tr>
  2829. +</table>
  2830. +
  2831. +<table width=300 height=32 bgcolor=000000>
  2832. +<tr>
  2833. +<td fixwidth=5>
  2834. +</td>
  2835. +<td fixwidth=32 height=42>
  2836. +       <center><button value="" action="bypass -h npc_%objectId%_active $active" width=32 height=32 back="L2UI_CH3.Minimap.mapbutton_zoomin1" fore="icon.skill3123">
  2837. +</td>
  2838. +<td fixwidth=250>
  2839. +<br>
  2840. +<center><font color=F2F5A9>Augment Services [Active]:</font>
  2841. +       <center><combobox width=120 height=17 var="active" list=Might;Empower;DuelMight;Shield;MagicBarrier;WildMagic;Focus;BattleRoad;SolarFlare;Guidance;BlessedBody;Agility;Heal;HydroBlast;AuraFlare;Hurricane;ReflectDamage;Prominence;
  2842. +</td>
  2843. +<td fixwidth=50>
  2844. +</td>
  2845. +</tr>
  2846. +</table>
  2847. +
  2848. +<table width=300 height=32 bgcolor=000000>
  2849. +<tr>
  2850. +<td fixwidth=5>
  2851. +</td>
  2852. +<td fixwidth=32 height=42>
  2853. +       <center><button value="" action="bypass -h npc_%objectId%_passive $passive" width=32 height=32 back="L2UI_CH3.Minimap.mapbutton_zoomin1" fore="icon.skill3238">
  2854. +</td>
  2855. +<td fixwidth=250>
  2856. +<br>
  2857. +<center><font color=F2F5A9>Augment Services [Passive]:</font>
  2858. +       <center><combobox width=120 height=17 var="passive" list=Empower;DuelMight;Might;Shield;MagicBarrier;Agility;Guidance;Focus;WildMagic;ReflectDamage;Prayer;Clarity;
  2859. +</td>
  2860. +<td fixwidth=50>
  2861. +</td>
  2862. +</tr>
  2863. +</table>
  2864. +
  2865. +<table width=300 height=32 bgcolor=000000>
  2866. +<tr>
  2867. +<td fixwidth=5>
  2868. +</td>
  2869. +<td fixwidth=32 height=42>
  2870. +<center><button action="bypass -h npc_%objectId%_color $color" value="" width=32 height=32 back="L2UI_CH3.Minimap.mapbutton_zoomin1" fore="icon.skill0106">
  2871. +</td>
  2872. +<td fixwidth=250>
  2873. +<br>
  2874. +<center><font color=F2F5A9>Change Color:</font>
  2875. +       <center><combobox width=120 height=17 var="color" list=Green;Blue;Purple;Yellow;Gold;
  2876. +</td>
  2877. +<td fixwidth=50>
  2878. +</td>
  2879. +</tr>
  2880. +</table>
  2881. +
  2882. +<table width=300 height=32 bgcolor=000000>
  2883. +<tr>
  2884. +<td fixwidth=5>
  2885. +</td>
  2886. +<td fixwidth=32 height=42>
  2887. +<center><button value="" action="bypass -h npc_%objectId%_vip $vip" width=32 height=32 back="L2UI_CH3.Minimap.mapbutton_zoomin1" fore="icon.skill0212">
  2888. +</td>
  2889. +<td fixwidth=250>
  2890. +<br>
  2891. +<center><font color=F2F5A9>Vip Services:</font>
  2892. +       <center><combobox width=120 height=17 var="vip" list=Vip7Days;Vip15Days;Vip30Days;
  2893. +</td>
  2894. +<td fixwidth=50>
  2895. +</td>
  2896. +</tr>
  2897. +</table>
  2898. +
  2899. +<table width=300 height=32 bgcolor=000000>
  2900. +<tr>
  2901. +<td fixwidth=5>
  2902. +</td>
  2903. +<td fixwidth=32 height=42>
  2904. +</td>
  2905. +<td fixwidth=250>
  2906. +<br>
  2907. +<center><a action="bypass -h npc_%objectId%_Chat 1">Page 2</a></center>
  2908. +</td>
  2909. +<td fixwidth=50>
  2910. +</td>
  2911. +</tr>
  2912. +</table>
  2913. +
  2914. +<table width=300 height=22 bgcolor=000000>
  2915. +<tr>
  2916. +<td fixwidth=5>
  2917. +</td>
  2918. +<td fixwidth=300 height=10>
  2919. +</td>
  2920. +</tr>
  2921. +</table>
  2922. +</body></html>
  2923. \ No newline at end of file
  2924. Index: sql/characters.sql
  2925. ===================================================================
  2926. --- sql/characters.sql  (revision 6)
  2927. +++ sql/characters.sql  (working copy)
  2928. @@ -54,6 +54,7 @@
  2929.    `clan_join_expiry_time` BIGINT UNSIGNED NOT NULL DEFAULT 0,
  2930.    `clan_create_expiry_time` BIGINT UNSIGNED NOT NULL DEFAULT 0,
  2931.    `death_penalty_level` SMALLINT UNSIGNED NOT NULL DEFAULT 0,
  2932. +  `color` SMALLINT UNSIGNED NOT NULL DEFAULT 0,
  2933.    PRIMARY KEY (obj_Id),
  2934.    KEY `clanid` (`clanid`)
  2935.  );
  2936. \ No newline at end of file
  2937. Index: data/html/mods/donateNpc/50091-1.htm
  2938. ===================================================================
  2939. --- data/html/mods/donateNpc/50091-1.htm    (nonexistent)
  2940. +++ data/html/mods/donateNpc/50091-1.htm    (working copy)
  2941. @@ -0,0 +1,115 @@
  2942. +<html>
  2943. +<title>
  2944. +Donate Manager
  2945. +</title>
  2946. +<body>
  2947. +<br>
  2948. +
  2949. +<table width=300 height=32 bgcolor=000000>
  2950. +<tr>
  2951. +<td fixwidth=5>
  2952. +</td>
  2953. +<td fixwidth=32 height=42>
  2954. +<button action="bypass -h npc_%objectId%_partytp $val" value="" value="" width=32 height=32 back="L2UI_CH3.Minimap.mapbutton_zoomin1" fore="icon.skill1429">
  2955. +</td>
  2956. +<td fixwidth=250>
  2957. +<center><font color=F2F5A9>Teleport to your party member:</font>
  2958. +<center><edit var="val" width=120></td>
  2959. +<td fixwidth=50>
  2960. +</td>
  2961. +</tr>
  2962. +</table>
  2963. +
  2964. +<table width=300 height=32 bgcolor=000000>
  2965. +<tr>
  2966. +<td fixwidth=5>
  2967. +</td>
  2968. +<td fixwidth=32 height=42>
  2969. +<button action="bypass -h npc_%objectId%_teleport $clan" value="" value="" width=32 height=32 back="L2UI_CH3.Minimap.mapbutton_zoomin1" fore="icon.skill1429">
  2970. +</td>
  2971. +<td fixwidth=250>
  2972. +<center><font color=F2F5A9>Teleport to your Clan member:</font>
  2973. +<center><edit var="clan" width=120></td>
  2974. +<td fixwidth=50>
  2975. +</td>
  2976. +</tr>
  2977. +</table>
  2978. +
  2979. +<table width=300 height=32 bgcolor=000000>
  2980. +<tr>
  2981. +<td fixwidth=5>
  2982. +</td>
  2983. +<td fixwidth=32 height=42>
  2984. +<button action="bypass -h npc_%objectId%_name $newName" width=32 height=32 back="L2UI_CH3.Minimap.mapbutton_zoomin1" fore="icon.skill1430">
  2985. +</td>
  2986. +<td fixwidth=250>
  2987. +<center><font color=F2F5A9>Change your character name:</font>
  2988. +<center><edit var="newName" width=120></td>
  2989. +<td fixwidth=50>
  2990. +</td>
  2991. +</tr>
  2992. +</table>
  2993. +
  2994. +<table width=300 height=32 bgcolor=000000>
  2995. +<tr>
  2996. +<td fixwidth=5>
  2997. +</td>
  2998. +<td fixwidth=32 height=42>
  2999. +<button action="bypass -h npc_%objectId%_enchant $ench" value="" width=32 height=32 back="L2UI_CH3.Minimap.mapbutton_zoomin1" fore="icon.skill1400">
  3000. +</td>
  3001. +<td fixwidth=250>
  3002. +<br>
  3003. +<center><font color=F2F5A9>Enchant Services [Max]:</font>
  3004. +       <center><combobox width=120 height=17 var="ench" list=Tattoo;Weapon;Helmet;Boots;Gloves;Chest;Legs;Shield;Necklace;R-Ring;L-Ring;R-Earring;L-Earring;
  3005. +</td>
  3006. +<td fixwidth=50>
  3007. +</td>
  3008. +</tr>
  3009. +</table>
  3010. +
  3011. +
  3012. +<table width=300 height=32 bgcolor=000000>
  3013. +<tr>
  3014. +<td fixwidth=5>
  3015. +</td>
  3016. +<td fixwidth=32 height=42>
  3017. +<button action="bypass -h npc_%objectId%_password $newPass $repeatNewPass" value="" width=32 height=32 back="L2UI_CH3.Minimap.mapbutton_zoomin1" fore="icon.skill1409">
  3018. +</td>
  3019. +<td fixwidth=250>
  3020. +<br>
  3021. +<center><font color=F2F5A9>Change Password:</font>
  3022. +<center><edit var="newPass" width=120>
  3023. +<center><edit var="repeatNewPass" width=120></td>
  3024. +<td fixwidth=50>
  3025. +</td>
  3026. +</tr>
  3027. +</table>
  3028. +
  3029. +<table width=300 height=20 bgcolor=000000>
  3030. +<tr>
  3031. +<td fixwidth=5>
  3032. +</td>
  3033. +<td fixwidth=300 height=30>
  3034. +</td>
  3035. +</tr>
  3036. +</table>
  3037. +
  3038. +<table width=300 height=20 bgcolor=000000>
  3039. +<tr>
  3040. +<td fixwidth=5>
  3041. +</td>
  3042. +<td fixwidth=300 height=30>
  3043. +</td>
  3044. +</tr>
  3045. +</table>
  3046. +
  3047. +<table width=300 height=20 bgcolor=000000>
  3048. +<tr>
  3049. +<td fixwidth=5>
  3050. +</td>
  3051. +<td fixwidth=300 height=45>
  3052. +</td>
  3053. +</tr>
  3054. +</table>
  3055. +
  3056. +</body></html>
  3057. \ No newline at end of file
Add Comment
Please, Sign In to add comment