Q00062_PathOfTheTrooper.java 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303
  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.Q00062_PathOfTheTrooper;
  20. import com.l2jserver.gameserver.enums.QuestSound;
  21. import com.l2jserver.gameserver.enums.Race;
  22. import com.l2jserver.gameserver.model.actor.L2Npc;
  23. import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
  24. import com.l2jserver.gameserver.model.base.ClassId;
  25. import com.l2jserver.gameserver.model.quest.Quest;
  26. import com.l2jserver.gameserver.model.quest.QuestState;
  27. import com.l2jserver.gameserver.network.serverpackets.SocialAction;
  28. import com.l2jserver.gameserver.util.Util;
  29. /**
  30. * Path Of The Trooper (62)
  31. * @author ivantotov
  32. */
  33. public final class Q00062_PathOfTheTrooper extends Quest
  34. {
  35. // NPCs
  36. private static final int MASTER_SHUBAIN = 32194;
  37. private static final int MASTER_GWAIN = 32197;
  38. // Items
  39. private static final int FELIM_LIZARDMAN_HEAD = 9749;
  40. private static final int VENOMOUS_SPIDERS_LEG = 9750;
  41. private static final int TUMRAN_BUGBEAR_HEART = 9751;
  42. private static final int SHUBAINS_RECOMMENDATION = 9752;
  43. // Reward
  44. private static final int GWAINS_RECOMMENDATION = 9753;
  45. // Monster
  46. private static final int FELIM_LIZARDMAN_WARRIOR = 20014;
  47. private static final int VENOMOUS_SPIDER = 20038;
  48. private static final int TUMRAN_BUGBEAR = 20062;
  49. // Misc
  50. private static final int MIN_LEVEL = 18;
  51. public Q00062_PathOfTheTrooper()
  52. {
  53. super(62, Q00062_PathOfTheTrooper.class.getSimpleName(), "Path Of The Trooper");
  54. addStartNpc(MASTER_GWAIN);
  55. addTalkId(MASTER_GWAIN, MASTER_SHUBAIN);
  56. addKillId(FELIM_LIZARDMAN_WARRIOR, VENOMOUS_SPIDER, TUMRAN_BUGBEAR);
  57. registerQuestItems(FELIM_LIZARDMAN_HEAD, VENOMOUS_SPIDERS_LEG, TUMRAN_BUGBEAR_HEART, SHUBAINS_RECOMMENDATION);
  58. }
  59. @Override
  60. public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
  61. {
  62. final QuestState qs = getQuestState(player, false);
  63. if (qs == null)
  64. {
  65. return null;
  66. }
  67. String htmltext = null;
  68. switch (event)
  69. {
  70. case "ACCEPT":
  71. {
  72. if (qs.isCreated())
  73. {
  74. qs.startQuest();
  75. qs.setMemoState(1);
  76. htmltext = "32197-06.htm";
  77. }
  78. break;
  79. }
  80. case "32194-02.html":
  81. {
  82. if (qs.isCond(1))
  83. {
  84. qs.setMemoState(2);
  85. qs.setCond(2, true);
  86. htmltext = event;
  87. }
  88. break;
  89. }
  90. }
  91. return htmltext;
  92. }
  93. @Override
  94. public String onKill(L2Npc npc, L2PcInstance killer, boolean isSummon)
  95. {
  96. final QuestState qs = getQuestState(killer, false);
  97. if ((qs != null) && qs.isStarted() && Util.checkIfInRange(1500, npc, killer, true))
  98. {
  99. switch (npc.getId())
  100. {
  101. case FELIM_LIZARDMAN_WARRIOR:
  102. {
  103. if (qs.isCond(2) && (getQuestItemsCount(killer, FELIM_LIZARDMAN_HEAD) < 5))
  104. {
  105. giveItems(killer, FELIM_LIZARDMAN_HEAD, 1);
  106. if (getQuestItemsCount(killer, FELIM_LIZARDMAN_HEAD) == 5)
  107. {
  108. playSound(qs.getPlayer(), QuestSound.ITEMSOUND_QUEST_MIDDLE);
  109. }
  110. else
  111. {
  112. playSound(qs.getPlayer(), QuestSound.ITEMSOUND_QUEST_ITEMGET);
  113. }
  114. }
  115. break;
  116. }
  117. case VENOMOUS_SPIDER:
  118. {
  119. if (qs.isCond(3) && (getQuestItemsCount(killer, VENOMOUS_SPIDERS_LEG) < 10))
  120. {
  121. giveItems(killer, VENOMOUS_SPIDERS_LEG, 1);
  122. if (getQuestItemsCount(killer, VENOMOUS_SPIDERS_LEG) == 10)
  123. {
  124. playSound(qs.getPlayer(), QuestSound.ITEMSOUND_QUEST_MIDDLE);
  125. }
  126. else
  127. {
  128. playSound(qs.getPlayer(), QuestSound.ITEMSOUND_QUEST_ITEMGET);
  129. }
  130. }
  131. break;
  132. }
  133. case TUMRAN_BUGBEAR:
  134. {
  135. if (qs.isCond(5) && !hasQuestItems(killer, TUMRAN_BUGBEAR_HEART) && (getRandom(1000) < 500))
  136. {
  137. giveItems(killer, TUMRAN_BUGBEAR_HEART, 1);
  138. playSound(qs.getPlayer(), QuestSound.ITEMSOUND_QUEST_MIDDLE);
  139. }
  140. break;
  141. }
  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.isCreated())
  152. {
  153. if (npc.getId() == MASTER_GWAIN)
  154. {
  155. if (player.getRace() == Race.KAMAEL)
  156. {
  157. if (player.getClassId() == ClassId.maleSoldier)
  158. {
  159. if (player.getLevel() >= MIN_LEVEL)
  160. {
  161. htmltext = "32197-01.htm";
  162. }
  163. else
  164. {
  165. htmltext = "32197-02.html";
  166. }
  167. }
  168. else
  169. {
  170. htmltext = "32197-03.html";
  171. }
  172. }
  173. else
  174. {
  175. htmltext = "32197-04.html";
  176. }
  177. }
  178. }
  179. else if (qs.isStarted())
  180. {
  181. switch (npc.getId())
  182. {
  183. case MASTER_GWAIN:
  184. {
  185. switch (qs.getCond())
  186. {
  187. case 1:
  188. case 2:
  189. case 3:
  190. {
  191. htmltext = "32197-07.html";
  192. break;
  193. }
  194. case 4:
  195. {
  196. takeItems(player, SHUBAINS_RECOMMENDATION, 1);
  197. qs.setMemoState(5);
  198. qs.setCond(5, true);
  199. htmltext = "32197-08.html";
  200. break;
  201. }
  202. case 5:
  203. {
  204. if (!hasQuestItems(player, TUMRAN_BUGBEAR_HEART))
  205. {
  206. htmltext = "32197-09.html";
  207. }
  208. else
  209. {
  210. giveAdena(player, 163800, true);
  211. takeItems(player, TUMRAN_BUGBEAR_HEART, 1);
  212. giveItems(player, GWAINS_RECOMMENDATION, 1);
  213. final int level = player.getLevel();
  214. if (level >= 20)
  215. {
  216. addExpAndSp(player, 320534, 20848);
  217. }
  218. else if (level == 19)
  219. {
  220. addExpAndSp(player, 456128, 27546);
  221. }
  222. else
  223. {
  224. addExpAndSp(player, 591724, 34244);
  225. }
  226. qs.exitQuest(false, true);
  227. player.sendPacket(new SocialAction(player.getObjectId(), 3));
  228. qs.saveGlobalQuestVar("1ClassQuestFinished", "1");
  229. htmltext = "32197-10.html";
  230. }
  231. break;
  232. }
  233. }
  234. break;
  235. }
  236. case MASTER_SHUBAIN:
  237. {
  238. switch (qs.getCond())
  239. {
  240. case 1:
  241. {
  242. htmltext = "32194-01.html";
  243. break;
  244. }
  245. case 2:
  246. {
  247. if (getQuestItemsCount(player, FELIM_LIZARDMAN_HEAD) < 5)
  248. {
  249. htmltext = "32194-03.html";
  250. }
  251. else
  252. {
  253. takeItems(player, FELIM_LIZARDMAN_HEAD, -1);
  254. qs.setMemoState(3);
  255. qs.setCond(3, true);
  256. htmltext = "32194-04.html";
  257. }
  258. break;
  259. }
  260. case 3:
  261. {
  262. if (getQuestItemsCount(player, VENOMOUS_SPIDERS_LEG) < 10)
  263. {
  264. htmltext = "32194-05.html";
  265. }
  266. else
  267. {
  268. takeItems(player, VENOMOUS_SPIDERS_LEG, -1);
  269. giveItems(player, SHUBAINS_RECOMMENDATION, 1);
  270. qs.setMemoState(4);
  271. qs.setCond(4, true);
  272. htmltext = "32194-06.html";
  273. }
  274. break;
  275. }
  276. case 4:
  277. {
  278. htmltext = "32194-07.html";
  279. break;
  280. }
  281. }
  282. break;
  283. }
  284. }
  285. }
  286. else if (qs.isCompleted())
  287. {
  288. if (npc.getId() == MASTER_GWAIN)
  289. {
  290. htmltext = "32197-05.html";
  291. }
  292. }
  293. return htmltext;
  294. }
  295. }