Q00420_LittleWing.java 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886
  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.Q00420_LittleWing;
  20. import java.util.Arrays;
  21. import java.util.HashMap;
  22. import java.util.List;
  23. import java.util.Map;
  24. import com.l2jserver.gameserver.enums.QuestSound;
  25. import com.l2jserver.gameserver.model.actor.L2Npc;
  26. import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
  27. import com.l2jserver.gameserver.model.quest.Quest;
  28. import com.l2jserver.gameserver.model.quest.QuestState;
  29. import com.l2jserver.gameserver.model.quest.State;
  30. import com.l2jserver.gameserver.network.NpcStringId;
  31. import com.l2jserver.gameserver.network.clientpackets.Say2;
  32. import com.l2jserver.gameserver.network.serverpackets.NpcSay;
  33. /**
  34. * Little Wing (420)
  35. * @author Pandragon
  36. */
  37. public final class Q00420_LittleWing extends Quest
  38. {
  39. // NPCs
  40. private static final int MARIA = 30608;
  41. private static final int CRONOS = 30610;
  42. private static final int BYRON = 30711;
  43. private static final int MIMYU = 30747;
  44. private static final int EXARION = 30748;
  45. private static final int ZWOV = 30749;
  46. private static final int KALIBRAN = 30750;
  47. private static final int SUZET = 30751;
  48. private static final int SHAMHAI = 30752;
  49. private static final int COOPER = 30829;
  50. // Items
  51. private static final int COAL = 1870;
  52. private static final int CHARCOAL = 1871;
  53. private static final int SILVER_NUGGET = 1873;
  54. private static final int STONE_OF_PURITY = 1875;
  55. private static final int GEMSTONE_D = 2130;
  56. private static final int GEMSTONE_C = 2131;
  57. private static final int FAIRY_DUST = 3499;
  58. private static final int FAIRY_STONE = 3816;
  59. private static final int DELUXE_FAIRY_STONE = 3817;
  60. private static final int FAIRY_STONE_LIST = 3818;
  61. private static final int DELUXE_STONE_LIST = 3819;
  62. private static final int TOAD_SKIN = 3820;
  63. private static final int MONKSHOOD_JUICE = 3821;
  64. private static final int EXARION_SCALE = 3822;
  65. private static final int EXARION_EGG = 3823;
  66. private static final int ZWOV_SCALE = 3824;
  67. private static final int ZWOV_EGG = 3825;
  68. private static final int KALIBRAN_SCALE = 3826;
  69. private static final int KALIBRAN_EGG = 3827;
  70. private static final int SUZET_SCALE = 3828;
  71. private static final int SUZET_EGG = 3829;
  72. private static final int SHAMHAI_SCALE = 3830;
  73. private static final int SHAMHAI_EGG = 3831;
  74. // Monsters
  75. private static final int DEAD_SEEKER = 20202;
  76. private static final int TOAD_LORD = 20231;
  77. private static final int MARSH_SPIDER = 20233;
  78. private static final int BREKA_OVERLORD = 20270;
  79. private static final int ROAD_SCAVENGER = 20551;
  80. private static final int LETO_WARRIOR = 20580;
  81. private static final int[] DELUXE_STONE_BREAKERS =
  82. {
  83. 20589, // Fline
  84. 20590, // Liele
  85. 20591, // Valley Treant
  86. 20592, // Satyr
  87. 20593, // Unicorn
  88. 20594, // Forest Runner
  89. 20595, // Fline Elder
  90. 20596, // Liele Elder
  91. 20597, // Valley Treant Elder
  92. 20598, // Satyr Elder
  93. 20599, // Unicorn Elder
  94. 27185, // Fairy Tree of Wind (Quest Monster)
  95. 27186, // Fairy Tree of Star (Quest Monster)
  96. 27187, // Fairy Tree of Twilight (Quest Monster)
  97. 27188, // Fairy Tree of Abyss (Quest Monster)
  98. 27189, // Soul of Tree Guardian (Quest Monster)
  99. };
  100. // Rewards
  101. private static final int DRAGONFLUTE_OF_WIND = 3500;
  102. private static final int DRAGONFLUTE_OF_STAR = 3501;
  103. private static final int DRAGONFLUTE_OF_TWILIGHT = 3502;
  104. private static final int HATCHLING_ARMOR = 3912;
  105. private static final int HATCHLING_FOOD = 4038;
  106. private static final List<Integer> EGGS = Arrays.asList(EXARION_EGG, SUZET_EGG, KALIBRAN_EGG, SHAMHAI_EGG, ZWOV_EGG);
  107. // Drake Drops
  108. private static final Map<Integer, Integer> EGG_DROPS = new HashMap<>();
  109. {
  110. EGG_DROPS.put(DEAD_SEEKER, SHAMHAI_EGG);
  111. EGG_DROPS.put(MARSH_SPIDER, ZWOV_EGG);
  112. EGG_DROPS.put(BREKA_OVERLORD, SUZET_EGG);
  113. EGG_DROPS.put(ROAD_SCAVENGER, KALIBRAN_EGG);
  114. EGG_DROPS.put(LETO_WARRIOR, EXARION_EGG);
  115. }
  116. // Misc
  117. private static final int MIN_LVL = 35;
  118. public Q00420_LittleWing()
  119. {
  120. super(420, Q00420_LittleWing.class.getSimpleName(), "Little Wing");
  121. addStartNpc(COOPER);
  122. addTalkId(MARIA, CRONOS, BYRON, MIMYU, EXARION, ZWOV, KALIBRAN, SUZET, SHAMHAI, COOPER);
  123. addAttackId(DELUXE_STONE_BREAKERS);
  124. addKillId(TOAD_LORD, DEAD_SEEKER, MARSH_SPIDER, BREKA_OVERLORD, ROAD_SCAVENGER, LETO_WARRIOR);
  125. registerQuestItems(FAIRY_DUST, FAIRY_STONE, DELUXE_FAIRY_STONE, FAIRY_STONE_LIST, DELUXE_STONE_LIST, TOAD_SKIN, MONKSHOOD_JUICE, EXARION_SCALE, EXARION_EGG, ZWOV_SCALE, ZWOV_EGG, KALIBRAN_SCALE, KALIBRAN_EGG, SUZET_SCALE, SUZET_EGG, SHAMHAI_SCALE, SHAMHAI_EGG);
  126. }
  127. @Override
  128. public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
  129. {
  130. final QuestState qs = getQuestState(player, false);
  131. String htmltext = null;
  132. if (qs == null)
  133. {
  134. return htmltext;
  135. }
  136. switch (event)
  137. {
  138. case "30610-02.html":
  139. case "30610-03.html":
  140. case "30610-04.html":
  141. case "30711-02.html":
  142. case "30747-05.html":
  143. case "30747-06.html":
  144. case "30751-02.html":
  145. {
  146. htmltext = event;
  147. break;
  148. }
  149. case "30829-02.htm":
  150. {
  151. if (qs.isCreated())
  152. {
  153. qs.startQuest();
  154. htmltext = event;
  155. }
  156. break;
  157. }
  158. case "30610-05.html":
  159. {
  160. if (qs.isCond(1))
  161. {
  162. qs.setCond(2, true);
  163. qs.set("old_stone", 0);
  164. qs.set("fairy_stone", 1);
  165. giveItems(player, FAIRY_STONE_LIST, 1);
  166. htmltext = event;
  167. }
  168. break;
  169. }
  170. case "30610-06.html":
  171. {
  172. if (qs.isCond(1))
  173. {
  174. qs.setCond(2, true);
  175. qs.set("old_stone", 0);
  176. qs.set("fairy_stone", 2);
  177. giveItems(player, DELUXE_STONE_LIST, 1);
  178. htmltext = event;
  179. }
  180. break;
  181. }
  182. case "30610-12.html":
  183. {
  184. if (qs.isCond(5))
  185. {
  186. qs.setCond(2, true);
  187. qs.set("old_stone", qs.getInt("fairy_stone"));
  188. qs.set("fairy_stone", 1);
  189. giveItems(player, FAIRY_STONE_LIST, 1);
  190. htmltext = event;
  191. }
  192. break;
  193. }
  194. case "30610-13.html":
  195. {
  196. if (qs.isCond(5))
  197. {
  198. qs.setCond(2, true);
  199. qs.set("old_stone", qs.getInt("fairy_stone"));
  200. qs.set("fairy_stone", 2);
  201. giveItems(player, DELUXE_STONE_LIST, 1);
  202. htmltext = event;
  203. }
  204. break;
  205. }
  206. case "30608-03.html":
  207. {
  208. if (qs.isCond(2))
  209. {
  210. if ((qs.getInt("fairy_stone") == 1) && (getQuestItemsCount(player, COAL) >= 10) && (getQuestItemsCount(player, CHARCOAL) >= 10) && (getQuestItemsCount(player, GEMSTONE_D) >= 1) && (getQuestItemsCount(player, SILVER_NUGGET) >= 3) && (getQuestItemsCount(player, TOAD_SKIN) >= 10))
  211. {
  212. takeItems(player, FAIRY_STONE_LIST, -1);
  213. takeItems(player, COAL, 10);
  214. takeItems(player, CHARCOAL, 10);
  215. takeItems(player, GEMSTONE_D, 1);
  216. takeItems(player, SILVER_NUGGET, 3);
  217. takeItems(player, TOAD_SKIN, -1);
  218. giveItems(player, FAIRY_STONE, 1);
  219. }
  220. qs.setCond(3, true);
  221. htmltext = event;
  222. }
  223. break;
  224. }
  225. case "30608-05.html":
  226. {
  227. if (qs.isCond(2))
  228. {
  229. if ((qs.getInt("fairy_stone") == 2) && (getQuestItemsCount(player, COAL) >= 10) && (getQuestItemsCount(player, CHARCOAL) >= 10) && (getQuestItemsCount(player, GEMSTONE_C) >= 1) && (getQuestItemsCount(player, STONE_OF_PURITY) >= 1) && (getQuestItemsCount(player, SILVER_NUGGET) >= 5) && (getQuestItemsCount(player, TOAD_SKIN) >= 20))
  230. {
  231. takeItems(player, DELUXE_STONE_LIST, -1);
  232. takeItems(player, COAL, 10);
  233. takeItems(player, CHARCOAL, 10);
  234. takeItems(player, GEMSTONE_C, 1);
  235. takeItems(player, STONE_OF_PURITY, 1);
  236. takeItems(player, SILVER_NUGGET, 5);
  237. takeItems(player, TOAD_SKIN, -1);
  238. giveItems(player, DELUXE_FAIRY_STONE, 1);
  239. }
  240. qs.setCond(3, true);
  241. htmltext = event;
  242. }
  243. break;
  244. }
  245. case "30711-03.html":
  246. {
  247. if (qs.isCond(3))
  248. {
  249. qs.setCond(4, true);
  250. if (qs.getInt("fairy_stone") == 2)
  251. {
  252. htmltext = "30711-04.html";
  253. }
  254. else
  255. {
  256. htmltext = event;
  257. }
  258. }
  259. break;
  260. }
  261. case "30747-02.html":
  262. case "30747-04.html":
  263. {
  264. if (qs.isCond(4) && ((getQuestItemsCount(player, FAIRY_STONE) + getQuestItemsCount(player, DELUXE_FAIRY_STONE)) > 0))
  265. {
  266. takeItems(player, -1, FAIRY_STONE, DELUXE_FAIRY_STONE);
  267. if (qs.getInt("fairy_stone") == 2)
  268. {
  269. giveItems(player, FAIRY_DUST, 1);
  270. }
  271. qs.setCond(5, true);
  272. htmltext = event;
  273. }
  274. break;
  275. }
  276. case "30747-07.html":
  277. case "30747-08.html":
  278. {
  279. if (qs.isCond(5) && (getQuestItemsCount(player, MONKSHOOD_JUICE) == 0))
  280. {
  281. giveItems(player, MONKSHOOD_JUICE, 1);
  282. htmltext = event;
  283. }
  284. break;
  285. }
  286. case "30747-12.html":
  287. {
  288. if (qs.isCond(7))
  289. {
  290. if ((qs.getInt("fairy_stone") == 1) || (getQuestItemsCount(player, FAIRY_DUST) == 0))
  291. {
  292. giveReward(player);
  293. qs.exitQuest(true, true);
  294. htmltext = "30747-16.html";
  295. }
  296. else
  297. {
  298. qs.setCond(8, false);
  299. htmltext = event;
  300. }
  301. }
  302. else if (qs.isCond(8))
  303. {
  304. htmltext = event;
  305. }
  306. break;
  307. }
  308. case "30747-13.html":
  309. {
  310. if (qs.isCond(8))
  311. {
  312. giveReward(player);
  313. qs.exitQuest(true, true);
  314. htmltext = event;
  315. }
  316. break;
  317. }
  318. case "30747-15.html":
  319. {
  320. if (qs.isCond(8) && (getQuestItemsCount(player, FAIRY_DUST) > 1))
  321. {
  322. if (getRandom(100) < 5)
  323. {
  324. giveItems(player, HATCHLING_ARMOR, 1);
  325. htmltext = "30747-14.html";
  326. }
  327. else
  328. {
  329. giveItems(player, HATCHLING_FOOD, 20);
  330. htmltext = event;
  331. }
  332. giveReward(player);
  333. takeItems(player, FAIRY_DUST, -1);
  334. qs.exitQuest(true, true);
  335. }
  336. break;
  337. }
  338. case "30748-02.html":
  339. {
  340. if (qs.isCond(5))
  341. {
  342. takeItems(player, MONKSHOOD_JUICE, -1);
  343. giveItems(player, EXARION_SCALE, 1);
  344. qs.setCond(6, true);
  345. qs.set("drake_hunt", LETO_WARRIOR);
  346. htmltext = event;
  347. }
  348. break;
  349. }
  350. case "30749-02.html":
  351. {
  352. if (qs.isCond(5))
  353. {
  354. takeItems(player, MONKSHOOD_JUICE, -1);
  355. giveItems(player, ZWOV_SCALE, 1);
  356. qs.setCond(6, true);
  357. qs.set("drake_hunt", MARSH_SPIDER);
  358. htmltext = event;
  359. }
  360. break;
  361. }
  362. case "30750-02.html":
  363. {
  364. if (qs.isCond(5))
  365. {
  366. takeItems(player, MONKSHOOD_JUICE, -1);
  367. giveItems(player, KALIBRAN_SCALE, 1);
  368. qs.setCond(6, true);
  369. qs.set("drake_hunt", ROAD_SCAVENGER);
  370. htmltext = event;
  371. }
  372. break;
  373. }
  374. case "30750-05.html":
  375. {
  376. if (qs.isCond(6) && (getQuestItemsCount(player, KALIBRAN_EGG) >= 20))
  377. {
  378. takeItems(player, -1, KALIBRAN_SCALE, KALIBRAN_EGG);
  379. giveItems(player, KALIBRAN_EGG, 1);
  380. qs.setCond(7, true);
  381. htmltext = event;
  382. }
  383. break;
  384. }
  385. case "30751-03.html":
  386. {
  387. if (qs.isCond(5))
  388. {
  389. takeItems(player, MONKSHOOD_JUICE, -1);
  390. giveItems(player, SUZET_SCALE, 1);
  391. qs.setCond(6, true);
  392. qs.set("drake_hunt", BREKA_OVERLORD);
  393. htmltext = event;
  394. }
  395. break;
  396. }
  397. case "30752-02.html":
  398. {
  399. if (qs.isCond(5))
  400. {
  401. takeItems(player, MONKSHOOD_JUICE, -1);
  402. giveItems(player, SHAMHAI_SCALE, 1);
  403. qs.setCond(6, true);
  404. qs.set("drake_hunt", DEAD_SEEKER);
  405. htmltext = event;
  406. }
  407. break;
  408. }
  409. }
  410. return htmltext;
  411. }
  412. @Override
  413. public String onAttack(L2Npc npc, L2PcInstance attacker, int damage, boolean isSummon)
  414. {
  415. final QuestState qs = getQuestState(attacker, false);
  416. if ((qs != null) && (getQuestItemsCount(attacker, DELUXE_FAIRY_STONE) > 0) && (getRandom(100) < 30))
  417. {
  418. takeItems(attacker, DELUXE_FAIRY_STONE, -1);
  419. qs.playSound(QuestSound.ITEMSOUND_QUEST_MIDDLE);
  420. npc.broadcastPacket(new NpcSay(npc, Say2.NPC_ALL, NpcStringId.THE_STONE_THE_ELVEN_STONE_BROKE));
  421. }
  422. return super.onAttack(npc, attacker, damage, isSummon);
  423. }
  424. @Override
  425. public String onTalk(L2Npc npc, L2PcInstance talker)
  426. {
  427. final QuestState qs = getQuestState(talker, true);
  428. String htmltext = getNoQuestMsg(talker);
  429. switch (qs.getState())
  430. {
  431. case State.CREATED:
  432. {
  433. if (npc.getId() == COOPER)
  434. {
  435. htmltext = ((talker.getLevel() >= MIN_LVL) ? "30829-01.htm" : "30829-03.html");
  436. }
  437. break;
  438. }
  439. case State.STARTED:
  440. {
  441. switch (npc.getId())
  442. {
  443. case COOPER:
  444. {
  445. htmltext = "30829-04.html";
  446. break;
  447. }
  448. case CRONOS:
  449. {
  450. switch (qs.getCond())
  451. {
  452. case 1:
  453. {
  454. htmltext = "30610-01.html";
  455. break;
  456. }
  457. case 2:
  458. {
  459. htmltext = "30610-07.html";
  460. break;
  461. }
  462. case 3:
  463. {
  464. if (qs.getInt("old_stone") > 0)
  465. {
  466. htmltext = "30610-14.html";
  467. }
  468. else
  469. {
  470. htmltext = "30610-08.html";
  471. }
  472. break;
  473. }
  474. case 4:
  475. {
  476. htmltext = "30610-09.html";
  477. break;
  478. }
  479. case 5:
  480. {
  481. if ((getQuestItemsCount(talker, FAIRY_STONE) == 0) && (getQuestItemsCount(talker, DELUXE_FAIRY_STONE) == 0))
  482. {
  483. htmltext = "30610-10.html";
  484. }
  485. else
  486. {
  487. htmltext = "30610-11.html";
  488. }
  489. break;
  490. }
  491. }
  492. break;
  493. }
  494. case MARIA:
  495. {
  496. switch (qs.getCond())
  497. {
  498. case 2:
  499. {
  500. if ((qs.getInt("fairy_stone") == 1) && (getQuestItemsCount(talker, COAL) >= 10) && (getQuestItemsCount(talker, CHARCOAL) >= 10) && (getQuestItemsCount(talker, GEMSTONE_D) >= 1) && (getQuestItemsCount(talker, SILVER_NUGGET) >= 3) && (getQuestItemsCount(talker, TOAD_SKIN) >= 10))
  501. {
  502. htmltext = "30608-02.html";
  503. }
  504. else if ((qs.getInt("fairy_stone") == 2) && (getQuestItemsCount(talker, COAL) >= 10) && (getQuestItemsCount(talker, CHARCOAL) >= 10) && (getQuestItemsCount(talker, GEMSTONE_C) >= 1) && (getQuestItemsCount(talker, STONE_OF_PURITY) >= 1) && (getQuestItemsCount(talker, SILVER_NUGGET) >= 5) && (getQuestItemsCount(talker, TOAD_SKIN) >= 20))
  505. {
  506. htmltext = "30608-04.html";
  507. }
  508. else
  509. {
  510. htmltext = "30608-01.html";
  511. }
  512. break;
  513. }
  514. case 3:
  515. {
  516. htmltext = "30608-06.html";
  517. break;
  518. }
  519. }
  520. break;
  521. }
  522. case BYRON:
  523. {
  524. switch (qs.getCond())
  525. {
  526. case 2:
  527. {
  528. htmltext = "30711-10.html";
  529. break;
  530. }
  531. case 3:
  532. {
  533. if (qs.getInt("old_stone") == 0)
  534. {
  535. htmltext = "30711-01.html";
  536. }
  537. else if (qs.getInt("old_stone") == 1)
  538. {
  539. qs.setCond(5, true);
  540. htmltext = "30711-05.html";
  541. }
  542. else
  543. {
  544. qs.setCond(4, true);
  545. htmltext = "30711-06.html";
  546. }
  547. break;
  548. }
  549. case 4:
  550. {
  551. if ((getQuestItemsCount(talker, FAIRY_STONE) == 0) && (getQuestItemsCount(talker, DELUXE_FAIRY_STONE) == 0))
  552. {
  553. htmltext = "30711-09.html";
  554. }
  555. else if (getQuestItemsCount(talker, FAIRY_STONE) == 0)
  556. {
  557. htmltext = "30711-08.html";
  558. }
  559. else
  560. {
  561. htmltext = "30711-07.html";
  562. }
  563. break;
  564. }
  565. }
  566. break;
  567. }
  568. case MIMYU:
  569. {
  570. switch (qs.getCond())
  571. {
  572. case 4:
  573. {
  574. if (getQuestItemsCount(talker, FAIRY_STONE) > 0)
  575. {
  576. htmltext = "30747-01.html";
  577. }
  578. else if (getQuestItemsCount(talker, DELUXE_FAIRY_STONE) > 0)
  579. {
  580. htmltext = "30747-03.html";
  581. }
  582. break;
  583. }
  584. case 5:
  585. {
  586. if (getQuestItemsCount(talker, MONKSHOOD_JUICE) > 0)
  587. {
  588. htmltext = "30747-09.html";
  589. }
  590. else if (qs.getInt("fairy_stone") == 1)
  591. {
  592. htmltext = "30747-05.html";
  593. }
  594. else
  595. {
  596. htmltext = "30747-06.html";
  597. }
  598. break;
  599. }
  600. case 6:
  601. {
  602. if ((getQuestItemsCount(talker, EXARION_EGG) >= 20) || (getQuestItemsCount(talker, ZWOV_EGG) >= 20) || (getQuestItemsCount(talker, KALIBRAN_EGG) >= 20) || (getQuestItemsCount(talker, SUZET_EGG) >= 20) || (getQuestItemsCount(talker, SHAMHAI_EGG) >= 20))
  603. {
  604. htmltext = "30747-10.html";
  605. }
  606. else
  607. {
  608. htmltext = "30747-09.html";
  609. }
  610. break;
  611. }
  612. case 7:
  613. {
  614. htmltext = "30747-11.html";
  615. break;
  616. }
  617. case 8:
  618. {
  619. htmltext = "30747-12.html";
  620. break;
  621. }
  622. }
  623. break;
  624. }
  625. case EXARION:
  626. {
  627. switch (qs.getCond())
  628. {
  629. case 5:
  630. {
  631. if (getQuestItemsCount(talker, MONKSHOOD_JUICE) > 0)
  632. {
  633. htmltext = "30748-01.html";
  634. }
  635. break;
  636. }
  637. case 6:
  638. {
  639. if (getQuestItemsCount(talker, EXARION_EGG) >= 20)
  640. {
  641. takeItems(talker, -1, EXARION_SCALE, EXARION_EGG);
  642. giveItems(talker, EXARION_EGG, 1);
  643. qs.setCond(7, true);
  644. htmltext = "30748-04.html";
  645. }
  646. else
  647. {
  648. htmltext = "30748-03.html";
  649. }
  650. break;
  651. }
  652. case 7:
  653. {
  654. htmltext = "30748-05.html";
  655. break;
  656. }
  657. }
  658. break;
  659. }
  660. case ZWOV:
  661. {
  662. switch (qs.getCond())
  663. {
  664. case 5:
  665. {
  666. if (getQuestItemsCount(talker, MONKSHOOD_JUICE) > 0)
  667. {
  668. htmltext = "30749-01.html";
  669. }
  670. break;
  671. }
  672. case 6:
  673. {
  674. if (getQuestItemsCount(talker, ZWOV_EGG) >= 20)
  675. {
  676. takeItems(talker, -1, ZWOV_SCALE, ZWOV_EGG);
  677. giveItems(talker, ZWOV_EGG, 1);
  678. qs.setCond(7, true);
  679. htmltext = "30749-04.html";
  680. }
  681. else
  682. {
  683. htmltext = "30749-03.html";
  684. }
  685. break;
  686. }
  687. case 7:
  688. {
  689. htmltext = "30749-05.html";
  690. break;
  691. }
  692. }
  693. break;
  694. }
  695. case KALIBRAN:
  696. {
  697. switch (qs.getCond())
  698. {
  699. case 5:
  700. {
  701. if (getQuestItemsCount(talker, MONKSHOOD_JUICE) > 0)
  702. {
  703. htmltext = "30750-01.html";
  704. }
  705. break;
  706. }
  707. case 6:
  708. {
  709. if (getQuestItemsCount(talker, KALIBRAN_EGG) >= 20)
  710. {
  711. htmltext = "30750-04.html";
  712. }
  713. else
  714. {
  715. htmltext = "30750-03.html";
  716. }
  717. break;
  718. }
  719. case 7:
  720. {
  721. htmltext = "30750-06.html";
  722. break;
  723. }
  724. }
  725. break;
  726. }
  727. case SUZET:
  728. {
  729. switch (qs.getCond())
  730. {
  731. case 5:
  732. {
  733. if (getQuestItemsCount(talker, MONKSHOOD_JUICE) > 0)
  734. {
  735. htmltext = "30751-01.html";
  736. }
  737. break;
  738. }
  739. case 6:
  740. {
  741. if (getQuestItemsCount(talker, SUZET_EGG) >= 20)
  742. {
  743. takeItems(talker, -1, SUZET_SCALE, SUZET_EGG);
  744. giveItems(talker, SUZET_EGG, 1);
  745. qs.setCond(7, true);
  746. htmltext = "30751-05.html";
  747. }
  748. else
  749. {
  750. htmltext = "30751-04.html";
  751. }
  752. break;
  753. }
  754. case 7:
  755. {
  756. htmltext = "30751-06.html";
  757. break;
  758. }
  759. }
  760. break;
  761. }
  762. case SHAMHAI:
  763. {
  764. switch (qs.getCond())
  765. {
  766. case 5:
  767. {
  768. if (getQuestItemsCount(talker, MONKSHOOD_JUICE) > 0)
  769. {
  770. htmltext = "30752-01.html";
  771. }
  772. break;
  773. }
  774. case 6:
  775. {
  776. if (getQuestItemsCount(talker, SHAMHAI_EGG) >= 20)
  777. {
  778. takeItems(talker, -1, SHAMHAI_SCALE, SHAMHAI_EGG);
  779. giveItems(talker, SHAMHAI_EGG, 1);
  780. qs.setCond(7, true);
  781. htmltext = "30752-04.html";
  782. }
  783. else
  784. {
  785. htmltext = "30752-03.html";
  786. }
  787. break;
  788. }
  789. case 7:
  790. {
  791. htmltext = "30752-05.html";
  792. break;
  793. }
  794. }
  795. break;
  796. }
  797. }
  798. break;
  799. }
  800. case State.COMPLETED:
  801. {
  802. htmltext = getAlreadyCompletedMsg(talker);
  803. break;
  804. }
  805. }
  806. return htmltext;
  807. }
  808. @Override
  809. public String onKill(L2Npc npc, L2PcInstance killer, boolean isSummon)
  810. {
  811. final QuestState qs = getRandomPartyMemberState(killer, -1, 3, npc);
  812. if (qs != null)
  813. {
  814. if (qs.isCond(2) && (npc.getId() == TOAD_LORD))
  815. {
  816. if (qs.getInt("fairy_stone") == 1)
  817. {
  818. giveItemRandomly(qs.getPlayer(), npc, TOAD_SKIN, 1, 10, 0.3, true);
  819. }
  820. else
  821. {
  822. giveItemRandomly(qs.getPlayer(), npc, TOAD_SKIN, 1, 20, 0.3, true);
  823. }
  824. }
  825. else if (qs.isCond(6) && (npc.getId() == qs.getInt("drake_hunt")))
  826. {
  827. giveItemRandomly(qs.getPlayer(), npc, EGG_DROPS.get(npc.getId()), 1, 20, 0.5, true);
  828. }
  829. }
  830. return super.onKill(npc, killer, isSummon);
  831. }
  832. /**
  833. * Gives the reward to the player.
  834. * @param player the player
  835. */
  836. private static void giveReward(L2PcInstance player)
  837. {
  838. final int random = getRandom(100);
  839. for (int i : EGGS)
  840. {
  841. if (hasQuestItems(player, i))
  842. {
  843. final int mul = EGGS.indexOf(i) * 5;
  844. if (hasQuestItems(player, FAIRY_DUST))
  845. {
  846. if (random < (45 + mul))
  847. {
  848. giveItems(player, DRAGONFLUTE_OF_WIND, 1);
  849. }
  850. else if (random < (75 + mul))
  851. {
  852. giveItems(player, DRAGONFLUTE_OF_STAR, 1);
  853. }
  854. else
  855. {
  856. giveItems(player, DRAGONFLUTE_OF_TWILIGHT, 1);
  857. }
  858. }
  859. if (random < (50 + mul))
  860. {
  861. giveItems(player, DRAGONFLUTE_OF_WIND, 1);
  862. }
  863. else if (random < (85 + mul))
  864. {
  865. giveItems(player, DRAGONFLUTE_OF_STAR, 1);
  866. }
  867. else
  868. {
  869. giveItems(player, DRAGONFLUTE_OF_TWILIGHT, 1);
  870. }
  871. takeItems(player, i, -1);
  872. break;
  873. }
  874. }
  875. }
  876. }