Q00628_HuntGoldenRam.java 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227
  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.Q00628_HuntGoldenRam;
  20. import java.util.HashMap;
  21. import java.util.Map;
  22. import com.l2jserver.gameserver.model.actor.L2Npc;
  23. import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
  24. import com.l2jserver.gameserver.model.holders.ItemChanceHolder;
  25. import com.l2jserver.gameserver.model.quest.Quest;
  26. import com.l2jserver.gameserver.model.quest.QuestState;
  27. import com.l2jserver.gameserver.model.quest.State;
  28. /**
  29. * Hunt of the Golden Ram Mercenary Force (628)
  30. * @author netvirus, Zoey76
  31. */
  32. public final class Q00628_HuntGoldenRam extends Quest
  33. {
  34. // NPCs
  35. private static final int KAHMAN = 31554;
  36. // Items
  37. private static final int GOLDEN_RAM_BADGE_RECRUIT = 7246;
  38. private static final int GOLDEN_RAM_BADGE_SOLDIER = 7247;
  39. private static final int SPLINTER_STAKATO_CHITIN = 7248;
  40. private static final int NEEDLE_STAKATO_CHITIN = 7249;
  41. // Misc
  42. private static final int REQUIRED_ITEM_COUNT = 100;
  43. private static final int MIN_LVL = 66;
  44. // Mobs
  45. private static final Map<Integer, ItemChanceHolder> MOBS_DROP_CHANCES = new HashMap<>();
  46. static
  47. {
  48. MOBS_DROP_CHANCES.put(21508, new ItemChanceHolder(SPLINTER_STAKATO_CHITIN, 0.500, 1)); // splinter_stakato
  49. MOBS_DROP_CHANCES.put(21509, new ItemChanceHolder(SPLINTER_STAKATO_CHITIN, 0.430, 1)); // splinter_stakato_worker
  50. MOBS_DROP_CHANCES.put(21510, new ItemChanceHolder(SPLINTER_STAKATO_CHITIN, 0.521, 1)); // splinter_stakato_soldier
  51. MOBS_DROP_CHANCES.put(21511, new ItemChanceHolder(SPLINTER_STAKATO_CHITIN, 0.575, 1)); // splinter_stakato_drone
  52. MOBS_DROP_CHANCES.put(21512, new ItemChanceHolder(SPLINTER_STAKATO_CHITIN, 0.746, 1)); // splinter_stakato_drone_a
  53. MOBS_DROP_CHANCES.put(21513, new ItemChanceHolder(NEEDLE_STAKATO_CHITIN, 0.500, 2)); // needle_stakato
  54. MOBS_DROP_CHANCES.put(21514, new ItemChanceHolder(NEEDLE_STAKATO_CHITIN, 0.430, 2)); // needle_stakato_worker
  55. MOBS_DROP_CHANCES.put(21515, new ItemChanceHolder(NEEDLE_STAKATO_CHITIN, 0.520, 2)); // needle_stakato_soldier
  56. MOBS_DROP_CHANCES.put(21516, new ItemChanceHolder(NEEDLE_STAKATO_CHITIN, 0.531, 2)); // needle_stakato_drone
  57. MOBS_DROP_CHANCES.put(21517, new ItemChanceHolder(NEEDLE_STAKATO_CHITIN, 0.744, 2)); // needle_stakato_drone_a
  58. }
  59. public Q00628_HuntGoldenRam()
  60. {
  61. super(628, Q00628_HuntGoldenRam.class.getSimpleName(), "Hunt of the Golden Ram Mercenary Force");
  62. addStartNpc(KAHMAN);
  63. addTalkId(KAHMAN);
  64. addKillId(MOBS_DROP_CHANCES.keySet());
  65. registerQuestItems(SPLINTER_STAKATO_CHITIN, NEEDLE_STAKATO_CHITIN);
  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 "accept":
  79. {
  80. if (qs.isCreated() && (player.getLevel() >= MIN_LVL))
  81. {
  82. qs.startQuest();
  83. if (hasQuestItems(player, GOLDEN_RAM_BADGE_SOLDIER))
  84. {
  85. qs.setCond(3);
  86. htmltext = "31554-05.htm";
  87. }
  88. else if (hasQuestItems(player, GOLDEN_RAM_BADGE_RECRUIT))
  89. {
  90. qs.setCond(2);
  91. htmltext = "31554-04.htm";
  92. }
  93. else
  94. {
  95. htmltext = "31554-03.htm";
  96. }
  97. }
  98. break;
  99. }
  100. case "31554-08.html":
  101. {
  102. if (getQuestItemsCount(player, SPLINTER_STAKATO_CHITIN) >= REQUIRED_ITEM_COUNT)
  103. {
  104. giveItems(player, GOLDEN_RAM_BADGE_RECRUIT, 1);
  105. takeItems(player, SPLINTER_STAKATO_CHITIN, -1);
  106. qs.setCond(2, true);
  107. htmltext = event;
  108. }
  109. break;
  110. }
  111. case "31554-12.html":
  112. case "31554-13.html":
  113. {
  114. if (qs.isStarted())
  115. {
  116. htmltext = event;
  117. }
  118. break;
  119. }
  120. case "31554-14.html":
  121. {
  122. if (qs.isStarted())
  123. {
  124. qs.exitQuest(true, true);
  125. htmltext = event;
  126. }
  127. break;
  128. }
  129. }
  130. return htmltext;
  131. }
  132. @Override
  133. public String onKill(L2Npc npc, L2PcInstance killer, boolean isSummon)
  134. {
  135. final QuestState qs = getRandomPartyMemberState(killer, -1, 1, npc);
  136. if (qs != null)
  137. {
  138. final ItemChanceHolder item = MOBS_DROP_CHANCES.get(npc.getId());
  139. if ((item.getCount() <= qs.getCond()) && !qs.isCond(3))
  140. {
  141. giveItemRandomly(qs.getPlayer(), npc, item.getId(), 1, REQUIRED_ITEM_COUNT, item.getChance(), true);
  142. }
  143. }
  144. return super.onKill(npc, killer, isSummon);
  145. }
  146. @Override
  147. public String onTalk(L2Npc npc, L2PcInstance player)
  148. {
  149. final QuestState qs = getQuestState(player, true);
  150. String htmltext = getNoQuestMsg(player);
  151. if (qs == null)
  152. {
  153. return htmltext;
  154. }
  155. switch (qs.getState())
  156. {
  157. case State.CREATED:
  158. {
  159. htmltext = ((player.getLevel() >= MIN_LVL) ? "31554-01.htm" : "31554-02.htm");
  160. break;
  161. }
  162. case State.STARTED:
  163. {
  164. final long itemCountSplinter = getQuestItemsCount(player, SPLINTER_STAKATO_CHITIN);
  165. final long itemCountNeedle = getQuestItemsCount(player, NEEDLE_STAKATO_CHITIN);
  166. switch (qs.getCond())
  167. {
  168. case 1:
  169. {
  170. htmltext = ((itemCountSplinter >= REQUIRED_ITEM_COUNT) ? "31554-07.html" : "31554-06.html");
  171. break;
  172. }
  173. case 2:
  174. {
  175. if (hasQuestItems(player, GOLDEN_RAM_BADGE_RECRUIT))
  176. {
  177. if ((itemCountSplinter >= REQUIRED_ITEM_COUNT) && (itemCountNeedle >= REQUIRED_ITEM_COUNT))
  178. {
  179. takeItems(player, GOLDEN_RAM_BADGE_RECRUIT, -1);
  180. takeItems(player, SPLINTER_STAKATO_CHITIN, -1);
  181. takeItems(player, NEEDLE_STAKATO_CHITIN, -1);
  182. giveItems(player, GOLDEN_RAM_BADGE_SOLDIER, 1);
  183. qs.setCond(3, true);
  184. htmltext = "31554-10.html";
  185. }
  186. else
  187. {
  188. htmltext = "31554-09.html";
  189. }
  190. }
  191. else
  192. {
  193. qs.setCond(1);
  194. htmltext = ((itemCountSplinter >= REQUIRED_ITEM_COUNT) ? "31554-07.html" : "31554-06.html");
  195. }
  196. break;
  197. }
  198. case 3:
  199. {
  200. if (hasQuestItems(player, GOLDEN_RAM_BADGE_SOLDIER))
  201. {
  202. htmltext = "31554-11.html";
  203. }
  204. else
  205. {
  206. qs.setCond(1);
  207. htmltext = ((itemCountSplinter >= REQUIRED_ITEM_COUNT) ? "31554-07.html" : "31554-06.html");
  208. }
  209. break;
  210. }
  211. }
  212. break;
  213. }
  214. }
  215. return htmltext;
  216. }
  217. }