SagasSuperClass.java 29 KB

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