Sync with L2JServer Feb 3rd 2015.
This commit is contained in:
@ -18,22 +18,18 @@
|
||||
*/
|
||||
package instances.CavernOfThePirateCaptain;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Calendar;
|
||||
import java.util.List;
|
||||
import instances.AbstractInstance;
|
||||
|
||||
import ai.npc.AbstractNpcAI;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import com.l2jserver.gameserver.instancemanager.InstanceManager;
|
||||
import com.l2jserver.gameserver.model.L2Party;
|
||||
import com.l2jserver.gameserver.model.L2World;
|
||||
import com.l2jserver.gameserver.model.Location;
|
||||
import com.l2jserver.gameserver.model.PcCondOverride;
|
||||
import com.l2jserver.gameserver.model.actor.L2Attackable;
|
||||
import com.l2jserver.gameserver.model.actor.L2Npc;
|
||||
import com.l2jserver.gameserver.model.actor.L2Summon;
|
||||
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
|
||||
import com.l2jserver.gameserver.model.entity.Instance;
|
||||
import com.l2jserver.gameserver.model.instancezone.InstanceWorld;
|
||||
import com.l2jserver.gameserver.network.NpcStringId;
|
||||
import com.l2jserver.gameserver.network.SystemMessageId;
|
||||
@ -43,22 +39,21 @@ import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
|
||||
* Cavern Of The Pirate Captain (Day Dream) instance Zone.
|
||||
* @author St3eT
|
||||
*/
|
||||
public class CavernOfThePirateCaptain extends AbstractNpcAI
|
||||
public final class CavernOfThePirateCaptain extends AbstractInstance
|
||||
{
|
||||
protected class CavernOfThePirateCaptainWorld extends InstanceWorld
|
||||
{
|
||||
List<L2PcInstance> playersInside = new ArrayList<>();
|
||||
L2Attackable _zaken;
|
||||
long storeTime = 0;
|
||||
boolean _is83;
|
||||
int _zakenRoom;
|
||||
int _blueFounded;
|
||||
protected List<L2PcInstance> playersInside = new ArrayList<>();
|
||||
protected L2Attackable _zaken;
|
||||
protected long storeTime = 0;
|
||||
protected boolean _is83;
|
||||
protected int _zakenRoom;
|
||||
protected int _blueFounded;
|
||||
}
|
||||
|
||||
// NPCs
|
||||
private static final int PATHFINDER = 32713; // Pathfinder Worker
|
||||
private static final int ZAKEN_60 = 29176; // Zaken
|
||||
private static final int ZAKEN_60_NIGHT = 29022; // Zaken Night
|
||||
private static final int ZAKEN_83 = 29181; // Zaken
|
||||
private static final int CANDLE = 32705; // Zaken's Candle
|
||||
private static final int DOLL_BLADER_60 = 29023; // Doll Blader
|
||||
@ -72,9 +67,6 @@ public class CavernOfThePirateCaptain extends AbstractNpcAI
|
||||
// Items
|
||||
private static final int VORPAL_RING = 15763; // Sealed Vorpal Ring
|
||||
private static final int VORPAL_EARRING = 15764; // Sealed Vorpal Earring
|
||||
private static final int FIRE = 15280; // Transparent 1HS (for NPC)
|
||||
private static final int RED = 15281; // Transparent 1HS (for NPC)
|
||||
private static final int BLUE = 15302; // Transparent Bow (for NPC)
|
||||
// Locations
|
||||
private static final Location[] ENTER_LOC =
|
||||
{
|
||||
@ -129,19 +121,10 @@ public class CavernOfThePirateCaptain extends AbstractNpcAI
|
||||
private static final int MIN_LV_83 = 78;
|
||||
private static final int PLAYERS_60_MIN = 9;
|
||||
private static final int PLAYERS_60_MAX = 27;
|
||||
private static final int PLAYERS_60_NIGHT_MIN = 72;
|
||||
private static final int PLAYERS_60_NIGHT_MAX = 450;
|
||||
private static final int PLAYERS_83_MIN = 9;
|
||||
private static final int PLAYERS_83_MAX = 27;
|
||||
private static final int TEMPLATE_ID_60 = 133;
|
||||
private static final int TEMPLATE_ID_60_NIGHT = 114;
|
||||
private static final int TEMPLATE_ID_83 = 135;
|
||||
private static final int HOURS = 6;
|
||||
private static final int MINUTES = 30;
|
||||
private static final int DAY_A = Calendar.MONDAY;
|
||||
private static final int DAY_B = Calendar.WEDNESDAY;
|
||||
private static final int DAY_C = Calendar.FRIDAY;
|
||||
private static boolean isNight = false;
|
||||
//@formatter:off
|
||||
private static final int[][] ROOM_DATA =
|
||||
{
|
||||
@ -166,39 +149,22 @@ public class CavernOfThePirateCaptain extends AbstractNpcAI
|
||||
};
|
||||
//@formatter:on
|
||||
|
||||
private CavernOfThePirateCaptain()
|
||||
public CavernOfThePirateCaptain()
|
||||
{
|
||||
super(CavernOfThePirateCaptain.class.getSimpleName(), "instances");
|
||||
super(CavernOfThePirateCaptain.class.getSimpleName());
|
||||
addStartNpc(PATHFINDER);
|
||||
addTalkId(PATHFINDER);
|
||||
addKillId(ZAKEN_60, ZAKEN_60_NIGHT, ZAKEN_83);
|
||||
addKillId(ZAKEN_60, ZAKEN_83);
|
||||
addFirstTalkId(CANDLE);
|
||||
}
|
||||
|
||||
private void enterInstance(L2PcInstance player, String template, boolean is83)
|
||||
@Override
|
||||
public void onEnterInstance(L2PcInstance player, InstanceWorld world, boolean firstEntrance)
|
||||
{
|
||||
InstanceWorld world = InstanceManager.getInstance().getPlayerWorld(player);
|
||||
|
||||
if (world != null)
|
||||
if (firstEntrance)
|
||||
{
|
||||
if (world instanceof CavernOfThePirateCaptainWorld)
|
||||
{
|
||||
teleportPlayer(player, ENTER_LOC[getRandom(ENTER_LOC.length)], world.getInstanceId(), false);
|
||||
return;
|
||||
}
|
||||
player.sendPacket(SystemMessageId.YOU_HAVE_ENTERED_ANOTHER_INSTANT_ZONE_THEREFORE_YOU_CANNOT_ENTER_CORRESPONDING_DUNGEON);
|
||||
return;
|
||||
}
|
||||
|
||||
if (checkConditions(player, is83))
|
||||
{
|
||||
world = new CavernOfThePirateCaptainWorld();
|
||||
world.setInstanceId(InstanceManager.getInstance().createDynamicInstance(template));
|
||||
world.setTemplateId(is83 ? TEMPLATE_ID_83 : (isNight ? TEMPLATE_ID_60_NIGHT : TEMPLATE_ID_60));
|
||||
world.setStatus(0);
|
||||
InstanceManager.getInstance().addWorld(world);
|
||||
final CavernOfThePirateCaptainWorld curworld = (CavernOfThePirateCaptainWorld) world;
|
||||
curworld._is83 = is83;
|
||||
curworld._is83 = curworld.getTemplateId() == TEMPLATE_ID_83;
|
||||
curworld.storeTime = System.currentTimeMillis();
|
||||
|
||||
if (!player.isInParty())
|
||||
@ -221,26 +187,21 @@ public class CavernOfThePirateCaptain extends AbstractNpcAI
|
||||
}
|
||||
manageNpcSpawn(curworld);
|
||||
}
|
||||
else
|
||||
{
|
||||
teleportPlayer(player, ENTER_LOC[getRandom(ENTER_LOC.length)], world.getInstanceId(), false);
|
||||
}
|
||||
}
|
||||
|
||||
private void managePlayerEnter(L2PcInstance player, CavernOfThePirateCaptainWorld world)
|
||||
{
|
||||
if (!world._is83)
|
||||
{
|
||||
player.stopAllEffectsExceptThoseThatLastThroughDeath();
|
||||
final L2Summon pet = player.getPet();
|
||||
if (pet != null)
|
||||
{
|
||||
pet.stopAllEffectsExceptThoseThatLastThroughDeath();
|
||||
}
|
||||
player.getServitors().values().forEach(L2Summon::stopAllEffectsExceptThoseThatLastThroughDeath);
|
||||
}
|
||||
world.playersInside.add(player);
|
||||
world.addAllowed(player.getObjectId());
|
||||
teleportPlayer(player, ENTER_LOC[getRandom(ENTER_LOC.length)], world.getInstanceId(), false);
|
||||
}
|
||||
|
||||
private boolean checkConditions(L2PcInstance player, boolean is83)
|
||||
@Override
|
||||
protected boolean checkConditions(L2PcInstance player)
|
||||
{
|
||||
if (player.canOverrideCond(PcCondOverride.INSTANCE_CONDITIONS))
|
||||
{
|
||||
@ -253,6 +214,7 @@ public class CavernOfThePirateCaptain extends AbstractNpcAI
|
||||
return false;
|
||||
}
|
||||
|
||||
final boolean is83 = InstanceManager.getInstance().getPlayerWorld(player).getTemplateId() == TEMPLATE_ID_83 ? true : false;
|
||||
final L2Party party = player.getParty();
|
||||
final boolean isInCC = party.isInCommandChannel();
|
||||
final List<L2PcInstance> members = (isInCC) ? party.getCommandChannel().getMembers() : party.getMembers();
|
||||
@ -264,7 +226,7 @@ public class CavernOfThePirateCaptain extends AbstractNpcAI
|
||||
return false;
|
||||
}
|
||||
|
||||
if ((members.size() < (is83 ? PLAYERS_83_MIN : (isNight ? PLAYERS_60_NIGHT_MIN : PLAYERS_60_MIN))) || (members.size() > (is83 ? PLAYERS_83_MAX : (isNight ? PLAYERS_60_NIGHT_MAX : PLAYERS_60_MAX))))
|
||||
if ((members.size() < (is83 ? PLAYERS_83_MIN : PLAYERS_60_MIN)) || (members.size() > (is83 ? PLAYERS_83_MAX : PLAYERS_60_MAX)))
|
||||
{
|
||||
broadcastSystemMessage(player, null, SystemMessageId.YOU_CANNOT_ENTER_DUE_TO_THE_PARTY_HAVING_EXCEEDED_THE_LIMIT, false);
|
||||
return false;
|
||||
@ -284,7 +246,7 @@ public class CavernOfThePirateCaptain extends AbstractNpcAI
|
||||
return false;
|
||||
}
|
||||
|
||||
final Long reentertime = InstanceManager.getInstance().getInstanceTime(groupMembers.getObjectId(), (is83 ? TEMPLATE_ID_83 : (isNight ? TEMPLATE_ID_60_NIGHT : TEMPLATE_ID_60)));
|
||||
final Long reentertime = InstanceManager.getInstance().getInstanceTime(groupMembers.getObjectId(), (is83 ? TEMPLATE_ID_83 : TEMPLATE_ID_60));
|
||||
if (System.currentTimeMillis() < reentertime)
|
||||
{
|
||||
broadcastSystemMessage(player, groupMembers, SystemMessageId.C1_MAY_NOT_RE_ENTER_YET, true);
|
||||
@ -322,16 +284,11 @@ public class CavernOfThePirateCaptain extends AbstractNpcAI
|
||||
{
|
||||
if (event.equals("enter60"))
|
||||
{
|
||||
enterInstance(player, "CavernOfThePirateCaptainWorldDay60.xml", false);
|
||||
}
|
||||
else if (event.equals("enter60night"))
|
||||
{
|
||||
isNight = true;
|
||||
enterInstance(player, "CavernOfThePirateCaptainWorldNight60.xml", false);
|
||||
enterInstance(player, new CavernOfThePirateCaptainWorld(), "CavernOfThePirateCaptainWorldDay60.xml", TEMPLATE_ID_60);
|
||||
}
|
||||
else if (event.equals("enter83"))
|
||||
{
|
||||
enterInstance(player, "CavernOfThePirateCaptainWorldDay83.xml", true);
|
||||
enterInstance(player, new CavernOfThePirateCaptainWorld(), "CavernOfThePirateCaptainWorldDay83.xml", TEMPLATE_ID_83);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -345,9 +302,9 @@ public class CavernOfThePirateCaptain extends AbstractNpcAI
|
||||
{
|
||||
case "BURN_BLUE":
|
||||
{
|
||||
if (npc.getRightHandItem() == 0)
|
||||
if (npc.isState(0))
|
||||
{
|
||||
npc.setRHandId(FIRE);
|
||||
npc.setState(1); // Burning
|
||||
startQuestTimer("BURN_BLUE2", 3000, npc, player);
|
||||
if (world._blueFounded == 4)
|
||||
{
|
||||
@ -358,27 +315,27 @@ public class CavernOfThePirateCaptain extends AbstractNpcAI
|
||||
}
|
||||
case "BURN_BLUE2":
|
||||
{
|
||||
if (npc.getRightHandItem() == FIRE)
|
||||
if (npc.isState(1)) // Burning
|
||||
{
|
||||
npc.setRHandId(BLUE);
|
||||
npc.setState(3); // Blue glow
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "BURN_RED":
|
||||
{
|
||||
if (npc.getRightHandItem() == 0)
|
||||
if (npc.isState(0))
|
||||
{
|
||||
npc.setRHandId(FIRE);
|
||||
npc.setState(1); // Burning
|
||||
startQuestTimer("BURN_RED2", 3000, npc, player);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "BURN_RED2":
|
||||
{
|
||||
if (npc.getRightHandItem() == FIRE)
|
||||
if (npc.isState(1)) // Burning
|
||||
{
|
||||
final int room = getRoomByCandle(npc);
|
||||
npc.setRHandId(RED);
|
||||
npc.setState(2); // Red glow
|
||||
manageScreenMsg(world, NpcStringId.THE_CANDLES_CAN_LEAD_YOU_TO_ZAKEN_DESTROY_HIM);
|
||||
spawnNpc(world._is83 ? DOLL_BLADER_83 : DOLL_BLADER_60, room, player, world);
|
||||
spawnNpc(world._is83 ? VALE_MASTER_83 : VALE_MASTER_60, room, player, world);
|
||||
@ -414,7 +371,6 @@ public class CavernOfThePirateCaptain extends AbstractNpcAI
|
||||
if ((tmpworld != null) && (tmpworld instanceof CavernOfThePirateCaptainWorld))
|
||||
{
|
||||
final CavernOfThePirateCaptainWorld world = (CavernOfThePirateCaptainWorld) tmpworld;
|
||||
final Instance inst = InstanceManager.getInstance().getInstance(world.getInstanceId());
|
||||
|
||||
if (npc.getId() == ZAKEN_83)
|
||||
{
|
||||
@ -447,9 +403,7 @@ public class CavernOfThePirateCaptain extends AbstractNpcAI
|
||||
}
|
||||
}
|
||||
}
|
||||
saveReenterForPlayers(world);
|
||||
inst.setDuration(300000);
|
||||
inst.setEmptyDestroyTime(0);
|
||||
finishInstance(world);
|
||||
}
|
||||
return super.onKill(npc, killer, isSummon);
|
||||
}
|
||||
@ -514,14 +468,14 @@ public class CavernOfThePirateCaptain extends AbstractNpcAI
|
||||
{
|
||||
if ((players != null) && (players.getInstanceId() == world.getInstanceId()))
|
||||
{
|
||||
showOnScreenMsg(players, stringId, 2, 6000);
|
||||
showOnScreenMsg(players, stringId, 5, 6000);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private L2Attackable spawnNpc(int npcId, int roomId, L2PcInstance player, CavernOfThePirateCaptainWorld world)
|
||||
{
|
||||
if ((player != null) && (npcId != ZAKEN_60) && (npcId != ZAKEN_60_NIGHT) && (npcId != ZAKEN_83))
|
||||
if ((player != null) && (npcId != ZAKEN_60) && (npcId != ZAKEN_83))
|
||||
{
|
||||
final L2Attackable mob = (L2Attackable) addSpawn(npcId, ROOM_DATA[roomId - 1][0] + getRandom(350), ROOM_DATA[roomId - 1][1] + getRandom(350), ROOM_DATA[roomId - 1][2], 0, false, 0, false, world.getInstanceId());
|
||||
addAttackPlayerDesire(mob, player);
|
||||
@ -546,60 +500,8 @@ public class CavernOfThePirateCaptain extends AbstractNpcAI
|
||||
{
|
||||
candles.get(ROOM_DATA[world._zakenRoom - 1][i] - 1).getVariables().set("isBlue", 1);
|
||||
}
|
||||
world._zaken = spawnNpc(world._is83 ? ZAKEN_83 : (isNight ? ZAKEN_60_NIGHT : ZAKEN_60), world._zakenRoom, null, world);
|
||||
world._zaken = spawnNpc(world._is83 ? ZAKEN_83 : ZAKEN_60, world._zakenRoom, null, world);
|
||||
world._zaken.setInvisible(true);
|
||||
world._zaken.setIsParalyzed(true);
|
||||
}
|
||||
|
||||
private void saveReenterForPlayers(InstanceWorld world)
|
||||
{
|
||||
final Calendar reenter = Calendar.getInstance();
|
||||
reenter.set(Calendar.MINUTE, MINUTES);
|
||||
reenter.set(Calendar.HOUR_OF_DAY, HOURS);
|
||||
|
||||
if (reenter.getTimeInMillis() <= System.currentTimeMillis())
|
||||
{
|
||||
reenter.add(Calendar.DAY_OF_MONTH, 1);
|
||||
}
|
||||
|
||||
if ((reenter.get(Calendar.DAY_OF_WEEK) <= DAY_A) || (reenter.get(Calendar.DAY_OF_WEEK) > DAY_C))
|
||||
{
|
||||
while (reenter.get(Calendar.DAY_OF_WEEK) != DAY_A)
|
||||
{
|
||||
reenter.add(Calendar.DAY_OF_MONTH, 1);
|
||||
}
|
||||
}
|
||||
else if (reenter.get(Calendar.DAY_OF_WEEK) <= DAY_B)
|
||||
{
|
||||
while (reenter.get(Calendar.DAY_OF_WEEK) != DAY_B)
|
||||
{
|
||||
reenter.add(Calendar.DAY_OF_MONTH, 1);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
while (reenter.get(Calendar.DAY_OF_WEEK) != DAY_C)
|
||||
{
|
||||
reenter.add(Calendar.DAY_OF_MONTH, 1);
|
||||
}
|
||||
}
|
||||
|
||||
final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.INSTANT_ZONE_S1_S_ENTRY_HAS_BEEN_RESTRICTED_YOU_CAN_CHECK_THE_NEXT_POSSIBLE_ENTRY_TIME_BY_USING_THE_COMMAND_INSTANCEZONE);
|
||||
sm.addString(InstanceManager.getInstance().getInstanceIdName(world.getTemplateId()));
|
||||
|
||||
for (int objectId : world.getAllowed())
|
||||
{
|
||||
final L2PcInstance player = L2World.getInstance().getPlayer(objectId);
|
||||
InstanceManager.getInstance().setInstanceTime(objectId, world.getTemplateId(), reenter.getTimeInMillis());
|
||||
if ((player != null) && player.isOnline())
|
||||
{
|
||||
player.sendPacket(sm);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void main(String[] args)
|
||||
{
|
||||
new CavernOfThePirateCaptain();
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user