|
Lineage II
|
Опции темы |
04.07.2017, 21:06 | #11 |
Пользователь
Регистрация: 03.01.2016
Адрес: Saint-P.
Возраст: 32
Сообщений: 1,613
Отблагодарили 247 раз(а)
Рейтинг мнений:
138
|
Re: Ряд проблем.
KastaMeN, Я привёл пример для допотопной l2j, единственной HF сборке, что есть у меня на диске.
У тебя оно может быть где и как угодно - ищи, пищу для размышлений дали. |
09.07.2017, 06:08 | #12 |
Пользователь
|
Re: Ряд проблем.
Код:
package ai; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import l2ft.commons.threading.RunnableImpl; import l2ft.commons.util.Rnd; import l2ft.gameserver.ThreadPoolManager; import l2ft.gameserver.ai.CtrlEvent; import l2ft.gameserver.ai.DefaultAI; import l2ft.gameserver.data.xml.holder.NpcHolder; import l2ft.gameserver.model.Creature; import l2ft.gameserver.model.Playable; import l2ft.gameserver.model.Skill; import l2ft.gameserver.model.Zone; import l2ft.gameserver.model.instances.NpcInstance; import l2ft.gameserver.network.l2.components.NpcString; import l2ft.gameserver.scripts.Functions; import l2ft.gameserver.tables.SkillTable; import l2ft.gameserver.utils.Location; import bosses.ValakasManager; /** * @author pchayka */ public class Valakas extends DefaultAI { // Self skills final Skill s_lava_skin = getSkill(4680, 1), s_fear = getSkill(4689, 1), s_defence_down = getSkill(5864, 1), s_berserk = getSkill(5865, 1), s_regen = getSkill(4691, 1); // Offensive damage skills final Skill s_tremple_left = getSkill(4681, 1), s_tremple_right = getSkill(4682, 1), s_tail_stomp_a = getSkill(4685, 1), s_tail_lash = getSkill(4688, 1), s_meteor = getSkill(4690, 1), s_breath_low = getSkill(4683, 1), s_breath_high = getSkill(4684, 1); // Offensive percentage skills final Skill s_destroy_body = getSkill(5860, 1), s_destroy_soul = getSkill(5861, 1), s_destroy_body2 = getSkill(5862, 1), s_destroy_soul2 = getSkill(5863, 1); // Timers private long defenceDownTimer = Long.MAX_VALUE; // Timer reuses private final long defenceDownReuse = 120000L; // Vars private double _rangedAttacksIndex, _counterAttackIndex, _attacksIndex; private int _hpStage = 0; private List<NpcInstance> minions = new ArrayList<NpcInstance>(); public Valakas(NpcInstance actor) { super(actor); } @Override protected void onEvtAttacked(Creature attacker, int damage) { NpcInstance actor = getActor(); ValakasManager.setLastAttackTime(); for(Playable p : ValakasManager.getZone().getInsidePlayables()) notifyEvent(CtrlEvent.EVT_AGGRESSION, p, 1); if(damage > 100) { if(attacker.getDistance(actor) > 400) _rangedAttacksIndex += damage / 1000D; else _counterAttackIndex += damage / 1000D; } _attacksIndex += damage / 1000D; super.onEvtAttacked(attacker, damage); } @Override protected boolean createNewTask() { clearTasks(); Creature target; if((target = prepareTarget()) == null) return false; NpcInstance actor = getActor(); if(actor.isDead()) return false; double distance = actor.getDistance(target); // Buffs and stats double chp = actor.getCurrentHpPercents(); if(_hpStage == 0) { actor.altOnMagicUseTimer(actor, getSkill(4691, 1)); _hpStage = 1; } else if(chp < 80 && _hpStage == 1) { actor.altOnMagicUseTimer(actor, getSkill(4691, 2)); defenceDownTimer = System.currentTimeMillis(); _hpStage = 2; } else if(chp < 50 && _hpStage == 2) { actor.altOnMagicUseTimer(actor, getSkill(4691, 3)); _hpStage = 3; } else if(chp < 30 && _hpStage == 3) { actor.altOnMagicUseTimer(actor, getSkill(4691, 4)); _hpStage = 4; } else if(chp < 10 && _hpStage == 4) { actor.altOnMagicUseTimer(actor, getSkill(4691, 5)); _hpStage = 5; } // Minions spawn if(getAliveMinionsCount() < 100 && Rnd.chance(5)) { NpcInstance minion = Functions.spawn(Location.findPointToStay(actor.getLoc(), 400, 700, actor.getGeoIndex()), 29029); // Valakas Minions minions.add(minion); ValakasManager.addValakasMinion(minion); } // Tactical Movements if(_counterAttackIndex > 2000) { ValakasManager.broadcastScreenMessage(NpcString.VALAKAS_HEIGHTENED_BY_COUNTERATTACKS); _counterAttackIndex = 0; return chooseTaskAndTargets(s_berserk, actor, 0); } else if(_rangedAttacksIndex > 2000) { if(Rnd.chance(60)) { Creature randomHated = actor.getAggroList().getRandomHated(); if(randomHated != null) { setAttackTarget(randomHated); actor.startConfused(); ThreadPoolManager.getInstance().schedule(new RunnableImpl() { @Override public void runImpl() throws Exception { NpcInstance actor = getActor(); if(actor != null) actor.stopConfused(); _madnessTask = null; } }, 20000L); } ValakasManager.broadcastScreenMessage(NpcString.VALAKAS_RANGED_ATTACKS_ENRAGED_TARGET_FREE); _rangedAttacksIndex = 0; } else { ValakasManager.broadcastScreenMessage(NpcString.VALAKAS_RANGED_ATTACKS_PROVOKED); _rangedAttacksIndex = 0; return chooseTaskAndTargets(s_berserk, actor, 0); } } else if(_attacksIndex > 3000) { ValakasManager.broadcastScreenMessage(NpcString.VALAKAS_PDEF_ISM_DECREACED_SLICED_DASH); _attacksIndex = 0; return chooseTaskAndTargets(s_defence_down, actor, 0); } else if(defenceDownTimer < System.currentTimeMillis()) { ValakasManager.broadcastScreenMessage(NpcString.VALAKAS_FINDS_YOU_ATTACKS_ANNOYING_SILENCE); defenceDownTimer = System.currentTimeMillis() + defenceDownReuse + Rnd.get(60) * 1000L; return chooseTaskAndTargets(s_fear, target, distance); } // Basic Attack if(Rnd.chance(50)) return chooseTaskAndTargets(Rnd.chance(50) ? s_tremple_left : s_tremple_right, target, distance); // Stage based skill attacks Map<Skill, Integer> d_skill = new HashMap<Skill, Integer>(); switch(_hpStage) { case 1: addDesiredSkill(d_skill, target, distance, s_breath_low); addDesiredSkill(d_skill, target, distance, s_tail_stomp_a); addDesiredSkill(d_skill, target, distance, s_meteor); addDesiredSkill(d_skill, target, distance, s_fear); break; case 2: case 3: addDesiredSkill(d_skill, target, distance, s_breath_low); addDesiredSkill(d_skill, target, distance, s_tail_stomp_a); addDesiredSkill(d_skill, target, distance, s_breath_high); addDesiredSkill(d_skill, target, distance, s_tail_lash); addDesiredSkill(d_skill, target, distance, s_destroy_body); addDesiredSkill(d_skill, target, distance, s_destroy_soul); addDesiredSkill(d_skill, target, distance, s_meteor); addDesiredSkill(d_skill, target, distance, s_fear); break; case 4: case 5: addDesiredSkill(d_skill, target, distance, s_breath_low); addDesiredSkill(d_skill, target, distance, s_tail_stomp_a); addDesiredSkill(d_skill, target, distance, s_breath_high); addDesiredSkill(d_skill, target, distance, s_tail_lash); addDesiredSkill(d_skill, target, distance, s_destroy_body); addDesiredSkill(d_skill, target, distance, s_destroy_soul); addDesiredSkill(d_skill, target, distance, s_meteor); addDesiredSkill(d_skill, target, distance, s_fear); addDesiredSkill(d_skill, target, distance, Rnd.chance(60) ? s_destroy_soul2 : s_destroy_body2); break; } Skill r_skill = selectTopSkill(d_skill); if(r_skill != null && !r_skill.isOffensive()) target = actor; return chooseTaskAndTargets(r_skill, target, distance); } @Override protected void thinkAttack() { NpcInstance actor = getActor(); // Lava buff if(actor.isInZone(Zone.ZoneType.poison)) if(actor.getEffectList() != null && actor.getEffectList().getEffectsBySkill(s_lava_skin) == null) actor.altOnMagicUseTimer(actor, s_lava_skin); super.thinkAttack(); } private Skill getSkill(int id, int level) { return SkillTable.getInstance().getInfo(id, level); } private int getAliveMinionsCount() { int i = 0; for(NpcInstance n : minions) if(n != null && !n.isDead()) i++; return i; } @Override protected void onEvtDead(Creature killer) { if(minions != null && !minions.isEmpty()) for(NpcInstance n : minions) n.deleteMe(); super.onEvtDead(killer); } } Подскажите. Что нужно изменить в скрипте, что бы Валакас не стоял на месте, когда появляется ? Последний раз редактировалось KastaMeN; 09.07.2017 в 17:45. |
09.07.2017, 13:13 | #13 |
Пользователь
|
Re: Ряд проблем.
|
09.07.2017, 17:17 | #14 | |
Пользователь
|
Re: Ряд проблем.
Цитата:
У антараса также добавить? Добавлено через 26 минут Код:
package quests; import java.sql.Connection; import java.sql.PreparedStatement; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import l2ft.commons.dbutils.DbUtils; import l2ft.commons.threading.RunnableImpl; import l2ft.commons.util.Rnd; import l2ft.gameserver.Config; import l2ft.gameserver.ThreadPoolManager; import l2ft.gameserver.ai.CtrlEvent; import l2ft.gameserver.ai.CtrlIntention; import l2ft.gameserver.data.xml.holder.NpcHolder; import l2ft.gameserver.database.DatabaseFactory; import l2ft.gameserver.model.Creature; import l2ft.gameserver.model.GameObjectsStorage; import l2ft.gameserver.model.Party; import l2ft.gameserver.model.Player; import l2ft.gameserver.model.SimpleSpawner; import l2ft.gameserver.model.instances.NpcInstance; import l2ft.gameserver.model.quest.Quest; import l2ft.gameserver.model.quest.QuestState; import l2ft.gameserver.network.l2.s2c.MagicSkillUse; import l2ft.gameserver.scripts.Functions; import l2ft.gameserver.templates.npc.NpcTemplate; import l2ft.gameserver.utils.Location; public abstract class SagasSuperclass extends Quest { protected int id = 0; protected int classid = 0; protected int prevclass = 0; protected int[] NPC = new int[]{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; public int[] Items = new int[]{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; protected int[] Mob = new int[]{ 0, 1, 2 }; protected int[] X = new int[]{ 0, 1, 2 }; protected int[] Y = new int[]{ 0, 1, 2 }; protected int[] Z = new int[]{ 0, 1, 2 }; public String[] Text = new String[18]; protected List<Spawn> Spawn_List = new ArrayList<Spawn>(); private class Spawn { public final int npcId, TimeToLive; public final long spawned_at, charStoreId, npcStoreId; public Spawn(NpcInstance npc, long charStoreId, int TimeToLive) { npcId = npc.getNpcId(); npcStoreId = npc.getStoredId(); this.charStoreId = charStoreId; this.TimeToLive = TimeToLive; spawned_at = System.currentTimeMillis(); } public NpcInstance getNPC() { return GameObjectsStorage.getAsNpc(npcStoreId); } } protected int[] Archon_Minions = new int[]{ 21646, 21647, 21648, 21649, 21650, 21651 }; protected int[] Guardian_Angels = new int[]{ 27214, 27215, 27216 }; protected int[] Archon_Hellisha_Norm = new int[]{ 18212, 18213, 18214, 18215, 18216, 18217, 18218, 18219 }; protected static Map<Integer, Class<?>> Quests = new HashMap<Integer, Class<?>>(); static { Quests.put(67, _067_SagaOfTheDoombringer.class); Quests.put(68, _068_SagaOfTheSoulHound.class); Quests.put(69, _069_SagaOfTheTrickster.class); Quests.put(70, _070_SagaOfThePhoenixKnight.class); Quests.put(71, _071_SagaOfEvasTemplar.class); Quests.put(72, _072_SagaOfTheSwordMuse.class); Quests.put(73, _073_SagaOfTheDuelist.class); Quests.put(74, _074_SagaOfTheDreadnoughts.class); Quests.put(75, _075_SagaOfTheTitan.class); Quests.put(76, _076_SagaOfTheGrandKhavatari.class); Quests.put(77, _077_SagaOfTheDominator.class); Quests.put(78, _078_SagaOfTheDoomcryer.class); Quests.put(79, _079_SagaOfTheAdventurer.class); Quests.put(80, _080_SagaOfTheWindRider.class); Quests.put(81, _081_SagaOfTheGhostHunter.class); Quests.put(82, _082_SagaOfTheSagittarius.class); Quests.put(83, _083_SagaOfTheMoonlightSentinel.class); Quests.put(84, _084_SagaOfTheGhostSentinel.class); Quests.put(85, _085_SagaOfTheCardinal.class); Quests.put(86, _086_SagaOfTheHierophant.class); Quests.put(87, _087_SagaOfEvasSaint.class); Quests.put(88, _088_SagaOfTheArchmage.class); Quests.put(89, _089_SagaOfTheMysticMuse.class); Quests.put(90, _090_SagaOfTheStormScreamer.class); Quests.put(91, _091_SagaOfTheArcanaLord.class); Quests.put(92, _092_SagaOfTheElementalMaster.class); Quests.put(93, _093_SagaOfTheSpectralMaster.class); Quests.put(94, _094_SagaOfTheSoultaker.class); Quests.put(95, _095_SagaOfTheHellKnight.class); Quests.put(96, _096_SagaOfTheSpectralDancer.class); Quests.put(97, _097_SagaOfTheShillienTemplar.class); Quests.put(98, _098_SagaOfTheShillienSaint.class); Quests.put(99, _099_SagaOfTheFortuneSeeker.class); Quests.put(100, _100_SagaOfTheMaestro.class); } protected static int[][] QuestClass = new int[][]{ {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} }; private void cleanTempVars() { Connection con = null; PreparedStatement st = null; try { con = DatabaseFactory.getInstance().getConnection(); st = con.prepareStatement("DELETE FROM character_quests WHERE name=? AND (var='spawned' OR var='kills' OR var='Archon' OR var LIKE 'Mob_%')"); st.setString(1, getName()); st.executeUpdate(); } catch(Exception e) { e.printStackTrace(); } finally { DbUtils.closeQuietly(con, st); } } private void FinishQuest(QuestState st, Player player) { st.addExpAndSp(2586527, 0); st.giveItems(ADENA_ID, 5000000); st.giveItems(6622, 1, true); st.exitCurrentQuest(true); player.setClassId(getClassId(player), false, true); if(!player.isSubClassActive() && player.getBaseClassId() == getPrevClass(player)) player.setBaseClass(getClassId(player)); player.broadcastCharInfo(); Cast(st.findTemplate(NPC[0]), player, 4339, 1); } public SagasSuperclass(boolean party) { super(party); cleanTempVars(); ThreadPoolManager.getInstance().scheduleAtFixedRate(new SpawnCleaner(), 60000, 10000); } protected void registerNPCs() { addStartNpc(NPC[0]); addAttackId(Mob[2]); addFirstTalkId(NPC[4]); for(int npc : NPC) addTalkId(npc); for(int mobid : Mob) addKillId(mobid); for(int mobid : Archon_Minions) addKillId(mobid); for(int mobid : Guardian_Angels) addKillId(mobid); for(int mobid : Archon_Hellisha_Norm) addKillId(mobid); for(int ItemId : Items) if(ItemId != 0 && ItemId != 7080 && ItemId != 7081 && ItemId != 6480 && ItemId != 6482) addQuestItem(ItemId); } protected int getClassId(Player player) { return classid; } protected int getPrevClass(Player player) { return prevclass; } protected void Cast(NpcInstance npc, Creature 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 class SpawnCleaner extends RunnableImpl { @Override public void runImpl() throws Exception { synchronized(Spawn_List) { long curr_time = System.currentTimeMillis(); Iterator<Spawn> itr = Spawn_List.iterator(); while(itr.hasNext()) { Spawn spawn = itr.next(); NpcInstance npc = spawn.getNPC(); if(curr_time - spawn.spawned_at > spawn.TimeToLive || npc == null) { if(npc != null) npc.deleteMe(); itr.remove(); } } } } } protected void AddSpawn(Player player, NpcInstance mob, int TimeToLive) { synchronized(Spawn_List) { Spawn_List.add(new Spawn(mob, player.getStoredId(), TimeToLive)); } } protected NpcInstance FindMySpawn(Player player, int npcId) { if(npcId == 0 || player == null) return null; long charStoredId = player.getStoredId(); synchronized(Spawn_List) { for(Spawn spawn : Spawn_List) if(spawn.charStoreId == charStoredId && spawn.npcId == npcId) return spawn.getNPC(); } return null; } protected void DeleteSpawn(long charStoredId, int npcId) { if(npcId == 0 || charStoredId == 0) return; synchronized(Spawn_List) { Iterator<Spawn> it = Spawn_List.iterator(); while(it.hasNext()) { Spawn spawn = it.next(); if(spawn.charStoreId == charStoredId && spawn.npcId == npcId) { NpcInstance npc = spawn.getNPC(); if(npc != null) npc.deleteMe(); it.remove(); } } } } protected void DeleteMySpawn(Player player, int npcId) { if(npcId > 0 && player != null) DeleteSpawn(player.getStoredId(), npcId); } protected NpcInstance spawn(int id, Location loc) { NpcTemplate template = NpcHolder.getInstance().getTemplate(id); SimpleSpawner spawn; try { spawn = new SimpleSpawner(template); } catch(Exception e) { e.printStackTrace(); return null; } spawn.setLoc(loc); NpcInstance npc = spawn.doSpawn(true); spawn.stopRespawn(); return npc; } public void giveHallishaMark(QuestState st) { if(GameObjectsStorage.getNpc(st.getInt("Archon")) != null) return; // Не убили, или убили чужого st.cancelQuestTimer("Archon Hellisha has despawned"); if(st.getQuestItemsCount(Items[3]) < 700) st.giveItems(Items[3], Rnd.get(1, 4)); // freya change else { st.takeItems(Items[3], 20); NpcInstance Archon = spawn(Mob[1], st.getPlayer().getLoc()); AddSpawn(st.getPlayer(), Archon, 600000); int ArchonId = Archon.getObjectId(); st.set("Archon", str(ArchonId)); st.startQuestTimer("Archon Hellisha has despawned", 600000, Archon); Archon.setRunning(); Archon.getAI().notifyEvent(CtrlEvent.EVT_AGGRESSION, new Object[]{ st.getPlayer(), 100000 }); AutoChat(Archon, Text[13].replace("PLAYERNAME", st.getPlayer().getName())); } } protected QuestState findRightState(Player player, NpcInstance npc) { if(player == null || npc == null) return null; long npcStoredId = npc.getStoredId(), charStoredId = player.getStoredId(); synchronized(Spawn_List) { for(Spawn spawn : Spawn_List) if(spawn.charStoreId == charStoredId && spawn.npcStoreId == npcStoredId) return player.getQuestState(getName()); for(Spawn spawn : Spawn_List) if(spawn.npcStoreId == npcStoredId) { player = GameObjectsStorage.getAsPlayer(spawn.charStoreId); return player == null ? null : player.getQuestState(getName()); } } return null; } public static QuestState findQuest(Player player) { QuestState st = null; for(Integer q : Quests.keySet()) { st = player.getQuestState(Quests.get(q)); if(st != null) { int[] qc = QuestClass[q - 67]; for(int c : qc) if(player.getClassId().getId() == c) return st; } } return null; } public static void process_step_15to16(QuestState st) { if(st == null || st.getCond() != 15) return; int Halishas_Mark = ((SagasSuperclass) st.getQuest()).Items[3]; int Resonance_Amulet = ((SagasSuperclass) st.getQuest()).Items[8]; st.takeItems(Halishas_Mark, -1); if(st.getQuestItemsCount(Resonance_Amulet) == 0) st.giveItems(Resonance_Amulet, 1); st.setCond(16); st.playSound(SOUND_MIDDLE); } protected void AutoChat(NpcInstance npc, String text) { if(npc != null) Functions.npcSay(npc, text); } @Override public String onEvent(String event, QuestState st, NpcInstance npc) { String htmltext = ""; // simple initialization...if none of the events match, return nothing. Player player = st.getPlayer(); 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.setCond(1); st.setState(STARTED); st.playSound(SOUND_ACCEPT); st.giveItems(Items[10], 1); htmltext = "0-03.htm"; } else if(event.equalsIgnoreCase("0-1")) { if(player.getLevel() < 76) { htmltext = "0-02.htm"; st.exitCurrentQuest(true); } else htmltext = "0-05.htm"; } else if(event.equalsIgnoreCase("0-2")) { if(player.getLevel() >= 76) { htmltext = "0-07.htm"; st.takeItems(Items[10], -1); FinishQuest(st, player); } else { st.takeItems(Items[10], -1); st.playSound(SOUND_MIDDLE); st.setCond(20); htmltext = "0-08.htm"; } } else if(event.equalsIgnoreCase("1-3")) { st.setCond(3); htmltext = "1-05.htm"; } else if(event.equalsIgnoreCase("1-4")) { st.setCond(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.setCond(2); htmltext = "2-05.htm"; } else if(event.equalsIgnoreCase("2-2")) { st.setCond(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.setCond(11); htmltext = "3-02.htm"; } else if(event.equalsIgnoreCase("3-7")) { st.setCond(12); htmltext = "3-03.htm"; } else if(event.equalsIgnoreCase("3-8")) { st.setCond(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.setCond(18); st.playSound(SOUND_MIDDLE); htmltext = "4-011.htm"; } else if(event.equalsIgnoreCase("4-3")) { st.giveItems(Items[9], 1); st.setCond(18); st.set("Quest0", "0"); st.playSound(SOUND_MIDDLE); NpcInstance Mob_2 = FindMySpawn(player, NPC[4]); if(Mob_2 != null) { AutoChat(Mob_2, Text[13].replace("PLAYERNAME", player.getName())); DeleteMySpawn(player, NPC[4]); st.cancelQuestTimer("Mob_2 has despawned"); st.cancelQuestTimer("NPC_4 Timer"); } return null; } else if(event.equalsIgnoreCase("5-1")) { st.setCond(6); st.takeItems(Items[4], 1); Cast(st.findTemplate(NPC[5]), player, 4546, 1); st.playSound(SOUND_MIDDLE); htmltext = "5-02.htm"; } else if(event.equalsIgnoreCase("6-1")) { st.setCond(8); st.takeItems(Items[5], 1); Cast(st.findTemplate(NPC[6]), player, 4546, 1); st.playSound(SOUND_MIDDLE); htmltext = "6-03.htm"; } else if(event.equalsIgnoreCase("7-1")) { if(FindMySpawn(player, Mob[0]) == null) { NpcInstance Mob_1 = spawn(Mob[0], new Location(X[0], Y[0], Z[0])); AddSpawn(player, Mob_1, 180000); st.startQuestTimer("Mob_0 Timer", 500L, Mob_1); st.startQuestTimer("Mob_1 has despawned", 120000L, Mob_1); htmltext = "7-02.htm"; } else htmltext = "7-03.htm"; } else if(event.equalsIgnoreCase("7-2")) { st.setCond(10); st.takeItems(Items[6], 1); Cast(st.findTemplate(NPC[7]), player, 4546, 1); st.playSound(SOUND_MIDDLE); htmltext = "7-06.htm"; } else if(event.equalsIgnoreCase("8-1")) { st.setCond(14); st.takeItems(Items[7], 1); Cast(st.findTemplate(NPC[8]), player, 4546, 1); st.playSound(SOUND_MIDDLE); htmltext = "8-02.htm"; } else if(event.equalsIgnoreCase("9-1")) { st.setCond(17); st.takeItems(Items[8], 1); Cast(st.findTemplate(NPC[9]), player, 4546, 1); st.playSound(SOUND_MIDDLE); htmltext = "9-03.htm"; } else if(event.equalsIgnoreCase("10-1")) { if(st.getInt("Quest0") == 0 || FindMySpawn(player, NPC[4]) == null) { DeleteMySpawn(player, NPC[4]); DeleteMySpawn(player, Mob[2]); st.set("Quest0", "1"); st.set("Quest1", "45"); NpcInstance NPC_4 = spawn(NPC[4], new Location(X[2], Y[2], Z[2])); NpcInstance Mob_2 = spawn(Mob[2], new Location(X[1], Y[1], Z[1])); AddSpawn(player, Mob_2, 300000); AddSpawn(player, NPC_4, 300000); st.startQuestTimer("Mob_2 Timer", 1000, Mob_2); st.startQuestTimer("Mob_2 despawn", 59000, Mob_2); st.startQuestTimer("NPC_4 Timer", 500, NPC_4); st.startQuestTimer("NPC_4 despawn", 60000, NPC_4); htmltext = "10-02.htm"; } else if(st.getInt("Quest1") == 45) htmltext = "10-03.htm"; else if(st.getInt("Tab") == 1) { NpcInstance Mob_2 = FindMySpawn(player, NPC[4]); if(Mob_2 == null || !st.getPlayer().knowsObject(Mob_2)) { DeleteMySpawn(player, NPC[4]); Mob_2 = spawn(NPC[4], new Location(X[2], Y[2], Z[2])); AddSpawn(player, Mob_2, 300000); st.set("Quest0", "1"); st.set("Quest1", "0"); // На всякий случай st.startQuestTimer("NPC_4 despawn", 180000, Mob_2); } htmltext = "10-04.htm"; } } else if(event.equalsIgnoreCase("10-2")) { st.setCond(19); st.takeItems(Items[9], 1); Cast(st.findTemplate(NPC[10]), player, 4546, 1); st.playSound(SOUND_MIDDLE); htmltext = "10-06.htm"; } else if(event.equalsIgnoreCase("11-9")) { st.setCond(15); htmltext = "11-03.htm"; } else if(event.equalsIgnoreCase("Mob_0 Timer")) { AutoChat(FindMySpawn(player, Mob[0]), Text[0].replace("PLAYERNAME", player.getName())); return null; } else if(event.equalsIgnoreCase("Mob_1 has despawned")) { AutoChat(FindMySpawn(player, Mob[0]), Text[1].replace("PLAYERNAME", player.getName())); DeleteMySpawn(player, Mob[0]); return null; } else if(event.equalsIgnoreCase("Archon Hellisha has despawned")) { AutoChat(npc, Text[6].replace("PLAYERNAME", player.getName())); DeleteMySpawn(player, Mob[1]); return null; } else if(event.equalsIgnoreCase("Mob_2 Timer")) { NpcInstance NPC_4 = FindMySpawn(player, NPC[4]); NpcInstance Mob_2 = FindMySpawn(player, Mob[2]); if(NPC_4.knowsObject(Mob_2)) { NPC_4.setRunning(); NPC_4.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, Mob_2, null); Mob_2.setRunning(); Mob_2.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, NPC_4, null); AutoChat(Mob_2, Text[14].replace("PLAYERNAME", player.getName())); } else st.startQuestTimer("Mob_2 Timer", 1000, npc); return null; } else if(event.equalsIgnoreCase("Mob_2 despawn")) { NpcInstance Mob_2 = FindMySpawn(player, Mob[2]); AutoChat(Mob_2, Text[15].replace("PLAYERNAME", player.getName())); st.set("Quest0", "2"); if(Mob_2 != null) Mob_2.reduceCurrentHp(9999999, Mob_2, null, true, true, false, false, false, false, false); DeleteMySpawn(player, Mob[2]); return null; } else if(event.equalsIgnoreCase("NPC_4 Timer")) { AutoChat(FindMySpawn(player, NPC[4]), Text[7].replace("PLAYERNAME", player.getName())); st.startQuestTimer("NPC_4 Timer 2", 1500, npc); if(st.getInt("Quest1") == 45) st.set("Quest1", "0"); return null; } else if(event.equalsIgnoreCase("NPC_4 Timer 2")) { AutoChat(FindMySpawn(player, NPC[4]), Text[8].replace("PLAYERNAME", player.getName())); st.startQuestTimer("NPC_4 Timer 3", 10000, npc); return null; } else if(event.equalsIgnoreCase("NPC_4 Timer 3")) { if(st.getInt("Quest0") == 0) { st.startQuestTimer("NPC_4 Timer 3", 13000, npc); AutoChat(FindMySpawn(player, NPC[4]), Text[Rnd.get(9, 10)].replace("PLAYERNAME", player.getName())); } return null; } else if(event.equalsIgnoreCase("NPC_4 despawn")) { st.set("Quest1", str(st.getInt("Quest1") + 1)); NpcInstance NPC_4 = FindMySpawn(player, NPC[4]); if(st.getInt("Quest0") == 1 || st.getInt("Quest0") == 2 || st.getInt("Quest1") > 3) { st.set("Quest0", "0"); AutoChat(NPC_4, Text[Rnd.get(11, 12)].replace("PLAYERNAME", player.getName())); if(NPC_4 != null) NPC_4.reduceCurrentHp(9999999, NPC_4, null, true, true, false, false, false, false, false); DeleteMySpawn(player, NPC[4]); } else st.startQuestTimer("NPC_4 despawn", 1000, npc); return null; } return htmltext; } @Override public String onTalk(NpcInstance npc, QuestState st) { String htmltext = "noquest"; int npcId = npc.getNpcId(); int cond = st.getCond(); Player player = st.getPlayer(); if(player.getClassId().getId() != getPrevClass(player)) { st.exitCurrentQuest(true); return htmltext; } 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]) { if(st.getQuestItemsCount(Items[0]) > 0) { if(Items[11] == 0) htmltext = "1-03.htm"; else if(st.getQuestItemsCount(Items[11]) > 0) htmltext = "1-03.htm"; else htmltext = "1-02.htm"; } else htmltext = "1-02.htm"; } else if(npcId == 31537) { if(st.getQuestItemsCount(7546) == 0) { htmltext = "tunatun_q72_01.htm"; st.giveItems(7546, 1); return null; } else htmltext = "tunatun_q72_02.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"; 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) FinishQuest(st, player); } else htmltext = "0-010.htm"; return htmltext; } @Override public String onFirstTalk(NpcInstance npc, Player player) { String htmltext = ""; QuestState st = player.getQuestState(getName()); if(st == null) return htmltext; int npcId = npc.getNpcId(); int cond = st.getCond(); if(npcId == NPC[4]) if(cond == 17) { QuestState st2 = findRightState(player, npc); if(st2 != null) 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"; return htmltext; } @Override public String onAttack(NpcInstance npc, QuestState st) { Player player = st.getPlayer(); if(st.getCond() == 17) if(npc.getNpcId() == Mob[2]) { QuestState st2 = findRightState(player, npc); if(st == st2) { st.set("Quest0", str(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())); npc.reduceCurrentHp(9999999, npc, null, true, true, false, false, false, false, false); DeleteMySpawn(player, Mob[2]); st.cancelQuestTimer("Mob_2 despawn"); st.set("Tab", "1"); } } } return null; } protected boolean isArchonMinions(int npcId) { for(int id : Archon_Minions) if(id == npcId) return true; return false; } protected boolean isArchonHellishaNorm(int npcId) { for(int id : Archon_Hellisha_Norm) if(id == npcId) return true; return false; } protected boolean isGuardianAngels(int npcId) { for(int id : Guardian_Angels) if(id == npcId) return true; return false; } @Override public String onKill(NpcInstance npc, QuestState st) { int npcId = npc.getNpcId(); Player player = st.getPlayer(); if(player.getActiveClassId() != getPrevClass(player)) return null; if(isArchonMinions(npcId)) { Party party = player.getParty(); if(party != null) { for(Player player1 : party.getPartyMembers()) if(player1.getDistance(player) <= Config.ALT_PARTY_DISTRIBUTION_RANGE) { QuestState st1 = findQuest(player1); if(st1 != null && st1.getCond() == 15) ((SagasSuperclass) st1.getQuest()).giveHallishaMark(st1); } } else { QuestState st1 = findQuest(player); if(st1 != null && st1.getCond() == 15) ((SagasSuperclass) st1.getQuest()).giveHallishaMark(st1); } } else if(isArchonHellishaNorm(npcId)) { QuestState st1 = findQuest(player); if(st1 != null) if(st1.getCond() == 15) { // This is just a guess....not really sure what it actually says, if anything AutoChat(npc, ((SagasSuperclass) st1.getQuest()).Text[4].replace("PLAYERNAME", st1.getPlayer().getName())); process_step_15to16(st1); } } else if(isGuardianAngels(npcId)) { QuestState st1 = findQuest(player); if(st1 != null) if(st1.getCond() == 6) if(st1.getInt("kills") < 9) st1.set("kills", str(st1.getInt("kills") + 1)); else { st1.playSound(SOUND_MIDDLE); st1.giveItems(((SagasSuperclass) st1.getQuest()).Items[5], 1); st1.setCond(7); } } else { int cond = st.getCond(); if(npcId == Mob[0] && cond == 8) { QuestState st2 = findRightState(player, npc); if(st2 != null) { if(!player.isInParty()) if(st == st2) { AutoChat(npc, Text[12].replace("PLAYERNAME", player.getName())); st.giveItems(Items[6], 1); st.setCond(9); st.playSound(SOUND_MIDDLE); } st.cancelQuestTimer("Mob_1 has despawned"); DeleteMySpawn(st2.getPlayer(), Mob[0]); } } else if(npcId == Mob[1] && cond == 15) { QuestState st2 = findRightState(player, npc); if(st2 != null) { if(!player.isInParty()) if(st == st2) { AutoChat(npc, Text[4].replace("PLAYERNAME", player.getName())); process_step_15to16(st); } else AutoChat(npc, Text[5].replace("PLAYERNAME", player.getName())); st.cancelQuestTimer("Archon Hellisha has despawned"); DeleteMySpawn(st2.getPlayer(), Mob[1]); } } else if(npcId == Mob[2] && cond == 17) { QuestState st2 = findRightState(player, npc); if(st == st2) { st.set("Quest0", "1"); AutoChat(npc, Text[17].replace("PLAYERNAME", player.getName())); npc.reduceCurrentHp(9999999, npc, null, true, true, false, false, false, false, false); DeleteMySpawn(player, Mob[2]); st.cancelQuestTimer("Mob_2 despawn"); st.set("Tab", "1"); } } } return null; } } Это скрипт квеста на 3 профу. Кто может помочь? Где нужно строчку добавить? Или что то изменить, что бы ШЕ, ЕЕ и бишу, после прохождения или покупки давалась Holy pomander!!! Последний раз редактировалось KastaMeN; 09.07.2017 в 17:43. Причина: Добавлено сообщение |
|
10.07.2017, 17:38 | #15 |
Пользователь
|
Re: Ряд проблем.
|
10.07.2017, 17:48 | #16 |
Пользователь
|
Re: Ряд проблем.
Код:
private void FinishQuest(QuestState st, Player player){ ... ... st.giveItems(6622, 1, true); if(player.getPrevClass(player) == 43){ st.giveItems(15309,4,true) // выдача награды для ШЕ } if(player.getPrevClass(player) == 16 || player.getPrevClass(player) == 30){ st.giveItems(15309,1,true) // выдача награды для ЕЕ\БП } st.exitCurrentQuest(true); .... |
10.07.2017, 20:22 | #17 |
Пользователь
|
Re: Ряд проблем.
|
11.07.2017, 06:03 | #18 |
Пользователь
|
Re: Ряд проблем.
Я её собрал из того что было.
Если есть у кого не плохая сборка "HF". С минимальными проблемами. Буду очень рад принять подарок. |
30.07.2017, 13:47 | #19 |
Пользователь
|
Re: Ряд проблем.
Есть люди. Кто может подсказать? Где находится скрипт Чемпионов.
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1) | |
Опции темы | |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
проблем с входом на сервер | nosta | Lineage II | 18 | 29.03.2012 21:40 |
База Данных проблем | xGoooDx | Игровой клиент | 3 | 06.08.2011 10:45 |
Проблем с 7 печатями | Jonhab | Lineage II | 0 | 08.03.2011 18:30 |
проблем с sql | skil | Работа со скриптами | 9 | 23.10.2009 16:39 |