Sailren.java

Support for the latest build of L2J Server, get help here with installations, upgrades, problems.
Do not post bugs reports here, use viewforum.php?f=77 instead.
There is no support for other server builds than the official provided by l2jserver.com
Forum rules
READ NOW: L2j Forums Rules of Conduct
Post Reply
Onepamopa
Posts: 113
Joined: Thu Jan 14, 2010 6:35 pm
Contact:

Sailren.java

Post by Onepamopa »

» Find Revision
L2J Revision last:
L2JDP Revision last:

Here's sailren.java, I got it from some brasilian l2j based svn, so credits go there.
Please test, check if it's retail like and if u like it - commit.
I havent tested it yet, but It's 2 months old so, I guess it's better than the .py's some of us are using :)
HUH, just saw that it's for gracia final, so it needs some rework.

Code: Select all

 /* * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. * * http://www.gnu.org/copyleft/gpl.html */package ai.individual; import ai.group_template.L2AttackableAIScript;import java.util.logging.Logger;import java.util.concurrent.ScheduledFuture;import java.util.Calendar;import java.util.Date;import java.util.List;import javolution.util.FastList; import net.sf.l2j.ExternalConfig;import net.sf.l2j.gameserver.ThreadPoolManager;import net.sf.l2j.gameserver.ai.CtrlIntention;import net.sf.l2j.gameserver.datatables.NpcTable;import net.sf.l2j.gameserver.datatables.SpawnTable;import net.sf.l2j.gameserver.instancemanager.GrandBossManager;import net.sf.l2j.gameserver.model.L2Spawn;import net.sf.l2j.gameserver.model.L2CharPosition;import net.sf.l2j.gameserver.model.actor.instance.L2NpcInstance;import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;import net.sf.l2j.gameserver.network.serverpackets.SocialAction;import net.sf.l2j.gameserver.templates.L2NpcTemplate;import net.sf.l2j.gameserver.templates.StatsSet;import net.sf.l2j.gameserver.util.Util;import net.sf.l2j.util.Rnd; /** * @author SANDMAN * adapted by Maxi */public class Sailren extends L2AttackableAIScript{    protected static Logger _log = Logger.getLogger(Sailren.class.getName());     private final int _SailrenCubeLocation[][] =    	{    		{27734,-6838,-1982,0}    	};     protected List<L2Spawn> _SailrenCubeSpawn = new FastList<L2Spawn>();    protected List<L2NpcInstance> _SailrenCube = new FastList<L2NpcInstance>();     protected List<L2PcInstance> _PlayersInSailrenLair = new FastList<L2PcInstance>();     protected L2Spawn _VelociraptorSpawn;    protected L2Spawn _PterosaurSpawn;    protected L2Spawn _TyrannoSpawn;    protected L2Spawn _SailrenSapwn;     protected L2NpcInstance _Velociraptor;    protected L2NpcInstance _Pterosaur;    protected L2NpcInstance _Tyranno;    protected L2NpcInstance _Sailren;     protected ScheduledFuture<?> _CubeSpawnTask = null;    protected ScheduledFuture<?> _SailrenSpawnTask = null;    protected ScheduledFuture<?> _IntervalEndTask = null;    protected ScheduledFuture<?> _ActivityTimeEndTask = null;    protected ScheduledFuture<?> _OnPartyAnnihilatedTask = null;    protected ScheduledFuture<?> _SocialTask = null;     protected String _ZoneType;    protected String _QuestName;    protected boolean _IsAlreadyEnteredOtherParty = false;    protected StatsSet _StateSet;    protected int _Alive;    protected int _BossId = 29065; 	private final int GAZKH = 8784; 	public static final int NOTSPAWN = 0;	public static final int ALIVE = 1;	public static final int DEAD = 2;	public static final int INTERVAL = 3;     public Sailren(int id,String name,String descr)    {        super(id,name,descr);        int[] mobs = {22218,22199,22217,29065,32107,32109};        this.registerMobs(mobs);	addStartNpc(32109);	addTalkId(32109);     	_PlayersInSailrenLair.clear();    	_IsAlreadyEnteredOtherParty = false;        _ZoneType = "Lair of Sailren";        _QuestName = "sailren";        _StateSet = GrandBossManager.getInstance().getStatsSet(_BossId);        _Alive = GrandBossManager.getInstance().getBossStatus(_BossId);         try        {            L2NpcTemplate template1;             template1 = NpcTable.getInstance().getTemplate(22218); //Velociraptor            _VelociraptorSpawn = new L2Spawn(template1);            _VelociraptorSpawn.setLocx(27852);            _VelociraptorSpawn.setLocy(-5536);            _VelociraptorSpawn.setLocz(-1983);            _VelociraptorSpawn.setHeading(44732);            _VelociraptorSpawn.setAmount(1);            _VelociraptorSpawn.setRespawnDelay(ExternalConfig.FWS_ACTIVITYTIMEOFMOBS * 2);            SpawnTable.getInstance().addNewSpawn(_VelociraptorSpawn, false);             template1 = NpcTable.getInstance().getTemplate(22199); //Pterosaur            _PterosaurSpawn = new L2Spawn(template1);            _PterosaurSpawn.setLocx(27852);            _PterosaurSpawn.setLocy(-5536);            _PterosaurSpawn.setLocz(-1983);            _PterosaurSpawn.setHeading(44732);            _PterosaurSpawn.setAmount(1);            _PterosaurSpawn.setRespawnDelay(ExternalConfig.FWS_ACTIVITYTIMEOFMOBS * 2);            SpawnTable.getInstance().addNewSpawn(_PterosaurSpawn, false);             template1 = NpcTable.getInstance().getTemplate(22217); //Tyrannosaurus            _TyrannoSpawn = new L2Spawn(template1);            _TyrannoSpawn.setLocx(27852);            _TyrannoSpawn.setLocy(-5536);            _TyrannoSpawn.setLocz(-1983);            _TyrannoSpawn.setHeading(44732);            _TyrannoSpawn.setAmount(1);            _TyrannoSpawn.setRespawnDelay(ExternalConfig.FWS_ACTIVITYTIMEOFMOBS * 2);            SpawnTable.getInstance().addNewSpawn(_TyrannoSpawn, false);             template1 = NpcTable.getInstance().getTemplate(29065); //Sailren            _SailrenSapwn = new L2Spawn(template1);            _SailrenSapwn.setLocx(27810);            _SailrenSapwn.setLocy(-5655);            _SailrenSapwn.setLocz(-1983);            _SailrenSapwn.setHeading(44732);            _SailrenSapwn.setAmount(1);            _SailrenSapwn.setRespawnDelay(ExternalConfig.FWS_ACTIVITYTIMEOFMOBS * 2);            SpawnTable.getInstance().addNewSpawn(_SailrenSapwn, false);         }        catch (Exception e)        {            _log.warning(e.getMessage());        }         try        {            L2NpcTemplate Cube = NpcTable.getInstance().getTemplate(32107);            L2Spawn spawnDat;             for(int i = 0;i < _SailrenCubeLocation.length; i++)            {                spawnDat = new L2Spawn(Cube);                spawnDat.setAmount(1);                spawnDat.setLocx(_SailrenCubeLocation[i][0]);                spawnDat.setLocy(_SailrenCubeLocation[i][1]);                spawnDat.setLocz(_SailrenCubeLocation[i][2]);                spawnDat.setHeading(_SailrenCubeLocation[i][3]);                spawnDat.setRespawnDelay(60);                spawnDat.setLocation(0);                SpawnTable.getInstance().addNewSpawn(spawnDat, false);                _SailrenCubeSpawn.add(spawnDat);            }        }        catch (Exception e)        {            _log.warning(e.getMessage());        }         _log.info("Sailren : State of Sailren is " + _Alive + ".");        if (_Alive != NOTSPAWN)        	setInetrvalEndTask(); 		Date dt = new Date(_StateSet.getLong("respawn_time"));        _log.info("Sailren : Next spawn date of Sailren is " + dt + ".");        _log.info("Sailren : Init Sailren.");     }     public List<L2PcInstance> getPlayersInLair()	{		return _PlayersInSailrenLair;	}     public int canIntoSailrenLair(L2PcInstance pc)    {    	if ((ExternalConfig.FWS_ENABLESINGLEPLAYER == false) && (pc.getParty() == null)) return 4;    	else if (_IsAlreadyEnteredOtherParty) return 2;    	else if (_Alive == NOTSPAWN) return 0;    	else if (_Alive == ALIVE || _Alive != DEAD) return 1;    	else if (_Alive == INTERVAL) return 3;    	else return 0;    }     public void setSailrenSpawnTask(int NpcId)    {    	if ((NpcId == 22218) && (_PlayersInSailrenLair.size() >= 1)) return;     	if (_SailrenSpawnTask == null)        {        	_SailrenSpawnTask = ThreadPoolManager.getInstance().scheduleGeneral(            		new SailrenSpawn(NpcId),ExternalConfig.FWS_INTERVALOFNEXTMONSTER);        }    }     public void addPlayerToSailrenLair(L2PcInstance pc)    {        if (!_PlayersInSailrenLair.contains(pc)) _PlayersInSailrenLair.add(pc);    }     public void entryToSailrenLair(L2PcInstance pc)    {		int driftx;		int drifty; 		if(canIntoSailrenLair(pc) != 0)		{			pc.sendMessage("...");			_IsAlreadyEnteredOtherParty = false;			return;		} 		if(pc.getParty() == null)		{			driftx = Rnd.get(-80, 80);			drifty = Rnd.get(-80, 80);			pc.teleToLocation(27734 + driftx,-6938 + drifty,-1982);			addPlayerToSailrenLair(pc);		}		else		{			List<L2PcInstance> members = new FastList<L2PcInstance>();			for (L2PcInstance mem : pc.getParty().getPartyMembers())			{				if (!mem.isDead() && Util.checkIfInRange(700, pc, mem, true))				{					members.add(mem);				}			}			for (L2PcInstance mem : members)			{				driftx = Rnd.get(-80, 80);				drifty = Rnd.get(-80, 80);				mem.teleToLocation(27734 + driftx,-6938 + drifty,-1982);				addPlayerToSailrenLair(mem);			}		}		_IsAlreadyEnteredOtherParty = true;    }     public void checkAnnihilated(L2PcInstance pc)    {    	if(isPartyAnnihilated(pc))    	{    		_OnPartyAnnihilatedTask =				ThreadPoolManager.getInstance().scheduleGeneral(new OnPartyAnnihilatedTask(pc),5000);    	}    }     public synchronized boolean isPartyAnnihilated(L2PcInstance pc)    {		if(pc.getParty() != null)		{			for(L2PcInstance mem:pc.getParty().getPartyMembers())			{				if(!mem.isDead() && GrandBossManager.getInstance().checkIfInZone("Lair of Sailren", pc))				{					return false;				}			}			return true;		}		else		{			return true;		}    }     public void banishesPlayers()    {    	for(L2PcInstance pc : _PlayersInSailrenLair)    	{    		if(pc.getQuestState("sailren") != null) pc.getQuestState("sailren").exitQuest(true);    		if(GrandBossManager.getInstance().checkIfInZone("Lair of Sailren", pc))    		{        		int driftX = Rnd.get(-80,80);        		int driftY = Rnd.get(-80,80);        		pc.teleToLocation(10468 + driftX,-24569 + driftY,-3650);    		}    	}    	_PlayersInSailrenLair.clear();    	_IsAlreadyEnteredOtherParty = false;    }     public void setUnspawn()	{    	banishesPlayers(); 		for (L2NpcInstance cube : _SailrenCube)		{			cube.getSpawn().stopRespawn();			cube.deleteMe();		}		_SailrenCube.clear(); 		if(_CubeSpawnTask != null)		{			_CubeSpawnTask.cancel(true);			_CubeSpawnTask = null;		}		if(_SailrenSpawnTask != null)		{			_SailrenSpawnTask.cancel(true);			_SailrenSpawnTask = null;		}		if(_IntervalEndTask != null)		{			_IntervalEndTask.cancel(true);			_IntervalEndTask = null;		}		if(_ActivityTimeEndTask != null)		{			_ActivityTimeEndTask.cancel(true);			_ActivityTimeEndTask = null;		} 		_Velociraptor = null;		_Pterosaur = null;		_Tyranno = null;		_Sailren = null; 		setInetrvalEndTask();	}     public void spawnCube()    {		for (L2Spawn spawnDat : _SailrenCubeSpawn)		{			_SailrenCube.add(spawnDat.doSpawn());		}    }     public void setCubeSpawn()    {    	_Alive = DEAD;    	_StateSet.set("respawn_time", Calendar.getInstance().getTimeInMillis() + Rnd.get(ExternalConfig.FWS_FIXINTERVALOFSAILRENSPAWN,ExternalConfig.FWS_FIXINTERVALOFSAILRENSPAWN + ExternalConfig.FWS_RANDOMINTERVALOFSAILRENSPAWN));    	GrandBossManager.getInstance().setBossStatus(_BossId, _Alive);    	GrandBossManager.getInstance().setStatsSet(_BossId, _StateSet);     	_CubeSpawnTask = ThreadPoolManager.getInstance().scheduleGeneral(new CubeSpawn(),10000);     	Date dt = new Date(_StateSet.getLong("respawn_time"));        _log.info("Sailren : Sailren is dead.");        _log.info("Sailren : Next spawn date of Sailren is " + dt + ".");    }     public void setInetrvalEndTask()    {    	if (_Alive != INTERVAL)    	{        	_Alive = INTERVAL;        	GrandBossManager.getInstance().setBossStatus(_BossId, _Alive);    	}     	_IntervalEndTask = ThreadPoolManager.getInstance().scheduleGeneral(new IntervalEnd(),GrandBossManager.getInstance().getInterval(_BossId));    	_log.info("Sailren : Interval START.");    }     // update knownlist.    protected void updateKnownList(L2NpcInstance boss)    {    	boss.getKnownList().getKnownPlayers().clear();		for (L2PcInstance pc : _PlayersInSailrenLair)		{			boss.getKnownList().getKnownPlayers().put(pc.getObjectId(), pc);		}    }     private class SailrenSpawn implements Runnable    {    	int _NpcId;    	L2CharPosition _pos = new L2CharPosition(27628,-6109,-1982,44732);    	public SailrenSpawn(int NpcId)    	{    		_NpcId = NpcId;    	}         public void run()        {        	switch (_NpcId)            {            	case 22218:            		_Velociraptor = _VelociraptorSpawn.doSpawn();            		_Velociraptor.getAI().setIntention(CtrlIntention.AI_INTENTION_MOVE_TO,_pos);            		if(_SocialTask != null)            		{            			_SocialTask.cancel(true);            			_SocialTask = null;            		}            		_SocialTask =                        ThreadPoolManager.getInstance().scheduleGeneral(                        		new Social(_Velociraptor,2),6000);            		if(_ActivityTimeEndTask != null)            		{            			_ActivityTimeEndTask.cancel(true);            			_ActivityTimeEndTask = null;            		}            		_ActivityTimeEndTask =                        ThreadPoolManager.getInstance().scheduleGeneral(                        		new ActivityTimeEnd(_Velociraptor),ExternalConfig.FWS_ACTIVITYTIMEOFMOBS);            		break;            	case 22199:            		_VelociraptorSpawn.stopRespawn();            		_Pterosaur = _PterosaurSpawn.doSpawn();            		_Pterosaur.getAI().setIntention(CtrlIntention.AI_INTENTION_MOVE_TO,_pos);            		if(_SocialTask != null)            		{            			_SocialTask.cancel(true);            			_SocialTask = null;            		}            		_SocialTask =                        ThreadPoolManager.getInstance().scheduleGeneral(                        		new Social(_Pterosaur,2),6000);            		if(_ActivityTimeEndTask != null)            		{            			_ActivityTimeEndTask.cancel(true);            			_ActivityTimeEndTask = null;            		}            		_ActivityTimeEndTask =                        ThreadPoolManager.getInstance().scheduleGeneral(                        		new ActivityTimeEnd(_Pterosaur),ExternalConfig.FWS_ACTIVITYTIMEOFMOBS);            		break;            	case 22217:            		_PterosaurSpawn.stopRespawn();            		_Tyranno = _TyrannoSpawn.doSpawn();            		_Tyranno.getAI().setIntention(CtrlIntention.AI_INTENTION_MOVE_TO,_pos);            		if(_SocialTask != null)            		{            			_SocialTask.cancel(true);            			_SocialTask = null;            		}            		_SocialTask =                        ThreadPoolManager.getInstance().scheduleGeneral(                        		new Social(_Tyranno,2),6000);            		if(_ActivityTimeEndTask != null)            		{            			_ActivityTimeEndTask.cancel(true);            			_ActivityTimeEndTask = null;            		}            		_ActivityTimeEndTask =                        ThreadPoolManager.getInstance().scheduleGeneral(                        		new ActivityTimeEnd(_Tyranno),ExternalConfig.FWS_ACTIVITYTIMEOFMOBS);            		break;            	case 29065:            		_TyrannoSpawn.stopRespawn();            		_Sailren = _SailrenSapwn.doSpawn(); 	            	_StateSet.set("respawn_time", Calendar.getInstance().getTimeInMillis() + Rnd.get(ExternalConfig.FWS_FIXINTERVALOFSAILRENSPAWN,ExternalConfig.FWS_FIXINTERVALOFSAILRENSPAWN + ExternalConfig.FWS_RANDOMINTERVALOFSAILRENSPAWN) + ExternalConfig.FWS_ACTIVITYTIMEOFMOBS);	            	_Alive = ALIVE;	            	GrandBossManager.getInstance().setBossStatus(_BossId, _Alive);	            	GrandBossManager.getInstance().setStatsSet(_BossId, _StateSet);	            	_log.info("Sailren : Spawn Sailren.");             		_Sailren.getAI().setIntention(CtrlIntention.AI_INTENTION_MOVE_TO,_pos);            		if(_SocialTask != null)            		{            			_SocialTask.cancel(true);            			_SocialTask = null;            		}            		_SocialTask =                        ThreadPoolManager.getInstance().scheduleGeneral(                        		new Social(_Sailren,2),6000);            		if(_ActivityTimeEndTask != null)            		{            			_ActivityTimeEndTask.cancel(true);            			_ActivityTimeEndTask = null;            		}            		_ActivityTimeEndTask =                        ThreadPoolManager.getInstance().scheduleGeneral(                        		new ActivityTimeEnd(_Sailren),ExternalConfig.FWS_ACTIVITYTIMEOFMOBS);            		break;            	default:            		break;            }             if(_SailrenSpawnTask != null)            {            	_SailrenSpawnTask.cancel(true);            	_SailrenSpawnTask = null;            }        }    }     private class CubeSpawn implements Runnable    {    	public CubeSpawn()    	{    	}         public void run()        {        	spawnCube();        }    }     private class ActivityTimeEnd implements Runnable    {    	L2NpcInstance _Mob;    	public ActivityTimeEnd(L2NpcInstance npc)    	{    		_Mob = npc;    	}     	public void run()    	{    		if(!_Mob.isDead())    		{    			_Mob.deleteMe();    			_Mob.getSpawn().stopRespawn();    			_Mob = null;    		}    		setUnspawn();    	}    }     private class IntervalEnd implements Runnable    {    	public IntervalEnd()    	{    	}     	public void run()    	{    		doIntervalEnd();    	}    }     protected void doIntervalEnd()    {		_PlayersInSailrenLair.clear();    	_Alive = NOTSPAWN;    	GrandBossManager.getInstance().setBossStatus(_BossId, _Alive);    	_log.info("Sailren : Interval END.");    } 	private class OnPartyAnnihilatedTask implements Runnable	{		L2PcInstance _player; 		public OnPartyAnnihilatedTask(L2PcInstance player)		{			_player = player;		} 		public void run()		{			setUnspawn();		}	}     private class Social implements Runnable    {        private int _action;        private L2NpcInstance _npc;         public Social(L2NpcInstance npc,int actionId)        {        	_npc = npc;            _action = actionId;        }         public void run()        {         	updateKnownList(_npc);     		SocialAction sa = new SocialAction(_npc.getObjectId(), _action);            _npc.broadcastPacket(sa);        }    } 	/**	 * 1) The sailren is very powerful now. It is not possible to enter the inside.	 * 2) Another adventurers have already fought against the sailren. Do not obstruct them.	 * 3) is necessary for seal the sailren.	 * 4) Please seal the sailren by your ability.	 * 5) You may not enter while flying a wyvern	 */ 	public String onTalk (L2NpcInstance npc, L2PcInstance player)	{	String htmltext = "";	if (GrandBossManager.getInstance().getBossStatus(_BossId) == NOTSPAWN || GrandBossManager.getInstance().getBossStatus(_BossId) == ALIVE)		{			if (player.isFlying())			{				htmltext = "<html><body>Shilen's Stone Statue:<br>You may not enter while flying a wyvern</body></html>";			}			else if (player.getQuestState("sailren").getQuestItemsCount(GAZKH) > 0)			{				player.getQuestState("sailren").takeItems(GAZKH,1);				player.teleToLocation(27734 + Rnd.get(-80, 80),-6938 + Rnd.get(-80, 80),-1982);          			setSailrenSpawnTask(22218);          			entryToSailrenLair(player);				htmltext = "";				if (GrandBossManager.getInstance().getBossStatus(_BossId) == NOTSPAWN)				{					GrandBossManager.getInstance().setBossStatus(_BossId,ALIVE);				}			}			else				htmltext = "<html><body>Shilen's Stone Statue:<br><font color=LEVEL>Gazkh</font> is necessary for seal the sailren.</body></html>";		}	else if (GrandBossManager.getInstance().getBossStatus(_BossId) == INTERVAL)		htmltext = "<html><body>Shilen's Stone Statue:<br><font color=\"LEVEL\">Another adventurers have already fought against the sailren. Do not obstruct them.</font></body></html>";	else		htmltext = "<html><body>Shilen's Stone Statue:<br><font color=\"LEVEL\">Please seal the sailren by your ability.</font></body></html>";	return htmltext;	}		//canIntoSailrenLair(player);     public String onKill (L2NpcInstance npc, L2PcInstance killer, boolean isPet)    {    	int npcId = npc.getNpcId();    	if (npcId == 22218)    	{    		setSailrenSpawnTask(22199);    	}    	else if (npcId == 22199)    	{    		setSailrenSpawnTask(22217);    	}    	else if (npcId == 22217)    	{    		setSailrenSpawnTask(29065);    	}    	else if (npcId == 29065)    	{    		setCubeSpawn();    	}        return super.onKill(npc,killer,isPet);    }     public static void main(String[] args)    {    	// now call the constructor (starts up the ai)    	new Sailren(-1,"sailren","ai");    }} 
----------------------------------------------------
ICQ: 287731217
Skype: d.i.dobrev
IRC: Onepamopa
----------------------------------------------------
Post Reply