Improvements for Seed of Destruction.

Contributed by Sahar.
This commit is contained in:
MobiusDev 2018-06-08 15:09:22 +00:00
parent 5375129879
commit 0cb542afd9

View File

@ -21,6 +21,7 @@ import java.util.Calendar;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import com.l2jmobius.Config;
import com.l2jmobius.commons.util.CommonUtil;
@ -48,12 +49,7 @@ import com.l2jmobius.gameserver.model.skills.Skill;
import com.l2jmobius.gameserver.model.zone.L2ZoneType;
import com.l2jmobius.gameserver.network.NpcStringId;
import com.l2jmobius.gameserver.network.SystemMessageId;
import com.l2jmobius.gameserver.network.serverpackets.CameraMode;
import com.l2jmobius.gameserver.network.serverpackets.ExShowScreenMessage;
import com.l2jmobius.gameserver.network.serverpackets.IClientOutgoingPacket;
import com.l2jmobius.gameserver.network.serverpackets.NormalCamera;
import com.l2jmobius.gameserver.network.serverpackets.SocialAction;
import com.l2jmobius.gameserver.network.serverpackets.SpecialCamera;
import com.l2jmobius.gameserver.network.serverpackets.SystemMessage;
import com.l2jmobius.gameserver.util.Util;
@ -67,18 +63,13 @@ public class SeedOfDestruction extends AbstractNpcAI
public int killedDevice = 0;
public int deviceSpawnedMobCount = 0;
public boolean ZoneWaitForTP = true;
public List<L2Npc> naezds = new ArrayList<>();
public List<L2PcInstance> PlayersInInstance = new ArrayList<>();
public List<L2Npc> _mags = new ArrayList<>();
L2Npc _tiat;
L2Npc _priest;
L2Npc _ChangePortal;
L2Npc _MovePeltast;
L2Npc _naezdTR1;
L2Npc _naezdTR2;
L2Npc _naezdTL1;
L2Npc _naezdTL2;
L2Npc _portalForCamera;
public SODWorld(Long time)
{
@ -103,10 +94,7 @@ public class SeedOfDestruction extends AbstractNpcAI
private static final int THRONE_POWERFUL_DEVICE = 18778;
private static final int SPAWN_DEVICE = 18696;
private static final int TIAT = 29163;
private static final int ChangePortal = 29172;
private static final int PRIEST = 29173;
private static final int NAEZD = 29162;
private static final int PELTAST = 22581;
private static final int[] SPAWN_MOB_IDS = {22536, 22537, 22538, 22539, 22540, 22541, 22542, 22543, 22544, 22547, 22550, 22551, 22552, 22596};
private static final int[] MOB_IDS = {22536, 22537, 22538, 22539, 22540, 22541, 22542, 22543, 22544, 22547, 22550, 22551, 22552, 22596, 29162};
private static final Location MOVE_TO_TIAT = new Location(-250403, 207273, -11952, 16384);
@ -787,13 +775,6 @@ public class SeedOfDestruction extends AbstractNpcAI
{-249423, 208088, -11894},
{-249248, 208088, -11889}
};
private static int[][] NAEZDSPAWNS =
{
{-250304, 206624, -11908, 26492},
{-250304, 206529, -11908, 26492},
{-250506, 206624, -11907, 8191},
{-250506, 206529, -11909, 8191}
};
// @formatter:on
// Initialization at 6:30 am on Wednesday and Saturday
@ -1087,9 +1068,7 @@ public class SeedOfDestruction extends AbstractNpcAI
}
case 6:
{
runThrone(world);
world.openDoor(THRONE_DOOR);
spawn(world, FORT_PORTALS, false, true);
break;
}
case 7:
@ -1197,48 +1176,6 @@ public class SeedOfDestruction extends AbstractNpcAI
}
}
protected void runThrone(SODWorld world)
{
world._portalForCamera = addSpawn(SPAWN_DEVICE, -248781, 206325, -11966, 0, false, 0, false, world.getInstanceId());
world._portalForCamera.setRandomWalking(false);
for (int i = 0; i < 12; i++)
{
final L2Npc npc1 = addSpawn(22543, ONETR[i][0], ONETR[i][1], ONETR[i][2], 16285, false, 0, false, world.getInstanceId());
npc1.setRandomWalking(false);
world._mags.add(npc1);
final L2Npc npc2 = addSpawn(22541, TWOTR[i][0], TWOTR[i][1], TWOTR[i][2], 16285, false, 0, false, world.getInstanceId());
npc2.setRandomWalking(false);
}
for (int i = 0; i < 6; i++)
{
final L2Npc npc3 = addSpawn(FRETR[i][0], FRETR[i][1], FRETR[i][2], FRETR[i][3], 16285, false, 0, false, world.getInstanceId());
npc3.setRandomWalking(false);
final L2Npc npc4 = addSpawn(22536, FORTR[i][0], FORTR[i][1], FORTR[i][2], 16285, false, 0, false, world.getInstanceId());
npc4.setRandomWalking(false);
final L2Npc npc5 = addSpawn(22537, FIVETR[i][0], FIVETR[i][1], FIVETR[i][2], 16285, false, 0, false, world.getInstanceId());
npc5.setRandomWalking(false);
}
if (world.naezds.size() < 1)
{
for (int i = 0; i < 4; i++)
{
final L2Npc npc = addSpawn(NAEZD, NAEZDSPAWNS[i][0], NAEZDSPAWNS[i][1], NAEZDSPAWNS[i][2], NAEZDSPAWNS[i][3], false, 0, false, world.getInstanceId());
npc.setRandomWalking(false);
world.naezds.add(npc);
}
}
world._MovePeltast = addSpawn(PELTAST, -250403, 207556, -11957, 16383, false, 0, false, world.getInstanceId());
world._MovePeltast.setRandomWalking(false);
world._priest = addSpawn(PRIEST, -250408, 205862, -11727, 16383, false, 0, false, world.getInstanceId());
world._priest.setRandomWalking(false);
}
@Override
public String onSkillSee(L2Npc npc, L2PcInstance caster, Skill skill, L2Object[] targets, boolean isPet)
{
@ -1292,96 +1229,14 @@ public class SeedOfDestruction extends AbstractNpcAI
@Override
public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
{
InstanceWorld tmpworld = null;
if (npc != null)
{
tmpworld = InstanceManager.getInstance().getWorld(npc);
}
else
{
tmpworld = InstanceManager.getInstance().getWorld(player);
}
final InstanceWorld tmpworld = InstanceManager.getInstance().getWorld(npc != null ? npc : player);
if (tmpworld instanceof SODWorld)
{
final SODWorld world = (SODWorld) tmpworld;
final teleCoord teleto = new teleCoord();
teleto.instanceId = world.getInstanceId();
if (event.equals("Part1"))
if (event.equals("ThroneSpawn"))
{
world.ZoneWaitForTP = false;
broadcastPacket((new SpecialCamera(player, 3500, 90, 15, 100, 10000, 5000, 0, 0, 1, 0, 0)), world);
startQuestTimer("Part2", 100, world._MovePeltast, player);
}
else if (event.equals("Part2"))
{
MoveTo(world._MovePeltast, -250401, 207130, -11957);
broadcastPacket((new SpecialCamera(player, 300, 90, 5, 6000, 10000, 7000, 0, 0, 1, 0, 0)), world);
startQuestTimer("Part3", 100, world._MovePeltast, null);
}
else if (event.equals("Part3"))
{
broadcastPacket((new SocialAction(world._priest.getObjectId(), 1)), world);
broadcastPacket((new SpecialCamera(world._priest, 200, 90, 10, 0, 10000, 5000, 0, 0, 1, 0, 0)), world);
startQuestTimer("Part4", 100, npc, null);
}
else if (event.equals("Part4"))
{
broadcastPacket((new SpecialCamera(world._priest, 200, 90, 5, 2500, 10000, 5000, 0, 0, 1, 0, 0)), world);
startQuestTimer("Part5", 100, world._MovePeltast, null);
}
else if (event.equals("Part5"))
{
broadcastPacket((new SpecialCamera(world._MovePeltast, 150, 90, 5, 0, 10000, 5000, 0, 0, 1, 0, 0)), world);
startQuestTimer("Part6", 100, world._MovePeltast, null);
}
else if (event.equals("Part6"))
{
broadcastPacket((new SpecialCamera(world._MovePeltast, 150, 15, 10, 3000, 10000, 5000, 0, 0, 1, 0, 0)), world);
MoveTo(world._priest, -250402, 206519, -11905);
broadcastPacket((new SocialAction(world._MovePeltast.getObjectId(), 1)), world);
startQuestTimer("Part7", 100, world._MovePeltast, null);
}
else if (event.equals("Part7"))
{
broadcastPacket((new SpecialCamera(world._priest, 1400, 40, 20, 0, 10000, 5000, 0, 0, 1, 0, 0)), world);
Delete(world._MovePeltast);
startQuestTimer("Part8", 100, world._priest, null);
}
else if (event.equals("Part8"))
{
broadcastPacket((new SpecialCamera(world._priest, 350, 90, 5, 7000, 10000, 8000, 0, 0, 1, 0, 0)), world);
startQuestTimer("Part9", 100, world._priest, null);
}
else if (event.equals("Part9"))
{
broadcastPacket((new SpecialCamera(world._priest, 350, 90, 0, 2500, 10000, 15000, 0, 0, 1, 0, 0)), world);
startQuestTimer("Part10", 100, world._priest, null);
}
else if (event.equals("Part10"))
{
world._ChangePortal = addSpawn(ChangePortal, -250402, 206519, -11905, 0, false, 0, false, world.getInstanceId());
world._ChangePortal.setRandomWalking(false);
world._priest.doCast(SkillData.getInstance().getSkill(5816, 1));
startQuestTimer("Part11", 300, world._priest, null);
startQuestTimer("PartUnnamed", 50, world._priest, null);
}
else if (event.equals("PartUnnamed"))
{
final Skill _skill = SkillData.getInstance().getSkill(5815, 1);
for (L2Npc naezd : world.naezds)
{
naezd.doCast(_skill);
}
startQuestTimer("PartUnnamed", 100, world._priest, null);
}
else if (event.equals("Part11"))
{
cancelQuestTimers("PartUnnamed");
world._tiat = addSpawn(TIAT, -250400, 207271, -11961, 16285, false, 0, false, world.getInstanceId());
world._tiat.setRandomWalking(false);
world._tiat.getAI().setIntention(CtrlIntention.AI_INTENTION_IDLE);
world._naezdTR1 = addSpawn(NAEZD, -250154, 207203, -11970, 33818, false, 0, false, world.getInstanceId());
world._naezdTR1.setRandomWalking(false);
world._naezdTR2 = addSpawn(NAEZD, -250209, 206941, -11966, 27379, false, 0, false, world.getInstanceId());
@ -1390,118 +1245,34 @@ public class SeedOfDestruction extends AbstractNpcAI
world._naezdTL1.setRandomWalking(false);
world._naezdTL2 = addSpawn(NAEZD, -250597, 206941, -11966, 6867, false, 0, false, world.getInstanceId());
world._naezdTL2.setRandomWalking(false);
broadcastPacket((new SpecialCamera(world._tiat, 400, 90, 5, 1500, 10000, 13000, 0, 0, 1, 0, 0)), world);
startQuestTimer("Part12", 100, world._tiat, null);
}
else if (event.equals("Part12"))
{
broadcastPacket((new SocialAction(world._tiat.getObjectId(), 1)), world);
Delete(world._priest);
Delete(world._ChangePortal);
startQuestTimer("Part13", 100, world._tiat, null);
}
else if (event.equals("Part13"))
{
world._naezdTR2.doCast(SkillData.getInstance().getSkill(5815, 1));
world._naezdTL2.doCast(SkillData.getInstance().getSkill(5815, 1));
startQuestTimer("Part14", 100, world._tiat, null);
}
else if (event.equals("Part14"))
{
world._naezdTR1.doCast(SkillData.getInstance().getSkill(5815, 1));
world._naezdTL1.doCast(SkillData.getInstance().getSkill(5815, 1));
broadcastPacket((new SpecialCamera(world._tiat, 600, 90, 5, 4000, 10000, 8000, 0, 0, 1, 0, 0)), world);
startQuestTimer("Part15", 100, world._tiat, null);
}
else if (event.equals("Part15"))
{
MoveTo(world._naezdTR1, -249576, 207155, -11969);
MoveTo(world._naezdTR2, -249576, 207155, -11969);
MoveTo(world._naezdTL1, -251465, 206601, -11970);
MoveTo(world._naezdTL2, -251465, 206601, -11970);
startQuestTimer("Part16", 100, world._tiat, null);
}
else if (event.equals("Part16"))
{
broadcastPacket((new SpecialCamera(world._tiat, 1400, 90, 40, 3000, 10000, 3000, 0, 0, 1, 0, 0)), world);
startQuestTimer("Part17", 100, world._tiat, null);
}
else if (event.equals("Part17"))
{
broadcastPacket((new SpecialCamera(world._portalForCamera, 3500, 37, 1, 0, 10000, 2000, 0, 0, 1, 0, 0)), world);
startQuestTimer("Part18", 100, world._tiat, null);
}
else if (event.equals("Part18"))
{
final Skill _skill = SkillData.getInstance().getSkill(5833, 1);
for (L2Npc mag : world._mags)
for (int i = 0; i < 12; i++)
{
mag.setTarget(mag);
mag.doCast(_skill);
final L2Npc npc1 = addSpawn(22543, ONETR[i][0], ONETR[i][1], ONETR[i][2], 16285, false, 0, false, world.getInstanceId());
npc1.setRandomWalking(false);
world._mags.add(npc1);
final L2Npc npc2 = addSpawn(22541, TWOTR[i][0], TWOTR[i][1], TWOTR[i][2], 16285, false, 0, false, world.getInstanceId());
npc2.setRandomWalking(false);
}
broadcastPacket((new SpecialCamera(world._portalForCamera, 2400, 60, 1, 5000, 10000, 6000, 0, 0, 1, 0, 0)), world);
startQuestTimer("Part19", 100, world._tiat, null);
}
else if (event.equals("Part19"))
{
broadcastPacket((new SpecialCamera(world._portalForCamera, 2000, 75, 4, 2000, 10000, 3000, 0, 0, 1, 0, 0)), world);
startQuestTimer("Part20", 100, world._tiat, null);
}
else if (event.equals("Part20"))
{
broadcastPacket((new SpecialCamera(world._tiat, 250, 90, 0, 100, 10000, 3000, 0, 0, 1, 0, 0)), world);
startQuestTimer("Part21", 100, world._tiat, null);
}
else if (event.equals("Part21"))
{
broadcastPacket((new SpecialCamera(world._tiat, 1500, 90, 5, 5000, 10000, 6500, 0, 0, 1, 0, 0)), world);
startQuestTimer("Part22", 100, world._tiat, null);
}
else if (event.equals("Part22"))
{
world._tiat.doCast(SkillData.getInstance().getSkill(5818, 1));
startQuestTimer("End!", 100, world._tiat, null);
}
else if (event.equals("End!"))
{
for (L2PcInstance plr : world.PlayersInInstance)
for (int i = 0; i < 6; i++)
{
if ((plr == null) || (checkworld(plr) != 1))
{
continue;
}
SetMovieMode(plr, false);
Delete(world._portalForCamera);
}
for (L2Npc naezd : world.naezds)
{
Delete(naezd);
final L2Npc npc3 = addSpawn(FRETR[i][0], FRETR[i][1], FRETR[i][2], FRETR[i][3], 16285, false, 0, false, world.getInstanceId());
npc3.setRandomWalking(false);
final L2Npc npc4 = addSpawn(22536, FORTR[i][0], FORTR[i][1], FORTR[i][2], 16285, false, 0, false, world.getInstanceId());
npc4.setRandomWalking(false);
final L2Npc npc5 = addSpawn(22537, FIVETR[i][0], FIVETR[i][1], FIVETR[i][2], 16285, false, 0, false, world.getInstanceId());
npc5.setRandomWalking(false);
}
spawn(world, FORT_PORTALS, false, true);
}
else if (event.equals("KillTiatPart1"))
{
for (L2PcInstance plr : world.PlayersInInstance)
{
if ((plr == null) || (checkworld(plr) != 1))
{
continue;
}
SetMovieMode(plr, true);
playMovie(plr, Movie.SC_BOSS_TIAT_ENDING_SUCCES);
}
Delete(npc);
for (L2Npc mob : InstanceManager.getInstance().getInstance(world.getInstanceId()).getNpcs())
{
mob.deleteMe();
}
for (L2PcInstance plr : world.PlayersInInstance)
{
if ((plr == null) || (checkworld(plr) != 1))
{
continue;
}
SetMovieMode(plr, false);
}
playMovie(world.PlayersInInstance.stream().filter(plr -> (plr != null) && (checkworld(plr) == 1)).collect(Collectors.toList()), Movie.SC_BOSS_TIAT_ENDING_SUCCES);
InstanceManager.getInstance().getInstance(world.getInstanceId()).getNpcs().forEach(L2Npc::deleteMe);
}
else if (event.equals("Spawn"))
{
@ -1574,7 +1345,6 @@ public class SeedOfDestruction extends AbstractNpcAI
{
world.incStatus();
SoDManager.getInstance().increaseSoDTiatKilled();
Delete(npc);
for (L2Npc mob : InstanceManager.getInstance().getInstance(world.getInstanceId()).getNpcs())
{
mob.deleteMe();
@ -1589,12 +1359,10 @@ public class SeedOfDestruction extends AbstractNpcAI
}
else if (npc.getId() == NAEZD)
{
world.naezds.remove(npc);
final L2Attackable mob = (L2Attackable) addSpawn(npc.getId(), npc.getSpawn().getX(), npc.getSpawn().getY(), npc.getSpawn().getZ(), npc.getSpawn().getHeading(), false, 0, false, world.getInstanceId());
mob.setRandomWalking(false);
mob.setSeeThroughSilentMove(true);
mob.setIsRaidMinion(true);
world.naezds.add(mob);
}
else if (npc.getId() == SPAWN_DEVICE)
{
@ -1701,71 +1469,12 @@ public class SeedOfDestruction extends AbstractNpcAI
final SODWorld world = (SODWorld) tmpworld;
if ((zone.getId() == 25253) && world.ZoneWaitForTP)
{
startQuestTimer("Part1", 58000, world._priest, (L2PcInstance) character);
for (L2PcInstance player : world.PlayersInInstance)
{
if ((player == null) || (checkworld(player) != 1))
{
continue;
}
SetMovieMode(player, true);
playMovie(player, Movie.SC_BOSS_TIAT_OPENING);
world.ZoneWaitForTP = false;
}
startQuestTimer("ThroneSpawn", 55000, null, (L2PcInstance) character);
playMovie(world.PlayersInInstance.stream().filter(player -> (player != null) && (checkworld(player) == 1)).collect(Collectors.toList()), Movie.SC_BOSS_TIAT_OPENING);
world.ZoneWaitForTP = false;
}
}
}
return super.onEnterZone(character, zone);
}
private void broadcastPacket(IClientOutgoingPacket mov, SODWorld world)
{
for (L2PcInstance player : world.PlayersInInstance)
{
if ((player == null) || (checkworld(player) != 1))
{
continue;
}
player.sendPacket(mov);
}
}
private void Delete(L2Npc npc)
{
npc.decayMe();
npc.deleteMe();
}
private void SetMovieMode(L2PcInstance player, boolean mode)
{
if (mode)
{
player.abortAttack();
player.abortCast();
player.getAI().setIntention(CtrlIntention.AI_INTENTION_IDLE);
player.setTarget(null);
player.setIsImmobilized(true);
player.sendPacket(new CameraMode(1));
player.getAppearance().setGhostMode(true);
}
else
{
player.setIsImmobilized(false);
player.sendPacket(new CameraMode(0));
player.sendPacket(new NormalCamera());
player.getAppearance().setGhostMode(false);
}
}
private void MoveTo(L2Npc npc, int x, int y, int z)
{
if (npc == null)
{
return;
}
npc.abortCast();
npc.abortAttack();
npc.setRunning();
npc.getAI().setIntention(CtrlIntention.AI_INTENTION_MOVE_TO, (new Location(x, y, z, 0)));
}
}