Free version update 14-12-2023.
This commit is contained in:
@@ -9,7 +9,7 @@ the area controlled by Devil Varos,<br>
|
||||
the area controlled by Demonic Weiss.<br>
|
||||
<Button ALIGN=LEFT ICON="TELEPORT" action="bypass -h Quest AteliaRefinery entrance">Teleport to the Atelia Refinery</Button>
|
||||
<Button ALIGN=LEFT ICON="TELEPORT" action="bypass -h Quest AteliaRefinery outlet">Teleport to the Atelia Outlet</Button>
|
||||
<Button ALIGN=LEFT ICON="TELEPORT" action="bypass -h Quest AteliaRefinery first_area">Teleport to the area controlled by Demonic Pontus</Button>
|
||||
<Button ALIGN=LEFT ICON="TELEPORT" action="bypass -h Quest AteliaRefinery first_area">Teleport to the area controlled by Death Pondus</Button>
|
||||
<Button ALIGN=LEFT ICON="TELEPORT" action="bypass -h Quest AteliaRefinery second_area">Teleport to the area controlled by Devil Varos</Button>
|
||||
<Button ALIGN=LEFT ICON="TELEPORT" action="bypass -h Quest AteliaRefinery third_area">Teleport to the area controlled by Demonic Weiss</Button>
|
||||
</body></html>
|
||||
13
L2J_Mobius_11.1_TheSourceOfFlame/dist/game/data/scripts/ai/areas/AteliaRefinery/34441-02.html
vendored
Normal file
13
L2J_Mobius_11.1_TheSourceOfFlame/dist/game/data/scripts/ai/areas/AteliaRefinery/34441-02.html
vendored
Normal file
@@ -0,0 +1,13 @@
|
||||
<html><body>Atelia Refinery Teleport Device:<br>
|
||||
A device for teleporting to Atelia Refinery settled by the Blackbird Clan.<br>
|
||||
Choose your destination.<br><br>
|
||||
<center>Places:<br>
|
||||
Outside of Atelia Refinery,<br>
|
||||
the area controlled by Death Pondus,<br>
|
||||
the area controlled by Devil Varos,<br>
|
||||
the area controlled by Demonic Weiss.<br>
|
||||
<Button ALIGN=LEFT ICON="TELEPORT" action="bypass -h Quest AteliaRefinery exit">Teleport from Atelia Refinery</Button>
|
||||
<Button ALIGN=LEFT ICON="TELEPORT" action="bypass -h Quest AteliaRefinery first_area">Teleport to the area controlled by Death Pondus</Button>
|
||||
<Button ALIGN=LEFT ICON="TELEPORT" action="bypass -h Quest AteliaRefinery second_area">Teleport to the area controlled by Devil Varos</Button>
|
||||
<Button ALIGN=LEFT ICON="TELEPORT" action="bypass -h Quest AteliaRefinery third_area">Teleport to the area controlled by Demonic Weiss</Button>
|
||||
</body></html>
|
||||
15
L2J_Mobius_11.1_TheSourceOfFlame/dist/game/data/scripts/ai/areas/AteliaRefinery/34441-03.html
vendored
Normal file
15
L2J_Mobius_11.1_TheSourceOfFlame/dist/game/data/scripts/ai/areas/AteliaRefinery/34441-03.html
vendored
Normal file
@@ -0,0 +1,15 @@
|
||||
<html><body>Atelia Refinery Teleport Device:<br>
|
||||
A device for teleporting to Atelia Refinery settled by the Blackbird Clan.<br>
|
||||
Choose your destination.<br><br>
|
||||
<center>Places:<br>
|
||||
Outside of Atelia Refinery,<br>
|
||||
Atelia Outlet,<br>
|
||||
the area controlled by Death Pondus,<br>
|
||||
the area controlled by Devil Varos,<br>
|
||||
the area controlled by Demonic Weiss.<br>
|
||||
<Button ALIGN=LEFT ICON="TELEPORT" action="bypass -h Quest AteliaRefinery exit">Teleport from Atelia Refinery</Button>
|
||||
<Button ALIGN=LEFT ICON="TELEPORT" action="bypass -h Quest AteliaRefinery outlet">Teleport to the Atelia Outlet</Button>
|
||||
<Button ALIGN=LEFT ICON="TELEPORT" action="bypass -h Quest AteliaRefinery first_area">Teleport to the area controlled by Death Pondus</Button>
|
||||
<Button ALIGN=LEFT ICON="TELEPORT" action="bypass -h Quest AteliaRefinery second_area">Teleport to the area controlled by Devil Varos</Button>
|
||||
<Button ALIGN=LEFT ICON="TELEPORT" action="bypass -h Quest AteliaRefinery third_area">Teleport to the area controlled by Demonic Weiss</Button>
|
||||
</body></html>
|
||||
@@ -7,7 +7,7 @@ the area controlled by Death Pondus,<br>
|
||||
the area controlled by Devil Varos,<br>
|
||||
the area controlled by Demonic Weiss.<br>
|
||||
<Button ALIGN=LEFT ICON="TELEPORT" action="bypass -h Quest AteliaRefinery entrance">Teleport to the Atelia Refinery</Button>
|
||||
<Button ALIGN=LEFT ICON="TELEPORT" action="bypass -h Quest AteliaRefinery first_area">Teleport to the area controlled by Demonic Pontus</Button>
|
||||
<Button ALIGN=LEFT ICON="TELEPORT" action="bypass -h Quest AteliaRefinery first_area">Teleport to the area controlled by Death Pondus</Button>
|
||||
<Button ALIGN=LEFT ICON="TELEPORT" action="bypass -h Quest AteliaRefinery second_area">Teleport to the area controlled by Devil Varos</Button>
|
||||
<Button ALIGN=LEFT ICON="TELEPORT" action="bypass -h Quest AteliaRefinery third_area">Teleport to the area controlled by Demonic Weiss</Button>
|
||||
</body></html>
|
||||
@@ -39,6 +39,7 @@ public class AteliaRefinery extends AbstractNpcAI
|
||||
new Location(-56096, 49688, -8729), // First Area
|
||||
new Location(-56160, 45406, -8847), // Second Area
|
||||
new Location(-56140, 41067, -8965), // Third Area
|
||||
new Location(-51716, 60243, -3344), // Exit
|
||||
};
|
||||
// Special Mobs
|
||||
private static final int HARKE = 24161;
|
||||
@@ -109,6 +110,12 @@ public class AteliaRefinery extends AbstractNpcAI
|
||||
htmltext = "34441-01.html";
|
||||
break;
|
||||
}
|
||||
case "exit":
|
||||
{
|
||||
player.teleToLocation(TELE_LOCATIONS[5]);
|
||||
htmltext = "34441-01.html";
|
||||
break;
|
||||
}
|
||||
}
|
||||
return htmltext;
|
||||
}
|
||||
@@ -136,11 +143,20 @@ public class AteliaRefinery extends AbstractNpcAI
|
||||
public String onFirstTalk(Npc npc, Player player)
|
||||
{
|
||||
String htmltext = null;
|
||||
Location npcLoc = npc.getLocation();
|
||||
final QuestState qs = player.getQuestState(Q10890_SaviorsPathHallOfEtina.class.getSimpleName());
|
||||
if (((qs != null) && qs.isCompleted()))
|
||||
if (((qs != null) && qs.isCompleted()) && ((npcLoc.getX() == -59891) && (npcLoc.getY() == 52625)))
|
||||
{
|
||||
htmltext = "34441-03.html";
|
||||
}
|
||||
else if (((qs != null) && qs.isCompleted()))
|
||||
{
|
||||
htmltext = "34441-00.html";
|
||||
}
|
||||
else if ((npcLoc.getX() == -59891) && (npcLoc.getY() == 52625))
|
||||
{
|
||||
htmltext = "34441-02.html";
|
||||
}
|
||||
else
|
||||
{
|
||||
htmltext = "34441.html";
|
||||
|
||||
@@ -70,17 +70,27 @@ public class ConquestEngine extends AbstractNpcAI
|
||||
// Queries
|
||||
private static final String LOAD_CONQUEST_DATA = "SELECT current_cycle, conquest_season_end FROM conquest_data WHERE id = 0";
|
||||
private static final String SAVE_CONQUEST_DATA = "INSERT INTO conquest_data (id, current_cycle, conquest_season_end) VALUES (0,?,?) ON DUPLICATE KEY UPDATE current_cycle=?, conquest_season_end=?";
|
||||
private static final String CLEAR_CONQUEST_PREVIOUS_RANKLIST = "DELETE FROM conquest_prev_season_ranklist;";
|
||||
private static final String SAVE_CONQUEST_PREVIOUS_RANKLIST = "INSERT INTO conquest_prev_season_ranklist (charId, char_name, personal_points) SELECT a.charId, a.val, b.val FROM character_variables a, character_variables b WHERE a.var=\"CONQUEST_NAME\" AND b.var=\"CONQUEST_PERSONAL_POINTS\" AND a.charId=b.charId;";
|
||||
private static final String CLEAR_CONQUEST_PREVIOUS_RANKLIST = "DELETE FROM conquest_prev_season_ranklist";
|
||||
private static final String SAVE_CONQUEST_PREVIOUS_RANKLIST = "INSERT INTO conquest_prev_season_ranklist (charId, char_name, personal_points) SELECT a.charId, a.val, b.val FROM character_variables a, character_variables b WHERE a.var=\"CONQUEST_NAME\" AND b.var=\"CONQUEST_PERSONAL_POINTS\" AND a.charId=b.charId";
|
||||
private static final String CLEAR_CONQUEST_PREVIOUS_PLAYER_DATA = "DELETE FROM character_variables WHERE var=?";
|
||||
|
||||
// Variables
|
||||
private static final String CONQUEST_AVAILABLE_VAR = "CONQUEST_AVAILABLE";
|
||||
private static final String CONQUEST_CONNECTED_VAR = "CONQUEST_CONNECTED";
|
||||
private static final String CONQUEST_SERVER_POINTS_VAR = "CONQUEST_SERVER_POINTS";
|
||||
private static final String CONQUEST_PREV_SEASON_SERVER_POINTS_VAR = "CONQUEST_PREV_SEASON_SERVER_POINTS";
|
||||
private static final String CONQUEST_SERVER_SOUL_ORBS_VAR = "CONQUEST_SOUL_ORBS";
|
||||
private static final String CONQUEST_PREV_SEASON_SERVER_SOUL_ORBS_VAR = "CONQUEST_PREV_SEASON_SERVER_SOUL_ORBS";
|
||||
|
||||
// Zone Name Vars used only for reset points
|
||||
private static final String CONQUEST_ZONE_ASA_VAR = "CONQUEST_ZONE_ASA_POINTS";
|
||||
private static final String CONQUEST_ZONE_ANIMA_VAR = "CONQUEST_ZONE_ANIMA_POINTS";
|
||||
private static final String CONQUEST_ZONE_NOX_VAR = "CONQUEST_ZONE_NOX_POINTS";
|
||||
private static final String CONQUEST_ZONE_VITA_VAR = "CONQUEST_ZONE_VITA_POINTS";
|
||||
private static final String CONQUEST_ZONE_IGNIS_VAR = "CONQUEST_ZONE_IGNIS_POINTS";
|
||||
|
||||
// Skills
|
||||
private static final int FIRE_SOURCE_CENTER = 34490;
|
||||
private static final int FIRE_SOURCE_CENTER_SKILL_ID = 34490;
|
||||
|
||||
protected static boolean _isConquestAvailable = GlobalVariablesManager.getInstance().getBoolean(CONQUEST_AVAILABLE_VAR, false);
|
||||
protected int _currentCycle;
|
||||
@@ -408,6 +418,7 @@ public class ConquestEngine extends AbstractNpcAI
|
||||
saveConquestData();
|
||||
saveConquestPrevSeasonRanklistData();
|
||||
saveConquestPrevSeasonServerPoints();
|
||||
clearConquestPrevSeasonPlayerData();
|
||||
_currentCycle++;
|
||||
setNewConquestSeasonEnd();
|
||||
init();
|
||||
@@ -442,7 +453,7 @@ public class ConquestEngine extends AbstractNpcAI
|
||||
{
|
||||
try (Connection con = DatabaseFactory.getConnection();
|
||||
PreparedStatement ps1 = con.prepareStatement(CLEAR_CONQUEST_PREVIOUS_RANKLIST);
|
||||
PreparedStatement ps2 = con.prepareStatement(SAVE_CONQUEST_PREVIOUS_RANKLIST))
|
||||
PreparedStatement ps2 = con.prepareStatement(SAVE_CONQUEST_PREVIOUS_RANKLIST);)
|
||||
{
|
||||
ps1.execute();
|
||||
ps2.execute();
|
||||
@@ -458,9 +469,44 @@ public class ConquestEngine extends AbstractNpcAI
|
||||
*/
|
||||
public void saveConquestPrevSeasonServerPoints()
|
||||
{
|
||||
// Save previous season Server Points and Soul Orbs
|
||||
GlobalVariablesManager.getInstance().set(CONQUEST_PREV_SEASON_SERVER_POINTS_VAR, GlobalVariablesManager.getInstance().getLong(CONQUEST_SERVER_POINTS_VAR));
|
||||
GlobalVariablesManager.getInstance().set(CONQUEST_PREV_SEASON_SERVER_SOUL_ORBS_VAR, GlobalVariablesManager.getInstance().getLong(CONQUEST_SERVER_SOUL_ORBS_VAR));
|
||||
// Reset Server Points and Soul Orbs for next season
|
||||
GlobalVariablesManager.getInstance().set(CONQUEST_SERVER_POINTS_VAR, 0);
|
||||
// Maybe add here soul orbs as well.
|
||||
GlobalVariablesManager.getInstance().set(CONQUEST_SERVER_SOUL_ORBS_VAR, 0);
|
||||
// Reset Zone Points for next season
|
||||
GlobalVariablesManager.getInstance().set(CONQUEST_ZONE_ASA_VAR, 0);
|
||||
GlobalVariablesManager.getInstance().set(CONQUEST_ZONE_ANIMA_VAR, 0);
|
||||
GlobalVariablesManager.getInstance().set(CONQUEST_ZONE_NOX_VAR, 0);
|
||||
GlobalVariablesManager.getInstance().set(CONQUEST_ZONE_VITA_VAR, 0);
|
||||
GlobalVariablesManager.getInstance().set(CONQUEST_ZONE_IGNIS_VAR, 0);
|
||||
GlobalVariablesManager.getInstance().storeMe();
|
||||
}
|
||||
|
||||
public void clearConquestPrevSeasonPlayerData()
|
||||
{
|
||||
// Update data for offline players.
|
||||
try (Connection con = DatabaseFactory.getConnection();
|
||||
PreparedStatement ps = con.prepareStatement(CLEAR_CONQUEST_PREVIOUS_PLAYER_DATA);)
|
||||
|
||||
{
|
||||
ps.setString(1, PlayerVariables.CONQUEST_PERSONAL_POINTS);
|
||||
ps.execute();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
LOGGER.log(Level.SEVERE, getClass().getSimpleName() + ": Could not reset Conquest Previous Season player data: " + e);
|
||||
}
|
||||
|
||||
// Update data for online players.
|
||||
for (Player player : World.getInstance().getPlayers())
|
||||
{
|
||||
player.getVariables().remove(PlayerVariables.CONQUEST_PERSONAL_POINTS);
|
||||
player.getVariables().storeMe();
|
||||
}
|
||||
|
||||
LOGGER.info(ConquestEngine.class.getSimpleName() + ": Conquest Previous Season player data has been reset.");
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -474,7 +520,7 @@ public class ConquestEngine extends AbstractNpcAI
|
||||
{
|
||||
LOGGER.info(ConquestEngine.class.getSimpleName() + ": Attack Points updated for player: " + player.getName() + " from " + getAttackPoints(player) + " to " + (getAttackPoints(player) + attackPoints) + ".");
|
||||
}
|
||||
player.getVariables().set("CONQUEST_ATTACK_POINTS", getAttackPoints(player) + attackPoints);
|
||||
player.getVariables().set(PlayerVariables.CONQUEST_ATTACK_POINTS, getAttackPoints(player) + attackPoints);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -488,7 +534,7 @@ public class ConquestEngine extends AbstractNpcAI
|
||||
{
|
||||
LOGGER.info(ConquestEngine.class.getSimpleName() + ": Life Points updated for player: " + player.getName() + " from " + getLifePoints(player) + " to " + (getLifePoints(player) + lifePoints) + ".");
|
||||
}
|
||||
player.getVariables().set("CONQUEST_LIFE_POINTS", getLifePoints(player) + lifePoints);
|
||||
player.getVariables().set(PlayerVariables.CONQUEST_LIFE_POINTS, getLifePoints(player) + lifePoints);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -519,6 +565,20 @@ public class ConquestEngine extends AbstractNpcAI
|
||||
GlobalVariablesManager.getInstance().set(CONQUEST_SERVER_POINTS_VAR, getServerPoints() + serverPoints);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the Conquest Soul Orbs.
|
||||
* @param player the activeChar
|
||||
* @param serverSoulOrbs the server soul orbs amount to set
|
||||
*/
|
||||
public void setServerSoulOrbs(Player player, long serverSoulOrbs)
|
||||
{
|
||||
if (DEBUG)
|
||||
{
|
||||
LOGGER.info(ConquestEngine.class.getSimpleName() + ": Soul Orbs updated from " + getServerSoulOrbs() + " to " + (getServerSoulOrbs() + serverSoulOrbs) + ".");
|
||||
}
|
||||
GlobalVariablesManager.getInstance().set(CONQUEST_SERVER_SOUL_ORBS_VAR, getServerSoulOrbs() + serverSoulOrbs);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the Conquest Zone name by id.
|
||||
* @param zoneId the zone id
|
||||
@@ -575,11 +635,12 @@ public class ConquestEngine extends AbstractNpcAI
|
||||
* @param player the activeChar
|
||||
* @param personalPoints the personal points
|
||||
* @param serverPoints the server points
|
||||
* @param serverSoulOrbs the server soul orbs
|
||||
* @param zonePoints the zone points
|
||||
* @param zoneId the zone id
|
||||
* @param useRates if {@code true} it will use Conquest rates multipliers
|
||||
*/
|
||||
public synchronized void updatePoints(Player player, int personalPoints, int serverPoints, int zonePoints, int zoneId, boolean useRates)
|
||||
public synchronized void updatePoints(Player player, int personalPoints, int serverPoints, int serverSoulOrbs, int zonePoints, int zoneId, boolean useRates)
|
||||
{
|
||||
if (!_isConquestAvailable)
|
||||
{
|
||||
@@ -588,15 +649,18 @@ public class ConquestEngine extends AbstractNpcAI
|
||||
|
||||
long finalPersonalPoints = personalPoints;
|
||||
long finalServerPoints = serverPoints;
|
||||
long finalServerSoulOrbs = serverSoulOrbs;
|
||||
int finalZonePoints = zonePoints;
|
||||
if (useRates)
|
||||
{
|
||||
finalPersonalPoints = personalPoints * Config.CONQUEST_RATE_PERSONAL_POINTS;
|
||||
finalServerPoints = serverPoints * Config.CONQUEST_RATE_SERVER_POINTS;
|
||||
finalServerSoulOrbs = serverSoulOrbs * Config.CONQUEST_RATE_SERVER_SOUL_ORBS;
|
||||
finalZonePoints = zonePoints * Config.CONQUEST_RATE_ZONE_POINTS;
|
||||
}
|
||||
setPersonalPoints(player, finalPersonalPoints);
|
||||
setServerPoints(player, finalServerPoints);
|
||||
setServerSoulOrbs(player, finalServerSoulOrbs);
|
||||
setZonePoints(zoneId, finalZonePoints);
|
||||
}
|
||||
|
||||
@@ -607,7 +671,7 @@ public class ConquestEngine extends AbstractNpcAI
|
||||
*/
|
||||
public int getAttackPoints(Player player)
|
||||
{
|
||||
return player.getVariables().getInt("CONQUEST_ATTACK_POINTS", Config.CONQUEST_ATTACK_POINTS);
|
||||
return player.getVariables().getInt(PlayerVariables.CONQUEST_ATTACK_POINTS, Config.CONQUEST_ATTACK_POINTS);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -617,7 +681,7 @@ public class ConquestEngine extends AbstractNpcAI
|
||||
*/
|
||||
public int getLifePoints(Player player)
|
||||
{
|
||||
return player.getVariables().getInt("CONQUEST_LIFE_POINTS", Config.CONQUEST_LIFE_POINTS);
|
||||
return player.getVariables().getInt(PlayerVariables.CONQUEST_LIFE_POINTS, Config.CONQUEST_LIFE_POINTS);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -639,6 +703,15 @@ public class ConquestEngine extends AbstractNpcAI
|
||||
return GlobalVariablesManager.getInstance().getLong(CONQUEST_SERVER_POINTS_VAR, 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the Conquest soul orbs.
|
||||
* @return the soul orbs amount
|
||||
*/
|
||||
public long getServerSoulOrbs()
|
||||
{
|
||||
return GlobalVariablesManager.getInstance().getLong(CONQUEST_SERVER_SOUL_ORBS_VAR, 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the Conquest zone points.
|
||||
* @param zoneId the zone id to get point for
|
||||
@@ -655,7 +728,7 @@ public class ConquestEngine extends AbstractNpcAI
|
||||
if (_isConquestAvailable)
|
||||
{
|
||||
final int npcId = npc.getId();
|
||||
updatePoints(killer, CONQUEST_POINT_DATA.getPersonalPointsAmount(npcId), CONQUEST_POINT_DATA.getServerPointsAmount(npcId), CONQUEST_POINT_DATA.getZonePointsAmount(npcId), CONQUEST_POINT_DATA.getZoneId(npcId), true);
|
||||
updatePoints(killer, CONQUEST_POINT_DATA.getPersonalPointsAmount(npcId), CONQUEST_POINT_DATA.getServerPointsAmount(npcId), 1, CONQUEST_POINT_DATA.getZonePointsAmount(npcId), CONQUEST_POINT_DATA.getZoneId(npcId), true);
|
||||
}
|
||||
return super.onKill(npc, killer, isSummon);
|
||||
}
|
||||
@@ -664,16 +737,16 @@ public class ConquestEngine extends AbstractNpcAI
|
||||
@RegisterType(ListenerRegisterType.GLOBAL_PLAYERS)
|
||||
public void onPlayerPvPKill(OnPlayerPvPKill event)
|
||||
{
|
||||
if (_isConquestAvailable && event.getPlayer().isInsideZone(ZoneId.CONQUEST) && event.getTarget().isInsideZone(ZoneId.CONQUEST) && !event.getPlayer().getEffectList().isAffectedBySkill(FIRE_SOURCE_CENTER))
|
||||
if (_isConquestAvailable && event.getPlayer().isInsideZone(ZoneId.CONQUEST) && event.getTarget().isInsideZone(ZoneId.CONQUEST) && !event.getPlayer().getEffectList().isAffectedBySkill(FIRE_SOURCE_CENTER_SKILL_ID))
|
||||
{
|
||||
final Player attackerPlayer = event.getPlayer();
|
||||
final Player targetPlayer = event.getTarget();
|
||||
if (CONQUEST_POINT_DATA.getPvpPointsInfo().containsKey(targetPlayer.getLevel()))
|
||||
{
|
||||
updatePoints(attackerPlayer, CONQUEST_POINT_DATA.getPvpPersonalPointsAmount(targetPlayer.getLevel()), CONQUEST_POINT_DATA.getPvpServerPointsAmount(targetPlayer.getLevel()), 0, 0, true);
|
||||
updatePoints(attackerPlayer, CONQUEST_POINT_DATA.getPvpPersonalPointsAmount(targetPlayer.getLevel()), CONQUEST_POINT_DATA.getPvpServerPointsAmount(targetPlayer.getLevel()), 0, 0, 0, true);
|
||||
if ((getAttackPoints(attackerPlayer) >= 1) && (getLifePoints(targetPlayer) >= 1))
|
||||
{
|
||||
attackerPlayer.addItem("ConquestCoins", BLOODY_COIN, CONQUEST_POINT_DATA.getCoinsAmount(targetPlayer.getLevel()), attackerPlayer, true);
|
||||
attackerPlayer.addItem("ConquestCoins", BLOODY_COIN, CONQUEST_POINT_DATA.getCoinsAmount(targetPlayer.getLevel()) * Config.CONQUEST_RATE_BLOODY_COINS, attackerPlayer, true);
|
||||
setAttackPoints(attackerPlayer, -1);
|
||||
setLifePoints(targetPlayer, -1);
|
||||
|
||||
@@ -685,7 +758,7 @@ public class ConquestEngine extends AbstractNpcAI
|
||||
// Winner Message
|
||||
SystemMessage sm2 = new SystemMessage(SystemMessageId.YOU_HAVE_DEFEATED_C1_AND_GOT_BLOODY_COINS_X_S2_PERSONAL_CONQUEST_POINTS_X_S3_SERVER_CONQUEST_POINTS_X_S4_ATTACK_POINTS_1_TO_CHECK_THEIR_CURRENT_AMOUNT_ENTER_BLOODYCOIN_IN_YOUR_CHAT_WINDOW);
|
||||
sm2.addString(targetPlayer.getName());
|
||||
sm2.addString(Integer.toString(CONQUEST_POINT_DATA.getCoinsAmount(targetPlayer.getLevel())));
|
||||
sm2.addString(Integer.toString(CONQUEST_POINT_DATA.getCoinsAmount(targetPlayer.getLevel()) * Config.CONQUEST_RATE_BLOODY_COINS));
|
||||
sm2.addString(Long.toString(CONQUEST_POINT_DATA.getPvpPersonalPointsAmount(targetPlayer.getLevel())));
|
||||
sm2.addString(Long.toString(CONQUEST_POINT_DATA.getPvpServerPointsAmount(targetPlayer.getLevel())));
|
||||
attackerPlayer.sendPacket(sm2);
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
<html><body>Conquest Teleport Device:<br>
|
||||
Where would you like to go?<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest ConquestTeleportDevice waterZone0">Fire & Water Border (Fire Side)</Button>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest ConquestTeleportDevice waterZone2">Zone 1 - Asa</Button>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest ConquestTeleportDevice waterZone3">Zone 2 - Anima</Button>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest ConquestTeleportDevice waterZone4">Zone 3 - Nox</Button>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest ConquestTeleportDevice waterZone5">Callide's Hall</Button>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest ConquestTeleportDevice waterZone6">Eigis</Button>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest ConquestTeleportDevice waterZone7">Fire & Water Border (Water Side)</Button>
|
||||
</body></html>
|
||||
@@ -1,10 +1,10 @@
|
||||
<html><body>Conquest Teleport Device:<br>
|
||||
Where would you like to go?<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest ConquestTeleportDevice fireZone1">Fire & Water Border (Fire Side)</Button>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest ConquestTeleportDevice fireZone2">Fire Fortress</Button>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest ConquestTeleportDevice fireZone3">Kellond's Secret Barracks</Button>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest ConquestTeleportDevice fireZone4">Zone 1 - Vita</Button>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest ConquestTeleportDevice fireZone5">Zone 2 - Ignis</Button>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest ConquestTeleportDevice fireZone6">Fire Source (Common Area)</Button>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest ConquestTeleportDevice fireZone7">Fire Source (Central Area)</Button>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest ConquestTeleportDevice waterZone0">Fire & Water Border (Water Side)</Button>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest ConquestTeleportDevice fireZone1">Fire Fortress</Button>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest ConquestTeleportDevice fireZone2">Kellond's Secret Barracks</Button>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest ConquestTeleportDevice fireZone3">Zone 1 - Vita</Button>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest ConquestTeleportDevice fireZone4">Zone 2 - Ignis</Button>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest ConquestTeleportDevice fireZone5">Fire Source (Common Area)</Button>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest ConquestTeleportDevice fireZone6">Fire Source (Central Area)</Button>
|
||||
</body></html>
|
||||
@@ -2,7 +2,7 @@
|
||||
Those who have occupied Conquest may use the teleport function to teleport to important places in Conquest area.<br>
|
||||
<font color="LEVEL">(Only characters from the occupying Clan may use teleport.)</font><br>
|
||||
Where would you like to go?<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest ConquestTeleportDevice waterZone7">Teleport on the Water Side</Button>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest ConquestTeleportDevice fireZone0">Teleport on the Fire Side</Button>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest ConquestTeleportDevice waterZone1">Conquest Town</Button>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest ConquestTeleportDevice waterZone2">Zone 1 - Asa</Button>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest ConquestTeleportDevice waterZone3">Zone 2 - Anima</Button>
|
||||
|
||||
@@ -21,6 +21,7 @@ import org.l2jmobius.gameserver.instancemanager.RankManager;
|
||||
import org.l2jmobius.gameserver.model.Location;
|
||||
import org.l2jmobius.gameserver.model.actor.Npc;
|
||||
import org.l2jmobius.gameserver.model.actor.Player;
|
||||
import org.l2jmobius.gameserver.model.clan.ClanMember;
|
||||
|
||||
import ai.AbstractNpcAI;
|
||||
|
||||
@@ -35,7 +36,16 @@ public class ConquestTeleportDevice extends AbstractNpcAI
|
||||
private static final int DEVICE2 = 34597; // Teleport Device 2 ( Water Side Teleporter)
|
||||
private static final int DEVICE3 = 34661; // Teleport Device 3 ( Fire Side Teleporter)
|
||||
|
||||
// Locations
|
||||
// Enter Locations
|
||||
private static final Location[] ENTER_LOCS =
|
||||
{
|
||||
// Water Area
|
||||
new Location(-525, -201894, -3016), // Fire & Water Border (Water Side)
|
||||
// Fire Area
|
||||
new Location(446, -201800, -3000), // Fire & Water Border (Fire Side)
|
||||
};
|
||||
|
||||
// Hunt Locations
|
||||
private static final Location[] HUNT_LOCS =
|
||||
{
|
||||
// Water Areas
|
||||
@@ -45,9 +55,7 @@ public class ConquestTeleportDevice extends AbstractNpcAI
|
||||
new Location(-2570, -213261, -3603), // Zone 3 - Nox
|
||||
new Location(-11731, -215556, -2800), // Zone 4 - Callide Hall
|
||||
new Location(-24036, -220963, -3511), // Eigis Seat
|
||||
new Location(-525, -201894, -3016), // Fire & Water Border (Water Side)
|
||||
// Fire Areas
|
||||
new Location(446, -201800, -3000), // Fire & Water Border (Fire Side)
|
||||
new Location(7515, -202872, -3184), // Fire Fortress
|
||||
new Location(21937, -225270, -3800), // Kellond's Secret Barracks
|
||||
new Location(10256, -217176, -3568), // Zone 1 - Vita (Lv. 124)
|
||||
@@ -80,86 +88,111 @@ public class ConquestTeleportDevice extends AbstractNpcAI
|
||||
checkPrivs(player);
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (checkPrivs(player))
|
||||
{
|
||||
switch (event)
|
||||
case "waterZone0":
|
||||
{
|
||||
case "waterZone1":
|
||||
player.teleToLocation(ENTER_LOCS[0], 0, player.getInstanceWorld());
|
||||
break;
|
||||
}
|
||||
case "fireZone0":
|
||||
{
|
||||
player.teleToLocation(ENTER_LOCS[1], 0, player.getInstanceWorld());
|
||||
break;
|
||||
}
|
||||
case "waterZone1":
|
||||
{
|
||||
if (checkPrivs(player))
|
||||
{
|
||||
player.teleToLocation(HUNT_LOCS[0], 0, player.getInstanceWorld());
|
||||
break;
|
||||
}
|
||||
case "waterZone2":
|
||||
break;
|
||||
}
|
||||
case "waterZone2":
|
||||
{
|
||||
if (checkPrivs(player))
|
||||
{
|
||||
player.teleToLocation(HUNT_LOCS[1], 0, player.getInstanceWorld());
|
||||
break;
|
||||
}
|
||||
case "waterZone3":
|
||||
break;
|
||||
}
|
||||
case "waterZone3":
|
||||
{
|
||||
if (checkPrivs(player))
|
||||
{
|
||||
player.teleToLocation(HUNT_LOCS[2], 0, player.getInstanceWorld());
|
||||
break;
|
||||
}
|
||||
case "waterZone4":
|
||||
break;
|
||||
}
|
||||
case "waterZone4":
|
||||
{
|
||||
if (checkPrivs(player))
|
||||
{
|
||||
player.teleToLocation(HUNT_LOCS[3], 0, player.getInstanceWorld());
|
||||
break;
|
||||
}
|
||||
case "waterZone5":
|
||||
break;
|
||||
}
|
||||
case "waterZone5":
|
||||
{
|
||||
if (checkPrivs(player))
|
||||
{
|
||||
player.teleToLocation(HUNT_LOCS[4], 0, player.getInstanceWorld());
|
||||
break;
|
||||
}
|
||||
case "waterZone6":
|
||||
break;
|
||||
}
|
||||
case "waterZone6":
|
||||
{
|
||||
if (checkPrivs(player))
|
||||
{
|
||||
player.teleToLocation(HUNT_LOCS[5], 0, player.getInstanceWorld());
|
||||
break;
|
||||
}
|
||||
case "waterZone7":
|
||||
break;
|
||||
}
|
||||
case "fireZone1":
|
||||
{
|
||||
if (checkPrivs(player))
|
||||
{
|
||||
player.teleToLocation(HUNT_LOCS[6], 0, player.getInstanceWorld());
|
||||
break;
|
||||
}
|
||||
case "fireZone1":
|
||||
break;
|
||||
}
|
||||
case "fireZone2":
|
||||
{
|
||||
if (checkPrivs(player))
|
||||
{
|
||||
player.teleToLocation(HUNT_LOCS[7], 0, player.getInstanceWorld());
|
||||
break;
|
||||
}
|
||||
case "fireZone2":
|
||||
break;
|
||||
}
|
||||
case "fireZone3":
|
||||
{
|
||||
if (checkPrivs(player))
|
||||
{
|
||||
player.teleToLocation(HUNT_LOCS[8], 0, player.getInstanceWorld());
|
||||
break;
|
||||
}
|
||||
case "fireZone3":
|
||||
break;
|
||||
}
|
||||
case "fireZone4":
|
||||
{
|
||||
if (checkPrivs(player))
|
||||
{
|
||||
player.teleToLocation(HUNT_LOCS[9], 0, player.getInstanceWorld());
|
||||
break;
|
||||
}
|
||||
case "fireZone4":
|
||||
break;
|
||||
}
|
||||
case "fireZone5":
|
||||
{
|
||||
if (checkPrivs(player))
|
||||
{
|
||||
player.teleToLocation(HUNT_LOCS[10], 0, player.getInstanceWorld());
|
||||
break;
|
||||
}
|
||||
case "fireZone5":
|
||||
break;
|
||||
}
|
||||
case "fireZone6":
|
||||
{
|
||||
if (checkPrivs(player))
|
||||
{
|
||||
player.teleToLocation(HUNT_LOCS[11], 0, player.getInstanceWorld());
|
||||
break;
|
||||
}
|
||||
case "fireZone6":
|
||||
{
|
||||
player.teleToLocation(HUNT_LOCS[12], 0, player.getInstanceWorld());
|
||||
break;
|
||||
}
|
||||
case "fireZone7":
|
||||
{
|
||||
player.teleToLocation(HUNT_LOCS[13], 0, player.getInstanceWorld());
|
||||
break;
|
||||
}
|
||||
default:
|
||||
{
|
||||
player.sendMessage("You can't use the teleport device.");
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
return htmltext;
|
||||
@@ -167,13 +200,28 @@ public class ConquestTeleportDevice extends AbstractNpcAI
|
||||
|
||||
private boolean checkPrivs(Player player)
|
||||
{
|
||||
final int prevSeasonConquerorId = RankManager.getInstance().getPreviousConquestRankList().get(1) != null ? RankManager.getInstance().getPreviousConquestRankList().get(1).getInt("charId") : 0;
|
||||
if (Config.CONQUEST_TELEPORTS_FOR_ALL || (player.getClan().getLeaderId() == prevSeasonConquerorId))
|
||||
final int prevSeasonRank1Id = RankManager.getInstance().getPreviousConquestRankList().get(1) != null ? RankManager.getInstance().getPreviousConquestRankList().get(1).getInt("charId") : 0;
|
||||
final int currentSeasonRank1Id = RankManager.getInstance().getCurrentConquestRankList().get(1) != null ? RankManager.getInstance().getCurrentConquestRankList().get(1).getInt("charId") : 0;
|
||||
if (Config.CONQUEST_TELEPORTS_FOR_ALL)
|
||||
{
|
||||
player.sendMessage("You are free to use this teleport device.");
|
||||
return true;
|
||||
}
|
||||
|
||||
// Check if rank 1 player id is in checker clan or not
|
||||
else if (player.getClan() != null)
|
||||
{
|
||||
for (ClanMember member : player.getClan().getMembers())
|
||||
{
|
||||
if ((member.getObjectId() == prevSeasonRank1Id) || (member.getObjectId() == (currentSeasonRank1Id)))
|
||||
{
|
||||
player.sendMessage("You are free to use this teleport device.");
|
||||
return true;
|
||||
}
|
||||
player.sendMessage("You can't use this teleport device, because you don't belong to the conquest conqueror clan.");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
// If no clan
|
||||
player.sendMessage("You can't use this teleport device, because you don't belong to the conquest conqueror clan.");
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -104,7 +104,7 @@ public class Flowers extends AbstractNpcAI
|
||||
// Notify to scripts.
|
||||
if (EventDispatcher.getInstance().hasListener(EventType.ON_CONQUEST_FLOWER_COLLECT))
|
||||
{
|
||||
EventDispatcher.getInstance().notifyEventAsync(new OnConquestFlowerCollect(player));
|
||||
EventDispatcher.getInstance().notifyEventAsync(new OnConquestFlowerCollect(player, npc.getId()));
|
||||
}
|
||||
|
||||
if (player.isInventoryUnder90(false))
|
||||
@@ -144,7 +144,7 @@ public class Flowers extends AbstractNpcAI
|
||||
}
|
||||
else
|
||||
{
|
||||
player.getVariables().set(PlayerVariables.CONQUEST_PERSONAL_POINTS, player.getVariables().getLong(PlayerVariables.CONQUEST_PERSONAL_POINTS) + PERSONAL_POINTS_AMOUNT);
|
||||
player.getVariables().set(PlayerVariables.CONQUEST_PERSONAL_POINTS, player.getVariables().getLong(PlayerVariables.CONQUEST_PERSONAL_POINTS, 0) + PERSONAL_POINTS_AMOUNT);
|
||||
player.sendPacket(SystemMessageId.YOU_HAVE_RECEIVED_PERSONAL_CONQUEST_POINTS);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -32,12 +32,14 @@ import org.l2jmobius.gameserver.model.actor.Creature;
|
||||
import org.l2jmobius.gameserver.model.actor.Npc;
|
||||
import org.l2jmobius.gameserver.model.actor.Player;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.Guard;
|
||||
import org.l2jmobius.gameserver.model.events.EventDispatcher;
|
||||
import org.l2jmobius.gameserver.model.events.EventType;
|
||||
import org.l2jmobius.gameserver.model.events.ListenerRegisterType;
|
||||
import org.l2jmobius.gameserver.model.events.annotations.Id;
|
||||
import org.l2jmobius.gameserver.model.events.annotations.RegisterEvent;
|
||||
import org.l2jmobius.gameserver.model.events.annotations.RegisterType;
|
||||
import org.l2jmobius.gameserver.model.events.impl.OnServerStart;
|
||||
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerSummonSacredFire;
|
||||
import org.l2jmobius.gameserver.model.events.impl.item.OnItemUse;
|
||||
import org.l2jmobius.gameserver.model.holders.ItemHolder;
|
||||
import org.l2jmobius.gameserver.model.holders.SkillHolder;
|
||||
@@ -352,6 +354,8 @@ public class SacredFire extends AbstractNpcAI
|
||||
sacredFire.getVariables().set("SLOT", sacredFireSlot);
|
||||
sacredFire.getVariables().set("SUMMON_TIME", System.currentTimeMillis());
|
||||
|
||||
checkSummonSacredFireListener(player);
|
||||
|
||||
// Update owner current Sacred Fires count.
|
||||
player.getVariables().set(PlayerVariables.CONQUEST_SACRED_FIRE_SLOT_COUNT, player.getVariables().getInt(PlayerVariables.CONQUEST_SACRED_FIRE_SLOT_COUNT, 0) + 1);
|
||||
|
||||
@@ -470,6 +474,15 @@ public class SacredFire extends AbstractNpcAI
|
||||
removeSacredFireVars();
|
||||
}
|
||||
|
||||
private void checkSummonSacredFireListener(Player player)
|
||||
{
|
||||
// Notify to scripts.
|
||||
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_SUMMON_SACRED_FIRE))
|
||||
{
|
||||
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerSummonSacredFire(player, SACRED_FIRE));
|
||||
}
|
||||
}
|
||||
|
||||
public static void main(String[] args)
|
||||
{
|
||||
new SacredFire();
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
<npc id="27704" personalPoints="20" serverPoints="20" /> <!-- Craigo -->
|
||||
<npc id="27705" personalPoints="4" serverPoints="4" /> <!-- Kiku -->
|
||||
<npc id="27706" personalPoints="4" serverPoints="4" /> <!-- Floato -->
|
||||
<npc id="19816" personalPoints="4" serverPoints="4" /> <!-- Soul Flower -->
|
||||
<npc id="19816" personalPoints="40" serverPoints="40" /> <!-- Soul Flower -->
|
||||
|
||||
<!-- Daril Phran's Water Source (Lv. 116) -->
|
||||
<npc id="27707" personalPoints="6" serverPoints="6" /> <!-- Daril Phran -->
|
||||
@@ -17,112 +17,112 @@
|
||||
<npc id="27710" personalPoints="30" serverPoints="30" /> <!-- Craigo Phran -->
|
||||
<npc id="27711" personalPoints="6" serverPoints="6" /> <!-- Kiku Phran -->
|
||||
<npc id="27712" personalPoints="6" serverPoints="6" /> <!-- Floato Phran -->
|
||||
<npc id="19817" personalPoints="6" serverPoints="6" /> <!-- Soul Flower -->
|
||||
<npc id="19817" personalPoints="60" serverPoints="60" /> <!-- Soul Flower -->
|
||||
|
||||
<!-- Asa Area 1 (Lv. 116) -->
|
||||
<npc id="27713" personalPoints="9" serverPoints="9" zonePoints="19" zoneId="1" /> <!-- Daril Asa Ar -->
|
||||
<npc id="27714" personalPoints="30" serverPoints="30" zonePoints="19" zoneId="1" /> <!-- Seo Asa Ar -->
|
||||
<npc id="27715" personalPoints="9" serverPoints="9" zonePoints="19" zoneId="1" /> <!-- Floato Asa Ar -->
|
||||
<npc id="27716" personalPoints="9" serverPoints="9" zonePoints="19" zoneId="1" /> <!-- Asa Ar Hunter -->
|
||||
<npc id="27717" personalPoints="9" serverPoints="9" zonePoints="19" zoneId="1" /> <!-- Asa Ar Sorceress -->
|
||||
<npc id="27718" personalPoints="9" serverPoints="9" zonePoints="19" zoneId="1" /> <!-- Saida Asa Ar -->
|
||||
<npc id="19830" personalPoints="9" serverPoints="9" zonePoints="19" zoneId="1" /> <!-- Luminous Soul -->
|
||||
<npc id="19818" personalPoints="45" serverPoints="45" zonePoints="95" zoneId="1" /> <!-- Soul Flower -->
|
||||
<npc id="27713" personalPoints="18" serverPoints="18" zonePoints="19" zoneId="1" /> <!-- Daril Asa Ar -->
|
||||
<npc id="27714" personalPoints="18" serverPoints="18" zonePoints="19" zoneId="1" /> <!-- Seo Asa Ar -->
|
||||
<npc id="27715" personalPoints="18" serverPoints="18" zonePoints="19" zoneId="1" /> <!-- Floato Asa Ar -->
|
||||
<npc id="27716" personalPoints="18" serverPoints="18" zonePoints="19" zoneId="1" /> <!-- Asa Ar Hunter -->
|
||||
<npc id="27717" personalPoints="18" serverPoints="18" zonePoints="19" zoneId="1" /> <!-- Asa Ar Sorceress -->
|
||||
<npc id="27718" personalPoints="18" serverPoints="18" zonePoints="19" zoneId="1" /> <!-- Saida Asa Ar -->
|
||||
<npc id="19830" personalPoints="267" serverPoints="267" zonePoints="810" zoneId="1" /> <!-- Luminous Soul -->
|
||||
<npc id="19818" personalPoints="180" serverPoints="180" zonePoints="95" zoneId="1" /> <!-- Soul Flower -->
|
||||
|
||||
<!-- Asa Area 2 (Lv. 120) -->
|
||||
<npc id="27719" personalPoints="11" serverPoints="11" zonePoints="22" zoneId="1" /> <!-- Atron Asa Mide -->
|
||||
<npc id="27720" personalPoints="11" serverPoints="11" zonePoints="22" zoneId="1" /> <!-- Craigo Asa Mide -->
|
||||
<npc id="27721" personalPoints="11" serverPoints="11" zonePoints="22" zoneId="1" /> <!-- Kerberos Asa Mide -->
|
||||
<npc id="27722" personalPoints="11" serverPoints="11" zonePoints="22" zoneId="1" /> <!-- Asa Mide Hunter -->
|
||||
<npc id="27723" personalPoints="11" serverPoints="11" zonePoints="22" zoneId="1" /> <!-- Asa Mide Sorceress -->
|
||||
<npc id="27724" personalPoints="11" serverPoints="11" zonePoints="22" zoneId="1" /> <!-- Saida Asa Mide -->
|
||||
<npc id="27725" personalPoints="11" serverPoints="11" zonePoints="22" zoneId="1" /> <!-- Asa Mide Blader -->
|
||||
<npc id="19819" personalPoints="55" serverPoints="55" zonePoints="110" zoneId="1" /> <!-- Soul Flower -->
|
||||
<npc id="27719" personalPoints="28" serverPoints="28" zonePoints="22" zoneId="1" /> <!-- Atron Asa Mide -->
|
||||
<npc id="27720" personalPoints="28" serverPoints="28" zonePoints="22" zoneId="1" /> <!-- Craigo Asa Mide -->
|
||||
<npc id="27721" personalPoints="28" serverPoints="28" zonePoints="22" zoneId="1" /> <!-- Kerberos Asa Mide -->
|
||||
<npc id="27722" personalPoints="28" serverPoints="28" zonePoints="22" zoneId="1" /> <!-- Asa Mide Hunter -->
|
||||
<npc id="27723" personalPoints="28" serverPoints="28" zonePoints="22" zoneId="1" /> <!-- Asa Mide Sorceress -->
|
||||
<npc id="27724" personalPoints="28" serverPoints="28" zonePoints="22" zoneId="1" /> <!-- Saida Asa Mide -->
|
||||
<npc id="27725" personalPoints="28" serverPoints="28" zonePoints="22" zoneId="1" /> <!-- Asa Mide Blader -->
|
||||
<npc id="19819" personalPoints="280" serverPoints="280" zonePoints="110" zoneId="1" /> <!-- Soul Flower -->
|
||||
|
||||
<!-- Asa Area 3 (Lv. 124) -->
|
||||
<npc id="27726" personalPoints="16" serverPoints="16" zonePoints="32" zoneId="1" /> <!-- Atron Asa Telro -->
|
||||
<npc id="27727" personalPoints="16" serverPoints="16" zonePoints="32" zoneId="1" /> <!-- Craigo Asa Telro -->
|
||||
<npc id="27728" personalPoints="16" serverPoints="16" zonePoints="32" zoneId="1" /> <!-- Beor Asa Telro -->
|
||||
<npc id="27729" personalPoints="16" serverPoints="16" zonePoints="32" zoneId="1" /> <!-- Asa Telro Hunter -->
|
||||
<npc id="27730" personalPoints="16" serverPoints="16" zonePoints="32" zoneId="1" /> <!-- Asa Telro Sorceress -->
|
||||
<npc id="27731" personalPoints="16" serverPoints="16" zonePoints="32" zoneId="1" /> <!-- Saida Asa Telro -->
|
||||
<npc id="27732" personalPoints="16" serverPoints="16" zonePoints="32" zoneId="1" /> <!-- Asa Telro Blader -->
|
||||
<npc id="27733" personalPoints="16" serverPoints="16" zonePoints="32" zoneId="1" /> <!-- Asa Telro Guard -->
|
||||
<npc id="19820" personalPoints="80" serverPoints="80" zonePoints="160" zoneId="1" /> <!-- Soul Flower -->
|
||||
<npc id="19827" personalPoints="462" serverPoints="2314" zonePoints="13888" zoneId="1" /> <!-- Soul Tree -->
|
||||
<npc id="27776" personalPoints="16" serverPoints="16" zonePoints="32" zoneId="1" /> <!-- Catshi Trickster Asa Guardian -->
|
||||
<npc id="27777" personalPoints="16" serverPoints="16" zonePoints="32" zoneId="1" /> <!-- Catshi Muse Asa Guardian -->
|
||||
<npc id="27778" personalPoints="16" serverPoints="16" zonePoints="32" zoneId="1" /> <!-- Catshi Ripper Asa Guardian -->
|
||||
<npc id="27726" personalPoints="43" serverPoints="43" zonePoints="32" zoneId="1" /> <!-- Atron Asa Telro -->
|
||||
<npc id="27727" personalPoints="43" serverPoints="43" zonePoints="32" zoneId="1" /> <!-- Craigo Asa Telro -->
|
||||
<npc id="27728" personalPoints="43" serverPoints="43" zonePoints="32" zoneId="1" /> <!-- Beor Asa Telro -->
|
||||
<npc id="27729" personalPoints="43" serverPoints="43" zonePoints="32" zoneId="1" /> <!-- Asa Telro Hunter -->
|
||||
<npc id="27730" personalPoints="43" serverPoints="43" zonePoints="32" zoneId="1" /> <!-- Asa Telro Sorceress -->
|
||||
<npc id="27731" personalPoints="43" serverPoints="43" zonePoints="32" zoneId="1" /> <!-- Saida Asa Telro -->
|
||||
<npc id="27732" personalPoints="43" serverPoints="43" zonePoints="32" zoneId="1" /> <!-- Asa Telro Blader -->
|
||||
<npc id="27733" personalPoints="43" serverPoints="43" zonePoints="32" zoneId="1" /> <!-- Asa Telro Guard -->
|
||||
<npc id="19820" personalPoints="430" serverPoints="430" zonePoints="160" zoneId="1" /> <!-- Soul Flower -->
|
||||
<npc id="19827" personalPoints="3326" serverPoints="997920" zonePoints="159667" zoneId="1" /> <!-- Soul Tree -->
|
||||
<npc id="27776" personalPoints="43" serverPoints="43" zonePoints="32" zoneId="1" /> <!-- Catshi Trickster Asa Guardian -->
|
||||
<npc id="27777" personalPoints="43" serverPoints="43" zonePoints="32" zoneId="1" /> <!-- Catshi Muse Asa Guardian -->
|
||||
<npc id="27778" personalPoints="43" serverPoints="43" zonePoints="32" zoneId="1" /> <!-- Catshi Ripper Asa Guardian -->
|
||||
|
||||
<!-- Anima Area 1 (Lv. 116) -->
|
||||
<npc id="27755" personalPoints="9" serverPoints="9" zonePoints="19" zoneId="2" /> <!-- Daril Anima Ar -->
|
||||
<npc id="27755" personalPoints="18" serverPoints="18" zonePoints="19" zoneId="2" /> <!-- Daril Anima Ar -->
|
||||
<npc id="27756" personalPoints="30" serverPoints="30" zonePoints="19" zoneId="2" /> <!-- Seo Anima Ar -->
|
||||
<npc id="27757" personalPoints="9" serverPoints="9" zonePoints="19" zoneId="2" /> <!-- Floato Anima Ar -->
|
||||
<npc id="27758" personalPoints="9" serverPoints="9" zonePoints="19" zoneId="2" /> <!-- Anima Ar Hunter -->
|
||||
<npc id="27759" personalPoints="9" serverPoints="9" zonePoints="19" zoneId="2" /> <!-- Anima Ar Sorceress -->
|
||||
<npc id="27760" personalPoints="9" serverPoints="9" zonePoints="19" zoneId="2" /> <!-- Saida Anima Ar -->
|
||||
<npc id="19832" personalPoints="46" serverPoints="115" zonePoints="277" zoneId="2" /> <!-- Luminous Soul -->
|
||||
<npc id="19824" personalPoints="45" serverPoints="45" zonePoints="95" zoneId="2" /> <!-- Soul Flower -->
|
||||
<npc id="27757" personalPoints="18" serverPoints="18" zonePoints="19" zoneId="2" /> <!-- Floato Anima Ar -->
|
||||
<npc id="27758" personalPoints="18" serverPoints="18" zonePoints="19" zoneId="2" /> <!-- Anima Ar Hunter -->
|
||||
<npc id="27759" personalPoints="18" serverPoints="18" zonePoints="19" zoneId="2" /> <!-- Anima Ar Sorceress -->
|
||||
<npc id="27760" personalPoints="18" serverPoints="18" zonePoints="19" zoneId="2" /> <!-- Saida Anima Ar -->
|
||||
<npc id="19832" personalPoints="267" serverPoints="267" zonePoints="810" zoneId="2" /> <!-- Luminous Soul -->
|
||||
<npc id="19824" personalPoints="180" serverPoints="180" zonePoints="95" zoneId="2" /> <!-- Soul Flower -->
|
||||
|
||||
<!-- Anima Area 2 (Lv. 120) -->
|
||||
<npc id="27761" personalPoints="11" serverPoints="11" zonePoints="22" zoneId="2" /> <!-- Atron Anima Mide -->
|
||||
<npc id="27762" personalPoints="11" serverPoints="11" zonePoints="22" zoneId="2" /> <!-- Craigo Anima Mide -->
|
||||
<npc id="27763" personalPoints="11" serverPoints="11" zonePoints="22" zoneId="2" /> <!-- Kerberos Anima Mide -->
|
||||
<npc id="27764" personalPoints="11" serverPoints="11" zonePoints="22" zoneId="2" /> <!-- Anima Mide Hunter -->
|
||||
<npc id="27765" personalPoints="11" serverPoints="11" zonePoints="22" zoneId="2" /> <!-- Anima Mide Sorceress -->
|
||||
<npc id="27766" personalPoints="11" serverPoints="11" zonePoints="22" zoneId="2" /> <!-- Saida Anima Mide -->
|
||||
<npc id="27767" personalPoints="11" serverPoints="11" zonePoints="22" zoneId="2" /> <!-- Anima Mide Blader -->
|
||||
<npc id="19825" personalPoints="55" serverPoints="55" zonePoints="110" zoneId="2" /> <!-- Soul Flower -->
|
||||
<npc id="27761" personalPoints="28" serverPoints="28" zonePoints="22" zoneId="2" /> <!-- Atron Anima Mide -->
|
||||
<npc id="27762" personalPoints="28" serverPoints="28" zonePoints="22" zoneId="2" /> <!-- Craigo Anima Mide -->
|
||||
<npc id="27763" personalPoints="28" serverPoints="28" zonePoints="22" zoneId="2" /> <!-- Kerberos Anima Mide -->
|
||||
<npc id="27764" personalPoints="28" serverPoints="28" zonePoints="22" zoneId="2" /> <!-- Anima Mide Hunter -->
|
||||
<npc id="27765" personalPoints="28" serverPoints="28" zonePoints="22" zoneId="2" /> <!-- Anima Mide Sorceress -->
|
||||
<npc id="27766" personalPoints="28" serverPoints="28" zonePoints="22" zoneId="2" /> <!-- Saida Anima Mide -->
|
||||
<npc id="27767" personalPoints="28" serverPoints="28" zonePoints="22" zoneId="2" /> <!-- Anima Mide Blader -->
|
||||
<npc id="19825" personalPoints="280" serverPoints="280" zonePoints="110" zoneId="2" /> <!-- Soul Flower -->
|
||||
|
||||
<!-- Anima Area 3 (Lv. 124) -->
|
||||
<npc id="27768" personalPoints="16" serverPoints="16" zonePoints="32" zoneId="2" /> <!-- Atron Anima Telro -->
|
||||
<npc id="27769" personalPoints="16" serverPoints="16" zonePoints="32" zoneId="2" /> <!-- Craigo Anima Telro -->
|
||||
<npc id="27770" personalPoints="16" serverPoints="16" zonePoints="32" zoneId="2" /> <!-- Beor Anima Telro -->
|
||||
<npc id="27771" personalPoints="16" serverPoints="16" zonePoints="32" zoneId="2" /> <!-- Anima Telro Hunter -->
|
||||
<npc id="27772" personalPoints="16" serverPoints="16" zonePoints="32" zoneId="2" /> <!-- Anima Telro Sorceress -->
|
||||
<npc id="27773" personalPoints="16" serverPoints="16" zonePoints="32" zoneId="2" /> <!-- Saida Anima Telro -->
|
||||
<npc id="27774" personalPoints="16" serverPoints="16" zonePoints="32" zoneId="2" /> <!-- Anima Telro Blader -->
|
||||
<npc id="27775" personalPoints="16" serverPoints="16" zonePoints="32" zoneId="2" /> <!-- Anima Telro Guard -->
|
||||
<npc id="19826" personalPoints="80" serverPoints="80" zonePoints="160" zoneId="2" /> <!-- Soul Flower -->
|
||||
<npc id="19829" personalPoints="462" serverPoints="2314" zonePoints="13888" zoneId="2" /> <!-- Soul Tree -->
|
||||
<npc id="27782" personalPoints="16" serverPoints="16" zonePoints="32" zoneId="2" /> <!-- Catshi Trickster Anima Guardian -->
|
||||
<npc id="27783" personalPoints="16" serverPoints="16" zonePoints="32" zoneId="2" /> <!-- Catshi Muse Anima Guardian -->
|
||||
<npc id="27784" personalPoints="16" serverPoints="16" zonePoints="32" zoneId="2" /> <!-- Catshi Ripper Anima Guardian -->
|
||||
<npc id="27768" personalPoints="43" serverPoints="43" zonePoints="32" zoneId="2" /> <!-- Atron Anima Telro -->
|
||||
<npc id="27769" personalPoints="43" serverPoints="43" zonePoints="32" zoneId="2" /> <!-- Craigo Anima Telro -->
|
||||
<npc id="27770" personalPoints="43" serverPoints="43" zonePoints="32" zoneId="2" /> <!-- Beor Anima Telro -->
|
||||
<npc id="27771" personalPoints="43" serverPoints="43" zonePoints="32" zoneId="2" /> <!-- Anima Telro Hunter -->
|
||||
<npc id="27772" personalPoints="43" serverPoints="43" zonePoints="32" zoneId="2" /> <!-- Anima Telro Sorceress -->
|
||||
<npc id="27773" personalPoints="43" serverPoints="43" zonePoints="32" zoneId="2" /> <!-- Saida Anima Telro -->
|
||||
<npc id="27774" personalPoints="43" serverPoints="43" zonePoints="32" zoneId="2" /> <!-- Anima Telro Blader -->
|
||||
<npc id="27775" personalPoints="43" serverPoints="43" zonePoints="32" zoneId="2" /> <!-- Anima Telro Guard -->
|
||||
<npc id="19826" personalPoints="430" serverPoints="430" zonePoints="160" zoneId="2" /> <!-- Soul Flower -->
|
||||
<npc id="19829" personalPoints="3326" serverPoints="997920" zonePoints="159667" zoneId="2" /> <!-- Soul Tree -->
|
||||
<npc id="27782" personalPoints="43" serverPoints="43" zonePoints="32" zoneId="2" /> <!-- Catshi Trickster Anima Guardian -->
|
||||
<npc id="27783" personalPoints="43" serverPoints="43" zonePoints="32" zoneId="2" /> <!-- Catshi Muse Anima Guardian -->
|
||||
<npc id="27784" personalPoints="43" serverPoints="43" zonePoints="32" zoneId="2" /> <!-- Catshi Ripper Anima Guardian -->
|
||||
|
||||
<!-- Nox Area 1 (Lv. 116) -->
|
||||
<npc id="27734" personalPoints="9" serverPoints="9" zonePoints="19" zoneId="3" /> <!-- Daril Nox Ar -->
|
||||
<npc id="27734" personalPoints="18" serverPoints="18" zonePoints="19" zoneId="3" /> <!-- Daril Nox Ar -->
|
||||
<npc id="27735" personalPoints="30" serverPoints="30" zonePoints="19" zoneId="3" /> <!-- Seo Nox Ar -->
|
||||
<npc id="27736" personalPoints="9" serverPoints="9" zonePoints="19" zoneId="3" /> <!-- Floato Nox Ar -->
|
||||
<npc id="27737" personalPoints="9" serverPoints="9" zonePoints="19" zoneId="3" /> <!-- Nox Ar Hunter -->
|
||||
<npc id="27738" personalPoints="9" serverPoints="9" zonePoints="19" zoneId="3" /> <!-- Nox Ar Sorceress -->
|
||||
<npc id="27739" personalPoints="9" serverPoints="9" zonePoints="19" zoneId="3" /> <!-- Saida Nox Ar -->
|
||||
<npc id="19831" personalPoints="46" serverPoints="115" zonePoints="277" zoneId="3" /> <!-- Luminous Soul -->
|
||||
<npc id="19821" personalPoints="45" serverPoints="45" zonePoints="95" zoneId="3" /> <!-- Soul Flower -->
|
||||
<npc id="27736" personalPoints="18" serverPoints="18" zonePoints="19" zoneId="3" /> <!-- Floato Nox Ar -->
|
||||
<npc id="27737" personalPoints="18" serverPoints="18" zonePoints="19" zoneId="3" /> <!-- Nox Ar Hunter -->
|
||||
<npc id="27738" personalPoints="18" serverPoints="18" zonePoints="19" zoneId="3" /> <!-- Nox Ar Sorceress -->
|
||||
<npc id="27739" personalPoints="18" serverPoints="18" zonePoints="19" zoneId="3" /> <!-- Saida Nox Ar -->
|
||||
<npc id="19831" personalPoints="267" serverPoints="267" zonePoints="810" zoneId="3" /> <!-- Luminous Soul -->
|
||||
<npc id="19821" personalPoints="180" serverPoints="180" zonePoints="95" zoneId="3" /> <!-- Soul Flower -->
|
||||
|
||||
<!-- Nox Area 2 (Lv. 120) -->
|
||||
<npc id="27740" personalPoints="11" serverPoints="11" zonePoints="22" zoneId="3" /> <!-- Atron Nox Mide -->
|
||||
<npc id="27741" personalPoints="11" serverPoints="11" zonePoints="22" zoneId="3" /> <!-- Craigo Nox Mide -->
|
||||
<npc id="27742" personalPoints="11" serverPoints="11" zonePoints="22" zoneId="3" /> <!-- Kerberos Nox Mide -->
|
||||
<npc id="27743" personalPoints="11" serverPoints="11" zonePoints="22" zoneId="3" /> <!-- Nox Mide Hunter -->
|
||||
<npc id="27744" personalPoints="11" serverPoints="11" zonePoints="22" zoneId="3" /> <!-- Nox Mide Sorceress -->
|
||||
<npc id="27745" personalPoints="11" serverPoints="11" zonePoints="22" zoneId="3" /> <!-- Saida Nox Mide -->
|
||||
<npc id="27746" personalPoints="11" serverPoints="11" zonePoints="22" zoneId="3" /> <!-- Nox Mide Blader -->
|
||||
<npc id="19822" personalPoints="55" serverPoints="55" zonePoints="110" zoneId="3" /> <!-- Soul Flower -->
|
||||
<npc id="27740" personalPoints="28" serverPoints="28" zonePoints="22" zoneId="3" /> <!-- Atron Nox Mide -->
|
||||
<npc id="27741" personalPoints="28" serverPoints="28" zonePoints="22" zoneId="3" /> <!-- Craigo Nox Mide -->
|
||||
<npc id="27742" personalPoints="28" serverPoints="28" zonePoints="22" zoneId="3" /> <!-- Kerberos Nox Mide -->
|
||||
<npc id="27743" personalPoints="28" serverPoints="28" zonePoints="22" zoneId="3" /> <!-- Nox Mide Hunter -->
|
||||
<npc id="27744" personalPoints="28" serverPoints="28" zonePoints="22" zoneId="3" /> <!-- Nox Mide Sorceress -->
|
||||
<npc id="27745" personalPoints="28" serverPoints="28" zonePoints="22" zoneId="3" /> <!-- Saida Nox Mide -->
|
||||
<npc id="27746" personalPoints="28" serverPoints="28" zonePoints="22" zoneId="3" /> <!-- Nox Mide Blader -->
|
||||
<npc id="19822" personalPoints="280" serverPoints="280" zonePoints="110" zoneId="3" /> <!-- Soul Flower -->
|
||||
|
||||
<!-- Nox Area 3 (Lv. 124) -->
|
||||
<npc id="27747" personalPoints="16" serverPoints="16" zonePoints="32" zoneId="3" /> <!-- Atron Nox Telro -->
|
||||
<npc id="27748" personalPoints="16" serverPoints="16" zonePoints="32" zoneId="3" /> <!-- Craigo Nox Telro -->
|
||||
<npc id="27749" personalPoints="16" serverPoints="16" zonePoints="32" zoneId="3" /> <!-- Beor Nox Telro -->
|
||||
<npc id="27750" personalPoints="16" serverPoints="16" zonePoints="32" zoneId="3" /> <!-- Nox Telro Hunter -->
|
||||
<npc id="27751" personalPoints="16" serverPoints="16" zonePoints="32" zoneId="3" /> <!-- Nox Telro Sorceress -->
|
||||
<npc id="27752" personalPoints="16" serverPoints="16" zonePoints="32" zoneId="3" /> <!-- Saida Nox Telro -->
|
||||
<npc id="27753" personalPoints="16" serverPoints="16" zonePoints="32" zoneId="3" /> <!-- Nox Telro Blader -->
|
||||
<npc id="27754" personalPoints="16" serverPoints="16" zonePoints="32" zoneId="3" /> <!-- Nox Telro Guard -->
|
||||
<npc id="19823" personalPoints="80" serverPoints="80" zonePoints="160" zoneId="3" /> <!-- Soul Flower -->
|
||||
<npc id="19828" personalPoints="462" serverPoints="2314" zonePoints="13888" zoneId="3" /> <!-- Soul Tree -->
|
||||
<npc id="27779" personalPoints="16" serverPoints="16" zonePoints="32" zoneId="3" /> <!-- Catshi Trickster Nox Guardian -->
|
||||
<npc id="27780" personalPoints="16" serverPoints="16" zonePoints="32" zoneId="3" /> <!-- Catshi Muse Nox Guardian -->
|
||||
<npc id="27781" personalPoints="16" serverPoints="16" zonePoints="32" zoneId="3" /> <!-- Catshi Ripper Nox Guardian -->
|
||||
<npc id="27747" personalPoints="43" serverPoints="43" zonePoints="32" zoneId="3" /> <!-- Atron Nox Telro -->
|
||||
<npc id="27748" personalPoints="43" serverPoints="43" zonePoints="32" zoneId="3" /> <!-- Craigo Nox Telro -->
|
||||
<npc id="27749" personalPoints="43" serverPoints="43" zonePoints="32" zoneId="3" /> <!-- Beor Nox Telro -->
|
||||
<npc id="27750" personalPoints="43" serverPoints="43" zonePoints="32" zoneId="3" /> <!-- Nox Telro Hunter -->
|
||||
<npc id="27751" personalPoints="43" serverPoints="43" zonePoints="32" zoneId="3" /> <!-- Nox Telro Sorceress -->
|
||||
<npc id="27752" personalPoints="43" serverPoints="43" zonePoints="32" zoneId="3" /> <!-- Saida Nox Telro -->
|
||||
<npc id="27753" personalPoints="43" serverPoints="43" zonePoints="32" zoneId="3" /> <!-- Nox Telro Blader -->
|
||||
<npc id="27754" personalPoints="43" serverPoints="43" zonePoints="32" zoneId="3" /> <!-- Nox Telro Guard -->
|
||||
<npc id="19823" personalPoints="430" serverPoints="430" zonePoints="160" zoneId="3" /> <!-- Soul Flower -->
|
||||
<npc id="19828" personalPoints="3326" serverPoints="997920" zonePoints="159667" zoneId="3" /> <!-- Soul Tree -->
|
||||
<npc id="27779" personalPoints="43" serverPoints="43" zonePoints="32" zoneId="3" /> <!-- Catshi Trickster Nox Guardian -->
|
||||
<npc id="27780" personalPoints="43" serverPoints="43" zonePoints="32" zoneId="3" /> <!-- Catshi Muse Nox Guardian -->
|
||||
<npc id="27781" personalPoints="43" serverPoints="43" zonePoints="32" zoneId="3" /> <!-- Catshi Ripper Nox Guardian -->
|
||||
|
||||
<!-- Fiery Field (no PvP) (Lv. 116) -->
|
||||
<npc id="27801" personalPoints="6" serverPoints="6" /> <!-- Seo Agel -->
|
||||
@@ -133,42 +133,42 @@
|
||||
<npc id="27806" personalPoints="6" serverPoints="6" /> <!-- Catshi Agel Knight -->
|
||||
|
||||
<!-- Garden of Flames (no PvP) (Lv. 120) -->
|
||||
<npc id="27794" personalPoints="6" serverPoints="6" /> <!-- Delia Gof -->
|
||||
<npc id="27795" personalPoints="6" serverPoints="6" /> <!-- Aselon Gof -->
|
||||
<npc id="27796" personalPoints="6" serverPoints="6" /> <!-- Retel Gof -->
|
||||
<npc id="27797" personalPoints="6" serverPoints="6" /> <!-- Catshi Gof Wizard -->
|
||||
<npc id="27798" personalPoints="6" serverPoints="6" /> <!-- Catshi Gof Archer -->
|
||||
<npc id="27799" personalPoints="6" serverPoints="6" /> <!-- Catshi Gof Warrior -->
|
||||
<npc id="27794" personalPoints="9" serverPoints="9" /> <!-- Delia Gof -->
|
||||
<npc id="27795" personalPoints="9" serverPoints="9" /> <!-- Aselon Gof -->
|
||||
<npc id="27796" personalPoints="9" serverPoints="9" /> <!-- Retel Gof -->
|
||||
<npc id="27797" personalPoints="9" serverPoints="9" /> <!-- Catshi Gof Wizard -->
|
||||
<npc id="27798" personalPoints="9" serverPoints="9" /> <!-- Catshi Gof Archer -->
|
||||
<npc id="27799" personalPoints="9" serverPoints="9" /> <!-- Catshi Gof Warrior -->
|
||||
|
||||
<!-- Vita Area 1 (Lv. 124) -->
|
||||
<npc id="27808" personalPoints="16" serverPoints="16" zonePoints="32" zoneId="4" /> <!-- Renard Vita -->
|
||||
<npc id="27810" personalPoints="16" serverPoints="16" zonePoints="32" zoneId="4" /> <!-- Catshi Vita Wizard -->
|
||||
<npc id="27811" personalPoints="16" serverPoints="16" zonePoints="32" zoneId="4" /> <!-- Catshi Vita Archer -->
|
||||
<npc id="27812" personalPoints="16" serverPoints="16" zonePoints="32" zoneId="4" /> <!-- Catshi Vita Warrior -->
|
||||
<npc id="27813" personalPoints="16" serverPoints="16" zonePoints="32" zoneId="4" /> <!-- Catshi Vita Knight -->
|
||||
<npc id="27814" personalPoints="16" serverPoints="16" zonePoints="32" zoneId="4" /> <!-- Vita Sorceress -->
|
||||
<npc id="27815" personalPoints="16" serverPoints="16" zonePoints="32" zoneId="4" /> <!-- Vita Seeker -->
|
||||
<npc id="27816" personalPoints="16" serverPoints="16" zonePoints="32" zoneId="4" /> <!-- Vita Reaper -->
|
||||
<npc id="27808" personalPoints="43" serverPoints="43" zonePoints="32" zoneId="4" /> <!-- Renard Vita -->
|
||||
<npc id="27810" personalPoints="43" serverPoints="43" zonePoints="32" zoneId="4" /> <!-- Catshi Vita Wizard -->
|
||||
<npc id="27811" personalPoints="43" serverPoints="43" zonePoints="32" zoneId="4" /> <!-- Catshi Vita Archer -->
|
||||
<npc id="27812" personalPoints="43" serverPoints="43" zonePoints="32" zoneId="4" /> <!-- Catshi Vita Warrior -->
|
||||
<npc id="27813" personalPoints="43" serverPoints="43" zonePoints="32" zoneId="4" /> <!-- Catshi Vita Knight -->
|
||||
<npc id="27814" personalPoints="43" serverPoints="43" zonePoints="32" zoneId="4" /> <!-- Vita Sorceress -->
|
||||
<npc id="27815" personalPoints="43" serverPoints="43" zonePoints="32" zoneId="4" /> <!-- Vita Seeker -->
|
||||
<npc id="27816" personalPoints="43" serverPoints="43" zonePoints="32" zoneId="4" /> <!-- Vita Reaper -->
|
||||
<npc id="19840" personalPoints="80" serverPoints="80" zonePoints="160" zoneId="4" /> <!-- Soul Flower -->
|
||||
<npc id="19842" personalPoints="462" serverPoints="2314" zonePoints="13888" zoneId="4" /> <!-- Soul Tree -->
|
||||
<npc id="27826" personalPoints="16" serverPoints="16" zonePoints="32" zoneId="4" /> <!-- Catshi Trickster - Vita Guardian -->
|
||||
<npc id="27827" personalPoints="16" serverPoints="16" zonePoints="32" zoneId="4" /> <!-- Catshi Muse - Vita Guardian -->
|
||||
<npc id="27828" personalPoints="16" serverPoints="16" zonePoints="32" zoneId="4" /> <!-- Catshi Guard - Vita Guardian -->
|
||||
<npc id="19842" personalPoints="3326" serverPoints="997920" zonePoints="159667" zoneId="4" /> <!-- Soul Tree -->
|
||||
<npc id="27826" personalPoints="43" serverPoints="43" zonePoints="32" zoneId="4" /> <!-- Catshi Trickster - Vita Guardian -->
|
||||
<npc id="27827" personalPoints="43" serverPoints="43" zonePoints="32" zoneId="4" /> <!-- Catshi Muse - Vita Guardian -->
|
||||
<npc id="27828" personalPoints="43" serverPoints="43" zonePoints="32" zoneId="4" /> <!-- Catshi Guard - Vita Guardian -->
|
||||
|
||||
<!-- Ignis Area 1 (Lv. 128) -->
|
||||
<npc id="27817" personalPoints="20" serverPoints="20" zonePoints="40" zoneId="5" /> <!-- Beor Ignis -->
|
||||
<npc id="27819" personalPoints="20" serverPoints="20" zonePoints="40" zoneId="5" /> <!-- Catshi Ignis Wizard -->
|
||||
<npc id="27820" personalPoints="20" serverPoints="20" zonePoints="40" zoneId="5" /> <!-- Catshi Ignis Archer -->
|
||||
<npc id="27821" personalPoints="20" serverPoints="20" zonePoints="40" zoneId="5" /> <!-- Ignis Sorceress -->
|
||||
<npc id="27822" personalPoints="20" serverPoints="20" zonePoints="40" zoneId="5" /> <!-- Ignis Seeker -->
|
||||
<npc id="27823" personalPoints="20" serverPoints="20" zonePoints="40" zoneId="5" /> <!-- Ignis Reaper -->
|
||||
<npc id="27824" personalPoints="20" serverPoints="20" zonePoints="40" zoneId="5" /> <!-- Ignis Swordsman -->
|
||||
<npc id="27825" personalPoints="20" serverPoints="20" zonePoints="40" zoneId="5" /> <!-- Ignis Guardian -->
|
||||
<npc id="19841" personalPoints="80" serverPoints="80" zonePoints="160" zoneId="5" /> <!-- Soul Flower -->
|
||||
<npc id="19843" personalPoints="462" serverPoints="2314" zonePoints="13888" zoneId="5" /> <!-- Soul Tree -->
|
||||
<npc id="27829" personalPoints="20" serverPoints="20" zonePoints="40" zoneId="5" /> <!-- Catshi Trickster - Ignis Guardian -->
|
||||
<npc id="27830" personalPoints="20" serverPoints="20" zonePoints="40" zoneId="5" /> <!-- Catshi Muse - Ignis Guardian -->
|
||||
<npc id="27831" personalPoints="20" serverPoints="20" zonePoints="40" zoneId="5" /> <!-- Catshi Guard - Ignis Guardian -->
|
||||
<npc id="27817" personalPoints="67" serverPoints="67" zonePoints="42" zoneId="5" /> <!-- Beor Ignis -->
|
||||
<npc id="27819" personalPoints="67" serverPoints="67" zonePoints="42" zoneId="5" /> <!-- Catshi Ignis Wizard -->
|
||||
<npc id="27820" personalPoints="67" serverPoints="67" zonePoints="42" zoneId="5" /> <!-- Catshi Ignis Archer -->
|
||||
<npc id="27821" personalPoints="67" serverPoints="67" zonePoints="42" zoneId="5" /> <!-- Ignis Sorceress -->
|
||||
<npc id="27822" personalPoints="67" serverPoints="67" zonePoints="42" zoneId="5" /> <!-- Ignis Seeker -->
|
||||
<npc id="27823" personalPoints="67" serverPoints="67" zonePoints="42" zoneId="5" /> <!-- Ignis Reaper -->
|
||||
<npc id="27824" personalPoints="67" serverPoints="67" zonePoints="42" zoneId="5" /> <!-- Ignis Swordsman -->
|
||||
<npc id="27825" personalPoints="67" serverPoints="67" zonePoints="42" zoneId="5" /> <!-- Ignis Guardian -->
|
||||
<npc id="19841" personalPoints="670" serverPoints="670" zonePoints="210" zoneId="5" /> <!-- Soul Flower -->
|
||||
<npc id="19843" personalPoints="3326" serverPoints="997920" zonePoints="159667" zoneId="5" /> <!-- Soul Tree -->
|
||||
<npc id="27829" personalPoints="67" serverPoints="20" zonePoints="42" zoneId="5" /> <!-- Catshi Trickster - Ignis Guardian -->
|
||||
<npc id="27830" personalPoints="67" serverPoints="67" zonePoints="42" zoneId="5" /> <!-- Catshi Muse - Ignis Guardian -->
|
||||
<npc id="27831" personalPoints="67" serverPoints="67" zonePoints="42" zoneId="5" /> <!-- Catshi Guard - Ignis Guardian -->
|
||||
|
||||
<!-- Players Points -->
|
||||
<player level="110" personalPoints="33" serverPoints="16" bloodyCoins="50" /> <!-- Player level 110 -->
|
||||
|
||||
@@ -58,10 +58,10 @@ public class LionelHunter extends AbstractNpcAI
|
||||
private static final int VITALITY_OF_THE_EXALTED_LV2 = 47855;
|
||||
private static final int DIGNITY_OF_THE_EXALTED_LV6 = 80970;
|
||||
private static final int FAVOR_OF_THE_EXLATED = 45870;
|
||||
private static final int COMMON_BOX_PHYSCAL = 81207;
|
||||
private static final int COMMON_BOX_PHYSICAL = 81207;
|
||||
private static final int COMMON_BOX_MAGIC = 81208;
|
||||
private static final int SPECIAL_BOX_MAGIC = 81209;
|
||||
private static final int SPECIAL_BOX_PHYSICAL = 81210;
|
||||
private static final int SPECIAL_BOX_PHYSICAL = 81209;
|
||||
private static final int SPECIAL_BOX_MAGIC = 81210;
|
||||
|
||||
private LionelHunter()
|
||||
{
|
||||
@@ -98,28 +98,31 @@ public class LionelHunter extends AbstractNpcAI
|
||||
}
|
||||
case "getSupplyBox":
|
||||
{
|
||||
if ((qs7 != null) && qs7.isCompleted())
|
||||
if (((qs7 != null) && !qs7.isCompleted()) || (qs7 == null))
|
||||
{
|
||||
if (player.isMageClass())
|
||||
htmltext = "33907-06-no.html";
|
||||
}
|
||||
else if (qs7.isCompleted())
|
||||
{
|
||||
if (player.getVariables().getBoolean("LIONEL_REWARD_RECEIVED", false) == true)
|
||||
{
|
||||
giveItems(player, COMMON_BOX_MAGIC, 1);
|
||||
giveItems(player, SPECIAL_BOX_MAGIC, 1);
|
||||
htmltext = "33907-06-received.html";
|
||||
}
|
||||
else
|
||||
{
|
||||
giveItems(player, COMMON_BOX_PHYSCAL, 1);
|
||||
giveItems(player, SPECIAL_BOX_PHYSICAL, 1);
|
||||
if (player.isMageClass())
|
||||
{
|
||||
giveItems(player, COMMON_BOX_MAGIC, 1);
|
||||
giveItems(player, SPECIAL_BOX_MAGIC, 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
giveItems(player, COMMON_BOX_PHYSICAL, 1);
|
||||
giveItems(player, SPECIAL_BOX_PHYSICAL, 1);
|
||||
}
|
||||
player.getVariables().set("LIONEL_REWARD_RECEIVED", true);
|
||||
player.getVariables().storeMe();
|
||||
}
|
||||
player.getVariables().set("LIONEL_REWARD_RECEIVED", true);
|
||||
player.getVariables().storeMe();
|
||||
}
|
||||
else if (player.getVariables().getBoolean("LIONEL_REWARD_RECEIVED", false))
|
||||
{
|
||||
htmltext = "33907-06-received.html";
|
||||
}
|
||||
else
|
||||
{
|
||||
htmltext = "33907-06-no.html";
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -234,7 +237,6 @@ public class LionelHunter extends AbstractNpcAI
|
||||
htmltext = "33907-not-completed.html";
|
||||
}
|
||||
break;
|
||||
|
||||
}
|
||||
}
|
||||
return htmltext;
|
||||
@@ -250,4 +252,4 @@ public class LionelHunter extends AbstractNpcAI
|
||||
{
|
||||
new LionelHunter();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,181 @@
|
||||
/*
|
||||
* This file is part of the L2J Mobius project.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package ai.areas.Rune.SwampOfScreams;
|
||||
|
||||
import java.util.Calendar;
|
||||
import java.util.concurrent.atomic.AtomicReference;
|
||||
|
||||
import org.l2jmobius.commons.util.CommonUtil;
|
||||
import org.l2jmobius.gameserver.data.xml.SpawnData;
|
||||
import org.l2jmobius.gameserver.model.World;
|
||||
import org.l2jmobius.gameserver.model.actor.Npc;
|
||||
import org.l2jmobius.gameserver.model.actor.Player;
|
||||
import org.l2jmobius.gameserver.model.spawns.SpawnGroup;
|
||||
import org.l2jmobius.gameserver.model.spawns.SpawnTemplate;
|
||||
import org.l2jmobius.gameserver.network.NpcStringId;
|
||||
|
||||
import ai.AbstractNpcAI;
|
||||
|
||||
/**
|
||||
* @author Tanatos
|
||||
*/
|
||||
public class SwampOfScreamsSiege extends AbstractNpcAI
|
||||
{
|
||||
// NPCs
|
||||
private static final int[] SWAMP_MONSTERS =
|
||||
{
|
||||
24570,
|
||||
24571,
|
||||
24572,
|
||||
24573
|
||||
};
|
||||
private static final int SWAMP_PETRA = 24574;
|
||||
private static final AtomicReference<SpawnTemplate> SPAWN_SWAMP_MONSTERS = new AtomicReference<>();
|
||||
// Misc
|
||||
private static final int[] DAYS_OF_WEEK =
|
||||
{
|
||||
Calendar.MONDAY,
|
||||
Calendar.TUESDAY,
|
||||
Calendar.WEDNESDAY,
|
||||
Calendar.THURSDAY,
|
||||
Calendar.FRIDAY,
|
||||
Calendar.SATURDAY,
|
||||
Calendar.SUNDAY
|
||||
};
|
||||
// Schedule: 10-11 & 22-23
|
||||
private static final int[] DAY_TIME =
|
||||
{
|
||||
10,
|
||||
00
|
||||
};
|
||||
private static final int[] NIGHT_TIME =
|
||||
{
|
||||
22,
|
||||
00
|
||||
};
|
||||
private static final long DESPAWN_DELAY = 3600000;
|
||||
private static boolean _daytime = false;
|
||||
|
||||
private SwampOfScreamsSiege()
|
||||
{
|
||||
addKillId(SWAMP_MONSTERS);
|
||||
scheduleDayTime();
|
||||
scheduleNightTime();
|
||||
LOGGER.info("Swamp of Screams siege starts from 10:00 to 11:00 and from 22:00 to 23:00.");
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onAdvEvent(String event, Npc npc, Player player)
|
||||
{
|
||||
switch (event)
|
||||
{
|
||||
case "day_time_spawn":
|
||||
{
|
||||
World.getInstance().getPlayers().forEach(p -> showOnScreenMsg(p, NpcStringId.HERALD_S_ANNOUNCEMENT_10_00_11_00_MONSTERS_ARE_SPAWNING_IN_THE_SWAMP_OF_SCREAMS_KILL_THEM_ALL, 2, 10000, true));
|
||||
SPAWN_SWAMP_MONSTERS.set(SpawnData.getInstance().getSpawnByName("SwampOfScreamsMonsters"));
|
||||
SPAWN_SWAMP_MONSTERS.get().getGroups().forEach(SpawnGroup::spawnAll);
|
||||
_daytime = true;
|
||||
startQuestTimer("despawn", DESPAWN_DELAY, null, null);
|
||||
break;
|
||||
}
|
||||
case "night_time_spawn":
|
||||
{
|
||||
World.getInstance().getPlayers().forEach(p -> showOnScreenMsg(p, NpcStringId.HERALD_S_ANNOUNCEMENT_10_00_P_M_11_00_P_M_MONSTERS_ARE_INVADING_THE_SWAMP_OF_SCREAMS_AT_NIGHT_TIME, 2, 10000, true));
|
||||
SPAWN_SWAMP_MONSTERS.set(SpawnData.getInstance().getSpawnByName("SwampOfScreamsMonsters"));
|
||||
SPAWN_SWAMP_MONSTERS.get().getGroups().forEach(SpawnGroup::spawnAll);
|
||||
_daytime = false;
|
||||
startQuestTimer("despawn", DESPAWN_DELAY, null, null);
|
||||
break;
|
||||
}
|
||||
case "despawn":
|
||||
{
|
||||
if (_daytime)
|
||||
{
|
||||
World.getInstance().getPlayers().forEach(p -> showOnScreenMsg(p, NpcStringId.HERALD_S_ANNOUNCEMENT_10_P_M_11_00_P_M_MONSTERS_OF_THE_SWAMP_OF_SCREAMS_HAVE_FLED_AWAY, 2, 10000, true));
|
||||
}
|
||||
else
|
||||
{
|
||||
World.getInstance().getPlayers().forEach(p -> showOnScreenMsg(p, NpcStringId.HERALD_S_ANNOUNCEMENT_10_00_11_00_MONSTERS_OF_THE_SWAMP_OF_SCREAMS_ARE_DEFEATED, 2, 10000, true));
|
||||
}
|
||||
SPAWN_SWAMP_MONSTERS.set(SpawnData.getInstance().getSpawnByName("SwampOfScreamsMonsters"));
|
||||
SPAWN_SWAMP_MONSTERS.get().getGroups().forEach(SpawnGroup::despawnAll);
|
||||
break;
|
||||
}
|
||||
}
|
||||
return super.onAdvEvent(event, npc, player);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onKill(Npc npc, Player killer, boolean isSummon)
|
||||
{
|
||||
if ((CommonUtil.contains(SWAMP_MONSTERS, npc.getId())) && (getRandom(100) < 3))
|
||||
{
|
||||
addSpawn(SWAMP_PETRA, npc.getLocation(), false, 600000, false);
|
||||
}
|
||||
return super.onKill(npc, killer, isSummon);
|
||||
}
|
||||
|
||||
private void scheduleDayTime()
|
||||
{
|
||||
long time = Long.MAX_VALUE;
|
||||
for (int day : DAYS_OF_WEEK)
|
||||
{
|
||||
final long nextDateMillis = getNextDateMilis(day, DAY_TIME[0], DAY_TIME[1]);
|
||||
if (nextDateMillis < time)
|
||||
{
|
||||
time = nextDateMillis;
|
||||
}
|
||||
}
|
||||
startQuestTimer("day_time_spawn", time - System.currentTimeMillis(), null, null);
|
||||
}
|
||||
|
||||
private void scheduleNightTime()
|
||||
{
|
||||
long time = Long.MAX_VALUE;
|
||||
for (int day : DAYS_OF_WEEK)
|
||||
{
|
||||
final long nextDateMillis = getNextDateMilis(day, NIGHT_TIME[0], NIGHT_TIME[1]);
|
||||
if (nextDateMillis < time)
|
||||
{
|
||||
time = nextDateMillis;
|
||||
}
|
||||
}
|
||||
startQuestTimer("night_time_spawn", time - System.currentTimeMillis(), null, null);
|
||||
}
|
||||
|
||||
private long getNextDateMilis(int dayOfWeek, int hour, int minute)
|
||||
{
|
||||
final Calendar calendar = Calendar.getInstance();
|
||||
calendar.set(Calendar.HOUR_OF_DAY, hour);
|
||||
calendar.set(Calendar.MINUTE, minute);
|
||||
calendar.set(Calendar.SECOND, 0);
|
||||
for (int i = 0; i < 7; i++)
|
||||
{
|
||||
if ((calendar.get(Calendar.DAY_OF_WEEK) == dayOfWeek) && (calendar.getTimeInMillis() > System.currentTimeMillis()))
|
||||
{
|
||||
return calendar.getTimeInMillis();
|
||||
}
|
||||
calendar.add(Calendar.DAY_OF_WEEK, 1);
|
||||
}
|
||||
return calendar.getTimeInMillis();
|
||||
}
|
||||
|
||||
public static void main(String[] args)
|
||||
{
|
||||
new SwampOfScreamsSiege();
|
||||
}
|
||||
}
|
||||
@@ -46,25 +46,9 @@ public class AdenReconstructorManager extends AbstractNpcAI
|
||||
{
|
||||
if (npc != null)
|
||||
{
|
||||
switch (event)
|
||||
if (event.equals("SPAM_TEXT"))
|
||||
{
|
||||
case "SPAM_TEXT":
|
||||
{
|
||||
npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.THE_LAND_OF_ADEN_IS_IN_NEED_OF_MATERIALS_TO_REBUILD_FROM_SHILLIEN_S_DESTRUCTION);
|
||||
startQuestTimer("SPAM_TEXT2", 1000, npc, null);
|
||||
break;
|
||||
}
|
||||
case "SPAM_TEXT2":
|
||||
{
|
||||
npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.PLEASE_DONATE_ANY_UNUSED_MATERIALS_YOU_HAVE_TO_HELP_REBUILD_ADEN);
|
||||
startQuestTimer("SPAM_TEXT3", 1000, npc, null);
|
||||
break;
|
||||
}
|
||||
case "SPAM_TEXT3":
|
||||
{
|
||||
npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.YOU_LL_RECEIVE_A_GIFT_FOR_ANY_APPLICABLE_DONATION);
|
||||
break;
|
||||
}
|
||||
npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.THE_LAND_OF_ADEN_IS_IN_NEED_OF_MATERIALS_TO_REBUILD_FROM_SHILLIEN_S_DESTRUCTION);
|
||||
}
|
||||
}
|
||||
return super.onAdvEvent(event, npc, player);
|
||||
|
||||
@@ -38,85 +38,84 @@ public class AetherDrops extends AbstractNpcAI
|
||||
// Monsters
|
||||
private static final int[] MONSTERS =
|
||||
{
|
||||
23487, // Magma Ailith
|
||||
// Blazing Swamp
|
||||
23488, // Magma Apophis
|
||||
23489, // Lava Wyrm
|
||||
23490, // Lava Drake
|
||||
23491, // Lava Wendigo
|
||||
23492, // Lava Stone Golem
|
||||
23493, // Lava Leviah
|
||||
23496, // Magma Ifrit
|
||||
// Abandoned Coal Mines
|
||||
24577, // Black Hammer Artisan
|
||||
24578, // Black Hammer Collector
|
||||
24579, // Black Hammer Protector
|
||||
// Cemetery Lv.117
|
||||
24844, // Royal Guard Captain
|
||||
24846, // Commander of Operations
|
||||
// Cemetery Lv.118
|
||||
24843, // Royal Guard
|
||||
24844, // Royal Guard Captain
|
||||
24845, // Royal Field Officer
|
||||
24848, // Wizard Captain
|
||||
24846, // Commander of Operations
|
||||
24847, // Elite Wizard
|
||||
// Fields of Massacre Lv.115
|
||||
24848, // Wizard Captain
|
||||
// Fields of Massacre Lv.116
|
||||
24488, // Doom Archer
|
||||
24489, // Doom Scout
|
||||
24490, // Doom Soldier
|
||||
24487, // Graveyard Predator
|
||||
24486, // Dismal Pole
|
||||
24491, // Doom Knight
|
||||
// Silent Valley 105
|
||||
// Silent Valley 106
|
||||
24506, // Silence Witch
|
||||
24507, // Silence Preacle
|
||||
24508, // Silence Warrior
|
||||
24509, // Silence Slave
|
||||
24510, // Silence Hannibal
|
||||
// Ivory Tower Crater Lv.105
|
||||
// Ivory Tower Crater Lv.106
|
||||
24421, // Stone Gargoyle
|
||||
24422, // Stone Golem
|
||||
24423, // Monster Eye
|
||||
24424, // Gargoyle Hunter
|
||||
24425, // Steel Golem
|
||||
24426, // Stone Cube
|
||||
// Enchanted Valley Lv.103
|
||||
// Enchanted Valley Lv.104
|
||||
23567, // Nymph Rose
|
||||
23568, // Nymph Lily
|
||||
23569, // Nymph Lily
|
||||
23570, // Nymph Tulip
|
||||
23571, // Nymph Tulip
|
||||
23572, // Nymph Cosmos
|
||||
23567, // Nymph Rose
|
||||
23573, // Nymph Cosmos
|
||||
23578, // Nymph Guardian
|
||||
19600, // Flower Bud
|
||||
23581, // Apherus
|
||||
// Forest of Mirrors Lv.109
|
||||
// Forest of Mirrors Lv.110
|
||||
24461, // Forest Ghost
|
||||
24462, // Bewildered Expedition Member
|
||||
24463, // Bewildered Patrol
|
||||
24464, // Bewildered Dwarf Adventurer
|
||||
24465, // Forest Evil Spirit
|
||||
24466, // Demonic Mirror
|
||||
// Desert Query Lv.101
|
||||
// Desert Query Lv.102
|
||||
23811, // Cantera Tanya
|
||||
23812, // Cantera Deathmoz
|
||||
23813, // Cantera Floxis
|
||||
23814, // Cantera Belika
|
||||
23815, // Cantera Bridget
|
||||
// Beleth's Magic Circle Lv.101
|
||||
// Beleth's Magic Circle Lv.102
|
||||
23354, // Decay Hannibal
|
||||
23355, // Armor Beast
|
||||
23356, // Klein Soldier
|
||||
23357, // Disorder Warrior
|
||||
23360, // Bizuard
|
||||
23361, // Mutated Fly
|
||||
// Phantasmal Ridge Lv.103
|
||||
// Phantasmal Ridge Lv.104
|
||||
24511, // Lunatikan
|
||||
24512, // Garion Neti
|
||||
24513, // Desert Wendigo
|
||||
24514, // Koraza
|
||||
24515, // Kandiloth
|
||||
// Wasteland Lv.117
|
||||
// Wasteland Lv.118
|
||||
24500, // Sand Golem
|
||||
24501, // Centaur Fighter
|
||||
24502, // Centaur Marksman
|
||||
24503, // Centaur Wizard
|
||||
24504, // Centaur Warlord
|
||||
24505, // Earth Elemental Lord
|
||||
// Tanor Canyon Lv. 107
|
||||
// Tanor Canyon Lv. 108
|
||||
24587, // Tanor Silenos
|
||||
20936, // Tanor Silenos
|
||||
20937, // Tanor Silenos Soldier
|
||||
@@ -124,25 +123,25 @@ public class AetherDrops extends AbstractNpcAI
|
||||
20939, // Tanor Silenos Warrior
|
||||
20942, // Nightmare Guide
|
||||
20943, // Nightmare Watchman
|
||||
// Alligator Island Lv.107
|
||||
// Alligator Island Lv.108
|
||||
24373, // Dailaon Lad
|
||||
24376, // Nos Lad
|
||||
24377, // Swamp Tribe
|
||||
24378, // Swamp Alligator
|
||||
24379, // Swamp Warrior
|
||||
// Field of Silence Lv.109
|
||||
// Field of Silence Lv.110
|
||||
24517, // Kropiora
|
||||
24520, // Krotania
|
||||
24521, // Krophy
|
||||
24522, // Spiz Krphy
|
||||
24523, // Krotany
|
||||
// Field of Whispers Lv.111
|
||||
// Field of Whispers Lv.112
|
||||
24304, // Groz Kropiora
|
||||
24305, // Groz Krotania
|
||||
24306, // Groz Krophy
|
||||
24307, // Groz Krotany
|
||||
24308, // Groz Water Drake
|
||||
// Isle of Prayer
|
||||
// Isle of Prayer Lv.112
|
||||
24445, // Lizardman Rouge
|
||||
24446, // Island Guard
|
||||
24447, // Niasis
|
||||
@@ -150,7 +149,7 @@ public class AetherDrops extends AbstractNpcAI
|
||||
24449, // Lizardman Warrior
|
||||
24450, // Lizardman Wizard
|
||||
24451, // Lizardman Defender
|
||||
// Fafurion Temple
|
||||
// Fafurion Temple Lv.124
|
||||
24318, // Temple Guard Captain
|
||||
24321, // Temple Patrol Guard
|
||||
24322, // Temple Knight Recruit
|
||||
@@ -169,62 +168,97 @@ public class AetherDrops extends AbstractNpcAI
|
||||
23780, // Royal Templar Colonel
|
||||
23781, // Royal Sharpshooter
|
||||
23782, // Royal Archmage
|
||||
// Breka's Stronghold Lv.113
|
||||
// Breka's Stronghold Lv.114
|
||||
24415, // Breka Orc Scout
|
||||
24416, // Breka Orc Scout Captain
|
||||
24417, // Breka Orc Archer
|
||||
24418, // Breka Orc Shaman
|
||||
24419, // Breka Orc Slaughterer
|
||||
24420, // Breka Orc prefect
|
||||
// Dragon Valley Lv.124
|
||||
24617, // Dragon Peltast
|
||||
24618, // Dragon Officer
|
||||
24619, // Behemoth Dragon
|
||||
24620, // Soul Hunter
|
||||
// Swamp of Screams
|
||||
// Swamp of Screams Lv.116
|
||||
24570, // Dire Stakato Drone
|
||||
24571, // Dire Stakato Berserker
|
||||
24572, // Dire Stakato Shaman
|
||||
24573, // Dire Stakato Witch
|
||||
// Sel Mahum Training Grounds Lv.113
|
||||
// Sel Mahum Training Grounds Lv.114
|
||||
24492, // Sel Mahum Soldier
|
||||
24493, // Sel Mahum Squad Leader
|
||||
24494, // Sel Mahum Warrior
|
||||
24495, // Keltron
|
||||
// Plains of the Lizardman Lv.113
|
||||
// Plains of the Lizardman Lv.114
|
||||
24496, // Tanta Lizardman Warrior
|
||||
24497, // Tanta Lizardman Archer
|
||||
24498, // Tanta Lizardman Wizard
|
||||
24499, // Priest Uguros
|
||||
// Varka Silenos Barracks Lv.111
|
||||
// Varka Silenos Barracks Lv.114
|
||||
24636, // Varka Silenos Magus
|
||||
24637, // Varka Silenos Shaman
|
||||
24638, // Varka Silenos Footman
|
||||
24639, // Varka Silenos Seargeant
|
||||
24640, // Varka Silenos Officer
|
||||
// Ketra Orc Barracks Lv.111
|
||||
// Ketra Orc Barracks Lv.112
|
||||
24631, // Ketra Orc Shaman
|
||||
24632, // Ketra Orc Prophet
|
||||
24633, // Ketra Orc Warrior
|
||||
24634, // Ketra Orc Lieutenant
|
||||
24635, // Battalion Commander
|
||||
// Wall of Argos Lv.115
|
||||
// Wall of Argos Lv.116
|
||||
24606, // Captive Antelope
|
||||
24607, // Captive Bandersnatch
|
||||
24608, // Captive Buffalo
|
||||
24609, // Captive Grendel
|
||||
24610, // Eye of Watchman
|
||||
24611, // Elder Homunculus
|
||||
// Neutral Zone
|
||||
// Neutral Zone Lv.110
|
||||
24641, // Tel Mahum Wizard
|
||||
24642, // Tel Mahum Legionary
|
||||
24643, // Tel Mahum Footman
|
||||
24644, // Tel Mahum Lieutenant
|
||||
// Sea of Spores
|
||||
// Sea of Spores Lv.116
|
||||
24621, // Laikel
|
||||
24622, // Harane
|
||||
24623, // Lesatanas
|
||||
24624, // Arbor
|
||||
// Cruma Marshlands Lv.122
|
||||
24930, // Black Demon Knight
|
||||
24931, // Black Demon Warrior
|
||||
24932, // Black Demon Scout
|
||||
24933, // Black Demon Wizard
|
||||
// Frozen Labyrinth Lv.122
|
||||
24934, // Frozen Soldier
|
||||
24935, // Frozen Defender
|
||||
24936, // Ice Knight
|
||||
24937, // Glacier Golem
|
||||
24938, // Ice Fairy
|
||||
// Sel Mahum Base Lv.124
|
||||
24961, // Sel Mahum Footman
|
||||
24962, // Sel Mahum Elite Soldier
|
||||
24963, // Sel Mahum Shaman
|
||||
24964, // Sel Mahum Wizard
|
||||
// Dragon Valley West Lv.120
|
||||
24664, // Graveyard Death Lich
|
||||
24665, // Graveyard Death Berserker
|
||||
24666, // Graveyard Death Soldier
|
||||
24667, // Graveyard Death Knight
|
||||
// Dragon Valley East Lv.122
|
||||
24669, // Dragon Officer
|
||||
24670, // Dragon Beast
|
||||
24671, // Dragon Centurion
|
||||
24672, // Elite Dragon Guard
|
||||
// Shadow Of The Mother Tree Lv.120
|
||||
24965, // Creeper Rampike
|
||||
24966, // Fila Aprias
|
||||
24967, // Flush Teasle
|
||||
24968, // Treant Blossom
|
||||
24969, // Arsos Butterfly
|
||||
// Execution Grounds Lv.126
|
||||
24673, // Zombie Orc
|
||||
24674, // Zombie Dark Elf
|
||||
24675, // Zombie Dwarf
|
||||
24676, // Schnabel Stalker
|
||||
24677, // Henker Hacker
|
||||
24678, // Schnabel Doctor
|
||||
24679, // Henker Anatomist
|
||||
};
|
||||
// Item
|
||||
private static final int AETHER = 81215;
|
||||
|
||||
@@ -42,10 +42,12 @@ import org.l2jmobius.gameserver.enums.Race;
|
||||
import org.l2jmobius.gameserver.model.SkillLearn;
|
||||
import org.l2jmobius.gameserver.model.actor.Npc;
|
||||
import org.l2jmobius.gameserver.model.actor.Player;
|
||||
import org.l2jmobius.gameserver.model.events.EventDispatcher;
|
||||
import org.l2jmobius.gameserver.model.events.EventType;
|
||||
import org.l2jmobius.gameserver.model.events.ListenerRegisterType;
|
||||
import org.l2jmobius.gameserver.model.events.annotations.RegisterEvent;
|
||||
import org.l2jmobius.gameserver.model.events.annotations.RegisterType;
|
||||
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerBecomeNoblesse;
|
||||
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerBypass;
|
||||
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerLevelChanged;
|
||||
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerLogin;
|
||||
@@ -266,6 +268,7 @@ public class ClassMaster extends AbstractNpcAI implements IXmlReader
|
||||
else
|
||||
{
|
||||
player.setNobleLevel(1);
|
||||
checkNobleListener(player);
|
||||
player.broadcastUserInfo();
|
||||
// TODO: SetOneTimeQuestFlag(talker, 10385, 1);
|
||||
htmltext = "test_server_helper025.html";
|
||||
@@ -402,6 +405,7 @@ public class ClassMaster extends AbstractNpcAI implements IXmlReader
|
||||
if (data.isRewardNoblesse())
|
||||
{
|
||||
player.setNobleLevel(1);
|
||||
checkNobleListener(player);
|
||||
}
|
||||
// Give possible hero status reward.
|
||||
if (data.isRewardHero())
|
||||
@@ -859,6 +863,7 @@ public class ClassMaster extends AbstractNpcAI implements IXmlReader
|
||||
if (data.isRewardNoblesse())
|
||||
{
|
||||
player.setNobleLevel(1);
|
||||
checkNobleListener(player);
|
||||
}
|
||||
// Give possible hero status reward.
|
||||
if (data.isRewardHero())
|
||||
@@ -1170,6 +1175,15 @@ public class ClassMaster extends AbstractNpcAI implements IXmlReader
|
||||
return null;
|
||||
}
|
||||
|
||||
private void checkNobleListener(Player player)
|
||||
{
|
||||
// Notify to scripts.
|
||||
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_BECOME_NOBLESSE))
|
||||
{
|
||||
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerBecomeNoblesse(player));
|
||||
}
|
||||
}
|
||||
|
||||
public static void main(String[] args)
|
||||
{
|
||||
new ClassMaster();
|
||||
|
||||
@@ -600,7 +600,7 @@ public class GreedyTreasureChests extends AbstractNpcAI
|
||||
else if (currentTime > GlobalVariablesManager.getInstance().getLong("TREASURE_CHEST_RESPAWN_NZ_2", 0))
|
||||
{
|
||||
addSpawn(CHEST_LV110, npc, true, 0, true);
|
||||
GlobalVariablesManager.getInstance().set("TREASURE_CHEST_RESPAWN_FM_2", Long.toString(currentTime + RESPAWN_DELAY + getRandom(RND_OFFSET)));
|
||||
GlobalVariablesManager.getInstance().set("TREASURE_CHEST_RESPAWN_NZ_2", Long.toString(currentTime + RESPAWN_DELAY + getRandom(RND_OFFSET)));
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
26
L2J_Mobius_11.1_TheSourceOfFlame/dist/game/data/scripts/ai/others/PrisonManager/34641.html
vendored
Normal file
26
L2J_Mobius_11.1_TheSourceOfFlame/dist/game/data/scripts/ai/others/PrisonManager/34641.html
vendored
Normal file
@@ -0,0 +1,26 @@
|
||||
<html><body scroll="no">
|
||||
<font color="af9878">
|
||||
<table border=0 cellpadding=0 cellspacing=0 width=292 height=358 background="L2UI_CH3.refinewnd_back_Pattern">
|
||||
<tr><td height=30></td></tr>
|
||||
<tr>
|
||||
<td align="center">
|
||||
<table border=0 cellspacing=0 width=250 height=250>
|
||||
<tr>
|
||||
<td align="center">
|
||||
"O Cantabile!<br1>
|
||||
Your beautiful voice flows like a river!"
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align=center>
|
||||
Welcome, my friend! I am sure you will enjoy your stand in this wonderful place where exquisite music fills the air!<br>
|
||||
The town is divided into 3 zones and each one of them has its own features.<br>
|
||||
The first zone is overseen by Amoroso, the second by Delicato and the third by Comodo. Talk to them to learn more.
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</font>
|
||||
</body></html>
|
||||
25
L2J_Mobius_11.1_TheSourceOfFlame/dist/game/data/scripts/ai/others/PrisonManager/34642.html
vendored
Normal file
25
L2J_Mobius_11.1_TheSourceOfFlame/dist/game/data/scripts/ai/others/PrisonManager/34642.html
vendored
Normal file
@@ -0,0 +1,25 @@
|
||||
<html><body scroll="no">
|
||||
<font color="af9878">
|
||||
<table border=0 cellpadding=0 cellspacing=0 width=292 height=358 background="L2UI_CH3.refinewnd_back_Pattern">
|
||||
<tr><td height=30></td></tr>
|
||||
<tr>
|
||||
<td align="center">
|
||||
<table border=0 cellspacing=0 width=250 height=200>
|
||||
<tr>
|
||||
<td align="center">
|
||||
"O Amoroso!<br1>
|
||||
Sing us your song of love and beauty!"
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align=center>
|
||||
My name is Amoroso, I oversee Adagio (Zone 1)! I train dancers who have 10-34 on their PK counter.<br>
|
||||
We are putting on an amazing, truly incredible concert! You must be dying of anticipation, right? Ha-ha!
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</font>
|
||||
</body></html>
|
||||
25
L2J_Mobius_11.1_TheSourceOfFlame/dist/game/data/scripts/ai/others/PrisonManager/34643.html
vendored
Normal file
25
L2J_Mobius_11.1_TheSourceOfFlame/dist/game/data/scripts/ai/others/PrisonManager/34643.html
vendored
Normal file
@@ -0,0 +1,25 @@
|
||||
<html><body scroll="no">
|
||||
<font color="af9878">
|
||||
<table border=0 cellpadding=0 cellspacing=0 width=292 height=358 background="L2UI_CH3.refinewnd_back_Pattern">
|
||||
<tr><td height=30></td></tr>
|
||||
<tr>
|
||||
<td align="center">
|
||||
<table border=0 cellspacing=0 width=250 height=225>
|
||||
<tr>
|
||||
<td align="center">
|
||||
"O Delicato!<br1>
|
||||
Your intrincate songs move and inspire us!"
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align=center>
|
||||
My name is Delicato, I oversee Andante (Zone 2). Lord Narcissus has asked me to look after Pomposo and Dolce.<br>
|
||||
Their petals are very valuable, but almost imposible to collect. Heroes who hace 35-39 on their PK counter can grow these flowers by bleeding over them.
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</font>
|
||||
</body></html>
|
||||
26
L2J_Mobius_11.1_TheSourceOfFlame/dist/game/data/scripts/ai/others/PrisonManager/34644.html
vendored
Normal file
26
L2J_Mobius_11.1_TheSourceOfFlame/dist/game/data/scripts/ai/others/PrisonManager/34644.html
vendored
Normal file
@@ -0,0 +1,26 @@
|
||||
<html><body scroll="no">
|
||||
<font color="af9878">
|
||||
<table border=0 cellpadding=0 cellspacing=0 width=292 height=358 background="L2UI_CH3.refinewnd_back_Pattern">
|
||||
<tr><td height=30></td></tr>
|
||||
<tr>
|
||||
<td align="center">
|
||||
<table border=0 cellspacing=0 width=250 height=275>
|
||||
<tr>
|
||||
<td align="center">
|
||||
"O Comodo!<br1>
|
||||
Your mellow melodies please our ears and soothe our souls!"
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align=center>
|
||||
My name is Comodo, I oversee Allegro (Zone 3).<br>
|
||||
I've managed to find a Pure Crystal to offer as tribute to Narcissus, but then I learned that the poor Angel is possessed by evil spirits! Can you imagine?<br>
|
||||
It is possible to exorcize the spirits, but only the heroes who have 40+ on their Pk counter can do it.
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</font>
|
||||
</body></html>
|
||||
@@ -37,6 +37,16 @@ import ai.AbstractNpcAI;
|
||||
*/
|
||||
public class PrisonManager extends AbstractNpcAI
|
||||
{
|
||||
// NPC
|
||||
private static final int MORENDO = 34637;
|
||||
private static final int POMPOSO = 34638;
|
||||
private static final int DOLLOROSO = 34639;
|
||||
private static final int DOLCE = 34640;
|
||||
private static final int CANTABILE = 34641;
|
||||
private static final int AMOROSO = 34642;
|
||||
private static final int DELICATO = 34643;
|
||||
private static final int COMODO = 34644;
|
||||
// Misc
|
||||
private static final ScriptZone PRISON_ZONE_1 = ZoneManager.getInstance().getZoneById(26010, ScriptZone.class);
|
||||
private static final ScriptZone PRISON_ZONE_2 = ZoneManager.getInstance().getZoneById(26011, ScriptZone.class);
|
||||
private static final ScriptZone PRISON_ZONE_3 = ZoneManager.getInstance().getZoneById(26012, ScriptZone.class);
|
||||
@@ -48,8 +58,8 @@ public class PrisonManager extends AbstractNpcAI
|
||||
|
||||
public PrisonManager()
|
||||
{
|
||||
addFirstTalkId(34637, 34638, 34639, 34640);
|
||||
addTalkId(34637, 34638, 34639, 34640);
|
||||
addFirstTalkId(MORENDO, POMPOSO, DOLLOROSO, DOLCE, CANTABILE, AMOROSO, DELICATO, COMODO);
|
||||
addTalkId(MORENDO, POMPOSO, DOLLOROSO, DOLCE, CANTABILE, AMOROSO, DELICATO, COMODO);
|
||||
addEnterZoneId(PRISON_ZONE_1.getId(), PRISON_ZONE_2.getId(), PRISON_ZONE_3.getId(), PRISON_ENTER_ZONE.getId(), PRISON_ENTER_ZONE2.getId());
|
||||
addExitZoneId(PRISON_ZONE_1.getId(), PRISON_ZONE_2.getId(), PRISON_ZONE_3.getId(), PRISON_ENTER_ZONE2.getId());
|
||||
}
|
||||
@@ -68,6 +78,10 @@ public class PrisonManager extends AbstractNpcAI
|
||||
case "34639-no.html":
|
||||
case "34640.html":
|
||||
case "34640-no.html":
|
||||
case "34641.html":
|
||||
case "34642.html":
|
||||
case "34643.html":
|
||||
case "34644.html":
|
||||
{
|
||||
htmltext = event;
|
||||
break;
|
||||
|
||||
@@ -38,16 +38,16 @@ public class WaterDragonEliteSupplyDrops extends AbstractNpcAI
|
||||
// Monsters
|
||||
private static final int[] MONSTERS =
|
||||
{
|
||||
24596, // Water Dragon's Elite Archer
|
||||
24597, // Water Dragon's Elite Mage
|
||||
24598, // Water Dragon's Elite Raider
|
||||
24599, // Water Dragon's Elite Swordsman
|
||||
24600, // Water Dragon's Elite Wyrm
|
||||
24601, // Water Dragon's Shaman
|
||||
24602, // Water Dragon's Mage
|
||||
24603, // Water Dragon's Pikeman
|
||||
24604, // Water Dragon's Swordsman
|
||||
24605, // Weakened Krotania
|
||||
24957, // Fafurion's Praetorian Knight
|
||||
24958, // Fafurion's Praetorian Pikeman
|
||||
24959, // Fafurion's Praetorian Swordsman
|
||||
24960 // Fafurion's Praetorian Water Dragon
|
||||
};
|
||||
// Item
|
||||
private static final int WATER_DRAGON_ELITE_SUPPLIES = 81758;
|
||||
@@ -57,7 +57,7 @@ public class WaterDragonEliteSupplyDrops extends AbstractNpcAI
|
||||
private static final int DROP_DAILY = 100;
|
||||
private static final int DROP_MIN = 1;
|
||||
private static final int DROP_MAX = 1;
|
||||
private static final double CHANCE = 10;
|
||||
private static final double CHANCE = 7.2;
|
||||
|
||||
private WaterDragonEliteSupplyDrops()
|
||||
{
|
||||
@@ -97,7 +97,7 @@ public class WaterDragonEliteSupplyDrops extends AbstractNpcAI
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
LOGGER.log(Level.SEVERE, "Could not reset Corroded Fields drop count: ", e);
|
||||
LOGGER.log(Level.SEVERE, "Could not reset Ravaged Innadril drop count: ", e);
|
||||
}
|
||||
|
||||
// Update data for online players.
|
||||
|
||||
@@ -37,6 +37,7 @@ import org.l2jmobius.gameserver.model.actor.Creature;
|
||||
import org.l2jmobius.gameserver.model.actor.Npc;
|
||||
import org.l2jmobius.gameserver.model.actor.Player;
|
||||
import org.l2jmobius.gameserver.model.actor.Summon;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.Door;
|
||||
import org.l2jmobius.gameserver.model.events.EventType;
|
||||
import org.l2jmobius.gameserver.model.events.annotations.RegisterEvent;
|
||||
import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureDeath;
|
||||
@@ -235,6 +236,8 @@ public class TvT extends Event
|
||||
final InstanceManager manager = InstanceManager.getInstance();
|
||||
final InstanceTemplate template = manager.getInstanceTemplate(INSTANCE_ID);
|
||||
PVP_WORLD = manager.createInstance(template, null);
|
||||
// Make sure doors are closed.
|
||||
PVP_WORLD.getDoors().forEach(Door::closeMe);
|
||||
// Randomize player list and separate teams.
|
||||
final List<Player> playerList = new ArrayList<>(PLAYER_LIST.size());
|
||||
playerList.addAll(PLAYER_LIST);
|
||||
|
||||
@@ -291,7 +291,20 @@ public class Eraton extends AbstractNpcAI
|
||||
}
|
||||
takeItem(player, STONE_OF_DESTINY);
|
||||
|
||||
player.removeAllSkills();
|
||||
if (Config.ERATON_RETAINED_SKILLS.isEmpty())
|
||||
{
|
||||
player.removeAllSkills();
|
||||
}
|
||||
else
|
||||
{
|
||||
for (Skill skill : player.getAllSkills())
|
||||
{
|
||||
if (!Config.ERATON_RETAINED_SKILLS.contains(skill.getId()))
|
||||
{
|
||||
player.removeSkill(skill);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Stop auto use.
|
||||
for (Shortcut shortcut : player.getAllShortCuts())
|
||||
|
||||
@@ -37,6 +37,7 @@ public class EffectMasterHandler
|
||||
EffectHandler.getInstance().registerHandler("AbnormalTimeChangeBySkillId", AbnormalTimeChangeBySkillId::new);
|
||||
EffectHandler.getInstance().registerHandler("AbsorbDamage", AbsorbDamage::new);
|
||||
EffectHandler.getInstance().registerHandler("Accuracy", Accuracy::new);
|
||||
EffectHandler.getInstance().registerHandler("AddFireSourcePoints", AddFireSourcePoints::new);
|
||||
EffectHandler.getInstance().registerHandler("AddHate", AddHate::new);
|
||||
EffectHandler.getInstance().registerHandler("AddHomunculusPoints", AddHomunculusPoints::new);
|
||||
EffectHandler.getInstance().registerHandler("AddHuntingTime", AddHuntingTime::new);
|
||||
@@ -44,6 +45,8 @@ public class EffectMasterHandler
|
||||
EffectHandler.getInstance().registerHandler("AdditionalPotionHp", AdditionalPotionHp::new);
|
||||
EffectHandler.getInstance().registerHandler("AdditionalPotionMp", AdditionalPotionMp::new);
|
||||
EffectHandler.getInstance().registerHandler("AddPcCafePoints", AddPcCafePoints::new);
|
||||
EffectHandler.getInstance().registerHandler("AddMaxPhysicalCriticalRate", AddMaxPhysicalCriticalRate::new);
|
||||
EffectHandler.getInstance().registerHandler("AddMaxMagicCriticalRate", AddMaxMagicCriticalRate::new);
|
||||
EffectHandler.getInstance().registerHandler("AddSkillBySkill", AddSkillBySkill::new);
|
||||
EffectHandler.getInstance().registerHandler("AddTeleportBookmarkSlot", AddTeleportBookmarkSlot::new);
|
||||
EffectHandler.getInstance().registerHandler("AgathionSlot", AgathionSlot::new);
|
||||
@@ -204,6 +207,7 @@ public class EffectMasterHandler
|
||||
EffectHandler.getInstance().registerHandler("HpToOwner", HpToOwner::new);
|
||||
EffectHandler.getInstance().registerHandler("Ignition", Ignition::new);
|
||||
EffectHandler.getInstance().registerHandler("IgnoreDeath", IgnoreDeath::new);
|
||||
EffectHandler.getInstance().registerHandler("IgnoreReduceDamage", IgnoreReduceDamage::new);
|
||||
EffectHandler.getInstance().registerHandler("ImmobileDamageBonus", ImmobileDamageBonus::new);
|
||||
EffectHandler.getInstance().registerHandler("ImmobileDamageResist", ImmobileDamageResist::new);
|
||||
EffectHandler.getInstance().registerHandler("ImmobilePetBuff", ImmobilePetBuff::new);
|
||||
@@ -243,7 +247,6 @@ public class EffectMasterHandler
|
||||
EffectHandler.getInstance().registerHandler("MAtk", MAtk::new);
|
||||
EffectHandler.getInstance().registerHandler("MaxCp", MaxCp::new);
|
||||
EffectHandler.getInstance().registerHandler("MaxHp", MaxHp::new);
|
||||
EffectHandler.getInstance().registerHandler("MaxMagicCriticalRate", MaxMagicCriticalRate::new);
|
||||
EffectHandler.getInstance().registerHandler("MaxMp", MaxMp::new);
|
||||
EffectHandler.getInstance().registerHandler("ModifyVital", ModifyVital::new);
|
||||
EffectHandler.getInstance().registerHandler("Mp", Mp::new);
|
||||
|
||||
@@ -48,6 +48,7 @@ public class SkillConditionMasterHandler
|
||||
SkillConditionHandler.getInstance().registerHandler("CanUseInDragonLair", CanUseInDragonLairSkillCondition::new);
|
||||
SkillConditionHandler.getInstance().registerHandler("CanUseSwoopCannon", CanUseSwoopCannonSkillCondition::new);
|
||||
SkillConditionHandler.getInstance().registerHandler("HasVitalityPoints", HasVitalityPointsSkillCondition::new);
|
||||
SkillConditionHandler.getInstance().registerHandler("CanUseSymbolSealIncreaseItem", CanUseSymbolSealIncreaseItemSkillCondition::new);
|
||||
SkillConditionHandler.getInstance().registerHandler("CanUseVitalityIncreaseItem", CanUseVitalityIncreaseItemSkillCondition::new);
|
||||
SkillConditionHandler.getInstance().registerHandler("CheckLevel", CheckLevelSkillCondition::new);
|
||||
SkillConditionHandler.getInstance().registerHandler("CheckSex", CheckSexSkillCondition::new);
|
||||
|
||||
@@ -49,6 +49,10 @@ import org.l2jmobius.gameserver.model.actor.Playable;
|
||||
import org.l2jmobius.gameserver.model.actor.Player;
|
||||
import org.l2jmobius.gameserver.model.actor.Summon;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.Pet;
|
||||
import org.l2jmobius.gameserver.model.events.EventDispatcher;
|
||||
import org.l2jmobius.gameserver.model.events.EventType;
|
||||
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerBecomeExalted;
|
||||
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerBecomeNoblesse;
|
||||
import org.l2jmobius.gameserver.model.html.PageBuilder;
|
||||
import org.l2jmobius.gameserver.model.html.PageResult;
|
||||
import org.l2jmobius.gameserver.model.skill.Skill;
|
||||
@@ -913,12 +917,22 @@ public class AdminEditChar implements IAdminCommandHandler
|
||||
{
|
||||
player.setNobleLevel(1);
|
||||
player.sendMessage("A GM added you nobless status!");
|
||||
// Notify to scripts.
|
||||
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_BECOME_NOBLESSE))
|
||||
{
|
||||
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerBecomeNoblesse(player));
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 1:
|
||||
{
|
||||
player.setNobleLevel(2);
|
||||
player.sendMessage("A GM changed your nobless status to exalted!");
|
||||
// Notify to scripts.
|
||||
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_BECOME_EXALTED))
|
||||
{
|
||||
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerBecomeExalted(player));
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 2:
|
||||
|
||||
@@ -0,0 +1,66 @@
|
||||
/*
|
||||
* This file is part of the L2J Mobius project.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package handlers.effecthandlers;
|
||||
|
||||
import org.l2jmobius.Config;
|
||||
import org.l2jmobius.gameserver.model.StatSet;
|
||||
import org.l2jmobius.gameserver.model.actor.Creature;
|
||||
import org.l2jmobius.gameserver.model.actor.Player;
|
||||
import org.l2jmobius.gameserver.model.effects.AbstractEffect;
|
||||
import org.l2jmobius.gameserver.model.events.AbstractScript;
|
||||
import org.l2jmobius.gameserver.model.item.instance.Item;
|
||||
import org.l2jmobius.gameserver.model.skill.Skill;
|
||||
import org.l2jmobius.gameserver.model.variables.PlayerVariables;
|
||||
|
||||
/*
|
||||
* @author CostyKiller
|
||||
*/
|
||||
public class AddFireSourcePoints extends AbstractEffect
|
||||
{
|
||||
|
||||
public AddFireSourcePoints(StatSet params)
|
||||
{
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isInstant()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void instant(Creature effector, Creature effected, Skill skill, Item item)
|
||||
{
|
||||
if (!effected.isPlayable())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
final Player player = effected.getActingPlayer();
|
||||
if (AbstractScript.getRandom(100) < Config.CONQUEST_ABILITY_FIRE_SOURCE_UPGRADE_CHANCE)
|
||||
{
|
||||
player.getVariables().set(PlayerVariables.CONQUEST_ABILITY_FIRE_SOURCE_EXP, player.getVariables().getInt(PlayerVariables.CONQUEST_ABILITY_FIRE_SOURCE_EXP, 0) + Config.CONQUEST_ABILITY_FIRE_SOURCE_EXP_AMOUNT);
|
||||
player.sendMessage("You have added Fire Source points.");
|
||||
AbstractScript.showOnScreenMsg(player, "You have added Fire Source points.", 5000);
|
||||
}
|
||||
else
|
||||
{
|
||||
player.sendMessage("You have failed to add Fire Source points.");
|
||||
AbstractScript.showOnScreenMsg(player, "You have failed to add Fire Source points.", 5000);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -14,23 +14,18 @@
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package quests.not_done;
|
||||
package handlers.effecthandlers;
|
||||
|
||||
import org.l2jmobius.Config;
|
||||
import org.l2jmobius.gameserver.model.quest.Quest;
|
||||
import org.l2jmobius.gameserver.model.StatSet;
|
||||
import org.l2jmobius.gameserver.model.stats.Stat;
|
||||
|
||||
/**
|
||||
* @author Mobius
|
||||
* @author fruit
|
||||
*/
|
||||
public class Q10905_HuntingTime extends Quest
|
||||
public class AddMaxMagicCriticalRate extends AbstractStatEffect
|
||||
{
|
||||
private static final int START_NPC = 34599;
|
||||
|
||||
public Q10905_HuntingTime()
|
||||
public AddMaxMagicCriticalRate(StatSet params)
|
||||
{
|
||||
super(10905);
|
||||
addStartNpc(START_NPC);
|
||||
addTalkId(START_NPC);
|
||||
addCondMinLevel(Config.PLAYER_MAXIMUM_LEVEL, getNoQuestMsg(null));
|
||||
super(params, Stat.ADD_MAX_MAGIC_CRITICAL_RATE);
|
||||
}
|
||||
}
|
||||
@@ -14,23 +14,18 @@
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package quests.not_done;
|
||||
package handlers.effecthandlers;
|
||||
|
||||
import org.l2jmobius.Config;
|
||||
import org.l2jmobius.gameserver.model.quest.Quest;
|
||||
import org.l2jmobius.gameserver.model.StatSet;
|
||||
import org.l2jmobius.gameserver.model.stats.Stat;
|
||||
|
||||
/**
|
||||
* @author Mobius
|
||||
* @author fruit
|
||||
*/
|
||||
public class Q10906_ChasingTheLight extends Quest
|
||||
public class AddMaxPhysicalCriticalRate extends AbstractStatEffect
|
||||
{
|
||||
private static final int START_NPC = 34599;
|
||||
|
||||
public Q10906_ChasingTheLight()
|
||||
public AddMaxPhysicalCriticalRate(StatSet params)
|
||||
{
|
||||
super(10906);
|
||||
addStartNpc(START_NPC);
|
||||
addTalkId(START_NPC);
|
||||
addCondMinLevel(Config.PLAYER_MAXIMUM_LEVEL, getNoQuestMsg(null));
|
||||
super(params, Stat.ADD_MAX_PHYSICAL_CRITICAL_RATE);
|
||||
}
|
||||
}
|
||||
@@ -16,6 +16,7 @@
|
||||
*/
|
||||
package handlers.effecthandlers;
|
||||
|
||||
import org.l2jmobius.commons.threads.ThreadPool;
|
||||
import org.l2jmobius.commons.util.Rnd;
|
||||
import org.l2jmobius.gameserver.data.xml.SkillData;
|
||||
import org.l2jmobius.gameserver.model.StatSet;
|
||||
@@ -26,6 +27,7 @@ import org.l2jmobius.gameserver.model.item.instance.Item;
|
||||
import org.l2jmobius.gameserver.model.skill.BuffInfo;
|
||||
import org.l2jmobius.gameserver.model.skill.Skill;
|
||||
import org.l2jmobius.gameserver.model.skill.SkillCaster;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.MagicSkillUse;
|
||||
|
||||
/**
|
||||
* Call Skill effect implementation.
|
||||
@@ -58,7 +60,7 @@ public class CallSkill extends AbstractEffect
|
||||
return;
|
||||
}
|
||||
|
||||
Skill triggerSkill = null;
|
||||
final Skill triggerSkill;
|
||||
if (_skillLevelScaleTo <= 0)
|
||||
{
|
||||
// Mobius: Use 0 to trigger max effector learned skill level.
|
||||
@@ -72,6 +74,7 @@ public class CallSkill extends AbstractEffect
|
||||
else
|
||||
{
|
||||
LOGGER.warning("Player " + effector + " called unknown skill " + _skill + " triggered by " + skill + " CallSkill.");
|
||||
return;
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -100,7 +103,21 @@ public class CallSkill extends AbstractEffect
|
||||
return;
|
||||
}
|
||||
|
||||
SkillCaster.triggerCast(effector, effected, triggerSkill);
|
||||
final int hitTime = triggerSkill.getHitTime();
|
||||
if (hitTime > 0)
|
||||
{
|
||||
if (effector.isSkillDisabled(triggerSkill))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
effector.broadcastPacket(new MagicSkillUse(effector, effected, triggerSkill.getDisplayId(), triggerSkill.getLevel(), hitTime, 0));
|
||||
ThreadPool.schedule(() -> SkillCaster.triggerCast(effector, effected, triggerSkill), hitTime);
|
||||
}
|
||||
else
|
||||
{
|
||||
SkillCaster.triggerCast(effector, effected, triggerSkill);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -27,6 +27,7 @@ import org.l2jmobius.gameserver.model.item.instance.Item;
|
||||
import org.l2jmobius.gameserver.model.skill.Skill;
|
||||
import org.l2jmobius.gameserver.model.variables.PlayerVariables;
|
||||
import org.l2jmobius.gameserver.model.zone.ZoneType;
|
||||
import org.l2jmobius.gameserver.network.SystemMessageId;
|
||||
|
||||
/**
|
||||
* @author CostyKiller
|
||||
@@ -59,6 +60,8 @@ public class ConquestFireCentralAreaReward extends AbstractEffect
|
||||
if (AbstractScript.getRandom(100) < Config.CONQUEST_ABILITY_FIRE_SOURCE_UPGRADE_CHANCE)
|
||||
{
|
||||
player.getVariables().set(PlayerVariables.CONQUEST_ABILITY_FIRE_SOURCE_EXP, player.getVariables().getInt(PlayerVariables.CONQUEST_ABILITY_FIRE_SOURCE_EXP, 0) + Config.CONQUEST_ABILITY_FIRE_SOURCE_EXP_AMOUNT);
|
||||
player.sendPacket(SystemMessageId.YOU_HAVE_RECEIVED_FIRE_SOURCE_POINTS);
|
||||
AbstractScript.showOnScreenMsg(player, "You have received Fire Source points.", 5000);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -20,12 +20,12 @@ import org.l2jmobius.gameserver.model.StatSet;
|
||||
import org.l2jmobius.gameserver.model.stats.Stat;
|
||||
|
||||
/**
|
||||
* @author Mobius
|
||||
* @author fruit
|
||||
*/
|
||||
public class MaxMagicCriticalRate extends AbstractStatEffect
|
||||
public class IgnoreReduceDamage extends AbstractStatEffect
|
||||
{
|
||||
public MaxMagicCriticalRate(StatSet params)
|
||||
public IgnoreReduceDamage(StatSet params)
|
||||
{
|
||||
super(params, Stat.MAX_MAGIC_CRITICAL_RATE);
|
||||
super(params, Stat.IGNORE_REDUCE_DAMAGE);
|
||||
}
|
||||
}
|
||||
@@ -16,6 +16,7 @@
|
||||
*/
|
||||
package handlers.effecthandlers;
|
||||
|
||||
import org.l2jmobius.gameserver.enums.StatModifierType;
|
||||
import org.l2jmobius.gameserver.model.StatSet;
|
||||
import org.l2jmobius.gameserver.model.actor.Creature;
|
||||
import org.l2jmobius.gameserver.model.effects.AbstractEffect;
|
||||
@@ -25,6 +26,7 @@ import org.l2jmobius.gameserver.model.events.listeners.FunctionEventListener;
|
||||
import org.l2jmobius.gameserver.model.events.returns.DamageReturn;
|
||||
import org.l2jmobius.gameserver.model.item.instance.Item;
|
||||
import org.l2jmobius.gameserver.model.skill.Skill;
|
||||
import org.l2jmobius.gameserver.model.stats.Stat;
|
||||
|
||||
/**
|
||||
* @author Sdw
|
||||
@@ -32,10 +34,12 @@ import org.l2jmobius.gameserver.model.skill.Skill;
|
||||
public class ReduceDamage extends AbstractEffect
|
||||
{
|
||||
private final double _amount;
|
||||
private final StatModifierType _mode;
|
||||
|
||||
public ReduceDamage(StatSet params)
|
||||
{
|
||||
_amount = params.getDouble("amount");
|
||||
_mode = params.getEnum("mode", StatModifierType.class, StatModifierType.DIFF);
|
||||
}
|
||||
|
||||
private DamageReturn onDamageReceivedEvent(OnCreatureDamageReceived event)
|
||||
@@ -46,7 +50,15 @@ public class ReduceDamage extends AbstractEffect
|
||||
return null;
|
||||
}
|
||||
|
||||
final double newDamage = event.getDamage() * (_amount / 100);
|
||||
final double newDamage;
|
||||
if (_mode == StatModifierType.PER)
|
||||
{
|
||||
newDamage = event.getDamage() - (event.getDamage() * (_amount / 100));
|
||||
}
|
||||
else // DIFF
|
||||
{
|
||||
newDamage = event.getDamage() - Math.max((_amount - event.getAttacker().getStat().getAdd(Stat.IGNORE_REDUCE_DAMAGE)), 0.0);
|
||||
}
|
||||
|
||||
return new DamageReturn(false, true, false, newDamage);
|
||||
}
|
||||
|
||||
@@ -16,14 +16,21 @@
|
||||
*/
|
||||
package handlers.effecthandlers;
|
||||
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
|
||||
import org.l2jmobius.Config;
|
||||
import org.l2jmobius.commons.threads.ThreadPool;
|
||||
import org.l2jmobius.gameserver.enums.StatModifierType;
|
||||
import org.l2jmobius.gameserver.model.StatSet;
|
||||
import org.l2jmobius.gameserver.model.actor.Creature;
|
||||
import org.l2jmobius.gameserver.model.actor.Player;
|
||||
import org.l2jmobius.gameserver.model.effects.AbstractEffect;
|
||||
import org.l2jmobius.gameserver.model.effects.EffectType;
|
||||
import org.l2jmobius.gameserver.model.holders.ItemSkillHolder;
|
||||
import org.l2jmobius.gameserver.model.item.instance.Item;
|
||||
import org.l2jmobius.gameserver.model.skill.Skill;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.InventoryUpdate;
|
||||
|
||||
/**
|
||||
* @author NviX
|
||||
@@ -39,6 +46,12 @@ public class RestoreSymbolSeal extends AbstractEffect
|
||||
_mode = params.getEnum("mode", StatModifierType.class, StatModifierType.PER);
|
||||
}
|
||||
|
||||
@Override
|
||||
public EffectType getEffectType()
|
||||
{
|
||||
return EffectType.RESTORE_SYMBOL_SEAL;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isInstant()
|
||||
{
|
||||
@@ -77,6 +90,33 @@ public class RestoreSymbolSeal extends AbstractEffect
|
||||
player.updateSymbolSealSkills();
|
||||
player.sendSkillList();
|
||||
player.broadcastUserInfo();
|
||||
|
||||
// Send item list to update Dye Powder with red icon in inventory.
|
||||
ThreadPool.schedule(() ->
|
||||
{
|
||||
final List<Item> items = new LinkedList<>();
|
||||
ITEMS: for (Item i : effected.getActingPlayer().getInventory().getItems())
|
||||
{
|
||||
if (i.getTemplate().hasSkills())
|
||||
{
|
||||
for (ItemSkillHolder s : i.getTemplate().getAllSkills())
|
||||
{
|
||||
if (s.getSkill().hasEffectType(EffectType.RESTORE_SYMBOL_SEAL))
|
||||
{
|
||||
items.add(i);
|
||||
continue ITEMS;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!items.isEmpty())
|
||||
{
|
||||
final InventoryUpdate iu = new InventoryUpdate();
|
||||
iu.addItems(items);
|
||||
effected.getActingPlayer().sendInventoryUpdate(iu);
|
||||
}
|
||||
}, 1000);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,6 +16,11 @@
|
||||
*/
|
||||
package handlers.effecthandlers;
|
||||
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
|
||||
import org.l2jmobius.gameserver.data.xml.ExperienceData;
|
||||
import org.l2jmobius.gameserver.data.xml.NpcData;
|
||||
import org.l2jmobius.gameserver.enums.Race;
|
||||
@@ -33,11 +38,12 @@ import org.l2jmobius.gameserver.model.skill.Skill;
|
||||
|
||||
/**
|
||||
* SummonMulti effect implementation.
|
||||
* @author UnAfraid
|
||||
* @author UnAfraid, Mobius
|
||||
*/
|
||||
public class SummonMulti extends AbstractEffect
|
||||
{
|
||||
private final int _npcId;
|
||||
private final Map<Integer, Integer> _levelTemplates;
|
||||
private final float _expMultiplier;
|
||||
private final ItemHolder _consumeItem;
|
||||
private final int _lifeTime;
|
||||
@@ -46,7 +52,21 @@ public class SummonMulti extends AbstractEffect
|
||||
|
||||
public SummonMulti(StatSet params)
|
||||
{
|
||||
_npcId = params.getInt("npcId");
|
||||
_npcId = params.getInt("npcId", 0);
|
||||
if (_npcId > 0)
|
||||
{
|
||||
_levelTemplates = null;
|
||||
}
|
||||
else
|
||||
{
|
||||
final List<Integer> summonerLevels = params.getIntegerList("summonerLevels");
|
||||
final List<Integer> npcIds = params.getIntegerList("npcIds");
|
||||
_levelTemplates = new LinkedHashMap<>(npcIds.size());
|
||||
for (int i = 0; i < npcIds.size(); i++)
|
||||
{
|
||||
_levelTemplates.put(summonerLevels.get(i), npcIds.get(i));
|
||||
}
|
||||
}
|
||||
_expMultiplier = params.getFloat("expMultiplier", 1);
|
||||
_consumeItem = new ItemHolder(params.getInt("consumeItemId", 0), params.getInt("consumeItemCount", 1));
|
||||
_consumeItemInterval = params.getInt("consumeItemInterval", 0);
|
||||
@@ -80,7 +100,31 @@ public class SummonMulti extends AbstractEffect
|
||||
return;
|
||||
}
|
||||
|
||||
final NpcTemplate template = NpcData.getInstance().getTemplate(_npcId);
|
||||
final NpcTemplate template;
|
||||
if (_npcId > 0)
|
||||
{
|
||||
template = NpcData.getInstance().getTemplate(_npcId);
|
||||
}
|
||||
else
|
||||
{
|
||||
Entry<Integer, Integer> levelTemplate = null;
|
||||
for (Entry<Integer, Integer> entry : _levelTemplates.entrySet())
|
||||
{
|
||||
if ((levelTemplate == null) || (player.getLevel() >= entry.getKey()))
|
||||
{
|
||||
levelTemplate = entry;
|
||||
}
|
||||
}
|
||||
if (levelTemplate != null)
|
||||
{
|
||||
template = NpcData.getInstance().getTemplate(levelTemplate.getValue());
|
||||
}
|
||||
else // Should never happen.
|
||||
{
|
||||
template = NpcData.getInstance().getTemplate(_levelTemplates.keySet().stream().findFirst().get());
|
||||
}
|
||||
}
|
||||
|
||||
final Servitor summon = new Servitor(template, player);
|
||||
final int consumeItemInterval = (_consumeItemInterval > 0 ? _consumeItemInterval : (template.getRace() != Race.SIEGE_WEAPON ? 240 : 60)) * 1000;
|
||||
|
||||
|
||||
@@ -210,6 +210,11 @@ public class TriggerSkillByAttack extends AbstractEffect
|
||||
else
|
||||
{
|
||||
triggerSkill = SkillData.getInstance().getSkill(_skill.getSkillId(), Math.min(_skillLevelScaleTo, buffInfo.getSkill().getLevel() + 1));
|
||||
|
||||
if (event.getAttacker().isSkillDisabled(buffInfo.getSkill()))
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if ((buffInfo == null) || (buffInfo.getSkill().getLevel() < triggerSkill.getLevel()) || _renewDuration)
|
||||
|
||||
@@ -34,6 +34,7 @@ public class TriggerSkillByBaseStat extends AbstractEffect
|
||||
private final BaseStat _baseStat;
|
||||
private final int _skillId;
|
||||
private final int _skillLevel;
|
||||
private final int _skillSubLevel;
|
||||
private final int _min;
|
||||
private final int _max;
|
||||
|
||||
@@ -42,6 +43,7 @@ public class TriggerSkillByBaseStat extends AbstractEffect
|
||||
_baseStat = params.getEnum("baseStat", BaseStat.class);
|
||||
_skillId = params.getInt("skillId", 0);
|
||||
_skillLevel = params.getInt("skillLevel", 1);
|
||||
_skillSubLevel = params.getInt("skillSubLevel", 0);
|
||||
_min = params.getInt("min", 0);
|
||||
_max = params.getInt("max", 9999);
|
||||
}
|
||||
@@ -101,7 +103,7 @@ public class TriggerSkillByBaseStat extends AbstractEffect
|
||||
{
|
||||
if (!target.isAffectedBySkill(_skillId))
|
||||
{
|
||||
SkillCaster.triggerCast(target, target, SkillData.getInstance().getSkill(_skillId, _skillLevel));
|
||||
SkillCaster.triggerCast(target, target, SkillData.getInstance().getSkill(_skillId, _skillLevel, _skillSubLevel));
|
||||
}
|
||||
}
|
||||
else
|
||||
|
||||
@@ -124,6 +124,15 @@ public class TriggerSkillBySkill extends AbstractEffect
|
||||
if (buffInfo != null)
|
||||
{
|
||||
triggerSkill = SkillData.getInstance().getSkill(_skill.getSkillId(), Math.min(_skillLevelScaleTo, buffInfo.getSkill().getLevel() + 1));
|
||||
|
||||
if (event.getCaster().isSkillDisabled(buffInfo.getSkill()))
|
||||
{
|
||||
if ((_replace) && (buffInfo.getSkill().getLevel() == _skillLevelScaleTo))
|
||||
{
|
||||
((Creature) target).stopSkillEffects(SkillFinishType.SILENT, triggerSkill.getId());
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -34,6 +34,7 @@ public class TriggerSkillByStat extends AbstractEffect
|
||||
private final Stat _stat;
|
||||
private final int _skillId;
|
||||
private final int _skillLevel;
|
||||
private final int _skillSubLevel;
|
||||
private final int _min;
|
||||
private final int _max;
|
||||
|
||||
@@ -42,6 +43,7 @@ public class TriggerSkillByStat extends AbstractEffect
|
||||
_stat = params.getEnum("stat", Stat.class);
|
||||
_skillId = params.getInt("skillId", 0);
|
||||
_skillLevel = params.getInt("skillLevel", 1);
|
||||
_skillSubLevel = params.getInt("skillSubLevel", 0);
|
||||
_min = params.getInt("min", 0);
|
||||
_max = params.getInt("max", 9999);
|
||||
}
|
||||
@@ -63,7 +65,7 @@ public class TriggerSkillByStat extends AbstractEffect
|
||||
{
|
||||
if (!target.isAffectedBySkill(_skillId))
|
||||
{
|
||||
SkillCaster.triggerCast(target, target, SkillData.getInstance().getSkill(_skillId, _skillLevel));
|
||||
SkillCaster.triggerCast(target, target, SkillData.getInstance().getSkill(_skillId, _skillLevel, _skillSubLevel));
|
||||
}
|
||||
}
|
||||
else
|
||||
|
||||
@@ -17,7 +17,13 @@
|
||||
package handlers.effecthandlers;
|
||||
|
||||
import org.l2jmobius.gameserver.model.StatSet;
|
||||
import org.l2jmobius.gameserver.model.actor.Creature;
|
||||
import org.l2jmobius.gameserver.model.actor.Player;
|
||||
import org.l2jmobius.gameserver.model.item.instance.Item;
|
||||
import org.l2jmobius.gameserver.model.itemcontainer.Inventory;
|
||||
import org.l2jmobius.gameserver.model.skill.Skill;
|
||||
import org.l2jmobius.gameserver.model.stats.Stat;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.InventoryUpdate;
|
||||
|
||||
/**
|
||||
* @author Sero
|
||||
@@ -28,4 +34,46 @@ public class WeaponBonusMAtk extends AbstractStatAddEffect
|
||||
{
|
||||
super(params, Stat.WEAPON_BONUS_MAGIC_ATTACK);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStart(Creature effector, Creature effected, Skill skill, Item item)
|
||||
{
|
||||
final Player player = effected.getActingPlayer();
|
||||
if (player == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
final Item weapon = player.getInventory().getPaperdollItem(Inventory.PAPERDOLL_RHAND);
|
||||
if (weapon == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
final InventoryUpdate iu = new InventoryUpdate();
|
||||
iu.addModifiedItem(weapon);
|
||||
player.sendInventoryUpdate(iu);
|
||||
player.broadcastUserInfo();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onExit(Creature effector, Creature effected, Skill skill)
|
||||
{
|
||||
final Player player = effected.getActingPlayer();
|
||||
if (player == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
final Item weapon = player.getInventory().getPaperdollItem(Inventory.PAPERDOLL_RHAND);
|
||||
if (weapon == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
final InventoryUpdate iu = new InventoryUpdate();
|
||||
iu.addModifiedItem(weapon);
|
||||
player.sendInventoryUpdate(iu);
|
||||
player.broadcastUserInfo();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,7 +17,13 @@
|
||||
package handlers.effecthandlers;
|
||||
|
||||
import org.l2jmobius.gameserver.model.StatSet;
|
||||
import org.l2jmobius.gameserver.model.actor.Creature;
|
||||
import org.l2jmobius.gameserver.model.actor.Player;
|
||||
import org.l2jmobius.gameserver.model.item.instance.Item;
|
||||
import org.l2jmobius.gameserver.model.itemcontainer.Inventory;
|
||||
import org.l2jmobius.gameserver.model.skill.Skill;
|
||||
import org.l2jmobius.gameserver.model.stats.Stat;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.InventoryUpdate;
|
||||
|
||||
/**
|
||||
* @author Sero
|
||||
@@ -28,4 +34,46 @@ public class WeaponBonusPAtk extends AbstractStatAddEffect
|
||||
{
|
||||
super(params, Stat.WEAPON_BONUS_PHYSICAL_ATTACK);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStart(Creature effector, Creature effected, Skill skill, Item item)
|
||||
{
|
||||
final Player player = effected.getActingPlayer();
|
||||
if (player == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
final Item weapon = player.getInventory().getPaperdollItem(Inventory.PAPERDOLL_RHAND);
|
||||
if (weapon == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
final InventoryUpdate iu = new InventoryUpdate();
|
||||
iu.addModifiedItem(weapon);
|
||||
player.sendInventoryUpdate(iu);
|
||||
player.broadcastUserInfo();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onExit(Creature effector, Creature effected, Skill skill)
|
||||
{
|
||||
final Player player = effected.getActingPlayer();
|
||||
if (player == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
final Item weapon = player.getInventory().getPaperdollItem(Inventory.PAPERDOLL_RHAND);
|
||||
if (weapon == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
final InventoryUpdate iu = new InventoryUpdate();
|
||||
iu.addModifiedItem(weapon);
|
||||
player.sendInventoryUpdate(iu);
|
||||
player.broadcastUserInfo();
|
||||
}
|
||||
}
|
||||
@@ -16,39 +16,61 @@
|
||||
*/
|
||||
package handlers.playeractions;
|
||||
|
||||
import org.l2jmobius.gameserver.ai.CtrlIntention;
|
||||
import org.l2jmobius.gameserver.handler.IPlayerActionHandler;
|
||||
import org.l2jmobius.gameserver.model.ActionDataHolder;
|
||||
import org.l2jmobius.gameserver.model.WorldObject;
|
||||
import org.l2jmobius.gameserver.model.actor.Player;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.Pet;
|
||||
import org.l2jmobius.gameserver.network.SystemMessageId;
|
||||
|
||||
/**
|
||||
* Pet attack player action handler.
|
||||
* @author Nik
|
||||
* @author Mobius
|
||||
*/
|
||||
public class PetAttack implements IPlayerActionHandler
|
||||
{
|
||||
@Override
|
||||
public void useAction(Player player, ActionDataHolder data, boolean ctrlPressed, boolean shiftPressed)
|
||||
{
|
||||
if ((player.getPet() == null) || !player.getPet().isPet())
|
||||
final Pet pet = player.getPet();
|
||||
if ((pet == null) || !pet.isPet())
|
||||
{
|
||||
player.sendPacket(SystemMessageId.YOU_DON_T_HAVE_A_PET);
|
||||
return;
|
||||
}
|
||||
|
||||
final Pet pet = player.getPet();
|
||||
if (pet.isUncontrollable())
|
||||
{
|
||||
player.sendPacket(SystemMessageId.WHEN_YOUR_PET_S_SATIETY_REACHES_0_YOU_CANNOT_CONTROL_IT);
|
||||
return;
|
||||
}
|
||||
else if (pet.isBetrayed())
|
||||
|
||||
if (pet.isBetrayed())
|
||||
{
|
||||
player.sendPacket(SystemMessageId.YOUR_PET_SERVITOR_IS_UNRESPONSIVE_AND_WILL_NOT_OBEY_ANY_ORDERS);
|
||||
return;
|
||||
}
|
||||
else if (pet.canAttack(player.getTarget(), ctrlPressed))
|
||||
|
||||
final WorldObject target = player.getTarget();
|
||||
if (target == null)
|
||||
{
|
||||
pet.doAttack(player.getTarget());
|
||||
return;
|
||||
}
|
||||
|
||||
if (player.calculateDistance3D(target) > 3000)
|
||||
{
|
||||
pet.getAI().setIntention(CtrlIntention.AI_INTENTION_FOLLOW, player);
|
||||
}
|
||||
else if (pet.canAttack(target, ctrlPressed))
|
||||
{
|
||||
pet.doAttack(target);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isPetAction()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -52,4 +52,10 @@ public class PetHold implements IPlayerActionHandler
|
||||
((SummonAI) pet.getAI()).notifyFollowStatusChange();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isPetAction()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -53,4 +53,10 @@ public class PetMove implements IPlayerActionHandler
|
||||
pet.getAI().setIntention(CtrlIntention.AI_INTENTION_MOVE_TO, player.getTarget().getLocation());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isPetAction()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -77,4 +77,10 @@ public class PetSkillUse implements IPlayerActionHandler
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isPetAction()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -51,4 +51,10 @@ public class PetStop implements IPlayerActionHandler
|
||||
pet.cancelAction();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isPetAction()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,34 +16,52 @@
|
||||
*/
|
||||
package handlers.playeractions;
|
||||
|
||||
import org.l2jmobius.gameserver.ai.CtrlIntention;
|
||||
import org.l2jmobius.gameserver.handler.IPlayerActionHandler;
|
||||
import org.l2jmobius.gameserver.model.ActionDataHolder;
|
||||
import org.l2jmobius.gameserver.model.WorldObject;
|
||||
import org.l2jmobius.gameserver.model.actor.Player;
|
||||
import org.l2jmobius.gameserver.model.actor.Summon;
|
||||
import org.l2jmobius.gameserver.network.SystemMessageId;
|
||||
|
||||
/**
|
||||
* Servitor Attack player action handler.
|
||||
* @author St3eT
|
||||
* @author Mobius
|
||||
*/
|
||||
public class ServitorAttack implements IPlayerActionHandler
|
||||
{
|
||||
@Override
|
||||
public void useAction(Player player, ActionDataHolder data, boolean ctrlPressed, boolean shiftPressed)
|
||||
{
|
||||
if (player.hasServitors())
|
||||
{
|
||||
for (Summon summon : player.getServitors().values())
|
||||
{
|
||||
if (summon.canAttack(player.getTarget(), ctrlPressed))
|
||||
{
|
||||
summon.doAttack(player.getTarget());
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
if (!player.hasServitors())
|
||||
{
|
||||
player.sendPacket(SystemMessageId.YOU_DON_T_HAVE_A_SERVITOR);
|
||||
return;
|
||||
}
|
||||
|
||||
final WorldObject target = player.getTarget();
|
||||
if (target == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
final boolean targetOutOfRange = player.calculateDistance3D(target) > 3000;
|
||||
for (Summon summon : player.getServitors().values())
|
||||
{
|
||||
if (targetOutOfRange)
|
||||
{
|
||||
summon.getAI().setIntention(CtrlIntention.AI_INTENTION_FOLLOW, player);
|
||||
}
|
||||
else if (summon.canAttack(target, ctrlPressed))
|
||||
{
|
||||
summon.doAttack(target);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isPetAction()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -48,4 +48,10 @@ public class ServitorHold implements IPlayerActionHandler
|
||||
((SummonAI) s.getAI()).notifyFollowStatusChange();
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isPetAction()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -68,4 +68,10 @@ public class ServitorMode implements IPlayerActionHandler
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isPetAction()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -56,4 +56,10 @@ public class ServitorMove implements IPlayerActionHandler
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isPetAction()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -62,4 +62,10 @@ public class ServitorSkillUse implements IPlayerActionHandler
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isPetAction()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -47,4 +47,10 @@ public class ServitorStop implements IPlayerActionHandler
|
||||
s.cancelAction();
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isPetAction()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -62,4 +62,10 @@ public class UnsummonPet implements IPlayerActionHandler
|
||||
pet.unSummon(player);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isPetAction()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -69,4 +69,10 @@ public class UnsummonServitor implements IPlayerActionHandler
|
||||
player.sendPacket(SystemMessageId.YOU_DON_T_HAVE_A_SERVITOR);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isPetAction()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,43 @@
|
||||
/*
|
||||
* This file is part of the L2J Mobius project.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package handlers.skillconditionhandlers;
|
||||
|
||||
import org.l2jmobius.Config;
|
||||
import org.l2jmobius.gameserver.model.StatSet;
|
||||
import org.l2jmobius.gameserver.model.WorldObject;
|
||||
import org.l2jmobius.gameserver.model.actor.Creature;
|
||||
import org.l2jmobius.gameserver.model.skill.ISkillCondition;
|
||||
import org.l2jmobius.gameserver.model.skill.Skill;
|
||||
|
||||
/**
|
||||
* @author CostyKiller
|
||||
*/
|
||||
public class CanUseSymbolSealIncreaseItemSkillCondition implements ISkillCondition
|
||||
{
|
||||
private final int _amount;
|
||||
|
||||
public CanUseSymbolSealIncreaseItemSkillCondition(StatSet params)
|
||||
{
|
||||
_amount = params.getInt("amount", 0);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canUse(Creature caster, Skill skill, WorldObject target)
|
||||
{
|
||||
return caster.isPlayer() && ((caster.getActingPlayer().getSymbolSealPoints() + ((Config.MAX_SYMBOL_SEAL_POINTS * _amount) / 100)) <= Config.MAX_SYMBOL_SEAL_POINTS);
|
||||
}
|
||||
}
|
||||
@@ -39,10 +39,11 @@ public class OpSkillAcquireSkillCondition implements ISkillCondition
|
||||
@Override
|
||||
public boolean canUse(Creature caster, Skill skill, WorldObject target)
|
||||
{
|
||||
if (!target.isCreature())
|
||||
if ((target == null) || !target.isCreature())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
final int skillLevel = ((Creature) target).getSkillLevel(_skillId);
|
||||
return _hasLearned ? skillLevel != 0 : skillLevel == 0;
|
||||
}
|
||||
|
||||
@@ -67,7 +67,7 @@ public class PartyPledge implements IAffectScopeHandler
|
||||
return false;
|
||||
}
|
||||
|
||||
if ((p != player) && (p.getClanId() != clanId) && ((party == null) || (party != p.getParty())))
|
||||
if ((p != player) && ((clanId == 0) || (p.getClanId() != clanId)) && ((party == null) || (party != p.getParty())))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -24,6 +24,7 @@ import org.l2jmobius.gameserver.model.actor.Attackable;
|
||||
import org.l2jmobius.gameserver.model.actor.Creature;
|
||||
import org.l2jmobius.gameserver.model.actor.Npc;
|
||||
import org.l2jmobius.gameserver.model.actor.Player;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.FriendlyNpc;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.Monster;
|
||||
import org.l2jmobius.gameserver.model.instancezone.Instance;
|
||||
import org.l2jmobius.gameserver.model.quest.QuestState;
|
||||
@@ -46,10 +47,11 @@ public class ChamberOfProphecies extends AbstractInstance
|
||||
{
|
||||
// NPCs
|
||||
private static final int KAIN_VAN_HALTER = 31639;
|
||||
private static final int VAN_HALTER = 33999;
|
||||
private static final int FERIN = 34001;
|
||||
private static final int GRAIL = 33996;
|
||||
private static final int MYSTERIOUS_WIZARD = 33980;
|
||||
// Helper NPCs
|
||||
private static final int HELPER_VAN_HALTER = 33999;
|
||||
private static final int HELPER_FERIN = 34001;
|
||||
// Misc
|
||||
private static final int DOOR_2 = 17230102;
|
||||
private static final int DOOR_3 = 17230103;
|
||||
@@ -66,7 +68,7 @@ public class ChamberOfProphecies extends AbstractInstance
|
||||
addStartNpc(KAIN_VAN_HALTER);
|
||||
addFirstTalkId(KAIN_VAN_HALTER, GRAIL, MYSTERIOUS_WIZARD);
|
||||
addTalkId(KAIN_VAN_HALTER, GRAIL, MYSTERIOUS_WIZARD);
|
||||
addCreatureSeeId(FERIN, VAN_HALTER);
|
||||
addCreatureSeeId(HELPER_FERIN, HELPER_VAN_HALTER);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -145,12 +147,12 @@ public class ChamberOfProphecies extends AbstractInstance
|
||||
{
|
||||
return null;
|
||||
}
|
||||
final Npc valHalter = world.getNpc(VAN_HALTER);
|
||||
if (valHalter != null)
|
||||
final FriendlyNpc vanHalter = (FriendlyNpc) world.getNpc(HELPER_VAN_HALTER);
|
||||
if (vanHalter != null)
|
||||
{
|
||||
valHalter.deleteMe(); // probably needs another npc id for initial room
|
||||
vanHalter.deleteMe(); // probably needs another npc id for initial room
|
||||
}
|
||||
final Npc ferin = world.getNpc(FERIN);
|
||||
final FriendlyNpc ferin = (FriendlyNpc) world.getNpc(HELPER_FERIN);
|
||||
if (ferin != null)
|
||||
{
|
||||
ferin.deleteMe(); // probably needs another npc id for initial room
|
||||
@@ -190,6 +192,8 @@ public class ChamberOfProphecies extends AbstractInstance
|
||||
case "CHECK_STATUS":
|
||||
{
|
||||
final Instance world = player.getInstanceWorld();
|
||||
final FriendlyNpc ferin = (FriendlyNpc) world.getNpc(HELPER_FERIN);
|
||||
final FriendlyNpc vanHalter = (FriendlyNpc) world.getNpc(HELPER_VAN_HALTER);
|
||||
if (!isInInstance(world))
|
||||
{
|
||||
return null;
|
||||
@@ -200,8 +204,8 @@ public class ChamberOfProphecies extends AbstractInstance
|
||||
{
|
||||
if (world.getAliveNpcs(Monster.class).isEmpty())
|
||||
{
|
||||
startQuestTimer("SEY2", 14000, world.getNpc(FERIN), player);
|
||||
startQuestTimer("SEY_KAIN", 24000, world.getNpc(VAN_HALTER), player);
|
||||
startQuestTimer("SEY2", 14000, ferin, player);
|
||||
startQuestTimer("SEY_KAIN", 24000, vanHalter, player);
|
||||
startQuestTimer("OPEN_DOOR1", 5000, npc, player);
|
||||
}
|
||||
startQuestTimer("CHECK_STATUS", 7000, npc, player);
|
||||
@@ -221,7 +225,7 @@ public class ChamberOfProphecies extends AbstractInstance
|
||||
{
|
||||
if (world.getAliveNpcs(Monster.class).isEmpty())
|
||||
{
|
||||
startQuestTimer("SEY3", 8000, world.getNpc(FERIN), player);
|
||||
startQuestTimer("SEY3", 8000, ferin, player);
|
||||
startQuestTimer("OPEN_DOOR2", 5000, npc, player);
|
||||
}
|
||||
startQuestTimer("CHECK_STATUS", 7000, npc, player);
|
||||
@@ -234,7 +238,7 @@ public class ChamberOfProphecies extends AbstractInstance
|
||||
world.setStatus(4);
|
||||
world.spawnGroup("wof_room3_2");
|
||||
world.openCloseDoor(DOOR_3, false);
|
||||
startQuestTimer("SEY_KAIN_1", 5000, world.getNpc(VAN_HALTER), player);
|
||||
startQuestTimer("SEY_KAIN_1", 5000, vanHalter, player);
|
||||
}
|
||||
startQuestTimer("CHECK_STATUS", 7000, npc, player);
|
||||
break;
|
||||
@@ -245,8 +249,8 @@ public class ChamberOfProphecies extends AbstractInstance
|
||||
{
|
||||
world.setStatus(5);
|
||||
world.spawnGroup("wof_room4");
|
||||
startQuestTimer("SEY_KAIN_2", 3000, world.getNpc(VAN_HALTER), player);
|
||||
startQuestTimer("SEY4", 7000, world.getNpc(FERIN), player);
|
||||
startQuestTimer("SEY_KAIN_2", 3000, vanHalter, player);
|
||||
startQuestTimer("SEY4", 7000, ferin, player);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -304,7 +308,7 @@ public class ChamberOfProphecies extends AbstractInstance
|
||||
return null;
|
||||
}
|
||||
cancelQuestTimer("ATTACK1", npc, player);
|
||||
startQuestTimer("ATTACK2", 200, world.getNpc(VAN_HALTER), player, true);
|
||||
startQuestTimer("ATTACK2", 200, world.getNpc(HELPER_VAN_HALTER), player, true);
|
||||
world.setStatus(3);
|
||||
world.spawnGroup("wof_room3");
|
||||
world.openCloseDoor(DOOR_3, true);
|
||||
@@ -321,7 +325,7 @@ public class ChamberOfProphecies extends AbstractInstance
|
||||
}
|
||||
case "SEY2":
|
||||
{
|
||||
if ((npc != null) && (npc.getId() == FERIN))
|
||||
if ((npc != null) && (npc.getId() == HELPER_FERIN))
|
||||
{
|
||||
npc.broadcastPacket(new NpcSay(npc.getObjectId(), ChatType.NPC_GENERAL, npc.getId(), NpcStringId.YOU_CAN_T_DIE_HERE_I_DIDN_T_LEARN_RESURRECT_YET));
|
||||
player.sendPacket(new PlaySound(3, "Npcdialog1.apple_quest_4", 0, 0, 0, 0, 0));
|
||||
@@ -330,7 +334,7 @@ public class ChamberOfProphecies extends AbstractInstance
|
||||
}
|
||||
case "SEY_KAIN":
|
||||
{
|
||||
if ((npc != null) && (npc.getId() == VAN_HALTER))
|
||||
if ((npc != null) && (npc.getId() == HELPER_VAN_HALTER))
|
||||
{
|
||||
npc.broadcastPacket(new NpcSay(npc.getObjectId(), ChatType.NPC_GENERAL, npc.getId(), NpcStringId.GISELLE_WAS_SUCH_A_SWEET_CHILD));
|
||||
player.sendPacket(new PlaySound(3, "Npcdialog1.holter_quest_1", 0, 0, 0, 0, 0));
|
||||
@@ -340,7 +344,7 @@ public class ChamberOfProphecies extends AbstractInstance
|
||||
}
|
||||
case "SEY3":
|
||||
{
|
||||
if ((npc != null) && (npc.getId() == FERIN))
|
||||
if ((npc != null) && (npc.getId() == HELPER_FERIN))
|
||||
{
|
||||
npc.broadcastPacket(new NpcSay(npc.getObjectId(), ChatType.NPC_GENERAL, npc.getId(), NpcStringId.DO_YOU_THINK_I_LL_GROW_TALLER_IF_I_EAT_LOTS_AND_LOTS));
|
||||
player.sendPacket(new PlaySound(3, "Npcdialog1.apple_quest_6", 0, 0, 0, 0, 0));
|
||||
@@ -349,7 +353,7 @@ public class ChamberOfProphecies extends AbstractInstance
|
||||
}
|
||||
case "SEY_KAIN_1":
|
||||
{
|
||||
if ((npc != null) && (npc.getId() == VAN_HALTER))
|
||||
if ((npc != null) && (npc.getId() == HELPER_VAN_HALTER))
|
||||
{
|
||||
npc.broadcastPacket(new NpcSay(npc.getObjectId(), ChatType.NPC_GENERAL, npc.getId(), NpcStringId.SUCH_MONSTERS_IN_A_PLACE_LIKE_THIS_UNBELIEVABLE));
|
||||
}
|
||||
@@ -357,7 +361,7 @@ public class ChamberOfProphecies extends AbstractInstance
|
||||
}
|
||||
case "SEY_KAIN_2":
|
||||
{
|
||||
if ((npc != null) && (npc.getId() == VAN_HALTER))
|
||||
if ((npc != null) && (npc.getId() == HELPER_VAN_HALTER))
|
||||
{
|
||||
npc.broadcastPacket(new NpcSay(npc.getObjectId(), ChatType.NPC_GENERAL, npc.getId(), NpcStringId.THAT_S_THE_MONSTER_THAT_ATTACKED_FAERON_YOU_RE_OUTMATCHED_HERE_GO_AHEAD_I_LL_CATCH_UP));
|
||||
player.sendPacket(new PlaySound(3, "Npcdialog1.holter_quest_6", 0, 0, 0, 0, 0));
|
||||
@@ -367,7 +371,7 @@ public class ChamberOfProphecies extends AbstractInstance
|
||||
}
|
||||
case "SEY4":
|
||||
{
|
||||
if ((npc != null) && (npc.getId() == FERIN))
|
||||
if ((npc != null) && (npc.getId() == HELPER_FERIN))
|
||||
{
|
||||
npc.broadcastPacket(new NpcSay(npc.getObjectId(), ChatType.NPC_GENERAL, npc.getId(), NpcStringId.GO_NOW_KAIN_CAN_HANDLE_THIS));
|
||||
npc.setScriptValue(1);
|
||||
@@ -377,7 +381,7 @@ public class ChamberOfProphecies extends AbstractInstance
|
||||
}
|
||||
case "SEY_KAIN_3":
|
||||
{
|
||||
if ((npc != null) && (npc.getId() == VAN_HALTER))
|
||||
if ((npc != null) && (npc.getId() == HELPER_VAN_HALTER))
|
||||
{
|
||||
npc.broadcastPacket(new NpcSay(npc.getObjectId(), ChatType.NPC_GENERAL, npc.getId(), NpcStringId.LEAVE_THIS_TO_ME_GO));
|
||||
npc.setScriptValue(1);
|
||||
@@ -387,7 +391,7 @@ public class ChamberOfProphecies extends AbstractInstance
|
||||
}
|
||||
case "REST":
|
||||
{
|
||||
if ((npc != null) && (npc.getId() == FERIN))
|
||||
if ((npc != null) && (npc.getId() == HELPER_FERIN))
|
||||
{
|
||||
npc.getAI().setIntention(CtrlIntention.AI_INTENTION_IDLE, player);
|
||||
}
|
||||
@@ -508,7 +512,7 @@ public class ChamberOfProphecies extends AbstractInstance
|
||||
{
|
||||
switch (npc.getId())
|
||||
{
|
||||
case FERIN:
|
||||
case HELPER_FERIN:
|
||||
{
|
||||
if (creature.isPlayer() && !creature.isDead() && npc.isScriptValue(0))
|
||||
{
|
||||
@@ -516,7 +520,7 @@ public class ChamberOfProphecies extends AbstractInstance
|
||||
}
|
||||
break;
|
||||
}
|
||||
case VAN_HALTER:
|
||||
case HELPER_VAN_HALTER:
|
||||
{
|
||||
if (creature.isPlayer() && !creature.isDead() && world.isStatus(0))
|
||||
{
|
||||
|
||||
886
L2J_Mobius_11.1_TheSourceOfFlame/dist/game/data/scripts/instances/IceQueensCastle/Freya.java
vendored
Normal file
886
L2J_Mobius_11.1_TheSourceOfFlame/dist/game/data/scripts/instances/IceQueensCastle/Freya.java
vendored
Normal file
@@ -0,0 +1,886 @@
|
||||
/*
|
||||
* This file is part of the L2J Mobius project.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package instances.IceQueensCastle;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.l2jmobius.gameserver.enums.Movie;
|
||||
import org.l2jmobius.gameserver.model.Party;
|
||||
import org.l2jmobius.gameserver.model.actor.Attackable;
|
||||
import org.l2jmobius.gameserver.model.actor.Creature;
|
||||
import org.l2jmobius.gameserver.model.actor.Npc;
|
||||
import org.l2jmobius.gameserver.model.actor.Player;
|
||||
import org.l2jmobius.gameserver.model.holders.ItemHolder;
|
||||
import org.l2jmobius.gameserver.model.holders.SkillHolder;
|
||||
import org.l2jmobius.gameserver.model.instancezone.Instance;
|
||||
import org.l2jmobius.gameserver.model.skill.Skill;
|
||||
import org.l2jmobius.gameserver.model.skill.SkillCaster;
|
||||
import org.l2jmobius.gameserver.network.NpcStringId;
|
||||
import org.l2jmobius.gameserver.network.SystemMessageId;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.ExShowScreenMessage;
|
||||
|
||||
import instances.AbstractInstance;
|
||||
|
||||
/**
|
||||
* @author Tanatos
|
||||
* @URL https://www.youtube.com/watch?v=3l9JuxM5lk0&t
|
||||
* @URL https://l2central.info/main/locations/instance_zones/party/ice_queen_castle/
|
||||
*/
|
||||
public class Freya extends AbstractInstance
|
||||
{
|
||||
// NPCs
|
||||
private static final int BENUSTA = 34542;
|
||||
private static final int FREYA_THRONE = 26511;
|
||||
private static final int FREYA_WAITING = 26512;
|
||||
private static final int FREYA_STAND = 26513;
|
||||
private static final int GLAKIAS = 26514;
|
||||
private static final int WINTER_CRYSTAL = 26518;
|
||||
private static final int ICE_WALL = 26519;
|
||||
private static final int HUGE_ICICLE = 26520;
|
||||
// Skills
|
||||
private static final SkillHolder ICE_BOLT = new SkillHolder(34437, 1); // Queen's Ice Bolt
|
||||
private static final SkillHolder FREEZING_BOLT = new SkillHolder(34437, 2); // Queen's Freezing Bolt
|
||||
private static final SkillHolder ICE_STORM = new SkillHolder(34438, 1); // Queen's Ice Storm
|
||||
private static final SkillHolder FREEZING_STORM = new SkillHolder(34438, 2); // Queen's Freezing Storm
|
||||
private static final SkillHolder ICE_HURRICANE = new SkillHolder(34439, 1); // Queen's Ice Hurricane
|
||||
private static final SkillHolder FREEZING_HURRICANE = new SkillHolder(34439, 2); // Queen's Freezing Hurricane
|
||||
private static final SkillHolder FREEZING_BLIZARD = new SkillHolder(34440, 1); // Queen's Freezing Blizzard
|
||||
private static final SkillHolder FREEZING_QUEEN_WAVE = new SkillHolder(34441, 2); // Queen's Freezing Wave
|
||||
private static final SkillHolder ETERNAL_BLIZZARD = new SkillHolder(34442, 1); // Eternal Blizzard
|
||||
private static final SkillHolder FREEZING_STRIKE = new SkillHolder(34443, 1); // Freezing Strike
|
||||
private static final SkillHolder FREEZING_SMASH = new SkillHolder(34444, 1); // Freezing Smash
|
||||
private static final SkillHolder FREEZING_WAVE = new SkillHolder(34445, 1); // Freezing Wave
|
||||
private static final SkillHolder FINAL_FREEZING = new SkillHolder(34447, 1); // Final Freezing Burst
|
||||
private static final SkillHolder FREEZING_CHAIN = new SkillHolder(34449, 1); // Freezing Chain
|
||||
private static final SkillHolder FREEZING_MASS_CHAIN = new SkillHolder(34449, 2); // Mass Freezing Chain
|
||||
private static final SkillHolder FROSTY_COMMAND = new SkillHolder(34451, 1); // Frosty Command
|
||||
private static final SkillHolder ICE_BOLTS = new SkillHolder(34452, 1); // Summon Ice Bolts
|
||||
private static final SkillHolder FINAL_FREEZING_DISPLAY = new SkillHolder(6276, 1); // Final Freezing Burst Display
|
||||
// Items
|
||||
private static final ItemHolder JEWELRY_BOX = new ItemHolder(82497, 1);
|
||||
private static final ItemHolder WARM_ENERGY = new ItemHolder(82491, 1);
|
||||
private static final ItemHolder COOL_ENERGY = new ItemHolder(82492, 1);
|
||||
private static final ItemHolder FREYAS_CLOAK = new ItemHolder(82493, 1);
|
||||
private static final ItemHolder FREYAS_NECKLACE = new ItemHolder(82494, 1);
|
||||
private static final ItemHolder FREYAS_STAFF = new ItemHolder(82495, 1);
|
||||
private static final ItemHolder FREYAS_CROWN = new ItemHolder(82496, 1);
|
||||
// Misc
|
||||
private static final int TEMPLATE_ID = 323;
|
||||
|
||||
public Freya()
|
||||
{
|
||||
super(TEMPLATE_ID);
|
||||
addStartNpc(BENUSTA);
|
||||
addAttackId(FREYA_THRONE, FREYA_STAND, GLAKIAS);
|
||||
addKillId(FREYA_STAND);
|
||||
addSpellFinishedId(HUGE_ICICLE, WINTER_CRYSTAL, FREYA_STAND);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onAdvEvent(String event, Npc npc, Player player)
|
||||
{
|
||||
switch (event)
|
||||
{
|
||||
case "enterInstance":
|
||||
{
|
||||
final int templateId = TEMPLATE_ID;
|
||||
if (player.isInParty())
|
||||
{
|
||||
final Party party = player.getParty();
|
||||
if (!party.isLeader(player))
|
||||
{
|
||||
player.sendPacket(SystemMessageId.ONLY_A_PARTY_LEADER_CAN_MAKE_THE_REQUEST_TO_ENTER);
|
||||
return null;
|
||||
}
|
||||
|
||||
if (player.isInCommandChannel())
|
||||
{
|
||||
player.sendPacket(SystemMessageId.YOU_CANNOT_ENTER_AS_YOU_DON_T_MEET_THE_REQUIREMENTS);
|
||||
return null;
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
for (Player member : members)
|
||||
{
|
||||
enterInstance(member, npc, templateId);
|
||||
}
|
||||
}
|
||||
else if (player.isGM())
|
||||
{
|
||||
enterInstance(player, npc, templateId);
|
||||
}
|
||||
else
|
||||
{
|
||||
player.sendPacket(SystemMessageId.YOU_ARE_NOT_IN_A_PARTY_SO_YOU_CANNOT_ENTER);
|
||||
}
|
||||
|
||||
if (player.getInstanceWorld() != null)
|
||||
{
|
||||
startQuestTimer("movie_opening", 5000, null, player);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "movie_opening":
|
||||
{
|
||||
final Instance world = player.getInstanceWorld();
|
||||
if (!isInInstance(world))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
world.setStatus(1);
|
||||
playMovie(world, Movie.SC_BOSS_FREYA_OPENING);
|
||||
startQuestTimer("check_status", 53500, null, player);
|
||||
break;
|
||||
}
|
||||
case "movie_freya_waiting":
|
||||
{
|
||||
final Instance world = player.getInstanceWorld();
|
||||
if (!isInInstance(world))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
playMovie(world, Movie.SC_BOSS_FREYA_PHASECH_A);
|
||||
startQuestTimer("movie_glakias", 13100, null, player);
|
||||
break;
|
||||
}
|
||||
case "movie_glakias":
|
||||
{
|
||||
final Instance world = player.getInstanceWorld();
|
||||
if (!isInInstance(world))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
world.setStatus(2);
|
||||
world.getNpc(FREYA_THRONE).deleteMe();
|
||||
playMovie(world, Movie.SC_ICE_HEAVYKNIGHT_SPAWN);
|
||||
startQuestTimer("check_status", 10000, null, player);
|
||||
break;
|
||||
}
|
||||
case "movie_last_freya":
|
||||
{
|
||||
final Instance world = player.getInstanceWorld();
|
||||
if (!isInInstance(world))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
world.setStatus(3);
|
||||
world.getNpc(GLAKIAS).deleteMe();
|
||||
world.getNpc(FREYA_WAITING).deleteMe();
|
||||
world.getAliveNpcs(HUGE_ICICLE).forEach(icicle -> icicle.deleteMe());
|
||||
playMovie(world, Movie.SC_BOSS_FREYA_PHASECH_B);
|
||||
startQuestTimer("check_status", 21500, null, player);
|
||||
break;
|
||||
}
|
||||
case "movie_ending":
|
||||
{
|
||||
final Instance world = player.getInstanceWorld();
|
||||
if (!isInInstance(world))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
playMovie(world, Movie.SC_BOSS_FREYA_ENDING_A);
|
||||
break;
|
||||
}
|
||||
case "freya_rage":
|
||||
{
|
||||
final Instance world = player.getInstanceWorld();
|
||||
if (!isInInstance(world))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
if (world.getStatus() == 1)
|
||||
{
|
||||
for (int i = 0; i < 3; i++)
|
||||
{
|
||||
addSpawn(ICE_WALL, player.getX() + getRandom(-400, 400), player.getY() + getRandom(-400, 400), player.getZ() + 10, 0, false, 10000, false, world.getId());
|
||||
}
|
||||
addSpawn(ICE_WALL, player.getX(), player.getY(), player.getZ() + 10, 0, false, 10000, false, world.getId());
|
||||
startQuestTimer("ice_hurricane_cast", 1000, null, player);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "glakias_rage":
|
||||
{
|
||||
final Instance world = player.getInstanceWorld();
|
||||
if (!isInInstance(world))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
if (world.getStatus() == 2)
|
||||
{
|
||||
showOnScreenMsg(world, NpcStringId.I_WILL_FREEZE_YOUR_HEART, ExShowScreenMessage.TOP_CENTER, 10000, true);
|
||||
world.spawnGroup("ICICLES_1");
|
||||
world.spawnGroup("ICICLES_2");
|
||||
world.spawnGroup("ICICLES_3");
|
||||
world.spawnGroup("ICICLES_4");
|
||||
startQuestTimer("ice_bolts_1", 1000, null, player);
|
||||
startQuestTimer("ice_bolts_2", 1000, null, player);
|
||||
startQuestTimer("ice_bolts_3", 7000, null, player);
|
||||
startQuestTimer("ice_bolts_4", 7000, null, player);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "ice_bolts_1":
|
||||
{
|
||||
final Instance world = player.getInstanceWorld();
|
||||
if (!isInInstance(world))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
if (world.getStatus() == 2)
|
||||
{
|
||||
world.getNpcsOfGroup("ICICLES_1").forEach(icicle ->
|
||||
{
|
||||
if (icicle != null)
|
||||
{
|
||||
icicle.setDisplayEffect(1);
|
||||
try
|
||||
{
|
||||
Thread.sleep(700);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
}
|
||||
icicle.setDisplayEffect(2);
|
||||
icicle.doCast(ICE_BOLTS.getSkill());
|
||||
}
|
||||
});
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "ice_bolts_2":
|
||||
{
|
||||
final Instance world = player.getInstanceWorld();
|
||||
if (!isInInstance(world))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
if (world.getStatus() == 2)
|
||||
{
|
||||
world.getNpcsOfGroup("ICICLES_2").forEach(icicle ->
|
||||
{
|
||||
if (icicle != null)
|
||||
{
|
||||
icicle.setDisplayEffect(1);
|
||||
try
|
||||
{
|
||||
Thread.sleep(810);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
}
|
||||
icicle.setDisplayEffect(2);
|
||||
icicle.doCast(ICE_BOLTS.getSkill());
|
||||
}
|
||||
});
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "ice_bolts_3":
|
||||
{
|
||||
final Instance world = player.getInstanceWorld();
|
||||
if (!isInInstance(world))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
if (world.getStatus() == 2)
|
||||
{
|
||||
world.getNpcsOfGroup("ICICLES_3").forEach(icicle ->
|
||||
{
|
||||
if (icicle != null)
|
||||
{
|
||||
icicle.setDisplayEffect(1);
|
||||
try
|
||||
{
|
||||
Thread.sleep(500);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
}
|
||||
icicle.setDisplayEffect(2);
|
||||
icicle.doCast(ICE_BOLTS.getSkill());
|
||||
}
|
||||
});
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "ice_bolts_4":
|
||||
{
|
||||
final Instance world = player.getInstanceWorld();
|
||||
if (!isInInstance(world))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
if (world.getStatus() == 2)
|
||||
{
|
||||
world.getNpcsOfGroup("ICICLES_4").forEach(icicle ->
|
||||
{
|
||||
if (icicle != null)
|
||||
{
|
||||
icicle.setDisplayEffect(1);
|
||||
try
|
||||
{
|
||||
Thread.sleep(578);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
}
|
||||
icicle.setDisplayEffect(2);
|
||||
icicle.doCast(ICE_BOLTS.getSkill());
|
||||
}
|
||||
});
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "frosty_command":
|
||||
{
|
||||
final Instance world = player.getInstanceWorld();
|
||||
if (!isInInstance(world))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
if (world.getStatus() == 2)
|
||||
{
|
||||
final boolean commandCasted = world.getParameters().getBoolean("COMMAND_CASTED", false);
|
||||
if (!commandCasted)
|
||||
{
|
||||
final Npc glakias = world.getNpc(GLAKIAS);
|
||||
glakias.doCast(FROSTY_COMMAND.getSkill());
|
||||
world.getParameters().set("COMMAND_CASTED", true);
|
||||
}
|
||||
else
|
||||
{
|
||||
startQuestTimer("frosty_command", 1000, null, player);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "freezing_hurricane":
|
||||
{
|
||||
final Instance world = player.getInstanceWorld();
|
||||
if (!isInInstance(world))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
if (world.getStatus() < 4)
|
||||
{
|
||||
for (int i = 0; i < 5; i++)
|
||||
{
|
||||
addSpawn(ICE_WALL, player.getX() + getRandom(-800, 800), player.getY() + getRandom(-800, 800), player.getZ() + 10, 0, false, 10000, false, world.getId());
|
||||
}
|
||||
addSpawn(ICE_WALL, player.getX(), player.getY(), player.getZ() + 10, 0, false, 10000, false, world.getId());
|
||||
startQuestTimer("freezing_hurricane_cast", 1000, null, player);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "freezing_blizzard":
|
||||
{
|
||||
final Instance world = player.getInstanceWorld();
|
||||
if (!isInInstance(world))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
if (world.getStatus() < 4)
|
||||
{
|
||||
for (int i = 0; i < 10; i++)
|
||||
{
|
||||
addSpawn(ICE_WALL, player.getX() + getRandom(-800, 800), player.getY() + getRandom(-800, 800), player.getZ() + 10, 0, false, 10000, false, world.getId());
|
||||
}
|
||||
addSpawn(ICE_WALL, player.getX(), player.getY(), player.getZ() + 10, 0, false, 10000, false, world.getId());
|
||||
startQuestTimer("freezing_blizzard_cast", 1000, null, player);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "ice_hurricane_cast":
|
||||
{
|
||||
final Instance world = player.getInstanceWorld();
|
||||
if (!isInInstance(world))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
if (world.getStatus() == 1)
|
||||
{
|
||||
world.getAliveNpcs(ICE_WALL).forEach(wall ->
|
||||
{
|
||||
if (wall != null)
|
||||
{
|
||||
wall.doCast(ICE_HURRICANE.getSkill());
|
||||
|
||||
}
|
||||
});
|
||||
startQuestTimer("freya_rage", 12000, null, player);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "freezing_hurricane_cast":
|
||||
{
|
||||
final Instance world = player.getInstanceWorld();
|
||||
if (!isInInstance(world))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
if (world.getStatus() == 3)
|
||||
{
|
||||
world.getAliveNpcs(ICE_WALL).forEach(wall ->
|
||||
{
|
||||
if (wall != null)
|
||||
{
|
||||
wall.doCast(FREEZING_HURRICANE.getSkill());
|
||||
|
||||
}
|
||||
});
|
||||
startQuestTimer("freezing_hurricane", 20000, null, player);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "freezing_blizzard_cast":
|
||||
{
|
||||
final Instance world = player.getInstanceWorld();
|
||||
if (!isInInstance(world))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
if (world.getStatus() == 3)
|
||||
{
|
||||
world.getAliveNpcs(ICE_WALL).forEach(wall ->
|
||||
{
|
||||
if (wall != null)
|
||||
{
|
||||
wall.doCast(FREEZING_BLIZARD.getSkill());
|
||||
|
||||
}
|
||||
});
|
||||
startQuestTimer("freezing_blizzard", 30000, null, player);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "eternal_blizzard":
|
||||
{
|
||||
final Instance world = player.getInstanceWorld();
|
||||
if (!isInInstance(world))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
if ((world.getStatus() == 3) && (world.getAliveNpcCount(WINTER_CRYSTAL) > 0))
|
||||
{
|
||||
final Npc winterCrystal = world.getNpc(WINTER_CRYSTAL);
|
||||
winterCrystal.doCast(ETERNAL_BLIZZARD.getSkill());
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "final_freezing_burst":
|
||||
{
|
||||
final Instance world = player.getInstanceWorld();
|
||||
if (!isInInstance(world))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
if (world.getStatus() == 3)
|
||||
{
|
||||
showOnScreenMsg(world, NpcStringId.REST_IN_PEACE_FOREVER, ExShowScreenMessage.TOP_CENTER, 10000, true);
|
||||
final Npc freya = world.getNpc(FREYA_STAND);
|
||||
freya.doCast(FINAL_FREEZING.getSkill());
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "summon_winter_crystal":
|
||||
{
|
||||
final Instance world = player.getInstanceWorld();
|
||||
if (!isInInstance(world))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
if (world.getStatus() == 3)
|
||||
{
|
||||
world.spawnGroup("WINTER_CRYSTAL");
|
||||
startQuestTimer("eternal_blizzard", 1000, null, player);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "check_status":
|
||||
{
|
||||
final Instance world = player.getInstanceWorld();
|
||||
if (!isInInstance(world))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
switch (world.getStatus())
|
||||
{
|
||||
case 1:
|
||||
{
|
||||
final boolean freyaSpawned = world.getParameters().getBoolean("FREYA_SPAWNED", false);
|
||||
if (!freyaSpawned)
|
||||
{
|
||||
world.spawnGroup("FREYA_STAGE_1");
|
||||
showOnScreenMsg(world, NpcStringId.YOU_WILL_PAY_FOR_BREAKING_THE_SILENCE_OF_THE_CASTLE_HIDDEN_IN_THE_EVERLASTING_ICE, ExShowScreenMessage.TOP_CENTER, 10000, true);
|
||||
world.getParameters().set("FREYA_SPAWNED", true);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 2:
|
||||
{
|
||||
final boolean glakiasSpawned = world.getParameters().getBoolean("GLAKIAS_SPAWNED", false);
|
||||
if (!glakiasSpawned)
|
||||
{
|
||||
world.spawnGroup("GLAKIAS");
|
||||
world.spawnGroup("FREYA_STAGE_2");
|
||||
world.spawnGroup("KANNAS_KNIGHTS");
|
||||
showOnScreenMsg(world, NpcStringId.GLAKIAS_ALLEGIANCE_TO_ICE_QUEEN_WILL_INCREASE_IN_5_MINUTES, ExShowScreenMessage.TOP_CENTER, 10000, true);
|
||||
startQuestTimer("frosty_command", 300000, null, player);
|
||||
world.getParameters().set("GLAKIAS_SPAWNED", true);
|
||||
world.getParameters().set("FREYA_SPAWNED", false);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 3:
|
||||
{
|
||||
|
||||
final boolean freyaSpawned = world.getParameters().getBoolean("FREYA_SPAWNED", false);
|
||||
if (!freyaSpawned)
|
||||
{
|
||||
world.spawnGroup("FREYA_STAGE_3");
|
||||
world.getParameters().set("FREYA_SPAWNED", true);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
return super.onAdvEvent(event, npc, player);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onAttack(Npc npc, Player attacker, int damage, boolean isSummon, Skill skill)
|
||||
{
|
||||
final Instance world = npc.getInstanceWorld();
|
||||
if (isInInstance(world))
|
||||
{
|
||||
switch (npc.getId())
|
||||
{
|
||||
case FREYA_THRONE:
|
||||
{
|
||||
final Creature mostHated = ((Attackable) npc).getMostHated();
|
||||
final boolean freya90 = world.getParameters().getBoolean("FREYA_90", false);
|
||||
final boolean freya80 = world.getParameters().getBoolean("FREYA_80", false);
|
||||
if ((npc.getCurrentHp() <= (npc.getMaxHp() * 0.9)) && !freya90)
|
||||
{
|
||||
showOnScreenMsg(world, NpcStringId.FEEL_THE_POWER_OF_MY_RAGE, ExShowScreenMessage.TOP_CENTER, 10000, true);
|
||||
startQuestTimer("freya_rage", 100, null, attacker);
|
||||
world.getParameters().set("FREYA_90", true);
|
||||
}
|
||||
else if ((npc.getCurrentHp() <= (npc.getMaxHp() * 0.8)) && !freya80)
|
||||
{
|
||||
startQuestTimer("movie_freya_waiting", 100, null, attacker);
|
||||
world.getParameters().set("FREYA_80", true);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (getRandom(100) < 40)
|
||||
{
|
||||
if (SkillCaster.checkUseConditions(npc, ICE_BOLT.getSkill()))
|
||||
{
|
||||
npc.setTarget(mostHated);
|
||||
npc.doCast(ICE_BOLT.getSkill());
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (SkillCaster.checkUseConditions(npc, ICE_STORM.getSkill()))
|
||||
{
|
||||
npc.doCast(ICE_STORM.getSkill());
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case GLAKIAS:
|
||||
{
|
||||
final Creature mostHated = ((Attackable) npc).getMostHated();
|
||||
final boolean glakias50 = world.getParameters().getBoolean("GLAKIAS_50", false);
|
||||
final boolean glakias5 = world.getParameters().getBoolean("GLAKIAS_5", false);
|
||||
if ((npc.getCurrentHp() <= (npc.getMaxHp() * 0.5)) && !glakias50)
|
||||
{
|
||||
startQuestTimer("glakias_rage", 100, null, attacker);
|
||||
world.getParameters().set("GLAKIAS_50", true);
|
||||
}
|
||||
else if ((npc.getCurrentHp() <= (npc.getMaxHp() * 0.05)) && !glakias5)
|
||||
{
|
||||
startQuestTimer("movie_last_freya", 100, null, attacker);
|
||||
world.getParameters().set("GLAKIAS_5", true);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (getRandom(100) < 20)
|
||||
{
|
||||
if (SkillCaster.checkUseConditions(npc, FREEZING_STRIKE.getSkill()))
|
||||
{
|
||||
npc.setTarget(mostHated);
|
||||
npc.doCast(FREEZING_STRIKE.getSkill());
|
||||
}
|
||||
}
|
||||
else if ((getRandom(100) < 40) && (getRandom(100) > 20))
|
||||
{
|
||||
if (SkillCaster.checkUseConditions(npc, FREEZING_SMASH.getSkill()))
|
||||
{
|
||||
npc.doCast(FREEZING_SMASH.getSkill());
|
||||
}
|
||||
}
|
||||
else if ((getRandom(100) < 60) && (getRandom(100) > 40))
|
||||
{
|
||||
if (SkillCaster.checkUseConditions(npc, FREEZING_WAVE.getSkill()))
|
||||
{
|
||||
npc.doCast(FREEZING_WAVE.getSkill());
|
||||
}
|
||||
}
|
||||
else if ((getRandom(100) < 80) && (getRandom(100) > 60))
|
||||
{
|
||||
if (SkillCaster.checkUseConditions(npc, FREEZING_CHAIN.getSkill()))
|
||||
{
|
||||
npc.setTarget(mostHated);
|
||||
npc.doCast(FREEZING_CHAIN.getSkill());
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (SkillCaster.checkUseConditions(npc, FREEZING_MASS_CHAIN.getSkill()))
|
||||
{
|
||||
npc.setTarget(mostHated);
|
||||
npc.doCast(FREEZING_MASS_CHAIN.getSkill());
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case FREYA_STAND:
|
||||
{
|
||||
final Creature mostHated = ((Attackable) npc).getMostHated();
|
||||
final boolean freya70 = world.getParameters().getBoolean("FREYA_70", false);
|
||||
final boolean freya50 = world.getParameters().getBoolean("FREYA_50", false);
|
||||
final boolean freya5 = world.getParameters().getBoolean("FREYA_5", false);
|
||||
if ((npc.getCurrentHp() <= (npc.getMaxHp() * 0.9)) && !freya70)
|
||||
{
|
||||
startQuestTimer("freezing_hurricane", 1000, null, attacker);
|
||||
startQuestTimer("freezing_blizzard", 5000, null, attacker);
|
||||
world.getParameters().set("FREYA_70", true);
|
||||
}
|
||||
else if ((npc.getCurrentHp() <= (npc.getMaxHp() * 0.5)) && !freya50)
|
||||
{
|
||||
startQuestTimer("summon_winter_crystal", 100, null, attacker);
|
||||
showOnScreenMsg(world, NpcStringId.ICE_QUEEN_S_POWER_WILL_PUT_YOU_THROUGH_THE_UNBEARABLE_SUFFERING, ExShowScreenMessage.TOP_CENTER, 10000, true);
|
||||
world.getParameters().set("FREYA_50", true);
|
||||
}
|
||||
else if ((npc.getCurrentHp() <= (npc.getMaxHp() * 0.05)) && !freya5)
|
||||
{
|
||||
startQuestTimer("summon_winter_crystal", 100, null, attacker);
|
||||
showOnScreenMsg(world, NpcStringId.ENOUGH_FACE_YOU_DEATH_ICE_QUEEN_IS_HER_NAME, ExShowScreenMessage.TOP_CENTER, 10000, true);
|
||||
world.getParameters().set("FREYA_5", true);
|
||||
}
|
||||
else if (npc.getCurrentHp() <= (npc.getMaxHp() * 0.01))
|
||||
{
|
||||
startQuestTimer("final_freezing_burst", 100, null, attacker);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (getRandom(100) < 33)
|
||||
{
|
||||
if (SkillCaster.checkUseConditions(npc, FREEZING_BOLT.getSkill()))
|
||||
{
|
||||
npc.setTarget(mostHated);
|
||||
npc.doCast(FREEZING_BOLT.getSkill());
|
||||
}
|
||||
}
|
||||
else if ((getRandom(100) < 66) && (getRandom(100) > 33))
|
||||
{
|
||||
if (SkillCaster.checkUseConditions(npc, FREEZING_STORM.getSkill()))
|
||||
{
|
||||
npc.doCast(FREEZING_STORM.getSkill());
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (SkillCaster.checkUseConditions(npc, FREEZING_QUEEN_WAVE.getSkill()))
|
||||
{
|
||||
npc.doCast(FREEZING_QUEEN_WAVE.getSkill());
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return super.onAttack(npc, attacker, damage, isSummon, skill);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onSpellFinished(Npc npc, Player player, Skill skill)
|
||||
{
|
||||
final Instance world = npc.getInstanceWorld();
|
||||
if (world != null)
|
||||
{
|
||||
switch (npc.getId())
|
||||
{
|
||||
case HUGE_ICICLE:
|
||||
{
|
||||
if ((skill.getId() == ICE_BOLTS.getSkillId()) && (world.getStatus() == 2))
|
||||
{
|
||||
npc.setDisplayEffect(3);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case WINTER_CRYSTAL:
|
||||
{
|
||||
if ((skill.getId() == ETERNAL_BLIZZARD.getSkillId()) && (world.getStatus() == 3))
|
||||
{
|
||||
npc.setDisplayEffect(3);
|
||||
world.getNpc(WINTER_CRYSTAL).doDie(npc);
|
||||
world.getNpc(FREYA_STAND).setCurrentHp(world.getNpc(FREYA_STAND).getMaxHp() * 0.70);
|
||||
for (Player member : world.getPlayers())
|
||||
{
|
||||
member.doDie(member);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case FREYA_STAND:
|
||||
{
|
||||
if ((skill.getId() == FINAL_FREEZING.getSkillId()) && (world.getStatus() == 3))
|
||||
{
|
||||
world.getNpc(FREYA_STAND).setCurrentHp(world.getNpc(FREYA_STAND).getMaxHp() * 0.20);
|
||||
npc.doCast(FINAL_FREEZING_DISPLAY.getSkill());
|
||||
for (Player member : world.getPlayers())
|
||||
{
|
||||
member.doDie(member);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return super.onSpellFinished(npc, player, skill);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onKill(Npc npc, Player killer, boolean isSummon)
|
||||
{
|
||||
final Instance world = npc.getInstanceWorld();
|
||||
if (isInInstance(world))
|
||||
{
|
||||
if (npc.getId() == FREYA_STAND)
|
||||
{
|
||||
world.setStatus(4);
|
||||
if (world.getAliveNpcCount(WINTER_CRYSTAL) > 0)
|
||||
{
|
||||
world.getNpc(WINTER_CRYSTAL).deleteMe();
|
||||
}
|
||||
|
||||
startQuestTimer("movie_ending", 100, null, killer);
|
||||
|
||||
for (Player member : world.getPlayers())
|
||||
{
|
||||
if ((member.getParty() != null) || (member.isGM()))
|
||||
{
|
||||
giveItems(member, JEWELRY_BOX);
|
||||
}
|
||||
}
|
||||
|
||||
for (Player member : world.getPlayers())
|
||||
{
|
||||
if ((member.getParty() != null) || (member.isGM()))
|
||||
{
|
||||
switch (getRandom(7))
|
||||
{
|
||||
case 0:
|
||||
{
|
||||
break;
|
||||
}
|
||||
case 1:
|
||||
{
|
||||
giveItems(member, WARM_ENERGY);
|
||||
break;
|
||||
}
|
||||
case 2:
|
||||
{
|
||||
giveItems(member, COOL_ENERGY);
|
||||
break;
|
||||
}
|
||||
case 3:
|
||||
{
|
||||
giveItems(member, FREYAS_CLOAK);
|
||||
break;
|
||||
}
|
||||
case 4:
|
||||
{
|
||||
giveItems(member, FREYAS_NECKLACE);
|
||||
break;
|
||||
}
|
||||
case 5:
|
||||
{
|
||||
giveItems(member, FREYAS_STAFF);
|
||||
break;
|
||||
}
|
||||
case 6:
|
||||
{
|
||||
giveItems(member, FREYAS_CROWN);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
world.finishInstance(2);
|
||||
}
|
||||
}
|
||||
return super.onKill(npc, killer, isSummon);
|
||||
}
|
||||
|
||||
public static void main(String[] args)
|
||||
{
|
||||
new Freya();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
<html><body>Benusta:<br>
|
||||
The instance zone is inaccessible at the time.<br>
|
||||
Only your party leader can ask me for the first-time visit to the instance zone. There is no other way to enter.<br>
|
||||
Keep in mind that the party cannot move to an instance zone if there is a character in the party, which does not meet level requirements. Also teleportation will be impossible if any of the party members stand too far from me.<br>
|
||||
Also you cannot enter an instance zone if other party is already in. Please, check the requirements once more.
|
||||
</body></html>
|
||||
@@ -487,7 +487,7 @@ public class KrofinNest extends AbstractInstance
|
||||
}
|
||||
|
||||
final Npc dummy = world.getNpc(DUMMY);
|
||||
if (!isInInstance(world))
|
||||
if ((dummy == null) || !isInInstance(world))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -1,14 +0,0 @@
|
||||
<html><body>Teleporter Scout:<br>
|
||||
Zones from 1st to 3rd floors <font color="LEVEL">no PvP</font>.<br>
|
||||
But be so careful, if you will be leave <font color="LEVEL">Peace Zone</font>, creates by my mates on 4th floor, you will enter the <font color="LEVEL">battlefield</font>.<br>
|
||||
Which floor would you like to go to?<br>
|
||||
<Button ALIGN=LEFT ICON="TELEPORT" action="bypass -h npc_%objectId%_teleport OTHER 0">Tower of Insolence (1st Floor) </Button>
|
||||
<Button ALIGN=LEFT ICON="TELEPORT" action="bypass -h npc_%objectId%_teleport OTHER 1">Tower of Insolence (2nd Floor)</Button>
|
||||
<Button ALIGN=LEFT ICON="TELEPORT" action="bypass -h npc_%objectId%_teleport OTHER 2">Tower of Insolence (3rd Floor)</Button>
|
||||
<Button ALIGN=LEFT ICON="TELEPORT" action="bypass -h npc_%objectId%_teleport OTHER 3">Tower of Insolence (4th Floor)</Button>
|
||||
<Button ALIGN=LEFT ICON="TELEPORT" action="bypass -h npc_%objectId%_teleport OTHER 4">Tower of Insolence (5th Floor)</Button>
|
||||
<Button ALIGN=LEFT ICON="TELEPORT" action="bypass -h npc_%objectId%_teleport OTHER 5">Tower of Insolence (6th Floor)</Button>
|
||||
<Button ALIGN=LEFT ICON="TELEPORT" action="bypass -h npc_%objectId%_teleport OTHER 6">Tower of Insolence (7th Floor)</Button>
|
||||
<Button ALIGN=LEFT ICON="TELEPORT" action="bypass -h npc_%objectId%_teleport OTHER 7">Tower of Insolence (8th Floor)</Button>
|
||||
<Button ALIGN=LEFT ICON="TELEPORT" action="bypass -h npc_%objectId%_teleport OTHER 8">Tower of Insolence (9th Floor)</Button>
|
||||
</body></html>
|
||||
@@ -1,12 +0,0 @@
|
||||
<html><body>Patrol Teleporter:<br>
|
||||
The sudden attack of the Fafurion army has had my head spinning. The first group can be found in the Field of Silence to the noth trying to subjugate
|
||||
the Krofin. The second one, composed of elite warriors, is setting up camp in the Field of Whispers to the south.<br>
|
||||
Our scouts think that the soldiers in the Fields of Whispers are more dangerous, so be extra careful.<br>
|
||||
Where would you like to teleport?<br>
|
||||
<Button ALIGN=LEFT ICON="TELEPORT" action="bypass -h npc_%objectId%_teleport OTHER 0">Eastern Border</Button>
|
||||
<Button ALIGN=LEFT ICON="TELEPORT" action="bypass -h npc_%objectId%_teleport OTHER 1">Western Border</Button>
|
||||
<Button ALIGN=LEFT ICON="TELEPORT" action="bypass -h npc_%objectId%_teleport OTHER 2">East of the Field of Silence (Lv.108)</Button>
|
||||
<Button ALIGN=LEFT ICON="TELEPORT" action="bypass -h npc_%objectId%_teleport OTHER 3">Western part of the Field of Silence (Lv.108)</Button>
|
||||
<Button ALIGN=LEFT ICON="TELEPORT" action="bypass -h npc_%objectId%_teleport OTHER 4">Eastern part of the Field of Whispers (Lv.114)</Button>
|
||||
<Button ALIGN=LEFT ICON="TELEPORT" action="bypass -h npc_%objectId%_teleport OTHER 5">Western part of the Field of Whispers (Lv.114)</Button>
|
||||
</body></html>
|
||||
@@ -1,4 +0,0 @@
|
||||
<html><body>Patrol Guard:<br>
|
||||
Fafurion's Soldiers have occupied the fields. We found out rhat they have divided into two units.<br>
|
||||
The soldiers to the north in the Field of Silence are there to capture Krofins, and the elite soldiers are to the south in the Field of Whispers.
|
||||
</body></html>
|
||||
@@ -30,10 +30,7 @@ import instances.AbstractInstance;
|
||||
*/
|
||||
public class TimedHunting extends AbstractInstance
|
||||
{
|
||||
// NPCs
|
||||
private static final int PATROL_TELEPORTER = 34568;
|
||||
private static final int PATROL_GUARD = 34569;
|
||||
private static final int TELEPORT_SCOUT = 34549;
|
||||
|
||||
// Misc
|
||||
private static final int[] TEMPLATE_IDS =
|
||||
{
|
||||
@@ -47,9 +44,6 @@ public class TimedHunting extends AbstractInstance
|
||||
public TimedHunting()
|
||||
{
|
||||
super(TEMPLATE_IDS);
|
||||
addStartNpc(PATROL_TELEPORTER, PATROL_GUARD, TELEPORT_SCOUT);
|
||||
addTalkId(PATROL_TELEPORTER, PATROL_GUARD, TELEPORT_SCOUT);
|
||||
addFirstTalkId(PATROL_TELEPORTER, PATROL_GUARD, TELEPORT_SCOUT);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -50,10 +50,6 @@
|
||||
1901 Storm Isle - Furtive Deal
|
||||
10595 The Dimensional Warp, Part 8
|
||||
10596 The Dimensional Warp, Part 9
|
||||
10904 Journey to the Conquest World
|
||||
10905 Hunting Time
|
||||
10906 Chasing the Light
|
||||
10907 Where Flowers Blossom
|
||||
11028 Wind of Destiny - Encounter
|
||||
11029 Wind of Destiny - Promise
|
||||
11030 Wind of Destiny - Choice
|
||||
@@ -51,7 +51,7 @@ public class Q00933_TombRaiders extends Quest
|
||||
private static final int TOMB_SOULTAKER = 24583;
|
||||
private static final int TOMB_PATROL = 24582;
|
||||
// Item
|
||||
private static final int BENUSTA_REWARD_BOX = 81151;
|
||||
private static final int BENUSTA_REWARD_BOX = 82453;
|
||||
// Misc
|
||||
private static final String KILL_COUNT_VAR = "KillCount";
|
||||
// Zone
|
||||
@@ -177,7 +177,14 @@ public class Q00933_TombRaiders extends Quest
|
||||
final Party party = killer.getParty();
|
||||
if (party != null)
|
||||
{
|
||||
party.getMembers().forEach(p -> processKill(npc, p));
|
||||
for (Player member : party.getMembers())
|
||||
{
|
||||
final QuestState qs = getQuestState(member, false);
|
||||
if (qs != null)
|
||||
{
|
||||
processKill(npc, member);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -167,12 +167,6 @@ public class Q10507_ObtainingNewPower extends Quest
|
||||
24633, // Ketra Orc Warrior
|
||||
24634, // Ketra Orc Lieutenant
|
||||
24635, // Ketra Orc Battalion Commander
|
||||
// Varka Silenos Barracks
|
||||
24636, // Varka Silenos Magus
|
||||
24637, // Varka Silenos Shaman
|
||||
24638, // Varka Silenos Footman
|
||||
24639, // Varka Silenos Sergeant
|
||||
24640, // Varka Silenos Officer
|
||||
// Breka's Stronghold
|
||||
24420, // Breka Orc Prefect
|
||||
24416, // Breka Orc Scout Captain
|
||||
@@ -180,16 +174,22 @@ public class Q10507_ObtainingNewPower extends Quest
|
||||
24415, // Breka Orc Scout
|
||||
24417, // Breka Orc Archer
|
||||
24418, // Breka Orc Shaman
|
||||
// Sel Mahum Training Grounds
|
||||
24492, // Sel Mahum Soldier
|
||||
24494, // Sel Mahum Warrior
|
||||
24493, // Sel Mahum Squad Leader
|
||||
24495, // Keltron
|
||||
// Plains of the Lizardmen
|
||||
24496, // Tanta Lizardman Warrior
|
||||
24498, // Tanta Lizardman Wizard
|
||||
24499, // Priest Ugoros
|
||||
24497, // Tanta Lizardman Archer
|
||||
// Varka Silenos Barracks
|
||||
24636, // Varka Silenos Magus
|
||||
24637, // Varka Silenos Shaman
|
||||
24638, // Varka Silenos Footman
|
||||
24639, // Varka Silenos Sergeant
|
||||
24640, // Varka Silenos Officer
|
||||
// Sel Mahum Training Grounds
|
||||
24492, // Sel Mahum Soldier
|
||||
24494, // Sel Mahum Warrior
|
||||
24493, // Sel Mahum Squad Leader
|
||||
24495, // Keltron
|
||||
// Fields of Massacre
|
||||
24486, // Dismal Pole
|
||||
24487, // Graveyard Predator
|
||||
@@ -197,13 +197,6 @@ public class Q10507_ObtainingNewPower extends Quest
|
||||
24491, // Doom Knight
|
||||
24490, // Doom Soldier
|
||||
24488, // Doom Archer
|
||||
// Wall of Argos
|
||||
24606, // Captive Antelope
|
||||
24607, // Captive Bandersnatch
|
||||
24608, // Captive Buffalo
|
||||
24609, // Captive Grendel
|
||||
24610, // Eye of Watchman
|
||||
24611, // Elder Homunculus
|
||||
// Sea Of Spores
|
||||
24226, // Aranea
|
||||
24227, // Keros
|
||||
@@ -216,6 +209,13 @@ public class Q10507_ObtainingNewPower extends Quest
|
||||
24236, // Tergus
|
||||
24237, // Skeletus
|
||||
24238, // Atrofine
|
||||
// Wall of Argos
|
||||
24606, // Captive Antelope
|
||||
24607, // Captive Bandersnatch
|
||||
24608, // Captive Buffalo
|
||||
24609, // Captive Grendel
|
||||
24610, // Eye of Watchman
|
||||
24611, // Elder Homunculus
|
||||
// Wasteland
|
||||
24501, // Centaur Fighter
|
||||
24504, // Centaur Warlord
|
||||
@@ -223,6 +223,15 @@ public class Q10507_ObtainingNewPower extends Quest
|
||||
24503, // Centaur Wizard
|
||||
24500, // Sand Golem
|
||||
24502, // Centaur Marksman
|
||||
// Beast Farm
|
||||
24651, // Red Kookaburra
|
||||
24652, // Blue Kookaburra
|
||||
24653, // White Cougar
|
||||
24654, // Cougar
|
||||
24655, // Black Buffalo
|
||||
24656, // White Buffalo
|
||||
24657, // Grandel
|
||||
24658, // Black Grandel
|
||||
// Cemetery
|
||||
19455, // Aden Raider
|
||||
19456, // Te Ochdumann
|
||||
@@ -239,22 +248,6 @@ public class Q10507_ObtainingNewPower extends Quest
|
||||
23298, // Royal Quartermaster
|
||||
23299, // Operations Chief of the 7th Division
|
||||
23300, // Commander of Operations
|
||||
// Fafurion Temple
|
||||
24329, // Starving Water Dragon
|
||||
24318, // Temple Guard Captain
|
||||
24325, // Temple Wizard
|
||||
24324, // Temple Guardian Warrior
|
||||
24326, // Temple Guardian Wizard
|
||||
24323, // Temple Guard
|
||||
24321, // Temple Patrol Guard
|
||||
24322, // Temple Knight Recruit
|
||||
// Dragon Valley
|
||||
24480, // Dragon Legionnaire
|
||||
24482, // Dragon Officer
|
||||
24481, // Dragon Peltast
|
||||
24483, // Dragon Centurion
|
||||
24484, // Dragon Elite Guard
|
||||
24485, // Behemoth Dragon
|
||||
// Valley of Saints
|
||||
24876, // Guide of Splendor
|
||||
24877, // Herald of Splendor
|
||||
@@ -268,15 +261,55 @@ public class Q10507_ObtainingNewPower extends Quest
|
||||
24884, // Springs Dwarf Berserker
|
||||
24885, // Springs Dwarf Priest
|
||||
24886, // Springs Yeti
|
||||
// Beast Farm
|
||||
24651, // Red Kookaburra
|
||||
24652, // Blue Kookaburra
|
||||
24653, // White Cougar
|
||||
24654, // Cougar
|
||||
24655, // Black Buffalo
|
||||
24656, // White Buffalo
|
||||
24657, // Grandel
|
||||
24658, // Black Grandel
|
||||
// Cruma Marshlands
|
||||
24930, // Black Demon Knight
|
||||
24931, // Black Demon Warrior
|
||||
24932, // Black Demon Scout
|
||||
24933, // Black Demon Wizard
|
||||
// Frozen Labyrinth
|
||||
24934, // Frozen Soldier
|
||||
24935, // Frozen Defender
|
||||
24936, // Ice Knight
|
||||
24937, // Glacier Golem
|
||||
24938, // Ice Fairy
|
||||
// Sel Mahum Base
|
||||
24961, // Sel Mahum Footman
|
||||
24962, // Sel Mahum Elite Soldier
|
||||
24963, // Sel Mahum Shaman
|
||||
24964, // Sel Mahum Wizard
|
||||
// Fafurion Temple
|
||||
24329, // Starving Water Dragon
|
||||
24318, // Temple Guard Captain
|
||||
24325, // Temple Wizard
|
||||
24324, // Temple Guardian Warrior
|
||||
24326, // Temple Guardian Wizard
|
||||
24323, // Temple Guard
|
||||
24321, // Temple Patrol Guard
|
||||
24322, // Temple Knight Recruit
|
||||
// Dragon Valley West
|
||||
24664, // Graveyard Death Lich
|
||||
24665, // Graveyard Death Berserker
|
||||
24666, // Graveyard Death Soldier
|
||||
24667, // Graveyard Death Knight
|
||||
// Dragon Valley East
|
||||
24669, // Dragon Officer
|
||||
24670, // Dragon Beast
|
||||
24671, // Dragon Centurion
|
||||
24672, // Elite Dragon Guard
|
||||
// Shadow Of The Mother Tree
|
||||
24965, // Creeper Rampike
|
||||
24966, // Fila Aprias
|
||||
24967, // Flush Teasle
|
||||
24968, // Treant Blossom
|
||||
24969, // Arsos Butterfly
|
||||
// Execution Grounds
|
||||
24673, // Zombie Orc
|
||||
24674, // Zombie Dark Elf
|
||||
24675, // Zombie Dwarf
|
||||
24676, // Schnabel Stalker
|
||||
24677, // Henker Hacker
|
||||
24678, // Schnabel Doctor
|
||||
24679, // Henker Anatomist
|
||||
};
|
||||
|
||||
public Q10507_ObtainingNewPower()
|
||||
|
||||
@@ -170,12 +170,6 @@ public class Q10510_PowerHarmony extends Quest
|
||||
24633, // Ketra Orc Warrior
|
||||
24634, // Ketra Orc Lieutenant
|
||||
24635, // Ketra Orc Battalion Commander
|
||||
// Varka Silenos Barracks
|
||||
24636, // Varka Silenos Magus
|
||||
24637, // Varka Silenos Shaman
|
||||
24638, // Varka Silenos Footman
|
||||
24639, // Varka Silenos Sergeant
|
||||
24640, // Varka Silenos Officer
|
||||
// Breka's Stronghold
|
||||
24420, // Breka Orc Prefect
|
||||
24416, // Breka Orc Scout Captain
|
||||
@@ -183,16 +177,22 @@ public class Q10510_PowerHarmony extends Quest
|
||||
24415, // Breka Orc Scout
|
||||
24417, // Breka Orc Archer
|
||||
24418, // Breka Orc Shaman
|
||||
// Sel Mahum Training Grounds
|
||||
24492, // Sel Mahum Soldier
|
||||
24494, // Sel Mahum Warrior
|
||||
24493, // Sel Mahum Squad Leader
|
||||
24495, // Keltron
|
||||
// Plains of the Lizardmen
|
||||
24496, // Tanta Lizardman Warrior
|
||||
24498, // Tanta Lizardman Wizard
|
||||
24499, // Priest Ugoros
|
||||
24497, // Tanta Lizardman Archer
|
||||
// Varka Silenos Barracks
|
||||
24636, // Varka Silenos Magus
|
||||
24637, // Varka Silenos Shaman
|
||||
24638, // Varka Silenos Footman
|
||||
24639, // Varka Silenos Sergeant
|
||||
24640, // Varka Silenos Officer
|
||||
// Sel Mahum Training Grounds
|
||||
24492, // Sel Mahum Soldier
|
||||
24494, // Sel Mahum Warrior
|
||||
24493, // Sel Mahum Squad Leader
|
||||
24495, // Keltron
|
||||
// Fields of Massacre
|
||||
24486, // Dismal Pole
|
||||
24487, // Graveyard Predator
|
||||
@@ -200,13 +200,6 @@ public class Q10510_PowerHarmony extends Quest
|
||||
24491, // Doom Knight
|
||||
24490, // Doom Soldier
|
||||
24488, // Doom Archer
|
||||
// Wall of Argos
|
||||
24606, // Captive Antelope
|
||||
24607, // Captive Bandersnatch
|
||||
24608, // Captive Buffalo
|
||||
24609, // Captive Grendel
|
||||
24610, // Eye of Watchman
|
||||
24611, // Elder Homunculus
|
||||
// Sea Of Spores
|
||||
24226, // Aranea
|
||||
24227, // Keros
|
||||
@@ -219,6 +212,13 @@ public class Q10510_PowerHarmony extends Quest
|
||||
24236, // Tergus
|
||||
24237, // Skeletus
|
||||
24238, // Atrofine
|
||||
// Wall of Argos
|
||||
24606, // Captive Antelope
|
||||
24607, // Captive Bandersnatch
|
||||
24608, // Captive Buffalo
|
||||
24609, // Captive Grendel
|
||||
24610, // Eye of Watchman
|
||||
24611, // Elder Homunculus
|
||||
// Wasteland
|
||||
24501, // Centaur Fighter
|
||||
24504, // Centaur Warlord
|
||||
@@ -226,6 +226,15 @@ public class Q10510_PowerHarmony extends Quest
|
||||
24503, // Centaur Wizard
|
||||
24500, // Sand Golem
|
||||
24502, // Centaur Marksman
|
||||
// Beast Farm
|
||||
24651, // Red Kookaburra
|
||||
24652, // Blue Kookaburra
|
||||
24653, // White Cougar
|
||||
24654, // Cougar
|
||||
24655, // Black Buffalo
|
||||
24656, // White Buffalo
|
||||
24657, // Grandel
|
||||
24658, // Black Grandel
|
||||
// Cemetery
|
||||
19455, // Aden Raider
|
||||
19456, // Te Ochdumann
|
||||
@@ -242,22 +251,6 @@ public class Q10510_PowerHarmony extends Quest
|
||||
23298, // Royal Quartermaster
|
||||
23299, // Operations Chief of the 7th Division
|
||||
23300, // Commander of Operations
|
||||
// Fafurion Temple
|
||||
24329, // Starving Water Dragon
|
||||
24318, // Temple Guard Captain
|
||||
24325, // Temple Wizard
|
||||
24324, // Temple Guardian Warrior
|
||||
24326, // Temple Guardian Wizard
|
||||
24323, // Temple Guard
|
||||
24321, // Temple Patrol Guard
|
||||
24322, // Temple Knight Recruit
|
||||
// Dragon Valley
|
||||
24480, // Dragon Legionnaire
|
||||
24482, // Dragon Officer
|
||||
24481, // Dragon Peltast
|
||||
24483, // Dragon Centurion
|
||||
24484, // Dragon Elite Guard
|
||||
24485, // Behemoth Dragon
|
||||
// Valley of Saints
|
||||
24876, // Guide of Splendor
|
||||
24877, // Herald of Splendor
|
||||
@@ -271,15 +264,55 @@ public class Q10510_PowerHarmony extends Quest
|
||||
24884, // Springs Dwarf Berserker
|
||||
24885, // Springs Dwarf Priest
|
||||
24886, // Springs Yeti
|
||||
// Beast Farm
|
||||
24651, // Red Kookaburra
|
||||
24652, // Blue Kookaburra
|
||||
24653, // White Cougar
|
||||
24654, // Cougar
|
||||
24655, // Black Buffalo
|
||||
24656, // White Buffalo
|
||||
24657, // Grandel
|
||||
24658, // Black Grandel
|
||||
// Cruma Marshlands
|
||||
24930, // Black Demon Knight
|
||||
24931, // Black Demon Warrior
|
||||
24932, // Black Demon Scout
|
||||
24933, // Black Demon Wizard
|
||||
// Frozen Labyrinth
|
||||
24934, // Frozen Soldier
|
||||
24935, // Frozen Defender
|
||||
24936, // Ice Knight
|
||||
24937, // Glacier Golem
|
||||
24938, // Ice Fairy
|
||||
// Sel Mahum Base
|
||||
24961, // Sel Mahum Footman
|
||||
24962, // Sel Mahum Elite Soldier
|
||||
24963, // Sel Mahum Shaman
|
||||
24964, // Sel Mahum Wizard
|
||||
// Fafurion Temple
|
||||
24329, // Starving Water Dragon
|
||||
24318, // Temple Guard Captain
|
||||
24325, // Temple Wizard
|
||||
24324, // Temple Guardian Warrior
|
||||
24326, // Temple Guardian Wizard
|
||||
24323, // Temple Guard
|
||||
24321, // Temple Patrol Guard
|
||||
24322, // Temple Knight Recruit
|
||||
// Dragon Valley West
|
||||
24664, // Graveyard Death Lich
|
||||
24665, // Graveyard Death Berserker
|
||||
24666, // Graveyard Death Soldier
|
||||
24667, // Graveyard Death Knight
|
||||
// Dragon Valley East
|
||||
24669, // Dragon Officer
|
||||
24670, // Dragon Beast
|
||||
24671, // Dragon Centurion
|
||||
24672, // Elite Dragon Guard
|
||||
// Shadow Of The Mother Tree
|
||||
24965, // Creeper Rampike
|
||||
24966, // Fila Aprias
|
||||
24967, // Flush Teasle
|
||||
24968, // Treant Blossom
|
||||
24969, // Arsos Butterfly
|
||||
// Execution Grounds
|
||||
24673, // Zombie Orc
|
||||
24674, // Zombie Dark Elf
|
||||
24675, // Zombie Dwarf
|
||||
24676, // Schnabel Stalker
|
||||
24677, // Henker Hacker
|
||||
24678, // Schnabel Doctor
|
||||
24679, // Henker Anatomist
|
||||
};
|
||||
|
||||
public Q10510_PowerHarmony()
|
||||
|
||||
@@ -25,6 +25,9 @@ import org.l2jmobius.gameserver.enums.Race;
|
||||
import org.l2jmobius.gameserver.model.Location;
|
||||
import org.l2jmobius.gameserver.model.actor.Npc;
|
||||
import org.l2jmobius.gameserver.model.actor.Player;
|
||||
import org.l2jmobius.gameserver.model.events.EventDispatcher;
|
||||
import org.l2jmobius.gameserver.model.events.EventType;
|
||||
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerBecomeNoblesse;
|
||||
import org.l2jmobius.gameserver.model.holders.ItemHolder;
|
||||
import org.l2jmobius.gameserver.model.holders.SkillHolder;
|
||||
import org.l2jmobius.gameserver.model.quest.Quest;
|
||||
@@ -209,6 +212,7 @@ public class Q10591_NobleMaterial extends Quest
|
||||
giveItems(player, WARRIOR_CICLET_BOX_LV5, 1);
|
||||
basicRewards(player);
|
||||
player.setNobleLevel(1);
|
||||
checkNobleListener(player);
|
||||
player.broadcastInfo();
|
||||
showOnScreenMsg(player, NpcStringId.CONGRATULATIONS_S1_YOU_ARE_NOW_A_NOBLESSE, ExShowScreenMessage.TOP_CENTER, 10000, player.getName());
|
||||
player.doCast(NOBLESSE_PRESENTATION.getSkill());
|
||||
@@ -225,6 +229,7 @@ public class Q10591_NobleMaterial extends Quest
|
||||
giveItems(player, WIZARD_CICLET_BOX_LV5, 1);
|
||||
basicRewards(player);
|
||||
player.setNobleLevel(1);
|
||||
checkNobleListener(player);
|
||||
player.broadcastInfo();
|
||||
showOnScreenMsg(player, NpcStringId.CONGRATULATIONS_S1_YOU_ARE_NOW_A_NOBLESSE, ExShowScreenMessage.TOP_CENTER, 10000, player.getName());
|
||||
player.doCast(NOBLESSE_PRESENTATION.getSkill());
|
||||
@@ -241,6 +246,7 @@ public class Q10591_NobleMaterial extends Quest
|
||||
giveItems(player, KNIGHT_CICLET_BOX_LV5, 1);
|
||||
basicRewards(player);
|
||||
player.setNobleLevel(1);
|
||||
checkNobleListener(player);
|
||||
player.broadcastInfo();
|
||||
showOnScreenMsg(player, NpcStringId.CONGRATULATIONS_S1_YOU_ARE_NOW_A_NOBLESSE, ExShowScreenMessage.TOP_CENTER, 10000, player.getName());
|
||||
player.doCast(NOBLESSE_PRESENTATION.getSkill());
|
||||
@@ -573,4 +579,13 @@ public class Q10591_NobleMaterial extends Quest
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void checkNobleListener(Player player)
|
||||
{
|
||||
// Notify to scripts.
|
||||
if (EventDispatcher.getInstance().hasListener(EventType.ON_PLAYER_BECOME_NOBLESSE))
|
||||
{
|
||||
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerBecomeNoblesse(player));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -163,12 +163,6 @@ public class Q10811_ExaltedOneWhoFacesTheLimit extends Quest
|
||||
24633, // Ketra Orc Warrior
|
||||
24634, // Ketra Orc Lieutenant
|
||||
24635, // Ketra Orc Battalion Commander
|
||||
// Varka Silenos Barracks
|
||||
24636, // Varka Silenos Magus
|
||||
24637, // Varka Silenos Shaman
|
||||
24638, // Varka Silenos Footman
|
||||
24639, // Varka Silenos Sergeant
|
||||
24640, // Varka Silenos Officer
|
||||
// Breka's Stronghold
|
||||
24420, // Breka Orc Prefect
|
||||
24416, // Breka Orc Scout Captain
|
||||
@@ -176,16 +170,22 @@ public class Q10811_ExaltedOneWhoFacesTheLimit extends Quest
|
||||
24415, // Breka Orc Scout
|
||||
24417, // Breka Orc Archer
|
||||
24418, // Breka Orc Shaman
|
||||
// Sel Mahum Training Grounds
|
||||
24492, // Sel Mahum Soldier
|
||||
24494, // Sel Mahum Warrior
|
||||
24493, // Sel Mahum Squad Leader
|
||||
24495, // Keltron
|
||||
// Plains of the Lizardmen
|
||||
24496, // Tanta Lizardman Warrior
|
||||
24498, // Tanta Lizardman Wizard
|
||||
24499, // Priest Ugoros
|
||||
24497, // Tanta Lizardman Archer
|
||||
// Varka Silenos Barracks
|
||||
24636, // Varka Silenos Magus
|
||||
24637, // Varka Silenos Shaman
|
||||
24638, // Varka Silenos Footman
|
||||
24639, // Varka Silenos Sergeant
|
||||
24640, // Varka Silenos Officer
|
||||
// Sel Mahum Training Grounds
|
||||
24492, // Sel Mahum Soldier
|
||||
24494, // Sel Mahum Warrior
|
||||
24493, // Sel Mahum Squad Leader
|
||||
24495, // Keltron
|
||||
// Fields of Massacre
|
||||
24486, // Dismal Pole
|
||||
24487, // Graveyard Predator
|
||||
@@ -193,13 +193,6 @@ public class Q10811_ExaltedOneWhoFacesTheLimit extends Quest
|
||||
24491, // Doom Knight
|
||||
24490, // Doom Soldier
|
||||
24488, // Doom Archer
|
||||
// Wall of Argos
|
||||
24606, // Captive Antelope
|
||||
24607, // Captive Bandersnatch
|
||||
24608, // Captive Buffalo
|
||||
24609, // Captive Grendel
|
||||
24610, // Eye of Watchman
|
||||
24611, // Elder Homunculus
|
||||
// Sea Of Spores
|
||||
24226, // Aranea
|
||||
24227, // Keros
|
||||
@@ -212,6 +205,13 @@ public class Q10811_ExaltedOneWhoFacesTheLimit extends Quest
|
||||
24236, // Tergus
|
||||
24237, // Skeletus
|
||||
24238, // Atrofine
|
||||
// Wall of Argos
|
||||
24606, // Captive Antelope
|
||||
24607, // Captive Bandersnatch
|
||||
24608, // Captive Buffalo
|
||||
24609, // Captive Grendel
|
||||
24610, // Eye of Watchman
|
||||
24611, // Elder Homunculus
|
||||
// Wasteland
|
||||
24501, // Centaur Fighter
|
||||
24504, // Centaur Warlord
|
||||
@@ -219,6 +219,15 @@ public class Q10811_ExaltedOneWhoFacesTheLimit extends Quest
|
||||
24503, // Centaur Wizard
|
||||
24500, // Sand Golem
|
||||
24502, // Centaur Marksman
|
||||
// Beast Farm
|
||||
24651, // Red Kookaburra
|
||||
24652, // Blue Kookaburra
|
||||
24653, // White Cougar
|
||||
24654, // Cougar
|
||||
24655, // Black Buffalo
|
||||
24656, // White Buffalo
|
||||
24657, // Grandel
|
||||
24658, // Black Grandel
|
||||
// Cemetery
|
||||
19455, // Aden Raider
|
||||
19456, // Te Ochdumann
|
||||
@@ -235,20 +244,6 @@ public class Q10811_ExaltedOneWhoFacesTheLimit extends Quest
|
||||
23298, // Royal Quartermaster
|
||||
23299, // Operations Chief of the 7th Division
|
||||
23300, // Commander of Operations
|
||||
// Fafurion Temple
|
||||
24329, // Starving Water Dragon
|
||||
24318, // Temple Guard Captain
|
||||
24325, // Temple Wizard
|
||||
24324, // Temple Guardian Warrior
|
||||
24326, // Temple Guardian Wizard
|
||||
24323, // Temple Guard
|
||||
24321, // Temple Patrol Guard
|
||||
24322, // Temple Knight Recruit
|
||||
// Dragon Valley
|
||||
24617, // Dragon Peltast
|
||||
24618, // Dragon Officer
|
||||
24619, // Behemoth Dragon
|
||||
24620, // Soul Hunter
|
||||
// Valley of Saints
|
||||
24876, // Guide of Splendor
|
||||
24877, // Herald of Splendor
|
||||
@@ -262,15 +257,55 @@ public class Q10811_ExaltedOneWhoFacesTheLimit extends Quest
|
||||
24884, // Springs Dwarf Berserker
|
||||
24885, // Springs Dwarf Priest
|
||||
24886, // Springs Yeti
|
||||
// Beast Farm
|
||||
24651, // Red Kookaburra
|
||||
24652, // Blue Kookaburra
|
||||
24653, // White Cougar
|
||||
24654, // Cougar
|
||||
24655, // Black Buffalo
|
||||
24656, // White Buffalo
|
||||
24657, // Grandel
|
||||
24658, // Black Grandel
|
||||
// Cruma Marshlands
|
||||
24930, // Black Demon Knight
|
||||
24931, // Black Demon Warrior
|
||||
24932, // Black Demon Scout
|
||||
24933, // Black Demon Wizard
|
||||
// Frozen Labyrinth
|
||||
24934, // Frozen Soldier
|
||||
24935, // Frozen Defender
|
||||
24936, // Ice Knight
|
||||
24937, // Glacier Golem
|
||||
24938, // Ice Fairy
|
||||
// Sel Mahum Base
|
||||
24961, // Sel Mahum Footman
|
||||
24962, // Sel Mahum Elite Soldier
|
||||
24963, // Sel Mahum Shaman
|
||||
24964, // Sel Mahum Wizard
|
||||
// Fafurion Temple
|
||||
24329, // Starving Water Dragon
|
||||
24318, // Temple Guard Captain
|
||||
24325, // Temple Wizard
|
||||
24324, // Temple Guardian Warrior
|
||||
24326, // Temple Guardian Wizard
|
||||
24323, // Temple Guard
|
||||
24321, // Temple Patrol Guard
|
||||
24322, // Temple Knight Recruit
|
||||
// Dragon Valley West
|
||||
24664, // Graveyard Death Lich
|
||||
24665, // Graveyard Death Berserker
|
||||
24666, // Graveyard Death Soldier
|
||||
24667, // Graveyard Death Knight
|
||||
// Dragon Valley East
|
||||
24669, // Dragon Officer
|
||||
24670, // Dragon Beast
|
||||
24671, // Dragon Centurion
|
||||
24672, // Elite Dragon Guard
|
||||
// Shadow Of The Mother Tree
|
||||
24965, // Creeper Rampike
|
||||
24966, // Fila Aprias
|
||||
24967, // Flush Teasle
|
||||
24968, // Treant Blossom
|
||||
24969, // Arsos Butterfly
|
||||
// Execution Grounds
|
||||
24673, // Zombie Orc
|
||||
24674, // Zombie Dark Elf
|
||||
24675, // Zombie Dwarf
|
||||
24676, // Schnabel Stalker
|
||||
24677, // Henker Hacker
|
||||
24678, // Schnabel Doctor
|
||||
24679, // Henker Anatomist
|
||||
};
|
||||
|
||||
public Q10811_ExaltedOneWhoFacesTheLimit()
|
||||
|
||||
@@ -167,12 +167,6 @@ public class Q10817_ExaltedOneWhoOvercomesTheLimit extends Quest
|
||||
24633, // Ketra Orc Warrior
|
||||
24634, // Ketra Orc Lieutenant
|
||||
24635, // Ketra Orc Battalion Commander
|
||||
// Varka Silenos Barracks
|
||||
24636, // Varka Silenos Magus
|
||||
24637, // Varka Silenos Shaman
|
||||
24638, // Varka Silenos Footman
|
||||
24639, // Varka Silenos Sergeant
|
||||
24640, // Varka Silenos Officer
|
||||
// Breka's Stronghold
|
||||
24420, // Breka Orc Prefect
|
||||
24416, // Breka Orc Scout Captain
|
||||
@@ -180,16 +174,22 @@ public class Q10817_ExaltedOneWhoOvercomesTheLimit extends Quest
|
||||
24415, // Breka Orc Scout
|
||||
24417, // Breka Orc Archer
|
||||
24418, // Breka Orc Shaman
|
||||
// Sel Mahum Training Grounds
|
||||
24492, // Sel Mahum Soldier
|
||||
24494, // Sel Mahum Warrior
|
||||
24493, // Sel Mahum Squad Leader
|
||||
24495, // Keltron
|
||||
// Plains of the Lizardmen
|
||||
24496, // Tanta Lizardman Warrior
|
||||
24498, // Tanta Lizardman Wizard
|
||||
24499, // Priest Ugoros
|
||||
24497, // Tanta Lizardman Archer
|
||||
// Varka Silenos Barracks
|
||||
24636, // Varka Silenos Magus
|
||||
24637, // Varka Silenos Shaman
|
||||
24638, // Varka Silenos Footman
|
||||
24639, // Varka Silenos Sergeant
|
||||
24640, // Varka Silenos Officer
|
||||
// Sel Mahum Training Grounds
|
||||
24492, // Sel Mahum Soldier
|
||||
24494, // Sel Mahum Warrior
|
||||
24493, // Sel Mahum Squad Leader
|
||||
24495, // Keltron
|
||||
// Fields of Massacre
|
||||
24486, // Dismal Pole
|
||||
24487, // Graveyard Predator
|
||||
@@ -197,13 +197,6 @@ public class Q10817_ExaltedOneWhoOvercomesTheLimit extends Quest
|
||||
24491, // Doom Knight
|
||||
24490, // Doom Soldier
|
||||
24488, // Doom Archer
|
||||
// Wall of Argos
|
||||
24606, // Captive Antelope
|
||||
24607, // Captive Bandersnatch
|
||||
24608, // Captive Buffalo
|
||||
24609, // Captive Grendel
|
||||
24610, // Eye of Watchman
|
||||
24611, // Elder Homunculus
|
||||
// Sea Of Spores
|
||||
24226, // Aranea
|
||||
24227, // Keros
|
||||
@@ -216,6 +209,13 @@ public class Q10817_ExaltedOneWhoOvercomesTheLimit extends Quest
|
||||
24236, // Tergus
|
||||
24237, // Skeletus
|
||||
24238, // Atrofine
|
||||
// Wall of Argos
|
||||
24606, // Captive Antelope
|
||||
24607, // Captive Bandersnatch
|
||||
24608, // Captive Buffalo
|
||||
24609, // Captive Grendel
|
||||
24610, // Eye of Watchman
|
||||
24611, // Elder Homunculus
|
||||
// Wasteland
|
||||
24501, // Centaur Fighter
|
||||
24504, // Centaur Warlord
|
||||
@@ -223,6 +223,15 @@ public class Q10817_ExaltedOneWhoOvercomesTheLimit extends Quest
|
||||
24503, // Centaur Wizard
|
||||
24500, // Sand Golem
|
||||
24502, // Centaur Marksman
|
||||
// Beast Farm
|
||||
24651, // Red Kookaburra
|
||||
24652, // Blue Kookaburra
|
||||
24653, // White Cougar
|
||||
24654, // Cougar
|
||||
24655, // Black Buffalo
|
||||
24656, // White Buffalo
|
||||
24657, // Grandel
|
||||
24658, // Black Grandel
|
||||
// Cemetery
|
||||
19455, // Aden Raider
|
||||
19456, // Te Ochdumann
|
||||
@@ -239,20 +248,6 @@ public class Q10817_ExaltedOneWhoOvercomesTheLimit extends Quest
|
||||
23298, // Royal Quartermaster
|
||||
23299, // Operations Chief of the 7th Division
|
||||
23300, // Commander of Operations
|
||||
// Fafurion Temple
|
||||
24329, // Starving Water Dragon
|
||||
24318, // Temple Guard Captain
|
||||
24325, // Temple Wizard
|
||||
24324, // Temple Guardian Warrior
|
||||
24326, // Temple Guardian Wizard
|
||||
24323, // Temple Guard
|
||||
24321, // Temple Patrol Guard
|
||||
24322, // Temple Knight Recruit
|
||||
// Dragon Valley
|
||||
24617, // Dragon Peltast
|
||||
24618, // Dragon Officer
|
||||
24619, // Behemoth Dragon
|
||||
24620, // Soul Hunter
|
||||
// Valley of Saints
|
||||
24876, // Guide of Splendor
|
||||
24877, // Herald of Splendor
|
||||
@@ -266,15 +261,55 @@ public class Q10817_ExaltedOneWhoOvercomesTheLimit extends Quest
|
||||
24884, // Springs Dwarf Berserker
|
||||
24885, // Springs Dwarf Priest
|
||||
24886, // Springs Yeti
|
||||
// Beast Farm
|
||||
24651, // Red Kookaburra
|
||||
24652, // Blue Kookaburra
|
||||
24653, // White Cougar
|
||||
24654, // Cougar
|
||||
24655, // Black Buffalo
|
||||
24656, // White Buffalo
|
||||
24657, // Grandel
|
||||
24658, // Black Grandel
|
||||
// Cruma Marshlands
|
||||
24930, // Black Demon Knight
|
||||
24931, // Black Demon Warrior
|
||||
24932, // Black Demon Scout
|
||||
24933, // Black Demon Wizard
|
||||
// Frozen Labyrinth
|
||||
24934, // Frozen Soldier
|
||||
24935, // Frozen Defender
|
||||
24936, // Ice Knight
|
||||
24937, // Glacier Golem
|
||||
24938, // Ice Fairy
|
||||
// Sel Mahum Base
|
||||
24961, // Sel Mahum Footman
|
||||
24962, // Sel Mahum Elite Soldier
|
||||
24963, // Sel Mahum Shaman
|
||||
24964, // Sel Mahum Wizard
|
||||
// Fafurion Temple
|
||||
24329, // Starving Water Dragon
|
||||
24318, // Temple Guard Captain
|
||||
24325, // Temple Wizard
|
||||
24324, // Temple Guardian Warrior
|
||||
24326, // Temple Guardian Wizard
|
||||
24323, // Temple Guard
|
||||
24321, // Temple Patrol Guard
|
||||
24322, // Temple Knight Recruit
|
||||
// Dragon Valley West
|
||||
24664, // Graveyard Death Lich
|
||||
24665, // Graveyard Death Berserker
|
||||
24666, // Graveyard Death Soldier
|
||||
24667, // Graveyard Death Knight
|
||||
// Dragon Valley East
|
||||
24669, // Dragon Officer
|
||||
24670, // Dragon Beast
|
||||
24671, // Dragon Centurion
|
||||
24672, // Elite Dragon Guard
|
||||
// Shadow Of The Mother Tree
|
||||
24965, // Creeper Rampike
|
||||
24966, // Fila Aprias
|
||||
24967, // Flush Teasle
|
||||
24968, // Treant Blossom
|
||||
24969, // Arsos Butterfly
|
||||
// Execution Grounds
|
||||
24673, // Zombie Orc
|
||||
24674, // Zombie Dark Elf
|
||||
24675, // Zombie Dwarf
|
||||
24676, // Schnabel Stalker
|
||||
24677, // Henker Hacker
|
||||
24678, // Schnabel Doctor
|
||||
24679, // Henker Anatomist
|
||||
};
|
||||
|
||||
public Q10817_ExaltedOneWhoOvercomesTheLimit()
|
||||
|
||||
@@ -174,12 +174,6 @@ public class Q10823_ExaltedOneWhoShattersTheLimit extends Quest
|
||||
24633, // Ketra Orc Warrior
|
||||
24634, // Ketra Orc Lieutenant
|
||||
24635, // Ketra Orc Battalion Commander
|
||||
// Varka Silenos Barracks
|
||||
24636, // Varka Silenos Magus
|
||||
24637, // Varka Silenos Shaman
|
||||
24638, // Varka Silenos Footman
|
||||
24639, // Varka Silenos Sergeant
|
||||
24640, // Varka Silenos Officer
|
||||
// Breka's Stronghold
|
||||
24420, // Breka Orc Prefect
|
||||
24416, // Breka Orc Scout Captain
|
||||
@@ -187,16 +181,22 @@ public class Q10823_ExaltedOneWhoShattersTheLimit extends Quest
|
||||
24415, // Breka Orc Scout
|
||||
24417, // Breka Orc Archer
|
||||
24418, // Breka Orc Shaman
|
||||
// Sel Mahum Training Grounds
|
||||
24492, // Sel Mahum Soldier
|
||||
24494, // Sel Mahum Warrior
|
||||
24493, // Sel Mahum Squad Leader
|
||||
24495, // Keltron
|
||||
// Plains of the Lizardmen
|
||||
24496, // Tanta Lizardman Warrior
|
||||
24498, // Tanta Lizardman Wizard
|
||||
24499, // Priest Ugoros
|
||||
24497, // Tanta Lizardman Archer
|
||||
// Varka Silenos Barracks
|
||||
24636, // Varka Silenos Magus
|
||||
24637, // Varka Silenos Shaman
|
||||
24638, // Varka Silenos Footman
|
||||
24639, // Varka Silenos Sergeant
|
||||
24640, // Varka Silenos Officer
|
||||
// Sel Mahum Training Grounds
|
||||
24492, // Sel Mahum Soldier
|
||||
24494, // Sel Mahum Warrior
|
||||
24493, // Sel Mahum Squad Leader
|
||||
24495, // Keltron
|
||||
// Fields of Massacre
|
||||
24486, // Dismal Pole
|
||||
24487, // Graveyard Predator
|
||||
@@ -204,13 +204,6 @@ public class Q10823_ExaltedOneWhoShattersTheLimit extends Quest
|
||||
24491, // Doom Knight
|
||||
24490, // Doom Soldier
|
||||
24488, // Doom Archer
|
||||
// Wall of Argos
|
||||
24606, // Captive Antelope
|
||||
24607, // Captive Bandersnatch
|
||||
24608, // Captive Buffalo
|
||||
24609, // Captive Grendel
|
||||
24610, // Eye of Watchman
|
||||
24611, // Elder Homunculus
|
||||
// Sea Of Spores
|
||||
24226, // Aranea
|
||||
24227, // Keros
|
||||
@@ -223,6 +216,13 @@ public class Q10823_ExaltedOneWhoShattersTheLimit extends Quest
|
||||
24236, // Tergus
|
||||
24237, // Skeletus
|
||||
24238, // Atrofine
|
||||
// Wall of Argos
|
||||
24606, // Captive Antelope
|
||||
24607, // Captive Bandersnatch
|
||||
24608, // Captive Buffalo
|
||||
24609, // Captive Grendel
|
||||
24610, // Eye of Watchman
|
||||
24611, // Elder Homunculus
|
||||
// Wasteland
|
||||
24501, // Centaur Fighter
|
||||
24504, // Centaur Warlord
|
||||
@@ -230,6 +230,15 @@ public class Q10823_ExaltedOneWhoShattersTheLimit extends Quest
|
||||
24503, // Centaur Wizard
|
||||
24500, // Sand Golem
|
||||
24502, // Centaur Marksman
|
||||
// Beast Farm
|
||||
24651, // Red Kookaburra
|
||||
24652, // Blue Kookaburra
|
||||
24653, // White Cougar
|
||||
24654, // Cougar
|
||||
24655, // Black Buffalo
|
||||
24656, // White Buffalo
|
||||
24657, // Grandel
|
||||
24658, // Black Grandel
|
||||
// Cemetery
|
||||
19455, // Aden Raider
|
||||
19456, // Te Ochdumann
|
||||
@@ -246,20 +255,6 @@ public class Q10823_ExaltedOneWhoShattersTheLimit extends Quest
|
||||
23298, // Royal Quartermaster
|
||||
23299, // Operations Chief of the 7th Division
|
||||
23300, // Commander of Operations
|
||||
// Fafurion Temple
|
||||
24329, // Starving Water Dragon
|
||||
24318, // Temple Guard Captain
|
||||
24325, // Temple Wizard
|
||||
24324, // Temple Guardian Warrior
|
||||
24326, // Temple Guardian Wizard
|
||||
24323, // Temple Guard
|
||||
24321, // Temple Patrol Guard
|
||||
24322, // Temple Knight Recruit
|
||||
// Dragon Valley
|
||||
24617, // Dragon Peltast
|
||||
24618, // Dragon Officer
|
||||
24619, // Behemoth Dragon
|
||||
24620, // Soul Hunter
|
||||
// Valley of Saints
|
||||
24876, // Guide of Splendor
|
||||
24877, // Herald of Splendor
|
||||
@@ -273,15 +268,55 @@ public class Q10823_ExaltedOneWhoShattersTheLimit extends Quest
|
||||
24884, // Springs Dwarf Berserker
|
||||
24885, // Springs Dwarf Priest
|
||||
24886, // Springs Yeti
|
||||
// Beast Farm
|
||||
24651, // Red Kookaburra
|
||||
24652, // Blue Kookaburra
|
||||
24653, // White Cougar
|
||||
24654, // Cougar
|
||||
24655, // Black Buffalo
|
||||
24656, // White Buffalo
|
||||
24657, // Grandel
|
||||
24658, // Black Grandel
|
||||
// Cruma Marshlands
|
||||
24930, // Black Demon Knight
|
||||
24931, // Black Demon Warrior
|
||||
24932, // Black Demon Scout
|
||||
24933, // Black Demon Wizard
|
||||
// Frozen Labyrinth
|
||||
24934, // Frozen Soldier
|
||||
24935, // Frozen Defender
|
||||
24936, // Ice Knight
|
||||
24937, // Glacier Golem
|
||||
24938, // Ice Fairy
|
||||
// Sel Mahum Base
|
||||
24961, // Sel Mahum Footman
|
||||
24962, // Sel Mahum Elite Soldier
|
||||
24963, // Sel Mahum Shaman
|
||||
24964, // Sel Mahum Wizard
|
||||
// Fafurion Temple
|
||||
24329, // Starving Water Dragon
|
||||
24318, // Temple Guard Captain
|
||||
24325, // Temple Wizard
|
||||
24324, // Temple Guardian Warrior
|
||||
24326, // Temple Guardian Wizard
|
||||
24323, // Temple Guard
|
||||
24321, // Temple Patrol Guard
|
||||
24322, // Temple Knight Recruit
|
||||
// Dragon Valley West
|
||||
24664, // Graveyard Death Lich
|
||||
24665, // Graveyard Death Berserker
|
||||
24666, // Graveyard Death Soldier
|
||||
24667, // Graveyard Death Knight
|
||||
// Dragon Valley East
|
||||
24669, // Dragon Officer
|
||||
24670, // Dragon Beast
|
||||
24671, // Dragon Centurion
|
||||
24672, // Elite Dragon Guard
|
||||
// Shadow Of The Mother Tree
|
||||
24965, // Creeper Rampike
|
||||
24966, // Fila Aprias
|
||||
24967, // Flush Teasle
|
||||
24968, // Treant Blossom
|
||||
24969, // Arsos Butterfly
|
||||
// Execution Grounds
|
||||
24673, // Zombie Orc
|
||||
24674, // Zombie Dark Elf
|
||||
24675, // Zombie Dwarf
|
||||
24676, // Schnabel Stalker
|
||||
24677, // Henker Hacker
|
||||
24678, // Schnabel Doctor
|
||||
24679, // Henker Anatomist
|
||||
};
|
||||
|
||||
public Q10823_ExaltedOneWhoShattersTheLimit()
|
||||
|
||||
@@ -166,12 +166,6 @@ public class Q10873_ExaltedReachingAnotherLevel extends Quest
|
||||
24633, // Ketra Orc Warrior
|
||||
24634, // Ketra Orc Lieutenant
|
||||
24635, // Ketra Orc Battalion Commander
|
||||
// Varka Silenos Barracks
|
||||
24636, // Varka Silenos Magus
|
||||
24637, // Varka Silenos Shaman
|
||||
24638, // Varka Silenos Footman
|
||||
24639, // Varka Silenos Sergeant
|
||||
24640, // Varka Silenos Officer
|
||||
// Breka's Stronghold
|
||||
24420, // Breka Orc Prefect
|
||||
24416, // Breka Orc Scout Captain
|
||||
@@ -179,16 +173,22 @@ public class Q10873_ExaltedReachingAnotherLevel extends Quest
|
||||
24415, // Breka Orc Scout
|
||||
24417, // Breka Orc Archer
|
||||
24418, // Breka Orc Shaman
|
||||
// Sel Mahum Training Grounds
|
||||
24492, // Sel Mahum Soldier
|
||||
24494, // Sel Mahum Warrior
|
||||
24493, // Sel Mahum Squad Leader
|
||||
24495, // Keltron
|
||||
// Plains of the Lizardmen
|
||||
24496, // Tanta Lizardman Warrior
|
||||
24498, // Tanta Lizardman Wizard
|
||||
24499, // Priest Ugoros
|
||||
24497, // Tanta Lizardman Archer
|
||||
// Varka Silenos Barracks
|
||||
24636, // Varka Silenos Magus
|
||||
24637, // Varka Silenos Shaman
|
||||
24638, // Varka Silenos Footman
|
||||
24639, // Varka Silenos Sergeant
|
||||
24640, // Varka Silenos Officer
|
||||
// Sel Mahum Training Grounds
|
||||
24492, // Sel Mahum Soldier
|
||||
24494, // Sel Mahum Warrior
|
||||
24493, // Sel Mahum Squad Leader
|
||||
24495, // Keltron
|
||||
// Fields of Massacre
|
||||
24486, // Dismal Pole
|
||||
24487, // Graveyard Predator
|
||||
@@ -196,13 +196,6 @@ public class Q10873_ExaltedReachingAnotherLevel extends Quest
|
||||
24491, // Doom Knight
|
||||
24490, // Doom Soldier
|
||||
24488, // Doom Archer
|
||||
// Wall of Argos
|
||||
24606, // Captive Antelope
|
||||
24607, // Captive Bandersnatch
|
||||
24608, // Captive Buffalo
|
||||
24609, // Captive Grendel
|
||||
24610, // Eye of Watchman
|
||||
24611, // Elder Homunculus
|
||||
// Sea Of Spores
|
||||
24226, // Aranea
|
||||
24227, // Keros
|
||||
@@ -215,6 +208,13 @@ public class Q10873_ExaltedReachingAnotherLevel extends Quest
|
||||
24236, // Tergus
|
||||
24237, // Skeletus
|
||||
24238, // Atrofine
|
||||
// Wall of Argos
|
||||
24606, // Captive Antelope
|
||||
24607, // Captive Bandersnatch
|
||||
24608, // Captive Buffalo
|
||||
24609, // Captive Grendel
|
||||
24610, // Eye of Watchman
|
||||
24611, // Elder Homunculus
|
||||
// Wasteland
|
||||
24501, // Centaur Fighter
|
||||
24504, // Centaur Warlord
|
||||
@@ -222,6 +222,15 @@ public class Q10873_ExaltedReachingAnotherLevel extends Quest
|
||||
24503, // Centaur Wizard
|
||||
24500, // Sand Golem
|
||||
24502, // Centaur Marksman
|
||||
// Beast Farm
|
||||
24651, // Red Kookaburra
|
||||
24652, // Blue Kookaburra
|
||||
24653, // White Cougar
|
||||
24654, // Cougar
|
||||
24655, // Black Buffalo
|
||||
24656, // White Buffalo
|
||||
24657, // Grandel
|
||||
24658, // Black Grandel
|
||||
// Cemetery
|
||||
19455, // Aden Raider
|
||||
19456, // Te Ochdumann
|
||||
@@ -238,20 +247,6 @@ public class Q10873_ExaltedReachingAnotherLevel extends Quest
|
||||
23298, // Royal Quartermaster
|
||||
23299, // Operations Chief of the 7th Division
|
||||
23300, // Commander of Operations
|
||||
// Fafurion Temple
|
||||
24329, // Starving Water Dragon
|
||||
24318, // Temple Guard Captain
|
||||
24325, // Temple Wizard
|
||||
24324, // Temple Guardian Warrior
|
||||
24326, // Temple Guardian Wizard
|
||||
24323, // Temple Guard
|
||||
24321, // Temple Patrol Guard
|
||||
24322, // Temple Knight Recruit
|
||||
// Dragon Valley
|
||||
24617, // Dragon Peltast
|
||||
24618, // Dragon Officer
|
||||
24619, // Behemoth Dragon
|
||||
24620, // Soul Hunter
|
||||
// Valley of Saints
|
||||
24876, // Guide of Splendor
|
||||
24877, // Herald of Splendor
|
||||
@@ -265,15 +260,55 @@ public class Q10873_ExaltedReachingAnotherLevel extends Quest
|
||||
24884, // Springs Dwarf Berserker
|
||||
24885, // Springs Dwarf Priest
|
||||
24886, // Springs Yeti
|
||||
// Beast Farm
|
||||
24651, // Red Kookaburra
|
||||
24652, // Blue Kookaburra
|
||||
24653, // White Cougar
|
||||
24654, // Cougar
|
||||
24655, // Black Buffalo
|
||||
24656, // White Buffalo
|
||||
24657, // Grandel
|
||||
24658, // Black Grandel
|
||||
// Cruma Marshlands
|
||||
24930, // Black Demon Knight
|
||||
24931, // Black Demon Warrior
|
||||
24932, // Black Demon Scout
|
||||
24933, // Black Demon Wizard
|
||||
// Frozen Labyrinth
|
||||
24934, // Frozen Soldier
|
||||
24935, // Frozen Defender
|
||||
24936, // Ice Knight
|
||||
24937, // Glacier Golem
|
||||
24938, // Ice Fairy
|
||||
// Sel Mahum Base
|
||||
24961, // Sel Mahum Footman
|
||||
24962, // Sel Mahum Elite Soldier
|
||||
24963, // Sel Mahum Shaman
|
||||
24964, // Sel Mahum Wizard
|
||||
// Fafurion Temple
|
||||
24329, // Starving Water Dragon
|
||||
24318, // Temple Guard Captain
|
||||
24325, // Temple Wizard
|
||||
24324, // Temple Guardian Warrior
|
||||
24326, // Temple Guardian Wizard
|
||||
24323, // Temple Guard
|
||||
24321, // Temple Patrol Guard
|
||||
24322, // Temple Knight Recruit
|
||||
// Dragon Valley West
|
||||
24664, // Graveyard Death Lich
|
||||
24665, // Graveyard Death Berserker
|
||||
24666, // Graveyard Death Soldier
|
||||
24667, // Graveyard Death Knight
|
||||
// Dragon Valley East
|
||||
24669, // Dragon Officer
|
||||
24670, // Dragon Beast
|
||||
24671, // Dragon Centurion
|
||||
24672, // Elite Dragon Guard
|
||||
// Shadow Of The Mother Tree
|
||||
24965, // Creeper Rampike
|
||||
24966, // Fila Aprias
|
||||
24967, // Flush Teasle
|
||||
24968, // Treant Blossom
|
||||
24969, // Arsos Butterfly
|
||||
// Execution Grounds
|
||||
24673, // Zombie Orc
|
||||
24674, // Zombie Dark Elf
|
||||
24675, // Zombie Dwarf
|
||||
24676, // Schnabel Stalker
|
||||
24677, // Henker Hacker
|
||||
24678, // Schnabel Doctor
|
||||
24679, // Henker Anatomist
|
||||
};
|
||||
|
||||
public Q10873_ExaltedReachingAnotherLevel()
|
||||
|
||||
@@ -166,12 +166,6 @@ public class Q10879_ExaltedGuideToPower extends Quest
|
||||
24633, // Ketra Orc Warrior
|
||||
24634, // Ketra Orc Lieutenant
|
||||
24635, // Ketra Orc Battalion Commander
|
||||
// Varka Silenos Barracks
|
||||
24636, // Varka Silenos Magus
|
||||
24637, // Varka Silenos Shaman
|
||||
24638, // Varka Silenos Footman
|
||||
24639, // Varka Silenos Sergeant
|
||||
24640, // Varka Silenos Officer
|
||||
// Breka's Stronghold
|
||||
24420, // Breka Orc Prefect
|
||||
24416, // Breka Orc Scout Captain
|
||||
@@ -179,16 +173,22 @@ public class Q10879_ExaltedGuideToPower extends Quest
|
||||
24415, // Breka Orc Scout
|
||||
24417, // Breka Orc Archer
|
||||
24418, // Breka Orc Shaman
|
||||
// Sel Mahum Training Grounds
|
||||
24492, // Sel Mahum Soldier
|
||||
24494, // Sel Mahum Warrior
|
||||
24493, // Sel Mahum Squad Leader
|
||||
24495, // Keltron
|
||||
// Plains of the Lizardmen
|
||||
24496, // Tanta Lizardman Warrior
|
||||
24498, // Tanta Lizardman Wizard
|
||||
24499, // Priest Ugoros
|
||||
24497, // Tanta Lizardman Archer
|
||||
// Varka Silenos Barracks
|
||||
24636, // Varka Silenos Magus
|
||||
24637, // Varka Silenos Shaman
|
||||
24638, // Varka Silenos Footman
|
||||
24639, // Varka Silenos Sergeant
|
||||
24640, // Varka Silenos Officer
|
||||
// Sel Mahum Training Grounds
|
||||
24492, // Sel Mahum Soldier
|
||||
24494, // Sel Mahum Warrior
|
||||
24493, // Sel Mahum Squad Leader
|
||||
24495, // Keltron
|
||||
// Fields of Massacre
|
||||
24486, // Dismal Pole
|
||||
24487, // Graveyard Predator
|
||||
@@ -196,13 +196,6 @@ public class Q10879_ExaltedGuideToPower extends Quest
|
||||
24491, // Doom Knight
|
||||
24490, // Doom Soldier
|
||||
24488, // Doom Archer
|
||||
// Wall of Argos
|
||||
24606, // Captive Antelope
|
||||
24607, // Captive Bandersnatch
|
||||
24608, // Captive Buffalo
|
||||
24609, // Captive Grendel
|
||||
24610, // Eye of Watchman
|
||||
24611, // Elder Homunculus
|
||||
// Sea Of Spores
|
||||
24226, // Aranea
|
||||
24227, // Keros
|
||||
@@ -215,6 +208,13 @@ public class Q10879_ExaltedGuideToPower extends Quest
|
||||
24236, // Tergus
|
||||
24237, // Skeletus
|
||||
24238, // Atrofine
|
||||
// Wall of Argos
|
||||
24606, // Captive Antelope
|
||||
24607, // Captive Bandersnatch
|
||||
24608, // Captive Buffalo
|
||||
24609, // Captive Grendel
|
||||
24610, // Eye of Watchman
|
||||
24611, // Elder Homunculus
|
||||
// Wasteland
|
||||
24501, // Centaur Fighter
|
||||
24504, // Centaur Warlord
|
||||
@@ -222,6 +222,15 @@ public class Q10879_ExaltedGuideToPower extends Quest
|
||||
24503, // Centaur Wizard
|
||||
24500, // Sand Golem
|
||||
24502, // Centaur Marksman
|
||||
// Beast Farm
|
||||
24651, // Red Kookaburra
|
||||
24652, // Blue Kookaburra
|
||||
24653, // White Cougar
|
||||
24654, // Cougar
|
||||
24655, // Black Buffalo
|
||||
24656, // White Buffalo
|
||||
24657, // Grandel
|
||||
24658, // Black Grandel
|
||||
// Cemetery
|
||||
19455, // Aden Raider
|
||||
19456, // Te Ochdumann
|
||||
@@ -238,20 +247,6 @@ public class Q10879_ExaltedGuideToPower extends Quest
|
||||
23298, // Royal Quartermaster
|
||||
23299, // Operations Chief of the 7th Division
|
||||
23300, // Commander of Operations
|
||||
// Fafurion Temple
|
||||
24329, // Starving Water Dragon
|
||||
24318, // Temple Guard Captain
|
||||
24325, // Temple Wizard
|
||||
24324, // Temple Guardian Warrior
|
||||
24326, // Temple Guardian Wizard
|
||||
24323, // Temple Guard
|
||||
24321, // Temple Patrol Guard
|
||||
24322, // Temple Knight Recruit
|
||||
// Dragon Valley
|
||||
24617, // Dragon Peltast
|
||||
24618, // Dragon Officer
|
||||
24619, // Behemoth Dragon
|
||||
24620, // Soul Hunter
|
||||
// Valley of Saints
|
||||
24876, // Guide of Splendor
|
||||
24877, // Herald of Splendor
|
||||
@@ -265,15 +260,55 @@ public class Q10879_ExaltedGuideToPower extends Quest
|
||||
24884, // Springs Dwarf Berserker
|
||||
24885, // Springs Dwarf Priest
|
||||
24886, // Springs Yeti
|
||||
// Beast Farm
|
||||
24651, // Red Kookaburra
|
||||
24652, // Blue Kookaburra
|
||||
24653, // White Cougar
|
||||
24654, // Cougar
|
||||
24655, // Black Buffalo
|
||||
24656, // White Buffalo
|
||||
24657, // Grandel
|
||||
24658, // Black Grandel
|
||||
// Cruma Marshlands
|
||||
24930, // Black Demon Knight
|
||||
24931, // Black Demon Warrior
|
||||
24932, // Black Demon Scout
|
||||
24933, // Black Demon Wizard
|
||||
// Frozen Labyrinth
|
||||
24934, // Frozen Soldier
|
||||
24935, // Frozen Defender
|
||||
24936, // Ice Knight
|
||||
24937, // Glacier Golem
|
||||
24938, // Ice Fairy
|
||||
// Sel Mahum Base
|
||||
24961, // Sel Mahum Footman
|
||||
24962, // Sel Mahum Elite Soldier
|
||||
24963, // Sel Mahum Shaman
|
||||
24964, // Sel Mahum Wizard
|
||||
// Fafurion Temple
|
||||
24329, // Starving Water Dragon
|
||||
24318, // Temple Guard Captain
|
||||
24325, // Temple Wizard
|
||||
24324, // Temple Guardian Warrior
|
||||
24326, // Temple Guardian Wizard
|
||||
24323, // Temple Guard
|
||||
24321, // Temple Patrol Guard
|
||||
24322, // Temple Knight Recruit
|
||||
// Dragon Valley West
|
||||
24664, // Graveyard Death Lich
|
||||
24665, // Graveyard Death Berserker
|
||||
24666, // Graveyard Death Soldier
|
||||
24667, // Graveyard Death Knight
|
||||
// Dragon Valley East
|
||||
24669, // Dragon Officer
|
||||
24670, // Dragon Beast
|
||||
24671, // Dragon Centurion
|
||||
24672, // Elite Dragon Guard
|
||||
// Shadow Of The Mother Tree
|
||||
24965, // Creeper Rampike
|
||||
24966, // Fila Aprias
|
||||
24967, // Flush Teasle
|
||||
24968, // Treant Blossom
|
||||
24969, // Arsos Butterfly
|
||||
// Execution Grounds
|
||||
24673, // Zombie Orc
|
||||
24674, // Zombie Dark Elf
|
||||
24675, // Zombie Dwarf
|
||||
24676, // Schnabel Stalker
|
||||
24677, // Henker Hacker
|
||||
24678, // Schnabel Doctor
|
||||
24679, // Henker Anatomist
|
||||
};
|
||||
|
||||
public Q10879_ExaltedGuideToPower()
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
<html><body>Verdure Elder Elikia:<br>
|
||||
Have you brought me the message from Leona Blackbird?
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10885_SaviorsPathDiscovery 34057-03.html">"Yes, here it is."</Button>
|
||||
Greetings! I've been expecting you for a while.<br>
|
||||
Leona asked me to tell you something.<br>
|
||||
I hope you are ready to hear me out and help.<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10885_SaviorsPathDiscovery 34057-02.htm">"What has Leona asked you to tell?"</Button>
|
||||
</body></html>
|
||||
@@ -0,0 +1,6 @@
|
||||
<html><body>Verdure Elder Elikia:<br>
|
||||
I see you are ready. Now I'm going to tell you what Leona has told me.<br>
|
||||
In the last combat with Etis van Etina, Leona was badly wounded, so she had to train to recover her strength. Unfortunately, she had no time to complete the trainings because she received a message. It said about a dungeon of Atelia Fortress. Something connected to Etis van Etina was found there. That place was very odd and was called <font color="LEVEL">Atelia Refinery</font>.<br>
|
||||
Leona wanted to meet you personally, but there was an urgent business, so she asked me to see you and explain the situation. My mission is connected with that place.<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10885_SaviorsPathDiscovery 34057-03.htm">Ask about Atelia Refinery</Button>
|
||||
</body></html>
|
||||
@@ -1,3 +0,0 @@
|
||||
<html><body>Verdure Elder Elikia:<br>
|
||||
I don't see any message from Leona Blackbird, make sure you bring that to me.
|
||||
</body></html>
|
||||
@@ -0,0 +1,6 @@
|
||||
<html><body>Verdure Elder Elikia:<br>
|
||||
We're assuming by the name that it's where Atelia is refined.<br>
|
||||
It's located at the underground of Atelia Fortress, so we didn't know about it until now.<br>
|
||||
I think Atelia refined from there is sent to the great temple where Etis van Etina is.<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10885_SaviorsPathDiscovery 34057-04.html">"What has happened so far?"</Button>
|
||||
</body></html>
|
||||
@@ -1,3 +0,0 @@
|
||||
<html><body>Verdure Elder Elikia:<br>
|
||||
Great! You have brought it, now let me read it.<br>
|
||||
</body></html>
|
||||
@@ -1,4 +0,0 @@
|
||||
<html><body>Verdure Elder Elikia:<br>
|
||||
I've read the message from Leona Blackbird you should go see her to tell you what you have to do.<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10885_SaviorsPathDiscovery 34057-05.html">"Ok, I'll go."</Button>
|
||||
</body></html>
|
||||
@@ -0,0 +1,6 @@
|
||||
<html><body>Verdure Elder Elikia:<br>
|
||||
Leona was lost in despair for some time but she finally rose again and started investigating the Atelia Refinery.<br>
|
||||
But our strength still isn't enough, so we're asking for your help once again.<br>
|
||||
Leona will be at the entrance of the Atelia Refinery. You'll find it if you leave camp and follow the passage of Dimensional Energy to the west.<br>
|
||||
Leona will fill you in with more details.
|
||||
</body></html>
|
||||
@@ -1,3 +0,0 @@
|
||||
<html><body>Verdure Elder Elikia:<br>
|
||||
Leona Blackbird is waiting for you at Atelia Refinery entrance.
|
||||
</body></html>
|
||||
@@ -1,5 +0,0 @@
|
||||
<html><body>Message:<br>
|
||||
You received a message from Leona Blackbird, this means you can start Savior's Path quests.<br>
|
||||
To learn more, go to Blackbird Campsite and talk to Elikia.<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10885_SaviorsPathDiscovery closeMessage">"Close message."</Button>
|
||||
</body></html>
|
||||
@@ -16,6 +16,7 @@
|
||||
*/
|
||||
package quests.Q10885_SaviorsPathDiscovery;
|
||||
|
||||
import org.l2jmobius.gameserver.enums.Movie;
|
||||
import org.l2jmobius.gameserver.model.actor.Npc;
|
||||
import org.l2jmobius.gameserver.model.actor.Player;
|
||||
import org.l2jmobius.gameserver.model.quest.Quest;
|
||||
@@ -58,20 +59,27 @@ public class Q10885_SaviorsPathDiscovery extends Quest
|
||||
String htmltext = null;
|
||||
switch (event)
|
||||
{
|
||||
case "34057-03.html":
|
||||
case "34057-02.htm":
|
||||
{
|
||||
qs.startQuest();
|
||||
htmltext = event;
|
||||
break;
|
||||
}
|
||||
case "34057-03.htm":
|
||||
{
|
||||
if (qs.isCond(1))
|
||||
{
|
||||
takeItems(player, -1, LEONA_BLACKBIRDS_MESSAGE);
|
||||
qs.setCond(2);
|
||||
}
|
||||
htmltext = event;
|
||||
break;
|
||||
}
|
||||
case "34057-05.html":
|
||||
case "34057-04.html":
|
||||
{
|
||||
if (qs.isCond(2))
|
||||
{
|
||||
giveItems(player, LEONA_BLACKBIRDS_MESSAGE, 1, true);
|
||||
playMovie(player, Movie.EP5_ASTATINE_QST_START);
|
||||
qs.setCond(3);
|
||||
}
|
||||
htmltext = event;
|
||||
@@ -83,6 +91,7 @@ public class Q10885_SaviorsPathDiscovery extends Quest
|
||||
{
|
||||
if ((player.getLevel() >= MIN_LEVEL))
|
||||
{
|
||||
takeItems(player, -1, LEONA_BLACKBIRDS_MESSAGE);
|
||||
addExpAndSp(player, 90638, 82);
|
||||
qs.exitQuest(false, true);
|
||||
htmltext = event;
|
||||
@@ -137,7 +146,11 @@ public class Q10885_SaviorsPathDiscovery extends Quest
|
||||
}
|
||||
else if (qs.isCond(2))
|
||||
{
|
||||
htmltext = "34057-04.htm";
|
||||
htmltext = "34057-03.htm";
|
||||
}
|
||||
else if (qs.isCond(3))
|
||||
{
|
||||
htmltext = "34057-04.html";
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
<html><body>Blackbird Clan Lord Leona Blackbird:<br>
|
||||
Yes. Go speak to <font color="LEVEL">Devianne</font>.
|
||||
Yes. Go speak to <font color="LEVEL">Devianne</font>.<br>
|
||||
Devianne will tell you how to get to the Atelia Refinery and what you must do there.<br>
|
||||
</body></html>
|
||||
@@ -0,0 +1,3 @@
|
||||
<html><body>Conquest Guide Entropy:<br>
|
||||
I don't see any invitation from Conquest Guide Chloe, make sure you bring that to me.
|
||||
</body></html>
|
||||
@@ -0,0 +1,4 @@
|
||||
<html><body>Conquest Guide Entropy:<br>
|
||||
Have you brought the invitation that Conquest Guide Chloe gave you?
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10904_JourneyToTheConquestWorld 34599-02.html">"Yes, here it is."</Button>
|
||||
</body></html>
|
||||
@@ -0,0 +1,3 @@
|
||||
<html><body>Conquest Guide Entropy:<br>
|
||||
Oh! Let me see if it's genuine, come back later.<br>
|
||||
</body></html>
|
||||
@@ -0,0 +1,4 @@
|
||||
<html><body>Conquest Guide Entropy:<br>
|
||||
Checking the invitation...<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10904_JourneyToTheConquestWorld 34599-04.html">"How is it?"</Button>
|
||||
</body></html>
|
||||
@@ -0,0 +1,3 @@
|
||||
<html><body>Conquest Guide Entropy:<br>
|
||||
Great! You have brought the right one, here is your reward.<br>
|
||||
</body></html>
|
||||
@@ -0,0 +1,5 @@
|
||||
<html><body>Conquest Guide Chloe:<br>
|
||||
Hello, adventurer!<br>
|
||||
I have no news for you. There's nothing I can tell you.<br>
|
||||
(Available to characters of Lv. 110+.)<br>
|
||||
</body></html>
|
||||
@@ -0,0 +1,6 @@
|
||||
<html><body>Conquest Guide Chloe:<br>
|
||||
Hello, adventurer!<br>
|
||||
The most upstanding warriors receive an invitation to visit a new world - the Conquest.<br>
|
||||
To learn more, go to Conquest Town and talk to Entropy.<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10904_JourneyToTheConquestWorld 34600-02.html">Here, take this invitation.</Button>
|
||||
</body></html>
|
||||
@@ -0,0 +1,4 @@
|
||||
<html><body>Conquest Guide Chloe:<br>
|
||||
You can go now,<br>
|
||||
you must give the invitation to Conquest Guide Entropy, in the Conquest Town.<br>
|
||||
</body></html>
|
||||
@@ -0,0 +1,144 @@
|
||||
/*
|
||||
* This file is part of the L2J Mobius project.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package quests.Q10904_JourneyToTheConquestWorld;
|
||||
|
||||
import org.l2jmobius.gameserver.model.actor.Npc;
|
||||
import org.l2jmobius.gameserver.model.actor.Player;
|
||||
import org.l2jmobius.gameserver.model.quest.Quest;
|
||||
import org.l2jmobius.gameserver.model.quest.QuestState;
|
||||
import org.l2jmobius.gameserver.model.quest.State;
|
||||
|
||||
/**
|
||||
* @author CostyKiller
|
||||
*/
|
||||
public class Q10904_JourneyToTheConquestWorld extends Quest
|
||||
{
|
||||
// NPCs
|
||||
private static final int ENTROPY = 34599;
|
||||
private static final int CHLOE = 34600;
|
||||
// Items
|
||||
private static final int CONQUEST_NAME_CHANGE_COUPON = 81979;
|
||||
private static final int CHLOE_INVITATION = 82176;
|
||||
// Misc
|
||||
private static final int MIN_LEVEL = 110;
|
||||
|
||||
public Q10904_JourneyToTheConquestWorld()
|
||||
{
|
||||
super(10904);
|
||||
addStartNpc(CHLOE);
|
||||
addTalkId(CHLOE, ENTROPY);
|
||||
addCondMinLevel(MIN_LEVEL, "34600-00.html");
|
||||
registerQuestItems(CHLOE_INVITATION);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onAdvEvent(String event, Npc npc, Player player)
|
||||
{
|
||||
final QuestState qs = getQuestState(player, false);
|
||||
if (qs == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
String htmltext = null;
|
||||
switch (event)
|
||||
{
|
||||
case "34600-02.html":
|
||||
{
|
||||
if ((player.getLevel() >= MIN_LEVEL))
|
||||
{
|
||||
qs.startQuest();
|
||||
giveItems(player, CHLOE_INVITATION, 1);
|
||||
htmltext = event;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "34599-02.html":
|
||||
{
|
||||
if (qs.isCond(1) && (hasQuestItems(player, CHLOE_INVITATION)))
|
||||
{
|
||||
takeItems(player, -1, CHLOE_INVITATION);
|
||||
qs.setCond(2);
|
||||
htmltext = event;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "34599-04.html":
|
||||
{
|
||||
if (qs.isCond(2))
|
||||
{
|
||||
giveItems(player, CONQUEST_NAME_CHANGE_COUPON, 1);
|
||||
qs.exitQuest(false, true);
|
||||
htmltext = event;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
return htmltext;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onTalk(Npc npc, Player player)
|
||||
{
|
||||
final QuestState qs = getQuestState(player, true);
|
||||
String htmltext = getNoQuestMsg(player);
|
||||
switch (qs.getState())
|
||||
{
|
||||
case State.CREATED:
|
||||
{
|
||||
if (npc.getId() == CHLOE)
|
||||
{
|
||||
htmltext = "34600-01.htm";
|
||||
}
|
||||
break;
|
||||
}
|
||||
case State.STARTED:
|
||||
{
|
||||
switch (npc.getId())
|
||||
{
|
||||
case CHLOE:
|
||||
{
|
||||
if (qs.isCond(1))
|
||||
{
|
||||
htmltext = "34600-02.html";
|
||||
}
|
||||
break;
|
||||
}
|
||||
case ENTROPY:
|
||||
{
|
||||
if (qs.isCond(1))
|
||||
{
|
||||
htmltext = "34599-01.htm";
|
||||
}
|
||||
else if (qs.isCond(2))
|
||||
{
|
||||
htmltext = "34599-03.htm";
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case State.COMPLETED:
|
||||
{
|
||||
htmltext = getAlreadyCompletedMsg(player);
|
||||
break;
|
||||
}
|
||||
}
|
||||
return htmltext;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
<html><body>Conquest Guide Entropy:<br>
|
||||
You are not ready for this yet.<br>
|
||||
(This quest is for characters Lv. 110 and higher who have completed the Journey to the Conquest World quest.)
|
||||
</body></html>
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user