SagasSuperClass.java 29 KB

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