Various Krofin instance updates.
Contributed by CostyKiller.
This commit is contained in:
@@ -22,8 +22,9 @@
|
|||||||
<condition type="GroupMax">
|
<condition type="GroupMax">
|
||||||
<param name="limit" value="7" />
|
<param name="limit" value="7" />
|
||||||
</condition>
|
</condition>
|
||||||
<condition type="Level">
|
<condition type="Level" showMessageAndHtml="true">
|
||||||
<param name="min" value="105" />
|
<param name="min" value="105" />
|
||||||
|
<param name="html" value="condNoLevel.html" />
|
||||||
</condition>
|
</condition>
|
||||||
<condition type="Distance" />
|
<condition type="Distance" />
|
||||||
</conditions>
|
</conditions>
|
||||||
|
@@ -28,6 +28,7 @@ import org.l2jmobius.gameserver.model.instancezone.Instance;
|
|||||||
import org.l2jmobius.gameserver.network.NpcStringId;
|
import org.l2jmobius.gameserver.network.NpcStringId;
|
||||||
import org.l2jmobius.gameserver.network.SystemMessageId;
|
import org.l2jmobius.gameserver.network.SystemMessageId;
|
||||||
import org.l2jmobius.gameserver.network.serverpackets.ExShowScreenMessage;
|
import org.l2jmobius.gameserver.network.serverpackets.ExShowScreenMessage;
|
||||||
|
import org.l2jmobius.gameserver.network.serverpackets.OnEventTrigger;
|
||||||
import org.l2jmobius.gameserver.network.serverpackets.SystemMessage;
|
import org.l2jmobius.gameserver.network.serverpackets.SystemMessage;
|
||||||
|
|
||||||
import instances.AbstractInstance;
|
import instances.AbstractInstance;
|
||||||
@@ -83,6 +84,16 @@ public class KrofinNest extends AbstractInstance
|
|||||||
private static final int DOOR2 = 24250002;
|
private static final int DOOR2 = 24250002;
|
||||||
private static final int DOOR3 = 24250004;
|
private static final int DOOR3 = 24250004;
|
||||||
private static final int DOOR4 = 24250006;
|
private static final int DOOR4 = 24250006;
|
||||||
|
// Effect Triggers
|
||||||
|
private static final int DOOR1_CLOSED = 23227500;
|
||||||
|
private static final int DOOR1_OPENING = 23227502;
|
||||||
|
private static final int DOOR2_CLOSED = 24257710;
|
||||||
|
private static final int DOOR2_OPENING = 24257712;
|
||||||
|
private static final int DOOR3_CLOSED = 24257720;
|
||||||
|
private static final int DOOR3_OPENING = 24257722;
|
||||||
|
private static final int DOOR4_CLOSED = 24257730;
|
||||||
|
private static final int DOOR4_OPENING = 24257732;
|
||||||
|
private static final int BOSS_WATERFALL = 24257780;
|
||||||
|
|
||||||
public KrofinNest()
|
public KrofinNest()
|
||||||
{
|
{
|
||||||
@@ -103,134 +114,243 @@ public class KrofinNest extends AbstractInstance
|
|||||||
@Override
|
@Override
|
||||||
public String onAdvEvent(String event, Npc npc, Player player)
|
public String onAdvEvent(String event, Npc npc, Player player)
|
||||||
{
|
{
|
||||||
switch (event)
|
if (event.contains("enterInstance"))
|
||||||
{
|
{
|
||||||
case "enterInstance":
|
if (player.isInParty())
|
||||||
{
|
{
|
||||||
if (player.isInParty())
|
final Party party = player.getParty();
|
||||||
{
|
if (!party.isLeader(player))
|
||||||
final Party party = player.getParty();
|
|
||||||
if (!party.isLeader(player))
|
|
||||||
{
|
|
||||||
player.sendPacket(new SystemMessage(SystemMessageId.ONLY_A_PARTY_LEADER_CAN_MAKE_THE_REQUEST_TO_ENTER));
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (player.isInCommandChannel())
|
|
||||||
{
|
|
||||||
player.sendPacket(new SystemMessage(SystemMessageId.YOU_CANNOT_ENTER_BECAUSE_YOU_DO_NOT_MEET_THE_REQUIREMENTS));
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
final long currentTime = System.currentTimeMillis();
|
|
||||||
final List<Player> members = party.getMembers();
|
|
||||||
for (Player member : members)
|
|
||||||
{
|
|
||||||
if (!member.isInsideRadius3D(npc, 1000))
|
|
||||||
{
|
|
||||||
player.sendMessage("Player " + member.getName() + " must come closer.");
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (currentTime < InstanceManager.getInstance().getInstanceTime(member, TEMPLATE_ID))
|
|
||||||
{
|
|
||||||
final SystemMessage msg = new SystemMessage(SystemMessageId.SINCE_C1_ENTERED_ANOTHER_INSTANCE_ZONE_THEREFORE_YOU_CANNOT_ENTER_THIS_DUNGEON);
|
|
||||||
msg.addString(member.getName());
|
|
||||||
party.broadcastToPartyMembers(member, msg);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (Player member : members)
|
|
||||||
{
|
|
||||||
enterInstance(member, npc, TEMPLATE_ID);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (player.isGM())
|
|
||||||
{
|
|
||||||
enterInstance(player, npc, TEMPLATE_ID);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
player.sendPacket(new SystemMessage(SystemMessageId.YOU_ARE_NOT_CURRENTLY_IN_A_PARTY_SO_YOU_CANNOT_ENTER));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (player.getInstanceWorld() != null)
|
|
||||||
{
|
|
||||||
startQuestTimer("check_status", 1000, null, player);
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
case "check_status":
|
|
||||||
{
|
|
||||||
final Instance world = player.getInstanceWorld();
|
|
||||||
if (!isInInstance(world))
|
|
||||||
{
|
{
|
||||||
|
player.sendPacket(new SystemMessage(SystemMessageId.ONLY_A_PARTY_LEADER_CAN_MAKE_THE_REQUEST_TO_ENTER));
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (world.getStatus())
|
if (player.isInCommandChannel())
|
||||||
{
|
{
|
||||||
case 0:
|
player.sendPacket(new SystemMessage(SystemMessageId.YOU_CANNOT_ENTER_BECAUSE_YOU_DO_NOT_MEET_THE_REQUIREMENTS));
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
final long currentTime = System.currentTimeMillis();
|
||||||
|
final List<Player> members = party.getMembers();
|
||||||
|
for (Player member : members)
|
||||||
|
{
|
||||||
|
if (!member.isInsideRadius3D(npc, 1000))
|
||||||
{
|
{
|
||||||
world.setStatus(1);
|
player.sendMessage("Player " + member.getName() + " must come closer.");
|
||||||
world.spawnGroup("FIRST_AREA");
|
return null;
|
||||||
startQuestTimer("check_status", 10000, null, player);
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
case 1:
|
|
||||||
|
if (currentTime < InstanceManager.getInstance().getInstanceTime(member, TEMPLATE_ID))
|
||||||
{
|
{
|
||||||
if (world.getAliveNpcCount(FIRST_AREA) == 0)
|
final SystemMessage msg = new SystemMessage(SystemMessageId.SINCE_C1_ENTERED_ANOTHER_INSTANCE_ZONE_THEREFORE_YOU_CANNOT_ENTER_THIS_DUNGEON);
|
||||||
{
|
msg.addString(member.getName());
|
||||||
showOnScreenMsg(world, NpcStringId.THE_WATER_ENERGY_IS_NO_LONGER_ACTIVE_THE_WAY_IS_CLEAR, ExShowScreenMessage.TOP_CENTER, 10000, true);
|
party.broadcastToPartyMembers(member, msg);
|
||||||
world.setStatus(2);
|
return null;
|
||||||
world.getDoor(DOOR1).openMe();
|
|
||||||
world.spawnGroup("SECOND_AREA");
|
|
||||||
}
|
|
||||||
startQuestTimer("check_status", 1000, null, player);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case 2:
|
|
||||||
{
|
|
||||||
if (world.getAliveNpcCount(SECOND_AREA) == 0)
|
|
||||||
{
|
|
||||||
showOnScreenMsg(world, NpcStringId.THE_WATER_ENERGY_IS_NO_LONGER_ACTIVE_THE_WAY_IS_CLEAR, ExShowScreenMessage.TOP_CENTER, 10000, true);
|
|
||||||
world.setStatus(3);
|
|
||||||
world.getDoor(DOOR2).openMe();
|
|
||||||
world.spawnGroup("THIRD_AREA");
|
|
||||||
}
|
|
||||||
startQuestTimer("check_status", 10000, null, player);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case 3:
|
|
||||||
{
|
|
||||||
if (world.getAliveNpcCount(THIRD_AREA) == 0)
|
|
||||||
{
|
|
||||||
showOnScreenMsg(world, NpcStringId.THE_WATER_ENERGY_IS_NO_LONGER_ACTIVE_THE_WAY_IS_CLEAR, ExShowScreenMessage.TOP_CENTER, 10000, true);
|
|
||||||
world.setStatus(4);
|
|
||||||
world.getDoor(DOOR3).openMe();
|
|
||||||
world.spawnGroup("FOURTH_AREA");
|
|
||||||
}
|
|
||||||
startQuestTimer("check_status", 10000, null, player);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case 4:
|
|
||||||
{
|
|
||||||
if (world.getAliveNpcCount(FOURTH_AREA) == 0)
|
|
||||||
{
|
|
||||||
showOnScreenMsg(world, NpcStringId.THE_WATER_ENERGY_IS_NO_LONGER_ACTIVE_THE_WAY_IS_CLEAR, ExShowScreenMessage.TOP_CENTER, 10000, true);
|
|
||||||
world.setStatus(5);
|
|
||||||
world.getDoor(DOOR4).openMe();
|
|
||||||
world.spawnGroup("KROSHA_FIRST_FORM");
|
|
||||||
}
|
|
||||||
startQuestTimer("check_status", 10000, null, player);
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return null;
|
|
||||||
|
for (Player member : members)
|
||||||
|
{
|
||||||
|
enterInstance(member, npc, TEMPLATE_ID);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (player.isGM())
|
||||||
|
{
|
||||||
|
enterInstance(player, npc, TEMPLATE_ID);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
player.sendPacket(new SystemMessage(SystemMessageId.YOU_ARE_NOT_CURRENTLY_IN_A_PARTY_SO_YOU_CANNOT_ENTER));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (player.getInstanceWorld() != null)
|
||||||
|
{
|
||||||
|
startQuestTimer("check_status", 1000, null, player);
|
||||||
|
startQuestTimer("door_closed_effects", 1000, null, player);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return super.onAdvEvent(event, npc, player);
|
else if (event.equals("door_closed_effects"))
|
||||||
|
{
|
||||||
|
final Instance world = player.getInstanceWorld();
|
||||||
|
if (!isInInstance(world))
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (world.getStatus())
|
||||||
|
{
|
||||||
|
case 1:
|
||||||
|
{
|
||||||
|
world.broadcastPacket(new OnEventTrigger(DOOR1_CLOSED, true));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 2:
|
||||||
|
{
|
||||||
|
world.broadcastPacket(new OnEventTrigger(DOOR2_CLOSED, true));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 3:
|
||||||
|
{
|
||||||
|
world.broadcastPacket(new OnEventTrigger(DOOR3_CLOSED, true));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 4:
|
||||||
|
{
|
||||||
|
world.broadcastPacket(new OnEventTrigger(DOOR4_CLOSED, true));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (event.equals("door_opening_effects"))
|
||||||
|
{
|
||||||
|
final Instance world = player.getInstanceWorld();
|
||||||
|
if (!isInInstance(world))
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (world.getStatus())
|
||||||
|
{
|
||||||
|
case 2:
|
||||||
|
{
|
||||||
|
world.broadcastPacket(new OnEventTrigger(DOOR1_OPENING, true));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 3:
|
||||||
|
{
|
||||||
|
world.broadcastPacket(new OnEventTrigger(DOOR2_OPENING, true));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 4:
|
||||||
|
{
|
||||||
|
world.broadcastPacket(new OnEventTrigger(DOOR3_OPENING, true));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 5:
|
||||||
|
{
|
||||||
|
world.broadcastPacket(new OnEventTrigger(DOOR4_OPENING, true));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (event.equals("door_effects_off"))
|
||||||
|
{
|
||||||
|
final Instance world = player.getInstanceWorld();
|
||||||
|
if (!isInInstance(world))
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (world.getStatus())
|
||||||
|
{
|
||||||
|
case 2:
|
||||||
|
{
|
||||||
|
world.broadcastPacket(new OnEventTrigger(DOOR1_OPENING, false));
|
||||||
|
world.broadcastPacket(new OnEventTrigger(DOOR1_CLOSED, false));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 3:
|
||||||
|
{
|
||||||
|
world.broadcastPacket(new OnEventTrigger(DOOR2_OPENING, false));
|
||||||
|
world.broadcastPacket(new OnEventTrigger(DOOR2_CLOSED, false));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 4:
|
||||||
|
{
|
||||||
|
world.broadcastPacket(new OnEventTrigger(DOOR3_OPENING, false));
|
||||||
|
world.broadcastPacket(new OnEventTrigger(DOOR3_CLOSED, false));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 5:
|
||||||
|
{
|
||||||
|
world.broadcastPacket(new OnEventTrigger(DOOR4_OPENING, false));
|
||||||
|
world.broadcastPacket(new OnEventTrigger(DOOR4_CLOSED, false));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (event.equals("check_status"))
|
||||||
|
{
|
||||||
|
final Instance world = player.getInstanceWorld();
|
||||||
|
if (!isInInstance(world))
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (world.getStatus())
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
{
|
||||||
|
world.setStatus(1);
|
||||||
|
world.spawnGroup("FIRST_AREA");
|
||||||
|
startQuestTimer("door_closed_effects", 2000, null, player);
|
||||||
|
startQuestTimer("check_status", 10000, null, player);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 1:
|
||||||
|
{
|
||||||
|
if (world.getAliveNpcCount(FIRST_AREA) == 0)
|
||||||
|
{
|
||||||
|
showOnScreenMsg(world, NpcStringId.THE_WATER_ENERGY_IS_NO_LONGER_ACTIVE_THE_WAY_IS_CLEAR, ExShowScreenMessage.TOP_CENTER, 10000, true);
|
||||||
|
world.setStatus(2);
|
||||||
|
world.getDoor(DOOR1).openMe();
|
||||||
|
startQuestTimer("door_opening_effects", 1000, null, player);
|
||||||
|
startQuestTimer("door_effects_off", 5000, null, player);
|
||||||
|
world.spawnGroup("SECOND_AREA");
|
||||||
|
startQuestTimer("door_closed_effects", 10000, null, player);
|
||||||
|
}
|
||||||
|
startQuestTimer("check_status", 1000, null, player);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 2:
|
||||||
|
{
|
||||||
|
if (world.getAliveNpcCount(SECOND_AREA) == 0)
|
||||||
|
{
|
||||||
|
showOnScreenMsg(world, NpcStringId.THE_WATER_ENERGY_IS_NO_LONGER_ACTIVE_THE_WAY_IS_CLEAR, ExShowScreenMessage.TOP_CENTER, 10000, true);
|
||||||
|
world.setStatus(3);
|
||||||
|
world.getDoor(DOOR2).openMe();
|
||||||
|
startQuestTimer("door_opening_effects", 1000, null, player);
|
||||||
|
startQuestTimer("door_effects_off", 5000, null, player);
|
||||||
|
world.spawnGroup("THIRD_AREA");
|
||||||
|
startQuestTimer("door_closed_effects", 2000, null, player);
|
||||||
|
}
|
||||||
|
startQuestTimer("check_status", 10000, null, player);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 3:
|
||||||
|
{
|
||||||
|
if (world.getAliveNpcCount(THIRD_AREA) == 0)
|
||||||
|
{
|
||||||
|
showOnScreenMsg(world, NpcStringId.THE_WATER_ENERGY_IS_NO_LONGER_ACTIVE_THE_WAY_IS_CLEAR, ExShowScreenMessage.TOP_CENTER, 10000, true);
|
||||||
|
world.setStatus(4);
|
||||||
|
world.getDoor(DOOR3).openMe();
|
||||||
|
startQuestTimer("door_opening_effects", 1000, null, player);
|
||||||
|
startQuestTimer("door_effects_off", 5000, null, player);
|
||||||
|
world.spawnGroup("FOURTH_AREA");
|
||||||
|
startQuestTimer("door_closed_effects", 2000, null, player);
|
||||||
|
}
|
||||||
|
startQuestTimer("check_status", 10000, null, player);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 4:
|
||||||
|
{
|
||||||
|
if (world.getAliveNpcCount(FOURTH_AREA) == 0)
|
||||||
|
{
|
||||||
|
showOnScreenMsg(world, NpcStringId.THE_WATER_ENERGY_IS_NO_LONGER_ACTIVE_THE_WAY_IS_CLEAR, ExShowScreenMessage.TOP_CENTER, 10000, true);
|
||||||
|
world.setStatus(5);
|
||||||
|
world.getDoor(DOOR4).openMe();
|
||||||
|
startQuestTimer("door_opening_effects", 1000, null, player);
|
||||||
|
startQuestTimer("door_effects_off", 5000, null, player);
|
||||||
|
world.spawnGroup("KROSHA_FIRST_FORM");
|
||||||
|
world.broadcastPacket(new OnEventTrigger(BOSS_WATERFALL, true));
|
||||||
|
}
|
||||||
|
startQuestTimer("check_status", 10000, null, player);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
4
L2J_Mobius_08.2_Homunculus/dist/game/data/scripts/instances/KrofinNest/condNoLevel.html
vendored
Normal file
4
L2J_Mobius_08.2_Homunculus/dist/game/data/scripts/instances/KrofinNest/condNoLevel.html
vendored
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
<html><body>Benusta:<br>
|
||||||
|
You are too weak. I won't let you enter.<br>
|
||||||
|
(Only players of at least level 105 may participate.)
|
||||||
|
</body></html>
|
@@ -22,8 +22,9 @@
|
|||||||
<condition type="GroupMax">
|
<condition type="GroupMax">
|
||||||
<param name="limit" value="7" />
|
<param name="limit" value="7" />
|
||||||
</condition>
|
</condition>
|
||||||
<condition type="Level">
|
<condition type="Level" showMessageAndHtml="true">
|
||||||
<param name="min" value="105" />
|
<param name="min" value="105" />
|
||||||
|
<param name="html" value="condNoLevel.html" />
|
||||||
</condition>
|
</condition>
|
||||||
<condition type="Distance" />
|
<condition type="Distance" />
|
||||||
</conditions>
|
</conditions>
|
||||||
|
@@ -22,8 +22,9 @@
|
|||||||
<condition type="GroupMax">
|
<condition type="GroupMax">
|
||||||
<param name="limit" value="7" />
|
<param name="limit" value="7" />
|
||||||
</condition>
|
</condition>
|
||||||
<condition type="Level">
|
<condition type="Level" showMessageAndHtml="true">
|
||||||
<param name="min" value="105" />
|
<param name="min" value="110" />
|
||||||
|
<param name="html" value="condNoLevel110.html" />
|
||||||
</condition>
|
</condition>
|
||||||
<condition type="Distance" />
|
<condition type="Distance" />
|
||||||
</conditions>
|
</conditions>
|
||||||
|
@@ -28,6 +28,7 @@ import org.l2jmobius.gameserver.model.instancezone.Instance;
|
|||||||
import org.l2jmobius.gameserver.network.NpcStringId;
|
import org.l2jmobius.gameserver.network.NpcStringId;
|
||||||
import org.l2jmobius.gameserver.network.SystemMessageId;
|
import org.l2jmobius.gameserver.network.SystemMessageId;
|
||||||
import org.l2jmobius.gameserver.network.serverpackets.ExShowScreenMessage;
|
import org.l2jmobius.gameserver.network.serverpackets.ExShowScreenMessage;
|
||||||
|
import org.l2jmobius.gameserver.network.serverpackets.OnEventTrigger;
|
||||||
import org.l2jmobius.gameserver.network.serverpackets.SystemMessage;
|
import org.l2jmobius.gameserver.network.serverpackets.SystemMessage;
|
||||||
|
|
||||||
import instances.AbstractInstance;
|
import instances.AbstractInstance;
|
||||||
@@ -101,6 +102,7 @@ public class KrofinNest extends AbstractInstance
|
|||||||
};
|
};
|
||||||
// Items
|
// Items
|
||||||
private static final ItemHolder BENUSTAS_REWARD_BOX = new ItemHolder(81151, 1);
|
private static final ItemHolder BENUSTAS_REWARD_BOX = new ItemHolder(81151, 1);
|
||||||
|
private static final ItemHolder BENUSTAS_SHINING_REWARD_BOX = new ItemHolder(81452, 1);
|
||||||
private static final ItemHolder BENUSTAS_REWARD_BOX_110 = new ItemHolder(81741, 1);
|
private static final ItemHolder BENUSTAS_REWARD_BOX_110 = new ItemHolder(81741, 1);
|
||||||
// Misc
|
// Misc
|
||||||
private static final int[] TEMPLATE_IDS =
|
private static final int[] TEMPLATE_IDS =
|
||||||
@@ -108,10 +110,21 @@ public class KrofinNest extends AbstractInstance
|
|||||||
291, // lv. 105
|
291, // lv. 105
|
||||||
315, // lv. 110
|
315, // lv. 110
|
||||||
};
|
};
|
||||||
|
private static int INITIAL_PARTY_MEMBERS = 0;
|
||||||
private static final int DOOR1 = 23220101;
|
private static final int DOOR1 = 23220101;
|
||||||
private static final int DOOR2 = 24250002;
|
private static final int DOOR2 = 24250002;
|
||||||
private static final int DOOR3 = 24250004;
|
private static final int DOOR3 = 24250004;
|
||||||
private static final int DOOR4 = 24250006;
|
private static final int DOOR4 = 24250006;
|
||||||
|
// Effect Triggers
|
||||||
|
private static final int DOOR1_CLOSED = 23227500;
|
||||||
|
private static final int DOOR1_OPENING = 23227502;
|
||||||
|
private static final int DOOR2_CLOSED = 24257710;
|
||||||
|
private static final int DOOR2_OPENING = 24257712;
|
||||||
|
private static final int DOOR3_CLOSED = 24257720;
|
||||||
|
private static final int DOOR3_OPENING = 24257722;
|
||||||
|
private static final int DOOR4_CLOSED = 24257730;
|
||||||
|
private static final int DOOR4_OPENING = 24257732;
|
||||||
|
private static final int BOSS_WATERFALL = 24257780;
|
||||||
|
|
||||||
public KrofinNest()
|
public KrofinNest()
|
||||||
{
|
{
|
||||||
@@ -195,6 +208,107 @@ public class KrofinNest extends AbstractInstance
|
|||||||
if (player.getInstanceWorld() != null)
|
if (player.getInstanceWorld() != null)
|
||||||
{
|
{
|
||||||
startQuestTimer("check_status", 1000, null, player);
|
startQuestTimer("check_status", 1000, null, player);
|
||||||
|
startQuestTimer("door_closed_effects", 1000, null, player);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (event.equals("door_closed_effects"))
|
||||||
|
{
|
||||||
|
final Instance world = player.getInstanceWorld();
|
||||||
|
if (!isInInstance(world))
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (world.getStatus())
|
||||||
|
{
|
||||||
|
case 1:
|
||||||
|
{
|
||||||
|
world.broadcastPacket(new OnEventTrigger(DOOR1_CLOSED, true));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 2:
|
||||||
|
{
|
||||||
|
world.broadcastPacket(new OnEventTrigger(DOOR2_CLOSED, true));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 3:
|
||||||
|
{
|
||||||
|
world.broadcastPacket(new OnEventTrigger(DOOR3_CLOSED, true));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 4:
|
||||||
|
{
|
||||||
|
world.broadcastPacket(new OnEventTrigger(DOOR4_CLOSED, true));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (event.equals("door_opening_effects"))
|
||||||
|
{
|
||||||
|
final Instance world = player.getInstanceWorld();
|
||||||
|
if (!isInInstance(world))
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (world.getStatus())
|
||||||
|
{
|
||||||
|
case 2:
|
||||||
|
{
|
||||||
|
world.broadcastPacket(new OnEventTrigger(DOOR1_OPENING, true));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 3:
|
||||||
|
{
|
||||||
|
world.broadcastPacket(new OnEventTrigger(DOOR2_OPENING, true));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 4:
|
||||||
|
{
|
||||||
|
world.broadcastPacket(new OnEventTrigger(DOOR3_OPENING, true));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 5:
|
||||||
|
{
|
||||||
|
world.broadcastPacket(new OnEventTrigger(DOOR4_OPENING, true));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (event.equals("door_effects_off"))
|
||||||
|
{
|
||||||
|
final Instance world = player.getInstanceWorld();
|
||||||
|
if (!isInInstance(world))
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (world.getStatus())
|
||||||
|
{
|
||||||
|
case 2:
|
||||||
|
{
|
||||||
|
world.broadcastPacket(new OnEventTrigger(DOOR1_OPENING, false));
|
||||||
|
world.broadcastPacket(new OnEventTrigger(DOOR1_CLOSED, false));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 3:
|
||||||
|
{
|
||||||
|
world.broadcastPacket(new OnEventTrigger(DOOR2_OPENING, false));
|
||||||
|
world.broadcastPacket(new OnEventTrigger(DOOR2_CLOSED, false));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 4:
|
||||||
|
{
|
||||||
|
world.broadcastPacket(new OnEventTrigger(DOOR3_OPENING, false));
|
||||||
|
world.broadcastPacket(new OnEventTrigger(DOOR3_CLOSED, false));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 5:
|
||||||
|
{
|
||||||
|
world.broadcastPacket(new OnEventTrigger(DOOR4_OPENING, false));
|
||||||
|
world.broadcastPacket(new OnEventTrigger(DOOR4_CLOSED, false));
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (event.equals("check_status"))
|
else if (event.equals("check_status"))
|
||||||
@@ -211,6 +325,7 @@ public class KrofinNest extends AbstractInstance
|
|||||||
{
|
{
|
||||||
world.setStatus(1);
|
world.setStatus(1);
|
||||||
world.spawnGroup("FIRST_AREA");
|
world.spawnGroup("FIRST_AREA");
|
||||||
|
startQuestTimer("door_closed_effects", 2000, null, player);
|
||||||
startQuestTimer("check_status", 10000, null, player);
|
startQuestTimer("check_status", 10000, null, player);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -221,7 +336,10 @@ public class KrofinNest extends AbstractInstance
|
|||||||
showOnScreenMsg(world, NpcStringId.THE_WATER_ENERGY_IS_NO_LONGER_ACTIVE_THE_WAY_IS_CLEAR, ExShowScreenMessage.TOP_CENTER, 10000, true);
|
showOnScreenMsg(world, NpcStringId.THE_WATER_ENERGY_IS_NO_LONGER_ACTIVE_THE_WAY_IS_CLEAR, ExShowScreenMessage.TOP_CENTER, 10000, true);
|
||||||
world.setStatus(2);
|
world.setStatus(2);
|
||||||
world.getDoor(DOOR1).openMe();
|
world.getDoor(DOOR1).openMe();
|
||||||
|
startQuestTimer("door_opening_effects", 1000, null, player);
|
||||||
|
startQuestTimer("door_effects_off", 5000, null, player);
|
||||||
world.spawnGroup("SECOND_AREA");
|
world.spawnGroup("SECOND_AREA");
|
||||||
|
startQuestTimer("door_closed_effects", 10000, null, player);
|
||||||
}
|
}
|
||||||
startQuestTimer("check_status", 1000, null, player);
|
startQuestTimer("check_status", 1000, null, player);
|
||||||
break;
|
break;
|
||||||
@@ -233,7 +351,10 @@ public class KrofinNest extends AbstractInstance
|
|||||||
showOnScreenMsg(world, NpcStringId.THE_WATER_ENERGY_IS_NO_LONGER_ACTIVE_THE_WAY_IS_CLEAR, ExShowScreenMessage.TOP_CENTER, 10000, true);
|
showOnScreenMsg(world, NpcStringId.THE_WATER_ENERGY_IS_NO_LONGER_ACTIVE_THE_WAY_IS_CLEAR, ExShowScreenMessage.TOP_CENTER, 10000, true);
|
||||||
world.setStatus(3);
|
world.setStatus(3);
|
||||||
world.getDoor(DOOR2).openMe();
|
world.getDoor(DOOR2).openMe();
|
||||||
|
startQuestTimer("door_opening_effects", 1000, null, player);
|
||||||
|
startQuestTimer("door_effects_off", 5000, null, player);
|
||||||
world.spawnGroup("THIRD_AREA");
|
world.spawnGroup("THIRD_AREA");
|
||||||
|
startQuestTimer("door_closed_effects", 2000, null, player);
|
||||||
}
|
}
|
||||||
startQuestTimer("check_status", 10000, null, player);
|
startQuestTimer("check_status", 10000, null, player);
|
||||||
break;
|
break;
|
||||||
@@ -245,7 +366,10 @@ public class KrofinNest extends AbstractInstance
|
|||||||
showOnScreenMsg(world, NpcStringId.THE_WATER_ENERGY_IS_NO_LONGER_ACTIVE_THE_WAY_IS_CLEAR, ExShowScreenMessage.TOP_CENTER, 10000, true);
|
showOnScreenMsg(world, NpcStringId.THE_WATER_ENERGY_IS_NO_LONGER_ACTIVE_THE_WAY_IS_CLEAR, ExShowScreenMessage.TOP_CENTER, 10000, true);
|
||||||
world.setStatus(4);
|
world.setStatus(4);
|
||||||
world.getDoor(DOOR3).openMe();
|
world.getDoor(DOOR3).openMe();
|
||||||
|
startQuestTimer("door_opening_effects", 1000, null, player);
|
||||||
|
startQuestTimer("door_effects_off", 5000, null, player);
|
||||||
world.spawnGroup("FOURTH_AREA");
|
world.spawnGroup("FOURTH_AREA");
|
||||||
|
startQuestTimer("door_closed_effects", 2000, null, player);
|
||||||
}
|
}
|
||||||
startQuestTimer("check_status", 10000, null, player);
|
startQuestTimer("check_status", 10000, null, player);
|
||||||
break;
|
break;
|
||||||
@@ -257,7 +381,10 @@ public class KrofinNest extends AbstractInstance
|
|||||||
showOnScreenMsg(world, NpcStringId.THE_WATER_ENERGY_IS_NO_LONGER_ACTIVE_THE_WAY_IS_CLEAR, ExShowScreenMessage.TOP_CENTER, 10000, true);
|
showOnScreenMsg(world, NpcStringId.THE_WATER_ENERGY_IS_NO_LONGER_ACTIVE_THE_WAY_IS_CLEAR, ExShowScreenMessage.TOP_CENTER, 10000, true);
|
||||||
world.setStatus(5);
|
world.setStatus(5);
|
||||||
world.getDoor(DOOR4).openMe();
|
world.getDoor(DOOR4).openMe();
|
||||||
|
startQuestTimer("door_opening_effects", 1000, null, player);
|
||||||
|
startQuestTimer("door_effects_off", 5000, null, player);
|
||||||
world.spawnGroup(world.getTemplateId() == TEMPLATE_IDS[0] ? "KROSHA_FIRST_FORM" : "KROSHA_FINAL_FORM");
|
world.spawnGroup(world.getTemplateId() == TEMPLATE_IDS[0] ? "KROSHA_FIRST_FORM" : "KROSHA_FINAL_FORM");
|
||||||
|
world.broadcastPacket(new OnEventTrigger(BOSS_WATERFALL, true));
|
||||||
}
|
}
|
||||||
startQuestTimer("check_status", 10000, null, player);
|
startQuestTimer("check_status", 10000, null, player);
|
||||||
break;
|
break;
|
||||||
@@ -301,6 +428,12 @@ public class KrofinNest extends AbstractInstance
|
|||||||
return super.onAttack(npc, attacker, damage, isSummon);
|
return super.onAttack(npc, attacker, damage, isSummon);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onInstanceCreated(Instance instance, Player player)
|
||||||
|
{
|
||||||
|
INITIAL_PARTY_MEMBERS = (player.getParty() != null ? player.getParty().getMemberCount() : 1);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String onKill(Npc npc, Player killer, boolean isPet)
|
public String onKill(Npc npc, Player killer, boolean isPet)
|
||||||
{
|
{
|
||||||
@@ -308,6 +441,8 @@ public class KrofinNest extends AbstractInstance
|
|||||||
if (isInInstance(world))
|
if (isInInstance(world))
|
||||||
{
|
{
|
||||||
final boolean kroshaFirstFormMinionsSpawnedTwice = world.getParameters().getBoolean("KROSHA_FIRST_FORM_MINIONS_SPAWNED_TWICE", false);
|
final boolean kroshaFirstFormMinionsSpawnedTwice = world.getParameters().getBoolean("KROSHA_FIRST_FORM_MINIONS_SPAWNED_TWICE", false);
|
||||||
|
final boolean kroshaFinalFormSpawned = world.getParameters().getBoolean("KROSHA_FINAL_FORM_SPAWNED", false);
|
||||||
|
final Player randomPl = world.getFirstPlayer().getParty().getRandomPlayer();
|
||||||
if (world.getStatus() == 5)
|
if (world.getStatus() == 5)
|
||||||
{
|
{
|
||||||
if (CommonUtil.contains(KROSHA_FIRST_FORM_MINIONS, npc.getId()))
|
if (CommonUtil.contains(KROSHA_FIRST_FORM_MINIONS, npc.getId()))
|
||||||
@@ -326,9 +461,10 @@ public class KrofinNest extends AbstractInstance
|
|||||||
}
|
}
|
||||||
else if (CommonUtil.contains(ENHANCED_MINIONS, npc.getId()))
|
else if (CommonUtil.contains(ENHANCED_MINIONS, npc.getId()))
|
||||||
{
|
{
|
||||||
if (world.getAliveNpcCount(ENHANCED_MINIONS) == 0)
|
if ((world.getAliveNpcCount(ENHANCED_MINIONS) == 0) && !kroshaFinalFormSpawned)
|
||||||
{
|
{
|
||||||
world.spawnGroup("KROSHA_FINAL_FORM");
|
world.spawnGroup("KROSHA_FINAL_FORM");
|
||||||
|
world.getParameters().set("KROSHA_FINAL_FORM_SPAWNED", true);
|
||||||
showOnScreenMsg(world, NpcStringId.QUEEN_KROSHA_HAS_RETURNED_MORE_POWERFUL_THAN_EVER, ExShowScreenMessage.TOP_CENTER, 7000, true);
|
showOnScreenMsg(world, NpcStringId.QUEEN_KROSHA_HAS_RETURNED_MORE_POWERFUL_THAN_EVER, ExShowScreenMessage.TOP_CENTER, 7000, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -338,6 +474,16 @@ public class KrofinNest extends AbstractInstance
|
|||||||
{
|
{
|
||||||
giveItems(member, BENUSTAS_REWARD_BOX);
|
giveItems(member, BENUSTAS_REWARD_BOX);
|
||||||
}
|
}
|
||||||
|
if (world.getPlayersCount() == INITIAL_PARTY_MEMBERS)
|
||||||
|
{
|
||||||
|
if (getRandom(100) < 80)
|
||||||
|
{
|
||||||
|
if (randomPl != null)
|
||||||
|
{
|
||||||
|
giveItems(randomPl, BENUSTAS_SHINING_REWARD_BOX);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
showOnScreenMsg(world, NpcStringId.THE_WATER_POWER_PROTECTING_QUEEN_KROSHA_HAS_DISAPPEARED, ExShowScreenMessage.TOP_CENTER, 7000, true);
|
showOnScreenMsg(world, NpcStringId.THE_WATER_POWER_PROTECTING_QUEEN_KROSHA_HAS_DISAPPEARED, ExShowScreenMessage.TOP_CENTER, 7000, true);
|
||||||
world.finishInstance();
|
world.finishInstance();
|
||||||
}
|
}
|
||||||
@@ -347,6 +493,16 @@ public class KrofinNest extends AbstractInstance
|
|||||||
{
|
{
|
||||||
giveItems(member, BENUSTAS_REWARD_BOX_110);
|
giveItems(member, BENUSTAS_REWARD_BOX_110);
|
||||||
}
|
}
|
||||||
|
if (world.getPlayersCount() == INITIAL_PARTY_MEMBERS)
|
||||||
|
{
|
||||||
|
if (getRandom(100) < 80)
|
||||||
|
{
|
||||||
|
if (randomPl != null)
|
||||||
|
{
|
||||||
|
giveItems(randomPl, BENUSTAS_SHINING_REWARD_BOX);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
showOnScreenMsg(world, NpcStringId.THE_WATER_POWER_PROTECTING_QUEEN_KROSHA_HAS_DISAPPEARED, ExShowScreenMessage.TOP_CENTER, 7000, true);
|
showOnScreenMsg(world, NpcStringId.THE_WATER_POWER_PROTECTING_QUEEN_KROSHA_HAS_DISAPPEARED, ExShowScreenMessage.TOP_CENTER, 7000, true);
|
||||||
world.finishInstance();
|
world.finishInstance();
|
||||||
}
|
}
|
||||||
|
@@ -0,0 +1,4 @@
|
|||||||
|
<html><body>Benusta:<br>
|
||||||
|
You are too weak. I won't let you enter.<br>
|
||||||
|
(Only players of at least level 105 may participate.)
|
||||||
|
</body></html>
|
@@ -0,0 +1,4 @@
|
|||||||
|
<html><body>Benusta:<br>
|
||||||
|
You are too weak. I won't let you enter.<br>
|
||||||
|
(Only players of at least level 110 may participate.)
|
||||||
|
</body></html>
|
@@ -22,8 +22,9 @@
|
|||||||
<condition type="GroupMax">
|
<condition type="GroupMax">
|
||||||
<param name="limit" value="7" />
|
<param name="limit" value="7" />
|
||||||
</condition>
|
</condition>
|
||||||
<condition type="Level">
|
<condition type="Level" showMessageAndHtml="true">
|
||||||
<param name="min" value="105" />
|
<param name="min" value="105" />
|
||||||
|
<param name="html" value="condNoLevel.html" />
|
||||||
</condition>
|
</condition>
|
||||||
<condition type="Distance" />
|
<condition type="Distance" />
|
||||||
</conditions>
|
</conditions>
|
||||||
|
@@ -22,8 +22,9 @@
|
|||||||
<condition type="GroupMax">
|
<condition type="GroupMax">
|
||||||
<param name="limit" value="7" />
|
<param name="limit" value="7" />
|
||||||
</condition>
|
</condition>
|
||||||
<condition type="Level">
|
<condition type="Level" showMessageAndHtml="true">
|
||||||
<param name="min" value="105" />
|
<param name="min" value="110" />
|
||||||
|
<param name="html" value="condNoLevel110.html" />
|
||||||
</condition>
|
</condition>
|
||||||
<condition type="Distance" />
|
<condition type="Distance" />
|
||||||
</conditions>
|
</conditions>
|
||||||
|
@@ -28,6 +28,7 @@ import org.l2jmobius.gameserver.model.instancezone.Instance;
|
|||||||
import org.l2jmobius.gameserver.network.NpcStringId;
|
import org.l2jmobius.gameserver.network.NpcStringId;
|
||||||
import org.l2jmobius.gameserver.network.SystemMessageId;
|
import org.l2jmobius.gameserver.network.SystemMessageId;
|
||||||
import org.l2jmobius.gameserver.network.serverpackets.ExShowScreenMessage;
|
import org.l2jmobius.gameserver.network.serverpackets.ExShowScreenMessage;
|
||||||
|
import org.l2jmobius.gameserver.network.serverpackets.OnEventTrigger;
|
||||||
import org.l2jmobius.gameserver.network.serverpackets.SystemMessage;
|
import org.l2jmobius.gameserver.network.serverpackets.SystemMessage;
|
||||||
|
|
||||||
import instances.AbstractInstance;
|
import instances.AbstractInstance;
|
||||||
@@ -101,6 +102,7 @@ public class KrofinNest extends AbstractInstance
|
|||||||
};
|
};
|
||||||
// Items
|
// Items
|
||||||
private static final ItemHolder BENUSTAS_REWARD_BOX = new ItemHolder(81151, 1);
|
private static final ItemHolder BENUSTAS_REWARD_BOX = new ItemHolder(81151, 1);
|
||||||
|
private static final ItemHolder BENUSTAS_SHINING_REWARD_BOX = new ItemHolder(81452, 1);
|
||||||
private static final ItemHolder BENUSTAS_REWARD_BOX_110 = new ItemHolder(81741, 1);
|
private static final ItemHolder BENUSTAS_REWARD_BOX_110 = new ItemHolder(81741, 1);
|
||||||
// Misc
|
// Misc
|
||||||
private static final int[] TEMPLATE_IDS =
|
private static final int[] TEMPLATE_IDS =
|
||||||
@@ -108,10 +110,21 @@ public class KrofinNest extends AbstractInstance
|
|||||||
291, // lv. 105
|
291, // lv. 105
|
||||||
315, // lv. 110
|
315, // lv. 110
|
||||||
};
|
};
|
||||||
|
private static int INITIAL_PARTY_MEMBERS = 0;
|
||||||
private static final int DOOR1 = 23220101;
|
private static final int DOOR1 = 23220101;
|
||||||
private static final int DOOR2 = 24250002;
|
private static final int DOOR2 = 24250002;
|
||||||
private static final int DOOR3 = 24250004;
|
private static final int DOOR3 = 24250004;
|
||||||
private static final int DOOR4 = 24250006;
|
private static final int DOOR4 = 24250006;
|
||||||
|
// Effect Triggers
|
||||||
|
private static final int DOOR1_CLOSED = 23227500;
|
||||||
|
private static final int DOOR1_OPENING = 23227502;
|
||||||
|
private static final int DOOR2_CLOSED = 24257710;
|
||||||
|
private static final int DOOR2_OPENING = 24257712;
|
||||||
|
private static final int DOOR3_CLOSED = 24257720;
|
||||||
|
private static final int DOOR3_OPENING = 24257722;
|
||||||
|
private static final int DOOR4_CLOSED = 24257730;
|
||||||
|
private static final int DOOR4_OPENING = 24257732;
|
||||||
|
private static final int BOSS_WATERFALL = 24257780;
|
||||||
|
|
||||||
public KrofinNest()
|
public KrofinNest()
|
||||||
{
|
{
|
||||||
@@ -195,6 +208,107 @@ public class KrofinNest extends AbstractInstance
|
|||||||
if (player.getInstanceWorld() != null)
|
if (player.getInstanceWorld() != null)
|
||||||
{
|
{
|
||||||
startQuestTimer("check_status", 1000, null, player);
|
startQuestTimer("check_status", 1000, null, player);
|
||||||
|
startQuestTimer("door_closed_effects", 1000, null, player);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (event.equals("door_closed_effects"))
|
||||||
|
{
|
||||||
|
final Instance world = player.getInstanceWorld();
|
||||||
|
if (!isInInstance(world))
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (world.getStatus())
|
||||||
|
{
|
||||||
|
case 1:
|
||||||
|
{
|
||||||
|
world.broadcastPacket(new OnEventTrigger(DOOR1_CLOSED, true));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 2:
|
||||||
|
{
|
||||||
|
world.broadcastPacket(new OnEventTrigger(DOOR2_CLOSED, true));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 3:
|
||||||
|
{
|
||||||
|
world.broadcastPacket(new OnEventTrigger(DOOR3_CLOSED, true));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 4:
|
||||||
|
{
|
||||||
|
world.broadcastPacket(new OnEventTrigger(DOOR4_CLOSED, true));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (event.equals("door_opening_effects"))
|
||||||
|
{
|
||||||
|
final Instance world = player.getInstanceWorld();
|
||||||
|
if (!isInInstance(world))
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (world.getStatus())
|
||||||
|
{
|
||||||
|
case 2:
|
||||||
|
{
|
||||||
|
world.broadcastPacket(new OnEventTrigger(DOOR1_OPENING, true));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 3:
|
||||||
|
{
|
||||||
|
world.broadcastPacket(new OnEventTrigger(DOOR2_OPENING, true));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 4:
|
||||||
|
{
|
||||||
|
world.broadcastPacket(new OnEventTrigger(DOOR3_OPENING, true));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 5:
|
||||||
|
{
|
||||||
|
world.broadcastPacket(new OnEventTrigger(DOOR4_OPENING, true));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (event.equals("door_effects_off"))
|
||||||
|
{
|
||||||
|
final Instance world = player.getInstanceWorld();
|
||||||
|
if (!isInInstance(world))
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (world.getStatus())
|
||||||
|
{
|
||||||
|
case 2:
|
||||||
|
{
|
||||||
|
world.broadcastPacket(new OnEventTrigger(DOOR1_OPENING, false));
|
||||||
|
world.broadcastPacket(new OnEventTrigger(DOOR1_CLOSED, false));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 3:
|
||||||
|
{
|
||||||
|
world.broadcastPacket(new OnEventTrigger(DOOR2_OPENING, false));
|
||||||
|
world.broadcastPacket(new OnEventTrigger(DOOR2_CLOSED, false));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 4:
|
||||||
|
{
|
||||||
|
world.broadcastPacket(new OnEventTrigger(DOOR3_OPENING, false));
|
||||||
|
world.broadcastPacket(new OnEventTrigger(DOOR3_CLOSED, false));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 5:
|
||||||
|
{
|
||||||
|
world.broadcastPacket(new OnEventTrigger(DOOR4_OPENING, false));
|
||||||
|
world.broadcastPacket(new OnEventTrigger(DOOR4_CLOSED, false));
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (event.equals("check_status"))
|
else if (event.equals("check_status"))
|
||||||
@@ -211,6 +325,7 @@ public class KrofinNest extends AbstractInstance
|
|||||||
{
|
{
|
||||||
world.setStatus(1);
|
world.setStatus(1);
|
||||||
world.spawnGroup("FIRST_AREA");
|
world.spawnGroup("FIRST_AREA");
|
||||||
|
startQuestTimer("door_closed_effects", 2000, null, player);
|
||||||
startQuestTimer("check_status", 10000, null, player);
|
startQuestTimer("check_status", 10000, null, player);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -221,7 +336,10 @@ public class KrofinNest extends AbstractInstance
|
|||||||
showOnScreenMsg(world, NpcStringId.THE_WATER_ENERGY_IS_NO_LONGER_ACTIVE_THE_WAY_IS_CLEAR, ExShowScreenMessage.TOP_CENTER, 10000, true);
|
showOnScreenMsg(world, NpcStringId.THE_WATER_ENERGY_IS_NO_LONGER_ACTIVE_THE_WAY_IS_CLEAR, ExShowScreenMessage.TOP_CENTER, 10000, true);
|
||||||
world.setStatus(2);
|
world.setStatus(2);
|
||||||
world.getDoor(DOOR1).openMe();
|
world.getDoor(DOOR1).openMe();
|
||||||
|
startQuestTimer("door_opening_effects", 1000, null, player);
|
||||||
|
startQuestTimer("door_effects_off", 5000, null, player);
|
||||||
world.spawnGroup("SECOND_AREA");
|
world.spawnGroup("SECOND_AREA");
|
||||||
|
startQuestTimer("door_closed_effects", 10000, null, player);
|
||||||
}
|
}
|
||||||
startQuestTimer("check_status", 1000, null, player);
|
startQuestTimer("check_status", 1000, null, player);
|
||||||
break;
|
break;
|
||||||
@@ -233,7 +351,10 @@ public class KrofinNest extends AbstractInstance
|
|||||||
showOnScreenMsg(world, NpcStringId.THE_WATER_ENERGY_IS_NO_LONGER_ACTIVE_THE_WAY_IS_CLEAR, ExShowScreenMessage.TOP_CENTER, 10000, true);
|
showOnScreenMsg(world, NpcStringId.THE_WATER_ENERGY_IS_NO_LONGER_ACTIVE_THE_WAY_IS_CLEAR, ExShowScreenMessage.TOP_CENTER, 10000, true);
|
||||||
world.setStatus(3);
|
world.setStatus(3);
|
||||||
world.getDoor(DOOR2).openMe();
|
world.getDoor(DOOR2).openMe();
|
||||||
|
startQuestTimer("door_opening_effects", 1000, null, player);
|
||||||
|
startQuestTimer("door_effects_off", 5000, null, player);
|
||||||
world.spawnGroup("THIRD_AREA");
|
world.spawnGroup("THIRD_AREA");
|
||||||
|
startQuestTimer("door_closed_effects", 2000, null, player);
|
||||||
}
|
}
|
||||||
startQuestTimer("check_status", 10000, null, player);
|
startQuestTimer("check_status", 10000, null, player);
|
||||||
break;
|
break;
|
||||||
@@ -245,7 +366,10 @@ public class KrofinNest extends AbstractInstance
|
|||||||
showOnScreenMsg(world, NpcStringId.THE_WATER_ENERGY_IS_NO_LONGER_ACTIVE_THE_WAY_IS_CLEAR, ExShowScreenMessage.TOP_CENTER, 10000, true);
|
showOnScreenMsg(world, NpcStringId.THE_WATER_ENERGY_IS_NO_LONGER_ACTIVE_THE_WAY_IS_CLEAR, ExShowScreenMessage.TOP_CENTER, 10000, true);
|
||||||
world.setStatus(4);
|
world.setStatus(4);
|
||||||
world.getDoor(DOOR3).openMe();
|
world.getDoor(DOOR3).openMe();
|
||||||
|
startQuestTimer("door_opening_effects", 1000, null, player);
|
||||||
|
startQuestTimer("door_effects_off", 5000, null, player);
|
||||||
world.spawnGroup("FOURTH_AREA");
|
world.spawnGroup("FOURTH_AREA");
|
||||||
|
startQuestTimer("door_closed_effects", 2000, null, player);
|
||||||
}
|
}
|
||||||
startQuestTimer("check_status", 10000, null, player);
|
startQuestTimer("check_status", 10000, null, player);
|
||||||
break;
|
break;
|
||||||
@@ -257,7 +381,10 @@ public class KrofinNest extends AbstractInstance
|
|||||||
showOnScreenMsg(world, NpcStringId.THE_WATER_ENERGY_IS_NO_LONGER_ACTIVE_THE_WAY_IS_CLEAR, ExShowScreenMessage.TOP_CENTER, 10000, true);
|
showOnScreenMsg(world, NpcStringId.THE_WATER_ENERGY_IS_NO_LONGER_ACTIVE_THE_WAY_IS_CLEAR, ExShowScreenMessage.TOP_CENTER, 10000, true);
|
||||||
world.setStatus(5);
|
world.setStatus(5);
|
||||||
world.getDoor(DOOR4).openMe();
|
world.getDoor(DOOR4).openMe();
|
||||||
|
startQuestTimer("door_opening_effects", 1000, null, player);
|
||||||
|
startQuestTimer("door_effects_off", 5000, null, player);
|
||||||
world.spawnGroup(world.getTemplateId() == TEMPLATE_IDS[0] ? "KROSHA_FIRST_FORM" : "KROSHA_FINAL_FORM");
|
world.spawnGroup(world.getTemplateId() == TEMPLATE_IDS[0] ? "KROSHA_FIRST_FORM" : "KROSHA_FINAL_FORM");
|
||||||
|
world.broadcastPacket(new OnEventTrigger(BOSS_WATERFALL, true));
|
||||||
}
|
}
|
||||||
startQuestTimer("check_status", 10000, null, player);
|
startQuestTimer("check_status", 10000, null, player);
|
||||||
break;
|
break;
|
||||||
@@ -301,6 +428,12 @@ public class KrofinNest extends AbstractInstance
|
|||||||
return super.onAttack(npc, attacker, damage, isSummon);
|
return super.onAttack(npc, attacker, damage, isSummon);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onInstanceCreated(Instance instance, Player player)
|
||||||
|
{
|
||||||
|
INITIAL_PARTY_MEMBERS = (player.getParty() != null ? player.getParty().getMemberCount() : 1);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String onKill(Npc npc, Player killer, boolean isPet)
|
public String onKill(Npc npc, Player killer, boolean isPet)
|
||||||
{
|
{
|
||||||
@@ -308,6 +441,8 @@ public class KrofinNest extends AbstractInstance
|
|||||||
if (isInInstance(world))
|
if (isInInstance(world))
|
||||||
{
|
{
|
||||||
final boolean kroshaFirstFormMinionsSpawnedTwice = world.getParameters().getBoolean("KROSHA_FIRST_FORM_MINIONS_SPAWNED_TWICE", false);
|
final boolean kroshaFirstFormMinionsSpawnedTwice = world.getParameters().getBoolean("KROSHA_FIRST_FORM_MINIONS_SPAWNED_TWICE", false);
|
||||||
|
final boolean kroshaFinalFormSpawned = world.getParameters().getBoolean("KROSHA_FINAL_FORM_SPAWNED", false);
|
||||||
|
final Player randomPl = world.getFirstPlayer().getParty().getRandomPlayer();
|
||||||
if (world.getStatus() == 5)
|
if (world.getStatus() == 5)
|
||||||
{
|
{
|
||||||
if (CommonUtil.contains(KROSHA_FIRST_FORM_MINIONS, npc.getId()))
|
if (CommonUtil.contains(KROSHA_FIRST_FORM_MINIONS, npc.getId()))
|
||||||
@@ -326,9 +461,10 @@ public class KrofinNest extends AbstractInstance
|
|||||||
}
|
}
|
||||||
else if (CommonUtil.contains(ENHANCED_MINIONS, npc.getId()))
|
else if (CommonUtil.contains(ENHANCED_MINIONS, npc.getId()))
|
||||||
{
|
{
|
||||||
if (world.getAliveNpcCount(ENHANCED_MINIONS) == 0)
|
if ((world.getAliveNpcCount(ENHANCED_MINIONS) == 0) && !kroshaFinalFormSpawned)
|
||||||
{
|
{
|
||||||
world.spawnGroup("KROSHA_FINAL_FORM");
|
world.spawnGroup("KROSHA_FINAL_FORM");
|
||||||
|
world.getParameters().set("KROSHA_FINAL_FORM_SPAWNED", true);
|
||||||
showOnScreenMsg(world, NpcStringId.QUEEN_KROSHA_HAS_RETURNED_MORE_POWERFUL_THAN_EVER, ExShowScreenMessage.TOP_CENTER, 7000, true);
|
showOnScreenMsg(world, NpcStringId.QUEEN_KROSHA_HAS_RETURNED_MORE_POWERFUL_THAN_EVER, ExShowScreenMessage.TOP_CENTER, 7000, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -338,6 +474,16 @@ public class KrofinNest extends AbstractInstance
|
|||||||
{
|
{
|
||||||
giveItems(member, BENUSTAS_REWARD_BOX);
|
giveItems(member, BENUSTAS_REWARD_BOX);
|
||||||
}
|
}
|
||||||
|
if (world.getPlayersCount() == INITIAL_PARTY_MEMBERS)
|
||||||
|
{
|
||||||
|
if (getRandom(100) < 80)
|
||||||
|
{
|
||||||
|
if (randomPl != null)
|
||||||
|
{
|
||||||
|
giveItems(randomPl, BENUSTAS_SHINING_REWARD_BOX);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
showOnScreenMsg(world, NpcStringId.THE_WATER_POWER_PROTECTING_QUEEN_KROSHA_HAS_DISAPPEARED, ExShowScreenMessage.TOP_CENTER, 7000, true);
|
showOnScreenMsg(world, NpcStringId.THE_WATER_POWER_PROTECTING_QUEEN_KROSHA_HAS_DISAPPEARED, ExShowScreenMessage.TOP_CENTER, 7000, true);
|
||||||
world.finishInstance();
|
world.finishInstance();
|
||||||
}
|
}
|
||||||
@@ -347,6 +493,16 @@ public class KrofinNest extends AbstractInstance
|
|||||||
{
|
{
|
||||||
giveItems(member, BENUSTAS_REWARD_BOX_110);
|
giveItems(member, BENUSTAS_REWARD_BOX_110);
|
||||||
}
|
}
|
||||||
|
if (world.getPlayersCount() == INITIAL_PARTY_MEMBERS)
|
||||||
|
{
|
||||||
|
if (getRandom(100) < 80)
|
||||||
|
{
|
||||||
|
if (randomPl != null)
|
||||||
|
{
|
||||||
|
giveItems(randomPl, BENUSTAS_SHINING_REWARD_BOX);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
showOnScreenMsg(world, NpcStringId.THE_WATER_POWER_PROTECTING_QUEEN_KROSHA_HAS_DISAPPEARED, ExShowScreenMessage.TOP_CENTER, 7000, true);
|
showOnScreenMsg(world, NpcStringId.THE_WATER_POWER_PROTECTING_QUEEN_KROSHA_HAS_DISAPPEARED, ExShowScreenMessage.TOP_CENTER, 7000, true);
|
||||||
world.finishInstance();
|
world.finishInstance();
|
||||||
}
|
}
|
||||||
|
4
L2J_Mobius_10.1_MasterClass/dist/game/data/scripts/instances/KrofinNest/condNoLevel.html
vendored
Normal file
4
L2J_Mobius_10.1_MasterClass/dist/game/data/scripts/instances/KrofinNest/condNoLevel.html
vendored
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
<html><body>Benusta:<br>
|
||||||
|
You are too weak. I won't let you enter.<br>
|
||||||
|
(Only players of at least level 105 may participate.)
|
||||||
|
</body></html>
|
4
L2J_Mobius_10.1_MasterClass/dist/game/data/scripts/instances/KrofinNest/condNoLevel110.html
vendored
Normal file
4
L2J_Mobius_10.1_MasterClass/dist/game/data/scripts/instances/KrofinNest/condNoLevel110.html
vendored
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
<html><body>Benusta:<br>
|
||||||
|
You are too weak. I won't let you enter.<br>
|
||||||
|
(Only players of at least level 110 may participate.)
|
||||||
|
</body></html>
|
@@ -22,8 +22,9 @@
|
|||||||
<condition type="GroupMax">
|
<condition type="GroupMax">
|
||||||
<param name="limit" value="7" />
|
<param name="limit" value="7" />
|
||||||
</condition>
|
</condition>
|
||||||
<condition type="Level">
|
<condition type="Level" showMessageAndHtml="true">
|
||||||
<param name="min" value="105" />
|
<param name="min" value="105" />
|
||||||
|
<param name="html" value="condNoLevel.html" />
|
||||||
</condition>
|
</condition>
|
||||||
<condition type="Distance" />
|
<condition type="Distance" />
|
||||||
</conditions>
|
</conditions>
|
||||||
|
@@ -22,8 +22,9 @@
|
|||||||
<condition type="GroupMax">
|
<condition type="GroupMax">
|
||||||
<param name="limit" value="7" />
|
<param name="limit" value="7" />
|
||||||
</condition>
|
</condition>
|
||||||
<condition type="Level">
|
<condition type="Level" showMessageAndHtml="true">
|
||||||
<param name="min" value="105" />
|
<param name="min" value="110" />
|
||||||
|
<param name="html" value="condNoLevel110.html" />
|
||||||
</condition>
|
</condition>
|
||||||
<condition type="Distance" />
|
<condition type="Distance" />
|
||||||
</conditions>
|
</conditions>
|
||||||
|
@@ -28,6 +28,7 @@ import org.l2jmobius.gameserver.model.instancezone.Instance;
|
|||||||
import org.l2jmobius.gameserver.network.NpcStringId;
|
import org.l2jmobius.gameserver.network.NpcStringId;
|
||||||
import org.l2jmobius.gameserver.network.SystemMessageId;
|
import org.l2jmobius.gameserver.network.SystemMessageId;
|
||||||
import org.l2jmobius.gameserver.network.serverpackets.ExShowScreenMessage;
|
import org.l2jmobius.gameserver.network.serverpackets.ExShowScreenMessage;
|
||||||
|
import org.l2jmobius.gameserver.network.serverpackets.OnEventTrigger;
|
||||||
import org.l2jmobius.gameserver.network.serverpackets.SystemMessage;
|
import org.l2jmobius.gameserver.network.serverpackets.SystemMessage;
|
||||||
|
|
||||||
import instances.AbstractInstance;
|
import instances.AbstractInstance;
|
||||||
@@ -101,6 +102,7 @@ public class KrofinNest extends AbstractInstance
|
|||||||
};
|
};
|
||||||
// Items
|
// Items
|
||||||
private static final ItemHolder BENUSTAS_REWARD_BOX = new ItemHolder(81151, 1);
|
private static final ItemHolder BENUSTAS_REWARD_BOX = new ItemHolder(81151, 1);
|
||||||
|
private static final ItemHolder BENUSTAS_SHINING_REWARD_BOX = new ItemHolder(81452, 1);
|
||||||
private static final ItemHolder BENUSTAS_REWARD_BOX_110 = new ItemHolder(81741, 1);
|
private static final ItemHolder BENUSTAS_REWARD_BOX_110 = new ItemHolder(81741, 1);
|
||||||
// Misc
|
// Misc
|
||||||
private static final int[] TEMPLATE_IDS =
|
private static final int[] TEMPLATE_IDS =
|
||||||
@@ -108,10 +110,21 @@ public class KrofinNest extends AbstractInstance
|
|||||||
291, // lv. 105
|
291, // lv. 105
|
||||||
315, // lv. 110
|
315, // lv. 110
|
||||||
};
|
};
|
||||||
|
private static int INITIAL_PARTY_MEMBERS = 0;
|
||||||
private static final int DOOR1 = 23220101;
|
private static final int DOOR1 = 23220101;
|
||||||
private static final int DOOR2 = 24250002;
|
private static final int DOOR2 = 24250002;
|
||||||
private static final int DOOR3 = 24250004;
|
private static final int DOOR3 = 24250004;
|
||||||
private static final int DOOR4 = 24250006;
|
private static final int DOOR4 = 24250006;
|
||||||
|
// Effect Triggers
|
||||||
|
private static final int DOOR1_CLOSED = 23227500;
|
||||||
|
private static final int DOOR1_OPENING = 23227502;
|
||||||
|
private static final int DOOR2_CLOSED = 24257710;
|
||||||
|
private static final int DOOR2_OPENING = 24257712;
|
||||||
|
private static final int DOOR3_CLOSED = 24257720;
|
||||||
|
private static final int DOOR3_OPENING = 24257722;
|
||||||
|
private static final int DOOR4_CLOSED = 24257730;
|
||||||
|
private static final int DOOR4_OPENING = 24257732;
|
||||||
|
private static final int BOSS_WATERFALL = 24257780;
|
||||||
|
|
||||||
public KrofinNest()
|
public KrofinNest()
|
||||||
{
|
{
|
||||||
@@ -195,6 +208,107 @@ public class KrofinNest extends AbstractInstance
|
|||||||
if (player.getInstanceWorld() != null)
|
if (player.getInstanceWorld() != null)
|
||||||
{
|
{
|
||||||
startQuestTimer("check_status", 1000, null, player);
|
startQuestTimer("check_status", 1000, null, player);
|
||||||
|
startQuestTimer("door_closed_effects", 1000, null, player);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (event.equals("door_closed_effects"))
|
||||||
|
{
|
||||||
|
final Instance world = player.getInstanceWorld();
|
||||||
|
if (!isInInstance(world))
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (world.getStatus())
|
||||||
|
{
|
||||||
|
case 1:
|
||||||
|
{
|
||||||
|
world.broadcastPacket(new OnEventTrigger(DOOR1_CLOSED, true));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 2:
|
||||||
|
{
|
||||||
|
world.broadcastPacket(new OnEventTrigger(DOOR2_CLOSED, true));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 3:
|
||||||
|
{
|
||||||
|
world.broadcastPacket(new OnEventTrigger(DOOR3_CLOSED, true));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 4:
|
||||||
|
{
|
||||||
|
world.broadcastPacket(new OnEventTrigger(DOOR4_CLOSED, true));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (event.equals("door_opening_effects"))
|
||||||
|
{
|
||||||
|
final Instance world = player.getInstanceWorld();
|
||||||
|
if (!isInInstance(world))
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (world.getStatus())
|
||||||
|
{
|
||||||
|
case 2:
|
||||||
|
{
|
||||||
|
world.broadcastPacket(new OnEventTrigger(DOOR1_OPENING, true));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 3:
|
||||||
|
{
|
||||||
|
world.broadcastPacket(new OnEventTrigger(DOOR2_OPENING, true));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 4:
|
||||||
|
{
|
||||||
|
world.broadcastPacket(new OnEventTrigger(DOOR3_OPENING, true));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 5:
|
||||||
|
{
|
||||||
|
world.broadcastPacket(new OnEventTrigger(DOOR4_OPENING, true));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (event.equals("door_effects_off"))
|
||||||
|
{
|
||||||
|
final Instance world = player.getInstanceWorld();
|
||||||
|
if (!isInInstance(world))
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (world.getStatus())
|
||||||
|
{
|
||||||
|
case 2:
|
||||||
|
{
|
||||||
|
world.broadcastPacket(new OnEventTrigger(DOOR1_OPENING, false));
|
||||||
|
world.broadcastPacket(new OnEventTrigger(DOOR1_CLOSED, false));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 3:
|
||||||
|
{
|
||||||
|
world.broadcastPacket(new OnEventTrigger(DOOR2_OPENING, false));
|
||||||
|
world.broadcastPacket(new OnEventTrigger(DOOR2_CLOSED, false));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 4:
|
||||||
|
{
|
||||||
|
world.broadcastPacket(new OnEventTrigger(DOOR3_OPENING, false));
|
||||||
|
world.broadcastPacket(new OnEventTrigger(DOOR3_CLOSED, false));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 5:
|
||||||
|
{
|
||||||
|
world.broadcastPacket(new OnEventTrigger(DOOR4_OPENING, false));
|
||||||
|
world.broadcastPacket(new OnEventTrigger(DOOR4_CLOSED, false));
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (event.equals("check_status"))
|
else if (event.equals("check_status"))
|
||||||
@@ -211,6 +325,7 @@ public class KrofinNest extends AbstractInstance
|
|||||||
{
|
{
|
||||||
world.setStatus(1);
|
world.setStatus(1);
|
||||||
world.spawnGroup("FIRST_AREA");
|
world.spawnGroup("FIRST_AREA");
|
||||||
|
startQuestTimer("door_closed_effects", 2000, null, player);
|
||||||
startQuestTimer("check_status", 10000, null, player);
|
startQuestTimer("check_status", 10000, null, player);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -221,7 +336,10 @@ public class KrofinNest extends AbstractInstance
|
|||||||
showOnScreenMsg(world, NpcStringId.THE_WATER_ENERGY_IS_NO_LONGER_ACTIVE_THE_WAY_IS_CLEAR, ExShowScreenMessage.TOP_CENTER, 10000, true);
|
showOnScreenMsg(world, NpcStringId.THE_WATER_ENERGY_IS_NO_LONGER_ACTIVE_THE_WAY_IS_CLEAR, ExShowScreenMessage.TOP_CENTER, 10000, true);
|
||||||
world.setStatus(2);
|
world.setStatus(2);
|
||||||
world.getDoor(DOOR1).openMe();
|
world.getDoor(DOOR1).openMe();
|
||||||
|
startQuestTimer("door_opening_effects", 1000, null, player);
|
||||||
|
startQuestTimer("door_effects_off", 5000, null, player);
|
||||||
world.spawnGroup("SECOND_AREA");
|
world.spawnGroup("SECOND_AREA");
|
||||||
|
startQuestTimer("door_closed_effects", 10000, null, player);
|
||||||
}
|
}
|
||||||
startQuestTimer("check_status", 1000, null, player);
|
startQuestTimer("check_status", 1000, null, player);
|
||||||
break;
|
break;
|
||||||
@@ -233,7 +351,10 @@ public class KrofinNest extends AbstractInstance
|
|||||||
showOnScreenMsg(world, NpcStringId.THE_WATER_ENERGY_IS_NO_LONGER_ACTIVE_THE_WAY_IS_CLEAR, ExShowScreenMessage.TOP_CENTER, 10000, true);
|
showOnScreenMsg(world, NpcStringId.THE_WATER_ENERGY_IS_NO_LONGER_ACTIVE_THE_WAY_IS_CLEAR, ExShowScreenMessage.TOP_CENTER, 10000, true);
|
||||||
world.setStatus(3);
|
world.setStatus(3);
|
||||||
world.getDoor(DOOR2).openMe();
|
world.getDoor(DOOR2).openMe();
|
||||||
|
startQuestTimer("door_opening_effects", 1000, null, player);
|
||||||
|
startQuestTimer("door_effects_off", 5000, null, player);
|
||||||
world.spawnGroup("THIRD_AREA");
|
world.spawnGroup("THIRD_AREA");
|
||||||
|
startQuestTimer("door_closed_effects", 2000, null, player);
|
||||||
}
|
}
|
||||||
startQuestTimer("check_status", 10000, null, player);
|
startQuestTimer("check_status", 10000, null, player);
|
||||||
break;
|
break;
|
||||||
@@ -245,7 +366,10 @@ public class KrofinNest extends AbstractInstance
|
|||||||
showOnScreenMsg(world, NpcStringId.THE_WATER_ENERGY_IS_NO_LONGER_ACTIVE_THE_WAY_IS_CLEAR, ExShowScreenMessage.TOP_CENTER, 10000, true);
|
showOnScreenMsg(world, NpcStringId.THE_WATER_ENERGY_IS_NO_LONGER_ACTIVE_THE_WAY_IS_CLEAR, ExShowScreenMessage.TOP_CENTER, 10000, true);
|
||||||
world.setStatus(4);
|
world.setStatus(4);
|
||||||
world.getDoor(DOOR3).openMe();
|
world.getDoor(DOOR3).openMe();
|
||||||
|
startQuestTimer("door_opening_effects", 1000, null, player);
|
||||||
|
startQuestTimer("door_effects_off", 5000, null, player);
|
||||||
world.spawnGroup("FOURTH_AREA");
|
world.spawnGroup("FOURTH_AREA");
|
||||||
|
startQuestTimer("door_closed_effects", 2000, null, player);
|
||||||
}
|
}
|
||||||
startQuestTimer("check_status", 10000, null, player);
|
startQuestTimer("check_status", 10000, null, player);
|
||||||
break;
|
break;
|
||||||
@@ -257,7 +381,10 @@ public class KrofinNest extends AbstractInstance
|
|||||||
showOnScreenMsg(world, NpcStringId.THE_WATER_ENERGY_IS_NO_LONGER_ACTIVE_THE_WAY_IS_CLEAR, ExShowScreenMessage.TOP_CENTER, 10000, true);
|
showOnScreenMsg(world, NpcStringId.THE_WATER_ENERGY_IS_NO_LONGER_ACTIVE_THE_WAY_IS_CLEAR, ExShowScreenMessage.TOP_CENTER, 10000, true);
|
||||||
world.setStatus(5);
|
world.setStatus(5);
|
||||||
world.getDoor(DOOR4).openMe();
|
world.getDoor(DOOR4).openMe();
|
||||||
|
startQuestTimer("door_opening_effects", 1000, null, player);
|
||||||
|
startQuestTimer("door_effects_off", 5000, null, player);
|
||||||
world.spawnGroup(world.getTemplateId() == TEMPLATE_IDS[0] ? "KROSHA_FIRST_FORM" : "KROSHA_FINAL_FORM");
|
world.spawnGroup(world.getTemplateId() == TEMPLATE_IDS[0] ? "KROSHA_FIRST_FORM" : "KROSHA_FINAL_FORM");
|
||||||
|
world.broadcastPacket(new OnEventTrigger(BOSS_WATERFALL, true));
|
||||||
}
|
}
|
||||||
startQuestTimer("check_status", 10000, null, player);
|
startQuestTimer("check_status", 10000, null, player);
|
||||||
break;
|
break;
|
||||||
@@ -301,6 +428,12 @@ public class KrofinNest extends AbstractInstance
|
|||||||
return super.onAttack(npc, attacker, damage, isSummon);
|
return super.onAttack(npc, attacker, damage, isSummon);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onInstanceCreated(Instance instance, Player player)
|
||||||
|
{
|
||||||
|
INITIAL_PARTY_MEMBERS = (player.getParty() != null ? player.getParty().getMemberCount() : 1);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String onKill(Npc npc, Player killer, boolean isPet)
|
public String onKill(Npc npc, Player killer, boolean isPet)
|
||||||
{
|
{
|
||||||
@@ -308,6 +441,8 @@ public class KrofinNest extends AbstractInstance
|
|||||||
if (isInInstance(world))
|
if (isInInstance(world))
|
||||||
{
|
{
|
||||||
final boolean kroshaFirstFormMinionsSpawnedTwice = world.getParameters().getBoolean("KROSHA_FIRST_FORM_MINIONS_SPAWNED_TWICE", false);
|
final boolean kroshaFirstFormMinionsSpawnedTwice = world.getParameters().getBoolean("KROSHA_FIRST_FORM_MINIONS_SPAWNED_TWICE", false);
|
||||||
|
final boolean kroshaFinalFormSpawned = world.getParameters().getBoolean("KROSHA_FINAL_FORM_SPAWNED", false);
|
||||||
|
final Player randomPl = world.getFirstPlayer().getParty().getRandomPlayer();
|
||||||
if (world.getStatus() == 5)
|
if (world.getStatus() == 5)
|
||||||
{
|
{
|
||||||
if (CommonUtil.contains(KROSHA_FIRST_FORM_MINIONS, npc.getId()))
|
if (CommonUtil.contains(KROSHA_FIRST_FORM_MINIONS, npc.getId()))
|
||||||
@@ -326,9 +461,10 @@ public class KrofinNest extends AbstractInstance
|
|||||||
}
|
}
|
||||||
else if (CommonUtil.contains(ENHANCED_MINIONS, npc.getId()))
|
else if (CommonUtil.contains(ENHANCED_MINIONS, npc.getId()))
|
||||||
{
|
{
|
||||||
if (world.getAliveNpcCount(ENHANCED_MINIONS) == 0)
|
if ((world.getAliveNpcCount(ENHANCED_MINIONS) == 0) && !kroshaFinalFormSpawned)
|
||||||
{
|
{
|
||||||
world.spawnGroup("KROSHA_FINAL_FORM");
|
world.spawnGroup("KROSHA_FINAL_FORM");
|
||||||
|
world.getParameters().set("KROSHA_FINAL_FORM_SPAWNED", true);
|
||||||
showOnScreenMsg(world, NpcStringId.QUEEN_KROSHA_HAS_RETURNED_MORE_POWERFUL_THAN_EVER, ExShowScreenMessage.TOP_CENTER, 7000, true);
|
showOnScreenMsg(world, NpcStringId.QUEEN_KROSHA_HAS_RETURNED_MORE_POWERFUL_THAN_EVER, ExShowScreenMessage.TOP_CENTER, 7000, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -338,6 +474,16 @@ public class KrofinNest extends AbstractInstance
|
|||||||
{
|
{
|
||||||
giveItems(member, BENUSTAS_REWARD_BOX);
|
giveItems(member, BENUSTAS_REWARD_BOX);
|
||||||
}
|
}
|
||||||
|
if (world.getPlayersCount() == INITIAL_PARTY_MEMBERS)
|
||||||
|
{
|
||||||
|
if (getRandom(100) < 80)
|
||||||
|
{
|
||||||
|
if (randomPl != null)
|
||||||
|
{
|
||||||
|
giveItems(randomPl, BENUSTAS_SHINING_REWARD_BOX);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
showOnScreenMsg(world, NpcStringId.THE_WATER_POWER_PROTECTING_QUEEN_KROSHA_HAS_DISAPPEARED, ExShowScreenMessage.TOP_CENTER, 7000, true);
|
showOnScreenMsg(world, NpcStringId.THE_WATER_POWER_PROTECTING_QUEEN_KROSHA_HAS_DISAPPEARED, ExShowScreenMessage.TOP_CENTER, 7000, true);
|
||||||
world.finishInstance();
|
world.finishInstance();
|
||||||
}
|
}
|
||||||
@@ -347,6 +493,16 @@ public class KrofinNest extends AbstractInstance
|
|||||||
{
|
{
|
||||||
giveItems(member, BENUSTAS_REWARD_BOX_110);
|
giveItems(member, BENUSTAS_REWARD_BOX_110);
|
||||||
}
|
}
|
||||||
|
if (world.getPlayersCount() == INITIAL_PARTY_MEMBERS)
|
||||||
|
{
|
||||||
|
if (getRandom(100) < 80)
|
||||||
|
{
|
||||||
|
if (randomPl != null)
|
||||||
|
{
|
||||||
|
giveItems(randomPl, BENUSTAS_SHINING_REWARD_BOX);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
showOnScreenMsg(world, NpcStringId.THE_WATER_POWER_PROTECTING_QUEEN_KROSHA_HAS_DISAPPEARED, ExShowScreenMessage.TOP_CENTER, 7000, true);
|
showOnScreenMsg(world, NpcStringId.THE_WATER_POWER_PROTECTING_QUEEN_KROSHA_HAS_DISAPPEARED, ExShowScreenMessage.TOP_CENTER, 7000, true);
|
||||||
world.finishInstance();
|
world.finishInstance();
|
||||||
}
|
}
|
||||||
|
4
L2J_Mobius_10.2_MasterClass/dist/game/data/scripts/instances/KrofinNest/condNoLevel.html
vendored
Normal file
4
L2J_Mobius_10.2_MasterClass/dist/game/data/scripts/instances/KrofinNest/condNoLevel.html
vendored
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
<html><body>Benusta:<br>
|
||||||
|
You are too weak. I won't let you enter.<br>
|
||||||
|
(Only players of at least level 105 may participate.)
|
||||||
|
</body></html>
|
4
L2J_Mobius_10.2_MasterClass/dist/game/data/scripts/instances/KrofinNest/condNoLevel110.html
vendored
Normal file
4
L2J_Mobius_10.2_MasterClass/dist/game/data/scripts/instances/KrofinNest/condNoLevel110.html
vendored
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
<html><body>Benusta:<br>
|
||||||
|
You are too weak. I won't let you enter.<br>
|
||||||
|
(Only players of at least level 110 may participate.)
|
||||||
|
</body></html>
|
Reference in New Issue
Block a user