Q00625_TheFinestIngredientsPart2.java 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287
  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 quests.Q00625_TheFinestIngredientsPart2;
  20. import com.l2jserver.gameserver.datatables.SpawnTable;
  21. import com.l2jserver.gameserver.model.Location;
  22. import com.l2jserver.gameserver.model.actor.L2Npc;
  23. import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
  24. import com.l2jserver.gameserver.model.holders.ItemHolder;
  25. import com.l2jserver.gameserver.model.quest.Quest;
  26. import com.l2jserver.gameserver.model.quest.QuestState;
  27. import com.l2jserver.gameserver.network.NpcStringId;
  28. import com.l2jserver.gameserver.network.clientpackets.Say2;
  29. import com.l2jserver.gameserver.network.serverpackets.NpcSay;
  30. import com.l2jserver.gameserver.util.Util;
  31. /**
  32. * The Finest Ingredients Part - 2 (625)
  33. * @author Janiko
  34. */
  35. public final class Q00625_TheFinestIngredientsPart2 extends Quest
  36. {
  37. // NPCs
  38. private static final int JEREMY = 31521;
  39. private static final int YETIS_TABLE = 31542;
  40. // Monster
  41. private static final int ICICLE_EMPEROR_BUMBALUMP = 25296;
  42. // Required Item
  43. private static final ItemHolder SOY_SOURCE_JAR = new ItemHolder(7205, 1);
  44. // Quest Items
  45. private static final ItemHolder FOOD_FOR_BUMBALUMP = new ItemHolder(7209, 1);
  46. private static final ItemHolder SPECIAL_YETI_MEAT = new ItemHolder(7210, 1);
  47. // Rewards
  48. private static final ItemHolder GREATER_DYE_OF_STR_1 = new ItemHolder(4589, 5);
  49. private static final ItemHolder GREATER_DYE_OF_STR_2 = new ItemHolder(4590, 5);
  50. private static final ItemHolder GREATER_DYE_OF_CON_1 = new ItemHolder(4591, 5);
  51. private static final ItemHolder GREATER_DYE_OF_CON_2 = new ItemHolder(4592, 5);
  52. private static final ItemHolder GREATER_DYE_OF_DEX_1 = new ItemHolder(4593, 5);
  53. private static final ItemHolder GREATER_DYE_OF_DEX_2 = new ItemHolder(4594, 5);
  54. // Location
  55. private static final Location ICICLE_EMPEROR_BUMBALUMP_LOC = new Location(158240, -121536, -2222);
  56. // Misc
  57. private static final int MIN_LVL = 73;
  58. public Q00625_TheFinestIngredientsPart2()
  59. {
  60. super(625, Q00625_TheFinestIngredientsPart2.class.getSimpleName(), "The Finest Ingredients - Part 2");
  61. addStartNpc(JEREMY);
  62. addTalkId(JEREMY, YETIS_TABLE);
  63. addSpawnId(ICICLE_EMPEROR_BUMBALUMP);
  64. addKillId(ICICLE_EMPEROR_BUMBALUMP);
  65. registerQuestItems(FOOD_FOR_BUMBALUMP.getId(), SPECIAL_YETI_MEAT.getId());
  66. }
  67. @Override
  68. public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
  69. {
  70. final QuestState qs = getQuestState(player, false);
  71. String htmltext = null;
  72. if (qs == null)
  73. {
  74. return htmltext;
  75. }
  76. switch (event)
  77. {
  78. case "31521-04.htm":
  79. {
  80. if (qs.isCreated())
  81. {
  82. qs.startQuest();
  83. takeItem(player, SOY_SOURCE_JAR);
  84. giveItems(player, FOOD_FOR_BUMBALUMP);
  85. htmltext = event;
  86. }
  87. break;
  88. }
  89. case "31521-08.html":
  90. {
  91. if (qs.isCond(3))
  92. {
  93. if (hasItem(player, SPECIAL_YETI_MEAT))
  94. {
  95. int random = getRandom(1000);
  96. if (random < 167)
  97. {
  98. rewardItems(player, GREATER_DYE_OF_STR_1);
  99. }
  100. else if (random < 334)
  101. {
  102. rewardItems(player, GREATER_DYE_OF_STR_2);
  103. }
  104. else if (random < 501)
  105. {
  106. rewardItems(player, GREATER_DYE_OF_CON_1);
  107. }
  108. else if (random < 668)
  109. {
  110. rewardItems(player, GREATER_DYE_OF_CON_2);
  111. }
  112. else if (random < 835)
  113. {
  114. rewardItems(player, GREATER_DYE_OF_DEX_1);
  115. }
  116. else if (random < 1000)
  117. {
  118. rewardItems(player, GREATER_DYE_OF_DEX_2);
  119. }
  120. qs.exitQuest(false, true);
  121. htmltext = event;
  122. }
  123. else
  124. {
  125. htmltext = "31521-09.html";
  126. }
  127. }
  128. break;
  129. }
  130. case "31542-02.html":
  131. {
  132. if (qs.isCond(1))
  133. {
  134. if (hasItem(player, FOOD_FOR_BUMBALUMP))
  135. {
  136. if (!isBumbalumpSpawned())
  137. {
  138. qs.setCond(2, true);
  139. takeItem(player, FOOD_FOR_BUMBALUMP);
  140. L2Npc umpaloopa = addSpawn(ICICLE_EMPEROR_BUMBALUMP, ICICLE_EMPEROR_BUMBALUMP_LOC);
  141. umpaloopa.setSummoner(player);
  142. htmltext = event;
  143. }
  144. else
  145. {
  146. htmltext = "31542-03.html";
  147. }
  148. }
  149. else
  150. {
  151. htmltext = "31542-04.html";
  152. }
  153. }
  154. break;
  155. }
  156. case "NPC_TALK":
  157. {
  158. if (isBumbalumpSpawned())
  159. {
  160. npc.broadcastPacket(new NpcSay(npc.getObjectId(), Say2.NPC_ALL, npc.getTemplate().getDisplayId(), NpcStringId.OOOH));
  161. }
  162. break;
  163. }
  164. }
  165. return htmltext;
  166. }
  167. @Override
  168. public String onTalk(L2Npc npc, L2PcInstance talker)
  169. {
  170. final QuestState qs = getQuestState(talker, true);
  171. String htmltext = getNoQuestMsg(talker);
  172. switch (npc.getId())
  173. {
  174. case JEREMY:
  175. {
  176. if (qs.isCreated())
  177. {
  178. if (talker.getLevel() >= MIN_LVL)
  179. {
  180. htmltext = (hasItem(talker, SOY_SOURCE_JAR)) ? "31521-01.htm" : "31521-02.htm";
  181. }
  182. else
  183. {
  184. htmltext = "31521-03.htm";
  185. }
  186. }
  187. else if (qs.isStarted())
  188. {
  189. switch (qs.getCond())
  190. {
  191. case 1:
  192. {
  193. htmltext = "31521-05.html";
  194. break;
  195. }
  196. case 2:
  197. {
  198. htmltext = "31521-06.html";
  199. break;
  200. }
  201. case 3:
  202. {
  203. htmltext = "31521-07.html";
  204. break;
  205. }
  206. }
  207. }
  208. else if (qs.isCompleted())
  209. {
  210. htmltext = getAlreadyCompletedMsg(talker);
  211. }
  212. break;
  213. }
  214. case YETIS_TABLE:
  215. {
  216. switch (qs.getCond())
  217. {
  218. case 1:
  219. {
  220. if (hasItem(talker, FOOD_FOR_BUMBALUMP))
  221. {
  222. htmltext = "31542-01.html";
  223. }
  224. break;
  225. }
  226. case 2:
  227. {
  228. if (!isBumbalumpSpawned())
  229. {
  230. L2Npc umpaloopa = addSpawn(ICICLE_EMPEROR_BUMBALUMP, ICICLE_EMPEROR_BUMBALUMP_LOC);
  231. umpaloopa.setSummoner(talker);
  232. htmltext = "31542-02.html";
  233. }
  234. else
  235. {
  236. htmltext = "31542-03.html";
  237. }
  238. break;
  239. }
  240. case 3:
  241. {
  242. htmltext = "31542-05.html";
  243. break;
  244. }
  245. }
  246. break;
  247. }
  248. }
  249. return htmltext;
  250. }
  251. @Override
  252. public String onSpawn(L2Npc npc)
  253. {
  254. startQuestTimer("NPC_TALK", 1000 * 1200, npc, null);
  255. npc.broadcastPacket(new NpcSay(npc.getObjectId(), Say2.NPC_ALL, npc.getTemplate().getDisplayId(), NpcStringId.I_SMELL_SOMETHING_DELICIOUS));
  256. return super.onSpawn(npc);
  257. }
  258. @Override
  259. public String onKill(L2Npc npc, L2PcInstance killer, boolean isSummon)
  260. {
  261. final QuestState qs = getRandomPartyMemberState(killer, 1, 2, npc);
  262. if ((qs != null) && Util.checkIfInRange(1500, npc, killer, true))
  263. {
  264. if (npc.getSummoner() == killer)
  265. {
  266. qs.setCond(3, true);
  267. giveItems(qs.getPlayer(), SPECIAL_YETI_MEAT);
  268. }
  269. }
  270. return super.onKill(npc, killer, isSummon);
  271. }
  272. private static boolean isBumbalumpSpawned()
  273. {
  274. return SpawnTable.getInstance().findAny(ICICLE_EMPEROR_BUMBALUMP) != null;
  275. }
  276. }