SagasSuperClass.java 29 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019
  1. /*
  2. * This program is free software: you can redistribute it and/or modify it under
  3. * the terms of the GNU General Public License as published by the Free Software
  4. * Foundation, either version 3 of the License, or (at your option) any later
  5. * version.
  6. *
  7. * This program is distributed in the hope that it will be useful, but WITHOUT
  8. * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
  9. * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
  10. * details.
  11. *
  12. * You should have received a copy of the GNU General Public License along with
  13. * this program. If not, see <http://www.gnu.org/licenses/>.
  14. */
  15. package quests.SagasScripts;
  16. import com.l2jserver.Config;
  17. import com.l2jserver.gameserver.ai.CtrlIntention;
  18. import com.l2jserver.gameserver.instancemanager.QuestManager;
  19. import com.l2jserver.gameserver.model.L2Object;
  20. import com.l2jserver.gameserver.model.L2Party;
  21. import com.l2jserver.gameserver.model.L2Skill;
  22. import com.l2jserver.gameserver.model.L2World;
  23. import com.l2jserver.gameserver.model.actor.L2Attackable;
  24. import com.l2jserver.gameserver.model.actor.L2Character;
  25. import com.l2jserver.gameserver.model.actor.L2Npc;
  26. import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
  27. import com.l2jserver.gameserver.model.quest.Quest;
  28. import com.l2jserver.gameserver.model.quest.QuestState;
  29. import com.l2jserver.gameserver.model.quest.State;
  30. import com.l2jserver.gameserver.model.quest.jython.QuestJython;
  31. import com.l2jserver.gameserver.network.serverpackets.MagicSkillUse;
  32. import com.l2jserver.gameserver.network.serverpackets.NpcSay;
  33. import com.l2jserver.util.L2FastList;
  34. import com.l2jserver.util.L2FastMap;
  35. import com.l2jserver.util.Rnd;
  36. public class SagasSuperClass extends QuestJython
  37. {
  38. private static L2FastList<Quest> _scripts = new L2FastList<Quest>();
  39. public String qn = "SagasSuperClass";
  40. public int qnu;
  41. public int[] NPC = {};
  42. public int[] Items = {};
  43. public int[] Mob = {};
  44. public int[] classid = {};
  45. public int[] prevclass = {};
  46. public int[] X = {};
  47. public int[] Y = {};
  48. public int[] Z = {};
  49. public String[] Text = {};
  50. L2FastMap<L2Npc, Integer> _SpawnList = new L2FastMap<L2Npc, Integer>();
  51. int[] QuestClass[] = { { 0x7f }, { 0x80, 0x81 }, { 0x82 }, { 0x05 }, { 0x14 }, { 0x15 }, { 0x02 }, { 0x03 }, { 0x2e }, { 0x30 }, { 0x33 }, { 0x34 }, { 0x08 }, { 0x17 }, { 0x24 }, { 0x09 }, { 0x18 }, { 0x25 }, { 0x10 }, { 0x11 }, { 0x1e }, { 0x0c }, { 0x1b }, { 0x28 }, { 0x0e }, { 0x1c }, { 0x29 }, { 0x0d }, { 0x06 }, { 0x22 }, { 0x21 }, { 0x2b }, { 0x37 }, { 0x39 } };
  52. public SagasSuperClass(int id, String name, String descr)
  53. {
  54. super(id, name, descr);
  55. qnu = id;
  56. }
  57. public void registerNPCs()
  58. {
  59. addStartNpc(NPC[0]);
  60. addAttackId(Mob[2]);
  61. addAttackId(Mob[1]);
  62. addSkillSeeId(Mob[1]);
  63. addFirstTalkId(NPC[4]);
  64. for (int npc : NPC)
  65. addTalkId(npc);
  66. for (int mobid : Mob)
  67. addKillId(mobid);
  68. questItemIds = Items.clone();
  69. questItemIds[0] = 0;
  70. questItemIds[2] = 0; //remove Ice Crystal and Divine Stone of Wisdom
  71. for (int Archon_Minion = 21646; Archon_Minion < 21652; Archon_Minion++)
  72. addKillId(Archon_Minion);
  73. int[] Archon_Hellisha_Norm = { 18212, 18214, 18215, 18216, 18218 };
  74. for (int i = 0; i < Archon_Hellisha_Norm.length; i++)
  75. addKillId(Archon_Hellisha_Norm[i]);
  76. for (int Guardian_Angel = 27214; Guardian_Angel < 27217; Guardian_Angel++)
  77. addKillId(Guardian_Angel);
  78. }
  79. public void Cast(L2Npc npc, L2Character target, int skillId, int level)
  80. {
  81. target.broadcastPacket(new MagicSkillUse(target, target, skillId, level, 6000, 1));
  82. target.broadcastPacket(new MagicSkillUse(npc, npc, skillId, level, 6000, 1));
  83. }
  84. public void AutoChat(L2Npc npc, String text)
  85. {
  86. npc.broadcastPacket(new NpcSay(npc.getObjectId(), 0, npc.getNpcId(), text));
  87. }
  88. public void AddSpawn(QuestState st, L2Npc mob)
  89. {
  90. _SpawnList.put(mob, st.getPlayer().getObjectId());
  91. }
  92. public L2Npc FindSpawn(L2PcInstance player, L2Npc npc)
  93. {
  94. if (_SpawnList.containsKey(npc) && _SpawnList.get(npc) == player.getObjectId())
  95. return npc;
  96. return null;
  97. }
  98. public void DeleteSpawn(QuestState st, L2Npc npc)
  99. {
  100. if (_SpawnList.containsKey(npc))
  101. {
  102. _SpawnList.remove(npc);
  103. npc.deleteMe();
  104. }
  105. }
  106. public QuestState findRightState(L2Npc npc)
  107. {
  108. L2PcInstance player = null;
  109. QuestState st = null;
  110. if (_SpawnList.containsKey(npc))
  111. {
  112. player = L2World.getInstance().getPlayer(_SpawnList.get(npc));
  113. if (player != null)
  114. st = player.getQuestState(qn);
  115. }
  116. return st;
  117. }
  118. public void giveHallishaMark(QuestState st2)
  119. {
  120. if (st2.getInt("spawned") == 0)
  121. {
  122. if (st2.getQuestItemsCount(Items[3]) >= 700)
  123. {
  124. st2.takeItems(Items[3], 20);
  125. int xx = st2.getPlayer().getX();
  126. int yy = st2.getPlayer().getY();
  127. int zz = st2.getPlayer().getZ();
  128. L2Npc Archon = st2.addSpawn(Mob[1], xx, yy, zz);
  129. AddSpawn(st2, Archon);
  130. st2.set("spawned", "1");
  131. st2.startQuestTimer("Archon Hellisha has despawned", 600000, Archon);
  132. AutoChat(Archon, Text[13].replace("PLAYERNAME", st2.getPlayer().getName()));
  133. ((L2Attackable) Archon).addDamageHate(st2.getPlayer(), 0, 99999);
  134. Archon.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, st2.getPlayer(), null);
  135. }
  136. else
  137. st2.giveItems(Items[3], Rnd.get(1, 4));
  138. }
  139. }
  140. public QuestState findQuest(L2PcInstance player)
  141. {
  142. QuestState st = player.getQuestState(qn);
  143. if (st != null)
  144. {
  145. if (qnu != 68)
  146. {
  147. if (player.getClassId().getId() == QuestClass[qnu - 67][0])
  148. return st;
  149. }
  150. else
  151. {
  152. for (int q = 0; q < 2; q++)
  153. {
  154. if (player.getClassId().getId() == QuestClass[1][q])
  155. return st;
  156. }
  157. }
  158. }
  159. return null;
  160. }
  161. public int getClassId(L2PcInstance player)
  162. {
  163. if (player.getClassId().getId() == 0x81)
  164. {
  165. return classid[1];
  166. }
  167. return classid[0];
  168. }
  169. public int getPrevClass(L2PcInstance player)
  170. {
  171. if (player.getClassId().getId() == 0x81)
  172. {
  173. if (prevclass.length == 1)
  174. return -1;
  175. else
  176. return prevclass[1];
  177. }
  178. return prevclass[0];
  179. }
  180. @Override
  181. public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
  182. {
  183. QuestState st = player.getQuestState(qn);
  184. String htmltext = "";
  185. if (st != null)
  186. {
  187. if (event.equalsIgnoreCase("0-011.htm") || event.equalsIgnoreCase("0-012.htm") || event.equalsIgnoreCase("0-013.htm") || event.equalsIgnoreCase("0-014.htm") || event.equalsIgnoreCase("0-015.htm"))
  188. htmltext = event;
  189. else if (event.equalsIgnoreCase("accept"))
  190. {
  191. st.set("cond", "1");
  192. st.setState(State.STARTED);
  193. st.playSound("ItemSound.quest_accept");
  194. st.giveItems(Items[10], 1);
  195. htmltext = "0-03.htm";
  196. }
  197. else if (event.equalsIgnoreCase("0-1"))
  198. {
  199. if (player.getLevel() < 76)
  200. {
  201. htmltext = "0-02.htm";
  202. if (st.getState() == State.CREATED)
  203. st.exitQuest(true);
  204. }
  205. else
  206. htmltext = "0-05.htm";
  207. }
  208. else if (event.equalsIgnoreCase("0-2"))
  209. {
  210. if (player.getLevel() >= 76)
  211. {
  212. st.exitQuest(false);
  213. st.set("cond", "0");
  214. htmltext = "0-07.htm";
  215. st.takeItems(Items[10], -1);
  216. st.addExpAndSp(2586527, 0);
  217. st.giveItems(57, 5000000);
  218. st.giveItems(6622, 1);
  219. int Class = getClassId(player);
  220. int prevClass = getPrevClass(player);
  221. player.setClassId(Class);
  222. if (!player.isSubClassActive() && player.getBaseClass() == prevClass)
  223. player.setBaseClass(Class);
  224. player.broadcastUserInfo();
  225. Cast(npc, player, 4339, 1);
  226. Quest q = QuestManager.getInstance().getQuest("SkillTransfer");
  227. if (q != null)
  228. q.startQuestTimer("givePormanders", 1, npc, player);
  229. }
  230. else
  231. {
  232. st.takeItems(Items[10], -1);
  233. st.playSound("ItemSound.quest_middle");
  234. st.set("cond", "20");
  235. htmltext = "0-08.htm";
  236. }
  237. }
  238. else if (event.equalsIgnoreCase("1-3"))
  239. {
  240. st.set("cond", "3");
  241. htmltext = "1-05.htm";
  242. }
  243. else if (event.equalsIgnoreCase("1-4"))
  244. {
  245. st.set("cond", "4");
  246. st.takeItems(Items[0], 1);
  247. if (Items[11] != 0)
  248. st.takeItems(Items[11], 1);
  249. st.giveItems(Items[1], 1);
  250. htmltext = "1-06.htm";
  251. }
  252. else if (event.equalsIgnoreCase("2-1"))
  253. {
  254. st.set("cond", "2");
  255. htmltext = "2-05.htm";
  256. }
  257. else if (event.equalsIgnoreCase("2-2"))
  258. {
  259. st.set("cond", "5");
  260. st.takeItems(Items[1], 1);
  261. st.giveItems(Items[4], 1);
  262. htmltext = "2-06.htm";
  263. }
  264. else if (event.equalsIgnoreCase("3-5"))
  265. {
  266. htmltext = "3-07.htm";
  267. }
  268. else if (event.equalsIgnoreCase("3-6"))
  269. {
  270. st.set("cond", "11");
  271. htmltext = "3-02.htm";
  272. }
  273. else if (event.equalsIgnoreCase("3-7"))
  274. {
  275. st.set("cond", "12");
  276. htmltext = "3-03.htm";
  277. }
  278. else if (event.equalsIgnoreCase("3-8"))
  279. {
  280. st.set("cond", "13");
  281. st.takeItems(Items[2], 1);
  282. st.giveItems(Items[7], 1);
  283. htmltext = "3-08.htm";
  284. }
  285. else if (event.equalsIgnoreCase("4-1"))
  286. {
  287. htmltext = "4-010.htm";
  288. }
  289. else if (event.equalsIgnoreCase("4-2"))
  290. {
  291. st.giveItems(Items[9], 1);
  292. st.set("cond", "18");
  293. st.playSound("ItemSound.quest_middle");
  294. htmltext = "4-011.htm";
  295. }
  296. else if (event.equalsIgnoreCase("4-3"))
  297. {
  298. st.giveItems(Items[9], 1);
  299. st.set("cond", "18");
  300. AutoChat(npc, Text[13].replace("PLAYERNAME", player.getName()));
  301. st.set("Quest0", "0");
  302. cancelQuestTimer("Mob_2 has despawned", npc, player);
  303. st.playSound("ItemSound.quest_middle");
  304. DeleteSpawn(st, npc);
  305. return null;
  306. }
  307. else if (event.equalsIgnoreCase("5-1"))
  308. {
  309. st.set("cond", "6");
  310. st.takeItems(Items[4], 1);
  311. Cast(npc, player, 4546, 1);
  312. st.playSound("ItemSound.quest_middle");
  313. htmltext = "5-02.htm";
  314. }
  315. else if (event.equalsIgnoreCase("6-1"))
  316. {
  317. st.set("cond", "8");
  318. st.takeItems(Items[5], 1);
  319. Cast(npc, player, 4546, 1);
  320. st.playSound("ItemSound.quest_middle");
  321. htmltext = "6-03.htm";
  322. }
  323. else if (event.equalsIgnoreCase("7-1"))
  324. {
  325. if (st.getInt("spawned") == 1)
  326. htmltext = "7-03.htm";
  327. else if (st.getInt("spawned") == 0)
  328. {
  329. L2Npc Mob_1 = st.addSpawn(Mob[0], X[0], Y[0], Z[0]);
  330. st.set("spawned", "1");
  331. st.startQuestTimer("Mob_1 Timer 1", 500, Mob_1);
  332. st.startQuestTimer("Mob_1 has despawned", 300000, Mob_1);
  333. AddSpawn(st, Mob_1);
  334. htmltext = "7-02.htm";
  335. }
  336. else
  337. htmltext = "7-04.htm";
  338. }
  339. else if (event.equalsIgnoreCase("7-2"))
  340. {
  341. st.set("cond", "10");
  342. st.takeItems(Items[6], 1);
  343. Cast(npc, player, 4546, 1);
  344. st.playSound("ItemSound.quest_middle");
  345. htmltext = "7-06.htm";
  346. }
  347. else if (event.equalsIgnoreCase("8-1"))
  348. {
  349. st.set("cond", "14");
  350. st.takeItems(Items[7], 1);
  351. Cast(npc, player, 4546, 1);
  352. st.playSound("ItemSound.quest_middle");
  353. htmltext = "8-02.htm";
  354. }
  355. else if (event.equalsIgnoreCase("9-1"))
  356. {
  357. st.set("cond", "17");
  358. st.takeItems(Items[8], 1);
  359. Cast(npc, player, 4546, 1);
  360. st.playSound("ItemSound.quest_middle");
  361. htmltext = "9-03.htm";
  362. }
  363. else if (event.equalsIgnoreCase("10-1"))
  364. {
  365. if (st.getInt("Quest0") == 0)
  366. {
  367. L2Npc Mob_3 = st.addSpawn(Mob[2], X[1], Y[1], Z[1]);
  368. L2Npc Mob_2 = st.addSpawn(NPC[4], X[2], Y[2], Z[2]);
  369. AddSpawn(st, Mob_3);
  370. AddSpawn(st, Mob_2);
  371. st.set("Mob_2", String.valueOf(Mob_2.getObjectId()));
  372. st.set("Quest0", "1");
  373. st.set("Quest1", "45");
  374. st.startRepeatingQuestTimer("Mob_3 Timer 1", 500, Mob_3);
  375. st.startQuestTimer("Mob_3 has despawned", 59000, Mob_3);
  376. st.startQuestTimer("Mob_2 Timer 1", 500, Mob_2);
  377. st.startQuestTimer("Mob_2 has despawned", 60000, Mob_2);
  378. htmltext = "10-02.htm";
  379. }
  380. else if (st.getInt("Quest1") == 45)
  381. htmltext = "10-03.htm";
  382. else
  383. htmltext = "10-04.htm";
  384. }
  385. else if (event.equalsIgnoreCase("10-2"))
  386. {
  387. st.set("cond", "19");
  388. st.takeItems(Items[9], 1);
  389. Cast(npc, player, 4546, 1);
  390. st.playSound("ItemSound.quest_middle");
  391. htmltext = "10-06.htm";
  392. }
  393. else if (event.equalsIgnoreCase("11-9"))
  394. {
  395. st.set("cond", "15");
  396. htmltext = "11-03.htm";
  397. }
  398. else if (event.equalsIgnoreCase("Mob_1 Timer 1"))
  399. {
  400. AutoChat(npc, Text[0].replace("PLAYERNAME", player.getName()));
  401. return null;
  402. }
  403. else if (event.equalsIgnoreCase("Mob_1 has despawned"))
  404. {
  405. AutoChat(npc, Text[1].replace("PLAYERNAME", player.getName()));
  406. st.set("spawned", "0");
  407. DeleteSpawn(st, npc);
  408. return null;
  409. }
  410. else if (event.equalsIgnoreCase("Archon Hellisha has despawned"))
  411. {
  412. AutoChat(npc, Text[6].replace("PLAYERNAME", player.getName()));
  413. st.set("spawned", "0");
  414. DeleteSpawn(st, npc);
  415. return null;
  416. }
  417. else if (event.equalsIgnoreCase("Mob_3 Timer 1"))
  418. {
  419. L2Npc Mob_2 = FindSpawn(player, (L2Npc) L2World.getInstance().findObject(st.getInt("Mob_2")));
  420. if (npc.getKnownList().knowsObject(Mob_2))
  421. {
  422. ((L2Attackable) npc).addDamageHate(Mob_2, 0, 99999);
  423. npc.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, Mob_2, null);
  424. Mob_2.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, npc, null);
  425. AutoChat(npc, Text[14].replace("PLAYERNAME", player.getName()));
  426. cancelQuestTimer("Mob_3 Timer 1", npc, player);
  427. }
  428. return null;
  429. }
  430. else if (event.equalsIgnoreCase("Mob_3 has despawned"))
  431. {
  432. AutoChat(npc, Text[15].replace("PLAYERNAME", player.getName()));
  433. st.set("Quest0", "2");
  434. DeleteSpawn(st, npc);
  435. return null;
  436. }
  437. else if (event.equalsIgnoreCase("Mob_2 Timer 1"))
  438. {
  439. AutoChat(npc, Text[7].replace("PLAYERNAME", player.getName()));
  440. st.startQuestTimer("Mob_2 Timer 2", 1500, npc);
  441. if (st.getInt("Quest1") == 45)
  442. st.set("Quest1", "0");
  443. return null;
  444. }
  445. else if (event.equalsIgnoreCase("Mob_2 Timer 2"))
  446. {
  447. AutoChat(npc, Text[8].replace("PLAYERNAME", player.getName()));
  448. st.startQuestTimer("Mob_2 Timer 3", 10000, npc);
  449. return null;
  450. }
  451. else if (event.equalsIgnoreCase("Mob_2 Timer 3"))
  452. {
  453. if (st.getInt("Quest0") == 0)
  454. {
  455. st.startQuestTimer("Mob_2 Timer 3", 13000, npc);
  456. if (st.getRandom(2) == 0)
  457. AutoChat(npc, Text[9].replace("PLAYERNAME", player.getName()));
  458. else
  459. AutoChat(npc, Text[10].replace("PLAYERNAME", player.getName()));
  460. }
  461. return null;
  462. }
  463. else if (event.equalsIgnoreCase("Mob_2 has despawned"))
  464. {
  465. st.set("Quest1", String.valueOf(st.getInt("Quest1") + 1));
  466. if (st.getInt("Quest0") == 1 || st.getInt("Quest0") == 2 || st.getInt("Quest1") > 3)
  467. {
  468. st.set("Quest0", "0");
  469. if (st.getInt("Quest0") == 1)
  470. AutoChat(npc, Text[11].replace("PLAYERNAME", player.getName()));
  471. else
  472. AutoChat(npc, Text[12].replace("PLAYERNAME", player.getName()));
  473. DeleteSpawn(st, npc);
  474. }
  475. else
  476. st.startQuestTimer("Mob_2 has despawned", 1000, npc);
  477. return null;
  478. }
  479. }
  480. else
  481. return null;
  482. return htmltext;
  483. }
  484. @Override
  485. public String onTalk(L2Npc npc, L2PcInstance player)
  486. {
  487. String htmltext = getNoQuestMsg(player);
  488. QuestState st = player.getQuestState(qn);
  489. if (st != null)
  490. {
  491. int npcId = npc.getNpcId();
  492. int cond = st.getInt("cond");
  493. if (st.getState() == State.COMPLETED && npcId == NPC[0])
  494. htmltext = "<html><body>You have already completed this quest!</body></html>";
  495. else if (player.getClassId().getId() == getPrevClass(player))
  496. {
  497. if (cond == 0)
  498. {
  499. if (npcId == NPC[0])
  500. htmltext = "0-01.htm";
  501. }
  502. else if (cond == 1)
  503. {
  504. if (npcId == NPC[0])
  505. htmltext = "0-04.htm";
  506. else if (npcId == NPC[2])
  507. htmltext = "2-01.htm";
  508. }
  509. else if (cond == 2)
  510. {
  511. if (npcId == NPC[2])
  512. htmltext = "2-02.htm";
  513. else if (npcId == NPC[1])
  514. htmltext = "1-01.htm";
  515. }
  516. else if (cond == 3)
  517. {
  518. if (npcId == NPC[1] && st.getQuestItemsCount(Items[0]) != 0)
  519. {
  520. htmltext = "1-02.htm";
  521. if (Items[11] == 0 || st.getQuestItemsCount(Items[11]) != 0)
  522. htmltext = "1-03.htm";
  523. }
  524. }
  525. else if (cond == 4)
  526. {
  527. if (npcId == NPC[1])
  528. htmltext = "1-04.htm";
  529. else if (npcId == NPC[2])
  530. htmltext = "2-03.htm";
  531. }
  532. else if (cond == 5)
  533. {
  534. if (npcId == NPC[2])
  535. htmltext = "2-04.htm";
  536. else if (npcId == NPC[5])
  537. htmltext = "5-01.htm";
  538. }
  539. else if (cond == 6)
  540. {
  541. if (npcId == NPC[5])
  542. htmltext = "5-03.htm";
  543. else if (npcId == NPC[6])
  544. htmltext = "6-01.htm";
  545. }
  546. else if (cond == 7)
  547. {
  548. if (npcId == NPC[6])
  549. htmltext = "6-02.htm";
  550. }
  551. else if (cond == 8)
  552. {
  553. if (npcId == NPC[6])
  554. htmltext = "6-04.htm";
  555. else if (npcId == NPC[7])
  556. htmltext = "7-01.htm";
  557. }
  558. else if (cond == 9)
  559. {
  560. if (npcId == NPC[7])
  561. htmltext = "7-05.htm";
  562. }
  563. else if (cond == 10)
  564. {
  565. if (npcId == NPC[7])
  566. htmltext = "7-07.htm";
  567. else if (npcId == NPC[3])
  568. htmltext = "3-01.htm";
  569. }
  570. else if (cond == 11 || cond == 12)
  571. {
  572. if (npcId == NPC[3])
  573. {
  574. if (st.getQuestItemsCount(Items[2]) > 0)
  575. htmltext = "3-05.htm";
  576. else
  577. htmltext = "3-04.htm";
  578. }
  579. }
  580. else if (cond == 13)
  581. {
  582. if (npcId == NPC[3])
  583. htmltext = "3-06.htm";
  584. else if (npcId == NPC[8])
  585. htmltext = "8-01.htm";
  586. }
  587. else if (cond == 14)
  588. {
  589. if (npcId == NPC[8])
  590. htmltext = "8-03.htm";
  591. else if (npcId == NPC[11])
  592. htmltext = "11-01.htm";
  593. }
  594. else if (cond == 15)
  595. {
  596. if (npcId == NPC[11])
  597. htmltext = "11-02.htm";
  598. else if (npcId == NPC[9])
  599. htmltext = "9-01.htm";
  600. }
  601. else if (cond == 16)
  602. {
  603. if (npcId == NPC[9])
  604. htmltext = "9-02.htm";
  605. }
  606. else if (cond == 17)
  607. {
  608. if (npcId == NPC[9])
  609. htmltext = "9-04.htm";
  610. else if (npcId == NPC[10])
  611. htmltext = "10-01.htm";
  612. }
  613. else if (cond == 18)
  614. {
  615. if (npcId == NPC[10])
  616. htmltext = "10-05.htm";
  617. }
  618. else if (cond == 19)
  619. {
  620. if (npcId == NPC[10])
  621. htmltext = "10-07.htm";
  622. else if (npcId == NPC[0])
  623. htmltext = "0-06.htm";
  624. }
  625. else if (cond == 20)
  626. {
  627. if (npcId == NPC[0])
  628. {
  629. if (player.getLevel() >= 76)
  630. {
  631. htmltext = "0-09.htm";
  632. if (getClassId(player) < 131 || getClassId(player) > 135) //in Kamael quests, npc wants to chat for a bit before changing class
  633. {
  634. st.exitQuest(false);
  635. st.set("cond", "0");
  636. st.addExpAndSp(2299404, 0);
  637. st.giveItems(57, 5000000);
  638. st.giveItems(6622, 1);
  639. int Class = getClassId(player);
  640. int prevClass = getPrevClass(player);
  641. player.setClassId(Class);
  642. if (!player.isSubClassActive() && player.getBaseClass() == prevClass)
  643. player.setBaseClass(Class);
  644. player.broadcastUserInfo();
  645. Cast(npc, player, 4339, 1);
  646. Quest q = QuestManager.getInstance().getQuest("SkillTransfer");
  647. if (q != null)
  648. q.startQuestTimer("givePormanders", 1, npc, player);
  649. }
  650. }
  651. else
  652. htmltext = "0-010.htm";
  653. }
  654. }
  655. }
  656. }
  657. return htmltext;
  658. }
  659. @Override
  660. public String onFirstTalk(L2Npc npc, L2PcInstance player)
  661. {
  662. String htmltext = "";
  663. QuestState st = player.getQuestState(qn);
  664. int npcId = npc.getNpcId();
  665. if (st != null)
  666. {
  667. int cond = st.getInt("cond");
  668. if (npcId == NPC[4])
  669. {
  670. if (cond == 17)
  671. {
  672. QuestState st2 = findRightState(npc);
  673. if (st2 != null)
  674. {
  675. player.setLastQuestNpcObject(npc.getObjectId());
  676. if (st == st2)
  677. {
  678. if (st.getInt("Tab") == 1)
  679. {
  680. if (st.getInt("Quest0") == 0)
  681. htmltext = "4-04.htm";
  682. else if (st.getInt("Quest0") == 1)
  683. htmltext = "4-06.htm";
  684. }
  685. else
  686. {
  687. if (st.getInt("Quest0") == 0)
  688. htmltext = "4-01.htm";
  689. else if (st.getInt("Quest0") == 1)
  690. htmltext = "4-03.htm";
  691. }
  692. }
  693. else
  694. {
  695. if (st.getInt("Tab") == 1)
  696. {
  697. if (st.getInt("Quest0") == 0)
  698. htmltext = "4-05.htm";
  699. else if (st.getInt("Quest0") == 1)
  700. htmltext = "4-07.htm";
  701. }
  702. else
  703. {
  704. if (st.getInt("Quest0") == 0)
  705. htmltext = "4-02.htm";
  706. }
  707. }
  708. }
  709. }
  710. else if (cond == 18)
  711. htmltext = "4-08.htm";
  712. }
  713. }
  714. if (htmltext == "")
  715. npc.showChatWindow(player);
  716. return htmltext;
  717. }
  718. @Override
  719. public String onAttack(L2Npc npc, L2PcInstance player, int damage, boolean isPet)
  720. {
  721. QuestState st2 = findRightState(npc);
  722. if (st2 == null)
  723. return super.onAttack(npc, player, damage, isPet);
  724. int cond = st2.getInt("cond");
  725. QuestState st = player.getQuestState(qn);
  726. int npcId = npc.getNpcId();
  727. if (npcId == Mob[2] && st == st2 && cond == 17)
  728. {
  729. st.set("Quest0", String.valueOf(st.getInt("Quest0") + 1));
  730. if (st.getInt("Quest0") == 1)
  731. AutoChat(npc, Text[16].replace("PLAYERNAME", player.getName()));
  732. if (st.getInt("Quest0") > 15)
  733. {
  734. st.set("Quest0", "1");
  735. AutoChat(npc, Text[17].replace("PLAYERNAME", player.getName()));
  736. cancelQuestTimer("Mob_3 has despawned", npc, st2.getPlayer());
  737. st.set("Tab", "1");
  738. DeleteSpawn(st, npc);
  739. }
  740. }
  741. else if (npcId == Mob[1] && cond == 15)
  742. {
  743. if (st != st2 || (st == st2 && player.isInParty()))
  744. {
  745. AutoChat(npc, Text[5].replace("PLAYERNAME", player.getName()));
  746. cancelQuestTimer("Archon Hellisha has despawned", npc, st2.getPlayer());
  747. st2.set("spawned", "0");
  748. DeleteSpawn(st2, npc);
  749. }
  750. }
  751. return super.onAttack(npc, player, damage, isPet);
  752. }
  753. @Override
  754. public String onSkillSee(L2Npc npc, L2PcInstance player, L2Skill skill, L2Object[] targets, boolean isPet)
  755. {
  756. if (_SpawnList.containsKey(npc) && _SpawnList.get(npc) != player.getObjectId())
  757. {
  758. L2PcInstance quest_player = (L2PcInstance) L2World.getInstance().findObject(_SpawnList.get(npc));
  759. if (quest_player == null)
  760. return null;
  761. else
  762. {
  763. for (L2Object obj : targets)
  764. {
  765. if (obj == quest_player || obj == npc)
  766. {
  767. QuestState st2 = findRightState(npc);
  768. if (st2 == null)
  769. return null;
  770. AutoChat(npc, Text[5].replace("PLAYERNAME", player.getName()));
  771. cancelQuestTimer("Archon Hellisha has despawned", npc, st2.getPlayer());
  772. st2.set("spawned", "0");
  773. DeleteSpawn(st2, npc);
  774. }
  775. }
  776. }
  777. }
  778. return super.onSkillSee(npc, player, skill, targets, isPet);
  779. }
  780. @Override
  781. public String onKill(L2Npc npc, L2PcInstance player, boolean isPet)
  782. {
  783. int npcId = npc.getNpcId();
  784. QuestState st = player.getQuestState(qn);
  785. for (int Archon_Minion = 21646; Archon_Minion < 21652; Archon_Minion++)
  786. {
  787. if (npcId == Archon_Minion)
  788. {
  789. L2Party party = player.getParty();
  790. if (party != null)
  791. {
  792. L2FastList<QuestState> PartyQuestMembers = new L2FastList<QuestState>();
  793. for (L2PcInstance player1 : party.getPartyMembers())
  794. {
  795. QuestState st1 = findQuest(player1);
  796. if (st1 != null && player1.isInsideRadius(player, Config.ALT_PARTY_RANGE2, false, false))
  797. {
  798. if (st1.getInt("cond") == 15)
  799. PartyQuestMembers.add(st1);
  800. }
  801. }
  802. if (PartyQuestMembers.size() > 0)
  803. {
  804. QuestState st2 = PartyQuestMembers.get(Rnd.get(PartyQuestMembers.size()));
  805. giveHallishaMark(st2);
  806. }
  807. }
  808. else
  809. {
  810. QuestState st1 = findQuest(player);
  811. if (st1 != null)
  812. {
  813. if (st1.getInt("cond") == 15)
  814. giveHallishaMark(st1);
  815. }
  816. }
  817. return super.onKill(npc, player, isPet);
  818. }
  819. }
  820. int[] Archon_Hellisha_Norm = { 18212, 18214, 18215, 18216, 18218 };
  821. for (int i = 0; i < Archon_Hellisha_Norm.length; i++)
  822. {
  823. if (npcId == Archon_Hellisha_Norm[i])
  824. {
  825. QuestState st1 = findQuest(player);
  826. if (st1 != null)
  827. {
  828. if (st1.getInt("cond") == 15)
  829. {
  830. //This is just a guess....not really sure what it actually says, if anything
  831. AutoChat(npc, Text[4].replace("PLAYERNAME", st1.getPlayer().getName()));
  832. st1.giveItems(Items[8], 1);
  833. st1.takeItems(Items[3], -1);
  834. st1.set("cond", "16");
  835. st1.playSound("ItemSound.quest_middle");
  836. }
  837. }
  838. return super.onKill(npc, player, isPet);
  839. }
  840. }
  841. for (int Guardian_Angel = 27214; Guardian_Angel < 27217; Guardian_Angel++)
  842. {
  843. if (npcId == Guardian_Angel)
  844. {
  845. QuestState st1 = findQuest(player);
  846. if (st1 != null)
  847. {
  848. if (st1.getInt("cond") == 6)
  849. {
  850. if (st1.getInt("kills") < 9)
  851. st1.set("kills", String.valueOf(st1.getInt("kills") + 1));
  852. else
  853. {
  854. st1.playSound("ItemSound.quest_middle");
  855. st1.giveItems(Items[5], 1);
  856. st1.set("cond", "7");
  857. }
  858. }
  859. }
  860. return super.onKill(npc, player, isPet);
  861. }
  862. }
  863. if (st != null && npcId != Mob[2])
  864. {
  865. QuestState st2 = findRightState(npc);
  866. if (st2 == null)
  867. return super.onKill(npc, player, isPet);
  868. int cond = st.getInt("cond");
  869. if (npcId == Mob[0] && cond == 8)
  870. {
  871. if (!player.isInParty())
  872. {
  873. if (st == st2)
  874. {
  875. AutoChat(npc, Text[12].replace("PLAYERNAME", player.getName()));
  876. st.giveItems(Items[6], 1);
  877. st.set("cond", "9");
  878. st.playSound("ItemSound.quest_middle");
  879. }
  880. }
  881. cancelQuestTimer("Mob_1 has despawned", npc, st2.getPlayer());
  882. st2.set("spawned", "0");
  883. DeleteSpawn(st2, npc);
  884. }
  885. else if (npcId == Mob[1] && cond == 15)
  886. {
  887. if (!player.isInParty())
  888. {
  889. if (st == st2)
  890. {
  891. AutoChat(npc, Text[4].replace("PLAYERNAME", player.getName()));
  892. st.giveItems(Items[8], 1);
  893. st.takeItems(Items[3], -1);
  894. st.set("cond", "16");
  895. st.playSound("ItemSound.quest_middle");
  896. }
  897. else
  898. AutoChat(npc, Text[5].replace("PLAYERNAME", player.getName()));
  899. }
  900. cancelQuestTimer("Archon Hellisha has despawned", npc, st2.getPlayer());
  901. st2.set("spawned", "0");
  902. DeleteSpawn(st2, npc);
  903. }
  904. }
  905. else
  906. {
  907. if (npcId == Mob[0])
  908. {
  909. st = findRightState(npc);
  910. if (st != null)
  911. {
  912. cancelQuestTimer("Mob_1 has despawned", npc, st.getPlayer());
  913. st.set("spawned", "0");
  914. DeleteSpawn(st, npc);
  915. }
  916. }
  917. else if (npcId == Mob[1])
  918. {
  919. st = findRightState(npc);
  920. if (st != null)
  921. {
  922. cancelQuestTimer("Archon Hellisha has despawned", npc, st.getPlayer());
  923. st.set("spawned", "0");
  924. DeleteSpawn(st, npc);
  925. }
  926. }
  927. }
  928. return super.onKill(npc, player, isPet);
  929. }
  930. @Override
  931. public boolean unload()
  932. {
  933. // if sub classes aren't loaded, just unload superclass
  934. if (_scripts.size() == 0)
  935. return super.unload();
  936. // unload all subclasses
  937. for (int index = 0; index < _scripts.size(); index++)
  938. {
  939. if (_scripts.get(index) == null)
  940. continue;
  941. QuestManager.getInstance().removeQuest(_scripts.get(index));
  942. }
  943. _scripts.clear();
  944. // now unload superclass
  945. return super.unload();
  946. }
  947. public static void main(String[] args)
  948. {
  949. // initialize superclass
  950. new SagasSuperClass(-1, "SagasSuperClass", "Saga's SuperClass");
  951. // initialize subclasses
  952. _scripts.add(new SagaOfEvasSaint());
  953. _scripts.add(new SagaOfEvasTemplar());
  954. _scripts.add(new SagaOfTheAdventurer());
  955. _scripts.add(new SagaOfTheArcanaLord());
  956. _scripts.add(new SagaOfTheArchmage());
  957. _scripts.add(new SagaOfTheCardinal());
  958. _scripts.add(new SagaOfTheDominator());
  959. _scripts.add(new SagaOfTheDoombringer());
  960. _scripts.add(new SagaOfTheDoomcryer());
  961. _scripts.add(new SagaOfTheDreadnoughts());
  962. _scripts.add(new SagaOfTheDuelist());
  963. _scripts.add(new SagaOfTheElementalMaster());
  964. _scripts.add(new SagaOfTheFortuneSeeker());
  965. _scripts.add(new SagaOfTheGhostHunter());
  966. _scripts.add(new SagaOfTheGhostSentinel());
  967. _scripts.add(new SagaOfTheGrandKhavatari());
  968. _scripts.add(new SagaOfTheHellKnight());
  969. _scripts.add(new SagaOfTheHierophant());
  970. _scripts.add(new SagaOfTheMaestro());
  971. _scripts.add(new SagaOfTheMoonlightSentinel());
  972. _scripts.add(new SagaOfTheMysticMuse());
  973. _scripts.add(new SagaOfThePhoenixKnight());
  974. _scripts.add(new SagaOfTheSagittarius());
  975. _scripts.add(new SagaOfTheShillienSaint());
  976. _scripts.add(new SagaOfTheShillienTemplar());
  977. _scripts.add(new SagaOfTheSoulHound());
  978. _scripts.add(new SagaOfTheSoultaker());
  979. _scripts.add(new SagaOfTheSpectralDancer());
  980. _scripts.add(new SagaOfTheSpectralMaster());
  981. _scripts.add(new SagaOfTheStormScreamer());
  982. _scripts.add(new SagaOfTheSwordMuse());
  983. _scripts.add(new SagaOfTheTitan());
  984. _scripts.add(new SagaOfTheTrickster());
  985. _scripts.add(new SagaOfTheWindRider());
  986. }
  987. }