using Server.Gumps;
using Server.Items;
using Server.Mobiles;
using System;
using System.Linq;
namespace Server.Engines.Quests
{
public class JourneyToTheAthenaeumIsleQuest : BaseQuest
{
public override object Title => 1150929; // Journey to the Athenaeum Isle
public override object Description => 1150902; /*Greetings, adventurer.
As you know, my people have suffered the
* incessant onslaught of the Void and its minions for as long as Gargish
* history exists. Protecting Ter Mur from the darkness, and its desire to
* consume the land completely, is a burden passed down from one ruler to another
* upon ascension to the throne. During my rule, I have been more successful
* than my predecessors but, now, I fear that the greatest evil both myself and
* my people have ever faced is about to return.
Long ago, Ter Mur was
* assaulted by the most formidable and horrid servant of the Void it had ever faced.
* Called Scelestus the Defiler, this daemon proved invincible to any weapon or spell
* that was utilized against him. I was unable to defeat him and was forced to
* imprison him instead. Sadly, my own daughter was caught in the spell and stands
* imprisoned next to the daemon. It has been this way for a thousand years now.
*
I have received word that the isle which houses the daemon, Athenaeum
* Isle, is once again swarming with daemons. Based on the description provided to
* me, I believe these are the minions of the Defiler himself. They have no doubt
* crawled out of the dark in anticipation of their master’s return. In truth, the
* prison I placed him within will not last forever.
I ask that you journey
* to the southwestern flight tower, adventurer, and head further southwest towards
* the shore. Near the water's edge, you will find an ancient teleport site which
* will transport you to the isle. Once there, please slay as many of these monsters
* as you can. Additionally, please keep your eye out for any documents that you may
* discover. This isle was the former home of our Great Library and, when it fell,
* not all of the documents and books were able to be taken to the new location here
* in the Royal City.
Slay the beasts and return to me any documents that
* you acquire.
Be careful, and go with honor.*/
public override object Refuse => 1150930; // Understood. Perhaps you are not as brave as I initially thought. Be on your way, then.
public override object Uncomplete => 1150931; // You have returned. Did you manage to slay the beasts and obtain any documents that may be of interest?
public override object Complete => 1150903; /*You have returned! I cannot thank you enough for the service you have done me,
* adventurer.
The documents that you have retrieved may seem unimportant
* to you, as they are naught but random letters and doctrines. But they each
* represent an echo of the past, musings of our ancestors. I had always meant to
* return to the former library and retrieve all that I could, but I had thought they
* were safe, gathering dust in the ruins. I will immediately have these cleaned and
* placed in the Great Library here in the Royal City.
As thanks, I offer
* you this book. It is the chronicle of my life, of the arrival of the Defiler, and
* a history of my people. In hopes that you will be granted further understanding of
* the impending danger we suffer, I offer it to you as a gesture of friendship and
* goodwill.
Thank you again, on behalf of the Gargoyle people. I may have
* need of your assistance at another time, should you be willing to come to my aid
* again.
Until then, farewell.*/
public JourneyToTheAthenaeumIsleQuest()
{
AddObjective(new SlayObjective(typeof(MinionOfScelestus), "Minion of Scelestus", 10));
for (int i = 0; i < m_Types.Length; i++)
{
ObtainObjective obtain = new ObtainObjective(m_Types[i], m_Names[i], 1);
AddObjective(obtain);
}
//AddObjective( new InternalObjective() );
AddReward(new BaseReward(typeof(ChronicleOfTheGargoyleQueen1), 1, "Chronicle of the Gargoyle Queen Vol. I"));
}
public override bool RenderObjective(MondainQuestGump gump, bool offer)
{
int offset = 163;
int page = 1;
SlayObjective slay = Objectives.FirstOrDefault(o => o is SlayObjective) as SlayObjective;
if (offer)
gump.AddHtmlLocalized(130, 45, 270, 16, 1049010, 0xFFFFFF, false, false); // Quest Offer
else
gump.AddHtmlLocalized(130, 45, 270, 16, 1046026, 0xFFFFFF, false, false); // Quest Log
gump.AddHtmlObject(160, 70, 200, 40, Title, BaseQuestGump.DarkGreen, false, false);
gump.AddPage(page);
gump.AddButton(130, 430, 0x2EEF, 0x2EF1, 0, GumpButtonType.Page, page - 1);
gump.AddHtmlLocalized(98, 147, 312, 16, 1072208, 0x2710, false, false); // All of the following
gump.AddHtmlLocalized(98, offset, 30, 16, 1072204, 0x15F90, false, false); // Slay
gump.AddLabel(133, offset, 0x481, "10 " + slay.Name); // %count% + %name%
offset += 16;
if (!offer)
{
gump.AddHtmlLocalized(103, offset, 120, 16, 3000087, 0x15F90, false, false); // Total
gump.AddLabel(223, offset, 0x481, slay.CurProgress.ToString()); // %current progress%
offset += 16;
}
offset += 75;
for (int i = 1; i < Objectives.Count; i++)
{
gump.AddHtmlLocalized(98, offset, 305, 16, 1150933 + (i - 1), 0x15F90, false, false);
if (offset + 80 > 335)
{
offset = 163;
gump.AddButton(275, 430, 0x2EE9, 0x2EEB, 0, GumpButtonType.Page, page + 1);
gump.AddPage(++page);
gump.AddButton(130, 430, 0x2EEF, 0x2EF1, 0, GumpButtonType.Page, page - 1);
if (i == Objectives.Count - 1)
{
RenderRewardPage(gump, offer);
break;
}
}
// render rewards page
else if (i == Objectives.Count - 1)
{
gump.AddButton(275, 430, 0x2EE9, 0x2EEB, 0, GumpButtonType.Page, page + 1);
gump.AddPage(++page);
RenderRewardPage(gump, offer);
gump.AddButton(130, 430, 0x2EEF, 0x2EF1, 0, GumpButtonType.Page, page - 1);
break;
}
else
{
offset += 80;
}
}
return true;
}
private void RenderRewardPage(MondainQuestGump gump, bool offer)
{
int offset = 163;
if (offer)
gump.AddHtmlLocalized(130, 45, 270, 16, 1049010, 0xFFFFFF, false, false); // Quest Offer
else
gump.AddHtmlLocalized(130, 45, 270, 16, 1046026, 0xFFFFFF, false, false); // Quest Log
gump.AddHtmlLocalized(98, 140, 312, 16, 1072201, 0x2710, false, false); // Reward
BaseReward reward = Rewards[0];
gump.AddImage(105, offset, 0x4B9);
gump.AddHtmlObject(133, offset, 280, 100, reward.Name, BaseQuestGump.LightGreen, false, false);
}
private readonly Type[] m_Types =
{
typeof(ChallengeRite), typeof(AnthenaeumDecree), typeof(LetterFromTheKing),
typeof(OnTheVoid), typeof(ShilaxrinarsMemorial), typeof(ToTheHighScholar),
typeof(ToTheHighBroodmother), typeof(ReplyToTheHighScholar), typeof(AccessToTheIsle),
typeof(InMemory)
};
private readonly string[] m_Names =
{
"Obtain Gargish Document - Challenge Rite", "Obtain Gargish Document - Athenaeum Decree", "Obtain Gargish Document - Letter from the King",
"Obtain Gargish Document - On the Void", "Obtain Gargish Document - Shilaxrinar's Memorial", "Obtain Gargish Document - To the High Scholar",
"Obtain Gargish Document - To the High Broodmother", "Obtain Gargish Document - Reply to the High Scholar", "Obtain Gargish Document - Access to the Isle",
"Obtain Gargish Document - In Memory"
};
}
}