Q00905_RefinedDragonBlood.java 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220
  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.Q00905_RefinedDragonBlood;
  20. import java.util.HashMap;
  21. import java.util.Map;
  22. import com.l2jserver.gameserver.enums.QuestSound;
  23. import com.l2jserver.gameserver.enums.QuestType;
  24. import com.l2jserver.gameserver.model.actor.L2Npc;
  25. import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
  26. import com.l2jserver.gameserver.model.quest.Quest;
  27. import com.l2jserver.gameserver.model.quest.QuestState;
  28. import com.l2jserver.gameserver.model.quest.State;
  29. import com.l2jserver.gameserver.util.Util;
  30. /**
  31. * Refined Dragon Blood (905)
  32. * @author Zoey76
  33. */
  34. public final class Q00905_RefinedDragonBlood extends Quest
  35. {
  36. // NPCs
  37. private static final int[] SEPARATED_SOULS =
  38. {
  39. 32864,
  40. 32865,
  41. 32866,
  42. 32867,
  43. 32868,
  44. 32869,
  45. 32870,
  46. 32891
  47. };
  48. // Items
  49. private static final int UNREFINED_RED_DRAGON_BLOOD = 21913;
  50. private static final int UNREFINED_BLUE_DRAGON_BLOOD = 21914;
  51. private static final int REFINED_RED_DRAGON_BLOOD = 21903;
  52. private static final int REFINED_BLUE_DRAGON_BLOOD = 21904;
  53. // Monsters
  54. private static final Map<Integer, Integer> MONSTERS = new HashMap<>();
  55. static
  56. {
  57. MONSTERS.put(22844, UNREFINED_BLUE_DRAGON_BLOOD); // Dragon Knight
  58. MONSTERS.put(22845, UNREFINED_BLUE_DRAGON_BLOOD); // Dragon Knight
  59. MONSTERS.put(22846, UNREFINED_BLUE_DRAGON_BLOOD); // Elite Dragon Knight
  60. MONSTERS.put(22847, UNREFINED_RED_DRAGON_BLOOD); // Dragon Knight Warrior
  61. MONSTERS.put(22848, UNREFINED_RED_DRAGON_BLOOD); // Drake Leader
  62. MONSTERS.put(22849, UNREFINED_RED_DRAGON_BLOOD); // Drake Warrior
  63. MONSTERS.put(22850, UNREFINED_RED_DRAGON_BLOOD); // Drake Scout
  64. MONSTERS.put(22851, UNREFINED_RED_DRAGON_BLOOD); // Drake Mage
  65. MONSTERS.put(22852, UNREFINED_BLUE_DRAGON_BLOOD); // Dragon Guard
  66. MONSTERS.put(22853, UNREFINED_BLUE_DRAGON_BLOOD); // Dragon Mage
  67. }
  68. // Misc
  69. private static final int MIN_LEVEL = 83;
  70. private static final int DRAGON_BLOOD_COUNT = 10;
  71. public Q00905_RefinedDragonBlood()
  72. {
  73. super(905, Q00905_RefinedDragonBlood.class.getSimpleName(), "Refined Dragon Blood");
  74. addStartNpc(SEPARATED_SOULS);
  75. addTalkId(SEPARATED_SOULS);
  76. addKillId(MONSTERS.keySet());
  77. registerQuestItems(UNREFINED_RED_DRAGON_BLOOD, UNREFINED_BLUE_DRAGON_BLOOD);
  78. }
  79. @Override
  80. public void actionForEachPlayer(L2PcInstance player, L2Npc npc, boolean isSummon)
  81. {
  82. final QuestState st = getQuestState(player, false);
  83. if ((st != null) && st.isCond(1) && Util.checkIfInRange(1500, npc, player, false))
  84. {
  85. final int itemId = MONSTERS.get(npc.getId());
  86. if (st.getQuestItemsCount(itemId) < DRAGON_BLOOD_COUNT)
  87. {
  88. st.giveItems(itemId, 1);
  89. if ((st.getQuestItemsCount(UNREFINED_RED_DRAGON_BLOOD) >= DRAGON_BLOOD_COUNT) && (st.getQuestItemsCount(UNREFINED_BLUE_DRAGON_BLOOD) >= DRAGON_BLOOD_COUNT))
  90. {
  91. st.setCond(2, true);
  92. }
  93. else
  94. {
  95. st.playSound(QuestSound.ITEMSOUND_QUEST_ITEMGET);
  96. }
  97. }
  98. }
  99. }
  100. @Override
  101. public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
  102. {
  103. final QuestState st = getQuestState(player, false);
  104. if (st == null)
  105. {
  106. return null;
  107. }
  108. String htmltext = null;
  109. if (player.getLevel() >= MIN_LEVEL)
  110. {
  111. switch (event)
  112. {
  113. case "32864-04.htm":
  114. case "32864-09.html":
  115. case "32864-10.html":
  116. {
  117. htmltext = event;
  118. break;
  119. }
  120. case "32864-05.htm":
  121. {
  122. st.startQuest();
  123. htmltext = event;
  124. break;
  125. }
  126. case "32864-11.html":
  127. {
  128. st.giveItems(REFINED_RED_DRAGON_BLOOD, 1);
  129. st.playSound(QuestSound.ITEMSOUND_QUEST_ITEMGET);
  130. st.exitQuest(QuestType.DAILY, true);
  131. htmltext = event;
  132. break;
  133. }
  134. case "32864-12.html":
  135. {
  136. st.giveItems(REFINED_BLUE_DRAGON_BLOOD, 1);
  137. st.playSound(QuestSound.ITEMSOUND_QUEST_ITEMGET);
  138. st.exitQuest(QuestType.DAILY, true);
  139. htmltext = event;
  140. break;
  141. }
  142. }
  143. }
  144. return htmltext;
  145. }
  146. @Override
  147. public String onKill(L2Npc npc, L2PcInstance killer, boolean isSummon)
  148. {
  149. executeForEachPlayer(killer, npc, isSummon, true, false);
  150. return super.onKill(npc, killer, isSummon);
  151. }
  152. @Override
  153. public String onTalk(L2Npc npc, L2PcInstance player)
  154. {
  155. final QuestState st = getQuestState(player, true);
  156. if (st == null)
  157. {
  158. return getNoQuestMsg(player);
  159. }
  160. String htmltext = getNoQuestMsg(player);
  161. switch (st.getState())
  162. {
  163. case State.CREATED:
  164. {
  165. htmltext = (player.getLevel() < MIN_LEVEL) ? "32864-02.html" : "32864-01.htm";
  166. break;
  167. }
  168. case State.STARTED:
  169. {
  170. switch (st.getCond())
  171. {
  172. case 1:
  173. {
  174. htmltext = "32864-06.html";
  175. break;
  176. }
  177. case 2:
  178. {
  179. if (!st.isSet("wait"))
  180. {
  181. htmltext = "32864-07.html";
  182. st.set("wait", 1);
  183. }
  184. else
  185. {
  186. htmltext = "32864-08.html";
  187. }
  188. break;
  189. }
  190. }
  191. break;
  192. }
  193. case State.COMPLETED:
  194. {
  195. if (!st.isNowAvailable())
  196. {
  197. htmltext = "32864-03.html";
  198. }
  199. else
  200. {
  201. st.setState(State.CREATED);
  202. htmltext = (player.getLevel() < MIN_LEVEL) ? "32864-02.html" : "32864-01.htm";
  203. }
  204. break;
  205. }
  206. }
  207. return htmltext;
  208. }
  209. }