MasterOfEnchanting.java 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282
  1. /*
  2. * Copyright (C) 2004-2015 L2J DataPack
  3. *
  4. * This file is part of L2J DataPack.
  5. *
  6. * L2J DataPack is free software: you can redistribute it and/or modify
  7. * it under the terms of the GNU General Public License as published by
  8. * the Free Software Foundation, either version 3 of the License, or
  9. * (at your option) any later version.
  10. *
  11. * L2J DataPack is distributed in the hope that it will be useful,
  12. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  14. * General Public License for more details.
  15. *
  16. * You should have received a copy of the GNU General Public License
  17. * along with this program. If not, see <http://www.gnu.org/licenses/>.
  18. */
  19. package events.MasterOfEnchanting;
  20. import java.util.Date;
  21. import com.l2jserver.gameserver.model.actor.L2Npc;
  22. import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
  23. import com.l2jserver.gameserver.model.event.LongTimeEvent;
  24. import com.l2jserver.gameserver.model.itemcontainer.Inventory;
  25. import com.l2jserver.gameserver.network.SystemMessageId;
  26. import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
  27. /**
  28. * Master of Enchanting event AI.
  29. * @author Gnacik
  30. */
  31. public final class MasterOfEnchanting extends LongTimeEvent
  32. {
  33. // NPC
  34. private static final int MASTER_YOGI = 32599;
  35. // Items
  36. private static final int MASTER_YOGI_STAFF = 13539;
  37. private static final int MASTER_YOGI_SCROLL = 13540;
  38. // Misc
  39. private static final int STAFF_PRICE = 1000000;
  40. private static final int SCROLL_24_PRICE = 5000000;
  41. private static final int SCROLL_24_TIME = 6;
  42. private static final int SCROLL_1_PRICE = 500000;
  43. private static final int SCROLL_10_PRICE = 5000000;
  44. private static final int[] HAT_SHADOW_REWARD =
  45. {
  46. 13074,
  47. 13075,
  48. 13076
  49. };
  50. private static final int[] HAT_EVENT_REWARD =
  51. {
  52. 13518,
  53. 13519,
  54. 13522
  55. };
  56. private static final int[] CRYSTAL_REWARD =
  57. {
  58. 9570,
  59. 9571,
  60. 9572
  61. };
  62. @SuppressWarnings("deprecation")
  63. private static final Date EVENT_START = new Date(2011, 7, 1);
  64. private MasterOfEnchanting()
  65. {
  66. super(MasterOfEnchanting.class.getSimpleName(), "events");
  67. addStartNpc(MASTER_YOGI);
  68. addFirstTalkId(MASTER_YOGI);
  69. addTalkId(MASTER_YOGI);
  70. }
  71. @Override
  72. public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
  73. {
  74. String htmltext = event;
  75. if (event.equalsIgnoreCase("buy_staff"))
  76. {
  77. if (!hasQuestItems(player, MASTER_YOGI_STAFF) && (getQuestItemsCount(player, Inventory.ADENA_ID) > STAFF_PRICE))
  78. {
  79. takeItems(player, Inventory.ADENA_ID, STAFF_PRICE);
  80. giveItems(player, MASTER_YOGI_STAFF, 1);
  81. htmltext = "32599-staffbuyed.htm";
  82. }
  83. else
  84. {
  85. htmltext = "32599-staffcant.htm";
  86. }
  87. }
  88. else if (event.equalsIgnoreCase("buy_scroll_24"))
  89. {
  90. long curTime = System.currentTimeMillis();
  91. String value = loadGlobalQuestVar(player.getAccountName());
  92. long reuse = value == "" ? 0 : Long.parseLong(value);
  93. if (player.getCreateDate().after(EVENT_START))
  94. {
  95. return "32599-bidth.htm";
  96. }
  97. if (curTime > reuse)
  98. {
  99. if (getQuestItemsCount(player, Inventory.ADENA_ID) > SCROLL_24_PRICE)
  100. {
  101. takeItems(player, Inventory.ADENA_ID, SCROLL_24_PRICE);
  102. giveItems(player, MASTER_YOGI_SCROLL, 24);
  103. saveGlobalQuestVar(player.getAccountName(), Long.toString(System.currentTimeMillis() + (SCROLL_24_TIME * 3600000)));
  104. htmltext = "32599-scroll24.htm";
  105. }
  106. else
  107. {
  108. htmltext = "32599-s24-no.htm";
  109. }
  110. }
  111. else
  112. {
  113. long remainingTime = (reuse - curTime) / 1000;
  114. int hours = (int) remainingTime / 3600;
  115. int minutes = ((int) remainingTime % 3600) / 60;
  116. if (hours > 0)
  117. {
  118. SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.ITEM_PURCHASABLE_IN_S1_HOURS_S2_MINUTES);
  119. sm.addInt(hours);
  120. sm.addInt(minutes);
  121. player.sendPacket(sm);
  122. htmltext = "32599-scroll24.htm";
  123. }
  124. else if (minutes > 0)
  125. {
  126. SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.ITEM_PURCHASABLE_IN_S1_MINUTES);
  127. sm.addInt(minutes);
  128. player.sendPacket(sm);
  129. htmltext = "32599-scroll24.htm";
  130. }
  131. else
  132. {
  133. // Little glitch. There is no SystemMessage with seconds only.
  134. // If time is less than 1 minute player can buy scrolls
  135. if (getQuestItemsCount(player, Inventory.ADENA_ID) > SCROLL_24_PRICE)
  136. {
  137. takeItems(player, Inventory.ADENA_ID, SCROLL_24_PRICE);
  138. giveItems(player, MASTER_YOGI_SCROLL, 24);
  139. saveGlobalQuestVar(player.getAccountName(), Long.toString(System.currentTimeMillis() + (SCROLL_24_TIME * 3600000)));
  140. htmltext = "32599-scroll24.htm";
  141. }
  142. else
  143. {
  144. htmltext = "32599-s24-no.htm";
  145. }
  146. }
  147. }
  148. }
  149. else if (event.equalsIgnoreCase("buy_scroll_1"))
  150. {
  151. if (getQuestItemsCount(player, Inventory.ADENA_ID) > SCROLL_1_PRICE)
  152. {
  153. takeItems(player, Inventory.ADENA_ID, SCROLL_1_PRICE);
  154. giveItems(player, MASTER_YOGI_SCROLL, 1);
  155. htmltext = "32599-scroll-ok.htm";
  156. }
  157. else
  158. {
  159. htmltext = "32599-s1-no.htm";
  160. }
  161. }
  162. else if (event.equalsIgnoreCase("buy_scroll_10"))
  163. {
  164. if (getQuestItemsCount(player, Inventory.ADENA_ID) > SCROLL_10_PRICE)
  165. {
  166. takeItems(player, Inventory.ADENA_ID, SCROLL_10_PRICE);
  167. giveItems(player, MASTER_YOGI_SCROLL, 10);
  168. htmltext = "32599-scroll-ok.htm";
  169. }
  170. else
  171. {
  172. htmltext = "32599-s10-no.htm";
  173. }
  174. }
  175. else if (event.equalsIgnoreCase("receive_reward"))
  176. {
  177. if ((getItemEquipped(player, Inventory.PAPERDOLL_RHAND) == MASTER_YOGI_STAFF) && (getEnchantLevel(player, MASTER_YOGI_STAFF) > 3))
  178. {
  179. switch (getEnchantLevel(player, MASTER_YOGI_STAFF))
  180. {
  181. case 4:
  182. giveItems(player, 6406, 1); // Firework
  183. break;
  184. case 5:
  185. giveItems(player, 6406, 2); // Firework
  186. giveItems(player, 6407, 1); // Large Firework
  187. break;
  188. case 6:
  189. giveItems(player, 6406, 3); // Firework
  190. giveItems(player, 6407, 2); // Large Firework
  191. break;
  192. case 7:
  193. giveItems(player, HAT_SHADOW_REWARD[getRandom(3)], 1);
  194. break;
  195. case 8:
  196. giveItems(player, 955, 1); // Scroll: Enchant Weapon (D)
  197. break;
  198. case 9:
  199. giveItems(player, 955, 1); // Scroll: Enchant Weapon (D)
  200. giveItems(player, 956, 1); // Scroll: Enchant Armor (D)
  201. break;
  202. case 10:
  203. giveItems(player, 951, 1); // Scroll: Enchant Weapon (C)
  204. break;
  205. case 11:
  206. giveItems(player, 951, 1); // Scroll: Enchant Weapon (C)
  207. giveItems(player, 952, 1); // Scroll: Enchant Armor (C)
  208. break;
  209. case 12:
  210. giveItems(player, 948, 1); // Scroll: Enchant Armor (B)
  211. break;
  212. case 13:
  213. giveItems(player, 729, 1); // Scroll: Enchant Weapon (A)
  214. break;
  215. case 14:
  216. giveItems(player, HAT_EVENT_REWARD[getRandom(3)], 1);
  217. break;
  218. case 15:
  219. giveItems(player, 13992, 1); // Grade S Accessory Chest (Event)
  220. break;
  221. case 16:
  222. giveItems(player, 8762, 1); // Top-Grade Life Stone: level 76
  223. break;
  224. case 17:
  225. giveItems(player, 959, 1); // Scroll: Enchant Weapon (S)
  226. break;
  227. case 18:
  228. giveItems(player, 13991, 1); // Grade S Armor Chest (Event)
  229. break;
  230. case 19:
  231. giveItems(player, 13990, 1); // Grade S Weapon Chest (Event)
  232. break;
  233. case 20:
  234. giveItems(player, CRYSTAL_REWARD[getRandom(3)], 1); // Red/Blue/Green Soul Crystal - Stage 14
  235. break;
  236. case 21:
  237. giveItems(player, 8762, 1); // Top-Grade Life Stone: level 76
  238. giveItems(player, 8752, 1); // High-Grade Life Stone: level 76
  239. giveItems(player, CRYSTAL_REWARD[getRandom(3)], 1); // Red/Blue/Green Soul Crystal - Stage 14
  240. break;
  241. case 22:
  242. giveItems(player, 13989, 1); // S80 Grade Armor Chest (Event)
  243. break;
  244. case 23:
  245. giveItems(player, 13988, 1); // S80 Grade Weapon Chest (Event)
  246. default:
  247. if (getEnchantLevel(player, MASTER_YOGI_STAFF) > 23)
  248. {
  249. giveItems(player, 13988, 1); // S80 Grade Weapon Chest (Event)
  250. }
  251. break;
  252. }
  253. takeItems(player, MASTER_YOGI_STAFF, 1);
  254. htmltext = "32599-rewardok.htm";
  255. }
  256. else
  257. {
  258. htmltext = "32599-rewardnostaff.htm";
  259. }
  260. }
  261. return htmltext;
  262. }
  263. @Override
  264. public String onFirstTalk(L2Npc npc, L2PcInstance player)
  265. {
  266. return npc.getId() + ".htm";
  267. }
  268. public static void main(String[] args)
  269. {
  270. new MasterOfEnchanting();
  271. }
  272. }