Q00611_AllianceWithVarkaSilenos.java 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333
  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.Q00611_AllianceWithVarkaSilenos;
  20. import java.util.HashMap;
  21. import java.util.Map;
  22. import com.l2jserver.gameserver.enums.QuestSound;
  23. import com.l2jserver.gameserver.model.actor.L2Npc;
  24. import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
  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. * Alliance with Varka Silenos (611)
  30. * @author malyelfik
  31. */
  32. public class Q00611_AllianceWithVarkaSilenos extends Quest
  33. {
  34. private static class DropInfo
  35. {
  36. private final int _chance;
  37. private final int _minCond;
  38. private final int _itemId;
  39. public DropInfo(int chance, int minCond)
  40. {
  41. _chance = chance;
  42. _minCond = minCond;
  43. switch (_minCond)
  44. {
  45. case 1:
  46. _itemId = KETRA_BADGE_SOLDIER;
  47. break;
  48. case 2:
  49. _itemId = KETRA_BADGE_OFFICER;
  50. break;
  51. default:
  52. _itemId = KETRA_BADGE_CAPTAIN;
  53. break;
  54. }
  55. }
  56. public int getMinCond()
  57. {
  58. return _minCond;
  59. }
  60. public int getChance()
  61. {
  62. return _chance;
  63. }
  64. public int getItemId()
  65. {
  66. return _itemId;
  67. }
  68. }
  69. // NPC
  70. private static final int NARAN_ASHANUK = 31378;
  71. // Monsters
  72. private static final Map<Integer, DropInfo> MOBS = new HashMap<>();
  73. static
  74. {
  75. MOBS.put(21324, new DropInfo(500, 1)); // Ketra Orc Footman
  76. MOBS.put(21325, new DropInfo(500, 1)); // Ketra's War Hound
  77. MOBS.put(21327, new DropInfo(509, 1)); // Ketra Orc Raider
  78. MOBS.put(21328, new DropInfo(521, 1)); // Ketra Orc Scout
  79. MOBS.put(21329, new DropInfo(519, 1)); // Ketra Orc Shaman
  80. MOBS.put(21331, new DropInfo(500, 2)); // Ketra Orc Warrior
  81. MOBS.put(21332, new DropInfo(500, 2)); // Ketra Orc Lieutenant
  82. MOBS.put(21334, new DropInfo(509, 2)); // Ketra Orc Medium
  83. MOBS.put(21335, new DropInfo(518, 2)); // Ketra Orc Elite Soldier
  84. MOBS.put(21336, new DropInfo(518, 2)); // Ketra Orc White Captain
  85. MOBS.put(21338, new DropInfo(527, 2)); // Ketra Orc Seer
  86. MOBS.put(21339, new DropInfo(500, 3)); // Ketra Orc General
  87. MOBS.put(21340, new DropInfo(500, 3)); // Ketra Orc Battalion Commander
  88. MOBS.put(21342, new DropInfo(508, 3)); // Ketra Orc Grand Seer
  89. MOBS.put(21343, new DropInfo(628, 2)); // Ketra Commander
  90. MOBS.put(21344, new DropInfo(604, 2)); // Ketra Elite Guard
  91. MOBS.put(21345, new DropInfo(627, 3)); // Ketra's Head Shaman
  92. MOBS.put(21346, new DropInfo(604, 3)); // Ketra's Head Guard
  93. MOBS.put(21347, new DropInfo(649, 3)); // Ketra Prophet
  94. MOBS.put(21348, new DropInfo(626, 3)); // Prophet's Guard
  95. MOBS.put(21349, new DropInfo(626, 3)); // Prophet's Aide
  96. }
  97. // Items
  98. private static final int KETRA_BADGE_SOLDIER = 7226;
  99. private static final int KETRA_BADGE_OFFICER = 7227;
  100. private static final int KETRA_BADGE_CAPTAIN = 7228;
  101. private static final int VALOR_FEATHER = 7229;
  102. private static final int WISDOM_FEATHER = 7230;
  103. private static final int[] KETRA_MARKS =
  104. {
  105. 7211, // Mark of Ketra's Alliance - Level 1
  106. 7212, // Mark of Ketra's Alliance - Level 2
  107. 7213, // Mark of Ketra's Alliance - Level 3
  108. 7214, // Mark of Ketra's Alliance - Level 4
  109. 7215, // Mark of Ketra's Alliance - Level 5
  110. };
  111. private static final int[] VARKA_MARKS =
  112. {
  113. 7221, // Mark of Varka's Alliance - Level 1
  114. 7222, // Mark of Varka's Alliance - Level 2
  115. 7223, // Mark of Varka's Alliance - Level 3
  116. 7224, // Mark of Varka's Alliance - Level 4
  117. 7225, // Mark of Varka's Alliance - Level 5
  118. };
  119. // Misc
  120. private static final int MIN_LEVEL = 74;
  121. private static final int[] SOLDIER_BADGE_COUNT =
  122. {
  123. 100, // cond 1
  124. 200, // cond 2
  125. 300, // cond 3
  126. 300, // cond 4
  127. 400, // cond 5
  128. };
  129. private static final int[] OFFICER_BADGE_COUNT =
  130. {
  131. 0, // cond 1
  132. 100, // cond 2
  133. 200, // cond 3
  134. 300, // cond 4
  135. 400, // cond 5
  136. };
  137. private static final int[] CAPTAIN_BADGE_COUNT =
  138. {
  139. 0, // cond 1
  140. 0, // cond 2
  141. 100, // cond 3
  142. 200, // cond 4
  143. 200, // cond 5
  144. };
  145. public Q00611_AllianceWithVarkaSilenos()
  146. {
  147. super(611, Q00611_AllianceWithVarkaSilenos.class.getSimpleName(), "Alliance with Varka Silenos");
  148. addStartNpc(NARAN_ASHANUK);
  149. addTalkId(NARAN_ASHANUK);
  150. addKillId(MOBS.keySet());
  151. registerQuestItems(KETRA_BADGE_CAPTAIN, KETRA_BADGE_OFFICER, KETRA_BADGE_SOLDIER);
  152. }
  153. private boolean canGetItem(QuestState st, int itemId)
  154. {
  155. int count = 0;
  156. switch (itemId)
  157. {
  158. case KETRA_BADGE_SOLDIER:
  159. count = SOLDIER_BADGE_COUNT[st.getCond() - 1];
  160. break;
  161. case KETRA_BADGE_OFFICER:
  162. count = OFFICER_BADGE_COUNT[st.getCond() - 1];
  163. break;
  164. case KETRA_BADGE_CAPTAIN:
  165. count = CAPTAIN_BADGE_COUNT[st.getCond() - 1];
  166. break;
  167. }
  168. if (st.getQuestItemsCount(itemId) < count)
  169. {
  170. return true;
  171. }
  172. return false;
  173. }
  174. @Override
  175. public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
  176. {
  177. final QuestState st = getQuestState(player, false);
  178. if (st == null)
  179. {
  180. return null;
  181. }
  182. String htmltext = event;
  183. switch (event)
  184. {
  185. case "31378-12a.html":
  186. case "31378-12b.html":
  187. case "31378-25.html":
  188. break;
  189. case "31378-04.htm":
  190. if (hasAtLeastOneQuestItem(player, KETRA_MARKS))
  191. {
  192. return "31378-03.htm";
  193. }
  194. st.setState(State.STARTED);
  195. st.playSound(QuestSound.ITEMSOUND_QUEST_ACCEPT);
  196. for (int i = 0; i < VARKA_MARKS.length; i++)
  197. {
  198. if (st.hasQuestItems(VARKA_MARKS[i]))
  199. {
  200. st.setCond(i + 2);
  201. return "31378-0" + (i + 5) + ".htm";
  202. }
  203. }
  204. st.setCond(1);
  205. break;
  206. case "31378-12.html":
  207. if (st.getQuestItemsCount(KETRA_BADGE_SOLDIER) < SOLDIER_BADGE_COUNT[0])
  208. {
  209. return getNoQuestMsg(player);
  210. }
  211. st.takeItems(KETRA_BADGE_SOLDIER, -1);
  212. st.giveItems(VARKA_MARKS[0], 1);
  213. st.setCond(2, true);
  214. break;
  215. case "31378-15.html":
  216. if ((st.getQuestItemsCount(KETRA_BADGE_SOLDIER) < SOLDIER_BADGE_COUNT[1]) || (st.getQuestItemsCount(KETRA_BADGE_OFFICER) < OFFICER_BADGE_COUNT[1]))
  217. {
  218. return getNoQuestMsg(player);
  219. }
  220. takeItems(player, -1, KETRA_BADGE_SOLDIER, KETRA_BADGE_OFFICER, VARKA_MARKS[0]);
  221. st.giveItems(VARKA_MARKS[1], 1);
  222. st.setCond(3, true);
  223. break;
  224. case "31378-18.html":
  225. if ((st.getQuestItemsCount(KETRA_BADGE_SOLDIER) < SOLDIER_BADGE_COUNT[2]) || (st.getQuestItemsCount(KETRA_BADGE_OFFICER) < OFFICER_BADGE_COUNT[2]) || (st.getQuestItemsCount(KETRA_BADGE_CAPTAIN) < CAPTAIN_BADGE_COUNT[2]))
  226. {
  227. return getNoQuestMsg(player);
  228. }
  229. takeItems(player, -1, KETRA_BADGE_SOLDIER, KETRA_BADGE_OFFICER, KETRA_BADGE_CAPTAIN, VARKA_MARKS[1]);
  230. st.giveItems(VARKA_MARKS[2], 1);
  231. st.setCond(4, true);
  232. break;
  233. case "31378-21.html":
  234. if (!st.hasQuestItems(VALOR_FEATHER) || (st.getQuestItemsCount(KETRA_BADGE_SOLDIER) < SOLDIER_BADGE_COUNT[3]) || (st.getQuestItemsCount(KETRA_BADGE_OFFICER) < OFFICER_BADGE_COUNT[3]) || (st.getQuestItemsCount(KETRA_BADGE_CAPTAIN) < CAPTAIN_BADGE_COUNT[3]))
  235. {
  236. return getNoQuestMsg(player);
  237. }
  238. takeItems(player, -1, KETRA_BADGE_SOLDIER, KETRA_BADGE_OFFICER, KETRA_BADGE_CAPTAIN, VALOR_FEATHER, VARKA_MARKS[2]);
  239. st.giveItems(VARKA_MARKS[3], 1);
  240. st.setCond(5, true);
  241. break;
  242. case "31378-26.html":
  243. takeItems(player, -1, VARKA_MARKS);
  244. takeItems(player, -1, VALOR_FEATHER, WISDOM_FEATHER);
  245. st.exitQuest(true, true);
  246. break;
  247. default:
  248. htmltext = null;
  249. break;
  250. }
  251. return htmltext;
  252. }
  253. @Override
  254. public String onKill(L2Npc npc, L2PcInstance killer, boolean isSummon)
  255. {
  256. final L2PcInstance member = getRandomPartyMemberState(killer, State.STARTED);
  257. if (member != null)
  258. {
  259. final QuestState st = getQuestState(member, false);
  260. final DropInfo info = MOBS.get(npc.getId());
  261. if ((st.getCond() >= info.getMinCond()) && (st.getCond() < 6) && canGetItem(st, info.getItemId()) && (getRandom(1000) < info.getChance()))
  262. {
  263. st.giveItems(info.getItemId(), 1);
  264. }
  265. }
  266. return super.onKill(npc, killer, isSummon);
  267. }
  268. @Override
  269. public String onTalk(L2Npc npc, L2PcInstance player)
  270. {
  271. String htmltext = getNoQuestMsg(player);
  272. final QuestState st = getQuestState(player, true);
  273. if (st == null)
  274. {
  275. return htmltext;
  276. }
  277. switch (st.getState())
  278. {
  279. case State.CREATED:
  280. htmltext = (player.getLevel() >= MIN_LEVEL) ? "31378-01.htm" : "31378-02.htm";
  281. break;
  282. case State.STARTED:
  283. switch (st.getCond())
  284. {
  285. case 1:
  286. htmltext = (st.getQuestItemsCount(KETRA_BADGE_SOLDIER) >= SOLDIER_BADGE_COUNT[0]) ? "31378-11.html" : "31378-10.html";
  287. break;
  288. case 2:
  289. htmltext = (st.hasQuestItems(VARKA_MARKS[0]) && (st.getQuestItemsCount(KETRA_BADGE_SOLDIER) >= SOLDIER_BADGE_COUNT[1]) && (st.getQuestItemsCount(KETRA_BADGE_OFFICER) >= OFFICER_BADGE_COUNT[1])) ? "31378-14.html" : "31378-13.html";
  290. break;
  291. case 3:
  292. htmltext = (st.hasQuestItems(VARKA_MARKS[1]) && (st.getQuestItemsCount(KETRA_BADGE_SOLDIER) >= SOLDIER_BADGE_COUNT[2]) && (st.getQuestItemsCount(KETRA_BADGE_OFFICER) >= OFFICER_BADGE_COUNT[2]) && (st.getQuestItemsCount(KETRA_BADGE_CAPTAIN) >= CAPTAIN_BADGE_COUNT[2])) ? "31378-17.html" : "31378-16.html";
  293. break;
  294. case 4:
  295. htmltext = (hasQuestItems(player, VARKA_MARKS[2], VALOR_FEATHER) && (st.getQuestItemsCount(KETRA_BADGE_SOLDIER) >= SOLDIER_BADGE_COUNT[3]) && (st.getQuestItemsCount(KETRA_BADGE_OFFICER) >= OFFICER_BADGE_COUNT[3]) && (st.getQuestItemsCount(KETRA_BADGE_CAPTAIN) >= CAPTAIN_BADGE_COUNT[3])) ? "31378-20.html" : "31378-19.html";
  296. break;
  297. case 5:
  298. if (!st.hasQuestItems(VARKA_MARKS[3]) || !st.hasQuestItems(WISDOM_FEATHER) || (st.getQuestItemsCount(KETRA_BADGE_SOLDIER) < SOLDIER_BADGE_COUNT[4]) || (st.getQuestItemsCount(KETRA_BADGE_OFFICER) < OFFICER_BADGE_COUNT[4]) || (st.getQuestItemsCount(KETRA_BADGE_CAPTAIN) < CAPTAIN_BADGE_COUNT[4]))
  299. {
  300. return "31378-22.html";
  301. }
  302. st.setCond(6, true);
  303. takeItems(player, -1, KETRA_BADGE_SOLDIER, KETRA_BADGE_OFFICER, KETRA_BADGE_CAPTAIN, WISDOM_FEATHER, VARKA_MARKS[3]);
  304. st.giveItems(VARKA_MARKS[4], 1);
  305. htmltext = "31378-23.html";
  306. break;
  307. case 6:
  308. if (st.hasQuestItems(VARKA_MARKS[4]))
  309. {
  310. htmltext = "31378-24.html";
  311. }
  312. break;
  313. }
  314. break;
  315. }
  316. return htmltext;
  317. }
  318. }