Antharas java

Svarbu!
    
  1. Atsijungęs

    gerardas

    Pranešimai: 0

    Gal kas galetumet padeti isjungti anthara kad jo nebespawnintu i pasauli? :D

    /*
     * 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 com.l2jfrozen.gameserver.ai.special;
    
    import java.util.Collection;
    import java.util.HashMap;
    import java.util.List;
    import java.util.concurrent.ScheduledFuture;
    import java.util.logging.Logger;
    
    import javolution.util.FastList;
    
    import com.l2jfrozen.Config;
    import com.l2jfrozen.gameserver.ai.CtrlIntention;
    import com.l2jfrozen.gameserver.datatables.SkillTable;
    import com.l2jfrozen.gameserver.datatables.sql.NpcTable;
    import com.l2jfrozen.gameserver.datatables.sql.SpawnTable;
    import com.l2jfrozen.gameserver.geo.GeoData;
    import com.l2jfrozen.gameserver.managers.GrandBossManager;
    import com.l2jfrozen.gameserver.model.L2Character;
    import com.l2jfrozen.gameserver.model.L2Skill;
    import com.l2jfrozen.gameserver.model.L2World;
    import com.l2jfrozen.gameserver.model.actor.instance.L2GrandBossInstance;
    import com.l2jfrozen.gameserver.model.actor.instance.L2MonsterInstance;
    import com.l2jfrozen.gameserver.model.actor.instance.L2NpcInstance;
    import com.l2jfrozen.gameserver.model.actor.instance.L2PcInstance;
    import com.l2jfrozen.gameserver.model.actor.position.L2CharPosition;
    import com.l2jfrozen.gameserver.model.quest.Quest;
    import com.l2jfrozen.gameserver.model.spawn.L2Spawn;
    import com.l2jfrozen.gameserver.model.zone.type.L2BossZone;
    import com.l2jfrozen.gameserver.network.serverpackets.Earthquake;
    import com.l2jfrozen.gameserver.network.serverpackets.L2GameServerPacket;
    import com.l2jfrozen.gameserver.network.serverpackets.PlaySound;
    import com.l2jfrozen.gameserver.network.serverpackets.SpecialCamera;
    import com.l2jfrozen.gameserver.templates.L2NpcTemplate;
    import com.l2jfrozen.gameserver.templates.StatsSet;
    import com.l2jfrozen.gameserver.thread.ThreadPoolManager;
    import com.l2jfrozen.util.random.Rnd;
    
    /**
     * This class ... control for sequence of fight against Antharas.
     * 
     * @version $Revision: $ $Date: $
     * @author L2J_JP SANDMAN
     */
    public class Antharas_l2j extends Quest implements Runnable
    {
    	protected static final Logger _log = Logger.getLogger(Antharas_l2j.class.getName());
    	
    	// config
    	private static final int FWA_ACTIVITYTIMEOFANTHARAS = 120;
    	//private static final int FWA_APPTIMEOFANTHARAS = 1800000;
    	//private static final int FWA_INACTIVITYTIME = 900000;
    	//private static final boolean FWA_OLDANTHARAS = true; //use antharas interlude with minions
    	protected static final boolean FWA_OLDANTHARAS = Config.ANTHARAS_OLD; //use antharas interlude with minions
    	private static final boolean FWA_MOVEATRANDOM = true;
    	private static final boolean FWA_DOSERVEREARTHQUAKE = true;
    	private static final int FWA_LIMITOFWEAK = 45;
    	private static final int FWA_LIMITOFNORMAL = 63;
    	
    	private static final int FWA_MAXMOBS = 10; // this includes Antharas itself
    	private static final int FWA_INTERVALOFMOBSWEAK = 180000;
    	private static final int FWA_INTERVALOFMOBSNORMAL = 150000;
    	private static final int FWA_INTERVALOFMOBSSTRONG = 120000;
    	private static final int FWA_PERCENTOFBEHEMOTH = 60;
    	private static final int FWA_SELFDESTRUCTTIME = 15000;
    	// Location of teleport cube.
    	private final int _teleportCubeId = 31859;
    	private final int _teleportCubeLocation[][] = { { 177615, 114941, -7709, 0 } };
    	
    	protected List<L2Spawn> _teleportCubeSpawn = new FastList<L2Spawn>();
    	protected List<L2NpcInstance> _teleportCube = new FastList<L2NpcInstance>();
    	
    	// Spawn data of monsters.
    	protected HashMap<Integer, L2Spawn> _monsterSpawn = new HashMap<Integer, L2Spawn>();
    	
    	// Instance of monsters.
    	protected List<L2NpcInstance> _monsters = new FastList<L2NpcInstance>();
    	protected L2GrandBossInstance _antharas = null;
    	
    	// monstersId
    	private static final int ANTHARASOLDID = 29019;
    	private static final int ANTHARASWEAKID = 29066;
    	private static final int ANTHARASNORMALID = 29067;
    	private static final int ANTHARASSTRONGID = 29068;
    	
    	// Tasks.
    	protected ScheduledFuture<?> _cubeSpawnTask = null;
    	protected volatile ScheduledFuture<?> _monsterSpawnTask = null;
    	protected ScheduledFuture<?> _activityCheckTask = null;
    	protected ScheduledFuture<?> _socialTask = null;
    	protected ScheduledFuture<?> _mobiliseTask = null;
    	protected ScheduledFuture<?> _mobsSpawnTask = null;
    	protected ScheduledFuture<?> _selfDestructionTask = null;
    	protected ScheduledFuture<?> _moveAtRandomTask = null;
    	protected ScheduledFuture<?> _movieTask = null;
    	
    	//Antharas Status Tracking :
    	private static final int DORMANT = 0;		//Antharas is spawned and no one has entered yet. Entry is unlocked
    	private static final int WAITING = 1;		//Antharas 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 int FIGHTING = 2;		//Antharas is engaged in battle, annihilating his foes. Entry is locked
    	private static final int DEAD = 3;			//Antharas has been killed. Entry is locked
    	
    	protected static long _LastAction = 0;
    	
    	protected static L2BossZone _Zone;
    	
    
    	// Boss: Antharas
    	public Antharas_l2j(int id,String name,String descr)
    	{
    		super(id,name,descr);
    		int[] mob = {ANTHARASOLDID,ANTHARASWEAKID,ANTHARASNORMALID,ANTHARASSTRONGID,29069,29070,29071,29072,29073,29074,29075,29076};
    		this.registerMobs(mob);
    		init();
    	}
    	
    	// Initialize
    	private void init()
    	{
    		// Setting spawn data of monsters.
    		try
    		{
    			_Zone = GrandBossManager.getInstance().getZone(179700,113800,-7709);
    			L2NpcTemplate template1;
    			L2Spawn tempSpawn;
    			
    			// Old Antharas
    			template1 = NpcTable.getInstance().getTemplate(ANTHARASOLDID);
    			tempSpawn = new L2Spawn(template1);
    			tempSpawn.setLocx(181323);
    			tempSpawn.setLocy(114850);
    			tempSpawn.setLocz(-7623);
    			tempSpawn.setHeading(32542);
    			tempSpawn.setAmount(1);
    			tempSpawn.setRespawnDelay(FWA_ACTIVITYTIMEOFANTHARAS * 2);
    			SpawnTable.getInstance().addNewSpawn(tempSpawn, false);
    			_monsterSpawn.put(29019, tempSpawn);
    			
    			// Weak Antharas
    			template1 = NpcTable.getInstance().getTemplate(ANTHARASWEAKID);
    			tempSpawn = new L2Spawn(template1);
    			tempSpawn.setLocx(181323);
    			tempSpawn.setLocy(114850);
    			tempSpawn.setLocz(-7623);
    			tempSpawn.setHeading(32542);
    			tempSpawn.setAmount(1);
    			tempSpawn.setRespawnDelay(FWA_ACTIVITYTIMEOFANTHARAS * 2);
    			SpawnTable.getInstance().addNewSpawn(tempSpawn, false);
    			_monsterSpawn.put(29066, tempSpawn);
    			
    			// Normal Antharas
    			template1 = NpcTable.getInstance().getTemplate(ANTHARASNORMALID);
    			tempSpawn = new L2Spawn(template1);
    			tempSpawn.setLocx(181323);
    			tempSpawn.setLocy(114850);
    			tempSpawn.setLocz(-7623);
    			tempSpawn.setHeading(32542);
    			tempSpawn.setAmount(1);
    			tempSpawn.setRespawnDelay(FWA_ACTIVITYTIMEOFANTHARAS * 2);
    			SpawnTable.getInstance().addNewSpawn(tempSpawn, false);
    			_monsterSpawn.put(29067, tempSpawn);
    			
    			// Strong Antharas
    			template1 = NpcTable.getInstance().getTemplate(ANTHARASSTRONGID);
    			tempSpawn = new L2Spawn(template1);
    			tempSpawn.setLocx(181323);
    			tempSpawn.setLocy(114850);
    			tempSpawn.setLocz(-7623);
    			tempSpawn.setHeading(32542);
    			tempSpawn.setAmount(1);
    			tempSpawn.setRespawnDelay(FWA_ACTIVITYTIMEOFANTHARAS * 2);
    			SpawnTable.getInstance().addNewSpawn(tempSpawn, false);
    			_monsterSpawn.put(29068, tempSpawn);
    		}
    		catch (Exception e)
    		{
    			_log.warning(e.getMessage());
    		}
    		
    		// Setting spawn data of teleport cube.
    		try
    		{
    			L2NpcTemplate Cube = NpcTable.getInstance().getTemplate(_teleportCubeId);
    			L2Spawn spawnDat;
    			for (int[] element : _teleportCubeLocation)
    			{
    				spawnDat = new L2Spawn(Cube);
    				spawnDat.setAmount(1);
    				spawnDat.setLocx(element[0]);
    				spawnDat.setLocy(element[1]);
    				spawnDat.setLocz(element[2]);
    				spawnDat.setHeading(element[3]);
    				spawnDat.setRespawnDelay(60);
    				spawnDat.setLocation(0);
    				SpawnTable.getInstance().addNewSpawn(spawnDat, false);
    				_teleportCubeSpawn.add(spawnDat);
    			}
    		}
    		catch (Exception e)
    		{
    			_log.warning(e.getMessage());
    		}
    		
    		Integer status = GrandBossManager.getInstance().getBossStatus(ANTHARASOLDID);
    		
    		if (FWA_OLDANTHARAS || status == WAITING)
    		{
    			StatsSet info = GrandBossManager.getInstance().getStatsSet(ANTHARASOLDID);
    			Long respawnTime = info.getLong("respawn_time");
    			if (status == DEAD && respawnTime <= System.currentTimeMillis())
    			{
    				// the time has already expired while the server was offline. Immediately spawn antharas in his cave.
    				// also, the status needs to be changed to DORMANT
    				GrandBossManager.getInstance().setBossStatus(ANTHARASOLDID,DORMANT);
    				status = DORMANT;
    			}
    			else if (status == FIGHTING)
    			{
    				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");
    				int hp = info.getInteger("currentHP");
    				int mp = info.getInteger("currentMP");
    				_antharas = (L2GrandBossInstance) addSpawn(ANTHARASOLDID,loc_x,loc_y,loc_z,heading,false,0);
    				GrandBossManager.getInstance().addBoss(_antharas);
    				_antharas.setCurrentHpMp(hp,mp);
    				_LastAction = System.currentTimeMillis();
    				// Start repeating timer to check for inactivity
    				_activityCheckTask = ThreadPoolManager.getInstance().scheduleGeneralAtFixedRate(new CheckActivity(), 60000, 60000);
    			}
    			else if (status == DEAD)
    			{
    				ThreadPoolManager.getInstance().scheduleGeneral(new UnlockAntharas(ANTHARASOLDID), respawnTime - System.currentTimeMillis());
    			}
    			else
    			{
    				setAntharasSpawnTask();
    			}
    		}
    		else
    		{
    			Integer statusWeak = GrandBossManager.getInstance().getBossStatus(ANTHARASWEAKID);
    			
    			
    			Integer statusNormal = GrandBossManager.getInstance().getBossStatus(ANTHARASNORMALID);
    			
    			
    			Integer statusStrong = GrandBossManager.getInstance().getBossStatus(ANTHARASSTRONGID);
    			
    			int antharasId = 0;
    			if (statusWeak == FIGHTING || statusWeak == DEAD)
    			{
    				antharasId = ANTHARASWEAKID;
    				status = statusWeak;
    			}
    			else if (statusNormal == FIGHTING || statusNormal == DEAD)
    			{
    				antharasId = ANTHARASNORMALID;
    				status = statusNormal;
    			}
    			else if (statusStrong == FIGHTING || statusStrong == DEAD)
    			{
    				antharasId = ANTHARASSTRONGID;
    				status = statusStrong;
    			}
    			if (antharasId != 0 && status == FIGHTING)
    			{
    				StatsSet info = GrandBossManager.getInstance().getStatsSet(antharasId);
    				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");
    				int hp = info.getInteger("currentHP");
    				int mp = info.getInteger("currentMP");
    				_antharas = (L2GrandBossInstance) addSpawn(antharasId,loc_x,loc_y,loc_z,heading,false,0);
    				GrandBossManager.getInstance().addBoss(_antharas);
    				_antharas.setCurrentHpMp(hp,mp);
    				_LastAction = System.currentTimeMillis();
    				// Start repeating timer to check for inactivity
    				_activityCheckTask = ThreadPoolManager.getInstance().scheduleGeneralAtFixedRate(new CheckActivity(), 60000, 60000);
    			}
    			else if (antharasId != 0 && status == DEAD)
    			{
    				StatsSet info = GrandBossManager.getInstance().getStatsSet(antharasId);
    				Long respawnTime = info.getLong("respawn_time");
    				if (respawnTime <= System.currentTimeMillis())
    				{
    					// the time has already expired while the server was offline. Immediately spawn antharas in his cave.
    					// also, the status needs to be changed to DORMANT
    					GrandBossManager.getInstance().setBossStatus(antharasId,DORMANT);
    					status = DORMANT;
    				}
    				else
    				{
    					ThreadPoolManager.getInstance().scheduleGeneral(new UnlockAntharas(antharasId), respawnTime - System.currentTimeMillis());
    				}
    			}
    		}
    	}
    	
    	// Do spawn teleport cube.
    	public void spawnCube()
    	{
    		if (_mobsSpawnTask != null)
    		{
    			_mobsSpawnTask.cancel(true);
    			_mobsSpawnTask = null;
    		}
    		if (_selfDestructionTask != null)
    		{
    			_selfDestructionTask.cancel(true);
    			_selfDestructionTask = null;
    		}
    		if (_activityCheckTask != null)
    		{
    			_activityCheckTask.cancel(false);
    			_activityCheckTask = null;
    		}
    		
    		for (L2Spawn spawnDat : _teleportCubeSpawn)
    		{
    			_teleportCube.add(spawnDat.doSpawn());
    		}
    	}
    	
    	// Setting Antharas spawn task.
    	public void setAntharasSpawnTask()
    	{
    		if (_monsterSpawnTask == null)
    		{
    			synchronized(this)
    			{
    				if (_monsterSpawnTask == null)
    				{
    					GrandBossManager.getInstance().setBossStatus(ANTHARASOLDID,WAITING);
    					_monsterSpawnTask = ThreadPoolManager.getInstance().scheduleGeneral(new AntharasSpawn(1),60000*Config.ANTHARAS_WAIT_TIME);
    				}
    			}
    		}
    	}
    	
    	protected void startMinionSpawns(int antharasId)
    	{
    		int intervalOfMobs;
    		
    		// Interval of minions is decided by the type of Antharas
    		// that invaded the lair.
    		switch (antharasId)
    		{
    			case ANTHARASWEAKID:
    				intervalOfMobs = FWA_INTERVALOFMOBSWEAK;
    				break;
    			case ANTHARASNORMALID:
    				intervalOfMobs = FWA_INTERVALOFMOBSNORMAL;
    				break;
    			default:
    				intervalOfMobs = FWA_INTERVALOFMOBSSTRONG;
    				break;
    		}
    		
    		// Spawn mobs.
    		_mobsSpawnTask = ThreadPoolManager.getInstance().scheduleGeneralAtFixedRate(new MobsSpawn(), intervalOfMobs, intervalOfMobs);
    	}
    	
    	// Do spawn Antharas.
    	private class AntharasSpawn implements Runnable
    	{
    		private int _taskId = 0;
    		private Collection<L2Character> _players;
    		
    		AntharasSpawn(int taskId)
    		{
    			_taskId = taskId;
    			if(_Zone.getCharactersInside()!=null){
    				_players = _Zone.getCharactersInside().values();
    			}
    		}
    		
    		@Override
    		public void run()
    		{
    			int npcId;
    			L2Spawn antharasSpawn = null;
    			
    			switch (_taskId)
    			{
    				case 1: // Spawn.
    					// Strength of Antharas is decided by the number of players that
    					// invaded the lair.
    					_monsterSpawnTask.cancel(false);
    					_monsterSpawnTask = null;
    					if (FWA_OLDANTHARAS)
    						npcId = 29019; // old
    					else if (_players == null || _players!=null && _players.size() <= FWA_LIMITOFWEAK)
    						npcId = 29066; // weak
    					else if (_players!=null && _players.size() > FWA_LIMITOFNORMAL)
    						npcId = 29068; // strong
    					else
    						npcId = 29067; // normal
    					
    					// Do spawn.
    					antharasSpawn = _monsterSpawn.get(npcId);
    					_antharas = (L2GrandBossInstance) antharasSpawn.doSpawn();
    					GrandBossManager.getInstance().addBoss(_antharas);
    					
    					_monsters.add(_antharas);
    					_antharas.setIsImobilised(true);
    					
    					GrandBossManager.getInstance().setBossStatus(ANTHARASOLDID,DORMANT);
    					GrandBossManager.getInstance().setBossStatus(npcId,FIGHTING);
    					_LastAction = System.currentTimeMillis();
    					// Start repeating timer to check for inactivity
    					_activityCheckTask = ThreadPoolManager.getInstance().scheduleGeneralAtFixedRate(new CheckActivity(), 60000, 60000);
    					
    					// Setting 1st time of minions spawn task.
    					if (!FWA_OLDANTHARAS)
    					{
    						startMinionSpawns(npcId);
    					}
    					
    					// Set next task.
    					if (_socialTask != null)
    					{
    						_socialTask.cancel(true);
    						_socialTask = null;
    					}
    					_socialTask = ThreadPoolManager.getInstance().scheduleGeneral(new AntharasSpawn(2), 16);
    					break;
    				case 2:
    					// Set camera.
    					broadcastPacket(new SpecialCamera(_antharas.getObjectId(),700,13,-19,0,20000));
    					
    					// Set next task.
    					if (_socialTask != null)
    					{
    						_socialTask.cancel(true);
    						_socialTask = null;
    					}
    					_socialTask = ThreadPoolManager.getInstance().scheduleGeneral(new AntharasSpawn(3), 3000);
    					break;
    					
    				case 3:
    					// Do social.
    					broadcastPacket(new SpecialCamera(_antharas.getObjectId(),700,13,0,6000,20000));
    					// Set next task.
    					if (_socialTask != null)
    					{
    						_socialTask.cancel(true);
    						_socialTask = null;
    					}
    					_socialTask = ThreadPoolManager.getInstance().scheduleGeneral(new AntharasSpawn(4), 10000);
    					break;
    				case 4:
    					broadcastPacket(new SpecialCamera(_antharas.getObjectId(),3700,0,-3,0,10000));
    					// Set next task.
    					if (_socialTask != null)
    					{
    						_socialTask.cancel(true);
    						_socialTask = null;
    					}
    					_socialTask = ThreadPoolManager.getInstance().scheduleGeneral(new AntharasSpawn(5), 200);
    					break;
    					
    				case 5:
    					// Do social.
    					broadcastPacket(new SpecialCamera(_antharas.getObjectId(),1100,0,-3,22000,30000));
    					// Set next task.
    					if (_socialTask != null)
    					{
    						_socialTask.cancel(true);
    						_socialTask = null;
    					}
    					_socialTask = ThreadPoolManager.getInstance().scheduleGeneral(new AntharasSpawn(6), 10800);
    					break;
    					
    				case 6:
    					// Set camera.
    					broadcastPacket(new SpecialCamera(_antharas.getObjectId(),1100,0,-3,300,7000));
    					// Set next task.
    					if (_socialTask != null)
    					{
    						_socialTask.cancel(true);
    						_socialTask = null;
    					}
    					_socialTask = ThreadPoolManager.getInstance().scheduleGeneral(new AntharasSpawn(7), 1900);
    					break;
    					
    				case 7:
    					_antharas.abortCast();
    					
    					_mobiliseTask = ThreadPoolManager.getInstance().scheduleGeneral(new SetMobilised(_antharas), 16);
    					
    					// Move at random.
    					if (FWA_MOVEATRANDOM)
    					{
    						L2CharPosition pos = new L2CharPosition(Rnd.get(175000,178500), Rnd.get(112400, 116000), -7707, 0);
    						_moveAtRandomTask = ThreadPoolManager.getInstance().scheduleGeneral(new MoveAtRandom(_antharas, pos),500);
    					}
    					
    					if (_socialTask != null)
    					{
    						_socialTask.cancel(true);
    						_socialTask = null;
    					}
    					break;
    			}
    		}
    	}
    	
    	protected void broadcastPacket(L2GameServerPacket mov)
    	{
    		if (_Zone != null)
    		{
    			for (L2Character characters : _Zone.getCharactersInside().values())
    			{
    				if (characters instanceof L2PcInstance)
    					characters.sendPacket(mov);
    			}
    		}
    	}
    	
    	// Do spawn Behemoth or Bomber.
    	private class MobsSpawn implements Runnable
    	{
    		public MobsSpawn()
    		{
    		}
    		
    		@Override
    		public void run()
    		{
    			L2NpcTemplate template1;
    			L2Spawn tempSpawn;
    			boolean isBehemoth = Rnd.get(100) < FWA_PERCENTOFBEHEMOTH;
    			try
    			{
    				int mobNumber = (isBehemoth ? 2 : 3);
    				// Set spawn.
    				for(int i = 0; i < mobNumber; i++)
    				{
    					if (_monsters.size() >= FWA_MAXMOBS)
    						break;
    					int npcId;
    					if (isBehemoth)
    						npcId = 29069;
    					else
    						npcId = Rnd.get(29070, 29076);
    					template1 = NpcTable.getInstance().getTemplate(npcId);
    					tempSpawn = new L2Spawn(template1);
    					// allocates it at random in the lair of Antharas.
    					int tried = 0;
    					boolean notFound = true;
    					int x = 175000;
    					int y = 112400;
    					int dt = (_antharas.getX() - x) * (_antharas.getX() - x) + (_antharas.getY() - y) * (_antharas.getY() - y);
    					while (tried++ < 25 && notFound)
    					{
    						int rx = Rnd.get(175000, 179900);
    						int ry = Rnd.get(112400, 116000);
    						int rdt = (_antharas.getX() - rx) * (_antharas.getX() - rx) + (_antharas.getY() - ry) * (_antharas.getY() - ry);
    						if (GeoData.getInstance().canSeeTarget(_antharas.getX(), _antharas.getY(), -7704, rx, ry, -7704))
    							if (rdt < dt)
    							{
    								x = rx;
    								y = ry;
    								dt = rdt;
    								if (rdt <= 900000)
    									notFound = false;
    							}
    					}
    					tempSpawn.setLocx(x);
    					tempSpawn.setLocy(y);
    					tempSpawn.setLocz(-7704);
    					tempSpawn.setHeading(0);
    					tempSpawn.setAmount(1);
    					tempSpawn.setRespawnDelay(FWA_ACTIVITYTIMEOFANTHARAS * 2);
    					SpawnTable.getInstance().addNewSpawn(tempSpawn, false);
    					// Do spawn.
    					_monsters.add(tempSpawn.doSpawn());
    				}
    			}
    			catch (Exception e)
    			{
    				_log.warning(e.getMessage());
    			}
    		}
    	}
    	
    	@Override
    	public String onAggroRangeEnter (L2NpcInstance npc, L2PcInstance player, boolean isPet)
    	{
    		switch (npc.getNpcId())
    		{
    			case 29070:
    			case 29071:
    			case 29072:
    			case 29073:
    			case 29074:
    			case 29075:
    			case 29076:
    				if (_selfDestructionTask == null && !npc.isDead())
    					_selfDestructionTask = ThreadPoolManager.getInstance().scheduleGeneral(new SelfDestructionOfBomber(npc), FWA_SELFDESTRUCTTIME);
    				break;
    		}
    		return super.onAggroRangeEnter(npc, player, isPet);
    	}
    	
    	// Do self destruction.
    	private class SelfDestructionOfBomber implements Runnable
    	{
    		private L2NpcInstance _bomber;
    		
    		public SelfDestructionOfBomber(L2NpcInstance bomber)
    		{
    			_bomber = bomber;
    		}
    		
    		@Override
    		public void run()
    		{
    			L2Skill skill = null;
    			switch (_bomber.getNpcId())
    			{
    				case 29070:
    				case 29071:
    				case 29072:
    				case 29073:
    				case 29074:
    				case 29075:
    					skill = SkillTable.getInstance().getInfo(5097, 1);
    					break;
    				case 29076:
    					skill = SkillTable.getInstance().getInfo(5094, 1);
    					break;
    			}
    			
    			_bomber.doCast(skill);
    			
    			if(_selfDestructionTask!=null){
    				_selfDestructionTask.cancel(false);
    				_selfDestructionTask = null;
    			}
    			
    		}
    	}
    	
    	@Override
    	public String onSpellFinished(L2NpcInstance npc, L2PcInstance player, L2Skill skill)
    	{
    		if (npc.isInvul())
    		{
    			return null;
    		}
    		else if (skill != null && (skill.getId() == 5097 || skill.getId() == 5094))
    		{
    			switch (npc.getNpcId())
    			{
    				case 29070:
    				case 29071:
    				case 29072:
    				case 29073:
    				case 29074:
    				case 29075:
    				case 29076:
    					npc.doDie(npc);
    					break;
    			}
    		}
    		return super.onSpellFinished(npc, player, skill);
    	}
    	
    	// At end of activity time.
    	protected class CheckActivity implements Runnable
    	{
    		@Override
    		public void run()
    		{
    			Long temp = (System.currentTimeMillis() - _LastAction);
    			if (temp > (Config.ANTHARAS_DESPAWN_TIME*60000))
    			{
    				GrandBossManager.getInstance().setBossStatus(_antharas.getNpcId(),DORMANT);
    				setUnspawn();
    			}
    		}
    	}
    	
    	// Clean Antharas's lair.
    	public void setUnspawn()
    	{
    		// Eliminate players.
    		_Zone.oustAllPlayers();
    		
    		// Not executed tasks is canceled.
    		if (_cubeSpawnTask != null)
    		{
    			_cubeSpawnTask.cancel(true);
    			_cubeSpawnTask = null;
    		}
    		if (_monsterSpawnTask != null)
    		{
    			_monsterSpawnTask.cancel(true);
    			_monsterSpawnTask = null;
    		}
    		if (_activityCheckTask != null)
    		{
    			_activityCheckTask.cancel(false);
    			_activityCheckTask = null;
    		}
    		if (_socialTask != null)
    		{
    			_socialTask.cancel(true);
    			_socialTask = null;
    		}
    		if (_mobiliseTask != null)
    		{
    			_mobiliseTask.cancel(true);
    			_mobiliseTask = null;
    		}
    		if (_mobsSpawnTask != null)
    		{
    			_mobsSpawnTask.cancel(true);
    			_mobsSpawnTask = null;
    		}
    		if (_selfDestructionTask != null)
    		{
    			_selfDestructionTask.cancel(true);
    			_selfDestructionTask = null;
    		}
    		if (_moveAtRandomTask != null)
    		{
    			_moveAtRandomTask.cancel(true);
    			_moveAtRandomTask = null;
    		}
    		
    		// Delete monsters.
    		for (L2NpcInstance mob : _monsters)
    		{
    			mob.getSpawn().stopRespawn();
    			mob.deleteMe();
    		}
    		_monsters.clear();
    		
    		// Delete teleport cube.
    		for (L2NpcInstance cube : _teleportCube)
    		{
    			cube.getSpawn().stopRespawn();
    			cube.deleteMe();
    		}
    		_teleportCube.clear();
    	}
    	
    	// Do spawn teleport cube.
    	private class CubeSpawn implements Runnable
    	{
    		private int _type;
    		
    		CubeSpawn(int type)
    		{
    			_type = type;
    		}
    		
    		@Override
    		public void run()
    		{
    			if (_type == 0)
    			{
    				spawnCube();
    				_cubeSpawnTask = ThreadPoolManager.getInstance().scheduleGeneral(new CubeSpawn(1), 1800000);
    			}
    			else
    				setUnspawn();
    		}
    	}
    	
    	// UnLock Antharas.
    	private static class UnlockAntharas implements Runnable
    	{
    		private int _bossId;
    		
    		public UnlockAntharas(int bossId)
    		{
    			_bossId = bossId;
    		}
    		
    		@Override
    		public void run()
    		{
    			GrandBossManager.getInstance().setBossStatus(_bossId,DORMANT);
    			if (FWA_DOSERVEREARTHQUAKE)
    				for(L2PcInstance p : L2World.getInstance().getAllPlayers())
    					p.broadcastPacket(new Earthquake(185708,114298,-8221,20,10));
    		}
    	}
    	
    	// Action is enabled the boss.
    	private class SetMobilised implements Runnable
    	{
    		private L2GrandBossInstance _boss;
    		
    		public SetMobilised(L2GrandBossInstance boss)
    		{
    			_boss = boss;
    		}
    		
    		@Override
    		public void run()
    		{
    			_boss.setIsImobilised(false);
    			
    			// When it is possible to act, a social action is canceled.
    			if (_socialTask != null)
    			{
    				_socialTask.cancel(true);
    				_socialTask = null;
    			}
    		}
    	}
    	
    	// Move at random on after Antharas appears.
    	private static class MoveAtRandom implements Runnable
    	{
    		private L2NpcInstance _npc;
    		private L2CharPosition _pos;
    		
    		public MoveAtRandom(L2NpcInstance npc, L2CharPosition pos)
    		{
    			_npc = npc;
    			_pos = pos;
    		}
    		
    		@Override
    		public void run()
    		{
    			_npc.getAI().setIntention(CtrlIntention.AI_INTENTION_MOVE_TO, _pos);
    		}
    	}
    	
    	@Override
    	public String onAttack (L2NpcInstance npc, L2PcInstance attacker, int damage, boolean isPet)
    	{
    		
    		if (npc.getSpawn()!=null && !npc.getSpawn().is_customBossInstance() && npc.getNpcId() == 29019 || npc.getNpcId() == 29066 || npc.getNpcId() == 29067 || npc.getNpcId() == 29068)
    		{
    			_LastAction = System.currentTimeMillis();
    			/*if (GrandBossManager.getInstance().getBossStatus(_antharas.getNpcId()) != FIGHTING)
    			{
    				_Zone.oustAllPlayers();
    			}
    			else */if (!FWA_OLDANTHARAS && _mobsSpawnTask == null)
    			{
    				startMinionSpawns(npc.getNpcId());
    			}
    		}
    		else if (npc.getNpcId() > 29069 && npc.getNpcId() < 29077 && npc.getCurrentHp() <= damage)
    		{
    			L2Skill skill = null;
    			switch (npc.getNpcId())
    			{
    				case 29070:
    				case 29071:
    				case 29072:
    				case 29073:
    				case 29074:
    				case 29075:
    					skill = SkillTable.getInstance().getInfo(5097, 1);
    					break;
    				case 29076:
    					skill = SkillTable.getInstance().getInfo(5094, 1);
    					break;
    			}
    			
    			npc.doCast(skill);
    		}
    		return super.onAttack(npc, attacker, damage, isPet);
    	}
    	
    	@Override
    	public String onKill (L2NpcInstance npc, L2PcInstance killer, boolean isPet)
    	{
    		if (npc.getNpcId() == 29019 || npc.getNpcId() == 29066 || npc.getNpcId() == 29067 || npc.getNpcId() == 29068)
    		{
    			npc.broadcastPacket(new PlaySound(1, "BS01_D", 1, npc.getObjectId(), npc.getX(), npc.getY(), npc.getZ()));
    			
    			if(!npc.getSpawn().is_customBossInstance()){
    				_cubeSpawnTask = ThreadPoolManager.getInstance().scheduleGeneral(new CubeSpawn(0), 10000);
    				GrandBossManager.getInstance().setBossStatus(npc.getNpcId(),DEAD);
    				long respawnTime = (Config.ANTHARAS_RESP_FIRST + Rnd.get(Config.ANTHARAS_RESP_SECOND)) * 3600000;
    				ThreadPoolManager.getInstance().scheduleGeneral(new UnlockAntharas(npc.getNpcId()), respawnTime);
    				// also save the respawn time so that the info is maintained past reboots
    				StatsSet info = GrandBossManager.getInstance().getStatsSet(npc.getNpcId());
    				info.set("respawn_time",(System.currentTimeMillis() + respawnTime));
    				GrandBossManager.getInstance().setStatsSet(npc.getNpcId(),info);
    			}
    			
    		}
    		else if (npc.getNpcId() == 29069)
    		{
    			int countHPHerb = Rnd.get(6, 18);
    			int countMPHerb = Rnd.get(6, 18);
    			for (int i = 0; i < countHPHerb; i++)
    				((L2MonsterInstance)npc).DropItem(killer, 8602, 1);
    			for (int i = 0; i < countMPHerb; i++)
    				((L2MonsterInstance)npc).DropItem(killer, 8605, 1);
    		}
    		if (_monsters.contains(npc))
    			_monsters.remove(npc);
    		return super.onKill(npc,killer,isPet);
    	}
    	
    	@Override
    	public void run()
    	{}
    }
    18 Rugpjūčio 2013 - 16:15 / #1
  2. 
  3. Atsijungęs

    EsTriFee

    Pranešimai: 0

    neina is spawnlist istrinti? arba jei quest kviecia tai questa isjunk scripts.cfg uzdek # kad nekrautu
    18 Rugpjūčio 2013 - 22:15 / #2
  4. 
  5. Atsijungęs

    gerardas

    Pranešimai: 0

    Per scriptus neina isjungt, o per spawnlista nereguoja :D
    18 Rugpjūčio 2013 - 22:54 / #3
  6. 
  7. Atsijungęs

    wewewe

    Pavadinimas: L2 žaidėjas

    Narys

    Pranešimai: 727

    Vartotojo apdovanojimai: 16

    taip nebuna
    19 Rugpjūčio 2013 - 00:08 / #4
  8. 
  9. Atsijungęs

    gerardas

    Pranešimai: 0

    Spawnlistas visas istrintas.. Jei istrinsiu Grandboss data mes errora. Scriptuose nera antharo.
    19 Rugpjūčio 2013 - 12:44 / #5
  10. 
  11. Atsijungęs

    EsTriFee

    Pranešimai: 0

    Jo ir neturi but bet turi but Questas kuris isspawnina ji .. tau ji ir riek isjungti
    19 Rugpjūčio 2013 - 17:39 / #6
  12. 
  13. Atsijungęs

    gerardas

    Pranešimai: 0

    Viskas butu greiciau per java isjungt... dabar tarp tu questu ieskot tai nezinau :D jau geriau pameginsiu isjungt per java
    19 Rugpjūčio 2013 - 18:09 / #7
  14. 
  15. Atsijungęs

    EsTriFee

    Pranešimai: 0

    scripts.cfg

    ai/individual/Antharas.java ->>> #ai/individual/Antharas.java

    su 1 search atradau...
    Paskutinį kartą redagavo: EsTriFee 19 Rugpjūčio 2013 - 20:23
    19 Rugpjūčio 2013 - 20:23 / #8
  16. 
  17. Atsijungęs

    gerardas

    Pranešimai: 0

    Pas mane ne aCis

    # individual ai
    ai/individual/typo.py
    ai/individual/benom.py
    ai/individual/drchaos.py
    ai/individual/gustav.py
    ai/individual/icequeen.py
    ai/individual/nurka.py
    ai/individual/sailren.py
    
    # group_template ai
    ai/group_template/typo.py
    ai/group_template/ancientegg.py
    ai/group_template/evabox.py
    ai/group_template/cats_eye_bandit.py
    ai/group_template/chests.py
    ai/group_template/delu_lizardman_special_agent.py
    ai/group_template/delu_lizardman_special_commander.py
    ai/group_template/feedable_beasts.py
    ai/group_template/karul_bugbear.py
    ai/group_template/ol_mahum_general.py
    ai/group_template/retreat_onattack.py
    ai/group_template/scarlet_stokate_noble.py
    ai/group_template/splendor.py
    # ai/group_template/squash.py
    ai/group_template/timak_orc_overlord.py
    ai/group_template/timak_orc_troop_leader.py
    ai/group_template/turek_orc_footman.py
    ai/group_template/turek_orc_supplier.py
    ai/group_template/turek_orc_warlord.py
    
    # custom
    custom/3995_echo/__init__.py
    #custom/4000_ShadowWeapons/__init__.py
    custom/5000_MissQueen/__init__.py
    #custom/5001_NewbieCoupons/__init__.py
    custom/8003_MeetBaium/__init__.py
    custom/6050_KetraOrcSupport/__init__.py
    custom/6051_VarkaSilenosSupport/__init__.py
    custom/6999_HeroCirclet/__init__.py
    custom/7000_HeroItems/__init__.py
    custom/8000_RaidbossInfo/__init__.py
    custom/8001_NpcLocationInfo/__init__.py
    custom/8009_HotSpringsBuffs/__init__.py
    custom/8871_gve/__init__.py
    custom/6666_NoblessTrader/__init__.py
    custom/6667_ClanManager/__init__.py
    
    # quests
    
    # Teleports
    teleports/1100_teleport_with_charm/__init__.py
    teleports/1101_teleport_to_race_track/__init__.py
    teleports/1102_toivortex_blue/__init__.py
    teleports/1102_toivortex_green/__init__.py
    teleports/1102_toivortex_red/__init__.py
    teleports/1103_OracleTeleport/__init__.py
    teleports/1104_NewbieTravelToken/__init__.py
    teleports/1630_PaganTeleporters/__init__.py
    teleports/2000_NoblesseTeleport/__init__.py
    teleports/2211_HuntingGroundsTeleport/__init__.py
    teleports/2400_toivortex_exit/__init__.py
    teleports/6000_GrandBossTeleporters/__init__.py
    teleports/6111_ElrokiTeleporters/__init__.py
    
    # Village Master
    village_master/9000_clan/__init__.py
    village_master/9001_alliance/__init__.py
    village_master/30026_bitz_occupation_change/__init__.py
    village_master/30031_biotin_occupation_change/__init__.py
    village_master/30109_hannavalt_occupation_change/__init__.py
    village_master/30154_asterios_occupation_change/__init__.py
    village_master/30358_thifiell_occupation_change/__init__.py
    village_master/30520_reed_occupation_change/__init__.py
    village_master/30525_bronk_occupation_change/__init__.py
    village_master/30565_kakai_occupation_change/__init__.py
    village_master/dark_elven_change_1/__init__.py
    village_master/dark_elven_change_2/__init__.py
    village_master/dwarven_occupation_change/__init__.py
    village_master/elven_human_buffers_2/__init__.py
    village_master/elven_human_fighters_1/__init__.py
    village_master/elven_human_fighters_2/__init__.py
    village_master/elven_human_mystics_1/__init__.py
    village_master/elven_human_mystics_2/__init__.py
    village_master/orc_occupation_change_1/__init__.py
    village_master/orc_occupation_change_2/__init__.py
    Paskutinį kartą redagavo: gerardas 19 Rugpjūčio 2013 - 20:41
    19 Rugpjūčio 2013 - 20:40 / #9