Advertisement
Guest User

Q00663_SeductiveWhispers.java

a guest
Oct 21st, 2017
151
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 22.67 KB | None | 0 0
  1. /*
  2. * Copyright (C) 2004-2017 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.Q00663_SeductiveWhispers;
  20.  
  21. import java.util.HashMap;
  22. import java.util.LinkedList;
  23. import java.util.List;
  24. import java.util.Map;
  25.  
  26. import com.l2jserver.gameserver.enums.audio.Sound;
  27. import com.l2jserver.gameserver.model.actor.L2Npc;
  28. import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
  29. import com.l2jserver.gameserver.model.holders.ItemHolder;
  30. import com.l2jserver.gameserver.model.quest.Quest;
  31. import com.l2jserver.gameserver.model.quest.QuestState;
  32. import com.l2jserver.gameserver.model.quest.State;
  33. import com.l2jserver.gameserver.util.Util;
  34.  
  35. /**
  36. * Seductive Whispers (663)
  37. * @author Zoey76
  38. */
  39. public class Q00663_SeductiveWhispers extends Quest
  40. {
  41. // NPCs
  42. private static final int WILBERT = 30846;
  43. // Misc
  44. private static final int MIN_LEVEL = 50;
  45. // Quest items
  46. private static final int SPIRIT_BEAD = 8766;
  47. // Rewards
  48. private static final ItemHolder SCROLL_ENCHANT_WEAPON_A_GRADE = new ItemHolder(729, 1);
  49. private static final ItemHolder SCROLL_ENCHANT_ARMOR_A_GRADE = new ItemHolder(730, 2);
  50. private static final ItemHolder SCROLL_ENCHANT_WEAPON_B_GRADE = new ItemHolder(947, 2);
  51. private static final ItemHolder SCROLL_ENCHANT_ARMOR_B_GRADE = new ItemHolder(948, 2);
  52. private static final ItemHolder SCROLL_ENCHANT_WEAPON_C_GRADE = new ItemHolder(951, 1);
  53. private static final ItemHolder SCROLL_ENCHANT_WEAPON_D_GRADE = new ItemHolder(955, 1);
  54. private static final ItemHolder RECIPE_GREAT_SWORD_60 = new ItemHolder(4963, 1);
  55. private static final ItemHolder RECIPE_HEAVY_WAR_AXE_60 = new ItemHolder(4964, 1);
  56. private static final ItemHolder RECIPE_SPRITES_STAFF_60 = new ItemHolder(4965, 1);
  57. private static final ItemHolder RECIPE_KESHANBERK_60 = new ItemHolder(4966, 1);
  58. private static final ItemHolder RECIPE_SWORD_OF_VALHALLA_60 = new ItemHolder(4967, 1);
  59. private static final ItemHolder RECIPE_KRIS_60 = new ItemHolder(4968, 1);
  60. private static final ItemHolder RECIPE_HELL_KNIFE_60 = new ItemHolder(4969, 1);
  61. private static final ItemHolder RECIPE_ARTHRO_NAIL_60 = new ItemHolder(4970, 1);
  62. private static final ItemHolder RECIPE_DARK_ELVEN_LONG_BOW_60 = new ItemHolder(4971, 1);
  63. private static final ItemHolder RECIPE_GREAT_AXE_60 = new ItemHolder(4972, 1);
  64. private static final ItemHolder RECIPE_SWORD_OF_DAMASCUS_60 = new ItemHolder(5000, 1);
  65. private static final ItemHolder RECIPE_LANCE_60 = new ItemHolder(5001, 1);
  66. private static final ItemHolder RECIPE_DEADMANS_GLORY_60 = new ItemHolder(5002, 1);
  67. private static final ItemHolder RECIPE_ART_OF_BATTLE_AXE_60 = new ItemHolder(5003, 1);
  68. private static final ItemHolder RECIPE_TAFF_OF_EVIL_SPIRITS_60 = new ItemHolder(5004, 1);
  69. private static final ItemHolder RECIPE_DEMONS_DAGGER_60 = new ItemHolder(5005, 1);
  70. private static final ItemHolder RECIPE_BELLION_CESTUS_60 = new ItemHolder(5006, 1);
  71. private static final ItemHolder RECIPE_BOW_OF_PERIL_60 = new ItemHolder(5007, 1);
  72. private static final ItemHolder GREAT_SWORD_BLADE = new ItemHolder(4104, 12);
  73. private static final ItemHolder GREAT_AXE_HEAD = new ItemHolder(4113, 12);
  74. private static final ItemHolder DARK_ELVEN_LONGBOW_SHAFT = new ItemHolder(4112, 12);
  75. private static final ItemHolder SWORD_OF_VALHALLA_BLADE = new ItemHolder(4108, 12);
  76. private static final ItemHolder ARTHRO_NAIL_BLADE = new ItemHolder(4111, 12);
  77. private static final ItemHolder SPRITES_STAFF_HEAD = new ItemHolder(4104, 12);
  78. private static final ItemHolder KRIS_EDGE = new ItemHolder(4109, 12);
  79. private static final ItemHolder KESHANBERK_BLADE = new ItemHolder(4107, 12);
  80. private static final ItemHolder HEAVY_WAR_AXE_HEAD = new ItemHolder(4105, 12);
  81. private static final ItemHolder HELL_KNIFE_EDGE = new ItemHolder(4110, 12);
  82. private static final ItemHolder SWORD_OF_DAMASCUS_BLADE = new ItemHolder(4114, 13);
  83. private static final ItemHolder LANCE_BLADE = new ItemHolder(4115, 13);
  84. private static final ItemHolder BELLION_CESTUS_EDGE = new ItemHolder(4120, 13);
  85. private static final ItemHolder EVIL_SPIRIT_HEAD = new ItemHolder(4118, 13);
  86. private static final ItemHolder DEADMANS_GLORY_STONE = new ItemHolder(4116, 13);
  87. private static final ItemHolder ART_OF_BATTLE_AXE_BLADE = new ItemHolder(4117, 13);
  88. private static final ItemHolder DEMONS_DAGGER_EDGE = new ItemHolder(4119, 13);
  89. private static final ItemHolder BOW_OF_PERIL_SHAFT = new ItemHolder(4121, 13);
  90. // Monsters
  91. private static final int SPITEFUL_SOUL_LEADER = 20974;
  92. private static final int SPITEFUL_SOUL_LEADER_CHANCE = 100;
  93. private static final Map<Integer, Integer> MONSTERS = new HashMap<>();
  94.  
  95. static
  96. {
  97. MONSTERS.put(20674, 807);
  98. MONSTERS.put(20678, 372);
  99. MONSTERS.put(20954, 460);
  100. MONSTERS.put(20674, 537);
  101. MONSTERS.put(20956, 540);
  102. MONSTERS.put(20957, 565);
  103. MONSTERS.put(20958, 425);
  104. MONSTERS.put(20959, 682);
  105. MONSTERS.put(20960, 372);
  106. MONSTERS.put(20961, 547);
  107. MONSTERS.put(20962, 522);
  108. MONSTERS.put(20963, 498);
  109. MONSTERS.put(20975, 975);
  110. MONSTERS.put(20976, 825);
  111. MONSTERS.put(20996, 385);
  112. MONSTERS.put(20997, 342);
  113. MONSTERS.put(20998, 377);
  114. MONSTERS.put(20999, 450);
  115. MONSTERS.put(21000, 395);
  116. MONSTERS.put(21001, 535);
  117. MONSTERS.put(21002, 472);
  118. MONSTERS.put(21006, 502);
  119. MONSTERS.put(21007, 540);
  120. MONSTERS.put(21008, 692);
  121. MONSTERS.put(21009, 740);
  122. MONSTERS.put(21010, 595);
  123. }
  124.  
  125. public Q00663_SeductiveWhispers()
  126. {
  127. super(663, Q00663_SeductiveWhispers.class.getSimpleName(), "Seductive Whispers");
  128. addStartNpc(WILBERT);
  129. addTalkId(WILBERT);
  130. addKillId(MONSTERS.keySet());
  131. addKillId(SPITEFUL_SOUL_LEADER);
  132. }
  133.  
  134. @Override
  135. public String onTalk(L2Npc npc, L2PcInstance player)
  136. {
  137. final QuestState qs = getQuestState(player, true);
  138. String htmltext = getNoQuestMsg(player);
  139. if (qs == null)
  140. {
  141. return htmltext;
  142. }
  143.  
  144. switch (qs.getState())
  145. {
  146. case State.CREATED:
  147. {
  148. htmltext = player.getLevel() < MIN_LEVEL ? "30846-02.html" : "30846-01.htm";
  149. break;
  150. }
  151. case State.STARTED:
  152. {
  153. if ((qs.getMemoState() < 4) && (qs.getMemoState() >= 1))
  154. {
  155. if (hasQuestItems(player, SPIRIT_BEAD))
  156. {
  157. htmltext = "30846-05.html";
  158. }
  159. else
  160. {
  161. htmltext = "30846-04.html";
  162. }
  163. }
  164.  
  165. if ((qs.getMemoState() / 1000) == 0)
  166. {
  167. switch (qs.getMemoState() % 10)
  168. {
  169. case 4:
  170. {
  171. htmltext = "30846-05a.html";
  172. break;
  173. }
  174. case 5:
  175. {
  176. htmltext = "30846-11.html";
  177. break;
  178. }
  179. case 6:
  180. {
  181. htmltext = "30846-15.html";
  182. break;
  183. }
  184. case 7:
  185. {
  186. if (((qs.getMemoState() % 100) / 10) >= 7)
  187. {
  188. qs.setMemoState(1);
  189. giveAdena(player, 2384000, true);
  190. giveItems(player, SCROLL_ENCHANT_WEAPON_A_GRADE);
  191. giveItems(player, SCROLL_ENCHANT_ARMOR_A_GRADE);
  192. htmltext = "30846-17.html";
  193. }
  194. else
  195. {
  196. final int winCount = (qs.getMemoState() / 10) + 1;
  197. htmltext = getHtml(player, "30846-16.html", 0, 0, winCount, 0);
  198. }
  199. break;
  200. }
  201. }
  202. }
  203. else if (qs.isMemoState(1005))
  204. {
  205. htmltext = "30846-23.html";
  206. }
  207. else if (qs.isMemoState(1006))
  208. {
  209. htmltext = "30846-26.html";
  210. }
  211. break;
  212. }
  213. }
  214. return htmltext;
  215. }
  216.  
  217. @Override
  218. public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
  219. {
  220. final QuestState qs = getQuestState(player, false);
  221. if (qs == null)
  222. {
  223. return null;
  224. }
  225.  
  226. String htmltext = null;
  227. switch (event)
  228. {
  229. case "30846-01a.htm":
  230. {
  231. if (player.getLevel() >= MIN_LEVEL)
  232. {
  233. htmltext = event;
  234. }
  235. break;
  236. }
  237. case "30846-03.htm":
  238. {
  239. if (qs.isCreated() && (player.getLevel() >= MIN_LEVEL))
  240. {
  241. qs.startQuest();
  242. qs.setMemoState(1);
  243. htmltext = event;
  244. }
  245. break;
  246. }
  247. case "30846-06.html":
  248. case "30846-07.html":
  249. case "30846-08.html":
  250. {
  251. htmltext = event;
  252. break;
  253. }
  254. case "30846-09.html":
  255. {
  256. if (qs.isStarted() && ((qs.getMemoState() % 10) <= 4))
  257. {
  258. final int memoState = qs.getMemoState() / 10;
  259. if (memoState < 1)
  260. {
  261. if (getQuestItemsCount(player, SPIRIT_BEAD) >= 50)
  262. {
  263. takeItems(player, SPIRIT_BEAD, 50);
  264. qs.setMemoState(5);
  265. qs.setMemoStateEx(1, 0);
  266. htmltext = event;
  267. }
  268. else
  269. {
  270. htmltext = "30846-10.html";
  271. }
  272. }
  273. else
  274. {
  275. qs.setMemoState((memoState * 10) + 5);
  276. qs.setMemoStateEx(1, 0);
  277. htmltext = "30846-09a.html";
  278. }
  279. }
  280. break;
  281. }
  282. case "30846-14.html":
  283. {
  284. if (qs.isStarted() && ((qs.getMemoState() % 10) == 5) && ((qs.getMemoState() / 1000) == 0))
  285. {
  286. final int card1pic = Math.max(qs.getMemoStateEx(1), 0);
  287. final int i1 = card1pic % 10;
  288. final int i2 = (card1pic - i1) / 10;
  289. final int rdn1 = getRandom(2) + 1;
  290. final int rdn2 = getRandom(5) + 1;
  291. final int winCount = (qs.getMemoState() / 10) + 1;
  292. final int card2pic = (rdn1 * 10) + rdn2;
  293. if (rdn1 == i2)
  294. {
  295. final int i3 = rdn2 + i1;
  296. if (((i3 % 5) == 0) && (i3 != 10))
  297. {
  298. if (((qs.getMemoState() % 100) / 10) >= 7)
  299. {
  300. giveAdena(player, 2384000, true);
  301. giveItems(player, SCROLL_ENCHANT_WEAPON_A_GRADE);
  302. giveItems(player, SCROLL_ENCHANT_ARMOR_A_GRADE);
  303. qs.setMemoState(4);
  304. htmltext = getHtml(player, "30846-14.html", card1pic, card2pic, winCount, -1);
  305. }
  306. else
  307. {
  308. qs.setMemoState(((qs.getMemoState() / 10) * 10) + 7);
  309. htmltext = getHtml(player, "30846-13.html", card1pic, card2pic, winCount, -1);
  310. }
  311. }
  312. else
  313. {
  314. qs.setMemoState(((qs.getMemoState() / 10) * 10) + 6);
  315. qs.setMemoStateEx(1, card2pic);
  316. htmltext = getHtml(player, "30846-12.html", card1pic, card2pic, winCount, -1);
  317. }
  318. }
  319. else if (rdn1 != i2)
  320. {
  321. if ((rdn2 == 5) || (i1 == 5))
  322. {
  323. if (((qs.getMemoState() % 100) / 10) >= 7)
  324. {
  325. giveAdena(player, 2384000, true);
  326. giveItems(player, SCROLL_ENCHANT_WEAPON_A_GRADE);
  327. giveItems(player, SCROLL_ENCHANT_ARMOR_A_GRADE);
  328. qs.setMemoState(4);
  329. htmltext = getHtml(player, "30846-14.html", card1pic, card2pic, winCount, -1);
  330. }
  331. else
  332. {
  333. qs.setMemoState(((qs.getMemoState() / 10) * 10) + 7);
  334. htmltext = getHtml(player, "30846-13.html", card1pic, card2pic, winCount, -1);
  335. }
  336. }
  337. else
  338. {
  339. qs.setMemoState(((qs.getMemoState() / 10) * 10) + 6);
  340. qs.setMemoStateEx(1, card2pic);
  341. htmltext = getHtml(player, "30846-12.html", card1pic, card2pic, winCount, -1);
  342. }
  343. }
  344. }
  345. break;
  346. }
  347. case "30846-19.html":
  348. {
  349. if (qs.isStarted() && ((qs.getMemoState() % 10) == 6) && ((qs.getMemoState() / 1000) == 0))
  350. {
  351. final int card1pic = Math.max(qs.getMemoStateEx(1), 0);
  352. int i1 = card1pic % 10;
  353. int i2 = (card1pic - i1) / 10;
  354. int rnd1 = getRandom(2) + 1;
  355. int rnd2 = getRandom(5) + 1;
  356. int card2pic = (rnd1 * 10) + rnd2;
  357. if (rnd1 == i2)
  358. {
  359. int i3 = rnd2 + i1;
  360. if (((i3 % 5) == 0) && (i3 != 10))
  361. {
  362. qs.setMemoState(1);
  363. qs.setMemoStateEx(1, 0);
  364. htmltext = getHtml(player, "30846-19.html", card1pic, card2pic, -1, -1);
  365. }
  366. else
  367. {
  368. qs.setMemoState(((qs.getMemoState() / 10) * 10) + 5);
  369. qs.setMemoStateEx(1, card2pic);
  370. htmltext = getHtml(player, "30846-18.html", card1pic, card2pic, -1, -1);
  371. }
  372. }
  373. else if (rnd1 != i2)
  374. {
  375. if ((rnd2 == 5) || (i1 == 5))
  376. {
  377. qs.setMemoState(1);
  378. htmltext = getHtml(player, "30846-19.html", card1pic, card2pic, -1, -1);
  379. }
  380. else
  381. {
  382. qs.setMemoState(((qs.getMemoState() / 10) * 10) + 5);
  383. qs.setMemoStateEx(1, card2pic);
  384. htmltext = getHtml(player, "30846-18.html", card1pic, card2pic, -1, -1);
  385. }
  386. }
  387. }
  388. break;
  389. }
  390. case "30846-20.html":
  391. {
  392. if (qs.isStarted() && ((qs.getMemoState() % 10) == 7) && ((qs.getMemoState() / 1000) == 0))
  393. {
  394. qs.setMemoState((((qs.getMemoState() / 10) + 1) * 10) + 4);
  395. qs.setMemoStateEx(1, 0);
  396. htmltext = event;
  397. }
  398. break;
  399. }
  400. case "30846-21.html":
  401. {
  402. if (qs.isStarted() && ((qs.getMemoState() % 10) == 7) && ((qs.getMemoState() / 1000) == 0))
  403. {
  404. int i0 = qs.getMemoState() / 10;
  405. if (i0 == 0)
  406. {
  407. giveAdena(player, 40000, true);
  408. }
  409. else if (i0 == 1)
  410. {
  411. giveAdena(player, 80000, true);
  412. }
  413. else if (i0 == 2)
  414. {
  415. giveAdena(player, 110000, true);
  416. giveItems(player, SCROLL_ENCHANT_WEAPON_D_GRADE, 1);
  417. }
  418. else if (i0 == 3)
  419. {
  420. giveAdena(player, 199000, true);
  421. giveItems(player, SCROLL_ENCHANT_WEAPON_C_GRADE, 1);
  422. }
  423. else if (i0 == 4)
  424. {
  425. giveAdena(player, 388000, true);
  426. final int rdn = getRandom(18) + 1;
  427. if (rdn == 1)
  428. {
  429. giveItems(player, RECIPE_GREAT_SWORD_60);
  430. }
  431. else if (rdn == 2)
  432. {
  433. giveItems(player, RECIPE_HEAVY_WAR_AXE_60);
  434. }
  435. else if (rdn == 3)
  436. {
  437. giveItems(player, RECIPE_SPRITES_STAFF_60);
  438. }
  439. else if (rdn == 4)
  440. {
  441. giveItems(player, RECIPE_KESHANBERK_60);
  442. }
  443. else if (rdn == 5)
  444. {
  445. giveItems(player, RECIPE_SWORD_OF_VALHALLA_60);
  446. }
  447. else if (rdn == 6)
  448. {
  449. giveItems(player, RECIPE_KRIS_60);
  450. }
  451. else if (rdn == 7)
  452. {
  453. giveItems(player, RECIPE_HELL_KNIFE_60);
  454. }
  455. else if (rdn == 8)
  456. {
  457. giveItems(player, RECIPE_ARTHRO_NAIL_60);
  458. }
  459. else if (rdn == 9)
  460. {
  461. giveItems(player, RECIPE_DARK_ELVEN_LONG_BOW_60);
  462. }
  463. else if (rdn == 10)
  464. {
  465. giveItems(player, RECIPE_GREAT_AXE_60);
  466. }
  467. else if (rdn == 11)
  468. {
  469. giveItems(player, RECIPE_SWORD_OF_DAMASCUS_60);
  470. }
  471. else if (rdn == 12)
  472. {
  473. giveItems(player, RECIPE_LANCE_60);
  474. }
  475. else if (rdn == 13)
  476. {
  477. giveItems(player, RECIPE_DEADMANS_GLORY_60);
  478. }
  479. else if (rdn == 14)
  480. {
  481. giveItems(player, RECIPE_ART_OF_BATTLE_AXE_60);
  482. }
  483. else if (rdn == 15)
  484. {
  485. giveItems(player, RECIPE_TAFF_OF_EVIL_SPIRITS_60);
  486. }
  487. else if (rdn == 16)
  488. {
  489. giveItems(player, RECIPE_DEMONS_DAGGER_60);
  490. }
  491. else if (rdn == 17)
  492. {
  493. giveItems(player, RECIPE_BELLION_CESTUS_60);
  494. }
  495. else if (rdn == 18)
  496. {
  497. giveItems(player, RECIPE_BOW_OF_PERIL_60);
  498. }
  499. }
  500. else if (i0 == 5)
  501. {
  502. giveAdena(player, 675000, true);
  503. final int rnd = getRandom(18) + 1;
  504. if (rnd == 1)
  505. {
  506. giveItems(player, GREAT_SWORD_BLADE);
  507. }
  508. else if (rnd == 2)
  509. {
  510. giveItems(player, GREAT_AXE_HEAD);
  511. }
  512. else if (rnd == 3)
  513. {
  514. giveItems(player, DARK_ELVEN_LONGBOW_SHAFT);
  515. }
  516. else if (rnd == 4)
  517. {
  518. giveItems(player, SWORD_OF_VALHALLA_BLADE);
  519. }
  520. else if (rnd == 5)
  521. {
  522. giveItems(player, ARTHRO_NAIL_BLADE);
  523. }
  524. else if (rnd == 6)
  525. {
  526. giveItems(player, SPRITES_STAFF_HEAD);
  527. }
  528. else if (rnd == 7)
  529. {
  530. giveItems(player, KRIS_EDGE);
  531. }
  532. else if (rnd == 8)
  533. {
  534. giveItems(player, KESHANBERK_BLADE);
  535. }
  536. else if (rnd == 9)
  537. {
  538. giveItems(player, HEAVY_WAR_AXE_HEAD);
  539. }
  540. else if (rnd == 10)
  541. {
  542. giveItems(player, HELL_KNIFE_EDGE);
  543. }
  544. else if (rnd == 11)
  545. {
  546. giveItems(player, SWORD_OF_DAMASCUS_BLADE);
  547. }
  548. else if (rnd == 12)
  549. {
  550. giveItems(player, LANCE_BLADE);
  551. }
  552. else if (rnd == 13)
  553. {
  554. giveItems(player, BELLION_CESTUS_EDGE);
  555. }
  556. else if (rnd == 14)
  557. {
  558. giveItems(player, EVIL_SPIRIT_HEAD);
  559. }
  560. else if (rnd == 15)
  561. {
  562. giveItems(player, DEADMANS_GLORY_STONE);
  563. }
  564. else if (rnd == 16)
  565. {
  566. giveItems(player, ART_OF_BATTLE_AXE_BLADE);
  567. }
  568. else if (rnd == 17)
  569. {
  570. giveItems(player, DEMONS_DAGGER_EDGE);
  571. }
  572. else if (rnd == 18)
  573. {
  574. giveItems(player, BOW_OF_PERIL_SHAFT);
  575. }
  576. }
  577. else if (i0 == 6)
  578. {
  579. giveAdena(player, 1284000, true);
  580. giveItems(player, SCROLL_ENCHANT_WEAPON_B_GRADE);
  581. giveItems(player, SCROLL_ENCHANT_ARMOR_B_GRADE);
  582. }
  583. qs.setMemoState(1);
  584. qs.setMemoStateEx(1, 0);
  585. htmltext = event;
  586. }
  587. break;
  588. }
  589. case "30846-21a.html":
  590. {
  591. if (qs.isStarted() && qs.isMemoState(1))
  592. {
  593. htmltext = event;
  594. }
  595. break;
  596. }
  597. case "30846-22.html":
  598. {
  599. if (qs.isStarted() && ((qs.getMemoState() % 10) == 1))
  600. {
  601. if (getQuestItemsCount(player, SPIRIT_BEAD) >= 1)
  602. {
  603. takeItems(player, SPIRIT_BEAD, 1);
  604. qs.setMemoState(1005);
  605. htmltext = event;
  606. }
  607. else
  608. {
  609. htmltext = "30846-22a.html";
  610. }
  611. }
  612. break;
  613. }
  614. case "30846-25.html":
  615. {
  616. if (qs.isStarted() && qs.isMemoState(1005))
  617. {
  618. int card1pic = qs.getMemoStateEx(1);
  619. if (card1pic < 0)
  620. {
  621. card1pic = 0;
  622. }
  623. int card1 = card1pic % 10;
  624. int i2 = (card1pic - card1) / 10;
  625. int rnd1 = getRandom(2) + 1;
  626. int rnd2 = getRandom(5) + 1;
  627. int card2pic = (rnd1 * 10) + rnd2;
  628. if (rnd1 == i2)
  629. {
  630. int i3 = rnd2 + card1;
  631. if (((i3 % 5) == 0) && (i3 != 10))
  632. {
  633. qs.setMemoState(1);
  634. qs.setMemoStateEx(1, 0);
  635. giveAdena(player, 800, true);
  636. htmltext = getHtml(player, "30846-25.html", card1pic, card2pic, -1, card1);
  637. }
  638. else
  639. {
  640. qs.setMemoState(1006);
  641. qs.setMemoStateEx(1, card2pic);
  642. htmltext = getHtml(player, "30846-24.html", card1pic, card2pic, -1, -1);
  643. }
  644. }
  645. else if (rnd1 != i2)
  646. {
  647. if ((rnd2 == 5) || (card1 == 5))
  648. {
  649. qs.setMemoState(1);
  650. qs.setMemoStateEx(1, 0);
  651. giveAdena(player, 800, true);
  652. htmltext = getHtml(player, "30846-25.html", card1pic, card2pic, -1, -1);
  653. }
  654. else
  655. {
  656. qs.setMemoState(1006);
  657. qs.setMemoStateEx(1, card2pic);
  658. htmltext = getHtml(player, "30846-24.html", card1pic, card2pic, -1, -1);
  659. }
  660. }
  661. }
  662. break;
  663. }
  664. case "30846-29.html":
  665. {
  666. if (qs.isStarted() && qs.isMemoState(1006))
  667. {
  668. final int card1pic = Math.max(qs.getMemoStateEx(1), 0);
  669. int i1 = card1pic % 10;
  670. int i2 = (card1pic - i1) / 10;
  671. int rnd1 = getRandom(2) + 1;
  672. int rnd2 = getRandom(5) + 1;
  673. int card2pic = (rnd1 * 10) + rnd2;
  674. if (rnd1 == i2)
  675. {
  676. final int i3 = rnd2 + i1;
  677. if (((i3 % 5) == 0) && (i3 != 10))
  678. {
  679. qs.setMemoState(1);
  680. qs.setMemoStateEx(1, 0);
  681. htmltext = getHtml(player, "30846-29.html", card1pic, card2pic, 0, -1);
  682. }
  683. else
  684. {
  685. qs.setMemoState(1005);
  686. qs.setMemoStateEx(1, card2pic);
  687. htmltext = getHtml(player, "30846-28.html", card1pic, card2pic, 0, -1);
  688. }
  689. }
  690. else if (rnd1 != i2)
  691. {
  692. if ((rnd2 == 5) || (i1 == 5))
  693. {
  694. qs.setMemoState(1);
  695. qs.setMemoStateEx(1, 0);
  696. htmltext = getHtml(player, "30846-29.html", card1pic, card2pic, 0, -1);
  697. }
  698. else
  699. {
  700. qs.setMemoState(1005);
  701. qs.setMemoStateEx(1, card2pic);
  702. htmltext = getHtml(player, "30846-28.html", card1pic, card2pic, 0, -1);
  703. }
  704. }
  705. }
  706. break;
  707. }
  708. case "30846-30.html":
  709. {
  710. if (qs.isStarted())
  711. {
  712. qs.exitQuest(true);
  713. htmltext = event;
  714. }
  715. break;
  716. }
  717. case "30846-31.html":
  718. case "30846-32.html":
  719. {
  720. if (qs.isStarted())
  721. {
  722. htmltext = event;
  723. }
  724. break;
  725. }
  726. }
  727. return htmltext;
  728. }
  729.  
  730. @Override
  731. public String onKill(L2Npc npc, L2PcInstance killer, boolean isSummon)
  732. {
  733. final List<L2PcInstance> players = new LinkedList<>();
  734. final QuestState qs = getQuestState(killer, false);
  735. if ((qs != null) && qs.isStarted() && (qs.getMemoState() >= 1) && (qs.getMemoState() <= 4))
  736. {
  737. players.add(killer);
  738. players.add(killer);
  739. }
  740.  
  741. if (killer.isInParty())
  742. {
  743. for (L2PcInstance partyMember : killer.getParty().getMembers())
  744. {
  745. final QuestState partyMemberQuestState = getQuestState(partyMember, false);
  746. if ((partyMemberQuestState != null) && partyMemberQuestState.isStarted() && (partyMemberQuestState.getMemoState() >= 1) && (partyMemberQuestState.getMemoState() <= 4))
  747. {
  748. players.add(partyMember);
  749. }
  750. }
  751. }
  752.  
  753. final L2PcInstance rewardedPlayer = players.get(getRandom(players.size()));
  754. if ((rewardedPlayer != null) && Util.checkIfInRange(1500, npc, rewardedPlayer, false))
  755. {
  756. final int rnd = getRandom(1000);
  757.  
  758. if (npc.getId() == SPITEFUL_SOUL_LEADER)
  759. {
  760. if (rnd <= SPITEFUL_SOUL_LEADER_CHANCE)
  761. {
  762. giveItems(rewardedPlayer, SPIRIT_BEAD, 2);
  763. }
  764. else
  765. {
  766. giveItems(rewardedPlayer, SPIRIT_BEAD, 1);
  767. }
  768. }
  769. else if (rnd < MONSTERS.get(npc.getId()))
  770. {
  771. giveItems(rewardedPlayer, SPIRIT_BEAD, 1);
  772. playSound(rewardedPlayer, Sound.ITEMSOUND_QUEST_ITEMGET);
  773. }
  774. }
  775.  
  776. return super.onKill(npc, killer, isSummon);
  777. }
  778.  
  779. private String getHtml(L2PcInstance player, String htmlName, int card1pic, int card2pic, int winCount, int card1)
  780. {
  781. String html = getHtm(player.getHtmlPrefix(), htmlName);
  782. html = html.replace("<?card1pic?>", Integer.toString(card1pic));
  783. html = html.replace("<?card2pic?>", Integer.toString(card2pic));
  784. html = html.replace("<?name?>", player.getName());
  785. if (winCount >= 0)
  786. {
  787. html = html.replace("<?wincount?>", Integer.toString(winCount));
  788. }
  789. if (card1 >= 0)
  790. {
  791. html = html.replace("<?card1?>", Integer.toString(card1));
  792. }
  793. return html;
  794. }
  795. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement