Merged with released L2J-Unity files.

This commit is contained in:
mobiusdev
2016-06-12 01:34:09 +00:00
parent e003e87887
commit 635557f5da
18352 changed files with 3245113 additions and 2892959 deletions

View File

@@ -0,0 +1,4 @@
<html><body>Magister Ayanthe:<br>
It's hard to find people with passion and drive these days.<br>
(This quest can only be performed by Ertheia who have completed "The Test for Survival" and are Lv. 20 or below.)
</body></html>

View File

@@ -1,6 +1,6 @@
<html><head><body>Magister Ayanthe:<br>
Break's over. It's time to begin some earnest training.<br>
We're going to the training camp. The monsters there are illusions based on actual monsters that live outside this town. Practice means getting some real battle experience while overcoming its dangers. I'll be going with you, so don't be scared.<br>
So, are we ready?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10735_ASpecialPower 33942-02.html">"I am ready."</Button>
<html><body>Magister Ayanthe:<br>
Break's over. It's time to begin some earnest training.<br>
We're going to the training camp. The monsters there are illusions based on actual monsters that live outside this town. Practice means getting some real battle experience while overcoming its dangers. I'll be going with you, so don't be scared.<br>
So, are we ready?<br>
<button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10735_ASpecialPower 33942-02.htm">"I am ready."</button>
</body></html>

View File

@@ -1,4 +1,4 @@
<html><head><body>Magister Ayanthe:<br>
Good. Shall we start?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest FaeronTrainingGrounds1 enter_instance">"Let's enter the training camp."</Button>
<html><body>Magister Ayanthe:<br>
Good. Shall we start?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest FaeronTrainingGrounds1 enter_instance">"Let's enter the training camp."</button>
</body></html>

View File

@@ -1,4 +1,5 @@
<html><head><body>Magister Ayanthe:<br>
Meeting outside is a nice change, isn't it?<br>
You've certainly worked very hard. I'm proud to call you my pupil.
<html><body>Magister Ayanthe:<br>
Quitting in the middle of your training is a bad habit to get into. Focus once you're back inside the training camp.<br>
Are you ready?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest FaeronTrainingGrounds1 enter_instance">"I'm ready."</button>
</body></html>

View File

@@ -1,5 +1,5 @@
<html><head><body>Magister Ayanthe:<br>
It's not a good habit to leave while training. You need to focus when you're back in there.<br>
Are you ready<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest FaeronTrainingGrounds1 enter_instance">"I'm ready"</Button>
<html><body>Magister Ayanthe:<br>
Quitting in the middle of your training is a bad habit to get into. Focus once you're back inside the training camp.<br>
Are you ready?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest FaeronTrainingGrounds1 enter_instance">"I'm ready."</button>
</body></html>

View File

@@ -0,0 +1,4 @@
<html><body>Magister Ayanthe:<br>
Meeting outside is a nice change, isn't it?<br>
You've certainly worked very hard. I'm proud to call you my pupil.
</body></html>

View File

@@ -1,3 +0,0 @@
<html><head><body>Magister Ayanthe:<br>
The monsters are coming. Concentrate and attack!
</body></html>

View File

@@ -1,4 +0,0 @@
<html><body>Magister Ayanthe:<br>
Focus on the fight!<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10735_ASpecialPower 33944-03.html">"Create more monsters so I can train."</Button>
</body></html>

View File

@@ -1,4 +0,0 @@
<html><head><body>Magister Ayanthe:<br>
Good. It pleases me that you're taking your training so seriously.<br>
But bear in mind that this is training, and not the real world. We will limit the number of monsters you face in a single encounter.
</body></html>

View File

@@ -1,7 +0,0 @@
<html><head><body>Magister Ayanthe:<br>
You're better than I expected. Feels different from training with a dummy, right?<br>
Here, take these <font color="LEVEL">Spiritshots</font>. Right now, your weapon has no grade, but as you become stronger, you'll be using D-grade, C-grade, and even R-grade weapons. They're proving to be very valuable in the Material Realm.<br>
Go ahead and <font color="LEVEL">activate the Spiritshots</font>.<br>
I'll go prepare more monsters for your next training session, so let me know when the Spiritshots have been activated.<br>
(You can conveniently automate your Spiritshots by creating a <font color="LEVEL">shortcut</font> and then <font color="LEVEL">right-click</font> on it.)
</body></html>

View File

@@ -1,3 +0,0 @@
<html><head><body>Magister Ayanthe:<br>
All right, now your training begins again!
</body></html>

View File

@@ -1,6 +0,0 @@
<html><body>Magister Ayanthe:<br>
I see you're a quick study. I'm impressed. I can't wait to see how much you'll have improved in the future. You have recovered some of your power that has been sealed while passing through the Dimensional Rift. These are called <font color="LEVEL">Skills</font>.<br>
The more abilities you recover, the stronger you'll grow.<br>
Now that you've recovered some of your power, shall we face tougher enemies? Are you ready?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10735_ASpecialPower 33944-07.html">"My body is ready."</Button>
</body></html>

View File

@@ -1,3 +0,0 @@
<html><head><body>Magister Ayanthe:<br>
If you don't use your <font color="LEVEL">skills</font>, this next battle will be difficult!
</body></html>

View File

@@ -1,4 +0,0 @@
<html><body>Magister Ayanthe:<br>
Great work. You've made me very proud. You must be exhausted. Shall we steep outside?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest FaeronTrainingGrounds1 exit_instance">"I'd like to go outside."</Button>
</body></html>

View File

@@ -1,268 +1,158 @@
/*
* 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.Q10735_ASpecialPower;
import com.l2jmobius.gameserver.enums.QuestSound;
import com.l2jmobius.gameserver.enums.Race;
import com.l2jmobius.gameserver.model.Location;
import com.l2jmobius.gameserver.model.actor.L2Npc;
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
import com.l2jmobius.gameserver.model.base.ClassId;
import com.l2jmobius.gameserver.model.holders.ItemHolder;
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 quests.Q10734_DoOrDie.Q10734_DoOrDie;
/**
* @author Sdw
*/
public class Q10735_ASpecialPower extends Quest
{
// NPC's
private static final int AYANTHE = 33942;
private static final int AYANTHE_2 = 33944;
private static final int FLOATO = 27526;
private static final int RATEL = 27527;
// Misc
private static final int MIN_LEVEL = 4;
private static final int MAX_LEVEL = 20;
// Items
private static final ItemHolder SPIRITSHOTS_TRAINING = new ItemHolder(2509, 150);
private static final ItemHolder SPIRITSHOTS_REWARD = new ItemHolder(2509, 500);
// Locations
private static final Location MOB_1 = new Location(-75112, 240760, -3615);
private static final Location MOB_2 = new Location(-75016, 240456, -3628);
private static final int KILL_COUNT_ID = 0;
public Q10735_ASpecialPower()
{
super(10735, Q10735_ASpecialPower.class.getSimpleName(), "A Special Power");
addStartNpc(AYANTHE);
addTalkId(AYANTHE, AYANTHE_2);
addKillId(FLOATO, RATEL);
addCondLevel(MIN_LEVEL, MAX_LEVEL, "no_quest.html");
addCondRace(Race.ERTHEIA, "no_quest.html");
addCondClassId(ClassId.ERTHEIA_WIZARD, "no_quest.html");
addCondCompletedQuest(Q10734_DoOrDie.class.getSimpleName(), "no_quest.html");
}
@Override
public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
{
final QuestState qs = getQuestState(player, false);
if (qs == null)
{
return null;
}
String htmltext = null;
switch (event)
{
case "33942-02.html":
{
qs.startQuest();
htmltext = event;
break;
}
case "33944-03.html":
{
htmltext = event;
showOnScreenMsg(player, NpcStringId.ATTACK_THE_MONSTER, ExShowScreenMessage.TOP_CENTER, 4500);
break;
}
case "showscreen_1":
{
showOnScreenMsg(player, NpcStringId.AUTOMATE_SPIRITSHOT_AS_SHOWN_IN_THE_TUTORIAL, ExShowScreenMessage.TOP_CENTER, 4500);
break;
}
case "33944-07.html":
{
if (qs.isCond(5))
{
qs.setCond(6);
showOnScreenMsg(player, NpcStringId.FIGHT_USING_SKILLS, ExShowScreenMessage.TOP_CENTER, 4500);
addSpawn(RATEL, MOB_1, false, 0, false, player.getInstanceId());
addSpawn(RATEL, MOB_2, false, 0, false, player.getInstanceId());
htmltext = event;
}
break;
}
}
return htmltext;
}
@Override
public String onTalk(L2Npc npc, L2PcInstance player)
{
final QuestState qs = getQuestState(player, true);
String htmltext = qs.isCompleted() ? getAlreadyCompletedMsg(player) : getNoQuestMsg(player);
switch (npc.getId())
{
case AYANTHE:
{
switch (qs.getState())
{
case State.CREATED:
{
htmltext = "33942-01.htm";
break;
}
case State.STARTED:
{
switch (qs.getCond())
{
case 1:
{
htmltext = "33942-02.html";
break;
}
case 2:
case 3:
case 4:
case 5:
case 6:
{
htmltext = "33942-04.html";
break;
}
case 7:
{
htmltext = "33942-03.html";
giveAdena(player, 900, true);
rewardItems(player, SPIRITSHOTS_REWARD);
addExpAndSp(player, 3154, 0);
qs.exitQuest(false, true);
break;
}
}
break;
}
}
break;
}
case AYANTHE_2:
{
switch (qs.getCond())
{
case 1:
{
showOnScreenMsg(player, NpcStringId.ATTACK_THE_MONSTER, ExShowScreenMessage.TOP_CENTER, 4500);
qs.setCond(2, true);
addSpawn(FLOATO, MOB_1, false, 0, false, player.getInstanceId());
addSpawn(FLOATO, MOB_2, false, 0, false, player.getInstanceId());
htmltext = "33944-01.html";
break;
}
case 2:
case 4:
case 6:
{
htmltext = "33944-02.html";
break;
}
case 3:
{
if (qs.getInt("ss") == 1)
{
addSpawn(FLOATO, MOB_1, false, 0, false, player.getInstanceId());
addSpawn(FLOATO, MOB_2, false, 0, false, player.getInstanceId());
showOnScreenMsg(player, NpcStringId.ATTACK_THE_MONSTER, ExShowScreenMessage.TOP_CENTER, 4500);
htmltext = "33944-05.html";
qs.setCond(4, true);
}
else
{
giveItems(player, SPIRITSHOTS_TRAINING);
showOnScreenMsg(player, NpcStringId.SPIRITSHOT_HAVE_BEEN_ADDED_TO_YOUR_INVENTORY, ExShowScreenMessage.TOP_CENTER, 4500);
startQuestTimer("showscreen_1", 4500, npc, player);
player.sendPacket(new TutorialShowHtml(npc.getObjectId(), "..\\L2Text\\QT_003_bullet_01.htm", TutorialShowHtml.LARGE_WINDOW));
htmltext = "33944-04.html";
qs.set("ss", 1);
}
break;
}
case 5:
{
htmltext = "33944-06.html";
player.sendPacket(new TutorialShowHtml(npc.getObjectId(), "..\\L2Text\\QT_004_skill_01.htm", TutorialShowHtml.LARGE_WINDOW));
break;
}
case 7:
{
htmltext = "33944-08.html";
break;
}
}
break;
}
}
return htmltext;
}
@Override
public String onKill(L2Npc npc, L2PcInstance killer, boolean isSummon)
{
final QuestState qs = getQuestState(killer, false);
if (qs != null)
{
final int cond = qs.getCond();
if (npc.getId() == FLOATO)
{
if ((cond == 2) || (cond == 4))
{
final int value = qs.getMemoStateEx(KILL_COUNT_ID) + 1;
playSound(killer, QuestSound.ITEMSOUND_QUEST_ITEMGET);
if (value >= 2)
{
qs.setCond(cond + 1, true);
qs.setMemoStateEx(KILL_COUNT_ID, 0);
}
else
{
qs.setMemoStateEx(KILL_COUNT_ID, value);
}
}
}
else if ((npc.getId() == RATEL) && (cond == 6))
{
final int value = qs.getMemoStateEx(KILL_COUNT_ID) + 1;
playSound(killer, QuestSound.ITEMSOUND_QUEST_ITEMGET);
if (value >= 2)
{
qs.setCond(cond + 1, true);
qs.setMemoStateEx(KILL_COUNT_ID, 0);
showOnScreenMsg(killer, NpcStringId.TALK_TO_AYANTHE_TO_LEAVE_THE_TRAINING_GROUNDS, ExShowScreenMessage.TOP_CENTER, 4500);
}
else
{
qs.setMemoStateEx(KILL_COUNT_ID, value);
}
}
}
return super.onKill(npc, killer, isSummon);
}
}
/*
* 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.Q10735_ASpecialPower;
import java.util.HashSet;
import java.util.Set;
import com.l2jmobius.gameserver.enums.Race;
import com.l2jmobius.gameserver.model.actor.L2Npc;
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
import com.l2jmobius.gameserver.model.base.ClassId;
import com.l2jmobius.gameserver.model.holders.ItemHolder;
import com.l2jmobius.gameserver.model.holders.NpcLogListHolder;
import com.l2jmobius.gameserver.model.quest.Quest;
import com.l2jmobius.gameserver.model.quest.QuestState;
import com.l2jmobius.gameserver.model.quest.State;
import quests.Q10734_DoOrDie.Q10734_DoOrDie;
/**
* A Special Power (10735)<br>
* Instance part is implemented in <b>FaeronTrainingGrounds1</b> script.
* @author Sdw
*/
public final class Q10735_ASpecialPower extends Quest
{
// NPC
private static final int AYANTHE = 33942;
// Monsters
private static final int FLOATO = 27526;
private static final int FLOATO2 = 27531;
private static final int RATEL = 27527;
// Reward
private static final ItemHolder SPIRITSHOTS_REWARD = new ItemHolder(2509, 500);
// Misc
private static final int MIN_LEVEL = 4;
private static final int MAX_LEVEL = 20;
public static final int KILL_COUNT_VAR = 0;
public Q10735_ASpecialPower()
{
super(10735);
addStartNpc(AYANTHE);
addTalkId(AYANTHE);
addCondRace(Race.ERTHEIA, "");
addCondClassId(ClassId.ERTHEIA_WIZARD, "");
addCondLevel(MIN_LEVEL, MAX_LEVEL, "33942-00.htm");
addCondCompletedQuest(Q10734_DoOrDie.class.getSimpleName(), "33942-00.htm");
}
@Override
public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
{
final QuestState qs = getQuestState(player, false);
if ((qs != null) && event.equals("33942-02.htm"))
{
qs.startQuest();
return event;
}
return null;
}
@Override
public String onTalk(L2Npc npc, L2PcInstance player, boolean isSimulated)
{
final QuestState qs = getQuestState(player, true);
String htmltext = getNoQuestMsg(player);
switch (qs.getState())
{
case State.CREATED:
{
htmltext = "33942-01.htm";
break;
}
case State.STARTED:
{
switch (qs.getCond())
{
case 1:
{
htmltext = "33942-03.html";
break;
}
case 2:
case 3:
case 4:
case 5:
case 6:
{
htmltext = "33942-04.html";
break;
}
case 7:
{
if (!isSimulated)
{
giveAdena(player, 900, true);
rewardItems(player, SPIRITSHOTS_REWARD);
addExpAndSp(player, 3154, 0);
qs.exitQuest(false, true);
}
htmltext = "33942-05.html";
break;
}
}
break;
}
case State.COMPLETED:
htmltext = getAlreadyCompletedMsg(player);
break;
}
return htmltext;
}
@Override
public Set<NpcLogListHolder> getNpcLogList(L2PcInstance player)
{
final Set<NpcLogListHolder> holder = new HashSet<>();
final QuestState qs = getQuestState(player, false);
if (qs != null)
{
int npcId = -1;
switch (qs.getCond())
{
case 2:
npcId = FLOATO;
break;
case 4:
npcId = FLOATO2;
break;
case 6:
npcId = RATEL;
break;
}
if (npcId != -1)
{
holder.add(new NpcLogListHolder(npcId, false, qs.getMemoStateEx(KILL_COUNT_VAR)));
}
}
return holder;
}
}

View File

@@ -1 +0,0 @@
<html><body>You either don't meet this NPC's minimum quest requirements, or your level is too low to start this quest.</body></html>