Q00414_PathOfTheOrcRaider.java 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360
  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.Q00414_PathOfTheOrcRaider;
  20. import com.l2jserver.gameserver.enums.QuestSound;
  21. import com.l2jserver.gameserver.model.actor.L2Npc;
  22. import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
  23. import com.l2jserver.gameserver.model.base.ClassId;
  24. import com.l2jserver.gameserver.model.quest.Quest;
  25. import com.l2jserver.gameserver.model.quest.QuestState;
  26. import com.l2jserver.gameserver.network.serverpackets.SocialAction;
  27. import com.l2jserver.gameserver.util.Util;
  28. /**
  29. * Path Of The Orc Raider (414)
  30. * @author ivantotov
  31. */
  32. public final class Q00414_PathOfTheOrcRaider extends Quest
  33. {
  34. // NPCs
  35. private static final int PREFECT_KARUKIA = 30570;
  36. private static final int PREFRCT_KASMAN = 30501;
  37. private static final int PREFRCT_TAZEER = 31978;
  38. // Items
  39. private static final int GREEN_BLOOD = 1578;
  40. private static final int GOBLIN_DWELLING_MAP = 1579;
  41. private static final int KURUKA_RATMAN_TOOTH = 1580;
  42. private static final int BETRAYER_UMBAR_REPORT = 1589;
  43. private static final int BETRAYER_ZAKAN_REPORT = 1590;
  44. private static final int HEAD_OF_BETRAYER = 1591;
  45. private static final int TIMORA_ORC_HEAD = 8544;
  46. // Reward
  47. private static final int MARK_OF_RAIDER = 1592;
  48. // Quest Monster
  49. private static final int KURUKA_RATMAN_LEADER = 27045;
  50. private static final int UMBAR_ORC = 27054;
  51. private static final int TIMORA_ORC = 27320;
  52. // Monster
  53. private static final int GOBLIN_TOMB_RAIDER_LEADER = 20320;
  54. // Misc
  55. private static final int MIN_LEVEL = 18;
  56. public Q00414_PathOfTheOrcRaider()
  57. {
  58. super(414, Q00414_PathOfTheOrcRaider.class.getSimpleName(), "Path Of The Orc Raider");
  59. addStartNpc(PREFECT_KARUKIA);
  60. addTalkId(PREFECT_KARUKIA, PREFRCT_KASMAN, PREFRCT_TAZEER);
  61. addKillId(KURUKA_RATMAN_LEADER, UMBAR_ORC, TIMORA_ORC, GOBLIN_TOMB_RAIDER_LEADER);
  62. registerQuestItems(GREEN_BLOOD, GOBLIN_DWELLING_MAP, KURUKA_RATMAN_TOOTH, BETRAYER_UMBAR_REPORT, BETRAYER_ZAKAN_REPORT, HEAD_OF_BETRAYER, TIMORA_ORC_HEAD);
  63. }
  64. @Override
  65. public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
  66. {
  67. final QuestState qs = getQuestState(player, false);
  68. if (qs == null)
  69. {
  70. return null;
  71. }
  72. String htmltext = null;
  73. switch (event)
  74. {
  75. case "ACCEPT":
  76. {
  77. if (player.getClassId() == ClassId.orcFighter)
  78. {
  79. if (player.getLevel() >= MIN_LEVEL)
  80. {
  81. if (hasQuestItems(player, MARK_OF_RAIDER))
  82. {
  83. htmltext = "30570-04.htm";
  84. }
  85. else
  86. {
  87. if (!hasQuestItems(player, GOBLIN_DWELLING_MAP))
  88. {
  89. giveItems(player, GOBLIN_DWELLING_MAP, 1);
  90. }
  91. qs.startQuest();
  92. htmltext = "30570-05.htm";
  93. }
  94. }
  95. else
  96. {
  97. htmltext = "30570-02.htm";
  98. }
  99. }
  100. else if (player.getClassId() == ClassId.orcRaider)
  101. {
  102. htmltext = "30570-02a.htm";
  103. }
  104. else
  105. {
  106. htmltext = "30570-03.htm";
  107. }
  108. break;
  109. }
  110. case "30570-07a.html":
  111. {
  112. if (hasQuestItems(player, GOBLIN_DWELLING_MAP) && (getQuestItemsCount(player, KURUKA_RATMAN_TOOTH) >= 10))
  113. {
  114. takeItems(player, GOBLIN_DWELLING_MAP, 1);
  115. takeItems(player, KURUKA_RATMAN_TOOTH, -1);
  116. giveItems(player, BETRAYER_UMBAR_REPORT, 1);
  117. giveItems(player, BETRAYER_ZAKAN_REPORT, 1);
  118. qs.setCond(3, true);
  119. htmltext = event;
  120. }
  121. break;
  122. }
  123. case "30570-07b.html":
  124. {
  125. if (hasQuestItems(player, GOBLIN_DWELLING_MAP) && (getQuestItemsCount(player, KURUKA_RATMAN_TOOTH) >= 10))
  126. {
  127. takeItems(player, GOBLIN_DWELLING_MAP, 1);
  128. takeItems(player, KURUKA_RATMAN_TOOTH, -1);
  129. qs.setCond(5, true);
  130. qs.setMemoState(2);
  131. htmltext = event;
  132. }
  133. break;
  134. }
  135. case "31978-04.html":
  136. {
  137. if (qs.isMemoState(2))
  138. {
  139. htmltext = event;
  140. }
  141. break;
  142. }
  143. case "31978-02.html":
  144. {
  145. if (qs.isMemoState(2))
  146. {
  147. qs.setMemoState(3);
  148. qs.setCond(6, true);
  149. htmltext = event;
  150. }
  151. break;
  152. }
  153. }
  154. return htmltext;
  155. }
  156. @Override
  157. public String onKill(L2Npc npc, L2PcInstance killer, boolean isSummon)
  158. {
  159. final QuestState qs = getQuestState(killer, false);
  160. if ((qs != null) && qs.isStarted() && Util.checkIfInRange(1500, npc, killer, true))
  161. {
  162. switch (npc.getId())
  163. {
  164. case GOBLIN_TOMB_RAIDER_LEADER:
  165. {
  166. if (hasQuestItems(killer, GOBLIN_DWELLING_MAP) && (getQuestItemsCount(killer, KURUKA_RATMAN_TOOTH) < 10) && (getQuestItemsCount(killer, GREEN_BLOOD) <= 20))
  167. {
  168. if (getRandom(100) < (getQuestItemsCount(killer, GREEN_BLOOD) * 5))
  169. {
  170. takeItems(killer, GREEN_BLOOD, -1);
  171. addAttackPlayerDesire(addSpawn(KURUKA_RATMAN_LEADER, npc, true, 0, true), killer);
  172. }
  173. else
  174. {
  175. giveItems(killer, GREEN_BLOOD, 1);
  176. playSound(killer, QuestSound.ITEMSOUND_QUEST_ITEMGET);
  177. }
  178. }
  179. break;
  180. }
  181. case KURUKA_RATMAN_LEADER:
  182. {
  183. if (hasQuestItems(killer, GOBLIN_DWELLING_MAP) && (getQuestItemsCount(killer, KURUKA_RATMAN_TOOTH) < 10))
  184. {
  185. takeItems(killer, GREEN_BLOOD, -1);
  186. if (getQuestItemsCount(killer, KURUKA_RATMAN_TOOTH) >= 9)
  187. {
  188. giveItems(killer, KURUKA_RATMAN_TOOTH, 1);
  189. qs.setCond(2, true);
  190. }
  191. else
  192. {
  193. giveItems(killer, KURUKA_RATMAN_TOOTH, 1);
  194. playSound(killer, QuestSound.ITEMSOUND_QUEST_ITEMGET);
  195. }
  196. }
  197. break;
  198. }
  199. case UMBAR_ORC:
  200. {
  201. if (hasAtLeastOneQuestItem(killer, BETRAYER_UMBAR_REPORT, BETRAYER_ZAKAN_REPORT) && (getQuestItemsCount(killer, HEAD_OF_BETRAYER) < 2) && (getRandom(10) < 2))
  202. {
  203. giveItems(killer, HEAD_OF_BETRAYER, 1);
  204. if (hasQuestItems(killer, BETRAYER_ZAKAN_REPORT))
  205. {
  206. takeItems(killer, BETRAYER_ZAKAN_REPORT, 1);
  207. }
  208. else if (hasQuestItems(killer, BETRAYER_UMBAR_REPORT))
  209. {
  210. takeItems(killer, BETRAYER_UMBAR_REPORT, 1);
  211. }
  212. if (getQuestItemsCount(killer, HEAD_OF_BETRAYER) == 2)
  213. {
  214. qs.setCond(4, true);
  215. }
  216. else
  217. {
  218. playSound(killer, QuestSound.ITEMSOUND_QUEST_ITEMGET);
  219. }
  220. }
  221. break;
  222. }
  223. case TIMORA_ORC:
  224. {
  225. if (qs.isMemoState(3) && !hasQuestItems(killer, TIMORA_ORC_HEAD))
  226. {
  227. if (getRandom(100) < 60)
  228. {
  229. giveItems(killer, TIMORA_ORC_HEAD, 1);
  230. qs.setCond(7, true);
  231. }
  232. }
  233. break;
  234. }
  235. }
  236. }
  237. return super.onKill(npc, killer, isSummon);
  238. }
  239. @Override
  240. public String onTalk(L2Npc npc, L2PcInstance player)
  241. {
  242. final QuestState qs = getQuestState(player, true);
  243. String htmltext = getNoQuestMsg(player);
  244. if (qs.isCreated() || qs.isCompleted())
  245. {
  246. if (npc.getId() == PREFECT_KARUKIA)
  247. {
  248. htmltext = "30570-01.htm";
  249. }
  250. }
  251. else if (qs.isStarted())
  252. {
  253. switch (npc.getId())
  254. {
  255. case PREFECT_KARUKIA:
  256. {
  257. if (hasQuestItems(player, GOBLIN_DWELLING_MAP) && (getQuestItemsCount(player, KURUKA_RATMAN_TOOTH) < 10))
  258. {
  259. htmltext = "30570-06.html";
  260. }
  261. else if (hasQuestItems(player, GOBLIN_DWELLING_MAP) && (getQuestItemsCount(player, KURUKA_RATMAN_TOOTH) >= 10))
  262. {
  263. if (!hasAtLeastOneQuestItem(player, BETRAYER_UMBAR_REPORT, BETRAYER_ZAKAN_REPORT))
  264. {
  265. htmltext = "30570-07.html";
  266. }
  267. }
  268. else if (hasQuestItems(player, HEAD_OF_BETRAYER) || hasAtLeastOneQuestItem(player, BETRAYER_UMBAR_REPORT, BETRAYER_ZAKAN_REPORT))
  269. {
  270. htmltext = "30570-08.html";
  271. }
  272. else if (qs.isMemoState(2))
  273. {
  274. htmltext = "30570-07b.html";
  275. }
  276. break;
  277. }
  278. case PREFRCT_KASMAN:
  279. {
  280. if (!hasQuestItems(player, HEAD_OF_BETRAYER) && (getQuestItemsCount(player, BETRAYER_UMBAR_REPORT, BETRAYER_ZAKAN_REPORT) >= 2))
  281. {
  282. htmltext = "30501-01.html";
  283. }
  284. else if (getQuestItemsCount(player, HEAD_OF_BETRAYER) == 1)
  285. {
  286. htmltext = "30501-02.html";
  287. }
  288. else if (getQuestItemsCount(player, HEAD_OF_BETRAYER) == 2)
  289. {
  290. giveAdena(player, 163800, true);
  291. giveItems(player, MARK_OF_RAIDER, 1);
  292. final int level = player.getLevel();
  293. if (level >= 20)
  294. {
  295. addExpAndSp(player, 320534, 21312);
  296. }
  297. else if (level == 19)
  298. {
  299. addExpAndSp(player, 456128, 28010);
  300. }
  301. else
  302. {
  303. addExpAndSp(player, 591724, 34708);
  304. }
  305. qs.exitQuest(false, true);
  306. player.sendPacket(new SocialAction(player.getObjectId(), 3));
  307. qs.saveGlobalQuestVar("1ClassQuestFinished", "1");
  308. htmltext = "30501-03.html";
  309. }
  310. break;
  311. }
  312. case PREFRCT_TAZEER:
  313. {
  314. if (qs.isMemoState(2))
  315. {
  316. htmltext = "31978-01.html";
  317. }
  318. else if (qs.isMemoState(3))
  319. {
  320. if (!hasQuestItems(player, TIMORA_ORC_HEAD))
  321. {
  322. htmltext = "31978-03.html";
  323. }
  324. else
  325. {
  326. giveAdena(player, 81900, true);
  327. giveItems(player, MARK_OF_RAIDER, 1);
  328. final int level = player.getLevel();
  329. if (level >= 20)
  330. {
  331. addExpAndSp(player, 160267, 10656);
  332. }
  333. else if (level == 19)
  334. {
  335. addExpAndSp(player, 228064, 14005);
  336. }
  337. else
  338. {
  339. addExpAndSp(player, 295862, 17354);
  340. }
  341. qs.exitQuest(false, true);
  342. player.sendPacket(new SocialAction(player.getObjectId(), 3));
  343. qs.saveGlobalQuestVar("1ClassQuestFinished", "1");
  344. htmltext = "31978-05.html";
  345. }
  346. }
  347. break;
  348. }
  349. }
  350. }
  351. return htmltext;
  352. }
  353. }