/* * 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 net.sf.l2j.gameserver.model.actor.instance; import net.sf.l2j.Config; import net.sf.l2j.gameserver.ThreadPoolManager; import net.sf.l2j.gameserver.instancemanager.CastleManager; import net.sf.l2j.gameserver.instancemanager.L2JOneoCustomManager; import net.sf.l2j.gameserver.instancemanager.SiegeManager; import net.sf.l2j.gameserver.model.L2Character; import net.sf.l2j.gameserver.model.L2Clan; import net.sf.l2j.gameserver.model.L2Spawn; import net.sf.l2j.gameserver.model.entity.Castle; import net.sf.l2j.gameserver.templates.L2NpcTemplate; import net.sf.l2j.util.Rnd; /** * * @Author DaRkRaGe [L2JOneo] */ public final class L2JOneoCustomInstance extends L2MonsterInstance { private static final int RAIDBOSS_MAINTENANCE_INTERVAL = 30000; // 30 sec private L2JOneoCustomManager.StatusEnum _raidStatus; /** * Constructor of L2JOneoCostumInstance (use L2Character and L2NpcInstance constructor).

*/ public L2JOneoCustomInstance(int objectId, L2NpcTemplate template) { super(objectId, template); } @Override public boolean isRaid() { return true; } @Override protected int getMaintenanceInterval() { return RAIDBOSS_MAINTENANCE_INTERVAL; } @Override public void doDie(L2Character killer) { if (killer instanceof L2PlayableInstance && (killer instanceof L2MinionInstance) && (killer instanceof L2PcInstance)) { L2PcInstance player = null; { player = (L2PcInstance) killer; } boolean Siege = SiegeManager.getInstance().checkIfInZone(this); Castle castle = CastleManager.getInstance().getCastle(this); L2Clan clan = player.getClan(); if (player.getClan() != null) player.sendMessage("You need a clan for this Siege"); else if (Siege == true && Config.ENABLE_FACTION_KOOFS_NOOBS) { castle.getCastleId(); castle.setOwner(clan); } L2JOneoCustomManager.getInstance().updateStatus(this, true); super.doDie(killer); } } /** * Spawn all minions at a regular interval * Also if boss is too far from home location at the time of this check, teleport it home * */ @Override protected void manageMinions() { _minionList.spawnMinions(); _minionMaintainTask = ThreadPoolManager.getInstance().scheduleGeneralAtFixedRate(new Runnable() { public void run() { // teleport raid boss home if it's too far from home location L2Spawn bossSpawn = getSpawn(); if(!isInsideRadius(bossSpawn.getLocx(),bossSpawn.getLocy(),bossSpawn.getLocz(), 5000, true, false)) { teleToLocation(bossSpawn.getLocx(),bossSpawn.getLocy(),bossSpawn.getLocz(), true); healFull(); // prevents minor exploiting with it } _minionList.maintainMinions(); } }, 60000, getMaintenanceInterval()+Rnd.get(5000)); } public void setRaidStatus (L2JOneoCustomManager.StatusEnum status) { _raidStatus = status; } public L2JOneoCustomManager.StatusEnum getRaidStatus() { return _raidStatus; } /** * Reduce the current HP of the L2Attackable, update its _aggroList and launch the doDie Task if necessary.

* */ @Override public void reduceCurrentHp(double damage, L2Character attacker, boolean awake) { super.reduceCurrentHp(damage, attacker, awake); } public void healFull() { super.setCurrentHp(super.getMaxHp()); super.setCurrentMp(super.getMaxMp()); } }