Outsider 0 Опубликовано 13 марта, 2011 сборка от Iceberga gracia epiloge, делаешь квест на валика доходишь до сердца тыкаешь на него пишет Cannot enter(как исправить это Валик живой его никто не убивал заранее спасибо!!! Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Nolland 0 Опубликовано 13 марта, 2011 Ai valakas в папке скрипт) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Outsider 0 Опубликовано 13 марта, 2011 так и что там менять? вот этот скрипт /* * 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 ai.individual; import static com.l2jserver.gameserver.ai.CtrlIntention.AI_INTENTION_FOLLOW; import static com.l2jserver.gameserver.ai.CtrlIntention.AI_INTENTION_IDLE; import java.util.Collection; import com.l2jserver.Config; import com.l2jserver.gameserver.ThreadPoolManager; import com.l2jserver.gameserver.datatables.SkillTable; import com.l2jserver.gameserver.instancemanager.GrandBossManager; import com.l2jserver.gameserver.model.L2Effect; import com.l2jserver.gameserver.model.L2Object; import com.l2jserver.gameserver.model.L2Skill; import com.l2jserver.gameserver.model.actor.L2Character; import com.l2jserver.gameserver.model.actor.L2Npc; import com.l2jserver.gameserver.model.actor.L2Summon; import com.l2jserver.gameserver.model.actor.instance.L2DecoyInstance; import com.l2jserver.gameserver.model.actor.instance.L2GrandBossInstance; import com.l2jserver.gameserver.model.actor.instance.L2PcInstance; import com.l2jserver.gameserver.model.quest.QuestTimer; import com.l2jserver.gameserver.model.zone.type.L2BossZone; import com.l2jserver.gameserver.network.serverpackets.PlaySound; import com.l2jserver.gameserver.network.serverpackets.SocialAction; import com.l2jserver.gameserver.network.serverpackets.SpecialCamera; import com.l2jserver.gameserver.templates.StatsSet; import com.l2jserver.gameserver.util.Util; import com.l2jserver.util.Rnd; import javolution.util.FastList; import ai.group_template.L2AttackableAIScript; /** * Valakas AI * * @author Kerberos */ public class Valakas extends L2AttackableAIScript { private int i_ai0 = 0; private int i_ai1 = 0; private int i_ai2 = 0; private int i_ai3 = 0; private int i_ai4 = 0; private int i_quest0 = 0; private long i_quest1 = 0; // time to tracking valakas when was last time attacked private int i_quest2 = 0; // hate value for 1st player private int i_quest3 = 0; // hate value for 2nd player private int i_quest4 = 0; // hate value for 3rd player private L2Character c_quest2 = null; // 1st most hated target private L2Character c_quest3 = null; // 2nd most hated target private L2Character c_quest4 = null; // 3rd most hated target private static final int VALAKAS = 29028; //Valakas Status Tracking : private static final byte DORMANT = 0; //Valakas is spawned and no one has entered yet. Entry is unlocked private static final byte WAITING = 1; //Valakas is spawend and someone has entered, triggering a 30 minute window for additional people to enter //before he unleashes his attack. Entry is unlocked private static final byte FIGHTING = 2; //Valakas is engaged in battle, annihilating his foes. Entry is locked private static final byte DEAD = 3; //Valakas has been killed. Entry is locked private static L2BossZone _Zone; // Boss: Valakas public Valakas(int id, String name, String descr) { super(id, name, descr); int[] mob = { VALAKAS }; this.registerMobs(mob); i_ai0 = 0; i_ai1 = 0; i_ai2 = 0; i_ai3 = 0; i_ai4 = 0; i_quest0 = 0; i_quest1 = System.currentTimeMillis(); _Zone = GrandBossManager.getInstance().getZone(212852, -114842, -1632); StatsSet info = GrandBossManager.getInstance().getStatsSet(VALAKAS); int status = GrandBossManager.getInstance().getBossStatus(VALAKAS); if (status == DEAD) { // load the unlock date and time for valakas from DB long temp = (info.getLong("respawn_time") - System.currentTimeMillis()); // if valakas is locked until a certain time, mark it so and start the unlock timer // the unlock time has not yet expired. Mark valakas as currently locked. Setup a timer // to fire at the correct time (calculate the time between now and the unlock time, // setup a timer to fire after that many msec) if (temp > 0) { this.startQuestTimer("valakas_unlock", temp, null, null); } else { // the time has already expired while the server was offline. Immediately spawn valakas in his cave. // also, the status needs to be changed to DORMANT L2GrandBossInstance valakas = (L2GrandBossInstance) addSpawn(VALAKAS, -105200, -253104, -15264, 0, false, 0); GrandBossManager.getInstance().setBossStatus(VALAKAS, DORMANT); GrandBossManager.getInstance().addBoss(valakas); final L2Npc _valakas = valakas; ThreadPoolManager.getInstance().scheduleGeneral(new Runnable() { public void run() { try { _valakas.setIsInvul(true); _valakas.setRunning(); } catch (Throwable e) {} } }, 100L); startQuestTimer("1003", 60000, valakas, null, true); } } else { int loc_x = info.getInteger("loc_x"); int loc_y = info.getInteger("loc_y"); int loc_z = info.getInteger("loc_z"); int heading = info.getInteger("heading"); final int hp = info.getInteger("currentHP"); final int mp = info.getInteger("currentMP"); L2GrandBossInstance valakas = (L2GrandBossInstance) addSpawn(VALAKAS, loc_x, loc_y, loc_z, heading, false, 0); GrandBossManager.getInstance().addBoss(valakas); final L2Npc _valakas = valakas; final int _status = status; ThreadPoolManager.getInstance().scheduleGeneral(new Runnable() { public void run() { try { _valakas.setCurrentHpMp(hp, mp); if (_status != FIGHTING) _valakas.setIsInvul(true); _valakas.setRunning(); } catch (Throwable e) {} } }, 100L); startQuestTimer("1003", 60000, valakas, null, true); if (status == WAITING) { // Start timer to lock entry after 30 minutes startQuestTimer("1001", Config.Valakas_Wait_Time, valakas, null); } else if (status == FIGHTING) { // Start repeating timer to check for inactivity startQuestTimer("1002", 60000, valakas, null, true); valakas.setIsInvul(false); } } } @Override public String onAdvEvent(String event, L2Npc npc, L2PcInstance player) { if (npc != null) { long temp = 0; if (event.equalsIgnoreCase("1001")) { npc.teleToLocation(212852, -114842, -1632); i_quest1 = System.currentTimeMillis(); final L2Npc _valakas = npc; ThreadPoolManager.getInstance().scheduleGeneral(new Runnable() { public void run() { try { broadcastSpawn(_valakas); } catch (Throwable e) {} } }, 1L); startQuestTimer("1004", 2000, npc, null); } else if (event.equalsIgnoreCase("1002")) { int lvl = 0; int sk_4691 = 0; L2Effect[] effects = npc.getAllEffects(); if (effects != null && effects.length != 0) { for (L2Effect e : effects) { if (e.getSkill().getId() == 4629) { sk_4691 = 1; lvl = e.getSkill().getLevel(); break; } } } if (GrandBossManager.getInstance().getBossStatus(VALAKAS) == FIGHTING) { temp = (System.currentTimeMillis() - i_quest1); if (temp > 900000) { npc.getAI().setIntention(AI_INTENTION_IDLE); npc.teleToLocation(-105200, -253104, -15264); GrandBossManager.getInstance().setBossStatus(VALAKAS, DORMANT); npc.setCurrentHpMp(npc.getMaxHp(), npc.getMaxMp()); _Zone.oustAllPlayers(); cancelQuestTimer("1002", npc, null); i_quest2 = 0; i_quest3 = 0; i_quest4 = 0; } } else if (npc.getCurrentHp() > ((npc.getMaxHp() * 1) / 4)) { if (sk_4691 == 0 || (sk_4691 == 1 && lvl != 4)) { npc.setTarget(npc); npc.doCast(SkillTable.getInstance().getInfo(4691, 4)); } } else if (npc.getCurrentHp() > ((npc.getMaxHp() * 2) / 4.0)) { if (sk_4691 == 0 || (sk_4691 == 1 && lvl != 3)) { npc.setTarget(npc); npc.doCast(SkillTable.getInstance().getInfo(4691, 3)); } } else if (npc.getCurrentHp() > ((npc.getMaxHp() * 3) / 4.0)) { if (sk_4691 == 0 || (sk_4691 == 1 && lvl != 2)) { npc.setTarget(npc); npc.doCast(SkillTable.getInstance().getInfo(4691, 2)); } } else if (sk_4691 == 0 || (sk_4691 == 1 && lvl != 1)) { npc.setTarget(npc); npc.doCast(SkillTable.getInstance().getInfo(4691, 1)); } } else if (event.equalsIgnoreCase("1003")) { if (!npc.isInvul()) getRandomSkill(npc); else npc.getAI().setIntention(AI_INTENTION_IDLE); } else if (event.equalsIgnoreCase("1004")) { startQuestTimer("1102", 1500, npc, null); npc.broadcastPacket(new SpecialCamera(npc.getObjectId(),1300,180,-5,3000,15000,0,-5,1,0)); } else if (event.equalsIgnoreCase("1102")) { startQuestTimer("1103", 3300, npc, null); npc.broadcastPacket(new SpecialCamera(npc.getObjectId(),500,180,-8,600,15000,0,60,1,0)); } else if (event.equalsIgnoreCase("1103")) { startQuestTimer("1104", 2900, npc, null); npc.broadcastPacket(new SpecialCamera(npc.getObjectId(),800,180,-8,2700,15000,0,30,1,0)); } else if (event.equalsIgnoreCase("1104")) { startQuestTimer("1105", 2700, npc, null); npc.broadcastPacket(new SpecialCamera(npc.getObjectId(),200,250,70,0,15000,30,80,1,0)); } else if (event.equalsIgnoreCase("1105")) { startQuestTimer("1106", 1, npc, null); npc.broadcastPacket(new SpecialCamera(npc.getObjectId(),1100,250,70,2500,15000,30,80,1,0)); } else if (event.equalsIgnoreCase("1106")) { startQuestTimer("1107", 3200, npc, null); npc.broadcastPacket(new SpecialCamera(npc.getObjectId(),700,150,30,0,15000,-10,60,1,0)); } else if (event.equalsIgnoreCase("1107")) { startQuestTimer("1108", 1400, npc, null); npc.broadcastPacket(new SpecialCamera(npc.getObjectId(),1200,150,20,2900,15000,-10,30,1,0)); } else if (event.equalsIgnoreCase("1108")) { startQuestTimer("1109", 6700, npc, null); npc.broadcastPacket(new SpecialCamera(npc.getObjectId(),750,170,15,3400,15000,10,-15,1,0)); } else if (event.equalsIgnoreCase("1109")) { startQuestTimer("1110", 5700, npc, null); npc.broadcastPacket(new SpecialCamera(npc.getObjectId(),750,170,-10,3400,15000,4000,-15,1,0)); } else if (event.equalsIgnoreCase("1110")) { GrandBossManager.getInstance().setBossStatus(VALAKAS,FIGHTING); startQuestTimer("1002", 60000, npc, null, true); npc.setIsInvul(false); getRandomSkill(npc); } else if (event.equalsIgnoreCase("1111")) { startQuestTimer("1112", 3500, npc, null); npc.broadcastPacket(new SpecialCamera(npc.getObjectId(),1100,210,-5,3000,10000,-13,0,1,1)); } else if (event.equalsIgnoreCase("1112")) { startQuestTimer("1113", 4500, npc, null); npc.broadcastPacket(new SpecialCamera(npc.getObjectId(),1300,200,-8,3000,10000,0,15,1,1)); } else if (event.equalsIgnoreCase("1113")) { startQuestTimer("1114", 500, npc, null); npc.broadcastPacket(new SpecialCamera(npc.getObjectId(),1000,190,0,3000,10000,0,10,1,1)); } else if (event.equalsIgnoreCase("1114")) { startQuestTimer("1115", 4600, npc, null); npc.broadcastPacket(new SpecialCamera(npc.getObjectId(),1700,120,0,2500,10000,12,40,1,1)); } else if (event.equalsIgnoreCase("1115")) { startQuestTimer("1116", 750, npc, null); npc.broadcastPacket(new SpecialCamera(npc.getObjectId(),1700,20,0,3000,10000,10,10,1,1)); } else if (event.equalsIgnoreCase("1116")) { startQuestTimer("1117", 2500, npc, null); npc.broadcastPacket(new SpecialCamera(npc.getObjectId(),1700,10,0,3000,10000,20,70,1,1)); } else if (event.equalsIgnoreCase("1117")) { npc.broadcastPacket(new SpecialCamera(npc.getObjectId(),1700,10,0,3000,250,20,-20,1,1)); addSpawn(31759, 212852, -114842, -1632, 0, false, 900000); int radius = 1500; for (int i = 0; i < 20; i++) { int x = (int) (radius * Math.cos(i * .331)); //.331~2pi/19 int y = (int) (radius * Math.sin(i * .331)); addSpawn(31759, 212852 + x, -114842 + y, -1632, 0, false, 900000); } cancelQuestTimer("1002", npc, null); startQuestTimer("remove_players", 900000, null, null); } } else { if (event.equalsIgnoreCase("valakas_unlock")) { L2GrandBossInstance valakas = (L2GrandBossInstance) addSpawn(VALAKAS, -105200, -253104, -15264, 32768, false, 0); GrandBossManager.getInstance().addBoss(valakas); GrandBossManager.getInstance().setBossStatus(VALAKAS, DORMANT); } else if (event.equalsIgnoreCase("remove_players")) { _Zone.oustAllPlayers(); } } return super.onAdvEvent(event, npc, player); } @Override public String onAttack(L2Npc npc, L2PcInstance attacker, int damage, boolean isPet, L2Skill skill) { if (npc.isInvul()) { return null; } i_quest1 = System.currentTimeMillis(); if (GrandBossManager.getInstance().getBossStatus(VALAKAS) != FIGHTING) { attacker.teleToLocation(150037, -57255, -2976); } if (attacker.getMountType() == 1) { int sk_4258 = 0; L2Effect[] effects = attacker.getAllEffects(); if (effects != null && effects.length != 0) { for (L2Effect e : effects) { if (e.getSkill().getId() == 4258) { sk_4258 = 1; } } } if (sk_4258 == 0) { npc.setTarget(attacker); npc.doCast(SkillTable.getInstance().getInfo(4258, 1)); } } if (attacker.getZ() < (npc.getZ() + 200)) { if (i_ai2 == 0) { i_ai1 = (i_ai1 + damage); } if (i_quest0 == 0) { i_ai4 = (i_ai4 + damage); } if (i_quest0 == 0) { i_ai3 = (i_ai3 + damage); } else if (i_ai2 == 0) { i_ai0 = (i_ai0 + damage); } if (i_quest0 == 0) { if ((((i_ai4 / npc.getMaxHp()) * 100)) > 1) { if (i_ai3 > (i_ai4 - i_ai3)) { i_ai3 = 0; i_ai4 = 0; npc.setTarget(npc); npc.doCast(SkillTable.getInstance().getInfo(4687, 1)); i_quest0 = 1; } } } } int i1 = 0; if (skill == null) { if (attacker == c_quest2) { if (((damage * 1000) + 1000) > i_quest2) { i_quest2 = ((damage * 1000) + Rnd.get(3000)); } } else if (attacker == c_quest3) { if (((damage * 1000) + 1000) > i_quest3) { i_quest3 = ((damage * 1000) + Rnd.get(3000)); } } else if (attacker == c_quest4) { if (((damage * 1000) + 1000) > i_quest4) { i_quest4 = ((damage * 1000) + Rnd.get(3000)); } } else if (i_quest2 > i_quest3) { i1 = 3; } else if (i_quest2 == i_quest3) { if (Rnd.get(100) < 50) { i1 = 2; } else { i1 = 3; } } else if (i_quest2 < i_quest3) { i1 = 2; } if (i1 == 2) { if (i_quest2 > i_quest4) { i1 = 4; } else if (i_quest2 == i_quest4) { if (Rnd.get(100) < 50) { i1 = 2; } else { i1 = 4; } } else if (i_quest2 < i_quest4) { i1 = 2; } } else if (i1 == 3) { if (i_quest3 > i_quest4) { i1 = 4; } else if (i_quest3 == i_quest4) { if (Rnd.get(100) < 50) { i1 = 3; } else { i1 = 4; } } else if (i_quest3 < i_quest4) { i1 = 3; } } if (i1 == 2) { i_quest2 = (damage * 1000) + Rnd.get(3000); c_quest2 = attacker; } else if (i1 == 3) { i_quest3 = (damage * 1000) + Rnd.get(3000); c_quest3 = attacker; } else if (i1 == 4) { i_quest4 = (damage * 1000) + Rnd.get(3000); c_quest4 = attacker; } } else if (npc.getCurrentHp() > ((npc.getMaxHp() * 1) / 4)) { if (attacker == c_quest2) { if ((((damage / 30) * 1000) + 1000) > i_quest2) { i_quest2 = (((damage / 30) * 1000) + Rnd.get(3000)); } } else if (attacker == c_quest3) { if ((((damage / 30) * 1000) + 1000) > i_quest3) { i_quest3 = (((damage / 30) * 1000) + Rnd.get(3000)); } } else if (attacker == c_quest4) { if ((((damage / 30) * 1000) + 1000) > i_quest4) { i_quest4 = (((damage / 30) * 1000) + Rnd.get(3000)); } } else if (i_quest2 > i_quest3) { i1 = 3; } else if (i_quest2 == i_quest3) { if (Rnd.get(100) < 50) { i1 = 2; } else { i1 = 3; } } else if (i_quest2 < i_quest3) { i1 = 2; } if (i1 == 2) { if (i_quest2 > i_quest4) { i1 = 4; } else if (i_quest2 == i_quest4) { if (Rnd.get(100) < 50) { i1 = 2; } else { i1 = 4; } } else if (i_quest2 < i_quest4) { i1 = 2; } } else if (i1 == 3) { if (i_quest3 > i_quest4) { i1 = 4; } else if (i_quest3 == i_quest4) { if (Rnd.get(100) < 50) { i1 = 3; } else { i1 = 4; } } else if (i_quest3 < i_quest4) { i1 = 3; } } if (i1 == 2) { i_quest2 = (((damage / 30) * 1000) + Rnd.get(3000)); c_quest2 = attacker; } else if (i1 == 3) { i_quest3 = (((damage / 30) * 1000) + Rnd.get(3000)); c_quest3 = attacker; } else if (i1 == 4) { i_quest4 = (((damage / 30) * 1000) + Rnd.get(3000)); c_quest4 = attacker; } } else if (npc.getCurrentHp() > ((npc.getMaxHp() * 2) / 4)) { if (attacker == c_quest2) { if ((((damage / 50) * 1000) + 1000) > i_quest2) { i_quest2 = (((damage / 50) * 1000) + Rnd.get(3000)); } } else if (attacker == c_quest3) { if ((((damage / 50) * 1000) + 1000) > i_quest3) { i_quest3 = (((damage / 50) * 1000) + Rnd.get(3000)); } } else if (attacker == c_quest4) { if ((((damage / 50) * 1000) + 1000) > i_quest4) { i_quest4 = (((damage / 50) * 1000) + Rnd.get(3000)); } } else if (i_quest2 > i_quest3) { i1 = 3; } else if (i_quest2 == i_quest3) { if (Rnd.get(100) < 50) { i1 = 2; } else { i1 = 3; } } else if (i_quest2 < i_quest3) { i1 = 2; } if (i1 == 2) { if (i_quest2 > i_quest4) { i1 = 4; } else if (i_quest2 == i_quest4) { if (Rnd.get(100) < 50) { i1 = 2; } else { i1 = 4; } } else if (i_quest2 < i_quest4) { i1 = 2; } } else if (i1 == 3) { if (i_quest3 > i_quest4) { i1 = 4; } else if (i_quest3 == i_quest4) { if (Rnd.get(100) < 50) { i1 = 3; } else { i1 = 4; } } else if (i_quest3 < i_quest4) { i1 = 3; } } if (i1 == 2) { i_quest2 = (((damage / 50) * 1000) + Rnd.get(3000)); c_quest2 = attacker; } else if (i1 == 3) { i_quest3 = (((damage / 50) * 1000) + Rnd.get(3000)); c_quest3 = attacker; } else if (i1 == 4) { i_quest4 = (((damage / 50) * 1000) + Rnd.get(3000)); c_quest4 = attacker; } } else if (npc.getCurrentHp() > ((npc.getMaxHp() * 3) / 4.0)) { if (attacker == c_quest2) { if ((((damage / 100) * 1000) + 1000) > i_quest2) { i_quest2 = (((damage / 100) * 1000) + Rnd.get(3000)); } } else if (attacker == c_quest3) { if ((((damage / 100) * 1000) + 1000) > i_quest3) { i_quest3 = (((damage / 100) * 1000) + Rnd.get(3000)); } } else if (attacker == c_quest4) { if ((((damage / 100) * 1000) + 1000) > i_quest4) { i_quest4 = (((damage / 100) * 1000) + Rnd.get(3000)); } } else if (i_quest2 > i_quest3) { i1 = 3; } else if (i_quest2 == i_quest3) { if (Rnd.get(100) < 50) { i1 = 2; } else { i1 = 3; } } else if (i_quest2 < i_quest3) { i1 = 2; } if (i1 == 2) { if (i_quest2 > i_quest4) { i1 = 4; } else if (i_quest2 == i_quest4) { if (Rnd.get(100) < 50) { i1 = 2; } else { i1 = 4; } } else if (i_quest2 < i_quest4) { i1 = 2; } } else if (i1 == 3) { if (i_quest3 > i_quest4) { i1 = 4; } else if (i_quest3 == i_quest4) { if (Rnd.get(100) < 50) { i1 = 3; } else { i1 = 4; } } else if (i_quest3 < i_quest4) { i1 = 3; } if (i1 == 2) { i_quest2 = (((damage / 100) * 1000) + Rnd.get(3000)); c_quest2 = attacker; } else if (i1 == 3) { i_quest3 = (((damage / 100) * 1000) + Rnd.get(3000)); c_quest3 = attacker; } else if (i1 == 4) { i_quest4 = (((damage / 100) * 1000) + Rnd.get(3000)); c_quest4 = attacker; } } } else if (attacker == c_quest2) { if ((((damage / 150) * 1000) + 1000) > i_quest2) { i_quest2 = (((damage / 150) * 1000) + Rnd.get(3000)); } } else if (attacker == c_quest3) { if ((((damage / 150) * 1000) + 1000) > i_quest3) { i_quest3 = (((damage / 150) * 1000) + Rnd.get(3000)); } } else if (attacker == c_quest4) { if ((((damage / 150) * 1000) + 1000) > i_quest4) { i_quest4 = (((damage / 150) * 1000) + Rnd.get(3000)); } } else if (i_quest2 > i_quest3) { i1 = 3; } else if (i_quest2 == i_quest3) { if (Rnd.get(100) < 50) { i1 = 2; } else { i1 = 3; } } else if (i_quest2 < i_quest3) { i1 = 2; } if (i1 == 2) { if (i_quest2 > i_quest4) { i1 = 4; } else if (i_quest2 == i_quest4) { if (Rnd.get(100) < 50) { i1 = 2; } else { i1 = 4; } } else if (i_quest2 < i_quest4) { i1 = 2; } } else if (i1 == 3) { if (i_quest3 > i_quest4) { i1 = 4; } else if (i_quest3 == i_quest4) { if (Rnd.get(100) < 50) { i1 = 3; } else { i1 = 4; } } else if (i_quest3 < i_quest4) { i1 = 3; } } if (i1 == 2) { i_quest2 = (((damage / 150) * 1000) + Rnd.get(3000)); c_quest2 = attacker; } else if (i1 == 3) { i_quest3 = (((damage / 150) * 1000) + Rnd.get(3000)); c_quest3 = attacker; } else if (i1 == 4) { i_quest4 = (((damage / 150) * 1000) + Rnd.get(3000)); c_quest4 = attacker; } getRandomSkill(npc); return super.onAttack(npc, attacker, damage, isPet); } @Override public String onKill(L2Npc npc, L2PcInstance killer, boolean isPet) { startQuestTimer("1111", 500, npc, null); npc.broadcastPacket(new SpecialCamera(npc.getObjectId(),1700,2000,130,-1,0,10000,-20,1,1)); npc.broadcastPacket(new PlaySound(1, "B03_D", 1, npc.getObjectId(), npc.getX(), npc.getY(), npc.getZ())); GrandBossManager.getInstance().setBossStatus(VALAKAS,DEAD); long respawnTime = (long) Config.Interval_Of_Valakas_Spawn + Rnd.get(Config.Random_Of_Valakas_Spawn); this.startQuestTimer("valakas_unlock", respawnTime, null, null); // also save the respawn time so that the info is maintained past reboots StatsSet info = GrandBossManager.getInstance().getStatsSet(VALAKAS); info.set("respawn_time", (System.currentTimeMillis() + respawnTime)); GrandBossManager.getInstance().setStatsSet(VALAKAS, info); return super.onKill(npc, killer, isPet); } public void getRandomSkill(L2Npc npc) { if (npc.isInvul() || npc.isCastingNow()) { return; } L2Skill skill = null; int i0 = 0; int i1 = 0; int i2 = 0; L2Character c2 = null; if (c_quest2 == null) i_quest2 = 0; else if (!Util.checkIfInRange(5000, npc, c_quest2, true) || c_quest2.isDead()) i_quest2 = 0; if (c_quest3 == null) i_quest3 = 0; else if (!Util.checkIfInRange(5000, npc, c_quest3, true) || c_quest3.isDead()) i_quest3 = 0; if (c_quest4 == null) i_quest4 = 0; else if (!Util.checkIfInRange(5000, npc, c_quest4, true) || c_quest4.isDead()) i_quest4 = 0; if (i_quest2 > i_quest3) { i1 = 2; i2 = i_quest2; c2 = c_quest2; } else { i1 = 3; i2 = i_quest3; c2 = c_quest3; } if (i_quest4 > i2) { i1 = 4; i2 = i_quest4; c2 = c_quest4; } if (i2 == 0) c2 = getRandomTarget(npc); if (i2 > 0) { if (Rnd.get(100) < 70) { if (i1 == 2) i_quest2 = 500; else if (i1 == 3) i_quest3 = 500; else if (i1 == 4) i_quest4 = 500; } if (npc.getCurrentHp() > ((npc.getMaxHp() * 1) / 4)) { i0 = 0; i1 = 0; if (Util.checkIfInRange(1423, npc, c2, true)) { i0 = 1; i1 = 1; } if (c2.getZ() < (npc.getZ() + 200)) { if (Rnd.get(100) < 20) { skill = SkillTable.getInstance().getInfo(4690, 1); } else if (Rnd.get(100) < 15) { skill = SkillTable.getInstance().getInfo(4689, 1); } else if (Rnd.get(100) < 15 && i0 == 1 && i_quest0 == 1) { skill = SkillTable.getInstance().getInfo(4685, 1); i_quest0 = 0; } else if (Rnd.get(100) < 10 && i1 == 1) { skill = SkillTable.getInstance().getInfo(4688, 1); } else if (Rnd.get(100) < 35) { skill = SkillTable.getInstance().getInfo(4683, 1); } else { if (Rnd.get(2) == 0) // TODO: replace me with direction, to check if player standing on left or right side of valakas skill = SkillTable.getInstance().getInfo(4681, 1); // left hand else skill = SkillTable.getInstance().getInfo(4682, 1); // right hand } } else if (Rnd.get(100) < 20) { skill = SkillTable.getInstance().getInfo(4690, 1); } else if (Rnd.get(100) < 15) { skill = SkillTable.getInstance().getInfo(4689, 1); } else { skill = SkillTable.getInstance().getInfo(4684, 1); } } else if (npc.getCurrentHp() > ((npc.getMaxHp() * 2) / 4)) { i0 = 0; i1 = 0; if (Util.checkIfInRange(1423, npc, c2, true)) { i0 = 1; i1 = 1; } if (c2.getZ() < (npc.getZ() + 200)) { if (Rnd.get(100) < 5) { skill = SkillTable.getInstance().getInfo(4690, 1); } else if (Rnd.get(100) < 10) { skill = SkillTable.getInstance().getInfo(4689, 1); } else if (Rnd.get(100) < 10 && i0 == 1 && i_quest0 == 1) { skill = SkillTable.getInstance().getInfo(4685, 1); i_quest0 = 0; } else if (Rnd.get(100) < 10 && i1 == 1) { skill = SkillTable.getInstance().getInfo(4688, 1); } else if (Rnd.get(100) < 20) { skill = SkillTable.getInstance().getInfo(4683, 1); } else { if (Rnd.get(2) == 0) // TODO: replace me with direction, to check if player standing on left or right side of valakas skill = SkillTable.getInstance().getInfo(4681, 1); // left hand else skill = SkillTable.getInstance().getInfo(4682, 1); // right hand } } else if (Rnd.get(100) < 5) { skill = SkillTable.getInstance().getInfo(4690, 1); } else if (Rnd.get(100) < 10) { skill = SkillTable.getInstance().getInfo(4689, 1); } else { skill = SkillTable.getInstance().getInfo(4684, 1); } } else if (npc.getCurrentHp() > ((npc.getMaxHp() * 3) / 4.0)) { i0 = 0; i1 = 0; if (Util.checkIfInRange(1423, npc, c2, true)) { i0 = 1; i1 = 1; } if (c2.getZ() < (npc.getZ() + 200)) { if (Rnd.get(100) < 0) { skill = SkillTable.getInstance().getInfo(4690, 1); } else if (Rnd.get(100) < 5) { skill = SkillTable.getInstance().getInfo(4689, 1); } else if (Rnd.get(100) < 5 && i0 == 1 && i_quest0 == 1) { skill = SkillTable.getInstance().getInfo(4685, 1); i_quest0 = 0; } else if (Rnd.get(100) < 10 && i1 == 1) { skill = SkillTable.getInstance().getInfo(4688, 1); } else if (Rnd.get(100) < 15) { skill = SkillTable.getInstance().getInfo(4683, 1); } else { if (Rnd.get(2) == 0) // TODO: replace me with direction, to check if player standing on left or right side of valakas skill = SkillTable.getInstance().getInfo(4681, 1); // left hand else skill = SkillTable.getInstance().getInfo(4682, 1); // right hand } } else if (Rnd.get(100) < 0) { skill = SkillTable.getInstance().getInfo(4690, 1); } else if (Rnd.get(100) < 5) { skill = SkillTable.getInstance().getInfo(4689, 1); } else { skill = SkillTable.getInstance().getInfo(4684, 1); } } else { i0 = 0; i1 = 0; if (Util.checkIfInRange(1423, npc, c2, true)) { i0 = 1; i1 = 1; } if (c2.getZ() < (npc.getZ() + 200)) { if (Rnd.get(100) < 0) { skill = SkillTable.getInstance().getInfo(4690, 1); } else if (Rnd.get(100) < 10) { skill = SkillTable.getInstance().getInfo(4689, 1); } else if (Rnd.get(100) < 5 && i0 == 1 && i_quest0 == 1) { skill = SkillTable.getInstance().getInfo(4685, 1); i_quest0 = 0; } else if (Rnd.get(100) < 10 && i1 == 1) { skill = SkillTable.getInstance().getInfo(4688, 1); } else if (Rnd.get(100) < 15) { skill = SkillTable.getInstance().getInfo(4683, 1); } else { if (Rnd.get(2) == 0) // TODO: replace me with direction, to check if player standing on left or right side of valakas skill = SkillTable.getInstance().getInfo(4681, 1); // left hand else skill = SkillTable.getInstance().getInfo(4682, 1); // right hand } } else if (Rnd.get(100) < 0) { skill = SkillTable.getInstance().getInfo(4690, 1); } else if (Rnd.get(100) < 10) { skill = SkillTable.getInstance().getInfo(4689, 1); } else { skill = SkillTable.getInstance().getInfo(4684, 1); } } } if (skill != null) callSkillAI(npc, c2, skill); } public void callSkillAI(L2Npc npc, L2Character c2, L2Skill skill) { QuestTimer timer = getQuestTimer("1003", npc, null); if (npc == null) { if (timer != null) timer.cancel(); return; } if (npc.isInvul()) return; if (c2 == null || c2.isDead() || timer == null) { c2 = getRandomTarget(npc); // just in case if hate AI fail if (timer == null) { startQuestTimer("1003", 500, npc, null, true); return; } } L2Character target = c2; if (target == null || target.isDead()) { return; } if (Util.checkIfInRange(skill.getCastRange(), npc, target, true)) { timer.cancel(); npc.getAI().setIntention(AI_INTENTION_IDLE); npc.setIsCastingNow(true); npc.setTarget(target); npc.doCast(skill); } else { npc.getAI().setIntention(AI_INTENTION_FOLLOW, target, null); npc.setIsCastingNow(false); } } public void broadcastSpawn(L2Npc npc) { Collection<L2Object> objs = npc.getKnownList().getKnownObjects().values(); { for (L2Object obj : objs) { if (obj instanceof L2PcInstance) { if (Util.checkIfInRange(10000, npc, obj, true)) { ((L2Character) obj).sendPacket(new PlaySound(1, "B03_A", 1, npc.getObjectId(), 212852, -114842, -1632)); ((L2Character) obj).sendPacket(new SocialAction(npc.getObjectId(), 3)); } } } } return; } public L2Character getRandomTarget(L2Npc npc) { FastList<L2Character> result = new FastList<L2Character>(); Collection<L2Object> objs = npc.getKnownList().getKnownObjects().values(); { for (L2Object obj : objs) { if (obj instanceof L2PcInstance || obj instanceof L2Summon || obj instanceof L2DecoyInstance) { if (Util.checkIfInRange(5000, npc, obj, true) && !((L2Character) obj).isDead() && !((L2Character) obj).isGM()) result.add((L2Character) obj); } } } if (!result.isEmpty() && result.size() != 0) { Object[] characters = result.toArray(); return (L2Character) characters[Rnd.get(characters.length)]; } return null; } @Override public String onSpellFinished(L2Npc npc, L2PcInstance player, L2Skill skill) { if (npc.isInvul()) { return null; } else if (npc.getNpcId() == VALAKAS && !npc.isInvul()) { getRandomSkill(npc); } return super.onSpellFinished(npc, player, skill); } @Override public String onAggroRangeEnter(L2Npc npc, L2PcInstance player, boolean isPet) { int i1 = 0; if (GrandBossManager.getInstance().getBossStatus(VALAKAS) == FIGHTING) { if (npc.getCurrentHp() > ((npc.getMaxHp() * 1) / 4)) { if (player == c_quest2) { if (((10 * 1000) + 1000) > i_quest2) { i_quest2 = ((10 * 1000) + Rnd.get(3000)); } } else if (player == c_quest3) { if (((10 * 1000) + 1000) > i_quest3) { i_quest3 = ((10 * 1000) + Rnd.get(3000)); } } else if (player == c_quest4) { if (((10 * 1000) + 1000) > i_quest4) { i_quest4 = ((10 * 1000) + Rnd.get(3000)); } } else if (i_quest2 > i_quest3) { i1 = 3; } else if (i_quest2 == i_quest3) { if (Rnd.get(100) < 50) { i1 = 2; } else { i1 = 3; } } else if (i_quest2 < i_quest3) { i1 = 2; } if (i1 == 2) { if (i_quest2 > i_quest4) { i1 = 4; } else if (i_quest2 == i_quest4) { if (Rnd.get(100) < 50) { i1 = 2; } else { i1 = 4; } } else if (i_quest2 < i_quest4) { i1 = 2; } } else if (i1 == 3) { if (i_quest3 > i_quest4) { i1 = 4; } else if (i_quest3 == i_quest4) { if (Rnd.get(100) < 50) { i1 = 3; } else { i1 = 4; } } else if (i_quest3 < i_quest4) { i1 = 3; } } if (i1 == 2) { i_quest2 = ((10 * 1000) + Rnd.get(3000)); c_quest2 = player; } else if (i1 == 3) { i_quest3 = ((10 * 1000) + Rnd.get(3000)); c_quest3 = player; } else if (i1 == 4) { i_quest4 = ((10 * 1000) + Rnd.get(3000)); c_quest4 = player; } } else if (npc.getCurrentHp() > ((npc.getMaxHp() * 2) / 4)) { if (player == c_quest2) { if (((6 * 1000) + 1000) > i_quest2) { i_quest2 = ((6 * 1000) + Rnd.get(3000)); } } else if (player == c_quest3) { if (((6 * 1000) + 1000) > i_quest3) { i_quest3 = ((6 * 1000) + Rnd.get(3000)); } } else if (player == c_quest4) { if (((6 * 1000) + 1000) > i_quest4) { i_quest4 = ((6 * 1000) + Rnd.get(3000)); } } else if (i_quest2 > i_quest3) { i1 = 3; } else if (i_quest2 == i_quest3) { if (Rnd.get(100) < 50) { i1 = 2; } else { i1 = 3; } } else if (i_quest2 < i_quest3) { i1 = 2; } if (i1 == 2) { if (i_quest2 > i_quest4) { i1 = 4; } else if (i_quest2 == i_quest4) { if (Rnd.get(100) < 50) { i1 = 2; } else { i1 = 4; } } else if (i_quest2 < i_quest4) { i1 = 2; } } else if (i1 == 3) { if (i_quest3 > i_quest4) { i1 = 4; } else if (i_quest3 == i_quest4) { if (Rnd.get(100) < 50) { i1 = 3; } else { i1 = 4; } } else if (i_quest3 < i_quest4) { i1 = 3; } } if (i1 == 2) { i_quest2 = ((6 * 1000) + Rnd.get(3000)); c_quest2 = player; } else if (i1 == 3) { i_quest3 = ((6 * 1000) + Rnd.get(3000)); c_quest3 = player; } else if (i1 == 4) { i_quest4 = ((6 * 1000) + Rnd.get(3000)); c_quest4 = player; } } else if (npc.getCurrentHp() > ((npc.getMaxHp() * 3) / 4.0)) { if (player == c_quest2) { if (((3 * 1000) + 1000) > i_quest2) { i_quest2 = ((3 * 1000) + Rnd.get(3000)); } } else if (player == c_quest3) { if (((3 * 1000) + 1000) > i_quest3) { i_quest3 = ((3 * 1000) + Rnd.get(3000)); } } else if (player == c_quest4) { if (((3 * 1000) + 1000) > i_quest4) { i_quest4 = ((3 * 1000) + Rnd.get(3000)); } } else if (i_quest2 > i_quest3) { i1 = 3; } else if (i_quest2 == i_quest3) { if (Rnd.get(100) < 50) { i1 = 2; } else { i1 = 3; } } else if (i_quest2 < i_quest3) { i1 = 2; } if (i1 == 2) { if (i_quest2 > i_quest4) { i1 = 4; } else if (i_quest2 == i_quest4) { if (Rnd.get(100) < 50) { i1 = 2; } else { i1 = 4; } } else if (i_quest2 < i_quest4) { i1 = 2; } } else if (i1 == 3) { if (i_quest3 > i_quest4) { i1 = 4; } else if (i_quest3 == i_quest4) { if (Rnd.get(100) < 50) { i1 = 3; } else { i1 = 4; } } else if (i_quest3 < i_quest4) { i1 = 3; } } if (i1 == 2) { i_quest2 = ((3 * 1000) + Rnd.get(3000)); c_quest2 = player; } else if (i1 == 3) { i_quest3 = ((3 * 1000) + Rnd.get(3000)); c_quest3 = player; } else if (i1 == 4) { i_quest4 = ((3 * 1000) + Rnd.get(3000)); c_quest4 = player; } } else if (player == c_quest2) { if (((2 * 1000) + 1000) > i_quest2) { i_quest2 = ((2 * 1000) + Rnd.get(3000)); } } else if (player == c_quest3) { if (((2 * 1000) + 1000) > i_quest3) { i_quest3 = ((2 * 1000) + Rnd.get(3000)); } } else if (player == c_quest4) { if (((2 * 1000) + 1000) > i_quest4) { i_quest4 = ((2 * 1000) + Rnd.get(3000)); } } else if (i_quest2 > i_quest3) { i1 = 3; } else if (i_quest2 == i_quest3) { if (Rnd.get(100) < 50) { i1 = 2; } else { i1 = 3; } } else if (i_quest2 < i_quest3) { i1 = 2; } if (i1 == 2) { if (i_quest2 > i_quest4) { i1 = 4; } else if (i_quest2 == i_quest4) { if (Rnd.get(100) < 50) { i1 = 2; } else { i1 = 4; } } else if (i_quest2 < i_quest4) { i1 = 2; } } else if (i1 == 3) { if (i_quest3 > i_quest4) { i1 = 4; } else if (i_quest3 == i_quest4) { if (Rnd.get(100) < 50) { i1 = 3; } else { i1 = 4; } } else if (i_quest3 < i_quest4) { i1 = 3; } } if (i1 == 2) { i_quest2 = ((2 * 1000) + Rnd.get(3000)); c_quest2 = player; } else if (i1 == 3) { i_quest3 = ((2 * 1000) + Rnd.get(3000)); c_quest3 = player; } else if (i1 == 4) { i_quest4 = ((2 * 1000) + Rnd.get(3000)); c_quest4 = player; } } else if (player == c_quest2) { if (((1 * 1000) + 1000) > i_quest2) { i_quest2 = ((1 * 1000) + Rnd.get(3000)); } } else if (player == c_quest3) { if (((1 * 1000) + 1000) > i_quest3) { i_quest3 = ((1 * 1000) + Rnd.get(3000)); } } else if (player == c_quest4) { if (((1 * 1000) + 1000) > i_quest4) { i_quest4 = ((1 * 1000) + Rnd.get(3000)); } } else if (i_quest2 > i_quest3) { i1 = 3; } else if (i_quest2 == i_quest3) { if (Rnd.get(100) < 50) { i1 = 2; } else { i1 = 3; } } else if (i_quest2 < i_quest3) { i1 = 2; } if (i1 == 2) { if (i_quest2 > i_quest4) { i1 = 4; } else if (i_quest2 == i_quest4) { if (Rnd.get(100) < 50) { i1 = 2; } else { i1 = 4; } } else if (i_quest2 < i_quest4) { i1 = 2; } } else if (i1 == 3) { if (i_quest3 > i_quest4) { i1 = 4; } else if (i_quest3 == i_quest4) { if (Rnd.get(100) < 50) { i1 = 3; } else { i1 = 4; } } else if (i_quest3 < i_quest4) { i1 = 3; } } if (i1 == 2) { i_quest2 = ((1 * 1000) + Rnd.get(3000)); c_quest2 = player; } else if (i1 == 3) { i_quest3 = ((1 * 1000) + Rnd.get(3000)); c_quest3 = player; } else if (i1 == 4) { i_quest4 = ((1 * 1000) + Rnd.get(3000)); c_quest4 = player; } if (GrandBossManager.getInstance().getBossStatus(VALAKAS) == FIGHTING && !npc.isInvul()) { getRandomSkill(npc); } else return null; return super.onAggroRangeEnter(npc, player, isPet); } @Override public String onSkillSee(L2Npc npc, L2PcInstance caster, L2Skill skill, L2Object[] targets, boolean isPet) { if (npc.isInvul()) { return null; } npc.setTarget(caster); return super.onSkillSee(npc, caster, skill, targets, isPet); } public static void main(String[] args) { // now call the constructor (starts up the ai) new Valakas(-1, "valakas", "ai"); } } Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Nolland 0 Опубликовано 13 марта, 2011 учить питон и переписывать Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Admiralio 0 Опубликовано 13 марта, 2011 учить питон и переписывать Где ты тут питон видишь? Сразу по импортам видно, что скрипт на яве. по теме: Как вы подходили к сердцу? Если вас на ступеньку поднял "Kein", то тогда у тя проблема. Если к сердцу подошли используя баг (например серв без гео и игроки нашли способ заскочить на ступеньку) или игроков кто-то присуммонл к нему, тогда ясное дело таких игроков не пустит. второе: какой статус валакаса в БД? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
~SNEG~ 54 Опубликовано 13 марта, 2011 кстати кристал вроде не проверяет quest item. У open team по крайней мере не проверял Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Admiralio 0 Опубликовано 14 марта, 2011 Кристалл-лишь продолжает квест, который начинает НПЦ, который тебя портует на ступеньку. Именно он и забирает квест итем. Так что, если ты пришел к кристаллу без помощи этого НПСа, тебя к валику не пустит. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Outsider 0 Опубликовано 14 марта, 2011 да дело то в том что через квест то и заходил и не пускает,в БД статус 0 валика(пробовал сумонить его делаешь удар тебя ТПшит в город,но сам валик остается и агрится) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Admiralio 0 Опубликовано 14 марта, 2011 Тоггда не знаю, чего даже предложить, самый лучший вариант-попросить разрабов поправить. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
~SNEG~ 54 Опубликовано 14 марта, 2011 да дело то в том что через квест то и заходил и не пускает,в БД статус 0 валика(пробовал сумонить его делаешь удар тебя ТПшит в город,но сам валик остается и агрится) он и будет тебя телепортировать если ты его поставил не на его территории. Для этого надо зоны редактировать Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты