Перейти к содержанию
Авторизация  
Outsider

Косяк С Валакасом

Рекомендуемые сообщения

сборка от Iceberga gracia epiloge,

делаешь квест на валика доходишь до сердца тыкаешь на него пишет Cannot enter(как исправить это Валик живой его никто не убивал заранее спасибо!!!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

так и что там менять?

вот этот скрипт

/*
* 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");
}
}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

учить питон и переписывать

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
учить питон и переписывать

 

Где ты тут питон видишь? Сразу по импортам видно, что скрипт на яве.

 

по теме: Как вы подходили к сердцу? Если вас на ступеньку поднял "Kein", то тогда у тя проблема.

Если к сердцу подошли используя баг (например серв без гео и игроки нашли способ заскочить на ступеньку) или игроков кто-то присуммонл к нему, тогда ясное дело таких игроков не пустит.

 

второе: какой статус валакаса в БД?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

кстати кристал вроде не проверяет quest item. У open team по крайней мере не проверял

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Кристалл-лишь продолжает квест, который начинает НПЦ, который тебя портует на ступеньку. Именно он и забирает квест итем.

Так что, если ты пришел к кристаллу без помощи этого НПСа, тебя к валику не пустит.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

да дело то в том что через квест то и заходил и не пускает,в БД статус 0 валика(пробовал сумонить его делаешь удар тебя ТПшит в город,но сам валик остается и агрится)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Тоггда не знаю, чего даже предложить, самый лучший вариант-попросить разрабов поправить.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
да дело то в том что через квест то и заходил и не пускает,в БД статус 0 валика(пробовал сумонить его делаешь удар тебя ТПшит в город,но сам валик остается и агрится)

 

он и будет тебя телепортировать если ты его поставил не на его территории. Для этого надо зоны редактировать

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Авторизация  

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...