Initial changes.
This commit is contained in:
@@ -1,345 +0,0 @@
|
||||
/*
|
||||
* 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.bosses;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
import org.l2jmobius.commons.util.Rnd;
|
||||
import org.l2jmobius.gameserver.ai.CtrlIntention;
|
||||
import org.l2jmobius.gameserver.datatables.xml.DoorData;
|
||||
import org.l2jmobius.gameserver.enums.ChatType;
|
||||
import org.l2jmobius.gameserver.instancemanager.CastleManager;
|
||||
import org.l2jmobius.gameserver.instancemanager.GrandBossManager;
|
||||
import org.l2jmobius.gameserver.model.Location;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.MonsterInstance;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.NpcInstance;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||
import org.l2jmobius.gameserver.model.quest.Quest;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.CreatureSay;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.SocialAction;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.SpecialCamera;
|
||||
|
||||
/**
|
||||
* @author Mobius
|
||||
* @note Based on python script
|
||||
*/
|
||||
public class Benom extends Quest
|
||||
{
|
||||
// NPCs
|
||||
private static final int BENOM = 29054;
|
||||
private static final int BENOM_TELEPORT = 13101;
|
||||
// Locations
|
||||
private static final Location[] WALK_ROUTES =
|
||||
{
|
||||
new Location(12565, -49739, -547),
|
||||
new Location(11242, -49689, -33),
|
||||
new Location(10751, -49702, 83),
|
||||
new Location(10824, -50808, 316),
|
||||
new Location(9084, -50786, 972),
|
||||
new Location(9095, -49787, 1252),
|
||||
new Location(8371, -49711, 1252),
|
||||
new Location(8423, -48545, 1252),
|
||||
new Location(9105, -48474, 1252),
|
||||
new Location(9085, -47488, 972),
|
||||
new Location(10858, -47527, 316),
|
||||
new Location(10842, -48626, 75),
|
||||
new Location(12171, -48464, -547),
|
||||
new Location(13565, -49145, -535),
|
||||
new Location(15653, -49159, -1059),
|
||||
new Location(15423, -48402, -839),
|
||||
new Location(15066, -47438, -419),
|
||||
new Location(13990, -46843, -292),
|
||||
new Location(13685, -47371, -163),
|
||||
new Location(13384, -47470, -163),
|
||||
new Location(14609, -48608, 346),
|
||||
new Location(13878, -47449, 747),
|
||||
new Location(12894, -49109, 980),
|
||||
new Location(10135, -49150, 996),
|
||||
new Location(12894, -49109, 980),
|
||||
new Location(13738, -50894, 747),
|
||||
new Location(14579, -49698, 347),
|
||||
new Location(12896, -51135, -166),
|
||||
new Location(12971, -52046, -292),
|
||||
new Location(15140, -50781, -442),
|
||||
new Location(15328, -50406, -603),
|
||||
new Location(15594, -49192, -1059),
|
||||
new Location(13175, -49153, -537)
|
||||
};
|
||||
// Misc
|
||||
private static final int[] WALK_TIMES =
|
||||
{
|
||||
18000,
|
||||
17000,
|
||||
4500,
|
||||
16000,
|
||||
22000,
|
||||
14000,
|
||||
10500,
|
||||
14000,
|
||||
9500,
|
||||
12500,
|
||||
20500,
|
||||
14500,
|
||||
17000,
|
||||
20000,
|
||||
22000,
|
||||
11000,
|
||||
11000,
|
||||
20000,
|
||||
8000,
|
||||
5500,
|
||||
20000,
|
||||
18000,
|
||||
25000,
|
||||
28000,
|
||||
25000,
|
||||
25000,
|
||||
25000,
|
||||
25000,
|
||||
10000,
|
||||
24000,
|
||||
7000,
|
||||
12000,
|
||||
20000
|
||||
};
|
||||
private static final String[] TALK =
|
||||
{
|
||||
"You should have finished me when you had the chance!!!",
|
||||
"I will crush all of you!!!",
|
||||
"I am not finished here, come face me!!!",
|
||||
"You cowards!!! I will torture each and everyone of you!!!"
|
||||
};
|
||||
private static final int ALIVE = 0;
|
||||
private static final int DEAD = 1;
|
||||
private static int _benomWalkRouteStep = 0;
|
||||
private static int _benomIsSpawned = 0;
|
||||
private static NpcInstance _benomInstance;
|
||||
private static NpcInstance _teleportInstance;
|
||||
|
||||
public Benom()
|
||||
{
|
||||
super(-1, "ai/bosses");
|
||||
|
||||
addStartNpc(BENOM_TELEPORT);
|
||||
addTalkId(BENOM_TELEPORT);
|
||||
addFirstTalkId(BENOM_TELEPORT);
|
||||
addAttackId(BENOM);
|
||||
addKillId(BENOM);
|
||||
|
||||
final int castleOwner = CastleManager.getInstance().getCastleById(8).getOwnerId();
|
||||
final long siegeDate = CastleManager.getInstance().getCastleById(8).getSiegeDate().getTimeInMillis();
|
||||
long benomTeleporterSpawn = (siegeDate - System.currentTimeMillis()) - 86400000;
|
||||
final long benomRaidRoomSpawn = (siegeDate - System.currentTimeMillis()) - 86400000;
|
||||
long benomRaidSiegeSpawn = (siegeDate - System.currentTimeMillis());
|
||||
if (benomTeleporterSpawn < 0)
|
||||
{
|
||||
benomTeleporterSpawn = 1;
|
||||
}
|
||||
if (benomRaidSiegeSpawn < 0)
|
||||
{
|
||||
benomRaidSiegeSpawn = 1;
|
||||
}
|
||||
if (castleOwner > 0)
|
||||
{
|
||||
if (benomTeleporterSpawn >= 1)
|
||||
{
|
||||
startQuestTimer("BenomTeleSpawn", benomTeleporterSpawn, null, null);
|
||||
}
|
||||
if ((siegeDate - System.currentTimeMillis()) > 0)
|
||||
{
|
||||
startQuestTimer("BenomRaidRoomSpawn", benomRaidRoomSpawn, null, null);
|
||||
}
|
||||
startQuestTimer("BenomRaidSiegeSpawn", benomRaidSiegeSpawn, null, null);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onAdvEvent(String event, NpcInstance npc, PlayerInstance player)
|
||||
{
|
||||
switch (event)
|
||||
{
|
||||
case "BenomTeleSpawn":
|
||||
{
|
||||
_teleportInstance = addSpawn(BENOM_TELEPORT, 11013, -49629, -547, 13400, false, 0);
|
||||
break;
|
||||
}
|
||||
case "BenomRaidRoomSpawn":
|
||||
{
|
||||
if ((_benomIsSpawned == 0) && (GrandBossManager.getInstance().getBossStatus(BENOM) == 0))
|
||||
{
|
||||
_benomInstance = addSpawn(BENOM, 12047, -49211, -3009, 0, false, 0);
|
||||
_benomIsSpawned = 1;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "BenomRaidSiegeSpawn":
|
||||
{
|
||||
if (GrandBossManager.getInstance().getBossStatus(BENOM) == 0)
|
||||
{
|
||||
if (_benomIsSpawned == 0)
|
||||
{
|
||||
_benomInstance = addSpawn(BENOM, 11025, -49152, -537, 0, false, 0);
|
||||
_benomIsSpawned = 1;
|
||||
}
|
||||
else if (_benomIsSpawned == 1)
|
||||
{
|
||||
_benomInstance.teleToLocation(11025, -49152, -537);
|
||||
}
|
||||
startQuestTimer("BenomSpawnEffect", 100, null, null);
|
||||
startQuestTimer("BenomBossDespawn", 5400000, null, null);
|
||||
_teleportInstance.deleteMe();
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "BenomSpawnEffect":
|
||||
{
|
||||
_benomInstance.getAI().setIntention(CtrlIntention.AI_INTENTION_IDLE);
|
||||
_benomInstance.broadcastPacket(new SpecialCamera(_benomInstance.getObjectId(), 200, 0, 150, 0, 5000));
|
||||
_benomInstance.broadcastPacket(new SocialAction(_benomInstance.getObjectId(), 3));
|
||||
startQuestTimer("BenomWalk", 5000, _benomInstance, null);
|
||||
_benomWalkRouteStep = 0;
|
||||
break;
|
||||
}
|
||||
case "Attacking":
|
||||
{
|
||||
final Collection<PlayerInstance> knownPlayers = npc.getKnownList().getKnownPlayers().values();
|
||||
if (!knownPlayers.isEmpty())
|
||||
{
|
||||
final PlayerInstance target = knownPlayers.stream().findAny().get();
|
||||
((MonsterInstance) npc).addDamageHate(target, 0, 999);
|
||||
npc.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, target);
|
||||
startQuestTimer("Attacking", 2000, npc, player);
|
||||
}
|
||||
else
|
||||
{
|
||||
startQuestTimer("BenomWalkFinish", 2000, npc, null);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "BenomWalkFinish":
|
||||
{
|
||||
if (npc.getCastle().getSiege().isInProgress())
|
||||
{
|
||||
cancelQuestTimer("Attacking", npc, player);
|
||||
npc.teleToLocation(WALK_ROUTES[_benomWalkRouteStep], false);
|
||||
npc.setWalking();
|
||||
_benomWalkRouteStep = 0;
|
||||
startQuestTimer("BenomWalk", 2200, npc, null);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "BenomWalk":
|
||||
{
|
||||
if (_benomWalkRouteStep == 33)
|
||||
{
|
||||
_benomWalkRouteStep = 0;
|
||||
startQuestTimer("BenomWalk", 100, npc, null);
|
||||
}
|
||||
else
|
||||
{
|
||||
startQuestTimer("Talk", 100, npc, null);
|
||||
if (_benomWalkRouteStep == 14)
|
||||
{
|
||||
startQuestTimer("DoorOpen", 15000, null, null);
|
||||
startQuestTimer("DoorClose", 23000, null, null);
|
||||
}
|
||||
if (_benomWalkRouteStep == 32)
|
||||
{
|
||||
startQuestTimer("DoorOpen", 500, null, null);
|
||||
startQuestTimer("DoorClose", 4000, null, null);
|
||||
}
|
||||
npc.getAI().setIntention(CtrlIntention.AI_INTENTION_IDLE);
|
||||
npc.getAI().setIntention(CtrlIntention.AI_INTENTION_MOVE_TO, WALK_ROUTES[_benomWalkRouteStep]);
|
||||
startQuestTimer("BenomWalk", WALK_TIMES[_benomWalkRouteStep], npc, null);
|
||||
_benomWalkRouteStep = _benomWalkRouteStep + 1;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "DoorOpen":
|
||||
{
|
||||
DoorData.getInstance().getDoor(20160005).openMe();
|
||||
break;
|
||||
}
|
||||
case "DoorClose":
|
||||
{
|
||||
DoorData.getInstance().getDoor(20160005).closeMe();
|
||||
break;
|
||||
}
|
||||
case "Talk":
|
||||
{
|
||||
if (Rnd.get(100) < 40)
|
||||
{
|
||||
npc.broadcastPacket(new CreatureSay(npc.getObjectId(), ChatType.GENERAL, "Benom", TALK[Rnd.get(4)]));
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "BenomBossDespawn":
|
||||
{
|
||||
GrandBossManager.getInstance().setBossStatus(BENOM, ALIVE);
|
||||
_benomIsSpawned = 0;
|
||||
_benomInstance.deleteMe();
|
||||
break;
|
||||
}
|
||||
}
|
||||
return super.onAdvEvent(event, npc, player);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onFirstTalk(NpcInstance npc, PlayerInstance player)
|
||||
{
|
||||
final int castleOwner = CastleManager.getInstance().getCastleById(8).getOwnerId();
|
||||
final int clanId = player.getClanId();
|
||||
if ((castleOwner > 0) && (clanId > 0))
|
||||
{
|
||||
if (castleOwner == clanId)
|
||||
{
|
||||
final int x = 12558 + (Rnd.get(200) - 100);
|
||||
final int y = -49279 + (Rnd.get(200) - 100);
|
||||
player.teleToLocation(x, y, -3007);
|
||||
return null;
|
||||
}
|
||||
return "<html><body>Benom's Avatar:<br>Your clan does not own this castle. Only members of this Castle's owning clan can challenge Benom.</body></html>";
|
||||
}
|
||||
return "<html><body>Benom's Avatar:<br>Your clan does not own this castle. Only members of this Castle's owning clan can challenge Benom.</body></html>";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onAttack(NpcInstance npc, PlayerInstance attacker, int damage, boolean isPet)
|
||||
{
|
||||
cancelQuestTimer("BenomWalk", npc, null);
|
||||
cancelQuestTimer("BenomWalkFinish", npc, null);
|
||||
startQuestTimer("Attacking", 100, npc, attacker);
|
||||
return super.onAttack(npc, attacker, damage, isPet);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onKill(NpcInstance npc, PlayerInstance killer, boolean isPet)
|
||||
{
|
||||
GrandBossManager.getInstance().setBossStatus(BENOM, DEAD);
|
||||
cancelQuestTimer("BenomWalk", npc, null);
|
||||
cancelQuestTimer("BenomWalkFinish", npc, null);
|
||||
cancelQuestTimer("BenomBossDespawn", npc, null);
|
||||
cancelQuestTimer("Talk", npc, null);
|
||||
cancelQuestTimer("Attacking", npc, null);
|
||||
return super.onKill(npc, killer, isPet);
|
||||
}
|
||||
|
||||
public static void main(String[] args)
|
||||
{
|
||||
new Benom();
|
||||
}
|
||||
}
|
File diff suppressed because it is too large
Load Diff
@@ -16,8 +16,6 @@
|
||||
*/
|
||||
package ai.bosses;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
import org.l2jmobius.gameserver.ai.CtrlIntention;
|
||||
import org.l2jmobius.gameserver.datatables.sql.SpawnTable;
|
||||
import org.l2jmobius.gameserver.model.Location;
|
||||
@@ -163,28 +161,6 @@ public class Gordon extends Quest
|
||||
// startQuestTimer("Start", 1000, npc, null);
|
||||
if ((npc != null) && _isSpawned)
|
||||
{
|
||||
// check if player have Cursed Weapon and in radius
|
||||
if (npc.getNpcId() == GORDON)
|
||||
{
|
||||
final Collection<PlayerInstance> chars = npc.getKnownList().getKnownPlayers().values();
|
||||
if ((chars != null) && !chars.isEmpty())
|
||||
{
|
||||
for (PlayerInstance pc : chars)
|
||||
{
|
||||
if (pc.isCursedWeaponEquipped() && pc.isInsideRadius(npc, 5000, false, false))
|
||||
{
|
||||
npc.setRunning();
|
||||
((Attackable) npc).addDamageHate(pc, 0, 9999);
|
||||
npc.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, pc);
|
||||
_isAttacked = true;
|
||||
cancelQuestTimer("time_isAttacked", null, null);
|
||||
startQuestTimer("time_isAttacked", 180000, npc, null);
|
||||
return super.onAdvEvent(event, npc, player);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// end check
|
||||
if (_isAttacked)
|
||||
{
|
||||
return super.onAdvEvent(event, npc, player);
|
||||
|
@@ -1,183 +0,0 @@
|
||||
/*
|
||||
* 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.bosses;
|
||||
|
||||
import org.l2jmobius.gameserver.instancemanager.GlobalVariablesManager;
|
||||
import org.l2jmobius.gameserver.instancemanager.GrandBossManager;
|
||||
import org.l2jmobius.gameserver.model.Party;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.NpcInstance;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||
import org.l2jmobius.gameserver.model.quest.Quest;
|
||||
import org.l2jmobius.gameserver.model.zone.type.BossZone;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.SocialAction;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.SpecialCamera;
|
||||
|
||||
/**
|
||||
* @author Mobius
|
||||
* @note Based on python script
|
||||
*/
|
||||
public class Sailren extends Quest
|
||||
{
|
||||
// NPCs
|
||||
private static final int STATUE = 32109;
|
||||
private static final int SAILREN = 29065;
|
||||
private static final int VELO = 22196;
|
||||
private static final int PTERO = 22199;
|
||||
private static final int TREX = 22215;
|
||||
private static final int STONE = 8784;
|
||||
// Misc
|
||||
private static NpcInstance _vlcInstance;
|
||||
private static NpcInstance _ptrInstance;
|
||||
private static NpcInstance _trxInstance;
|
||||
private static NpcInstance _slrnInstance;
|
||||
|
||||
private Sailren()
|
||||
{
|
||||
super(-1, "ai/bosses");
|
||||
|
||||
addStartNpc(STATUE);
|
||||
addTalkId(STATUE);
|
||||
addKillId(VELO, PTERO, TREX, SAILREN);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onAdvEvent(String event, NpcInstance npc, PlayerInstance player)
|
||||
{
|
||||
switch (event)
|
||||
{
|
||||
case "start":
|
||||
{
|
||||
_vlcInstance = addSpawn(VELO, 27845, -5567, -1982, 45000, false, 0);
|
||||
startQuestTimer("camera", 2000, _vlcInstance, player);
|
||||
cancelQuestTimer("start", npc, null);
|
||||
break;
|
||||
}
|
||||
case "round2":
|
||||
{
|
||||
_ptrInstance = addSpawn(PTERO, 27838, -5578, -1982, 45000, false, 0);
|
||||
startQuestTimer("camera", 2000, _ptrInstance, player);
|
||||
cancelQuestTimer("round2", npc, null);
|
||||
break;
|
||||
}
|
||||
case "round3":
|
||||
{
|
||||
_trxInstance = addSpawn(TREX, 27838, -5578, -1982, 45000, false, 0);
|
||||
startQuestTimer("camera", 2000, _trxInstance, player);
|
||||
cancelQuestTimer("round3", npc, null);
|
||||
break;
|
||||
}
|
||||
case "sailren":
|
||||
{
|
||||
_slrnInstance = addSpawn(SAILREN, 27489, -6223, -1982, 45000, false, 0);
|
||||
startQuestTimer("camera", 2000, _slrnInstance, player);
|
||||
startQuestTimer("vkrovatku", 1200000, _slrnInstance, null);
|
||||
cancelQuestTimer("round4", npc, null);
|
||||
break;
|
||||
}
|
||||
case "camera":
|
||||
{
|
||||
player.broadcastPacket(new SpecialCamera(npc.getObjectId(), 400, -75, 3, -150, 5000));
|
||||
npc.broadcastPacket(new SocialAction(npc.getObjectId(), 1));
|
||||
break;
|
||||
}
|
||||
case "open":
|
||||
{
|
||||
GlobalVariablesManager.getInstance().remove("SailrenClose");
|
||||
cancelQuestTimer("open", npc, null);
|
||||
break;
|
||||
}
|
||||
case "vkrovatku":
|
||||
{
|
||||
npc.deleteMe();
|
||||
GlobalVariablesManager.getInstance().remove("SailrenClose");
|
||||
cancelQuestTimer("open", npc, null);
|
||||
cancelQuestTimer("vkrovatku", npc, null);
|
||||
break;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onTalk(NpcInstance npc, PlayerInstance player)
|
||||
{
|
||||
if (player.getInventory().getItemByItemId(STONE) != null)
|
||||
{
|
||||
if (!GlobalVariablesManager.getInstance().hasVariable("SailrenClose"))
|
||||
{
|
||||
final Party party = player.getParty();
|
||||
if (party != null)
|
||||
{
|
||||
player.destroyItemByItemId("Sailren", STONE, 1, player, true);
|
||||
GlobalVariablesManager.getInstance().set("SailrenClose", true);
|
||||
final BossZone zone = GrandBossManager.getInstance().getZone(27244, -7026, -1974);
|
||||
for (PlayerInstance member : party.getPartyMembers())
|
||||
{
|
||||
if (zone != null)
|
||||
{
|
||||
zone.allowPlayerEntry(member, 3600);
|
||||
}
|
||||
member.teleToLocation(27244, -7026, -1974);
|
||||
}
|
||||
startQuestTimer("start", 30000, npc, player);
|
||||
startQuestTimer("open", 1800000, npc, null);
|
||||
}
|
||||
else
|
||||
{
|
||||
return "<html><body><font color=LEVEL>Only with party...</font></body></html>";
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return "<html><body><font color=LEVEL>Some one else is inside...</font></body></html>";
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return "<html><body>You need quest item: <font color=LEVEL>Gazkh...</font></body></html>";
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onKill(NpcInstance npc, PlayerInstance killer, boolean isPet)
|
||||
{
|
||||
if (npc == _vlcInstance)
|
||||
{
|
||||
startQuestTimer("round2", 30000, npc, killer);
|
||||
}
|
||||
else if (npc == _ptrInstance)
|
||||
{
|
||||
startQuestTimer("round3", 60000, npc, killer);
|
||||
}
|
||||
else if (npc == _trxInstance)
|
||||
{
|
||||
startQuestTimer("sailren", 180000, npc, killer);
|
||||
}
|
||||
else if (npc == _slrnInstance)
|
||||
{
|
||||
GlobalVariablesManager.getInstance().remove("SailrenClose");
|
||||
cancelQuestTimer("open", npc, null);
|
||||
}
|
||||
return super.onKill(npc, killer, isPet);
|
||||
}
|
||||
|
||||
public static void main(String[] args)
|
||||
{
|
||||
new Sailren();
|
||||
}
|
||||
}
|
@@ -1,72 +0,0 @@
|
||||
/*
|
||||
* 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.bosses;
|
||||
|
||||
import org.l2jmobius.commons.concurrent.ThreadPool;
|
||||
import org.l2jmobius.commons.util.Rnd;
|
||||
import org.l2jmobius.gameserver.model.Location;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.NpcInstance;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||
import org.l2jmobius.gameserver.model.quest.Quest;
|
||||
|
||||
/**
|
||||
* @author Mobius
|
||||
*/
|
||||
public class Tyrannosaurus extends Quest
|
||||
{
|
||||
// NPCs
|
||||
private static final int[] TREX =
|
||||
{
|
||||
22215, // Tyrannosaurus
|
||||
22216, // Tyrannosaurus
|
||||
22217, // Tyrannosaurus
|
||||
};
|
||||
// Locations
|
||||
private static final Location[] SPAWNS =
|
||||
{
|
||||
new Location(19506, -15772, -3080, 49220),
|
||||
new Location(22253, -17062, -2976, 47449),
|
||||
new Location(23348, -20888, -2672, 0),
|
||||
new Location(25047, -18477, -2712, 0),
|
||||
new Location(27331, -16669, -2664, 21125),
|
||||
new Location(27714, -14692, -2552, 0),
|
||||
new Location(26555, -11574, -2464, 28153),
|
||||
new Location(21295, -11123, -2784, 41953),
|
||||
new Location(19605, -11234, -2816, 57601),
|
||||
new Location(19220, -11806, -2776, 0),
|
||||
new Location(26740, -16596, -2688, 13790)
|
||||
};
|
||||
|
||||
public Tyrannosaurus()
|
||||
{
|
||||
super(-1, "ai/bosses");
|
||||
addKillId(TREX);
|
||||
addSpawn(TREX[Rnd.get(TREX.length)], SPAWNS[Rnd.get(SPAWNS.length)], false, 0);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onKill(NpcInstance npc, PlayerInstance killer, boolean isPet)
|
||||
{
|
||||
ThreadPool.schedule(() -> addSpawn(TREX[Rnd.get(TREX.length)], SPAWNS[Rnd.get(SPAWNS.length)], false, 0), 1800000);
|
||||
return super.onKill(npc, killer, isPet);
|
||||
}
|
||||
|
||||
public static void main(String[] args)
|
||||
{
|
||||
new Tyrannosaurus();
|
||||
}
|
||||
}
|
@@ -49,8 +49,6 @@ public class NewbieHelper extends Quest
|
||||
private static final int SOULSHOT_NOVICE = 5789;
|
||||
private static final int SPIRITSHOT_NOVICE = 5790;
|
||||
private static final int BLUE_GEM = 6353;
|
||||
private static final int TOKEN = 8542;
|
||||
private static final int SCROLL = 8594;
|
||||
|
||||
private static final Map<String, Event> _events = new HashMap<>();
|
||||
static
|
||||
@@ -364,11 +362,6 @@ public class NewbieHelper extends Quest
|
||||
{
|
||||
qs1.playTutorialVoice(isMage && !isOrcMage ? "tutorial_voice_027" : "tutorial_voice_026");
|
||||
qs1.giveItems(isMage && !isOrcMage ? SPIRITSHOT_NOVICE : SOULSHOT_NOVICE, isMage && !isOrcMage ? 100 : 200);
|
||||
qs1.giveItems(TOKEN, 12);
|
||||
if (Rnd.get(100) < 50)
|
||||
{
|
||||
qs1.giveItems(SCROLL, 2);
|
||||
}
|
||||
qs2.set("reward", "1");
|
||||
qs1.setState(State.COMPLETED);
|
||||
}
|
||||
|
@@ -1,4 +0,0 @@
|
||||
<html><body>Adventurers' Guide Miss Queen:<br>
|
||||
You've already received a weapon exchange coupon for training adventurers! Do you actually think you can fool Miss Queen?<br>
|
||||
(Players are only allowed one trainee weapon exchange coupon per account.)
|
||||
</body></html>
|
@@ -1,4 +0,0 @@
|
||||
<html><body>Adventurers' Guide Miss Queen:<br>
|
||||
Here's the coupon you requested. You're now eligible to rent a weapon from the Adventurer's Guild warehouse. This coupon is non-transferable, and you are responsible for any damages or loss of weaponry.<br>
|
||||
You may only rent one weapon at a time, and if at any time before you reach level 25 you become unhappy with your choice, you may turn in the weapon for another coupon. Good luck!
|
||||
</body></html>
|
@@ -1,4 +0,0 @@
|
||||
<html><body>Adventurers' Guide Miss Queen:<br>
|
||||
You're not qualified to receive a weapon exchange coupon for trainees! It's reserved for adventurers visiting the world of Lineage II for the first time. Unless your level is 6 or above and you are an adventurer new to the world of Lineage II, I won't give you a coupon!<br>
|
||||
(<font color="LEVEL">Only new characters of level 6 or above are eligible for the coupon.)</font>
|
||||
</body></html>
|
@@ -1,4 +0,0 @@
|
||||
<html><body>Adventurers' Guide Miss Queen:<br>
|
||||
You've already received a weapon exchange coupon for travelers! Do you really think you can fool Miss Queen?<br>
|
||||
(Players may receive only one weapon exchange coupon per account.)
|
||||
</body></html>
|
@@ -1,5 +0,0 @@
|
||||
<html><body>Adventurers' Guide Miss Queen:<br>
|
||||
Have you enjoyed your adventure so far? Here is the weapon exchange coupon for travelers.<br>
|
||||
This coupon allows you to receive a grade D weapon from the warehouse of the Adventurer's Guild. The coupon is non-transferable, and you are responsible for any loss or damage of it or the weapon.<br>
|
||||
You may only rent one weapon at a time, and if at any time before you reach level 25 you become unhappy with your choice, you may turn in the weapon for another coupon. Good luck!
|
||||
</body></html>
|
@@ -1,4 +0,0 @@
|
||||
<html><body>Adventurers' Guide Miss Queen:<br>
|
||||
You're not qualified to receive more than one weapon exchange coupon for travelers! It's reserved for adventurers visiting the world of Lineage II for the first time who have completed their first occupation change!<br>
|
||||
(<font color="LEVEL">Only new characters who have completed their first occupation change are eligible to receive a coupon.)</font>
|
||||
</body></html>
|
@@ -1,11 +0,0 @@
|
||||
<html><body>Adventurers' Guide Miss Queen:<br>
|
||||
Welcome! I've been dispatched from the Adventurer's Guild to guide characters new to the world of Lineage II.<br>
|
||||
In celebration of the arrival of a new era, the guild has temporarily opened its weapons warehouse to adventurers in training and travelers that have reached level 6 and completed their first occupation change. If you meet these requirements, I'll give you a <font color="LEVEL">weapon exchange coupon</font> and permit you to <font color="LEVEL">rent the weapon of your choice from the Adventurer's Guild weapons warehouse</font>. Bear in mind, this coupon is only valid until you reach level 25. Are you ready to choose your weapon?<br>
|
||||
(Any character with a PK count of 1 or above is not eligible to receive the coupon.)<br>
|
||||
<a action="bypass -h Quest MissQueen newbie_coupon">"Please give me a weapon exchange coupon for trainees."</a><br>
|
||||
<a action="bypass -h npc_%objectId%_exc_multisell 317606002">"I want to return a weapon for trainees."</a><br>
|
||||
<a action="bypass -h npc_%objectId%_multisell 317606001">"I want to visit the weapons warehouse for trainees."</a><br>
|
||||
<a action="bypass -h Quest MissQueen traveller_coupon">"Please give me a weapon exchange coupon for travelers."</a><br>
|
||||
<a action="bypass -h npc_%objectId%_exc_multisell 317606004">"I want to return a weapon for travelers."</a><br>
|
||||
<a action="bypass -h npc_%objectId%_multisell 317606003">"I want to visit the weapons warehouse for travelers."</a>
|
||||
</body></html>
|
@@ -1,128 +0,0 @@
|
||||
/*
|
||||
* 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 custom.MissQueen;
|
||||
|
||||
import org.l2jmobius.gameserver.model.Location;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.NpcInstance;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||
import org.l2jmobius.gameserver.model.quest.Quest;
|
||||
import org.l2jmobius.gameserver.model.quest.QuestState;
|
||||
import org.l2jmobius.gameserver.model.quest.State;
|
||||
|
||||
public class MissQueen extends Quest
|
||||
{
|
||||
// Rewards
|
||||
private static final int COUPON_ONE = 7832;
|
||||
private static final int COUPON_TWO = 7833;
|
||||
|
||||
// Miss Queen locations
|
||||
private static final Location[] LOCATIONS =
|
||||
{
|
||||
// new Location(116224, -181728, -1378, 0), // Dwarven Village
|
||||
new Location(114885, -178092, -832, 0), // Dwarven Village
|
||||
new Location(45472, 49312, -3072, 53000), // Elven Village
|
||||
// new Location(47648, 51296, -2994, 38500), // Elven Village
|
||||
// new Location(11340, 15972, -4582, 14000), // Dark Elf Village
|
||||
new Location(10968, 17540, -4572, 55000), // Dark Elf Village
|
||||
new Location(-14048, 123184, -3120, 32000), // Gludio Village
|
||||
new Location(-44979, -113508, -199, 32000), // Orc Village
|
||||
new Location(-84119, 243254, -3730, 8000), // Talking Island
|
||||
// new Location(-84336, 242156, -3730, 24500), // Talking Island
|
||||
new Location(-82032, 150160, -3127, 16500) // Gludin Village
|
||||
};
|
||||
|
||||
public MissQueen()
|
||||
{
|
||||
super(-1, "custom");
|
||||
|
||||
// Spawn the 11 NPCs.
|
||||
for (Location loc : LOCATIONS)
|
||||
{
|
||||
addSpawn(31760, loc, false, 0);
|
||||
}
|
||||
|
||||
addStartNpc(31760);
|
||||
addTalkId(31760);
|
||||
addFirstTalkId(31760);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onAdvEvent(String event, NpcInstance npc, PlayerInstance player)
|
||||
{
|
||||
String htmltext = event;
|
||||
final QuestState st = player.getQuestState(getName());
|
||||
if (event.equals("newbie_coupon"))
|
||||
{
|
||||
if ((player.getClassId().level() == 0) && (player.getLevel() >= 6) && (player.getLevel() <= 25) && (player.getPkKills() <= 0))
|
||||
{
|
||||
if (st.getInt("reward_1") == 1)
|
||||
{
|
||||
htmltext = "31760-01.htm";
|
||||
}
|
||||
else
|
||||
{
|
||||
st.setState(State.STARTED);
|
||||
htmltext = "31760-02.htm";
|
||||
st.set("reward_1", "1");
|
||||
st.giveItems(COUPON_ONE, 1);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
htmltext = "31760-03.htm";
|
||||
}
|
||||
}
|
||||
else if (event.equals("traveller_coupon"))
|
||||
{
|
||||
if ((player.getClassId().level() == 1) && (player.getLevel() >= 6) && (player.getLevel() <= 25) && (player.getPkKills() <= 0))
|
||||
{
|
||||
if (st.getInt("reward_2") == 1)
|
||||
{
|
||||
htmltext = "31760-04.htm";
|
||||
}
|
||||
else
|
||||
{
|
||||
st.setState(State.STARTED);
|
||||
htmltext = "31760-05.htm";
|
||||
st.set("reward_2", "1");
|
||||
st.giveItems(COUPON_TWO, 1);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
htmltext = "31760-06.htm";
|
||||
}
|
||||
}
|
||||
return htmltext;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onFirstTalk(NpcInstance npc, PlayerInstance player)
|
||||
{
|
||||
QuestState st = player.getQuestState(getName());
|
||||
if (st == null)
|
||||
{
|
||||
st = newQuestState(player);
|
||||
}
|
||||
return "31760.htm";
|
||||
}
|
||||
|
||||
public static void main(String[] args)
|
||||
{
|
||||
new MissQueen();
|
||||
}
|
||||
}
|
@@ -1,88 +0,0 @@
|
||||
/*
|
||||
* 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 custom.ShadowWeapon;
|
||||
|
||||
import org.l2jmobius.gameserver.model.actor.instance.NpcInstance;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||
import org.l2jmobius.gameserver.model.quest.Quest;
|
||||
import org.l2jmobius.gameserver.model.quest.QuestState;
|
||||
|
||||
import village_master.FirstClassChange.FirstClassChange;
|
||||
import village_master.SecondClassChange.SecondClassChange;
|
||||
|
||||
/**
|
||||
* @authors: DrLecter (python), Nyaran (java)
|
||||
*/
|
||||
public class ShadowWeapon extends Quest
|
||||
{
|
||||
// itemId for shadow weapon coupons, it's not used more than once but increases readability
|
||||
private static final int D_COUPON = 8869;
|
||||
private static final int C_COUPON = 8870;
|
||||
|
||||
public ShadowWeapon()
|
||||
{
|
||||
super(-1, "custom");
|
||||
|
||||
addStartNpc(FirstClassChange.FIRSTCLASSNPCS);
|
||||
addTalkId(FirstClassChange.FIRSTCLASSNPCS);
|
||||
|
||||
addStartNpc(SecondClassChange.SECONDCLASSNPCS);
|
||||
addTalkId(SecondClassChange.SECONDCLASSNPCS);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onTalk(NpcInstance npc, PlayerInstance player)
|
||||
{
|
||||
final QuestState st = player.getQuestState(getName());
|
||||
String htmltext = getNoQuestMsg();
|
||||
if (st == null)
|
||||
{
|
||||
return htmltext;
|
||||
}
|
||||
|
||||
final boolean hasD = st.hasQuestItems(D_COUPON);
|
||||
final boolean hasC = st.hasQuestItems(C_COUPON);
|
||||
if (hasD || hasC)
|
||||
{
|
||||
// let's assume character had both c & d-grade coupons, we'll confirm later
|
||||
String multisell = "306893003";
|
||||
if (!hasD)
|
||||
{
|
||||
multisell = "306893002";
|
||||
}
|
||||
else if (!hasC)
|
||||
{
|
||||
multisell = "306893001";
|
||||
}
|
||||
|
||||
// finally, return htm with proper multisell value in it.
|
||||
htmltext = getHtmlText("exchange.htm").replace("%msid%", multisell);
|
||||
}
|
||||
else
|
||||
{
|
||||
htmltext = "exchange-no.htm";
|
||||
}
|
||||
|
||||
st.exitQuest(true);
|
||||
return htmltext;
|
||||
}
|
||||
|
||||
public static void main(String[] args)
|
||||
{
|
||||
new ShadowWeapon();
|
||||
}
|
||||
}
|
@@ -1,5 +0,0 @@
|
||||
<html><body>
|
||||
You don't have a Shadow Weapon exchange coupon.<br>
|
||||
A Shadow Weapon exchange coupon is a <font color="LEVEL">gift received from a Grand Master, Magister or High Priest when you complete a class transfer.</font><br>
|
||||
Bring a Shadow Weapon exchange coupon here to receive a Shadow Weapon.
|
||||
</body></html>
|
@@ -1,6 +0,0 @@
|
||||
<html><body>
|
||||
A Shadow Weapon is a special weapon that is made in cooperation between the Ivory Tower and the Black Anvil Guild. It is created by magically projecting the power of a weapon onto another catalytic object. While that means that it can only be used while the magic charge remains, it has made it possible to mass produce projectile weapons.<br>
|
||||
Its performance is no different than if you used the original weapon, except that it cannot possess the special ability to absorb souls or refine through a Stone of Life. Also, although it acts as a weapon, it is actually in the magic category -- once opened, it cannot be passed on to someone else. Consider it an aid on your new path until you lay your hands on some real weapons.<br>
|
||||
If you have a Shadow Weapon exchange coupon, you can receive a Shadow Weapon right for you.<br>
|
||||
<a action="bypass -h npc_%objectId%_multisell %msid%">Give the Shadow Weapon exchange coupon.</a>
|
||||
</body></html>
|
@@ -1,5 +0,0 @@
|
||||
<html><body>Mercenary Captain Pierce:<br>
|
||||
I'm glad to have you on the force! Makes me more optimistic about our chances...<br>
|
||||
Anyway, I called you here to ask you a favor. I sent a group of scouts into the Swamp of Screams to investigate the ongoing conflict there, but we've lost contact with one of them. I need someone to find out what happened. Are you up to the task?<br>
|
||||
<a action="bypass -h Quest Q109_InSearchOfTheNest 31553-01.htm">"Sure, no big deal. I'll do it."</a>
|
||||
</body></html>
|
@@ -1,4 +0,0 @@
|
||||
<html><body>Mercenary Captain Pierce:<br>
|
||||
What's your business here?<br>
|
||||
(This quest may only be undertaken by a character of level 66 and above. A Golden Ram Badge must be worn aswell.)
|
||||
</body></html>
|
@@ -1,5 +0,0 @@
|
||||
<html><body>Mercenary Captain Pierce:<br>
|
||||
Excellent! I hate to throw you into the fire on your first mission, but it's vital that we find out what happened to our scout!<br>
|
||||
Cool your heels a minute and I'll tell you where to focus your search.<br>
|
||||
We lost contact with him inside the Swamp Of Screams. If you follow the path you can't miss it. I also marked it on your map, so don't get lost! Last thing i need is another missing person.
|
||||
</body></html>
|
@@ -1,4 +0,0 @@
|
||||
<html><body>Mercenary Captain Pierce:<br>
|
||||
It's vital that we find out what happened to our scout!<br>
|
||||
We lost contact with him inside the Swamp Of Screams. If you follow your map, you can't miss it.
|
||||
</body></html>
|
@@ -1,5 +0,0 @@
|
||||
<html><body>Mercenary Captain Pierce:<br>
|
||||
I can tell by your looks that you found something. Well? Is my scout OK?<br>
|
||||
Spit it out, soldier! What do you know?<br>
|
||||
<a action="bypass -h Quest Q109_InSearchOfTheNest 31553-03.htm">"Read this memo."</a>
|
||||
</body></html>
|
@@ -1,5 +0,0 @@
|
||||
<html><body>Mercenary Captain Pierce:<br>
|
||||
I see.. It is as I feared... He's dead.<br>
|
||||
Well, thank you for risking your neck to track him down. We'll learn a lot from the intel he left behind. I'm sure that's what he would've wanted.<br>
|
||||
I'll keep my eye out for you from now on. For now, your work here is done. Speak with <font color="LEVEL">Kahman</font> over there.
|
||||
</body></html>
|
@@ -1,4 +0,0 @@
|
||||
<html><body>Mercenary Kahman:<br>
|
||||
State your business here! We received no order.<br>
|
||||
<a action="bypass -h Quest Q109_InSearchOfTheNest 31554-02.htm">"Pierce sent me."</a>
|
||||
</body></html>
|
@@ -1,3 +0,0 @@
|
||||
<html><body>Mercenary Kahman:<br>
|
||||
Oh, yeah! It's you! Right, then, here you go! Don't be too disappointed if it's less than you'd like. Come back later and there'll be more work for you.
|
||||
</body></html>
|
@@ -1,4 +0,0 @@
|
||||
<html><body>
|
||||
The corpse of Pierce's Scout, who came here looking for the entrance. Search for any clues he might have left.<br>
|
||||
<a action="bypass -h Quest Q109_InSearchOfTheNest 32015-02.htm">"Search the corpse."</a>
|
||||
</body></html>
|
@@ -1,3 +0,0 @@
|
||||
<html><body>
|
||||
(Beneath the corpse you find a memo. You should take it to mercenary Captain Pierce.)
|
||||
</body></html>
|
@@ -1,155 +0,0 @@
|
||||
/*
|
||||
* 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.Q109_InSearchOfTheNest;
|
||||
|
||||
import org.l2jmobius.gameserver.model.actor.instance.NpcInstance;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||
import org.l2jmobius.gameserver.model.quest.Quest;
|
||||
import org.l2jmobius.gameserver.model.quest.QuestState;
|
||||
import org.l2jmobius.gameserver.model.quest.State;
|
||||
|
||||
public class Q109_InSearchOfTheNest extends Quest
|
||||
{
|
||||
// NPCs
|
||||
private static final int PIERCE = 31553;
|
||||
private static final int KAHMAN = 31554;
|
||||
private static final int SCOUT_CORPSE = 32015;
|
||||
|
||||
// Items
|
||||
private static final int SCOUT_MEMO = 8083;
|
||||
private static final int RECRUIT_BADGE = 7246;
|
||||
private static final int SOLDIER_BADGE = 7247;
|
||||
|
||||
public Q109_InSearchOfTheNest()
|
||||
{
|
||||
super(109, "In Search of the Nest");
|
||||
|
||||
registerQuestItems(SCOUT_MEMO);
|
||||
|
||||
addStartNpc(PIERCE);
|
||||
addTalkId(PIERCE, SCOUT_CORPSE, KAHMAN);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onAdvEvent(String event, NpcInstance npc, PlayerInstance player)
|
||||
{
|
||||
final String htmltext = event;
|
||||
final QuestState st = player.getQuestState(getName());
|
||||
if (st == null)
|
||||
{
|
||||
return htmltext;
|
||||
}
|
||||
|
||||
if (event.equals("31553-01.htm"))
|
||||
{
|
||||
st.setState(State.STARTED);
|
||||
st.set("cond", "1");
|
||||
st.playSound(QuestState.SOUND_ACCEPT);
|
||||
}
|
||||
else if (event.equals("32015-02.htm"))
|
||||
{
|
||||
st.set("cond", "2");
|
||||
st.playSound(QuestState.SOUND_MIDDLE);
|
||||
st.giveItems(SCOUT_MEMO, 1);
|
||||
}
|
||||
else if (event.equals("31553-03.htm"))
|
||||
{
|
||||
st.set("cond", "3");
|
||||
st.playSound(QuestState.SOUND_MIDDLE);
|
||||
st.takeItems(SCOUT_MEMO, 1);
|
||||
}
|
||||
else if (event.equals("31554-02.htm"))
|
||||
{
|
||||
st.rewardItems(57, 5168);
|
||||
st.playSound(QuestState.SOUND_FINISH);
|
||||
st.exitQuest(false);
|
||||
}
|
||||
|
||||
return htmltext;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onTalk(NpcInstance npc, PlayerInstance player)
|
||||
{
|
||||
final QuestState st = player.getQuestState(getName());
|
||||
String htmltext = getNoQuestMsg();
|
||||
if (st == null)
|
||||
{
|
||||
return htmltext;
|
||||
}
|
||||
|
||||
switch (st.getState())
|
||||
{
|
||||
case State.CREATED:
|
||||
// Must worn one or other Golden Ram Badge in order to be accepted.
|
||||
if ((player.getLevel() >= 66) && st.hasAtLeastOneQuestItem(RECRUIT_BADGE, SOLDIER_BADGE))
|
||||
{
|
||||
htmltext = "31553-00.htm";
|
||||
}
|
||||
else
|
||||
{
|
||||
htmltext = "31553-00a.htm";
|
||||
}
|
||||
break;
|
||||
|
||||
case State.STARTED:
|
||||
final int cond = st.getInt("cond");
|
||||
switch (npc.getNpcId())
|
||||
{
|
||||
case PIERCE:
|
||||
if (cond == 1)
|
||||
{
|
||||
htmltext = "31553-01a.htm";
|
||||
}
|
||||
else if (cond == 2)
|
||||
{
|
||||
htmltext = "31553-02.htm";
|
||||
}
|
||||
else if (cond == 3)
|
||||
{
|
||||
htmltext = "31553-03.htm";
|
||||
}
|
||||
break;
|
||||
|
||||
case SCOUT_CORPSE:
|
||||
if (cond == 1)
|
||||
{
|
||||
htmltext = "32015-01.htm";
|
||||
}
|
||||
else if (cond == 2)
|
||||
{
|
||||
htmltext = "32015-02.htm";
|
||||
}
|
||||
break;
|
||||
|
||||
case KAHMAN:
|
||||
if (cond == 3)
|
||||
{
|
||||
htmltext = "31554-01.htm";
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
case State.COMPLETED:
|
||||
htmltext = getAlreadyCompletedMsg();
|
||||
break;
|
||||
}
|
||||
|
||||
return htmltext;
|
||||
}
|
||||
}
|
@@ -1,4 +0,0 @@
|
||||
<html><body>Spellbook Seller Anton:<br>
|
||||
Come back when you are more experienced!<br>
|
||||
(This quest may only be undertaken by a character of level 75 and above.)
|
||||
</body></html>
|
@@ -1,5 +0,0 @@
|
||||
<html><body>Spellbook Seller Anton:<br>
|
||||
Have you heard of the book entitled "Traces of Living Beings in Ancient Times?" While clearing out the library's underground warehouse one day, I discovered a very old, very worn-out book filed with snatches of some ancient language. Believe me when I tell you that my years of working here have made me pretty familiar with most of the ancient tongues, but this language is totally strange to me. I hope to be able to eventually translate it, but right now it has me completely stymied!<br>
|
||||
In any event, I placed it on my shelf and, to my chagrin, eventually forgot about it. But recently I have heard that it may be a very valuable tome -- very valuable indeed!<br>
|
||||
<a action="bypass -h Quest Q110_ToThePrimevalIsle 31338-01a.htm">"Ask why it is valuable."</a>
|
||||
</body></html>
|
@@ -1,5 +0,0 @@
|
||||
<html><body>Spellbook Seller Anton:<br>
|
||||
A few days ago, Clark -- the most avid reader in all Rune Town -- stopped by andasket to see all the books I had cleared out from the underground warehouse. He seemed to be knowledgeable about the subject, so I showed this ancient book to him.<br>
|
||||
You should have seen Clark's face! He cried out and grasped the book to him as though he was embracing a long-lost friend. He told me that, long ago, he was a member of the original Primeval Isle Expedition and a close friend of the expedition's leader, Captain Marquez. This book, he told me, is the only one of its kind. It contains much of the mythology and history of the Primeval Isle. Marquez himself has searched for it for years, but had all but given up hope of ever finding it.<br>
|
||||
<a action="bypass -h Quest Q110_ToThePrimevalIsle 31338-01b.htm">"What an amazing coincidence!"</a>
|
||||
</body></html>
|
@@ -1,6 +0,0 @@
|
||||
<html><body>Spellbook Seller Anton:<br>
|
||||
You're right. It is amazing, isn't it?<br>
|
||||
Clark told Marquez about my discovery, and Marquez wrote to me asking that he be allowed to be obtain the book to assist the writing of his own history of the island. In its wisdom, the fathers of our library decided that the interests of scholarship would be best served by loaning the book to Marquez. But we need someone, preferably an adventurer, willing to transport it to him on Primeval Isle.<br>
|
||||
I don't think the task should be especially difficult, but of course anything so unique and valuable is bount to attract the attention of...well, less savory sorts of people. That's why we want someone with the skill to handle any trouble that may come along. What do you think? Would you like to do it?<br>
|
||||
<a action="bypass -h Quest Q110_ToThePrimevalIsle 31338-02.htm">"Say that you will"</a>
|
||||
</body></html>
|
@@ -1,4 +0,0 @@
|
||||
<html><body>Spellbook Seller Anton:<br>
|
||||
Please take that book to Marquez at the wharf on Primeval Isle.<br>
|
||||
I know that you'll enjoy meeting him. An old adventurer himself, he always has time to talk to a young up-and-comer such as yourself.
|
||||
</body></html>
|
@@ -1,4 +0,0 @@
|
||||
<html><body>Spellbook Seller Anton:<br>
|
||||
Excellent! Excellent! Marquez will be so pleased! Let me fetch the book for you so you can take it to Marquez. You will find him in the <font color="LEVEL">front area of the wharf on Primeval Isle.</font> Obviously, you'll need to take a ship from Rune Port to reach the island.<br>
|
||||
May your journey be uneventful!
|
||||
</body></html>
|
@@ -1,4 +0,0 @@
|
||||
<html><body>Marquez:<br>
|
||||
It doesn't look as though you are here to travel. Do you have anything else to say to me?<br>
|
||||
<a action="bypass -h Quest Q110_ToThePrimevalIsle 32113-02.htm">"Tell him that you've brought the book about primitive creatures."</a>
|
||||
</body></html>
|
@@ -1,6 +0,0 @@
|
||||
<html><body>Marquez:<br>
|
||||
Oh, you're the gutsy one Anton mentioned! Ha-ha-ha! Perhaps you haven't heard of me, though? At first, my sole purpose in founding this place was to obtain freedom and wealth. But I was soon attracted to the innocence and mystery of the island itself. I led an expedition deep into the island's interior, fascinated by all we encountered.<br>
|
||||
It was not without its perils, though -- we were attacked by those powerful dinosaurs and the Elrokians themeselves. Many of our group lost their lives. But some good did come from our efforts -- we estabilished ties of friendship with the Elrokians.<br>
|
||||
I know that I am too old now to venture again into the wild interior, but the island's mystery still quickens my heart.<br>
|
||||
<a action="bypass -h Quest Q110_ToThePrimevalIsle 32113-02a.htm">"Tell him that he still looks like an explorer."</a>
|
||||
</body></html>
|
@@ -1,6 +0,0 @@
|
||||
<html><body>Marquez:<br>
|
||||
Ha ha! Thank you for saying so. But my aching body knows the truth; those days are ended for me. Lately I have at least tried to pass my knowledge to younger, stronger adventures by writing an account of my experiences on the island.<br>
|
||||
I started by recounting my own experiences and stories I learned from the natives. But then I heard of an ancient book detailing the history of Primeval Isle, and I have searched for it for years now without success. I was ready to give up...until Clark sent me a message that he has found it. Ah, I see by your expression that you are as curious about its contents as I am!<br>
|
||||
The ancient language is no dubt foreign to you, but I can translate a few passages if you are interested in hearing them. Shall I do so?<br>
|
||||
<a action="bypass -h Quest Q110_ToThePrimevalIsle 32113-03.htm">"Tell him that you are interested in hearing the translation."</a>
|
||||
</body></html>
|
@@ -1,5 +0,0 @@
|
||||
<html><body>Marquez:<br>
|
||||
Excellent! I see in you the spirit of my younger days! Very well, let me begin:<br>
|
||||
<font color="LEVEL">In the days of old</font>, when the circle of the gods was broken, countless races were spawned from that circle. The greatest of them were the gods themselves; the next greatest were the Giants. And the gods gave the Giants authority to rule over the world. All scholars know this story, but in these days men wonder what has become of all creatures brought forth into the world at the breaking of the circle.<br>
|
||||
An interesting beginnig, eh? Clearly this was a learned author; perhaps I will discover in its pages new knowledge about ancient Primeval Isle. I can hardly wait to begin my translation! Thank you for bringing this prize to me.
|
||||
</body></html>
|
@@ -1,108 +0,0 @@
|
||||
/*
|
||||
* 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.Q110_ToThePrimevalIsle;
|
||||
|
||||
import org.l2jmobius.gameserver.model.actor.instance.NpcInstance;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||
import org.l2jmobius.gameserver.model.quest.Quest;
|
||||
import org.l2jmobius.gameserver.model.quest.QuestState;
|
||||
import org.l2jmobius.gameserver.model.quest.State;
|
||||
|
||||
public class Q110_ToThePrimevalIsle extends Quest
|
||||
{
|
||||
// NPCs
|
||||
private static final int ANTON = 31338;
|
||||
private static final int MARQUEZ = 32113;
|
||||
|
||||
// Item
|
||||
private static final int ANCIENT_BOOK = 8777;
|
||||
|
||||
public Q110_ToThePrimevalIsle()
|
||||
{
|
||||
super(110, "To the Primeval Isle");
|
||||
|
||||
registerQuestItems(ANCIENT_BOOK);
|
||||
|
||||
addStartNpc(ANTON);
|
||||
addTalkId(ANTON, MARQUEZ);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onAdvEvent(String event, NpcInstance npc, PlayerInstance player)
|
||||
{
|
||||
final String htmltext = event;
|
||||
final QuestState st = player.getQuestState(getName());
|
||||
if (st == null)
|
||||
{
|
||||
return htmltext;
|
||||
}
|
||||
|
||||
if (event.equals("31338-02.htm"))
|
||||
{
|
||||
st.setState(State.STARTED);
|
||||
st.set("cond", "1");
|
||||
st.playSound(QuestState.SOUND_ACCEPT);
|
||||
st.giveItems(ANCIENT_BOOK, 1);
|
||||
}
|
||||
else if (event.equals("32113-03.htm") && st.hasQuestItems(ANCIENT_BOOK))
|
||||
{
|
||||
st.takeItems(ANCIENT_BOOK, 1);
|
||||
st.rewardItems(57, 169380);
|
||||
st.playSound(QuestState.SOUND_FINISH);
|
||||
st.exitQuest(false);
|
||||
}
|
||||
|
||||
return htmltext;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onTalk(NpcInstance npc, PlayerInstance player)
|
||||
{
|
||||
final QuestState st = player.getQuestState(getName());
|
||||
String htmltext = getNoQuestMsg();
|
||||
if (st == null)
|
||||
{
|
||||
return htmltext;
|
||||
}
|
||||
|
||||
switch (st.getState())
|
||||
{
|
||||
case State.CREATED:
|
||||
htmltext = (player.getLevel() < 75) ? "31338-00.htm" : "31338-01.htm";
|
||||
break;
|
||||
|
||||
case State.STARTED:
|
||||
switch (npc.getNpcId())
|
||||
{
|
||||
case ANTON:
|
||||
htmltext = "31338-01c.htm";
|
||||
break;
|
||||
|
||||
case MARQUEZ:
|
||||
htmltext = "32113-01.htm";
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
case State.COMPLETED:
|
||||
htmltext = getAlreadyCompletedMsg();
|
||||
break;
|
||||
}
|
||||
|
||||
return htmltext;
|
||||
}
|
||||
}
|
@@ -1,4 +0,0 @@
|
||||
<html><body>Marquez:<br>
|
||||
I'm sorry, but I can't send you on that mission. You got no idea how vicious are those dinosaurs.<br>
|
||||
(This quest may only be undertaken by a character of level 75 and above.)
|
||||
</body></html>
|
@@ -1,4 +0,0 @@
|
||||
<html><body>Marquez:<br>
|
||||
Ah, my young adventurer... So, did you have a look around this Primeval Isle? As you probably know already, there are many unique creatures on this island. There is also an ancient race of men, the Elroki tribe. Though they may seem primitive to your eyes in some respects, do not underestimate them! Theirs is a culture rich in history and tradition, and they have skills unknown to more "civilized" races. How else could they have survived all these years surrounded by those vicious dinosaurs?<br>
|
||||
<a action="bypass -h Quest Q111_ElrokianHuntersProof 32113-001a.htm">Ask how the Elrokians manage the dinosaurs.</a>
|
||||
</body></html>
|
@@ -1,6 +0,0 @@
|
||||
<html><body>Marquez:<br>
|
||||
Once, I accompanied the Elrokians on a dinosaur hunt... It was a remarkable experience!<br>
|
||||
The Elrokians first weaken the creatures by wielding a strange-looking device unique to their tribe. Are you by chance interested in learning the skill?<br>
|
||||
<a action="bypass -h Quest Q111_ElrokianHuntersProof 32113-001b.htm">"Oh yes! I certainly wish to learn the skill."</a><br>
|
||||
<a action="bypass -h Quest Q111_ElrokianHuntersProof 32113-001c.htm">"No thank you, I'm really not interested in learning any "primitive" skills."</a>
|
||||
</body></html>
|
@@ -1,4 +0,0 @@
|
||||
<html><body>Marquez:<br>
|
||||
Ah, then you must seek out the leader of the Elroki tribe, Chief Mushika, who once explored with me. Tell him that I sent you and perhaps he will more readily accept you.<br>
|
||||
<a action="bypass -h Quest Q111_ElrokianHuntersProof 32113-002.htm">"Where is the chief?"</a>
|
||||
</body></html>
|
@@ -1,3 +0,0 @@
|
||||
<html><body>Marquez:<br>
|
||||
You're totally wrong if you think Elroki tribe is "primitive". Anyway, talk me back when you have changed of opinion.
|
||||
</body></html>
|
@@ -1,3 +0,0 @@
|
||||
<html><body>Marquez:<br>
|
||||
The chief lives in the Elroki village on the southern Primeval Plains. His people shun outsiders, but you may have some luck if you first contact a native warrior I know, <font color="LEVEL">Orahochin</font>, who lives near the foot of the mountain that lies between the southern shore of the Primeval Plains and the Lost Nest.
|
||||
</body></html>
|
@@ -1,4 +0,0 @@
|
||||
<html><body>Marquez:<br>
|
||||
Did you meet Mushika? Did you discover something about the mysterious skill I told you about?<br>
|
||||
<a action="bypass -h Quest Q111_ElrokianHuntersProof 32113-004.htm">"I think I have to get close to them in order to do anything. Can you tell me anything else?"</a>
|
||||
</body></html>
|
@@ -1,7 +0,0 @@
|
||||
<html><body>Marquez:<br>
|
||||
Hmmm, perhaps this will help you forge a bond with the Elrokians... During my explorations of the island, I was gravely wounded -- if not for Mushika, I would have died. He took me back to the Elrokian village, where I stayed while I recovered.<br>
|
||||
During my time there, I heard of a song called the <font color="LEVEL">"Warrior's Song"</font> that supposedly contains all the Elroki tribe's pride, pain and sadness.<br>
|
||||
They sing this song in both victory and mourning.<br>
|
||||
If you can learn the song and its meaning, perhaps you can earn the tribe's trust...<br>
|
||||
<a action="bypass -h Quest Q111_ElrokianHuntersProof 32113-005.htm">"Where can I learn the song?"</a>
|
||||
</body></html>
|
@@ -1,4 +0,0 @@
|
||||
<html><body>Marquez:<br>
|
||||
Hmmm... A member of my expedition used to speak about an old Elrokian hunter friend of his who knew the song.<br>
|
||||
<a action="bypass -h Quest Q111_ElrokianHuntersProof 32113-006.htm">"Where can I find that member of your expedition?"</a>
|
||||
</body></html>
|
@@ -1,6 +0,0 @@
|
||||
<html><body>Marquez:<br>
|
||||
Sadly, he was killed by a <font color="LEVEL">Velociraptor</font> not long ago.<br>
|
||||
...<br>
|
||||
How unfortunate!<br>
|
||||
<a action="bypass -h Quest Q111_ElrokianHuntersProof 32113-007.htm">"I'm sorry to hear that, but isn't there another way? I don't want to give up just yet!"</a>
|
||||
</body></html>
|
@@ -1,5 +0,0 @@
|
||||
<html><body>Marquez:<br>
|
||||
You know, now that I think of it, I remember that he kept a journal...<br>
|
||||
Perhaps it will contain some clue.<br>
|
||||
<a action="bypass -h Quest Q111_ElrokianHuntersProof 32113-008.htm">"Where is the journal?"</a>
|
||||
</body></html>
|
@@ -1,6 +0,0 @@
|
||||
<html><body>Marquez:<br>
|
||||
The <font color="LEVEL">Velociraptor</font> destroyed his belongings at the time of the attack. Perhaps it carried away his journal as well...<br>
|
||||
If you can defeat the <font color="LEVEL">Velociraptor</font>, we may be able to get the journal back.<br>
|
||||
Do you feel you could find his journal -- or whatever remains of it?<br>
|
||||
<a action="bypass -h Quest Q111_ElrokianHuntersProof 32113-009.htm">"Yes!"</a>
|
||||
</body></html>
|
@@ -1,3 +0,0 @@
|
||||
<html><body>Marquez:<br>
|
||||
Very good! Then head east to the <font color="LEVEL">Lost Nest</font>. Hunt the <font color="LEVEL">Velociraptor</font> and bring back the <font color="LEVEL">journal pieces</font>. The journal is a total of <font color="LEVEL">50 pages.</font> Good luck!
|
||||
</body></html>
|
@@ -1,5 +0,0 @@
|
||||
<html><body>Marquez:<br>
|
||||
Good work! You've brought all the journal pieces!<br>
|
||||
Now I can return this to his family; perhaps it will comfort them to have a memento of my brave friend...<br>
|
||||
<a action="bypass -h Quest Q111_ElrokianHuntersProof 32113-011.htm">"What does the diary say about the Warrior's Song?"</a>
|
||||
</body></html>
|
@@ -1,14 +0,0 @@
|
||||
<html><body>Marquez:<br>
|
||||
Hmmm... Let's see here...<br>
|
||||
-The contents of the journal-<br>
|
||||
... (omitted)...<br>
|
||||
There are many ferns here... It is too thick... There are dark places, too...<br>
|
||||
....(omitted)...<br>
|
||||
This place is full of dangerous and powerful creatures...<br>
|
||||
These creatures are not described in any other books I have ever read... Today, 2 of our members were killed.<br>
|
||||
...(omitted)...<br>
|
||||
We are lost in the jungle.<br>
|
||||
How will I return to the camp?<br>
|
||||
...(omitted)...<br>
|
||||
<a action="bypass -h Quest Q111_ElrokianHuntersProof 32113-012.htm">Next page.</a>
|
||||
</body></html>
|
@@ -1,8 +0,0 @@
|
||||
<html><body>Marquez:<br>
|
||||
Is this to be our fate? Lost, pursued by these vicious creatures?<br>
|
||||
...(omitted)...<br>
|
||||
We were attacked by more strange creatures, smaller than the others we have seen. These new ones seem to hunt in packs!<br>
|
||||
I have become separated from my group...<br>
|
||||
Will I survive?<br>
|
||||
<a action="bypass -h Quest Q111_ElrokianHuntersProof 32113-013.htm">Next page.</a>
|
||||
</body></html>
|
@@ -1,8 +0,0 @@
|
||||
<html><body>Marquez:<br>
|
||||
I met a friend today.<br>
|
||||
He looks just like the creatures living here but he walks upright and seems to possess intelligence.<br>
|
||||
He used a strange skill to save my life, and shared water and food with me.<br>
|
||||
If it were not for him, I would not have been able to write these words.<br>
|
||||
He saved my life.<br>
|
||||
<a action="bypass -h Quest Q111_ElrokianHuntersProof 32113-014.htm">Next several pages.</a>
|
||||
</body></html>
|
@@ -1,6 +0,0 @@
|
||||
<html><body>Marquez:<br>
|
||||
(According to the journal, it seems like the writer of this diary spent about a year with the native who saved his life.) The native's name is <font color="LEVEL">Kirikachin.</font> A skillful hunter, he is respected by all the natives.<br>
|
||||
For some reason, however, <font color="LEVEL">Kirikachin</font> cannot live in the native village or freely contact his people.<br>
|
||||
(Was this the result of some sort of duty? Or was it some kind of punishment? It seems as through there is some story concerned with it.)<br>
|
||||
<a action="bypass -h Quest Q111_ElrokianHuntersProof 32113-015.htm">Next several pages.</a>
|
||||
</body></html>
|
@@ -1,5 +0,0 @@
|
||||
<html><body>Marquez:<br>
|
||||
(It looks like lonely Kirikachin and the writer of this diary became close friends during their time together, and shared much of their knowledge with each other. My friend taught Kirikachin the famous children's song of Aden, "10 Little Midgets" and learned the <font color="LEVEL">"Warrior's Song"</font> from Kirikachin.<br>
|
||||
One time, he even repaid his debt to Kirikachin by saving his life using a healing technique of Aden. It seems the two men became as close as brothers...)<br>
|
||||
<a action="bypass -h Quest Q111_ElrokianHuntersProof 32113-016.htm">Next several pages.</a>
|
||||
</body></html>
|
@@ -1,4 +0,0 @@
|
||||
<html><body>Marquez:<br>
|
||||
(Even after he was found by the expedition, he traveled back and forth to Kirikachin's camp. In fact, it seems like he stayed with Kirikachin more frequently than he did with his fellow explorers.)<br>
|
||||
<a action="bypass -h Quest Q111_ElrokianHuntersProof 32113-017.htm">Final page.</a>
|
||||
</body></html>
|
@@ -1,4 +0,0 @@
|
||||
<html><body>Marquez:<br>
|
||||
(The last page is so blood-stained and damaged that its words are illegible. But there appears to be something stuck between the pages: an envelope.)<br>
|
||||
<a action="bypass -h Quest Q111_ElrokianHuntersProof 32113-018.htm">Remove the envelope.</a>
|
||||
</body></html>
|
@@ -1,6 +0,0 @@
|
||||
<html><body>Marquez:<br>
|
||||
This is seems to be a letter that my friend wrote to the native.<br>
|
||||
The diary itself, I must return to his family...<br>
|
||||
But I think that this letter should be delivered to his native friend.<br>
|
||||
Would you mind taking it with you, since you must seek out Kirikachin to learn the song?
|
||||
</body></html>
|
@@ -1,4 +0,0 @@
|
||||
<html><body>Mushika:<br>
|
||||
Uhh, Ma...(coughing)...Marquez sent you?<br>
|
||||
Um...um... (coughing)... Forgive me, I am so very weak... Please speak with my son Asamah...
|
||||
</body></html>
|
@@ -1,5 +0,0 @@
|
||||
<html><body>Asamah:<br>
|
||||
Marquez sent you?<br>
|
||||
Why?<br>
|
||||
<a action="bypass -h Quest Q111_ElrokianHuntersProof 32115-002.htm">"I would like to learn the mysterious skill of the Elroki for controlling dinosaurs."</a>
|
||||
</body></html>
|
@@ -1,7 +0,0 @@
|
||||
<html><body>Asamah:<br>
|
||||
How would you know about that skill?<br>
|
||||
Hmm... I assume Marquez probably told you about it.<br>
|
||||
I'm sorry, but the skill can only be taught to members of our tribe. It is forbidden to teach it to outsiders.<br>
|
||||
If you understood our tribe better, as Marquez does, it might be a different matter...<br>
|
||||
(It seems you must return to Marquez and ask him for advice on how to best interact with the Elroki tribe.)
|
||||
</body></html>
|
@@ -1,4 +0,0 @@
|
||||
<html><body>Asamah:<br>
|
||||
Stubborn, aren't you? I still have nothing to say to you about those skills!<br>
|
||||
<a action="bypass -h Quest Q111_ElrokianHuntersProof 32115-004.htm">Sing despite Asamah's hostility.</a>
|
||||
</body></html>
|
@@ -1,6 +0,0 @@
|
||||
<html><body>Asamah:<br>
|
||||
Where did you learn this song?<br>
|
||||
It seems like you not only know the melody of it, but that you also understand the spirit and meaning of the song.<br>
|
||||
When I hear you sing, in fact, it's plain to me that you understand!<br>
|
||||
<a action="bypass -h Quest Q111_ElrokianHuntersProof 32115-005.htm">Explain hot you learned about Kirikachin and an outsider's friendship.</a>
|
||||
</body></html>
|
@@ -1,6 +0,0 @@
|
||||
<html><body>Asamah:<br>
|
||||
Oh, that's what happened... I am truly sorry about Kirikachin's friend.<br>
|
||||
On a happier note... by understanding that song you have shown yourself a true friend of the Elroki tribe.<br>
|
||||
How can we help you further my friend?<br>
|
||||
<a action="bypass -h Quest Q111_ElrokianHuntersProof 32115-006.htm">"I want to learn the mysterious skill the Elroki possess for controlling dinosaurs."</a>
|
||||
</body></html>
|
@@ -1,6 +0,0 @@
|
||||
<html><body>Asamah:<br>
|
||||
Ah, I see -- you need a tool to use the skill.<br>
|
||||
I can make the tool you need if you can bring me the right materials.<br>
|
||||
The materials I will require are <font color="LEVEL">10 Ornithomimus claws, 10 Deinonychus bones, and 10 Pachycephalosaurus skins.</font><br>
|
||||
Good luck!
|
||||
</body></html>
|
@@ -1,12 +0,0 @@
|
||||
<html><body>Asamah:<br>
|
||||
Excellent, you have brought all the necessary materials.<br>
|
||||
Now I ask for vour patience while I work.<br>
|
||||
This one like this...<br>
|
||||
And this one, like this...<br>
|
||||
Then combine all these..<br>
|
||||
Whew!<br>
|
||||
Here it is...finished at last.<br>
|
||||
Take this to Kirikachin, and he will teach you the skill.<br>
|
||||
Be sure to tell him that I sent you.<br>
|
||||
Good luck in your studies!
|
||||
</body></html>
|
@@ -1,5 +0,0 @@
|
||||
<html><body>Kirikachin:<br>
|
||||
Oh, outsider... Are there any of your race who know me, Kirikachin? I once had a friend in one such as you, but I can no longer locate him. Have you news of his whereabouts?<br>
|
||||
(Give him the letter.)<br>
|
||||
<a action="bypass -h Quest Q111_ElrokianHuntersProof 32116-002.htm">"Unfortunately, he was killed by a Velociraptor."</a>
|
||||
</body></html>
|
@@ -1,4 +0,0 @@
|
||||
<html><body>Kirikachin:<br>
|
||||
(As he reads the letter, Kirikachin's hands begin to shake and tears fall onto the page. He sobs softly.)<br>
|
||||
<a action="bypass -h Quest Q111_ElrokianHuntersProof 32116-003.htm">Put your hand on his shoulder to comfort him.</a>
|
||||
</body></html>
|
@@ -1,4 +0,0 @@
|
||||
<html><body>Kirikachin:<br>
|
||||
(Before you can put your hand on his shoulder, Kirikachin suddenly lifts his head and begins to sing. You've never heard this song before, but it is so sad and moving that it brings tears to your eyes.)<br>
|
||||
Talk to Kirikachin again when he has finished singing.
|
||||
</body></html>
|
@@ -1,5 +0,0 @@
|
||||
<html><body>Kirikachin:<br>
|
||||
My heart is saddened, but I know he has gone to his rightful reward. My thanks to you for bringing me this letter -- now I know the truth, and that is some comfort.<br>
|
||||
How can I repay you for your trouble?<br>
|
||||
<a action="bypass -h Quest Q111_ElrokianHuntersProof 32116-005.htm">"Please teach me the song that you just sang."</a>
|
||||
</body></html>
|
@@ -1,3 +0,0 @@
|
||||
<html><body>Kirikachin:<br>
|
||||
(Kirikachin tells you about the origin and meaning of the song, and the sad fate that has befallen the Elroki tribe whose mighty warriors once sang the song.)
|
||||
</body></html>
|
@@ -1,5 +0,0 @@
|
||||
<html><body>Kirikachin:<br>
|
||||
What do you need? Ah, you wish to learn a skill? This is something that just anyone can learn...<br>
|
||||
And you are an outsider, after all...<br>
|
||||
<a action="bypass -h Quest Q111_ElrokianHuntersProof 32116-007.htm">"The chief has given me permission. (Hand him the practice trap that Asamah made.)"</a>
|
||||
</body></html>
|
@@ -1,13 +0,0 @@
|
||||
<html><body>Kirikachin:<br>
|
||||
Ah, the practice device needed to learn this skill! Only Asamah could have made it; clearly he has accepted your hand in friendship, though you are an outsider.<br>
|
||||
I'll teach you; listen carefully.<br>
|
||||
When you have the trap in your hand, you can use 3 types of skills.<br>
|
||||
You can only use capture skill on the powerful dinosaur, <font color="LEVEL">Tyrannosaurus.</font> You must use <font color="LEVEL">Kabokula,</font> the first among the 3 skills, to put the dinosaur in a captive state.<br>
|
||||
To maintain that captive state, however, you must use the appropriate skill for counteracting one of the Tyrannosaurus' 3 kinds of reactions. You will learn when to use which skill through experience.<br>
|
||||
Whenever you use the 3 types of skills, you will consume a capture stone; therefore, you should prepare enough capture stones for your task.<br>
|
||||
Now I have told you everything I know...<br>
|
||||
Your practice device is now useless, so I will take it...<br>
|
||||
In its place, take this real device and these capture stones. After you have used all the capture stones, buy more from <font color="LEVEL">Asamah.</font><br>
|
||||
If you lose the device, you may buy another from Asamah -- but take care not to lose it, outsider!<br>
|
||||
May it brin success in battle and glory in the annals of our tribe!
|
||||
</body></html>
|
@@ -1,3 +0,0 @@
|
||||
<html><body>Kirikachin:<br>
|
||||
Oh, outsider... Are there any of your race who know me, Kirikachin? I once had a friend in one such as you, but I can no longer locate him. Have you news of his whereabouts?
|
||||
</body></html>
|
@@ -1,290 +0,0 @@
|
||||
/*
|
||||
* 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.Q111_ElrokianHuntersProof;
|
||||
|
||||
import org.l2jmobius.gameserver.model.actor.instance.NpcInstance;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||
import org.l2jmobius.gameserver.model.quest.Quest;
|
||||
import org.l2jmobius.gameserver.model.quest.QuestState;
|
||||
import org.l2jmobius.gameserver.model.quest.State;
|
||||
|
||||
public class Q111_ElrokianHuntersProof extends Quest
|
||||
{
|
||||
// NPCs
|
||||
private static final int MARQUEZ = 32113;
|
||||
private static final int MUSHIKA = 32114;
|
||||
private static final int ASAMAH = 32115;
|
||||
private static final int KIRIKASHIN = 32116;
|
||||
|
||||
// Items
|
||||
private static final int FRAGMENT = 8768;
|
||||
private static final int EXPEDITION_LETTER = 8769;
|
||||
private static final int CLAW = 8770;
|
||||
private static final int BONE = 8771;
|
||||
private static final int SKIN = 8772;
|
||||
private static final int PRACTICE_TRAP = 8773;
|
||||
|
||||
public Q111_ElrokianHuntersProof()
|
||||
{
|
||||
super(111, "Elrokian Hunter's Proof");
|
||||
|
||||
registerQuestItems(FRAGMENT, EXPEDITION_LETTER, CLAW, BONE, SKIN, PRACTICE_TRAP);
|
||||
|
||||
addStartNpc(MARQUEZ);
|
||||
addTalkId(MARQUEZ, MUSHIKA, ASAMAH, KIRIKASHIN);
|
||||
|
||||
addKillId(22196, 22197, 22198, 22218, 22200, 22201, 22202, 22219, 22208, 22209, 22210, 22221, 22203, 22204, 22205, 22220);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onAdvEvent(String event, NpcInstance npc, PlayerInstance player)
|
||||
{
|
||||
final String htmltext = event;
|
||||
final QuestState st = player.getQuestState(getName());
|
||||
if (st == null)
|
||||
{
|
||||
return htmltext;
|
||||
}
|
||||
|
||||
if (event.equals("32113-002.htm"))
|
||||
{
|
||||
st.setState(State.STARTED);
|
||||
st.set("cond", "1");
|
||||
st.playSound(QuestState.SOUND_ACCEPT);
|
||||
}
|
||||
else if (event.equals("32115-002.htm"))
|
||||
{
|
||||
st.set("cond", "3");
|
||||
st.playSound(QuestState.SOUND_MIDDLE);
|
||||
}
|
||||
else if (event.equals("32113-009.htm"))
|
||||
{
|
||||
st.set("cond", "4");
|
||||
st.playSound(QuestState.SOUND_MIDDLE);
|
||||
}
|
||||
else if (event.equals("32113-018.htm"))
|
||||
{
|
||||
st.set("cond", "6");
|
||||
st.playSound(QuestState.SOUND_MIDDLE);
|
||||
st.takeItems(FRAGMENT, -1);
|
||||
st.giveItems(EXPEDITION_LETTER, 1);
|
||||
}
|
||||
else if (event.equals("32116-003.htm"))
|
||||
{
|
||||
st.set("cond", "7");
|
||||
st.playSound("EtcSound.elcroki_song_full");
|
||||
}
|
||||
else if (event.equals("32116-005.htm"))
|
||||
{
|
||||
st.set("cond", "8");
|
||||
st.playSound(QuestState.SOUND_MIDDLE);
|
||||
}
|
||||
else if (event.equals("32115-004.htm"))
|
||||
{
|
||||
st.set("cond", "9");
|
||||
st.playSound(QuestState.SOUND_MIDDLE);
|
||||
}
|
||||
else if (event.equals("32115-006.htm"))
|
||||
{
|
||||
st.set("cond", "10");
|
||||
st.playSound(QuestState.SOUND_MIDDLE);
|
||||
}
|
||||
else if (event.equals("32116-007.htm"))
|
||||
{
|
||||
st.takeItems(PRACTICE_TRAP, 1);
|
||||
st.giveItems(8763, 1);
|
||||
st.giveItems(8764, 100);
|
||||
st.rewardItems(57, 1022636);
|
||||
st.playSound(QuestState.SOUND_FINISH);
|
||||
st.exitQuest(false);
|
||||
}
|
||||
|
||||
return htmltext;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onTalk(NpcInstance npc, PlayerInstance player)
|
||||
{
|
||||
String htmltext = getNoQuestMsg();
|
||||
final QuestState st = player.getQuestState(getName());
|
||||
if (st == null)
|
||||
{
|
||||
return htmltext;
|
||||
}
|
||||
|
||||
switch (st.getState())
|
||||
{
|
||||
case State.CREATED:
|
||||
htmltext = (player.getLevel() < 75) ? "32113-000.htm" : "32113-001.htm";
|
||||
break;
|
||||
|
||||
case State.STARTED:
|
||||
final int cond = st.getInt("cond");
|
||||
switch (npc.getNpcId())
|
||||
{
|
||||
case MARQUEZ:
|
||||
if ((cond == 1) || (cond == 2))
|
||||
{
|
||||
htmltext = "32113-002.htm";
|
||||
}
|
||||
else if (cond == 3)
|
||||
{
|
||||
htmltext = "32113-003.htm";
|
||||
}
|
||||
else if (cond == 4)
|
||||
{
|
||||
htmltext = "32113-009.htm";
|
||||
}
|
||||
else if (cond == 5)
|
||||
{
|
||||
htmltext = "32113-010.htm";
|
||||
}
|
||||
break;
|
||||
|
||||
case MUSHIKA:
|
||||
if (cond == 1)
|
||||
{
|
||||
st.set("cond", "2");
|
||||
st.playSound(QuestState.SOUND_MIDDLE);
|
||||
}
|
||||
htmltext = "32114-001.htm";
|
||||
break;
|
||||
|
||||
case ASAMAH:
|
||||
if (cond == 2)
|
||||
{
|
||||
htmltext = "32115-001.htm";
|
||||
}
|
||||
else if (cond == 3)
|
||||
{
|
||||
htmltext = "32115-002.htm";
|
||||
}
|
||||
else if (cond == 8)
|
||||
{
|
||||
htmltext = "32115-003.htm";
|
||||
}
|
||||
else if (cond == 9)
|
||||
{
|
||||
htmltext = "32115-004.htm";
|
||||
}
|
||||
else if (cond == 10)
|
||||
{
|
||||
htmltext = "32115-006.htm";
|
||||
}
|
||||
else if (cond == 11)
|
||||
{
|
||||
htmltext = "32115-007.htm";
|
||||
st.set("cond", "12");
|
||||
st.playSound(QuestState.SOUND_MIDDLE);
|
||||
st.takeItems(BONE, -1);
|
||||
st.takeItems(CLAW, -1);
|
||||
st.takeItems(SKIN, -1);
|
||||
st.giveItems(PRACTICE_TRAP, 1);
|
||||
}
|
||||
break;
|
||||
|
||||
case KIRIKASHIN:
|
||||
if (cond < 6)
|
||||
{
|
||||
htmltext = "32116-008.htm";
|
||||
}
|
||||
else if (cond == 6)
|
||||
{
|
||||
htmltext = "32116-001.htm";
|
||||
st.takeItems(EXPEDITION_LETTER, 1);
|
||||
}
|
||||
else if (cond == 7)
|
||||
{
|
||||
htmltext = "32116-004.htm";
|
||||
}
|
||||
else if (cond == 12)
|
||||
{
|
||||
htmltext = "32116-006.htm";
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
case State.COMPLETED:
|
||||
htmltext = getAlreadyCompletedMsg();
|
||||
break;
|
||||
}
|
||||
|
||||
return htmltext;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onKill(NpcInstance npc, PlayerInstance player, boolean isPet)
|
||||
{
|
||||
final PlayerInstance partyMember = getRandomPartyMemberState(player, npc, State.STARTED);
|
||||
if (partyMember == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
final QuestState st = partyMember.getQuestState(getName());
|
||||
if (st == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
switch (npc.getNpcId())
|
||||
{
|
||||
case 22196:
|
||||
case 22197:
|
||||
case 22198:
|
||||
case 22218:
|
||||
if ((st.getInt("cond") == 4) && st.dropItems(FRAGMENT, 1, 50, 250000))
|
||||
{
|
||||
st.set("cond", "5");
|
||||
}
|
||||
break;
|
||||
|
||||
case 22200:
|
||||
case 22201:
|
||||
case 22202:
|
||||
case 22219:
|
||||
if ((st.getInt("cond") == 10) && st.dropItems(CLAW, 1, 10, 650000) && (st.getQuestItemsCount(BONE) >= 10) && (st.getQuestItemsCount(SKIN) >= 10))
|
||||
{
|
||||
st.set("cond", "11");
|
||||
}
|
||||
break;
|
||||
|
||||
case 22208:
|
||||
case 22209:
|
||||
case 22210:
|
||||
case 22221:
|
||||
if ((st.getInt("cond") == 10) && st.dropItems(SKIN, 1, 10, 650000) && (st.getQuestItemsCount(CLAW) >= 10) && (st.getQuestItemsCount(BONE) >= 10))
|
||||
{
|
||||
st.set("cond", "11");
|
||||
}
|
||||
break;
|
||||
|
||||
case 22203:
|
||||
case 22204:
|
||||
case 22205:
|
||||
case 22220:
|
||||
if ((st.getInt("cond") == 10) && st.dropItems(BONE, 1, 10, 650000) && (st.getQuestItemsCount(CLAW) >= 10) && (st.getQuestItemsCount(SKIN) >= 10))
|
||||
{
|
||||
st.set("cond", "11");
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
@@ -1,4 +0,0 @@
|
||||
<html><body>Seer Livina:<br>
|
||||
What's your business here?<br>
|
||||
(This quest may only be undertaken by a character of level 20 and above.)
|
||||
</body></html>
|
@@ -1,5 +0,0 @@
|
||||
<HTML><BODY> Seer Livina:<br>
|
||||
Come in! I've been waiting for you.<br>
|
||||
I knew you were coming! It's the will of Pa'agrio. You won't feel it, but I can feel a very positive energy from far beyond the eastern horizon! Could you check out what's going on over there? I know I'm being vague like most psychics are, but please trust me.<br>
|
||||
<a action="bypass -h Quest Q112_WalkOfFate 30572-02.htm">"I'll do it."</a>
|
||||
</BODY></HTML>
|
@@ -1,3 +0,0 @@
|
||||
<HTML><BODY>Seer Livina:<br>
|
||||
Alas, fate isn't to be trifled with! To the east of here, there's a passage from the Cave of Trials to the Valley of the Lords. Take that passage towards the <font color="LEVEL">Crypts of Disgrace</font> where the Orcs are buried. You'll meet someone named <font color="LEVEL">Karuda</font>. Tell him to come to me and give me a status report!
|
||||
</BODY></HTML>
|
@@ -1,3 +0,0 @@
|
||||
<HTML><BODY>Seer Livina:<br>
|
||||
You haven't left yet? You will soon go there as dictated by your fate. Go to the <font color="LEVEL">Crypts of Disgrace</font> and meet <font color="LEVEL">Karuda</font>.
|
||||
</BODY></HTML>
|
@@ -1,4 +0,0 @@
|
||||
<html><body>Karuda:<br>
|
||||
You came to inquire after Livina? She is mostly all right, there is a small problem, but it's nothing serious.<br>
|
||||
<a action="bypass -h Quest Q112_WalkOfFate 32017-02.htm">I was asked to find out how she is.</a>
|
||||
</body></html>
|
@@ -1,4 +0,0 @@
|
||||
<html><body>Karuda:<br>
|
||||
Well, I'll tell you what: why don't you go ask Moira? He can tell you what's happening. I do thank you for your trouble in coming all this way, though. Here, take this - it isn't much, but it will buy you a drink to wash away the dust of the road.<br>
|
||||
If you are not engaged in some other task, please return later. I may have a job for you.
|
||||
</body></html>
|
@@ -1,105 +0,0 @@
|
||||
/*
|
||||
* 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.Q112_WalkOfFate;
|
||||
|
||||
import org.l2jmobius.gameserver.model.actor.instance.NpcInstance;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||
import org.l2jmobius.gameserver.model.quest.Quest;
|
||||
import org.l2jmobius.gameserver.model.quest.QuestState;
|
||||
import org.l2jmobius.gameserver.model.quest.State;
|
||||
|
||||
public class Q112_WalkOfFate extends Quest
|
||||
{
|
||||
// NPCs
|
||||
private static final int LIVINA = 30572;
|
||||
private static final int KARUDA = 32017;
|
||||
|
||||
// Rewards
|
||||
private static final int ENCHANT_D = 956;
|
||||
|
||||
public Q112_WalkOfFate()
|
||||
{
|
||||
super(112, "Walk of Fate");
|
||||
|
||||
addStartNpc(LIVINA);
|
||||
addTalkId(LIVINA, KARUDA);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onAdvEvent(String event, NpcInstance npc, PlayerInstance player)
|
||||
{
|
||||
final String htmltext = event;
|
||||
final QuestState st = player.getQuestState(getName());
|
||||
if (st == null)
|
||||
{
|
||||
return htmltext;
|
||||
}
|
||||
|
||||
if (event.equals("30572-02.htm"))
|
||||
{
|
||||
st.setState(State.STARTED);
|
||||
st.set("cond", "1");
|
||||
st.playSound(QuestState.SOUND_ACCEPT);
|
||||
}
|
||||
else if (event.equals("32017-02.htm"))
|
||||
{
|
||||
st.giveItems(ENCHANT_D, 1);
|
||||
st.rewardItems(57, 4665);
|
||||
st.playSound(QuestState.SOUND_FINISH);
|
||||
st.exitQuest(false);
|
||||
}
|
||||
|
||||
return htmltext;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onTalk(NpcInstance npc, PlayerInstance player)
|
||||
{
|
||||
final QuestState st = player.getQuestState(getName());
|
||||
String htmltext = getNoQuestMsg();
|
||||
if (st == null)
|
||||
{
|
||||
return htmltext;
|
||||
}
|
||||
|
||||
switch (st.getState())
|
||||
{
|
||||
case State.CREATED:
|
||||
htmltext = (player.getLevel() < 20) ? "30572-00.htm" : "30572-01.htm";
|
||||
break;
|
||||
|
||||
case State.STARTED:
|
||||
switch (npc.getNpcId())
|
||||
{
|
||||
case LIVINA:
|
||||
htmltext = "30572-03.htm";
|
||||
break;
|
||||
|
||||
case KARUDA:
|
||||
htmltext = "32017-01.htm";
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
case State.COMPLETED:
|
||||
htmltext = getAlreadyCompletedMsg();
|
||||
break;
|
||||
}
|
||||
|
||||
return htmltext;
|
||||
}
|
||||
}
|
@@ -1,4 +0,0 @@
|
||||
<html><body>Seer Moira:<br>
|
||||
Oh, my poor adventurer! I don't feel the blessing of Pa'agrio's coming from you. Why don't you come back when you've had more experience?<br>
|
||||
(This quest may only be undertaken by a character of level 40 and above.)
|
||||
</body></html>
|
@@ -1,4 +0,0 @@
|
||||
<html><body>Seer Moira:<br>
|
||||
You are under the protection of Pa'agrio! I trust you. Please go to the Beacon Tower at the <font color="LEVEL">Den of Evil</font> and take this box with you.<br>
|
||||
<a action="bypass -h Quest Q113_StatusOfTheBeaconTower 31979-02.htm">"Why the Beacon Tower?"</a>
|
||||
</body></html>
|
@@ -1,3 +0,0 @@
|
||||
<html><body>Seer Moira:<br>
|
||||
I don't know why, but the power from the Beacon Tower is weakening. They must be unable to light it! Take this box containing the power of fire to <font color="LEVEL">Beacon Tower Manager Torrant</font>.
|
||||
</body></html>
|
@@ -1,3 +0,0 @@
|
||||
<html><body>Seer Moira:<br>
|
||||
Hurry up! Go see <font color="LEVEL">Beacon Tower Manager Torrant</font> and give this to him.
|
||||
</body></html>
|
@@ -1,5 +0,0 @@
|
||||
<html><body>Beacon Tower Manager Torrant:<br>
|
||||
So, Moira asked you to come? What is that you have there?<br>
|
||||
A box containing the Fire of Holy Spirit? Great! The fire was weakening because of the weird energy in this area. Give me the box at once!<br>
|
||||
<a action="bypass -h Quest Q113_StatusOfTheBeaconTower 32016-02.htm">"Here it is."</a>
|
||||
</body></html>
|
@@ -1,3 +0,0 @@
|
||||
<html><body>Beacon Tower Manager Torrant:<br>
|
||||
All right. I have the box. You've come a long way and I know it's not much, but please accept this reward.
|
||||
</body></html>
|
@@ -1,108 +0,0 @@
|
||||
/*
|
||||
* 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.Q113_StatusOfTheBeaconTower;
|
||||
|
||||
import org.l2jmobius.gameserver.model.actor.instance.NpcInstance;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||
import org.l2jmobius.gameserver.model.quest.Quest;
|
||||
import org.l2jmobius.gameserver.model.quest.QuestState;
|
||||
import org.l2jmobius.gameserver.model.quest.State;
|
||||
|
||||
public class Q113_StatusOfTheBeaconTower extends Quest
|
||||
{
|
||||
// NPCs
|
||||
private static final int MOIRA = 31979;
|
||||
private static final int TORRANT = 32016;
|
||||
|
||||
// Item
|
||||
private static final int BOX = 8086;
|
||||
|
||||
public Q113_StatusOfTheBeaconTower()
|
||||
{
|
||||
super(113, "Status of the Beacon Tower");
|
||||
|
||||
registerQuestItems(BOX);
|
||||
|
||||
addStartNpc(MOIRA);
|
||||
addTalkId(MOIRA, TORRANT);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onAdvEvent(String event, NpcInstance npc, PlayerInstance player)
|
||||
{
|
||||
final String htmltext = event;
|
||||
final QuestState st = player.getQuestState(getName());
|
||||
if (st == null)
|
||||
{
|
||||
return htmltext;
|
||||
}
|
||||
|
||||
if (event.equals("31979-02.htm"))
|
||||
{
|
||||
st.setState(State.STARTED);
|
||||
st.set("cond", "1");
|
||||
st.playSound(QuestState.SOUND_ACCEPT);
|
||||
st.giveItems(BOX, 1);
|
||||
}
|
||||
else if (event.equals("32016-02.htm"))
|
||||
{
|
||||
st.takeItems(BOX, 1);
|
||||
st.rewardItems(57, 21578);
|
||||
st.playSound(QuestState.SOUND_FINISH);
|
||||
st.exitQuest(false);
|
||||
}
|
||||
|
||||
return htmltext;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onTalk(NpcInstance npc, PlayerInstance player)
|
||||
{
|
||||
final QuestState st = player.getQuestState(getName());
|
||||
String htmltext = getNoQuestMsg();
|
||||
if (st == null)
|
||||
{
|
||||
return htmltext;
|
||||
}
|
||||
|
||||
switch (st.getState())
|
||||
{
|
||||
case State.CREATED:
|
||||
htmltext = (player.getLevel() < 40) ? "31979-00.htm" : "31979-01.htm";
|
||||
break;
|
||||
|
||||
case State.STARTED:
|
||||
switch (npc.getNpcId())
|
||||
{
|
||||
case MOIRA:
|
||||
htmltext = "31979-03.htm";
|
||||
break;
|
||||
|
||||
case TORRANT:
|
||||
htmltext = "32016-01.htm";
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
case State.COMPLETED:
|
||||
htmltext = getAlreadyCompletedMsg();
|
||||
break;
|
||||
}
|
||||
|
||||
return htmltext;
|
||||
}
|
||||
}
|
@@ -1,6 +0,0 @@
|
||||
<html><body>Head Blacksmith Newyear:<br>
|
||||
Come in! So, you spoke to Yumi?<br>
|
||||
I have absolutely no idea what Yumi wants you to do, but I'm sure you'll have no problem doing it.<br>
|
||||
So, do you have business with me?<br>
|
||||
<a action="bypass -h Quest Q114_ResurrectionOfAnOldManager 31961-02.htm">Show him the letter.</a>
|
||||
</body></html>
|
@@ -1,5 +0,0 @@
|
||||
<html><body>Head Blacksmith Newyear:<br>
|
||||
You have a letter from Yumi, do you? Yes, of course, show it to me... hmmm.<br>
|
||||
Well. You need Starstones? Heh, those are not cheap, but I'll do what I can to help.<br>
|
||||
Here you go. Take them.
|
||||
</body></html>
|
@@ -1,4 +0,0 @@
|
||||
<html><body>Head Blacksmith Newyear:<br>
|
||||
Do you need something else? The letter only mentioned Starstones.<br>
|
||||
Send Yumi my regards, will you?
|
||||
</body></html>
|
@@ -1,5 +0,0 @@
|
||||
<html><body>Collector Yumi:<br>
|
||||
What brings you to this dangerous place? Ah, you have come here because of the Starstones, haven't you?<br>
|
||||
Beware! It is exceedingly difficult to collect the Starstones because of the golems.<br>
|
||||
(Only characters who have cleared the Pavel the Giant Quest at level 49 or above may accept this quest.)
|
||||
</body></html>
|
@@ -1,6 +0,0 @@
|
||||
<html><body>Collector Yumi:<br>
|
||||
Hmmm... very well. I'll trust you, which is more than I can say of most people.<br>
|
||||
Can you keep a secret? You must never reveal what I'm about to tell you: the legend of the shame of the Black Anvil Guild. This tale is really the shame of all Dwarves.<br>
|
||||
I can't tell you anything at all unless you promise to keep secret everything you learn here. Do you promise?<br>
|
||||
<a action="bypass -h Quest Q114_ResurrectionOfAnOldManager 32041-02.htm">"I promise."</a>
|
||||
</body></html>
|
@@ -1,6 +0,0 @@
|
||||
<html><body>Collector Yumi:<br>
|
||||
Very well. You've given me your word.<br>
|
||||
Originally, this was a very important place for the Dwarven race. The Starstones continue to be harvested in the north, and where the Archaic Laboratory remains.<br>
|
||||
Among the dwarves, the Gray Pillar is in charge of construction, the Black Anvil is in charge of production and planning, and the Bronze Key is in charge of the investigation and excavation of the ruins. Between these three guilds, more than half of their folk are dedicate to the ruins that lay here before you.<br>
|
||||
<a action="bypass -h Quest Q114_ResurrectionOfAnOldManager 32041-03.htm">"And?"</a>
|
||||
</body></html>
|
@@ -1,6 +0,0 @@
|
||||
<html><body>Collector Yumi:<br>
|
||||
Everything went smoothly for a time. The Bronze Key Guild opened the door that linked to Pavel's lab and dug up the excavator Pavel once used.<br>
|
||||
Luckily, it was designed based on ancient Dwarven technology, so the Black Anvil Guild produced an Excavator Golem based on the earlier design.<br>
|
||||
The Gray Pillar Guild made a strip mine with the golem, and everything was perfect... until the great explosion happened.<br>
|
||||
<a action="bypass -h Quest Q114_ResurrectionOfAnOldManager 32041-04.htm">Ask about the great explosion</a>
|
||||
</body></html>
|
@@ -1,5 +0,0 @@
|
||||
<html><body>Collector Yumi:<br>
|
||||
The explosion came as a surprise. Like a comet shooting across the sky, it didn't seem to have a reason - it just happened. Maybe someone accidentally touched a machine in the lab. That was a popular theory at the time.<br>
|
||||
On further inspection, however, the explosion seemed increasingly suspicious. For one thing, it coincided too closely with the <font color="LEVEL">robbery of the Black Anvil blueprint</font>...<br>
|
||||
<a action="bypass -h Quest Q114_ResurrectionOfAnOldManager 32041-05.htm">Ask about the blueprint robbery.</a>
|
||||
</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