Ok, but for example in the saga's quest how i supouse to change the drop rate, there is no variable in any script that set's de drop rate :S
Code: Select all
/* * This program is free software: you can redistribute it and/or modify it under * the terms of the GNU General Public License as published by the Free Software * Foundation, either version 3 of the License, or (at your option) any later * version. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more * details. * * You should have received a copy of the GNU General Public License along with * this program. If not, see <http://www.gnu.org/licenses/>. */package quests.SagasScripts; import com.l2jserver.gameserver.ai.CtrlIntention;import com.l2jserver.gameserver.instancemanager.QuestManager;import com.l2jserver.gameserver.model.L2Object;import com.l2jserver.gameserver.model.L2Party;import com.l2jserver.gameserver.model.L2Skill;import com.l2jserver.gameserver.model.L2World;import com.l2jserver.gameserver.model.actor.L2Attackable;import com.l2jserver.gameserver.model.actor.L2Character;import com.l2jserver.gameserver.model.actor.L2Npc;import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;import com.l2jserver.gameserver.model.quest.Quest;import com.l2jserver.gameserver.model.quest.QuestState;import com.l2jserver.gameserver.model.quest.State;import com.l2jserver.gameserver.model.quest.jython.QuestJython;import com.l2jserver.gameserver.network.serverpackets.MagicSkillUse;import com.l2jserver.gameserver.network.serverpackets.NpcSay;import com.l2jserver.util.L2FastList;import com.l2jserver.util.L2FastMap;import com.l2jserver.util.Rnd; public class SagasSuperClass extends QuestJython{ private static L2FastList<Quest> _scripts = new L2FastList<Quest>(); public String qn = "SagasSuperClass"; public int qnu; public int[] NPC = {}; public int[] Items = {}; public int[] Mob = {}; public int[] classid = {}; public int[] prevclass = {}; public int[] X = {}; public int[] Y = {}; public int[] Z = {}; public String[] Text = {}; L2FastMap<L2Npc, Integer> _SpawnList = new L2FastMap<L2Npc, Integer>(); 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}}; public SagasSuperClass(int id, String name, String descr) { super(id,name,descr); qnu = id; } public void registerNPCs() { addStartNpc(NPC[0]); addAttackId(Mob[2]); addAttackId(Mob[1]); addSkillSeeId(Mob[1]); addFirstTalkId(NPC[4]); for (int npc : NPC) addTalkId(npc); for (int mobid : Mob) addKillId(mobid); questItemIds = Items.clone(); questItemIds[0] = 0; questItemIds[2] = 0; //remove Ice Crystal and Divine Stone of Wisdom for (int Archon_Minion = 21646; Archon_Minion < 21652; Archon_Minion++) addKillId(Archon_Minion); int[] Archon_Hellisha_Norm = {18212, 18214, 18215, 18216, 18218}; for (int i = 0; i < Archon_Hellisha_Norm.length;i++) addKillId(Archon_Hellisha_Norm[i]); for (int Guardian_Angel = 27214; Guardian_Angel < 27217; Guardian_Angel++) addKillId(Guardian_Angel); } public void Cast(L2Npc npc, L2Character target, int skillId, int level) { target.broadcastPacket(new MagicSkillUse(target,target,skillId,level,6000,1)); target.broadcastPacket(new MagicSkillUse(npc,npc,skillId,level,6000,1)); } public void AutoChat(L2Npc npc, String text) { npc.broadcastPacket(new NpcSay(npc.getObjectId(), 0, npc.getNpcId(), text)); } public void AddSpawn(QuestState st, L2Npc mob) { _SpawnList.put(mob, st.getPlayer().getObjectId()); } public L2Npc FindSpawn (L2PcInstance player,L2Npc npc) { if (_SpawnList.containsKey(npc) && _SpawnList.get(npc) == player.getObjectId()) return npc; return null; } public void DeleteSpawn(QuestState st,L2Npc npc) { if (_SpawnList.containsKey(npc)) { _SpawnList.remove(npc); npc.deleteMe(); } } public QuestState findRightState(L2Npc npc) { L2PcInstance player = null; QuestState st = null; if (_SpawnList.containsKey(npc)) { player = (L2PcInstance) L2World.getInstance().findObject(_SpawnList.get(npc)); if (player != null) st = player.getQuestState(qn); } return st; } public void giveHallishaMark(QuestState st2) { if (st2.getInt("spawned") == 0) { if (st2.getQuestItemsCount(Items[3]) >= 700) { st2.takeItems(Items[3],20); int xx = st2.getPlayer().getX(); int yy = st2.getPlayer().getY(); int zz = st2.getPlayer().getZ(); L2Npc Archon = st2.addSpawn(Mob[1],xx,yy,zz); AddSpawn(st2,Archon); st2.set("spawned","1"); st2.startQuestTimer("Archon Hellisha has despawned",600000,Archon); AutoChat(Archon,Text[13].replace("PLAYERNAME",st2.getPlayer().getName())); ((L2Attackable) Archon).addDamageHate(st2.getPlayer(),0,99999); Archon.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK,st2.getPlayer(),null); } else st2.giveItems(Items[3],1); } } public QuestState findQuest(L2PcInstance player) { QuestState st = player.getQuestState(qn); if (st != null) { if (qnu != 68) { if (player.getClassId().getId() == QuestClass[qnu - 67][0]) return st; } else { for (int q=0 ; q<2;q++) { if (player.getClassId().getId() == QuestClass[1][q]) return st; } } } return null; } public int getClassId(L2PcInstance player) { if (player.getClassId().getId() == 0x81) { return classid[1]; } return classid[0]; } public int getPrevClass(L2PcInstance player) { if (player.getClassId().getId() == 0x81) { return prevclass[1]; } return prevclass[0]; } public String onAdvEvent (String event, L2Npc npc, L2PcInstance player) { QuestState st = player.getQuestState(qn); String htmltext = ""; if (st != null) { 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")) htmltext = event; else if (event.equalsIgnoreCase("accept")) { st.set("cond","1"); st.setState(State.STARTED); st.playSound("ItemSound.quest_accept"); st.giveItems(Items[10],1); htmltext = "0-03.htm"; } else if (event.equalsIgnoreCase("0-1")) { if (player.getLevel() < 76) { htmltext = "0-02.htm"; if (st.getState() == State.CREATED) st.exitQuest(true); } else htmltext = "0-05.htm"; } else if (event.equalsIgnoreCase("0-2")) { if (player.getLevel() >= 76) { st.exitQuest(false); st.set("cond","0"); htmltext = "0-07.htm"; st.takeItems(Items[10],-1); st.addExpAndSp(2299404,0); st.giveItems(57,5000000); st.giveItems(6622,1); int Class = getClassId(player); int prevClass = getPrevClass(player); player.setClassId(Class); if (!player.isSubClassActive() && player.getBaseClass() == prevClass) player.setBaseClass(Class); player.broadcastUserInfo(); Cast(npc,player,4339,1); Quest q = QuestManager.getInstance().getQuest("SkillTransfer"); if (q != null) q.startQuestTimer("givePormanders", 1, npc, player); } else { st.takeItems(Items[10],-1); st.playSound("ItemSound.quest_middle"); st.set("cond","20"); htmltext = "0-08.htm"; } } else if (event.equalsIgnoreCase("1-3")) { st.set("cond","3"); htmltext = "1-05.htm"; } else if (event.equalsIgnoreCase("1-4")) { st.set("cond","4"); st.takeItems(Items[0],1); if (Items[11] != 0) st.takeItems(Items[11],1); st.giveItems(Items[1],1); htmltext = "1-06.htm"; } else if (event.equalsIgnoreCase("2-1")) { st.set("cond","2"); htmltext = "2-05.htm"; } else if (event.equalsIgnoreCase("2-2")) { st.set("cond","5"); st.takeItems(Items[1],1); st.giveItems(Items[4],1); htmltext = "2-06.htm"; } else if (event.equalsIgnoreCase("3-5")) { htmltext = "3-07.htm"; } else if (event.equalsIgnoreCase("3-6")) { st.set("cond","11"); htmltext = "3-02.htm"; } else if (event.equalsIgnoreCase("3-7")) { st.set("cond","12"); htmltext = "3-03.htm"; } else if (event.equalsIgnoreCase("3-8")) { st.set("cond","13"); st.takeItems(Items[2],1); st.giveItems(Items[7],1); htmltext = "3-08.htm"; } else if (event.equalsIgnoreCase("4-1")) { htmltext = "4-010.htm"; } else if (event.equalsIgnoreCase("4-2")) { st.giveItems(Items[9],1); st.set("cond","18"); st.playSound("ItemSound.quest_middle"); htmltext = "4-011.htm"; } else if (event.equalsIgnoreCase("4-3")) { st.giveItems(Items[9],1); st.set("cond","18"); AutoChat(npc,Text[13].replace("PLAYERNAME",player.getName())); st.set("Quest0","0"); cancelQuestTimer("Mob_2 has despawned",npc,player); st.playSound("ItemSound.quest_middle"); DeleteSpawn(st, npc); return null; } else if (event.equalsIgnoreCase("5-1")) { st.set("cond","6"); st.takeItems(Items[4],1); Cast(npc,player,4546,1); st.playSound("ItemSound.quest_middle"); htmltext = "5-02.htm"; } else if (event.equalsIgnoreCase("6-1")) { st.set("cond","8"); st.takeItems(Items[5],1); Cast(npc,player,4546,1); st.playSound("ItemSound.quest_middle"); htmltext = "6-03.htm"; } else if (event.equalsIgnoreCase("7-1")) { if (st.getInt("spawned") == 1) htmltext = "7-03.htm"; else if (st.getInt("spawned") == 0) { L2Npc Mob_1 = st.addSpawn(Mob[0],X[0],Y[0],Z[0]); st.set("spawned","1"); st.startQuestTimer("Mob_1 Timer 1",500,Mob_1); st.startQuestTimer("Mob_1 has despawned",300000,Mob_1); AddSpawn(st,Mob_1); htmltext = "7-02.htm"; } else htmltext = "7-04.htm"; } else if (event.equalsIgnoreCase("7-2")) { st.set("cond","10"); st.takeItems(Items[6],1); Cast(npc,player,4546,1); st.playSound("ItemSound.quest_middle"); htmltext = "7-06.htm"; } else if (event.equalsIgnoreCase("8-1")) { st.set("cond","14"); st.takeItems(Items[7],1); Cast(npc,player,4546,1); st.playSound("ItemSound.quest_middle"); htmltext = "8-02.htm"; } else if (event.equalsIgnoreCase("9-1")) { st.set("cond","17"); st.takeItems(Items[8],1); Cast(npc,player,4546,1); st.playSound("ItemSound.quest_middle"); htmltext = "9-03.htm"; } else if (event.equalsIgnoreCase("10-1")) { if (st.getInt("Quest0") == 0) { L2Npc Mob_3 = st.addSpawn(Mob[2],X[1],Y[1],Z[1]); L2Npc Mob_2 = st.addSpawn(NPC[4],X[2],Y[2],Z[2]); AddSpawn(st,Mob_3); AddSpawn(st,Mob_2); st.set("Mob_2",String.valueOf(Mob_2.getObjectId())); st.set("Quest0","1"); st.set("Quest1","45"); st.startRepeatingQuestTimer("Mob_3 Timer 1",500,Mob_3); st.startQuestTimer("Mob_3 has despawned",59000,Mob_3); st.startQuestTimer("Mob_2 Timer 1",500,Mob_2); st.startQuestTimer("Mob_2 has despawned",60000,Mob_2); htmltext = "10-02.htm"; } else if( st.getInt("Quest1") == 45) htmltext = "10-03.htm"; else htmltext = "10-04.htm"; } else if (event.equalsIgnoreCase("10-2")) { st.set("cond","19"); st.takeItems(Items[9],1); Cast(npc,player,4546,1); st.playSound("ItemSound.quest_middle"); htmltext = "10-06.htm"; } else if (event.equalsIgnoreCase("11-9")) { st.set("cond","15"); htmltext = "11-03.htm"; } else if (event.equalsIgnoreCase("Mob_1 Timer 1")) { AutoChat(npc,Text[0].replace("PLAYERNAME",player.getName())); return null; } else if (event.equalsIgnoreCase("Mob_1 has despawned")) { AutoChat(npc,Text[1].replace("PLAYERNAME",player.getName())); st.set("spawned","0"); DeleteSpawn(st,npc); return null; } else if (event.equalsIgnoreCase("Archon Hellisha has despawned")) { AutoChat(npc,Text[6].replace("PLAYERNAME",player.getName())); st.set("spawned","0"); DeleteSpawn(st,npc); return null; } else if (event.equalsIgnoreCase("Mob_3 Timer 1")) { L2Npc Mob_2 = FindSpawn(player,(L2Npc) L2World.getInstance().findObject(st.getInt("Mob_2"))); if (npc.getKnownList().knowsObject(Mob_2)) { ((L2Attackable) npc).addDamageHate(Mob_2,0,99999); npc.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK,Mob_2,null); Mob_2.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK,npc,null); AutoChat(npc,Text[14].replace("PLAYERNAME",player.getName())); cancelQuestTimer("Mob_3 Timer 1",npc,player); } return null; } else if (event.equalsIgnoreCase("Mob_3 has despawned")) { AutoChat(npc,Text[15].replace("PLAYERNAME",player.getName())); st.set("Quest0","2"); DeleteSpawn(st,npc); return null; } else if (event.equalsIgnoreCase("Mob_2 Timer 1")) { AutoChat(npc,Text[7].replace("PLAYERNAME",player.getName())); st.startQuestTimer("Mob_2 Timer 2",1500,npc); if (st.getInt("Quest1") == 45) st.set("Quest1","0"); return null; } else if (event.equalsIgnoreCase("Mob_2 Timer 2")) { AutoChat(npc,Text[8].replace("PLAYERNAME",player.getName())); st.startQuestTimer("Mob_2 Timer 3",10000,npc); return null; } else if (event.equalsIgnoreCase("Mob_2 Timer 3")) { if (st.getInt("Quest0") == 0) { st.startQuestTimer("Mob_2 Timer 3",13000,npc); if (st.getRandom(2) == 0) AutoChat(npc,Text[9].replace("PLAYERNAME",player.getName())); else AutoChat(npc,Text[10].replace("PLAYERNAME",player.getName())); } return null; } else if (event.equalsIgnoreCase("Mob_2 has despawned")) { st.set("Quest1",String.valueOf(st.getInt("Quest1")+1)); if (st.getInt("Quest0") == 1 || st.getInt("Quest0") == 2 || st.getInt("Quest1") > 3) { st.set("Quest0","0"); if (st.getInt("Quest0") == 1) AutoChat(npc,Text[11].replace("PLAYERNAME",player.getName())); else AutoChat(npc,Text[12].replace("PLAYERNAME",player.getName())); DeleteSpawn(st,npc); } else st.startQuestTimer("Mob_2 has despawned",1000,npc); return null; } } else return null; return htmltext; } public String onTalk(L2Npc npc,L2PcInstance player) { String htmltext = "<html><body>You are either not on a quest that involves this NPC, or you don't meet this NPC's minimum quest requirements.</body></html>"; QuestState st = player.getQuestState(qn); if (st != null) { int npcId = npc.getNpcId(); int cond = st.getInt("cond"); if (st.getState() == State.COMPLETED && npcId == NPC[0]) htmltext = "<html><body>You have already completed this quest!</body></html>"; else if (player.getClassId().getId() == getPrevClass(player)) { if (cond == 0) { if (npcId == NPC[0]) htmltext = "0-01.htm"; } else if (cond == 1) { if (npcId == NPC[0]) htmltext = "0-04.htm"; else if (npcId == NPC[2]) htmltext = "2-01.htm"; } else if (cond == 2) { if (npcId == NPC[2]) htmltext = "2-02.htm"; else if (npcId == NPC[1]) htmltext = "1-01.htm"; } else if (cond == 3) { if (npcId == NPC[1] && st.getQuestItemsCount(Items[0])!= 0) { htmltext = "1-02.htm"; if (Items[11] == 0 || st.getQuestItemsCount(Items[11]) != 0) htmltext = "1-03.htm"; } } else if (cond == 4) { if (npcId == NPC[1]) htmltext = "1-04.htm"; else if (npcId == NPC[2]) htmltext = "2-03.htm"; } else if (cond == 5) { if (npcId == NPC[2]) htmltext = "2-04.htm"; else if (npcId == NPC[5]) htmltext = "5-01.htm"; } else if (cond == 6) { if (npcId == NPC[5]) htmltext = "5-03.htm"; else if (npcId == NPC[6]) htmltext = "6-01.htm"; } else if (cond == 7) { if (npcId == NPC[6]) htmltext = "6-02.htm"; } else if (cond == 8) { if (npcId == NPC[6]) htmltext = "6-04.htm"; else if (npcId == NPC[7]) htmltext = "7-01.htm"; } else if (cond == 9) { if (npcId == NPC[7]) htmltext = "7-05.htm"; } else if (cond == 10) { if (npcId == NPC[7]) htmltext = "7-07.htm"; else if (npcId == NPC[3]) htmltext = "3-01.htm"; } else if (cond == 11 || cond == 12) { if (npcId == NPC[3]) { if (st.getQuestItemsCount(Items[2]) > 0) htmltext = "3-05.htm"; else htmltext = "3-04.htm"; } } else if (cond == 13) { if (npcId == NPC[3]) htmltext = "3-06.htm"; else if (npcId == NPC[8]) htmltext = "8-01.htm"; } else if (cond == 14) { if (npcId == NPC[8]) htmltext = "8-03.htm"; else if (npcId == NPC[11]) htmltext = "11-01.htm"; } else if (cond == 15) { if (npcId == NPC[11]) htmltext = "11-02.htm"; else if (npcId == NPC[9]) htmltext = "9-01.htm"; } else if (cond == 16) { if (npcId == NPC[9]) htmltext = "9-02.htm"; } else if (cond == 17) { if (npcId == NPC[9]) htmltext = "9-04.htm"; else if (npcId == NPC[10]) htmltext = "10-01.htm"; } else if (cond == 18) { if (npcId == NPC[10]) htmltext = "10-05.htm"; } else if (cond == 19) { if (npcId == NPC[10]) htmltext = "10-07.htm"; else if (npcId == NPC[0]) htmltext = "0-06.htm"; } else if (cond == 20) { if (npcId == NPC[0]) { if (player.getLevel() >= 76) { htmltext = "0-09.htm"; if (getClassId(player) < 131 || getClassId(player) > 135) //in Kamael quests, npc wants to chat for a bit before changing class { st.exitQuest(false); st.set("cond","0"); st.addExpAndSp(2299404,0); st.giveItems(57,5000000); st.giveItems(6622,1); int Class = getClassId(player); int prevClass = getPrevClass(player); player.setClassId(Class); if (!player.isSubClassActive() && player.getBaseClass() == prevClass) player.setBaseClass(Class); player.broadcastUserInfo(); Cast(npc,player,4339,1); Quest q = QuestManager.getInstance().getQuest("SkillTransfer"); if (q != null) q.startQuestTimer("givePormanders", 1, npc, player); } } else htmltext = "0-010.htm"; } } } } return htmltext; } public String onFirstTalk(L2Npc npc,L2PcInstance player) { String htmltext = ""; QuestState st = player.getQuestState(qn); int npcId = npc.getNpcId(); if (st != null) { int cond = st.getInt("cond"); if (npcId == NPC[4]) { if (cond == 17) { QuestState st2 = findRightState(npc); if (st2 != null) { player.setLastQuestNpcObject(npc.getObjectId()); if (st == st2) { if (st.getInt("Tab") == 1) { if (st.getInt("Quest0") == 0) htmltext = "4-04.htm"; else if (st.getInt("Quest0") == 1) htmltext = "4-06.htm"; } else { if (st.getInt("Quest0") == 0) htmltext = "4-01.htm"; else if (st.getInt("Quest0") == 1) htmltext = "4-03.htm"; } } else { if (st.getInt("Tab") == 1) { if (st.getInt("Quest0") == 0) htmltext = "4-05.htm"; else if (st.getInt("Quest0") == 1) htmltext = "4-07.htm"; } else { if (st.getInt("Quest0") == 0) htmltext = "4-02.htm"; } } } } else if (cond == 18) htmltext = "4-08.htm"; } } if (htmltext == "") npc.showChatWindow(player); return htmltext; } public String onAttack(L2Npc npc,L2PcInstance player, int damage, boolean isPet) { QuestState st2 = findRightState(npc); if (st2 == null) return super.onAttack(npc, player, damage, isPet); int cond = st2.getInt("cond"); QuestState st = player.getQuestState(qn); int npcId = npc.getNpcId(); if (npcId == Mob[2] && st == st2 && cond == 17) { st.set("Quest0",String.valueOf(st.getInt("Quest0")+1)); if (st.getInt("Quest0") == 1) AutoChat(npc,Text[16].replace("PLAYERNAME",player.getName())); if (st.getInt("Quest0") > 15) { st.set("Quest0","1"); AutoChat(npc,Text[17].replace("PLAYERNAME",player.getName())); cancelQuestTimer("Mob_3 has despawned",npc,st2.getPlayer()); st.set("Tab","1"); DeleteSpawn(st,npc); } } else if (npcId == Mob[1] && cond == 15) { if (st != st2 || (st == st2 && player.isInParty())) { AutoChat(npc,Text[5].replace("PLAYERNAME",player.getName())); cancelQuestTimer("Archon Hellisha has despawned",npc,st2.getPlayer()); st2.set("spawned","0"); DeleteSpawn(st2,npc); } } return super.onAttack(npc, player, damage, isPet); } public String onSkillSee(L2Npc npc,L2PcInstance player, L2Skill skill, L2Object[] targets, boolean isPet) { if (_SpawnList.containsKey(npc) && _SpawnList.get(npc) != player.getObjectId()) { L2PcInstance quest_player = (L2PcInstance) L2World.getInstance().findObject(_SpawnList.get(npc)); if (quest_player == null) return null; else { for (L2Object obj : targets) { if (obj == quest_player || obj == npc) { QuestState st2 = findRightState(npc); if (st2 == null) return null; AutoChat(npc,Text[5].replace("PLAYERNAME",player.getName())); cancelQuestTimer("Archon Hellisha has despawned",npc,st2.getPlayer()); st2.set("spawned","0"); DeleteSpawn(st2,npc); } } } } return super.onSkillSee(npc, player, skill, targets, isPet); } public String onKill(L2Npc npc,L2PcInstance player, boolean isPet) { int npcId = npc.getNpcId(); QuestState st = player.getQuestState(qn); for (int Archon_Minion = 21646; Archon_Minion < 21652; Archon_Minion++) { if (npcId == Archon_Minion) { L2Party party = player.getParty(); if (party != null) { L2FastList<QuestState> PartyQuestMembers = new L2FastList<QuestState>(); for (L2PcInstance player1 : party.getPartyMembers()) { QuestState st1 = findQuest(player1); if (st1 != null) { if (st1.getInt("cond") == 15) PartyQuestMembers.add(st1); } } if (PartyQuestMembers.size() > 0) { QuestState st2 = PartyQuestMembers.get(Rnd.get(PartyQuestMembers.size())); giveHallishaMark(st2); } } else { QuestState st1 = findQuest(player); if (st1 != null) { if (st1.getInt("cond") == 15) giveHallishaMark(st1); } } return super.onKill(npc, player, isPet); } } int[] Archon_Hellisha_Norm = {18212, 18214, 18215, 18216, 18218}; for (int i = 0; i < Archon_Hellisha_Norm.length;i++) { if (npcId == Archon_Hellisha_Norm[i]) { QuestState st1 = findQuest(player); if (st1 != null) { if (st1.getInt("cond") == 15) { //This is just a guess....not really sure what it actually says, if anything AutoChat(npc,Text[4].replace("PLAYERNAME",st1.getPlayer().getName())); st1.giveItems(Items[8],1); st1.takeItems(Items[3],-1); st1.set("cond","16"); st1.playSound("ItemSound.quest_middle"); } } return super.onKill(npc, player, isPet); } } for (int Guardian_Angel = 27214; Guardian_Angel < 27217; Guardian_Angel++) { if (npcId == Guardian_Angel) { QuestState st1 = findQuest(player); if (st1 != null) { if (st1.getInt("cond") == 6) { if (st1.getInt("kills") < 9) st1.set("kills",String.valueOf(st1.getInt("kills")+1)); else { st1.playSound("ItemSound.quest_middle"); st1.giveItems(Items[5],1); st1.set("cond","7"); } } } return super.onKill(npc, player, isPet); } } if (st != null && npcId != Mob[2]) { QuestState st2 = findRightState(npc); if (st2 == null) return super.onKill(npc, player, isPet); int cond = st.getInt("cond"); if (npcId == Mob[0] && cond == 8) { if (!player.isInParty()) { if (st == st2) { AutoChat(npc,Text[12].replace("PLAYERNAME",player.getName())); st.giveItems(Items[6],1); st.set("cond","9"); st.playSound("ItemSound.quest_middle"); } } cancelQuestTimer("Mob_1 has despawned",npc,st2.getPlayer()); st2.set("spawned","0"); DeleteSpawn(st2,npc); } else if (npcId == Mob[1] && cond == 15) { if (!player.isInParty()) { if (st == st2) { AutoChat(npc,Text[4].replace("PLAYERNAME",player.getName())); st.giveItems(Items[8],1); st.takeItems(Items[3],-1); st.set("cond","16"); st.playSound("ItemSound.quest_middle"); } else AutoChat(npc,Text[5].replace("PLAYERNAME",player.getName())); } cancelQuestTimer("Archon Hellisha has despawned",npc,st2.getPlayer()); st2.set("spawned","0"); DeleteSpawn(st2,npc); } } else { if (npcId == Mob[0]) { st = findRightState(npc); if (st!= null) { cancelQuestTimer("Mob_1 has despawned",npc,st.getPlayer()); st.set("spawned","0"); DeleteSpawn(st,npc); } } else if (npcId == Mob[1]) { st = findRightState(npc); if (st!=null) { cancelQuestTimer("Archon Hellisha has despawned",npc,st.getPlayer()); st.set("spawned","0"); DeleteSpawn(st,npc); } } } return super.onKill(npc, player, isPet); } @Override public boolean unload() { // if sub classes aren't loaded, just unload superclass if (_scripts.size() == 0) return super.unload(); // unload all subclasses for (int index=0;index<_scripts.size();index++) { if (_scripts.get(index) == null) continue; QuestManager.getInstance().removeQuest(_scripts.get(index)); } _scripts.clear(); // now unload superclass return super.unload(); } public static void main(String[] args) { // initialize superclass new SagasSuperClass(-1,"SagasSuperClass","Saga's SuperClass"); // initialize subclasses _scripts.add(new SagaOfEvasSaint()); _scripts.add(new SagaOfEvasTemplar()); _scripts.add(new SagaOfTheAdventurer()); _scripts.add(new SagaOfTheArcanaLord()); _scripts.add(new SagaOfTheArchmage()); _scripts.add(new SagaOfTheCardinal()); _scripts.add(new SagaOfTheDominator()); _scripts.add(new SagaOfTheDoombringer()); _scripts.add(new SagaOfTheDoomcryer()); _scripts.add(new SagaOfTheDreadnoughts()); _scripts.add(new SagaOfTheDuelist()); _scripts.add(new SagaOfTheElementalMaster()); _scripts.add(new SagaOfTheFortuneSeeker()); _scripts.add(new SagaOfTheGhostHunter()); _scripts.add(new SagaOfTheGhostSentinel()); _scripts.add(new SagaOfTheGrandKhavatari()); _scripts.add(new SagaOfTheHellKnight()); _scripts.add(new SagaOfTheHierophant()); _scripts.add(new SagaOfTheMaestro()); _scripts.add(new SagaOfTheMoonlightSentinel()); _scripts.add(new SagaOfTheMysticMuse()); _scripts.add(new SagaOfThePhoenixKnight()); _scripts.add(new SagaOfTheSagittarius()); _scripts.add(new SagaOfTheShillienSaint()); _scripts.add(new SagaOfTheShillienTemplar()); _scripts.add(new SagaOfTheSoulHound()); _scripts.add(new SagaOfTheSoultaker()); _scripts.add(new SagaOfTheSpectralDancer()); _scripts.add(new SagaOfTheSpectralMaster()); _scripts.add(new SagaOfTheStormScreamer()); _scripts.add(new SagaOfTheSwordMuse()); _scripts.add(new SagaOfTheTitan()); _scripts.add(new SagaOfTheTrickster()); _scripts.add(new SagaOfTheWindRider()); }}