/*
* 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 silentium.gameserver.model.actor.instance;
import silentium.commons.utils.Rnd;
import silentium.gameserver.instancemanager.RaidBossPointsManager;
import silentium.gameserver.model.actor.L2Character;
import silentium.gameserver.model.entity.Hero;
import silentium.gameserver.network.SystemMessageId;
import silentium.gameserver.network.serverpackets.PlaySound;
import silentium.gameserver.network.serverpackets.SystemMessage;
import silentium.gameserver.templates.chars.L2NpcTemplate;
/**
* This class manages all Grand Bosses.
*/
public final class L2GrandBossInstance extends L2MonsterInstance
{
private static final int BOSS_MAINTENANCE_INTERVAL = 10000;
/**
* Constructor for L2GrandBossInstance. This represent all grandbosses.
*
* @param objectId
* ID of the instance
* @param template
* L2NpcTemplate of the instance
*/
public L2GrandBossInstance(int objectId, L2NpcTemplate template)
{
super(objectId, template);
setIsRaid(true);
}
@Override
protected int getMaintenanceInterval()
{
return BOSS_MAINTENANCE_INTERVAL;
}
@Override
public void onSpawn()
{
setIsNoRndWalk(true);
super.onSpawn();
}
/**
* @see silentium.gameserver.model.actor.instance.L2MonsterInstance#doDie(silentium.gameserver.model.actor.L2Character)
*/
@Override
public boolean doDie(L2Character killer)
{
if (!super.doDie(killer))
return false;
final L2PcInstance player = killer.getActingPlayer();
if (player != null)
{
broadcastPacket(SystemMessage.getSystemMessage(SystemMessageId.RAID_WAS_SUCCESSFUL));
broadcastPacket(new PlaySound("systemmsg_e.1209"));
if (player.isInParty())
{
for (L2PcInstance member : player.getParty().getPartyMembers())
{
RaidBossPointsManager.getInstance().addPoints(member, getNpcId(), (getLevel() / 2) + Rnd.get(-5, 5));
if (member.isNoble())
Hero.getInstance().setRBkilled(member.getObjectId(), getNpcId());
}
}
else
{
RaidBossPointsManager.getInstance().addPoints(player, getNpcId(), (getLevel() / 2) + Rnd.get(-5, 5));
if (player.isNoble())
Hero.getInstance().setRBkilled(player.getObjectId(), getNpcId());
}
}
return true;
}
}