Initial Grand Crusade changes.

This commit is contained in:
MobiusDev
2017-11-10 00:34:51 +00:00
parent b14755d840
commit 407edebc0e
111 changed files with 4960 additions and 1990 deletions

View File

@@ -26,7 +26,6 @@ import com.l2jmobius.gameserver.model.actor.instance.L2MonsterInstance;
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
import com.l2jmobius.gameserver.model.holders.SkillHolder;
import com.l2jmobius.gameserver.model.skills.Skill;
import com.l2jmobius.gameserver.network.NpcStringId;
import com.l2jmobius.gameserver.network.serverpackets.Earthquake;
import com.l2jmobius.gameserver.network.serverpackets.OnEventTrigger;
@@ -94,7 +93,7 @@ public final class Cannon extends AbstractNpcAI
{
takeItems(player, CANNONBALL, 1);
npc.setScriptValue(0);
npc.setTitleString(NpcStringId.CANNON_IS_LOADING);
npc.setTitle("Cannon is loading");
npc.broadcastInfo();
addSkillCastDesire(npc, npc, PRESENT_SKILL, 23);
startQuestTimer("CANNON_RECHARGE", 300000, npc, null);
@@ -104,7 +103,7 @@ public final class Cannon extends AbstractNpcAI
case "CANNON_RECHARGE":
{
npc.setScriptValue(1);
npc.setTitleString(NpcStringId.EMPTY_CANNON);
npc.setTitle("Empty Cannon");
npc.broadcastInfo();
break;
}

View File

@@ -0,0 +1,75 @@
/*
* 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.others;
import java.util.ArrayList;
import java.util.List;
import com.l2jmobius.gameserver.data.xml.impl.MonsterBookData;
import com.l2jmobius.gameserver.model.L2Party;
import com.l2jmobius.gameserver.model.actor.L2Npc;
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
import com.l2jmobius.gameserver.model.holders.MonsterBookCardHolder;
import ai.AbstractNpcAI;
/**
* @author Mobius
*/
public class MonsterBook extends AbstractNpcAI
{
private static final int MAXIMUM_REWARD_RANGE = 2500;
private MonsterBook()
{
for (MonsterBookCardHolder card : MonsterBookData.getInstance().getMonsterBookCards())
{
addKillId(card.getMonsterId());
}
}
@Override
public String onKill(L2Npc npc, L2PcInstance killer, boolean isSummon)
{
final L2Party party = killer.getParty();
List<L2PcInstance> rewardedPlayers = new ArrayList<>();
if (party != null)
{
rewardedPlayers = party.isInCommandChannel() ? party.getCommandChannel().getMembers() : party.getMembers();
}
else
{
rewardedPlayers.add(killer);
}
final MonsterBookCardHolder card = MonsterBookData.getInstance().getMonsterBookCardByMonsterId(npc.getId());
for (L2PcInstance player : rewardedPlayers)
{
if ((player != null) && (player.calculateDistance(killer, false, false) < MAXIMUM_REWARD_RANGE))
{
player.updateMonsterBook(card);
}
}
return super.onKill(npc, killer, isSummon);
}
public static void main(String[] args)
{
new MonsterBook();
}
}

View File

@@ -1,6 +1,59 @@
482 Recertification of Value
504 Competition for the Bandit Stronghold
655 A Grand Plan for Taming Wild Beasts
665 Basic Training for Hunter Guild Member
666 Knowledgeable Hunter Guild Member
667 How to Cover Shilen's Eyes
668 Fight with Giants
669 Intense Fight against Dragon
670 Defeating the Lord of Seed
671 Path to Finding the Past
672 Embryo the Archenemy
673 Beleth' Ambition
690 |Attack| Begin Alliance Base Defense - 1
691 |Attack| Begin Alliance Base Defense - 2
692 |Attack| Begin Alliance Base Defense - 3
693 |Defense| Protecting Military Power - 1
694 |Defense| Protecting Military Power - 2
695 |Defense| Protecting Military Power - 3
696 |Support| Defense Battery Crafting Support - 1
697 |Support| Defense Battery Crafting Support - 2
698 |Support| Defense Battery Crafting Support - 3
699 |Attack| Sabotage Embryo Solider - 1
700 |Attack| Sabotage Embryo Solider - 2
701 |Attack| Sabotage Embryo Solider - 3
702 |Defense| Gracian Soldier Support - 1
703 |Defense| Gracian Soldier Support - 2
704 |Defense| Gracian Soldier Support - 3
705 |Support| Defense Battery Cannonball Crafting - 1
706 |Support| Defense Battery Cannonball Crafting - 2
707 |Support| Defense Battery Cannonball Crafting - 3
708 |Attack| Neutralize Embryo - 1
709 |Attack| Neutralize Embryo - 2
710 |Attack| Neutralize Embryo - 3
711 |Defense| All-out Battle - 1
712 |Defense| All-out Battle - 2
713 |Defense| Join the battle - 3
714 |Support| Installing Defense Battery - 1
715 |Support| Installing Defense Battery - 2
716 |Support| Installing Defense Battery - 3
717 |Attack| Eliminate Embryo Captain - 1
718 |Attack| Eliminate Embryo Captain - 2
719 |Attack| Eliminate Embryo Captain - 3
720 |Defense| Eliminate Embryo Captain - 1
721 |Defense| Eliminate Embryo Captain - 2
722 |Defense| Eliminate Embryo Captain - 3
723 |Support| Eliminate Enemy with Defense Battery - 1
724 |Support| Defeat enemies with the defense artillery - 2
725 |Support| Eliminate Enemy with Defense Battery - 3
729 |Attack| Impede Kain
730 |Defense| Impede Kain
731 |Support| Impede Kain
732 Red Libra's Request - Kartia's Labyrinth
733 Red Libra's Request - Crystal Prison (Baylor)
734 Red Libra Request - Nightmare Kamaloka
735 Red Libra Request - Embryo Command Post
736 Red Libra Request - Altar of Shilen
744 The Alligator Hunter returns
745 The Outlaws are Incoming
746 The Reason One Cannot Wait
@@ -15,7 +68,9 @@
780 Utilize the Darkness - Seed of Infinity
781 Utilize the Darkness - Seed of Annihilation
782 Utilize the Darkness - Seed of Hellfire
788 Red Libra Request - Altar of Evil
789 Waiting for Pa'agrio
791 Red Libra Request - Fairy Settlement
792 The Superion Giants
800 Hunter Guild Request - Altar of Evil
801 Hunter Guild Request - Gludio Territory
@@ -53,11 +108,17 @@
844 Giant's Treasure
845 Sabotage the Embryo Supplies
846 Building up Strength
910 Red Libra Request - Lv. 1
911 Red Libra Request - Lv. 2
912 Red Libra Request - Lv. 3
913 Red Libra Request - Lv. 4
914 Red Libra Request - Lv. 5
861 Kain's Choice
910 Red Libra Request - Isle of Souls
911 Red Libra's Request - Seal of Shilen
912 Red Libra Request - Monsters from Three Areas
913 Red Libra Request - Raider's Crossroads
914 Red Libra Request - Hellbound
915 Red Libra Request - Enchanted Valley
916 Red Libra Request - Giant's Cave
917 Red Libra Request - Garden of Spirits
918 Red Libra Request - Atelia Fortress
919 Red Libra Request - Superion
922 Hunter Guild Request - Northern Region, Isle of Prayer
923 Shinedust Extraction
924 Giant of the Restoration Room
@@ -70,11 +131,19 @@
932 Sayha's Energy
938 The Fisherman's Other Hobby
940 Hunter Guild Request - Atelia Fortress
985 Adventure Guild's Special Request - Lv1
986 Adventure Guild's Special Request - Lv. 2
987 Adventure Guild's Special Request - Lv. 3
988 Adventure Guild's Special Request - Lv. 4
989 Adventure Guild's Special Request - Lv. 5
10298 Wasteland Queen
10357 Altar of Blood that Awakens Destruction
10355 Blacksmith's Soul-awakening Weapon - 1
10356 Blacksmith's Soul-awakening Weapon - 2
10373 Exploring the Dimension - Sealing the Dimension
10396 Witch of Spores
10418 The Immortal Pirate King
10423 Embryo Stronghold Ambush
10454 Final Embryo Apostle
10456 Operation: Rescue
10457 Kefensis' Illusion
10506 Diana's Request
@@ -89,6 +158,7 @@
10530 Kekropus' Letter, The Dragon's Transition Achieve Level 81
10531 Odd Happenings at Dragon Valley Strange Things Afoot in the Valley
10532 Uncovering the Conspiracy Eliminate the Undead and Dragons
10535 Blacksmith's Soul-awakening Weapon - 3
10537 Kamael Disarray To Retbach
10538 Giant's Evolution Cause of failed evolution
10539 Energy Supply Cutoff Plan Defeat Halisha's Henchman
@@ -121,4 +191,14 @@
10856 Superion Appears
10857 Secret Teleport
10858 Queen Ramona, Controller of the Vessel
10859 Own the Earth and the Heavens
10859 Own the Earth and the Heavens
10873 Exalted, Reaching Another Level
10874 Against the New Enemy
10875 For Reputation
10876 Leader's Grace
10877 Break Through Crisis
10879 Exalted, Guide to Power
10880 The Last One Standing
10881 For the Pride
10882 Victory Collection
10883 Immortal Honor

View File

@@ -1,5 +0,0 @@
<html><body>Watcher of Antharas Theodric:<br>
You have a <font color="LEVEL">Portal Stone</font>... it means that you are one of the few who can challenge Antharas.<br>
So, do you feel that you are up to the challenge of defeating the land dragon?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00904_DragonTrophyAntharas 30755-05.htm">Say that you can defeat it.</Button>
</body></html>

View File

@@ -1,4 +0,0 @@
<html><body>Watcher of Antharas Theodric:<br>
Do you look down on the earth dragon? Its claws have shattered countless lives.<br>
(Only characters at level 85 or above can undertake this quest.)
</body></html>

View File

@@ -1,5 +0,0 @@
<html><body>Watcher of Antharas Theodric:<br>
Ah, you have returned, and with a victor's skip in your step!<br>
You have defeated the dragon! Your power shall be praised throughout the lands!<br>
(This quest can be done only a day. This quest gets initialized everyday at 6:30 am.)
</body></html>

View File

@@ -1,4 +0,0 @@
<html><body>Watcher of Antharas Theodric:<br>
The fact that you don't have the <font color="LEVEL">Portal Stone</font> means you didn't satisfy the minimum requirement for this mission.<br>
If you really want to defeat Antharas, first you need to get recognized by <font color="LEVEL">Gabrielle</font> in Giran village.
</body></html>

View File

@@ -1,5 +0,0 @@
<html><body>Watcher of Antharas Theodric:<br>
You may think that you are invincible and that your courage is unmatched, but does anyone know of your fame?<br>
Do you wish to become famous?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00904_DragonTrophyAntharas 30755-06.htm">Ask how to become famous.</Button>
</body></html>

View File

@@ -1,5 +0,0 @@
<html><body>Watcher of Antharas Theodric:<br>
It's simple really. Use your strength and destroy the first offspring of the Goddess of Destruction... Antharas. Who is the Goddess of Destruction? This discussion will have to wait for another time.<br>
Do you think you can handle the challenge to defeat Antharas?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00904_DragonTrophyAntharas 30755-07.html">"I shall defeat Antharas."</Button>
</body></html>

View File

@@ -1,4 +0,0 @@
<html><body>Watcher of Antharas Theodric:<br>
I wish you the best of luck. Unfortunately I cannot go with you on this journey. However, I am sure there are others just like you who wish to take on Antharas.<br>
You may wish to continue once you have acquired <font color="LEVEL">a large group of highly skilled adventurers</font> to go with you on your journey.
</body></html>

View File

@@ -1,5 +0,0 @@
<html><body>Watcher of Antharas Theodric:<br>
I know for a fact that you have not destroyed Antharas.<br>
When you do, I know for I shall have heard it echo throughout the winds.<br>
Until that time, I stand... I wait... and I watch.
</body></html>

View File

@@ -1,5 +0,0 @@
<html><body>Watcher of Antharas Theodric:<br>
Word has already spread throughout the land that you and your fellowship have defeated the land dragon Antharas. Enjoy your victory while it lasts. Unfortunately, the legends are true about Antharas... the beast can never truly be killed. It will rise once again.<br>
True to my code, I will stand watch for the land dragon's return. When it does I will be here awaiting your return.<br>
As promised, here is the gift of fame and fortune. These are rare... be sure to use them wisely.
</body></html>

View File

@@ -1,170 +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.Q00904_DragonTrophyAntharas;
import com.l2jmobius.gameserver.enums.QuestSound;
import com.l2jmobius.gameserver.enums.QuestType;
import com.l2jmobius.gameserver.model.actor.L2Npc;
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
import com.l2jmobius.gameserver.model.quest.Quest;
import com.l2jmobius.gameserver.model.quest.QuestState;
import com.l2jmobius.gameserver.model.quest.State;
import com.l2jmobius.gameserver.util.Util;
/**
* Dragon Trophy - Antharas (904)
* @author Zoey76
*/
public final class Q00904_DragonTrophyAntharas extends Quest
{
// NPC
private static final int THEODRIC = 30755;
// Monster
private static final int ANTHARAS = 29068;
// Items
private static final int MEDAL_OF_GLORY = 21874;
private static final int PORTAL_STONE = 3865;
// Misc
private static final int MIN_LEVEL = 85;
public Q00904_DragonTrophyAntharas()
{
super(904);
addStartNpc(THEODRIC);
addTalkId(THEODRIC);
addKillId(ANTHARAS);
}
@Override
public void actionForEachPlayer(L2PcInstance player, L2Npc npc, boolean isSummon)
{
final QuestState qs = getQuestState(player, false);
if ((qs != null) && qs.isCond(1) && Util.checkIfInRange(1500, npc, player, false))
{
qs.setCond(2, true);
}
}
@Override
public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
{
final QuestState qs = getQuestState(player, false);
if (qs == null)
{
return null;
}
String htmltext = null;
if ((player.getLevel() >= MIN_LEVEL) && hasQuestItems(player, PORTAL_STONE))
{
switch (event)
{
case "30755-05.htm":
case "30755-06.htm":
{
htmltext = event;
break;
}
case "30755-07.html":
{
qs.startQuest();
htmltext = event;
break;
}
}
}
return htmltext;
}
@Override
public String onKill(L2Npc npc, L2PcInstance killer, boolean isSummon)
{
executeForEachPlayer(killer, npc, isSummon, true, true);
return super.onKill(npc, killer, isSummon);
}
@Override
public String onTalk(L2Npc npc, L2PcInstance player)
{
final QuestState qs = getQuestState(player, true);
String htmltext = getNoQuestMsg(player);
switch (qs.getState())
{
case State.CREATED:
{
if (player.getLevel() < MIN_LEVEL)
{
htmltext = "30755-02.html";
}
else if (!hasQuestItems(player, PORTAL_STONE))
{
htmltext = "30755-04.html";
}
else
{
htmltext = "30755-01.htm";
}
break;
}
case State.STARTED:
{
switch (qs.getCond())
{
case 1:
{
htmltext = "30755-08.html";
break;
}
case 2:
{
giveItems(player, MEDAL_OF_GLORY, 30);
playSound(player, QuestSound.ITEMSOUND_QUEST_ITEMGET);
qs.exitQuest(QuestType.DAILY, true);
htmltext = "30755-09.html";
break;
}
}
break;
}
case State.COMPLETED:
{
if (!qs.isNowAvailable())
{
htmltext = "30755-03.html";
}
else
{
qs.setState(State.CREATED);
if (player.getLevel() < MIN_LEVEL)
{
htmltext = "30755-02.html";
}
else if (!hasQuestItems(player, PORTAL_STONE))
{
htmltext = "30755-04.html";
}
else
{
htmltext = "30755-01.htm";
}
}
break;
}
}
return htmltext;
}
}

View File

@@ -1,7 +0,0 @@
<html><body>Watcher of Valakas Klein:<br>
Is it hot in here or is it just me? Ha, that one never gets old... well, maybe a little. As you probably know this path leads to the lair of Valakas.<br>
Oh how many have come and became one with the flame that fills these halls...<br>
Valakas calls and those brave souls answer. Not like you though. Destiny has brought you here to face and defeat Valakas.<br>
Do you want to fight the beast? Do ya? Who wants to fight Valakas?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00907_DragonTrophyValakas 31540-05.htm">"I do! I want to fight Valakas!"</Button>
</body></html>

View File

@@ -1,4 +0,0 @@
<html><body>Watcher of Valakas Klein:<br>
Do you look down on the fire dragon? Its claws have shattered countless lives.<br>
(Only characters at level 85 or above can undertake this quest.)
</body></html>

View File

@@ -1,6 +0,0 @@
<html><body>Watcher of Valakas Klein:<br>
Glorious adventurer.<br>
The dragon's nemesis.<br>
You have defeated the dragon. Your power in defeating the evil beast shall be praised throughout the land.<br>
(This quest can be done only a day. This quest gets initialized everyday at 6:30 am.)
</body></html>

View File

@@ -1,4 +0,0 @@
<html><body>Watcher of Valakas Klein:<br>
The fact that you don't have the <font color="LEVEL">Floating Stone</font> means you did not satisfy the minimum requirement for this mission.<br>
If you really want to defeat Valakas, you must first obtain a Vacualite Floating Stone.
</body></html>

View File

@@ -1,4 +0,0 @@
<html><body>Watcher of Valakas Klein:<br>
That a boy... er, girl... ah... you... that's the spirit! I'm somewhat mildy confident of your chances... definitely much better than the hordes of previous adventurers who have been sent to their deaths.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00907_DragonTrophyValakas 31540-06.htm">"Nice... anything I need to do?"</Button>
</body></html>

View File

@@ -1,6 +0,0 @@
<html><body>Watcher of Valakas Klein:<br>
Nothing special... just march through the vast army of creatures created by the Fire Dragon Valakas into his lair and vanquish the most feared and deadly creature known to roam this land which will most likely kill you and all those around you.<br>
Nah, nothing too much. Just come back with proof you have defeated Valakas and I'll have a surprise waiting for you.<br>
You'll never guess what it is.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00907_DragonTrophyValakas 31540-07.html">"Those new Medals of Glory?"</Button>
</body></html>

View File

@@ -1,5 +0,0 @@
<html><body>Watcher of Valakas Klein:<br>
Yeah. How did you... never mind. Best of luck kid, you're gonna need it.<br>
You know I feel really dumb for saying this and stop me if you have heard it before... cause you know I've sent how many people to their countless deaths trying to kill that thing that everyone starts to look the same, but you shouldn't go after Valakas solo.<br>
Your best bet would be <font color="LEVEL">attacking Valakas with a large group of equally skilled adventurers.</font>
</body></html>

View File

@@ -1,4 +0,0 @@
<html><body>Watcher of Valakas Klein:<br>
Defeating Valakas is something that you must do with your comrades.<br>
I shall wait here for news of your victory against the beast.
</body></html>

View File

@@ -1,6 +0,0 @@
<html><body>Watcher of Valakas Klein:<br>
What's that you say? You managed to kill the fire dragon? Well, yes, I heard but I thought they were talking about some other adventurer who managed to kill Valakas.<br>
You must feel like Emperor Shunaiman on Aden Mountain so who would want to mess with you.<br>
Well allow me to be the one to kick you off your pedestal so you can fall back to the real world. Valakas ain't dead. Never really dies. He comes back, ever now and then... grumpy as ever and we can expect someone like you to come knocking on his door asking him to turn down that noise.<br>
Well buck up kid, take these Medals of Glory... better than a lousy t-shirt.
</body></html>

View File

@@ -1,171 +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.Q00907_DragonTrophyValakas;
import com.l2jmobius.gameserver.enums.QuestSound;
import com.l2jmobius.gameserver.enums.QuestType;
import com.l2jmobius.gameserver.model.actor.L2Npc;
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
import com.l2jmobius.gameserver.model.quest.Quest;
import com.l2jmobius.gameserver.model.quest.QuestState;
import com.l2jmobius.gameserver.model.quest.State;
import com.l2jmobius.gameserver.util.Util;
/**
* Dragon Trophy - Valakas (907)
* @author Zoey76
*/
public class Q00907_DragonTrophyValakas extends Quest
{
// NPC
private static final int KLEIN = 31540;
// Monster
private static final int VALAKAS = 29028;
// Items
private static final int MEDAL_OF_GLORY = 21874;
private static final int VACUALITE_FLOATING_STONE = 7267;
// Misc
private static final int MIN_LEVEL = 85;
public Q00907_DragonTrophyValakas()
{
super(907);
addStartNpc(KLEIN);
addTalkId(KLEIN);
addKillId(VALAKAS);
}
@Override
public void actionForEachPlayer(L2PcInstance player, L2Npc npc, boolean isSummon)
{
final QuestState qs = getQuestState(player, false);
if ((qs != null) && qs.isCond(1) && Util.checkIfInRange(1500, npc, player, false))
{
qs.setCond(2, true);
}
}
@Override
public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
{
final QuestState qs = getQuestState(player, false);
if (qs == null)
{
return null;
}
String htmltext = null;
if ((player.getLevel() >= MIN_LEVEL) && hasQuestItems(player, VACUALITE_FLOATING_STONE))
{
switch (event)
{
case "31540-05.htm":
case "31540-06.htm":
{
htmltext = event;
break;
}
case "31540-07.html":
{
qs.startQuest();
htmltext = event;
break;
}
}
}
return htmltext;
}
@Override
public String onKill(L2Npc npc, L2PcInstance killer, boolean isSummon)
{
executeForEachPlayer(killer, npc, isSummon, true, true);
return super.onKill(npc, killer, isSummon);
}
@Override
public String onTalk(L2Npc npc, L2PcInstance player)
{
final QuestState qs = getQuestState(player, true);
String htmltext = getNoQuestMsg(player);
switch (qs.getState())
{
case State.CREATED:
{
if (player.getLevel() < MIN_LEVEL)
{
htmltext = "31540-02.html";
}
else if (!hasQuestItems(player, VACUALITE_FLOATING_STONE))
{
htmltext = "31540-04.html";
}
else
{
htmltext = "31540-01.htm";
}
break;
}
case State.STARTED:
{
switch (qs.getCond())
{
case 1:
{
htmltext = "31540-08.html";
break;
}
case 2:
{
giveItems(player, MEDAL_OF_GLORY, 30);
playSound(player, QuestSound.ITEMSOUND_QUEST_ITEMGET);
qs.exitQuest(QuestType.DAILY, true);
htmltext = "31540-09.html";
break;
}
}
break;
}
case State.COMPLETED:
{
if (!qs.isNowAvailable())
{
htmltext = "31540-03.html";
}
else
{
qs.setState(State.CREATED);
if (player.getLevel() < MIN_LEVEL)
{
htmltext = "31540-02.html";
}
else if (!hasQuestItems(player, VACUALITE_FLOATING_STONE))
{
htmltext = "31540-04.html";
}
else
{
htmltext = "31540-01.htm";
}
}
break;
}
}
return htmltext;
}
}

View File

@@ -81,11 +81,10 @@ public final class Q10363_RequestOfTheSeeker extends Quest
case "33450-03.htm":
{
qs.startQuest();
showOnScreenMsg(player, NpcStringId.USE_THE_YE_SAGIRA_TELEPORT_DEVICE_TO_GO_TO_EXPLORATION_AREA_2, ExShowScreenMessage.TOP_CENTER, 10000);
showOnScreenMsg(player, NpcStringId.USE_THE_YE_SAGIRA_TELEPORT_DEVICE_SHINING_WITH_A_RED_SHIMMER_TO_GO_TO_EXPLORATION_AREA_2, ExShowScreenMessage.TOP_CENTER, 10000);
htmltext = event;
break;
}
case "33451-02.html":
{
if (qs.isCond(2))
@@ -94,7 +93,6 @@ public final class Q10363_RequestOfTheSeeker extends Quest
addExpAndSp(player, 70000, 13);
qs.exitQuest(false, true);
htmltext = event;
break;
}
break;
}
@@ -115,7 +113,6 @@ public final class Q10363_RequestOfTheSeeker extends Quest
if (npc.getId() == NAGEL)
{
htmltext = "33450-01.htm";
break;
}
break;
}
@@ -123,30 +120,17 @@ public final class Q10363_RequestOfTheSeeker extends Quest
{
if (npc.getId() == NAGEL)
{
switch (qs.getCond())
{
case 1:
case 2:
{
htmltext = "33450-04.html";
break;
}
}
break;
htmltext = "33450-04.html";
}
else if (npc.getId() == CELIN)
else if ((npc.getId() == CELIN) && qs.isCond(2))
{
if (qs.isCond(2))
{
htmltext = "33451-01.html";
break;
}
htmltext = "33451-01.html";
}
break;
}
case State.COMPLETED:
{
htmltext = npc.getId() == NAGEL ? "33450-07.html" : "33451-04.html";
htmltext = getAlreadyCompletedMsg(player);
break;
}
}

View File

@@ -29,7 +29,7 @@ import quests.Q10363_RequestOfTheSeeker.Q10363_RequestOfTheSeeker;
/**
* Obligations of the Seeker (10364)
* @URL https://l2wiki.com/Obligations_of_the_Seeker
* @author Gladicek
* @author Stayway
*/
public final class Q10364_ObligationsOfTheSeeker extends Quest
{
@@ -37,6 +37,7 @@ public final class Q10364_ObligationsOfTheSeeker extends Quest
private static final int CELIN = 33451;
private static final int WALTER = 33452;
private static final int DEP = 33453;
// Monsters
private static final int KRAPHER = 22996;
private static final int AVIAN = 22994;
// Items
@@ -44,7 +45,7 @@ public final class Q10364_ObligationsOfTheSeeker extends Quest
private static final int LEATHER_SHOES = 37;
// Misc
private static final int MIN_LEVEL = 13;
private static final int MAX_LEVEL = 20;
private static final int MAX_LEVEL = 25;
public Q10364_ObligationsOfTheSeeker()
{
@@ -81,7 +82,7 @@ public final class Q10364_ObligationsOfTheSeeker extends Quest
case "33451-03.html":
{
qs.startQuest();
showOnScreenMsg(player, NpcStringId.USE_THE_YE_SAGIRA_TELEPORT_DEVICE_TO_GO_TO_EXPLORATION_AREA_3, ExShowScreenMessage.TOP_CENTER, 10000);
showOnScreenMsg(player, NpcStringId.USE_THE_YE_SAGIRA_TELEPORT_DEVICE_SHINING_WITH_A_RED_SHIMMER_TO_GO_TO_EXPLORATION_AREA_3, ExShowScreenMessage.TOP_CENTER, 10000);
htmltext = event;
break;
}
@@ -91,7 +92,6 @@ public final class Q10364_ObligationsOfTheSeeker extends Quest
{
qs.setCond(2, true);
htmltext = event;
break;
}
break;
}
@@ -103,7 +103,6 @@ public final class Q10364_ObligationsOfTheSeeker extends Quest
addExpAndSp(player, 114000, 14);
qs.exitQuest(false, true);
htmltext = event;
break;
}
break;
}
@@ -122,7 +121,7 @@ public final class Q10364_ObligationsOfTheSeeker extends Quest
{
qs.setCond(0);
qs.setCond(3);
showOnScreenMsg(killer, NpcStringId.USE_THE_YE_SAGIRA_TELEPORT_DEVICE_TO_GO_TO_EXPLORATION_AREA_4, ExShowScreenMessage.TOP_CENTER, 4500);
showOnScreenMsg(killer, NpcStringId.USE_THE_YE_SAGIRA_TELEPORT_DEVICE_SHINING_WITH_A_RED_SHIMMER_TO_GO_TO_EXPLORATION_AREA_4, ExShowScreenMessage.TOP_CENTER, 4500);
}
}
return super.onKill(npc, killer, isSummon);
@@ -141,7 +140,6 @@ public final class Q10364_ObligationsOfTheSeeker extends Quest
if (npc.getId() == CELIN)
{
htmltext = "33451-01.htm";
break;
}
break;
}
@@ -153,9 +151,8 @@ public final class Q10364_ObligationsOfTheSeeker extends Quest
{
if (qs.isCond(1))
{
showOnScreenMsg(player, NpcStringId.USE_THE_YE_SAGIRA_TELEPORT_DEVICE_TO_GO_TO_EXPLORATION_AREA_3, ExShowScreenMessage.TOP_CENTER, 10000);
htmltext = "33451-06.html";
break;
showOnScreenMsg(player, NpcStringId.USE_THE_YE_SAGIRA_TELEPORT_DEVICE_SHINING_WITH_A_RED_SHIMMER_TO_GO_TO_EXPLORATION_AREA_3, ExShowScreenMessage.TOP_CENTER, 10000);
htmltext = "33451-05.html";
}
break;
}
@@ -186,33 +183,15 @@ public final class Q10364_ObligationsOfTheSeeker extends Quest
if (qs.isCond(3))
{
htmltext = "33453-01.html";
break;
}
}
break;
}
}
break;
}
case State.COMPLETED:
{
switch (npc.getId())
{
case CELIN:
{
htmltext = "33451-05.html";
break;
}
case WALTER:
{
htmltext = "33452-07.html";
break;
}
case DEP:
{
htmltext = "33453-05.html";
break;
}
}
htmltext = getAlreadyCompletedMsg(player);
break;
}
}

View File

@@ -87,7 +87,6 @@ public final class Q10365_ForTheSearchdogKing extends Quest
addExpAndSp(player, 172000, 15);
qs.exitQuest(false, true);
htmltext = event;
break;
}
break;
}
@@ -99,7 +98,6 @@ public final class Q10365_ForTheSearchdogKing extends Quest
public String onKill(L2Npc npc, L2PcInstance killer, boolean isSummon)
{
final QuestState qs = getQuestState(killer, false);
if ((qs != null) && qs.isCond(1))
{
if (giveItemRandomly(killer, npc, KINGS_TONIC, 1, 20, 0.5, true))
@@ -125,7 +123,6 @@ public final class Q10365_ForTheSearchdogKing extends Quest
if (npc.getId() == DEP)
{
htmltext = "33453-01.htm";
break;
}
break;
}
@@ -137,10 +134,10 @@ public final class Q10365_ForTheSearchdogKing extends Quest
{
if (qs.isCond(1))
{
showOnScreenMsg(player, NpcStringId.USE_THE_YE_SAGIRA_TELEPORT_DEVICE_TO_GO_TO_EXPLORATION_AREA_3, ExShowScreenMessage.TOP_CENTER, 10000);
showOnScreenMsg(player, NpcStringId.USE_THE_YE_SAGIRA_TELEPORT_DEVICE_SHINING_WITH_A_RED_SHIMMER_TO_GO_TO_EXPLORATION_AREA_5, ExShowScreenMessage.TOP_CENTER, 10000);
htmltext = "33453-05.html";
break;
}
break;
}
case SEBION:
{
@@ -150,15 +147,14 @@ public final class Q10365_ForTheSearchdogKing extends Quest
}
break;
}
case State.COMPLETED:
{
htmltext = getAlreadyCompletedMsg(player);
break;
}
}
break;
}
case State.COMPLETED:
{
htmltext = getAlreadyCompletedMsg(player);
break;
}
}
return htmltext;
}

View File

@@ -1,4 +1,4 @@
<html><body>Sebion:<br>
This place is dangerous. I think it's best if you go back to town.<br>
(Only level 16-25 characters who have completed the 'For The Searchdog King' may complete this quest.)
(Only level 17-25 characters who have completed the 'For The Searchdog King' may complete this quest.)
</body></html>

View File

@@ -44,11 +44,10 @@ public final class Q10366_ReportOnTheSituationAtTheRuins extends Quest
22993, // Critter
22994, // Avian
22995, // Rider
23122
// Eyesaroch
23122 // Eyesaroch
};
// Misc
private static final int MIN_LEVEL = 16;
private static final int MIN_LEVEL = 17;
private static final int MAX_LEVEL = 25;
private static final String KILL_COUNT_VAR = "KillCount";

View File

@@ -1,4 +0,0 @@
<html><body>Eva's Knight Lionel Hunter:<br>
The powers you possess may be to die for to the common folk, but they are nothing to me. But Lady Eva chooses, not I. With her favor, you deserve to at least hear me out. Well, listen well.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10461_TappingThePowerWithin 33907-02.htm">"Uh oh."</Button>
</body></html>

View File

@@ -1,4 +0,0 @@
<html><body>Eva's Knight Lionel Hunter:<br>
Who do you think are the ones who live on in history? Noble are their souls, and their strength is unhindered by bodily limits.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10461_TappingThePowerWithin 33907-03.htm">"Oh. Uh, I knew that. Anyway, go on."</Button>
</body></html>

View File

@@ -1,4 +0,0 @@
<html><body>Eva's Knight Lionel Hunter:<br>
Well then, how do you measure up? Perhaps slightly greater than others in strength, but nowhere close to a legendary hero. But Lady Eva has chosen you, and I bow to her choice. I will help you if you wish to take the next step in strengthening yourself. Are you willing?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10461_TappingThePowerWithin 33907-04.htm">"Yes."</Button>
</body></html>

View File

@@ -1,4 +0,0 @@
<html><body>Eva's Knight Lionel Hunter:<br>
Very well. If you wish to tap the power within you, listen to my words, and listen carefully. I need your full conviction that you want this, before allowing you to choose the class which will bring about this new power.<br><br>
<font color="LEVEL">(This quest only rewards either the main or dual class. Please switch to the class for which you want rewards before proceeding with the quest.)</font>
</body></html>

View File

@@ -1,5 +0,0 @@
<html><body>Eva's Knight Lionel Hunter:<br>
Are you ready? Ready to bring out your hidden power? As the first step, I will give you <font color="LEVEL">Skill Points</font> so that you can acquire <font color="LEVEL">Ability Points</font> with them.<br>
<font color="LEVEL">(In this quest, you get skill points required to get the 1st Ability Point.Please switch to the class for which you want rewards before proceeding with the quest. If your character already has AP, you may be unable to acquire the 1 AP with the SP awarded.)</font><br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10461_TappingThePowerWithin 33907-06.html">"I'd like to receive rewards for the current class."</Button>
</body></html>

View File

@@ -1,3 +0,0 @@
<html><body>Eva's Knight Lionel Hunter:<br>
Very well. You are ready. Whether this leads to glory or suffering is for you to decide. Eva be with you!
</body></html>

View File

@@ -1,4 +0,0 @@
<html><body>Eva's Knight Lionel Hunter:<br>
I only serve Lady Eva and Innadril. If you have no business with me, be gone.<br>
(Only Noblesse or Exalted characters Lv. 99 or above can perform this quest.)
</body></html>

View File

@@ -1,3 +0,0 @@
<html><body>Eva's Knight Lionel Hunter:<br>
I see that there is nothing I can teach you that you do not already know yourself.
</body></html>

View File

@@ -1,125 +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.Q10461_TappingThePowerWithin;
import com.l2jmobius.gameserver.enums.ChatType;
import com.l2jmobius.gameserver.model.actor.L2Npc;
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
import com.l2jmobius.gameserver.model.quest.Quest;
import com.l2jmobius.gameserver.model.quest.QuestState;
import com.l2jmobius.gameserver.model.quest.State;
import com.l2jmobius.gameserver.network.NpcStringId;
import com.l2jmobius.gameserver.network.serverpackets.ExShowScreenMessage;
import com.l2jmobius.gameserver.network.serverpackets.TutorialShowHtml;
import com.l2jmobius.gameserver.network.serverpackets.ability.ExShowAPListWnd;
/**
* Tapping The Power Within (10461)
* @author Gladicek
*/
public final class Q10461_TappingThePowerWithin extends Quest
{
// NPCs
private static final int LIONEL_HUNTER = 33907;
// Misc
private static final int MIN_LEVEL = 99;
public Q10461_TappingThePowerWithin()
{
super(10461);
addStartNpc(LIONEL_HUNTER);
addTalkId(LIONEL_HUNTER);
}
@Override
public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
{
final QuestState qs = getQuestState(player, false);
if (qs == null)
{
return null;
}
String htmltext = event;
switch (event)
{
case "33907-02.htm":
case "33907-03.htm":
{
htmltext = event;
break;
}
case "33907-04.htm":
{
qs.startQuest();
npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.DOES_YOUR_FATE_NOT_WEIGH_UPON_YOU);
player.sendPacket(new TutorialShowHtml(npc.getObjectId(), "..\\L2text\\QT_025_ability_01.htm", TutorialShowHtml.LARGE_WINDOW));
break;
}
case "33907-06.html":
{
if (!player.isSubClassActive() || (player.isDualClassActive()))
{
showOnScreenMsg(player, NpcStringId.OPEN_THE_ABILITY_SCREEN_IN_THE_CHARACTER_INFORMATION_SCREEN_NPRESS_ADJUST_POINTS_TO_ADJUST_THE_ACQUIRED_SP_AND_ABILITY_POINTS, ExShowScreenMessage.TOP_CENTER, 5000);
npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.THIS_IS_JUST_THE_BEGINNING);
player.sendPacket(ExShowAPListWnd.STATIC_PACKET);
addExpAndSp(player, 0, 250_000_000);
qs.exitQuest(false, true);
htmltext = event;
}
break;
}
}
return htmltext;
}
@Override
public String onTalk(L2Npc npc, L2PcInstance player)
{
final QuestState qs = getQuestState(player, true);
String htmltext = getNoQuestMsg(player);
switch (qs.getState())
{
case State.CREATED:
{
if (((player.getLevel() >= MIN_LEVEL) && (player.getNobleLevel() > 0)))
{
htmltext = "33907-01.htm";
break;
}
htmltext = "33907-07.html";
break;
}
case State.STARTED:
{
if (qs.isCond(1))
{
htmltext = "33907-05.html";
}
break;
}
case State.COMPLETED:
{
htmltext = "33907-08.html";
break;
}
}
return htmltext;
}
}

View File

@@ -188,10 +188,8 @@ import quests.Q00823_DisappearedRaceNewFairy.Q00823_DisappearedRaceNewFairy;
import quests.Q00901_HowLavasaurusesAreMade.Q00901_HowLavasaurusesAreMade;
import quests.Q00902_ReclaimOurEra.Q00902_ReclaimOurEra;
import quests.Q00903_TheCallOfAntharas.Q00903_TheCallOfAntharas;
import quests.Q00904_DragonTrophyAntharas.Q00904_DragonTrophyAntharas;
import quests.Q00905_RefinedDragonBlood.Q00905_RefinedDragonBlood;
import quests.Q00906_TheCallOfValakas.Q00906_TheCallOfValakas;
import quests.Q00907_DragonTrophyValakas.Q00907_DragonTrophyValakas;
import quests.Q00937_ToReviveTheFishingGuild.Q00937_ToReviveTheFishingGuild;
import quests.Q10273_GoodDayToFly.Q10273_GoodDayToFly;
import quests.Q10274_CollectingInTheAir.Q10274_CollectingInTheAir;
@@ -321,7 +319,6 @@ import quests.Q10453_StoppingTheWindDragon.Q10453_StoppingTheWindDragon;
import quests.Q10455_ElikiasLetter.Q10455_ElikiasLetter;
import quests.Q10459_ASickAmbition.Q10459_ASickAmbition;
import quests.Q10460_ReturnOfTheAlligatorHunter.Q10460_ReturnOfTheAlligatorHunter;
import quests.Q10461_TappingThePowerWithin.Q10461_TappingThePowerWithin;
import quests.Q10462_TemperARustingBlade.Q10462_TemperARustingBlade;
import quests.Q10465_SoulFrostSword.Q10465_SoulFrostSword;
import quests.Q10472_WindsOfFateEncroachingShadows.Q10472_WindsOfFateEncroachingShadows;
@@ -608,10 +605,8 @@ public class QuestMasterHandler
Q00901_HowLavasaurusesAreMade.class,
Q00902_ReclaimOurEra.class,
Q00903_TheCallOfAntharas.class,
Q00904_DragonTrophyAntharas.class,
Q00905_RefinedDragonBlood.class,
Q00906_TheCallOfValakas.class,
Q00907_DragonTrophyValakas.class,
Q00937_ToReviveTheFishingGuild.class,
Q10273_GoodDayToFly.class,
Q10274_CollectingInTheAir.class,
@@ -741,7 +736,6 @@ public class QuestMasterHandler
Q10455_ElikiasLetter.class,
Q10459_ASickAmbition.class,
Q10460_ReturnOfTheAlligatorHunter.class,
Q10461_TappingThePowerWithin.class,
Q10462_TemperARustingBlade.class,
Q10465_SoulFrostSword.class,
Q10472_WindsOfFateEncroachingShadows.class,