Overwrite
Complete Overwrite of the Folder with the free shard. ServUO 57.3 has been added.
This commit is contained in:
438
Scripts/Services/Town Cryer/Quests/APleaFromMinocQuest.cs
Normal file
438
Scripts/Services/Town Cryer/Quests/APleaFromMinocQuest.cs
Normal file
@@ -0,0 +1,438 @@
|
||||
using Server;
|
||||
using System;
|
||||
using Server.Items;
|
||||
using Server.Mobiles;
|
||||
using Server.Services.TownCryer;
|
||||
|
||||
namespace Server.Engines.Quests
|
||||
{
|
||||
public class APleaFromMinocQuest : BaseQuest
|
||||
{
|
||||
/* A Plea from Minoc */
|
||||
public override object Title { get { return 1158259; } }
|
||||
|
||||
/*The Governor of Minoc has made a plea to any and all of those willing and able to come to defense of the City.
|
||||
* Cora the Sorcerers has overtaken the Dungeon Covetous and corrupted the creatures that reside within. You hear
|
||||
* rumors the Governor has authorized the Sheriff of Minoc to bestow great fortune and fame to those who sacrifice
|
||||
* in the name of the city.*/
|
||||
public override object Description { get { return 1158260; } }
|
||||
|
||||
/* You decide against accepting the quest. */
|
||||
public override object Refuse { get { return 1158130; } }
|
||||
|
||||
/* Visit the Skara Brae Ranger's Guild and participate in the Huntmaster's Challenge */
|
||||
public override object Uncomplete { get { return 1158261; } }
|
||||
|
||||
/* You have braved the wilds of Britannia and slayed a mighty beast! You have meticulously documented your kill
|
||||
* and submitted it to the Ranger's Guild for evaluation. If luck was on your side you may indeed have
|
||||
* the largest quarry for the month...or maybe not. Alas, your bravery has earned you the well deserved title
|
||||
* of Hunter! May you go fearlessly into the wilderness in search of your next big kill! Well done! */
|
||||
public override object Complete { get { return 1158378; } }
|
||||
|
||||
public override int CompleteMessage { get { return 1156585; } } // You've completed a quest!
|
||||
|
||||
public override int AcceptSound { get { return 0x2E8; } }
|
||||
public override bool DoneOnce { get { return true; } }
|
||||
|
||||
public APleaFromMinocQuest()
|
||||
{
|
||||
AddObjective(new InternalObjective());
|
||||
|
||||
AddReward(new BaseReward(1158262)); // A Reward Title Deed
|
||||
}
|
||||
|
||||
public void CompleteQuest()
|
||||
{
|
||||
OnCompleted();
|
||||
Objectives[0].CurProgress++;
|
||||
TownCryerSystem.CompleteQuest(Owner, 1158275, 1158276, 0x65B);
|
||||
GiveRewards();
|
||||
}
|
||||
|
||||
private class InternalObjective : BaseObjective
|
||||
{
|
||||
public override object ObjectiveDescription { get { return Quest.Uncomplete; } }
|
||||
|
||||
public InternalObjective()
|
||||
: base(1)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.Write((int)0); // version
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class ClearingCovetousQuest : BaseQuest
|
||||
{
|
||||
/* Clearing Covetous */
|
||||
public override object Title { get { return 1158263; } }
|
||||
|
||||
/*That's right, I'm the Sheriff of Minoc, what can I help you with citizen? What you read in the Town Cryer is true,
|
||||
* Covetous has become quite dangerous. It seems a vile Sorcerers called Cora has overtaken the dungeon and corrupted
|
||||
* the creatures within, binding them to her cruel rule. The Lycaeum had been trying to contain her magics within
|
||||
* the dungeon with something called the "Void Pool" but the mage they sent has not been seen in quite some time.
|
||||
* The place is dangerous to say the least and requires skilled combatants who will encounter greater success if
|
||||
* they pool their resources. None the less, the Governor has authorized me to deputize any and all who sacrifice
|
||||
* on behalf of Minoc and attempt to cleanse Covetous. As you know the mountain is a key strategic resource to
|
||||
* valuable ore that is vital to Minoc's economy. Prove yourself to the City and you shall not soon be forgotten...*/
|
||||
public override object Description { get { return 1158264; } }
|
||||
|
||||
/* You decide against accepting the quest. */
|
||||
public override object Refuse { get { return 1158130; } }
|
||||
|
||||
/* Go to the dungeon Covetous Level 1 and defeat the creatures within! */
|
||||
public override object Uncomplete { get { return 1158266; } }
|
||||
|
||||
/* Indeed, you have proven yourself, and with your clearing of the creatures in the upper levels of Covetous Mountain our
|
||||
* miners can once again return to their normal operations, ensuring the lifeblood of our city is one again flowing. You
|
||||
* are no doubt brave and strong, but your next task will test your endurance no doubt. As I said, the Lycaeum is keeping
|
||||
* Cora's power at bay with something called the Void Pool. The magics prevent Cora herself from destroying it, but her
|
||||
* minions are not bound by that restriction. Only blade and spell can defeat her forces as they try to destroy the Void
|
||||
* Pool. Defend the Void Pool at all costs and sacrifice for Minoc. Do this and you will no doubt be remembered a hero. */
|
||||
//public override object Complete { get { return 1158268; } }
|
||||
|
||||
public override int CompleteMessage { get { return 1158267; } } // You've cleared enough creatures to allow the miners of
|
||||
// Minoc to return to their mining operations. Return to the Sheriff and report the news.
|
||||
|
||||
public override int AcceptSound { get { return 0x2E8; } }
|
||||
public override bool DoneOnce { get { return true; } }
|
||||
|
||||
public ClearingCovetousQuest()
|
||||
{
|
||||
AddObjective(new SlayObjective(typeof(HeadlessMiner), "headless miners", 40, "Covetous"));
|
||||
AddObjective(new SlayObjective(typeof(VampireMongbat), "vampire mongbats", 30, "Covetous"));
|
||||
AddObjective(new SlayObjective(typeof(DazzledHarpy), "dazzled harpies", 20, "Covetous"));
|
||||
AddObjective(new SlayObjective(typeof(StrangeGazer), "strange gazers", 10, "Covetous"));
|
||||
|
||||
AddReward(new BaseReward(1158265)); // A step closer to glory for thy deeds...
|
||||
}
|
||||
|
||||
public override void OnCompleted()
|
||||
{
|
||||
base.OnCompleted();
|
||||
|
||||
GiveRewards();
|
||||
}
|
||||
|
||||
/*public void CompleteChallenge()
|
||||
{
|
||||
OnCompleted();
|
||||
Objectives[0].CurProgress++;
|
||||
TownCryerSystem.CompleteQuest(Owner, 1158275, 1158276, 0x65B);
|
||||
GiveRewards();
|
||||
}*/
|
||||
}
|
||||
|
||||
public class AForcedSacraficeQuest : BaseQuest
|
||||
{
|
||||
/* A Forced Sacrifice */
|
||||
public override object Title { get { return 1158271; } }
|
||||
|
||||
/* Indeed, you have proven yourself, and with your clearing of the creatures in the upper levels of Covetous Mountain our
|
||||
* miners can once again return to their normal operations, ensuring the lifeblood of our city is one again flowing. You
|
||||
* are no doubt brave and strong, but your next task will test your endurance no doubt. As I said, the Lycaeum is keeping
|
||||
* Cora's power at bay with something called the Void Pool. The magics prevent Cora herself from destroying it, but her
|
||||
* minions are not bound by that restriction. Only blade and spell can defeat her forces as they try to destroy the Void
|
||||
* Pool. Defend the Void Pool at all costs and sacrifice for Minoc. Do this and you will no doubt be remembered a hero. */
|
||||
public override object Description { get { return 1158268; } }
|
||||
|
||||
/* You decide against accepting the quest. */
|
||||
public override object Refuse { get { return 1158130; } }
|
||||
|
||||
/* Go to the Void Pool located in Level 2 of Covetous and defend it from Cora's armies! */
|
||||
public override object Uncomplete { get { return 1158269; } }
|
||||
|
||||
//public override object Complete { get { return 1158268; } }
|
||||
|
||||
/*You have defended the void pool until your last breath, your sacrifice for Minoc will not be soon forgotten! Return to
|
||||
* the Sheriff of Minoc and report the news!*/
|
||||
public override int CompleteMessage { get { return 1158270; } }
|
||||
|
||||
public override int AcceptSound { get { return 0x2E8; } }
|
||||
public override bool DoneOnce { get { return true; } }
|
||||
|
||||
public AForcedSacraficeQuest()
|
||||
{
|
||||
AddObjective(new InternalObjective());
|
||||
|
||||
AddReward(new BaseReward(1158265)); // A step closer to glory for thy deeds...
|
||||
}
|
||||
|
||||
public void CompleteQuest()
|
||||
{
|
||||
OnCompleted();
|
||||
Objectives[0].CurProgress++;
|
||||
|
||||
GiveRewards();
|
||||
}
|
||||
|
||||
private class InternalObjective : BaseObjective
|
||||
{
|
||||
public override object ObjectiveDescription { get { return Quest.Uncomplete; } }
|
||||
|
||||
public InternalObjective()
|
||||
: base(1)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.Write((int)0); // version
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class AForcedSacraficeQuest2 : BaseQuest
|
||||
{
|
||||
/* A Forced Sacrifice */
|
||||
public override object Title { get { return 1158271; } }
|
||||
|
||||
/* Despite your failure in protecting the void pool, your efforts have allowed the mages of the Lycaeum to use their
|
||||
* magics and bind the void pool in an infinite time loop, forever sealing Cora within the dungeon. This is only a
|
||||
* stopgap measure, however, and Cora cannot be allowed to continue her twisted craft. Now comes the ultimate test,
|
||||
* you must venture to the deepest level of Dungeon Covetous and slay Cora. It is the only way. Take this, it is all
|
||||
* the city can offer you in an effort to slay Cora. The City is counting on you. */
|
||||
public override object Description { get { return 1158272; } }
|
||||
|
||||
/* You decide against accepting the quest. */
|
||||
public override object Refuse { get { return 1158130; } }
|
||||
|
||||
/* Go to the furthest depths of Covetous and slay Cora! */
|
||||
public override object Uncomplete { get { return 1158273; } }
|
||||
|
||||
/*You have slayed the vile sorceress Cora! A powerful mage as she was, her armies will no doubt attempt
|
||||
* to resurrect their general - for now though Minoc is safe. The economic future of Minoc has been
|
||||
* secured and for your efforts you are hereby bestowed a great honor!*/
|
||||
public override object Complete { get { return 1158281; } }
|
||||
|
||||
/*You have slayed the sorceress Cora! Return to the Sheriff of Minoc and report the news!*/
|
||||
public override int CompleteMessage { get { return 1158274; } }
|
||||
|
||||
public override int AcceptSound { get { return 0x2E8; } }
|
||||
public override bool DoneOnce { get { return true; } }
|
||||
|
||||
public AForcedSacraficeQuest2()
|
||||
{
|
||||
AddObjective(new SlayObjective(typeof(CoraTheSorceress), "Cora the Sorcerer", 1, "Covetous"));
|
||||
|
||||
AddReward(new BaseReward(typeof(HeroOfMincRewardTitleDeed), 1158139)); // A Reward Title Deed
|
||||
}
|
||||
|
||||
public override void OnAccept()
|
||||
{
|
||||
base.OnAccept();
|
||||
|
||||
if (QuestHelper.TryReceiveQuestItem(Owner, typeof(MysteriousPotion), TimeSpan.FromDays(3)))
|
||||
{
|
||||
Owner.AddToBackpack(new MysteriousPotion());
|
||||
}
|
||||
}
|
||||
|
||||
public void CompleteQuest()
|
||||
{
|
||||
TownCryerSystem.CompleteQuest(Owner, 1158280, 1158281, 0x623);
|
||||
GiveRewards();
|
||||
|
||||
Server.Engines.Points.PointsSystem.VoidPool.AwardPoints(Owner, 2000, false, false);
|
||||
Owner.SendLocalizedMessage(1158282); // For your accomplishments you have been awarded a bonus 2000 Covetous points! Visit Vela in the Town of Cove to redeem them!
|
||||
}
|
||||
}
|
||||
|
||||
public class SheriffOfMinoc : MondainQuester
|
||||
{
|
||||
public override Type[] Quests { get { return new Type[] { typeof(ToolsOfTheTradeQuest) }; } }
|
||||
|
||||
public static SheriffOfMinoc TramInstance { get; set; }
|
||||
public static SheriffOfMinoc FelInstance { get; set; }
|
||||
|
||||
public static void Initialize()
|
||||
{
|
||||
if (Core.TOL)
|
||||
{
|
||||
if (TramInstance == null)
|
||||
{
|
||||
TramInstance = new SheriffOfMinoc();
|
||||
TramInstance.MoveToWorld(new Point3D(2462, 439, 15), Map.Trammel);
|
||||
TramInstance.Direction = Direction.South;
|
||||
}
|
||||
|
||||
if (FelInstance == null)
|
||||
{
|
||||
FelInstance = new SheriffOfMinoc();
|
||||
FelInstance.MoveToWorld(new Point3D(2462, 439, 15), Map.Felucca);
|
||||
FelInstance.Direction = Direction.South;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public SheriffOfMinoc()
|
||||
: base(NameList.RandomName("male"), "the Sheriff of Minoc")
|
||||
{
|
||||
}
|
||||
|
||||
public override void InitBody()
|
||||
{
|
||||
InitStats(100, 100, 25);
|
||||
|
||||
Female = false;
|
||||
CantWalk = true;
|
||||
|
||||
Body = 0x190;
|
||||
Hue = Race.RandomSkinHue();
|
||||
HairItemID = 0;
|
||||
|
||||
FacialHairItemID = 0x2041;
|
||||
FacialHairHue = Race.RandomHairHue();
|
||||
}
|
||||
|
||||
public override void InitOutfit()
|
||||
{
|
||||
AddItem(new Backpack());
|
||||
|
||||
SetWearable(new ChainCoif());
|
||||
SetWearable(new ChainChest());
|
||||
SetWearable(new ChainLegs());
|
||||
SetWearable(new Boots(), 2012);
|
||||
SetWearable(new FancyKilt(), 2012);
|
||||
SetWearable(new RingmailGloves());
|
||||
SetWearable(new BodySash(), 43);
|
||||
}
|
||||
|
||||
public override void OnDoubleClick(Mobile m)
|
||||
{
|
||||
if (m is PlayerMobile)
|
||||
{
|
||||
var pm = m as PlayerMobile;
|
||||
|
||||
if (QuestHelper.CheckDoneOnce(pm, typeof(APleaFromMinocQuest), this, false))
|
||||
{
|
||||
if (CheckProgress(pm))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
AForcedSacraficeQuest2 quest = QuestHelper.GetQuest<AForcedSacraficeQuest2>(pm);
|
||||
|
||||
if (quest != null && quest.Completed)
|
||||
{
|
||||
quest.CompleteQuest();
|
||||
return;
|
||||
}
|
||||
|
||||
BaseQuest q = QuestHelper.RandomQuest(pm, new Type[] { typeof(ClearingCovetousQuest) }, this, false);
|
||||
|
||||
if (q == null)
|
||||
{
|
||||
q = QuestHelper.RandomQuest(pm, new Type[] { typeof(AForcedSacraficeQuest) }, this, false);
|
||||
|
||||
if (q == null)
|
||||
{
|
||||
q = QuestHelper.RandomQuest(pm, new Type[] { typeof(AForcedSacraficeQuest2) }, this, false);
|
||||
}
|
||||
}
|
||||
|
||||
if (q != null)
|
||||
{
|
||||
pm.CloseGump(typeof(MondainQuestGump));
|
||||
pm.SendGump(new MondainQuestGump(q));
|
||||
}
|
||||
else
|
||||
{
|
||||
SayTo(m, 1080107, 0x3B2); // I'm sorry, I have nothing for you at this time.
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
SayTo(m, 1080107, 0x3B2); // I'm sorry, I have nothing for you at this time.
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public override void OnMovement(Mobile m, Point3D oldLocation)
|
||||
{
|
||||
if (m is PlayerMobile && InRange(m.Location, 5) && !InRange(oldLocation, 5))
|
||||
{
|
||||
APleaFromMinocQuest quest = QuestHelper.GetQuest<APleaFromMinocQuest>((PlayerMobile)m);
|
||||
|
||||
if (quest != null)
|
||||
{
|
||||
quest.CompleteQuest();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private bool CheckProgress(PlayerMobile pm)
|
||||
{
|
||||
foreach (var t in _Quests)
|
||||
{
|
||||
var quest = QuestHelper.GetQuest(pm, t);
|
||||
|
||||
if (quest != null && !quest.Completed)
|
||||
{
|
||||
pm.CloseGump(typeof(MondainQuestGump));
|
||||
pm.SendGump(new MondainQuestGump(quest, MondainQuestGump.Section.InProgress, false));
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
private Type[] _Quests = { typeof(ClearingCovetousQuest), typeof(AForcedSacraficeQuest), typeof(AForcedSacraficeQuest2) };
|
||||
|
||||
public SheriffOfMinoc(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.Write((int)0); // version
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
int version = reader.ReadInt();
|
||||
|
||||
if (Map == Map.Trammel)
|
||||
{
|
||||
TramInstance = this;
|
||||
}
|
||||
|
||||
if (Map == Map.Felucca)
|
||||
{
|
||||
FelInstance = this;
|
||||
}
|
||||
|
||||
if (!Core.TOL)
|
||||
{
|
||||
Delete();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,83 @@
|
||||
using Server;
|
||||
using System;
|
||||
using Server.Items;
|
||||
using Server.Mobiles;
|
||||
using Server.Services.TownCryer;
|
||||
|
||||
namespace Server.Engines.Quests
|
||||
{
|
||||
public class AVisitToCastleBlackthornQuest : BaseQuest
|
||||
{
|
||||
private object _Title = 1158197;
|
||||
|
||||
/* A Visit to Castle Blackthorn */
|
||||
public override object Title { get { return _Title; } }
|
||||
|
||||
/*It seems that Castle Blackthorn has some secrets that are worth investigating. Your history on how Blackthorn even became
|
||||
* king is a little fuzzy. You decide a visit to Castle Blackthorn would be worthwhile.*/
|
||||
public override object Description { get { return 1158198; } }
|
||||
|
||||
/* You decide against accepting the quest. */
|
||||
public override object Refuse { get { return 1158130; } }
|
||||
|
||||
/* Visit Castle Blackthorn in Northern Britain. */
|
||||
public override object Uncomplete { get { return 1158199; } }
|
||||
|
||||
/* As you cross the bridge Blackthorn's massive castle towers up from the terrain it sits atop. The jet-black stone of her walls
|
||||
* are foreboding, yet invite your curiosity. Your eyes scan the courtyard and fixate on an incredibly handsome man. You've never
|
||||
* seen such beauty and style! Their exquisitely apportioned jester suit perfectly toes the line between comedic expression and
|
||||
* fashion. His hat is masterfully crafted with golden bells matching radiant jewelry that jingles as he swigs from a bottle.
|
||||
* You decide to follow the jester, who is no doubt headed for the castle bar. */
|
||||
public override object Complete { get { return 1158203; } }
|
||||
|
||||
public override int CompleteMessage { get { return 1156585; } } // You've completed a quest!
|
||||
|
||||
public override int AcceptSound { get { return 0x2E8; } }
|
||||
public override bool DoneOnce { get { return true; } }
|
||||
|
||||
public AVisitToCastleBlackthornQuest()
|
||||
{
|
||||
AddObjective(new InternalObjective());
|
||||
|
||||
AddReward(new BaseReward(1158200)); // A step closer to understanding the history of Blackthorn's Rise to the Throne.
|
||||
}
|
||||
|
||||
public static void CheckLocation(PlayerMobile pm, Point3D oldLocation)
|
||||
{
|
||||
var quest = QuestHelper.GetQuest<AVisitToCastleBlackthornQuest>(pm);
|
||||
|
||||
if (quest != null)
|
||||
{
|
||||
quest.OnCompleted();
|
||||
TownCryerSystem.CompleteQuest(quest.Owner, 1158202, quest.Complete, 0x61B);
|
||||
|
||||
quest.Objectives[0].CurProgress++;
|
||||
quest.GiveRewards();
|
||||
}
|
||||
}
|
||||
|
||||
private class InternalObjective : BaseObjective
|
||||
{
|
||||
public override object ObjectiveDescription { get { return Quest.Uncomplete; } }
|
||||
|
||||
public InternalObjective()
|
||||
: base(1)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.Write((int)0); // version
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
524
Scripts/Services/Town Cryer/Quests/BuriedRichesQuest.cs
Normal file
524
Scripts/Services/Town Cryer/Quests/BuriedRichesQuest.cs
Normal file
@@ -0,0 +1,524 @@
|
||||
using Server;
|
||||
using System;
|
||||
using Server.Items;
|
||||
using Server.Mobiles;
|
||||
using Server.Services.TownCryer;
|
||||
using Server.Gumps;
|
||||
|
||||
namespace Server.Engines.Quests
|
||||
{
|
||||
public class BuriedRichesQuest : BaseQuest
|
||||
{
|
||||
/* Buried Riches */
|
||||
public override object Title { get { return 1158230; } }
|
||||
|
||||
/*Treasure Hunting sure does sound like an interesting profession! Think of the riches to be found! You'd have everything
|
||||
* you've ever dreamed of! The Town Cryer article is fairly vague, however you have heard whispers of a mapmaker in Vesper
|
||||
* at the Majestic Boat who may know a thing or two about decoding treasure maps.*/
|
||||
public override object Description { get { return 1158223; } }
|
||||
|
||||
/* You decide against accepting the quest. */
|
||||
public override object Refuse { get { return 1158130; } }
|
||||
|
||||
/* Visit the Skara Brae Ranger's Guild and participate in the Huntmaster's Challenge */
|
||||
public override object Uncomplete { get { return 1158231; } }
|
||||
|
||||
/*The Cartographer seems busy at her desk pouring over stacks of rolled parchment. You decide to break the
|
||||
* silence with courteous *Ahem**/
|
||||
public override object Complete { get { return 1158226; } }
|
||||
|
||||
public override int CompleteMessage { get { return 1156585; } } // You've completed a quest!
|
||||
|
||||
public override int AcceptSound { get { return 0x2E8; } }
|
||||
public override bool DoneOnce { get { return true; } }
|
||||
|
||||
public BuriedRichesQuest()
|
||||
{
|
||||
AddObjective(new InternalObjective());
|
||||
|
||||
AddReward(new BaseReward(1158224)); // A step closer to becoming a treasure hunter.
|
||||
}
|
||||
|
||||
public void CompleteQuest()
|
||||
{
|
||||
OnCompleted();
|
||||
Objectives[0].CurProgress++;
|
||||
TownCryerSystem.CompleteQuest(Owner, 1158225, Complete, 0x614);
|
||||
GiveRewards();
|
||||
}
|
||||
|
||||
private class InternalObjective : BaseObjective
|
||||
{
|
||||
public override object ObjectiveDescription { get { return 1158231; } } // Visit the Legendary Cartographer at the The Majestic Boat in Vesper.
|
||||
|
||||
public InternalObjective()
|
||||
: base(1)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.Write((int)0); // version
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class ToolsOfTheTradeQuest : BaseQuest
|
||||
{
|
||||
/* Tools of the Trade */
|
||||
public override object Title { get { return 1158232; } }
|
||||
|
||||
/*A treasure seeker then? There is no telling the lengths someone will go to protect their most prized possessions. Over
|
||||
* time maps to certain treasure troves have been found and their bounties recovered. The bounty within a treasure chest
|
||||
* is directly related to the difficulty of deciphering the map and overcoming the protections of the chest itself.
|
||||
* Cartographers use a variety of terms to describe the difficulty of a map that is drawn. This includes maps that are
|
||||
* plainly, expertly, adeptly, cleverly, deviously, ingeniously, and diabolically drawn. Even the most basically trained
|
||||
* cartographer can decode a plainly drawn map. Beyond that, however, some training in cartography is required. Once
|
||||
* deciphered, the cartographer must find the location within the world and use a digging tool, such as a pickaxe or shovel
|
||||
* to dig up the chest. Those skilled at mining will have a much easier time finding the chest, but it is not a requirement.
|
||||
* The chest will be no doubt locked and trapped, so some skill with lockpicking and trap removal is suggested, although
|
||||
* mages skilled enough may use magical means to unlock and untrap lower end treasure chests. Finally, the chest is likely
|
||||
* to be guarded by a variety of creatures that will attempt to defend the treasure at all costs. Combat skills are imperative
|
||||
* to dispatch those creatures safely! Sounds like a challenge? Well it can be, but alas it is also incredibly rewarding and
|
||||
* you will have a much easier time of it if you recruit other adventures into your budding treasure seeking business. Alas,
|
||||
* here's a map I had lying around. You can visit the Adventurer's Supplies just on the mainland of Vesper to get some basic
|
||||
* supplies.*/
|
||||
public override object Description { get { return 1158227; } }
|
||||
|
||||
/* You decide against accepting the quest. */
|
||||
public override object Refuse { get { return 1158130; } }
|
||||
|
||||
/* Visit the Adventurer's Supplies in Northern Vesper, just across the bridge, and speak to the Master Provisioner
|
||||
* to get some basic treasure hunting equipment. */
|
||||
public override object Uncomplete { get { return 1158228; } }
|
||||
|
||||
/*The Adventurer's Supplies is a large provisioner with many different types of adventuring equipment available for purchase.
|
||||
* You spot the shopkeeper the Cartographer described and approach with a friendly greeting!*/
|
||||
public override object Complete { get { return 1158233; } }
|
||||
|
||||
public override int CompleteMessage { get { return 1156585; } } // You've completed a quest!
|
||||
|
||||
public override int AcceptSound { get { return 0x2E8; } }
|
||||
public override bool DoneOnce { get { return true; } }
|
||||
|
||||
public ToolsOfTheTradeQuest()
|
||||
{
|
||||
AddObjective(new InternalObjective());
|
||||
|
||||
AddReward(new BaseReward(1158224)); // A step closer to becoming a treasure hunter.
|
||||
}
|
||||
|
||||
public override void OnAccept()
|
||||
{
|
||||
base.OnAccept();
|
||||
|
||||
if (QuestHelper.TryReceiveQuestItem(Owner, typeof(BuriedRichesTreasureMap), TimeSpan.FromDays(7)))
|
||||
{
|
||||
Owner.AddToBackpack(new BuriedRichesTreasureMap(0));
|
||||
}
|
||||
}
|
||||
|
||||
public void CompleteQuest()
|
||||
{
|
||||
OnCompleted();
|
||||
Objectives[0].CurProgress++;
|
||||
TownCryerSystem.CompleteQuest(Owner, 1016275, Complete, 0x619);
|
||||
GiveRewards();
|
||||
}
|
||||
|
||||
private class InternalObjective : BaseObjective
|
||||
{
|
||||
public override object ObjectiveDescription { get { return 1158228; } } // Visit the Adventurer's Supplies in Northern Vesper, just across the bridge, and speak to the Master Provisioner to get some basic treasure hunting equipment.
|
||||
|
||||
public InternalObjective()
|
||||
: base(1)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.Write((int)0); // version
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class TheTreasureChaseQuest : BaseQuest
|
||||
{
|
||||
/* The Treasure Chase */
|
||||
public override object Title { get { return 1158239; } }
|
||||
|
||||
/*Finest provisions in all of Britannia! Right here! *The Provisioner looks you up and down* I've seen your kind before -
|
||||
* I know that look! You're a treasure seeker! I take it you spoke to the Cartographer then? Of course you have, why else
|
||||
* would you be visiting Britannia's premiere outfitter of Treasure Hunting supplies! I trust you will be most successful
|
||||
* with treasure hunting so I'll kit you out with basic supplies free of charge - just remember me when you've become a
|
||||
* famous treasure hunter!*/
|
||||
public override object Description { get { return 1158365; } }
|
||||
|
||||
/* You decide against accepting the quest. */
|
||||
public override object Refuse { get { return 1158130; } }
|
||||
|
||||
/* Use the book "Treasure Hunting: A Practical Approach" to help you decode the treasure maps you have been given and those
|
||||
* that you find during your adventure and use the information contained within the text to aid you in your quest.*/
|
||||
public override object Uncomplete { get { return 1158238; } }
|
||||
|
||||
/*The Adventurer's Supplies is a large provisioner with many different types of adventuring equipment available for purchase.
|
||||
* You spot the shopkeeper the Cartographer described and approach with a friendly greeting!*/
|
||||
public override object Complete { get { return 1158233; } }
|
||||
|
||||
public override int CompleteMessage { get { return 1158247; } } //You have found the final zealot treasure! There are no doubt riches to be had within! Your experience has earned you a
|
||||
// reward title that has been placed in your backpack.
|
||||
|
||||
public override int AcceptSound { get { return 0x2E8; } }
|
||||
public override bool DoneOnce { get { return true; } }
|
||||
|
||||
public TheTreasureChaseQuest()
|
||||
{
|
||||
AddObjective(new InternalObjective());
|
||||
|
||||
AddReward(new BaseReward(typeof(TreasureHunterRewardTitleDeed), 1158237)); // Treasure!
|
||||
}
|
||||
|
||||
public override void OnAccept()
|
||||
{
|
||||
base.OnAccept();
|
||||
|
||||
if (QuestHelper.TryReceiveQuestItem(Owner, typeof(TreasureHuntingBook), TimeSpan.FromDays(7)))
|
||||
{
|
||||
var chest = new WoodenChest();
|
||||
chest.DropItem(new TreasureHuntingBook());
|
||||
|
||||
var heals = new GreaterHealPotion();
|
||||
heals.Amount = 10;
|
||||
chest.DropItem(heals);
|
||||
|
||||
var scrolls = new TelekinisisScroll();
|
||||
scrolls.Amount = 20;
|
||||
chest.DropItem(scrolls);
|
||||
|
||||
chest.DropItem(new Pickaxe());
|
||||
chest.DropItem(new TreasureSeekersLockpick());
|
||||
|
||||
Owner.Backpack.DropItem(chest);
|
||||
}
|
||||
}
|
||||
|
||||
public override bool RenderObjective(MondainQuestGump g, bool offer)
|
||||
{
|
||||
if (offer)
|
||||
g.AddHtmlLocalized(130, 45, 270, 16, 1049010, 0xFFFFFF, false, false); // Quest Offer
|
||||
else
|
||||
g.AddHtmlLocalized(130, 45, 270, 16, 1046026, 0xFFFFFF, false, false); // Quest Log
|
||||
|
||||
g.AddButton(130, 430, 0x2EEF, 0x2EF1, (int)Buttons.PreviousPage, GumpButtonType.Reply, 0);
|
||||
g.AddButton(275, 430, 0x2EE9, 0x2EEB, (int)Buttons.NextPage, GumpButtonType.Reply, 0);
|
||||
|
||||
g.AddHtmlObject(160, 70, 200, 40, Title, BaseQuestGump.DarkGreen, false, false);
|
||||
g.AddHtmlLocalized(98, 140, 312, 16, 1049073, 0x2710, false, false); // Objective:
|
||||
|
||||
g.AddHtmlLocalized(98, 156, 312, 16, 1072208, 0x2710, false, false); // All of the following
|
||||
|
||||
g.AddHtmlLocalized(98, 172, 312, 83, 1158234, BaseQuestGump.LightGreen, false, false);
|
||||
/* Find the location marked on the Treasure Map given to you by the Cartographer and use the supplies the Provisioner
|
||||
* gave you to recover the treasure.*/
|
||||
|
||||
g.AddHtmlLocalized(98, 255, 312, 40, 1158235, BaseQuestGump.LightGreen, false, false);
|
||||
//Expand your experience as a Treasure Hunter to an Expertly Drawn Map.
|
||||
|
||||
g.AddHtmlLocalized(98, 335, 312, 40, 1158236, BaseQuestGump.LightGreen, false, false);
|
||||
// Complete your experience as a Treasure Hunter by discovering the final treasure hoard.
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public void CompleteQuest()
|
||||
{
|
||||
OnCompleted();
|
||||
Objectives[0].CurProgress++;
|
||||
TownCryerSystem.CompleteQuest(Owner, 1158239, 1158249, 0x655);
|
||||
/*Another rusted chest emerges from the broken ground at your feet! As you pry it open the brilliant
|
||||
* shimmer of gold and jewels catches your eye. This map too is highly decorated with ancient runic
|
||||
* text and marks another location for the hoard. You notice the magical creatures guarding the previous
|
||||
* hoard were more challenging than the first, and you expect that trend to continue. With greater
|
||||
* difficulty comes greater reward! On the reverse of the map is a short hand-written note,<br><br><i>For
|
||||
* those who will come long after and discover this treasure, know you will never truly discover the
|
||||
* extent of our wealth. If you posses this map you no doubt have some connection to our society, which
|
||||
* has survived generation after generation. Use this wealth for what we have used it for, to be virtuous
|
||||
* and good throughout Sosaria...</i><br><br>The note is very cryptic about the origins of these zealots
|
||||
* and their beliefs, but from what you can gleam they are a long gone organization who's values were
|
||||
* that of virtue and good. You are warmed by this altruistic purpose and decide to use your wealth to
|
||||
* promote their cause throughout the realm as you search for other treasures.*/
|
||||
GiveRewards();
|
||||
}
|
||||
|
||||
private class InternalObjective : BaseObjective
|
||||
{
|
||||
public override object ObjectiveDescription { get { return 1158231; } } // Visit the Legendary Cartographer at the The Majestic Boat in Vesper.
|
||||
|
||||
public InternalObjective()
|
||||
: base(1)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.Write((int)0); // version
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class LegendaryCartographer : MondainQuester
|
||||
{
|
||||
public override Type[] Quests { get { return new Type[] { typeof(ToolsOfTheTradeQuest) }; } }
|
||||
|
||||
public static LegendaryCartographer TramInstance { get; set; }
|
||||
public static LegendaryCartographer FelInstance { get; set; }
|
||||
|
||||
public static void Initialize()
|
||||
{
|
||||
if (Core.TOL)
|
||||
{
|
||||
if (TramInstance == null)
|
||||
{
|
||||
TramInstance = new LegendaryCartographer();
|
||||
TramInstance.MoveToWorld(new Point3D(3005, 811, 0), Map.Trammel);
|
||||
TramInstance.Direction = Direction.West;
|
||||
}
|
||||
|
||||
if (FelInstance == null)
|
||||
{
|
||||
FelInstance = new LegendaryCartographer();
|
||||
FelInstance.MoveToWorld(new Point3D(3005, 811, 0), Map.Felucca);
|
||||
FelInstance.Direction = Direction.West;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public LegendaryCartographer()
|
||||
: base(NameList.RandomName("female"), "the Legendary Cartographer")
|
||||
{
|
||||
}
|
||||
|
||||
public override void InitBody()
|
||||
{
|
||||
InitStats(100, 100, 25);
|
||||
|
||||
Female = true;
|
||||
CantWalk = true;
|
||||
|
||||
Body = 0x191;
|
||||
Hue = Race.RandomSkinHue();
|
||||
HairItemID = 0x2045;
|
||||
|
||||
HairHue = 0x8A8;
|
||||
}
|
||||
|
||||
public override void InitOutfit()
|
||||
{
|
||||
AddItem(new Backpack());
|
||||
|
||||
SetWearable(new Doublet());
|
||||
SetWearable(new Kilt(), 443);
|
||||
SetWearable(new ThighBoots(), 1837);
|
||||
}
|
||||
|
||||
public override void OnDoubleClick(Mobile m)
|
||||
{
|
||||
if (m is PlayerMobile && !QuestHelper.CheckDoneOnce((PlayerMobile)m, typeof(ToolsOfTheTradeQuest), this, false))
|
||||
{
|
||||
m.SendLocalizedMessage(1080107); // I'm sorry, I have nothing for you at this time.
|
||||
}
|
||||
else
|
||||
{
|
||||
base.OnDoubleClick(m);
|
||||
}
|
||||
}
|
||||
|
||||
public override void OnMovement(Mobile m, Point3D oldLocation)
|
||||
{
|
||||
if (m is PlayerMobile && InRange(m.Location, 5) && !InRange(oldLocation, 5))
|
||||
{
|
||||
BuriedRichesQuest quest = QuestHelper.GetQuest<BuriedRichesQuest>((PlayerMobile)m);
|
||||
|
||||
if (quest != null)
|
||||
{
|
||||
quest.CompleteQuest();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public LegendaryCartographer(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.Write((int)0); // version
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
int version = reader.ReadInt();
|
||||
|
||||
if (Map == Map.Trammel)
|
||||
{
|
||||
TramInstance = this;
|
||||
}
|
||||
|
||||
if (Map == Map.Felucca)
|
||||
{
|
||||
FelInstance = this;
|
||||
}
|
||||
|
||||
if(!Core.TOL)
|
||||
{
|
||||
Delete();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class MasterProvisioner : MondainQuester
|
||||
{
|
||||
public override Type[] Quests { get { return new Type[] { typeof(TheTreasureChaseQuest) }; } }
|
||||
|
||||
public static MasterProvisioner TramInstance { get; set; }
|
||||
public static MasterProvisioner FelInstance { get; set; }
|
||||
|
||||
public static void Initialize()
|
||||
{
|
||||
if (Core.TOL)
|
||||
{
|
||||
if (TramInstance == null)
|
||||
{
|
||||
TramInstance = new MasterProvisioner();
|
||||
TramInstance.MoveToWorld(new Point3D(2989, 636, 0), Map.Trammel);
|
||||
TramInstance.Direction = Direction.West;
|
||||
}
|
||||
|
||||
if (FelInstance == null)
|
||||
{
|
||||
FelInstance = new MasterProvisioner();
|
||||
FelInstance.MoveToWorld(new Point3D(2989, 636, 0), Map.Felucca);
|
||||
FelInstance.Direction = Direction.West;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public MasterProvisioner()
|
||||
: base(NameList.RandomName("male"), "the Master Provisioner")
|
||||
{
|
||||
}
|
||||
|
||||
public override void InitBody()
|
||||
{
|
||||
InitStats(100, 100, 25);
|
||||
|
||||
Female = false;
|
||||
CantWalk = true;
|
||||
|
||||
Body = 0x190;
|
||||
Hue = Race.RandomSkinHue();
|
||||
}
|
||||
|
||||
public override void InitOutfit()
|
||||
{
|
||||
AddItem(new Backpack());
|
||||
|
||||
SetWearable(new FancyShirt());
|
||||
SetWearable(new JinBaori());
|
||||
SetWearable(new Kilt());
|
||||
SetWearable(new ThighBoots(), 1908);
|
||||
SetWearable(new GoldNecklace());
|
||||
}
|
||||
|
||||
public override void OnDoubleClick(Mobile m)
|
||||
{
|
||||
if (m is PlayerMobile && QuestHelper.CheckDoneOnce((PlayerMobile)m, typeof(TheTreasureChaseQuest), this, false))
|
||||
{
|
||||
m.SendLocalizedMessage(1080107); // I'm sorry, I have nothing for you at this time.
|
||||
}
|
||||
else
|
||||
{
|
||||
base.OnDoubleClick(m);
|
||||
}
|
||||
}
|
||||
|
||||
public override void OnMovement(Mobile m, Point3D oldLocation)
|
||||
{
|
||||
if (m is PlayerMobile && InRange(m.Location, 5) && !InRange(oldLocation, 5))
|
||||
{
|
||||
ToolsOfTheTradeQuest quest = QuestHelper.GetQuest<ToolsOfTheTradeQuest>((PlayerMobile)m);
|
||||
|
||||
if (quest != null)
|
||||
{
|
||||
quest.CompleteQuest();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public MasterProvisioner(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.Write((int)0); // version
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
int version = reader.ReadInt();
|
||||
|
||||
if (Map == Map.Trammel)
|
||||
{
|
||||
TramInstance = this;
|
||||
}
|
||||
|
||||
if (Map == Map.Felucca)
|
||||
{
|
||||
FelInstance = this;
|
||||
}
|
||||
|
||||
if (!Core.TOL)
|
||||
{
|
||||
Delete();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
70
Scripts/Services/Town Cryer/Quests/ExploringTheDeepQuest.cs
Normal file
70
Scripts/Services/Town Cryer/Quests/ExploringTheDeepQuest.cs
Normal file
@@ -0,0 +1,70 @@
|
||||
using Server;
|
||||
using System;
|
||||
using Server.Items;
|
||||
using Server.Services.TownCryer;
|
||||
|
||||
namespace Server.Engines.Quests
|
||||
{
|
||||
public class ExploringTheDeepQuest : BaseQuest
|
||||
{
|
||||
/* Exploring the Deep */
|
||||
public override object Title { get { return 1154327; } }
|
||||
|
||||
/*The life of a Shipwreck Salvager does seem exciting! Visiting Hepler Paulson at the Sons of the Sea in the
|
||||
* City of Trinsic is certainly to be an adventure!*/
|
||||
public override object Description { get { return 1158127; } }
|
||||
|
||||
/* You decide against accepting the quest. */
|
||||
public override object Refuse { get { return 1158130; } }
|
||||
|
||||
/* Speak to Hepler Paulson at the Sons of the Sea in Trinsic and complete the Exploring the Deep Quest. */
|
||||
public override object Uncomplete { get { return 1158131; } }
|
||||
|
||||
/* You have discovered the secrets of the Wreck of the Ararat and aided in binding the Shadowlords to their tomb within!*/
|
||||
public override object Complete { get { return 1158136; } }
|
||||
|
||||
public override int CompleteMessage { get { return 1156585; } } // You've completed a quest!
|
||||
|
||||
public override int AcceptSound { get { return 0x2E8; } }
|
||||
public override bool DoneOnce { get { return true; } }
|
||||
|
||||
public ExploringTheDeepQuest()
|
||||
{
|
||||
AddObjective(new InternalObjective());
|
||||
|
||||
AddReward(new BaseReward(typeof(ExploringTheDeedTitleDeed), 1158142)); // Uncovering the secrets of the deep...
|
||||
}
|
||||
|
||||
public void CompleteQuest()
|
||||
{
|
||||
OnCompleted();
|
||||
Objectives[0].CurProgress++;
|
||||
TownCryerSystem.CompleteQuest(Owner, this);
|
||||
GiveRewards();
|
||||
}
|
||||
|
||||
private class InternalObjective : BaseObjective
|
||||
{
|
||||
public override object ObjectiveDescription { get { return Quest.Uncomplete; } }
|
||||
|
||||
public InternalObjective()
|
||||
: base(1)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.Write((int)0); // version
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,73 @@
|
||||
using Server;
|
||||
using System;
|
||||
using Server.Items;
|
||||
using Server.Services.TownCryer;
|
||||
|
||||
namespace Server.Engines.Quests
|
||||
{
|
||||
public class HuntmastersChallengeQuest : BaseQuest
|
||||
{
|
||||
/* Huntmaster's Challenge */
|
||||
public override object Title { get { return 1155726; } }
|
||||
|
||||
/*Each month the Ranger's Guild in Skara Brae hosts a contest to see who can hunt Britannia's
|
||||
* largest creatures! Visit the Skara Brae Ranger's Guild to learn more!*/
|
||||
public override object Description { get { return 1158132; } }
|
||||
|
||||
/* You decide against accepting the quest. */
|
||||
public override object Refuse { get { return 1158130; } }
|
||||
|
||||
/* Visit the Skara Brae Ranger's Guild and participate in the Huntmaster's Challenge */
|
||||
public override object Uncomplete { get { return 1158133; } }
|
||||
|
||||
/* You have braved the wilds of Britannia and slayed a mighty beast! You have meticulously documented your kill
|
||||
* and submitted it to the Ranger's Guild for evaluation. If luck was on your side you may indeed have
|
||||
* the largest quarry for the month...or maybe not. Alas, your bravery has earned you the well deserved title
|
||||
* of Hunter! May you go fearlessly into the wilderness in search of your next big kill! Well done! */
|
||||
public override object Complete { get { return 1158378; } }
|
||||
|
||||
public override int CompleteMessage { get { return 1156585; } } // You've completed a quest!
|
||||
|
||||
public override int AcceptSound { get { return 0x2E8; } }
|
||||
public override bool DoneOnce { get { return true; } }
|
||||
|
||||
public HuntmastersChallengeQuest()
|
||||
{
|
||||
AddObjective(new InternalObjective());
|
||||
|
||||
AddReward(new BaseReward(typeof(HuntmastersQuestRewardTitleDeed), 1158139)); // A Reward Title Deed
|
||||
}
|
||||
|
||||
public void CompleteChallenge()
|
||||
{
|
||||
OnCompleted();
|
||||
Objectives[0].CurProgress++;
|
||||
TownCryerSystem.CompleteQuest(Owner, this);
|
||||
GiveRewards();
|
||||
}
|
||||
|
||||
private class InternalObjective : BaseObjective
|
||||
{
|
||||
public override object ObjectiveDescription { get { return Quest.Uncomplete; } }
|
||||
|
||||
public InternalObjective()
|
||||
: base(1)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.Write((int)0); // version
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
252
Scripts/Services/Town Cryer/Quests/PaladinsOfTrinsic.cs
Normal file
252
Scripts/Services/Town Cryer/Quests/PaladinsOfTrinsic.cs
Normal file
@@ -0,0 +1,252 @@
|
||||
using Server;
|
||||
using System;
|
||||
using Server.Items;
|
||||
using Server.Mobiles;
|
||||
using Server.Services.TownCryer;
|
||||
|
||||
namespace Server.Engines.Quests
|
||||
{
|
||||
public class PaladinsOfTrinsic : BaseQuest
|
||||
{
|
||||
public override QuestChain ChainID{get {return QuestChain.PaladinsOfTrinsic; } }
|
||||
public override Type NextQuest { get { return typeof(PaladinsOfTrinsic2); } }
|
||||
|
||||
/* The Paladins of Trinsic */
|
||||
public override object Title { get { return 1158093; } }
|
||||
|
||||
/*It seems the Paladins of Trinsic are working hard to see the threats of Shame are kept inside Shame,
|
||||
* perhaps it would be a good idea to visit their headquarters in Northeast Trinsic.*/
|
||||
public override object Description { get { return 1158114; } }
|
||||
|
||||
/* You decide against accepting the quest. */
|
||||
public override object Refuse { get { return 1158130; } }
|
||||
|
||||
/* Find the Lord Commander of the Paladins of Trinsic. */
|
||||
public override object Uncomplete { get { return 1158117; } }
|
||||
|
||||
/*You have proven yourself honorable and the Lord Commander has invited you to join the elite order of the Paladin of Trinsic!
|
||||
* Congratulations, Paladin!*/
|
||||
public override object Complete { get { return 1158317; } }
|
||||
|
||||
public override int CompleteMessage { get { return 1156585; } } // You've completed a quest!
|
||||
|
||||
public override int AcceptSound { get { return 0x2E8; } }
|
||||
public override bool DoneOnce { get { return true; } }
|
||||
|
||||
public PaladinsOfTrinsic()
|
||||
{
|
||||
AddObjective(new InternalObjective());
|
||||
|
||||
AddReward(new BaseReward(1158120)); // A unique opportunity to join the Paladins of Trinsic.
|
||||
}
|
||||
|
||||
private class InternalObjective : BaseObjective
|
||||
{
|
||||
public override object ObjectiveDescription { get { return Quest.Uncomplete; } }
|
||||
|
||||
public InternalObjective()
|
||||
: base(1)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.Write((int)0); // version
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class PaladinsOfTrinsic2 : BaseQuest
|
||||
{
|
||||
public override QuestChain ChainID { get { return QuestChain.PaladinsOfTrinsic; } }
|
||||
|
||||
/* The Paladins of Trinsic */
|
||||
public override object Title { get { return 1158093; } }
|
||||
|
||||
/*Another who wishes to walk the path of the Paladins of Trinsic? Well you should know the path is not an easy one to walk,
|
||||
* and only those with the courage to pursue truth are admitted to the order. If you prove you are honorable, then you shall
|
||||
* join our ranks and gain the prestigious title of Paladin of Trinsic. We are bound by Honor, and thus we stand against
|
||||
* Shame! To prove yourself you must venture deep within the dungeon Shame and slay the vile within. Succeed in this task
|
||||
* and you will prove your worth, fail and you will bring to your name what you hope to defeat - Shame.*/
|
||||
public override object Description { get { return 1158096; } }
|
||||
|
||||
/* The way of the Paladin is not for everyone, I understand your decision but hope you reconsider... */
|
||||
public override object Refuse { get { return 1158102; } }
|
||||
|
||||
/* Go to the dungeon Shame and slay the creatures within, only then will you have the Honor of calling thyself a Paladin of
|
||||
* Trinsic. */
|
||||
public override object Uncomplete { get { return 1158105; } }
|
||||
|
||||
/*You have proven yourself honorable and the Lord Commander has invited you to join the elite order of the Paladin of Trinsic!
|
||||
* Congratulations, Paladin!*/
|
||||
public override object Complete { get { return 1158317; } }
|
||||
|
||||
public override int AcceptSound { get { return 0x2E8; } }
|
||||
public override bool DoneOnce { get { return true; } }
|
||||
public override int CompleteMessage { get { return 1158108; } }
|
||||
|
||||
public bool SentMessage { get; set; }
|
||||
|
||||
public PaladinsOfTrinsic2()
|
||||
{
|
||||
AddObjective(new SlayObjective(typeof(QuartzElemental), "quartz elemental", 1, "Shame"));
|
||||
AddObjective(new SlayObjective(typeof(FlameElemental), "flame elemental", 1, "Shame"));
|
||||
AddObjective(new SlayObjective(typeof(WindElemental), "wind elemental", 1, "Shame"));
|
||||
AddObjective(new SlayObjective(typeof(UnboundEnergyVortex), "unbound energy vortex", 1, "Shame"));
|
||||
|
||||
AddReward(new BaseReward(typeof(PaladinOfTrinsicRewardTitleDeed), 1158099)); // Becoming a Paladin of Trinsic
|
||||
}
|
||||
|
||||
public void CompleteQuest()
|
||||
{
|
||||
TownCryerSystem.CompleteQuest(Owner, new PaladinsOfTrinsic());
|
||||
|
||||
OnCompleted();
|
||||
GiveRewards();
|
||||
|
||||
QuestHelper.Delay(Owner, typeof(PaladinsOfTrinsic), RestartDelay);
|
||||
}
|
||||
}
|
||||
|
||||
public class Morz : MondainQuester
|
||||
{
|
||||
public override Type[] Quests { get { return new Type[] { typeof(PaladinsOfTrinsic) }; } }
|
||||
|
||||
public static Morz TramInstance { get; set; }
|
||||
public static Morz FelInstance { get; set; }
|
||||
|
||||
public static void Initialize()
|
||||
{
|
||||
if (Core.TOL)
|
||||
{
|
||||
if (TramInstance == null)
|
||||
{
|
||||
TramInstance = new Morz();
|
||||
TramInstance.MoveToWorld(new Point3D(2018, 2745, 30), Map.Trammel);
|
||||
TramInstance.Direction = Direction.South;
|
||||
}
|
||||
|
||||
if (FelInstance == null)
|
||||
{
|
||||
FelInstance = new Morz();
|
||||
FelInstance.MoveToWorld(new Point3D(2018, 2745, 30), Map.Felucca);
|
||||
FelInstance.Direction = Direction.South;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public Morz()
|
||||
: base("Morz", "the Lord Commander")
|
||||
{
|
||||
}
|
||||
|
||||
public override void InitBody()
|
||||
{
|
||||
InitStats(100, 100, 25);
|
||||
|
||||
Female = false;
|
||||
CantWalk = true;
|
||||
|
||||
Body = 0x190;
|
||||
Hue = Race.RandomSkinHue();
|
||||
HairItemID = 0;
|
||||
FacialHairItemID = 0x204D;
|
||||
}
|
||||
|
||||
public override void InitOutfit()
|
||||
{
|
||||
AddItem(new Backpack());
|
||||
|
||||
SetWearable(new PlateChest(), 0x8A5);
|
||||
SetWearable(new PlateLegs(), 0x8A5);
|
||||
SetWearable(new PlateArms(), 0x8A5);
|
||||
SetWearable(new PlateGloves(), 0x8A5);
|
||||
SetWearable(new BodySash(), 1158);
|
||||
SetWearable(new Cloak(), 1158);
|
||||
}
|
||||
|
||||
public override void OnDoubleClick(Mobile m)
|
||||
{
|
||||
if (m is PlayerMobile && m.InRange(Location, 5))
|
||||
{
|
||||
PaladinsOfTrinsic quest = QuestHelper.GetQuest((PlayerMobile)m, typeof(PaladinsOfTrinsic)) as PaladinsOfTrinsic;
|
||||
|
||||
if (quest != null)
|
||||
{
|
||||
quest.GiveRewards();
|
||||
}
|
||||
else
|
||||
{
|
||||
PaladinsOfTrinsic2 quest2 = QuestHelper.GetQuest((PlayerMobile)m, typeof(PaladinsOfTrinsic2)) as PaladinsOfTrinsic2;
|
||||
|
||||
if (quest2 != null)
|
||||
{
|
||||
if (quest2.Completed)
|
||||
{
|
||||
quest2.CompleteQuest();
|
||||
}
|
||||
else
|
||||
{
|
||||
m.SendGump(new MondainQuestGump(quest2, MondainQuestGump.Section.InProgress, false));
|
||||
quest2.InProgress();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public override void OnMovement(Mobile m, Point3D oldLocation)
|
||||
{
|
||||
if(m is PlayerMobile && InRange(m.Location, 5) && !InRange(oldLocation, 5))
|
||||
{
|
||||
PaladinsOfTrinsic2 quest = QuestHelper.GetQuest<PaladinsOfTrinsic2>((PlayerMobile)m);
|
||||
|
||||
if(quest != null && !quest.SentMessage && quest.Completed)
|
||||
{
|
||||
m.SendLocalizedMessage(1158111); // You have proven yourself Honorable, the Lord Commander looks overjoyed as you approach him triumphantly! Speak to him to claim your reward!
|
||||
quest.SentMessage = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public Morz(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.Write((int)0); // version
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
int version = reader.ReadInt();
|
||||
|
||||
if (Map == Map.Trammel)
|
||||
{
|
||||
TramInstance = this;
|
||||
}
|
||||
else if (Map == Map.Felucca)
|
||||
{
|
||||
FelInstance = this;
|
||||
}
|
||||
|
||||
if (!Core.TOL)
|
||||
Delete();
|
||||
}
|
||||
}
|
||||
}
|
||||
604
Scripts/Services/Town Cryer/Quests/QuestItems.cs
Normal file
604
Scripts/Services/Town Cryer/Quests/QuestItems.cs
Normal file
@@ -0,0 +1,604 @@
|
||||
using Server;
|
||||
using System;
|
||||
using Server.Items;
|
||||
using Server.Mobiles;
|
||||
using Server.Engines.Quests;
|
||||
using Server.Network;
|
||||
using Server.Gumps;
|
||||
using Server.Services.TownCryer;
|
||||
|
||||
namespace Server.Engines.Quests
|
||||
{
|
||||
public class RoyalBritannianGuardOrders : BaseJournal
|
||||
{
|
||||
public override TextDefinition Title { get { return 1158159; } } // Royal Britannian Guard Orders
|
||||
public override TextDefinition Body { get { return 1158160; } }
|
||||
/*ROYAL BRITANNIAN GUARD<br>MINISTRY OF PRISONS DETACHMENT<br><br>ORIGINAL ORDERS<br>ROYAL BRITANNIAN GUARD<br>WRONG PRISON
|
||||
* DIVISION<br><br>From: COMMAND, RBG Yew<br>To: Lieutenant Bennet Yardley, RBG Yew<br><br>Subject: Wrong Prison Treasure
|
||||
* Expedition<br><br>1. RBG Intelligence has indicated the presence of highly prized cache of weapons stashed within the
|
||||
* deepest confinements of the Prison Dungeon Wrong. Intelligence indicates these weapons were confiscated at the time of
|
||||
* various assassination attempts among the prisoners before the prison was lost.<br><br>2. Official cover story remains in
|
||||
* place - no outside interference expected and only official RBG personnel are permitted entry.<br><br>3. Interview with
|
||||
* former prison officials indicate weapons under heavy lock and key, suggest specialist assignment of lock picking skills
|
||||
* and tools.<br><br>*The remainder of the document is illegible**/
|
||||
|
||||
public override int LabelNumber { get { return 1158171; } } // orders
|
||||
|
||||
[Constructable]
|
||||
public RoyalBritannianGuardOrders()
|
||||
{
|
||||
LootType = LootType.Blessed;
|
||||
}
|
||||
|
||||
public RoyalBritannianGuardOrders(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write((int)0);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
int v = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
|
||||
public class CorpseOfBennetYardley : Item, IConditionalVisibility
|
||||
{
|
||||
public static CorpseOfBennetYardley TramInstance { get; set; }
|
||||
public static CorpseOfBennetYardley FelInstance { get; set; }
|
||||
|
||||
public static void Initialize()
|
||||
{
|
||||
if (Core.TOL)
|
||||
{
|
||||
if (TramInstance == null)
|
||||
{
|
||||
TramInstance = new CorpseOfBennetYardley();
|
||||
TramInstance.MoveToWorld(new Point3D(5688, 653, 0), Map.Trammel);
|
||||
}
|
||||
|
||||
if (FelInstance == null)
|
||||
{
|
||||
FelInstance = new CorpseOfBennetYardley();
|
||||
FelInstance.MoveToWorld(new Point3D(5688, 653, 0), Map.Felucca);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public override bool ForceShowProperties { get { return true; } }
|
||||
public override int LabelNumber { get { return 1158168; } }
|
||||
|
||||
public CorpseOfBennetYardley()
|
||||
: base(Utility.Random(0xECA, 9))
|
||||
{
|
||||
Movable = false;
|
||||
}
|
||||
|
||||
public bool CanBeSeenBy(PlayerMobile pm)
|
||||
{
|
||||
if (pm.AccessLevel > AccessLevel.Player)
|
||||
return true;
|
||||
|
||||
var quest = QuestHelper.GetQuest<RightingWrongQuest4>(pm);
|
||||
|
||||
return quest != null && !quest.Completed;
|
||||
}
|
||||
|
||||
public override void OnDoubleClick(Mobile from)
|
||||
{
|
||||
if (from is PlayerMobile && from.InRange(Location, 2))
|
||||
{
|
||||
var quest = QuestHelper.GetQuest<RightingWrongQuest4>((PlayerMobile)from);
|
||||
|
||||
if (from is PlayerMobile && quest != null && !quest.Completed)
|
||||
{
|
||||
quest.Objectives[0].CurProgress++;
|
||||
quest.OnCompleted();
|
||||
|
||||
Visible = false;
|
||||
Visible = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public CorpseOfBennetYardley(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write((int)0);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
int v = reader.ReadInt();
|
||||
|
||||
if (Map == Map.Trammel)
|
||||
{
|
||||
TramInstance = this;
|
||||
}
|
||||
else if (Map == Map.Felucca)
|
||||
{
|
||||
FelInstance = this;
|
||||
}
|
||||
|
||||
if (!Core.TOL)
|
||||
Delete();
|
||||
}
|
||||
}
|
||||
|
||||
public class TreasureHuntingBook : Item
|
||||
{
|
||||
[Constructable]
|
||||
public TreasureHuntingBook()
|
||||
: base(0xFBE)
|
||||
{
|
||||
LootType = LootType.Blessed;
|
||||
}
|
||||
|
||||
public override void OnDoubleClick(Mobile m)
|
||||
{
|
||||
if (m is PlayerMobile && IsChildOf(m.Backpack))
|
||||
{
|
||||
m.CloseGump(typeof(InternalGump));
|
||||
BaseGump.SendGump(new InternalGump((PlayerMobile)m));
|
||||
}
|
||||
}
|
||||
|
||||
public override void GetProperties(ObjectPropertyList list)
|
||||
{
|
||||
base.GetProperties(list);
|
||||
|
||||
list.Add(1158253); // Treasure Hunting: A Practical Approach
|
||||
list.Add(1154760, "#1158254"); // By: Vespyr Jones
|
||||
}
|
||||
|
||||
public class InternalGump : BaseGump
|
||||
{
|
||||
public InternalGump(PlayerMobile pm)
|
||||
: base(pm, 10, 10)
|
||||
{
|
||||
}
|
||||
|
||||
public override void AddGumpLayout()
|
||||
{
|
||||
AddImage(0, 0, 0x761C);
|
||||
AddImage(112, 40, 0x655);
|
||||
AddHtmlLocalized(113, 350, 342, 280, 1158255, C32216(0x080808), false, true);
|
||||
}
|
||||
}
|
||||
|
||||
public TreasureHuntingBook(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write((int)0);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
int v = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
|
||||
public class BuriedRichesTreasureMap : TreasureMap
|
||||
{
|
||||
public TreasureMapChest Chest { get; set; }
|
||||
|
||||
public BuriedRichesTreasureMap(int level)
|
||||
: base(level, Map.Trammel)
|
||||
{
|
||||
LootType = LootType.Blessed;
|
||||
}
|
||||
|
||||
public override void Decode(Mobile from)
|
||||
{
|
||||
if (QuestHelper.HasQuest<TheTreasureChaseQuest>((PlayerMobile)from))
|
||||
{
|
||||
from.CheckSkill(SkillName.Cartography, 0, 100);
|
||||
Decoder = from;
|
||||
|
||||
DisplayTo(from);
|
||||
|
||||
from.SendLocalizedMessage(1158243); // Your time studying Treasure Hunting: A Practical Approach helps you decode the map...
|
||||
}
|
||||
else
|
||||
{
|
||||
from.PrivateOverheadMessage(MessageType.Regular, 0x21, 1157850, from.NetState); // *You don't make anything of it.*
|
||||
//m.PrivateOverheadMessage(MessageType.Regular, 1154, 1158244, m.NetState); // *You decide to visit the Provisioner at the Adventurer's Supplies in Vesper before trying to decode the map...*
|
||||
}
|
||||
}
|
||||
|
||||
public override void DisplayTo(Mobile m)
|
||||
{
|
||||
base.DisplayTo(m);
|
||||
|
||||
m.PlaySound(0x41A);
|
||||
m.PrivateOverheadMessage(MessageType.Regular, 1154, 1157722, "Cartography", m.NetState); // *Your proficiency in ~1_SKILL~ reveals more about the item*
|
||||
|
||||
if (m is PlayerMobile && Level == 0)
|
||||
{
|
||||
m.CloseGump(typeof(InternalGump));
|
||||
BaseGump.SendGump(new InternalGump((PlayerMobile)m, this));
|
||||
}
|
||||
}
|
||||
|
||||
public override void OnChestOpened(Mobile from, TreasureMapChest chest)
|
||||
{
|
||||
if (from is PlayerMobile)
|
||||
{
|
||||
var quest = QuestHelper.GetQuest<TheTreasureChaseQuest>((PlayerMobile)from);
|
||||
|
||||
if (quest != null)
|
||||
{
|
||||
if (Level == 0)
|
||||
{
|
||||
TownCryerSystem.CompleteQuest((PlayerMobile)from, 1158239, 1158251, 0x655);
|
||||
/*Your eyes widen as you pry open the old chest and reveal the treasure within! Even this small cache
|
||||
* excites you as the thought of bigger and better treasure looms on the horizon! The map is covered
|
||||
* in ancient runes and marks the location of another treasure hoard. You carefully furl the map and
|
||||
* set off on your next adventure!*/
|
||||
|
||||
from.SendLocalizedMessage(1158245, "", 0x23); // You have found the first zealot treasure! As you dig up the chest a leather bound case appears to contain an additional map. You place it in your backpack for later examination.
|
||||
chest.DropItem(new BuriedRichesTreasureMap(1));
|
||||
}
|
||||
else
|
||||
{
|
||||
from.SendLocalizedMessage(1158246, "", 0x23); // You have found the second zealot treasure! As you dig up the chest a leather bound case appears to contain an additional map. You place it in your backpack for later examination.
|
||||
quest.CompleteQuest();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public override void OnBeginDig(Mobile from)
|
||||
{
|
||||
if (Completed)
|
||||
{
|
||||
from.SendLocalizedMessage(503028); // The treasure for this map has already been found.
|
||||
}
|
||||
else if (Decoder != from)
|
||||
{
|
||||
from.SendLocalizedMessage(503031); // You did not decode this map and have no clue where to look for the treasure.
|
||||
}
|
||||
else if (!from.CanBeginAction(typeof(TreasureMap)))
|
||||
{
|
||||
from.SendLocalizedMessage(503020); // You are already digging treasure.
|
||||
}
|
||||
else if (from.Map != Facet)
|
||||
{
|
||||
from.SendLocalizedMessage(1010479); // You seem to be in the right place, but may be on the wrong facet!
|
||||
}
|
||||
else if (from is PlayerMobile && !QuestHelper.HasQuest<TheTreasureChaseQuest>((PlayerMobile)from))
|
||||
{
|
||||
from.SendLocalizedMessage(1158257); // You must be on the "The Treasure Chase" quest offered via the Town Cryer to dig up this treasure.
|
||||
}
|
||||
else
|
||||
{
|
||||
from.SendLocalizedMessage(503033); // Where do you wish to dig?
|
||||
from.Target = new TreasureMap.DigTarget(this);
|
||||
}
|
||||
}
|
||||
|
||||
protected override bool HasRequiredSkill(Mobile from)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
public override void GetProperties(ObjectPropertyList list)
|
||||
{
|
||||
base.GetProperties(list);
|
||||
|
||||
if (Level == 0)
|
||||
{
|
||||
list.Add(1158229); // A mysterious treasure map personally given to you by the Legendary Cartographer in Vesper
|
||||
}
|
||||
else
|
||||
{
|
||||
list.Add(1158256); // A mysterious treasure map recovered from a treasure hoard
|
||||
}
|
||||
}
|
||||
|
||||
private class InternalGump : BaseGump
|
||||
{
|
||||
public BuriedRichesTreasureMap Map { get; set; }
|
||||
|
||||
public InternalGump(PlayerMobile pm, BuriedRichesTreasureMap map)
|
||||
: base(pm, 10, 10)
|
||||
{
|
||||
Map = map;
|
||||
}
|
||||
|
||||
public override void AddGumpLayout()
|
||||
{
|
||||
AddBackground(0, 0, 454, 400, 9380);
|
||||
AddHtmlLocalized(177, 53, 235, 20, CenterLoc, "#1158240", C32216(0xA52A2A), false, false); // A Mysterious Treasure Map
|
||||
AddHtmlLocalized(177, 80, 235, 40, CenterLoc, Map.Level == 0 ? "#1158241" : "#1158250", C32216(0xA52A2A), false, false); // Given to you by the Master Cartographer
|
||||
|
||||
/*The Cartographer has given you a mysterious treasure map and offered you some tips on how to go about
|
||||
* recovering the treasure. As the Cartographer leaned in and handed you the furled parchment, she told
|
||||
* you of the origins of this mysterious document. "Legend has it..." she tells you, "this map is the
|
||||
* lost treasure of an ancient Sosarian Order of Zealots. I'm told over the centuries they would bury
|
||||
* small portions of their treasure throughout the Britannian countryside in an effort to thwart any
|
||||
* attempts to recover the hoard in its entirety." Your eyes widen at the thought of a massive treasure
|
||||
* hoard and you can't wait to find it!*/
|
||||
AddHtmlLocalized(177, 122, 235, 228, 1158242, true, true);
|
||||
|
||||
AddItem(85, 120, 0x14EB, 0);
|
||||
}
|
||||
}
|
||||
|
||||
public BuriedRichesTreasureMap(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write((int)0);
|
||||
|
||||
writer.Write(Chest);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
int v = reader.ReadInt();
|
||||
|
||||
Chest = reader.ReadItem() as TreasureMapChest;
|
||||
}
|
||||
}
|
||||
|
||||
public class TreasureSeekersLockpick : Lockpick
|
||||
{
|
||||
public override int LabelNumber { get { return 1158258; } }
|
||||
|
||||
public TreasureSeekersLockpick()
|
||||
{
|
||||
ItemID = 0x14FD;
|
||||
}
|
||||
|
||||
protected override void BeginLockpick(Mobile from, ILockpickable item)
|
||||
{
|
||||
if (from is PlayerMobile &&
|
||||
item.Locked &&
|
||||
QuestHelper.HasQuest<TheTreasureChaseQuest>((PlayerMobile)from) &&
|
||||
item is TreasureMapChest &&
|
||||
((TreasureMapChest)item).TreasureMap is BuriedRichesTreasureMap)
|
||||
{
|
||||
var chest = (TreasureMapChest)item;
|
||||
|
||||
from.PlaySound(0x241);
|
||||
|
||||
Timer.DelayCall(TimeSpan.FromMilliseconds(200), () =>
|
||||
{
|
||||
if (item.Locked && from.InRange(chest.GetWorldLocation(), 1))
|
||||
{
|
||||
from.CheckTargetSkill(SkillName.Lockpicking, item, 0, 100);
|
||||
|
||||
// Success! Pick the lock!
|
||||
from.PrivateOverheadMessage(MessageType.Regular, 1154, 1158252, from.NetState); // *Your recent study of Treasure Hunting helps you pick the lock...*
|
||||
chest.SendLocalizedMessageTo(from, 502076); // The lock quickly yields to your skill.
|
||||
from.PlaySound(0x4A);
|
||||
item.LockPick(from);
|
||||
}
|
||||
});
|
||||
}
|
||||
else
|
||||
{
|
||||
base.BeginLockpick(from, item);
|
||||
}
|
||||
}
|
||||
|
||||
public TreasureSeekersLockpick(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write((int)0);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
int v = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
|
||||
public class MysteriousPotion : Item
|
||||
{
|
||||
public override int LabelNumber { get { return 1158286; } } // A Mysterious Potion
|
||||
|
||||
public MysteriousPotion()
|
||||
: base(0xF06)
|
||||
{
|
||||
}
|
||||
|
||||
public override void OnDoubleClick(Mobile m)
|
||||
{
|
||||
if (m is PlayerMobile)
|
||||
{
|
||||
var pm = m as PlayerMobile;
|
||||
|
||||
if (QuestHelper.HasQuest<AForcedSacraficeQuest2>(pm))
|
||||
{
|
||||
if (!TownCryerSystem.UnderMysteriousPotionEffects(pm))
|
||||
{
|
||||
pm.SendGump(new ConfirmCallbackGump(pm, 1158286, 1158287, null, null, confirm: (mob, o) =>
|
||||
{
|
||||
TownCryerSystem.AddMysteriousPotionEffects(mob);
|
||||
|
||||
mob.FixedParticles(0x376A, 9, 32, 5007, EffectLayer.Waist);
|
||||
mob.PlaySound(0x1E3);
|
||||
|
||||
BasePotion.PlayDrinkEffect(mob);
|
||||
|
||||
Delete();
|
||||
}));
|
||||
}
|
||||
else
|
||||
{
|
||||
pm.SendLocalizedMessage(1158289); // You have already used this.
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
pm.SendLocalizedMessage(1158285); // You must be on the "A Forced Sacrifice" quest to use this item.
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public MysteriousPotion(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write((int)0);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
int v = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
|
||||
public class PaladinCorpse : Container
|
||||
{
|
||||
public static PaladinCorpse TramInstance { get; set; }
|
||||
public static PaladinCorpse FelInstance { get; set; }
|
||||
|
||||
public static void Initialize()
|
||||
{
|
||||
if (Core.TOL)
|
||||
{
|
||||
if (TramInstance == null)
|
||||
{
|
||||
TramInstance = new PaladinCorpse();
|
||||
TramInstance.MoveToWorld(new Point3D(5396, 118, 0), Map.Trammel);
|
||||
}
|
||||
|
||||
if (FelInstance == null)
|
||||
{
|
||||
FelInstance = new PaladinCorpse();
|
||||
FelInstance.MoveToWorld(new Point3D(5396, 118, 0), Map.Felucca);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public override int LabelNumber { get { return 1158135; } } // the remains of a would-be paladin
|
||||
public override bool HandlesOnMovement { get { return true; } }
|
||||
public override bool IsDecoContainer { get { return false; } }
|
||||
|
||||
public PaladinCorpse()
|
||||
: base(0x9F1E)
|
||||
{
|
||||
DropItem(new WouldBePaladinChronicles());
|
||||
}
|
||||
|
||||
public override void OnMovement(Mobile m, Point3D oldLocation)
|
||||
{
|
||||
if (InRange(m.Location, 2) && !InRange(oldLocation, 2))
|
||||
{
|
||||
PrivateOverheadMessage(Server.Network.MessageType.Regular, 1154, 1158137, m.NetState); // *You notice the skeleton clutching a small journal...*
|
||||
}
|
||||
}
|
||||
|
||||
public PaladinCorpse(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write((int)0);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
int v = reader.ReadInt();
|
||||
|
||||
if (Map == Map.Trammel)
|
||||
{
|
||||
TramInstance = this;
|
||||
}
|
||||
else if (Map == Map.Felucca)
|
||||
{
|
||||
FelInstance = this;
|
||||
}
|
||||
|
||||
if (!Core.TOL)
|
||||
Delete();
|
||||
}
|
||||
}
|
||||
|
||||
public class WouldBePaladinChronicles : BaseJournal
|
||||
{
|
||||
public override int LabelNumber { get { return 1094837; } } // a journal
|
||||
|
||||
public override TextDefinition Title { get { return null; } }
|
||||
public override TextDefinition Body { get { return 1158138; } }
|
||||
/**the text is mostly a journal chronicling the adventures of a man who wished to join the Paladins of Trinsic.
|
||||
* Of particular note is the final entry...*<br><br>This is the most shameful entry I will write...for I have fallen
|
||||
* short of my goal. My only hope is my failures will serve to assist those who come after me with the courage to
|
||||
* pursue the truth, and with my notes they will find success. I have found strange crystals on the corpses of the
|
||||
* creatures I slay here. When I touch the crystal, I can feel it absorbed into my being. A growing voice inside me
|
||||
* compels me to altars located throughout the dungeon. When the voice within grew loud enough I could no longer
|
||||
* ignore it, I touched my hand to the altar and before me a grand champion stood! I was quick to react to the
|
||||
* crushing blow my newly summoned opponent sought to deliver, and I was victorious! Alas, the deeper into the
|
||||
* dungeon I explored, the more powerful the altar champions become and now I find myself in this dire situation....
|
||||
* To anyone who reads this...do me the honor and defeat the three champions and slay the unbound energy vortexes that
|
||||
* inhabit the deepest depths of this place...for I feel my time here is shor...*/
|
||||
|
||||
public WouldBePaladinChronicles()
|
||||
{
|
||||
Movable = false;
|
||||
}
|
||||
|
||||
public override void OnDoubleClick(Mobile m)
|
||||
{
|
||||
m.SendGump(new BaseJournalGump(Title, Body));
|
||||
}
|
||||
|
||||
public WouldBePaladinChronicles(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write((int)0);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
int v = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
}
|
||||
194
Scripts/Services/Town Cryer/Quests/Rewards.cs
Normal file
194
Scripts/Services/Town Cryer/Quests/Rewards.cs
Normal file
@@ -0,0 +1,194 @@
|
||||
using Server;
|
||||
using System;
|
||||
|
||||
namespace Server.Items
|
||||
{
|
||||
public class HuntmastersQuestRewardTitleDeed : BaseRewardTitleDeed
|
||||
{
|
||||
public override TextDefinition Title { get { return new TextDefinition(1158140); } } // Hunter
|
||||
|
||||
[Constructable]
|
||||
public HuntmastersQuestRewardTitleDeed()
|
||||
{
|
||||
}
|
||||
|
||||
public HuntmastersQuestRewardTitleDeed(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write((int)0);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
int v = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
|
||||
public class PaladinOfTrinsicRewardTitleDeed : BaseRewardTitleDeed
|
||||
{
|
||||
public override TextDefinition Title { get { return new TextDefinition(1158090); } } // Paladin of Trinsic
|
||||
|
||||
[Constructable]
|
||||
public PaladinOfTrinsicRewardTitleDeed()
|
||||
{
|
||||
}
|
||||
|
||||
public PaladinOfTrinsicRewardTitleDeed(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write((int)0);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
int v = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
|
||||
public class RightingWrongRewardTitleDeed : BaseRewardTitleDeed
|
||||
{
|
||||
public override TextDefinition Title { get { return new TextDefinition(1158161); } } // Warden of Wrong
|
||||
|
||||
[Constructable]
|
||||
public RightingWrongRewardTitleDeed()
|
||||
{
|
||||
}
|
||||
|
||||
public RightingWrongRewardTitleDeed(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write((int)0);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
int v = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
|
||||
public class TreasureHunterRewardTitleDeed : BaseRewardTitleDeed
|
||||
{
|
||||
public override TextDefinition Title { get { return new TextDefinition(1158389); } } // Treasure Hunter
|
||||
|
||||
[Constructable]
|
||||
public TreasureHunterRewardTitleDeed()
|
||||
{
|
||||
}
|
||||
|
||||
public TreasureHunterRewardTitleDeed(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write((int)0);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
int v = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
|
||||
public class HeroOfMincRewardTitleDeed : BaseRewardTitleDeed
|
||||
{
|
||||
public override TextDefinition Title { get { return new TextDefinition(1158278); } } // Hero of Minoc
|
||||
|
||||
[Constructable]
|
||||
public HeroOfMincRewardTitleDeed()
|
||||
{
|
||||
}
|
||||
|
||||
public HeroOfMincRewardTitleDeed(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write((int)0);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
int v = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
|
||||
public class DespiseTitleDeed : BaseRewardTitleDeed
|
||||
{
|
||||
public override TextDefinition Title { get { return new TextDefinition(1158303); } } // The Battle of Wisps TODO: Correct cliloc
|
||||
|
||||
[Constructable]
|
||||
public DespiseTitleDeed()
|
||||
{
|
||||
}
|
||||
|
||||
public DespiseTitleDeed(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write((int)0);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
int v = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
|
||||
public class ExploringTheDeedTitleDeed : BaseRewardTitleDeed
|
||||
{
|
||||
public override TextDefinition Title { get { return new TextDefinition(1154505); } } // Salvager of the Deep
|
||||
|
||||
[Constructable]
|
||||
public ExploringTheDeedTitleDeed()
|
||||
{
|
||||
}
|
||||
|
||||
public ExploringTheDeedTitleDeed(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write((int)0);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
int v = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
}
|
||||
388
Scripts/Services/Town Cryer/Quests/RightingWrongQuest.cs
Normal file
388
Scripts/Services/Town Cryer/Quests/RightingWrongQuest.cs
Normal file
@@ -0,0 +1,388 @@
|
||||
using Server;
|
||||
using System;
|
||||
using Server.Items;
|
||||
using Server.Mobiles;
|
||||
using Server.Services.TownCryer;
|
||||
|
||||
namespace Server.Engines.Quests
|
||||
{
|
||||
public class RightingWrongQuest : BaseQuest
|
||||
{
|
||||
/* Righting Wrong */
|
||||
public override object Title { get { return 1158150; } }
|
||||
|
||||
/*The situation at the Prison Dungeon Wrong seems to have gotten out of control. The article mentioned the Royal
|
||||
* Britannian' Guard has started contracting adventuring groups to handle the situation. Perhaps it would be
|
||||
* prudent to inquire about opportunities with the Guard at the Court of Truth in Yew.*/
|
||||
public override object Description { get { return 1158151; } }
|
||||
|
||||
/* You decide against accepting the quest. */
|
||||
public override object Refuse { get { return 1158130; } }
|
||||
|
||||
/* Inquire about the events at Wrong with the Royal Britannian Guard at the Court of Truth in Yew. */
|
||||
public override object Uncomplete { get { return 1158152; } }
|
||||
|
||||
public override object Complete { get { return 1158170; } }
|
||||
/*You have brought Justice to the forgotten prison dungeon Wrong! The Royal Britannian Guard thanks you for your service,
|
||||
* and for not leaving the Lieutenant behind. You fought bravely this day and escaped the prison. As a thank you for your
|
||||
* service, and a testament to your accomplishment, you have been granted the title Warden of Wrong!*/
|
||||
|
||||
public override int CompleteMessage { get { return 1158291; } } // You've found the Royal Guard Captain! Speak to him to learn more!
|
||||
|
||||
public override int AcceptSound { get { return 0x2E8; } }
|
||||
public override bool DoneOnce { get { return true; } }
|
||||
|
||||
public RightingWrongQuest()
|
||||
{
|
||||
AddObjective(new InternalObjective());
|
||||
|
||||
AddReward(new BaseReward(1158153)); // A unique opportunity with the Royal Britannian Guard
|
||||
}
|
||||
|
||||
public override void GiveRewards()
|
||||
{
|
||||
base.GiveRewards();
|
||||
|
||||
QuestHelper.Delay(Owner, typeof(RightingWrongQuest), RestartDelay);
|
||||
}
|
||||
|
||||
private class InternalObjective : BaseObjective
|
||||
{
|
||||
public override object ObjectiveDescription { get { return Quest.Uncomplete; } }
|
||||
|
||||
public InternalObjective()
|
||||
: base(1)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.Write((int)0); // version
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class RightingWrongQuest2 : BaseQuest
|
||||
{
|
||||
public override QuestChain ChainID { get { return QuestChain.RightingWrong; } }
|
||||
public override Type NextQuest { get { return typeof(RightingWrongQuest3); } }
|
||||
|
||||
/* Righting Wrong */
|
||||
public override object Title { get { return 1158150; } }
|
||||
|
||||
/*Another wanna-be guardsman expecting to wrangle this mess? You should know that inside Wrong there are many terrors.
|
||||
* Lizardman have squatted in the entire prison, eaten most of the prisoners and staff. The few staff that are left have
|
||||
* gone mad. If you expect to make it as a Guardsman you are going to need to thin out the heard. Head inside and kill
|
||||
* the creatures within!*/
|
||||
public override object Description { get { return 1158155; } }
|
||||
|
||||
/* You decide against accepting the quest. */
|
||||
public override object Refuse { get { return 1158130; } }
|
||||
|
||||
/* Go inside the prison dungeon Wrong and slay the creatures within! */
|
||||
public override object Uncomplete { get { return 1158156; } }
|
||||
|
||||
/* Well then, I guess you aren't as useless as you look. Made quick work of the Lizards, that's fine work indeed!
|
||||
* Your next test is going to require you travel deeper into the prison. Seems there is an ogre who has taken to mastering
|
||||
* his cooking skills at the expense of the former prisoners. The Guard can't have that, so you need to go in there and make
|
||||
* sure this cook is prepping his last meal! */
|
||||
public override object Complete { get { return 1158157; } }
|
||||
|
||||
public override int AcceptSound { get { return 0x2E8; } }
|
||||
public override bool DoneOnce { get { return true; } }
|
||||
|
||||
public RightingWrongQuest2()
|
||||
{
|
||||
AddObjective(new SlayObjective(typeof(LizardmanDefender), "lizardman defenders", 5));
|
||||
AddObjective(new SlayObjective(typeof(LizardmanSquatter), "lizardman squatters", 5));
|
||||
AddObjective(new SlayObjective(typeof(CaveTrollWrong), "cave trolls", 5));
|
||||
AddObjective(new SlayObjective(typeof(HungryOgre), "hungry ogres", 5));
|
||||
|
||||
AddReward(new BaseReward(1158167)); // A step closer to righting Wrong
|
||||
}
|
||||
}
|
||||
|
||||
public class RightingWrongQuest3 : BaseQuest
|
||||
{
|
||||
public override QuestChain ChainID { get { return QuestChain.RightingWrong; } }
|
||||
public override Type NextQuest { get { return typeof(RightingWrongQuest4); } }
|
||||
|
||||
/* Righting Wrong */
|
||||
public override object Title { get { return 1158150; } }
|
||||
|
||||
/* Well then, I guess you aren't as useless as you look. Made quick work of the Lizards, that's fine work indeed!
|
||||
* Your next test is going to require you travel deeper into the prison. Seems there is an ogre who has taken to mastering
|
||||
* his cooking skills at the expense of the former prisoners. The Guard can't have that, so you need to go in there and make
|
||||
* sure this cook is prepping his last meal! */
|
||||
public override object Description { get { return 1158157; } }
|
||||
|
||||
/* You decide against accepting the quest. */
|
||||
public override object Refuse { get { return 1158130; } }
|
||||
|
||||
/* Go inside the prison dungeon Wrong and slay Fezzik the Ogre Cook */
|
||||
public override object Uncomplete { get { return 1158158; } }
|
||||
|
||||
/* Looks like Fezzik won't be making anymore stew! Hah! Well done! Your final task is going to require you to learn the
|
||||
* most important lesson of being a Guardsman - we never leave a man behind. One of our comrades was captured by the
|
||||
* demonic jailers and taken to the prison. You need to get yourself captured by the jailers and taken inside the deepest
|
||||
* part of the prison. Once inside, find our fallen comrade and escape. Here's a copy of his orders to help you find his corpse. */
|
||||
public override object Complete { get { return 1158163; } }
|
||||
|
||||
//public override int CompleteMessage { get { return 1158291; } } // You've found the Royal Guard Captain! Speak to him to learn more!
|
||||
|
||||
public override int AcceptSound { get { return 0x2E8; } }
|
||||
|
||||
public RightingWrongQuest3()
|
||||
{
|
||||
AddObjective(new SlayObjective(typeof(Fezzik), "fezzik the ogre cook", 1));
|
||||
|
||||
AddReward(new BaseReward(1158167)); // A step closer to righting Wrong
|
||||
}
|
||||
}
|
||||
|
||||
public class RightingWrongQuest4 : BaseQuest
|
||||
{
|
||||
public override QuestChain ChainID { get { return QuestChain.RightingWrong; } }
|
||||
|
||||
private RoyalBritannianGuardOrders Orders { get; set; }
|
||||
|
||||
/* Righting Wrong */
|
||||
public override object Title { get { return 1158150; } }
|
||||
|
||||
/* Looks like Fezzik won't be making anymore stew! Hah! Well done! Your final task is going to require you to learn the
|
||||
* most important lesson of being a Guardsman - we never leave a man behind. One of our comrades was captured by the
|
||||
* demonic jailers and taken to the prison. You need to get yourself captured by the jailers and taken inside the deepest
|
||||
* part of the prison. Once inside, find our fallen comrade and escape. Here's a copy of his orders to help you find his corpse. */
|
||||
public override object Description { get { return 1158163; } }
|
||||
|
||||
/* You decide against accepting the quest. */
|
||||
public override object Refuse { get { return 1158130; } }
|
||||
|
||||
/* Go inside the prison dungeon Wrong and get yourself captured by the Demonic Jailors. Once inside, find the fallen Guard and escape
|
||||
* with his corpse. */
|
||||
public override object Uncomplete { get { return 1158166; } }
|
||||
|
||||
/* You have brought Justice to the forgotten prison dungeon Wrong! The Royal Britannian Guard thanks you for your service,
|
||||
* and for not leaving the Lieutenant behind. You fought bravely this day and escaped the prison. As a thank you for your
|
||||
* service, and a testament to your accomplishment, you have been granted the title Warden of Wrong! */
|
||||
public override object Complete { get { return 1158170; } }
|
||||
|
||||
public override int CompleteMessage { get { return 1158169; } }
|
||||
/*You have found the corpse of Lieutenant Bennet Yardley of the Royal Britannian Guard. Unfortunately, it seems there
|
||||
* is not much left to return to the Field Commander. Regardless, you hold back your urge to become sick and gather his
|
||||
* remains. Escape the prison and return to the Field Commander.*/
|
||||
|
||||
public override int AcceptSound { get { return 0x2E8; } }
|
||||
|
||||
public RightingWrongQuest4()
|
||||
{
|
||||
AddObjective(new InternalObjective());
|
||||
|
||||
AddReward(new BaseReward(typeof(RightingWrongRewardTitleDeed), 1158165)); // A Unique Honor from the Royal Britannian Guard
|
||||
}
|
||||
|
||||
public override void OnAccept()
|
||||
{
|
||||
base.OnAccept();
|
||||
|
||||
Orders = new RoyalBritannianGuardOrders();
|
||||
Owner.Backpack.DropItem(Orders);
|
||||
|
||||
Owner.SendLocalizedMessage(1154489); // You received a Quest Item!
|
||||
}
|
||||
|
||||
public void CompleteQuest()
|
||||
{
|
||||
TownCryerSystem.CompleteQuest(Owner, new RightingWrongQuest());
|
||||
|
||||
OnCompleted();
|
||||
GiveRewards();
|
||||
|
||||
QuestHelper.Delay(Owner, typeof(RightingWrongQuest2), RestartDelay);
|
||||
}
|
||||
|
||||
public override void RemoveQuest(bool removeChain)
|
||||
{
|
||||
base.RemoveQuest(removeChain);
|
||||
|
||||
if (Orders != null && !Orders.Deleted)
|
||||
{
|
||||
Orders.Delete();
|
||||
}
|
||||
}
|
||||
|
||||
private class InternalObjective : BaseObjective
|
||||
{
|
||||
public override object ObjectiveDescription { get { return 1158164; } } // Find the fallen Guard's corpse and escape the prison.
|
||||
|
||||
public InternalObjective()
|
||||
: base(1)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.Write((int)0); // version
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.Write((int)0); // version
|
||||
|
||||
writer.Write(Orders);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
int version = reader.ReadInt();
|
||||
|
||||
Orders = reader.ReadItem() as RoyalBritannianGuardOrders;
|
||||
}
|
||||
}
|
||||
|
||||
public class Arnold : MondainQuester
|
||||
{
|
||||
public override Type[] Quests { get { return new Type[] { typeof(RightingWrongQuest2) }; } }
|
||||
|
||||
public static Arnold TramInstance { get; set; }
|
||||
public static Arnold FelInstance { get; set; }
|
||||
|
||||
public static void Initialize()
|
||||
{
|
||||
if (Core.TOL)
|
||||
{
|
||||
if (TramInstance == null)
|
||||
{
|
||||
TramInstance = new Arnold();
|
||||
TramInstance.MoveToWorld(new Point3D(363, 913, 0), Map.Trammel);
|
||||
TramInstance.Direction = Direction.East;
|
||||
}
|
||||
|
||||
if (FelInstance == null)
|
||||
{
|
||||
FelInstance = new Arnold();
|
||||
FelInstance.MoveToWorld(new Point3D(363, 913, 0), Map.Felucca);
|
||||
FelInstance.Direction = Direction.East;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public Arnold()
|
||||
: base("Arnold", "the Royal Britannian Guard")
|
||||
{
|
||||
}
|
||||
|
||||
public override void InitBody()
|
||||
{
|
||||
InitStats(100, 100, 25);
|
||||
|
||||
Female = false;
|
||||
CantWalk = true;
|
||||
|
||||
Body = 0x190;
|
||||
Hue = Race.RandomSkinHue();
|
||||
HairItemID = 0x203C;
|
||||
FacialHairItemID = 0x204C;
|
||||
|
||||
HairHue = 0x8A8;
|
||||
FacialHairHue = 0x8A8;
|
||||
}
|
||||
|
||||
public override void InitOutfit()
|
||||
{
|
||||
AddItem(new Backpack());
|
||||
|
||||
SetWearable(new ChainChest());
|
||||
SetWearable(new ThighBoots());
|
||||
SetWearable(new BodySash(), 1157);
|
||||
SetWearable(new Epaulette(), 1157);
|
||||
SetWearable(new ChaosShield());
|
||||
SetWearable(new Broadsword());
|
||||
}
|
||||
|
||||
public override void OnDoubleClick(Mobile m)
|
||||
{
|
||||
if (m is PlayerMobile && m.InRange(Location, 5))
|
||||
{
|
||||
RightingWrongQuest4 quest = QuestHelper.GetQuest<RightingWrongQuest4>((PlayerMobile)m);
|
||||
|
||||
if (quest != null && quest.Completed)
|
||||
{
|
||||
quest.CompleteQuest();
|
||||
}
|
||||
else
|
||||
{
|
||||
base.OnDoubleClick(m);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public override void OnMovement(Mobile m, Point3D oldLocation)
|
||||
{
|
||||
if (m is PlayerMobile && InRange(m.Location, 5) && !InRange(oldLocation, 5))
|
||||
{
|
||||
RightingWrongQuest quest = QuestHelper.GetQuest<RightingWrongQuest>((PlayerMobile)m);
|
||||
|
||||
if (quest != null)
|
||||
{
|
||||
quest.OnCompleted();
|
||||
quest.GiveRewards();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public Arnold(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.Write((int)0); // version
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
int version = reader.ReadInt();
|
||||
|
||||
if (Map == Map.Trammel)
|
||||
{
|
||||
TramInstance = this;
|
||||
}
|
||||
else if (Map == Map.Felucca)
|
||||
{
|
||||
FelInstance = this;
|
||||
}
|
||||
|
||||
if (!Core.TOL)
|
||||
Delete();
|
||||
}
|
||||
}
|
||||
}
|
||||
186
Scripts/Services/Town Cryer/Quests/WishesOfTheWispsQuest.cs
Normal file
186
Scripts/Services/Town Cryer/Quests/WishesOfTheWispsQuest.cs
Normal file
@@ -0,0 +1,186 @@
|
||||
using Server;
|
||||
using System;
|
||||
using Server.Items;
|
||||
using Server.Mobiles;
|
||||
using Server.Engines.Points;
|
||||
using Server.Services.TownCryer;
|
||||
using Server.Gumps;
|
||||
|
||||
namespace Server.Engines.Quests
|
||||
{
|
||||
public class WishesOfTheWispQuest : BaseQuest
|
||||
{
|
||||
/*Wishes of Wisps*/
|
||||
public override object Title { get { return 1158296; } }
|
||||
|
||||
/*The story of the brothers Andros and Adrian is troubling, yet fascinates you. You have heard rumor of items
|
||||
* traded by the mysterious wisps. Despite the dangers you decide you should venture to the dungeon Despise.*/
|
||||
public override object Description { get { return 1158318; } }
|
||||
|
||||
/* You decide against accepting the quest. */
|
||||
public override object Refuse { get { return 1158130; } }
|
||||
|
||||
/* Visit the Dungeon Despise and investigate. */
|
||||
public override object Uncomplete { get { return 1158297; } }
|
||||
|
||||
//public override object Complete { get { return 1158378; } }
|
||||
|
||||
public override int CompleteMessage { get { return 1156585; } } // You've completed a quest!
|
||||
|
||||
public override int AcceptSound { get { return 0x2E8; } }
|
||||
public override bool DoneOnce { get { return true; } }
|
||||
|
||||
public WishesOfTheWispQuest()
|
||||
{
|
||||
AddObjective(new InternalObjective());
|
||||
|
||||
AddReward(new BaseReward(1158298)); // A step closer to understanding what happened at Despise
|
||||
}
|
||||
|
||||
public void CompleteQuest()
|
||||
{
|
||||
OnCompleted();
|
||||
Objectives[0].CurProgress++;
|
||||
TownCryerSystem.CompleteQuest(Owner, 1153468, 1158309, 0x65C);
|
||||
GiveRewards();
|
||||
}
|
||||
|
||||
private class InternalObjective : BaseObjective
|
||||
{
|
||||
public override object ObjectiveDescription { get { return Quest.Uncomplete; } }
|
||||
|
||||
public InternalObjective()
|
||||
: base(1)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.Write((int)0); // version
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class WhisperingWithWispsQuest : BaseQuest
|
||||
{
|
||||
/*Whispering with Wisps*/
|
||||
public override object Title { get { return 1158300; } }
|
||||
|
||||
/*The mysterious wisp seems friendly. You are taken by the mysterious creature and it's iridescent glow. The wisp directs
|
||||
* you inside the dungeon, but otherwise does not respond to your presence. You feel guided by your karma. Entering the
|
||||
* dungeon with negative karma will draw you to the depths of despise while entering with positive karma will draw you up
|
||||
* into the peaceful glades above. You have learned from the wisp you must venture inside the dungeon and seek an Ankh.*/
|
||||
public override object Description { get { return 1158301; } }
|
||||
|
||||
/* You decide against accepting the quest. */
|
||||
public override object Refuse { get { return 1158130; } }
|
||||
|
||||
/* Enter the appropriate level of despise based on your karma. Once inside, find and use an ankh. */
|
||||
public override object Uncomplete { get { return 1158302; } }
|
||||
|
||||
/*You have successfully freed Despise from the eternal feud between Andros and Adrian. Despite your efforts, you no doubt
|
||||
* believe their strong magics will compel them to battle once again. You rejoice, however, in your small albeit short
|
||||
* lived victory! The wisp seems eternally grateful and grants you a generous gift!*/
|
||||
public override object Complete { get { return 1158323; } }
|
||||
|
||||
public override int CompleteMessage { get { return 1158322; } }
|
||||
// You have successfully slayed the brother and freed Despise from their eternal feud! Return to the Wisp outside the dungeon to claim your reward!
|
||||
|
||||
public override int AcceptSound { get { return 0x2E8; } }
|
||||
public override bool DoneOnce { get { return true; } }
|
||||
|
||||
public WhisperingWithWispsQuest()
|
||||
{
|
||||
AddObjective(new InternalObjective());
|
||||
|
||||
AddReward(new BaseReward(typeof(DespiseTitleDeed), 1158139));
|
||||
}
|
||||
|
||||
public override bool RenderObjective(MondainQuestGump g, bool offer)
|
||||
{
|
||||
if (offer)
|
||||
g.AddHtmlLocalized(130, 45, 270, 16, 1049010, 0xFFFFFF, false, false); // Quest Offer
|
||||
else
|
||||
g.AddHtmlLocalized(130, 45, 270, 16, 1046026, 0xFFFFFF, false, false); // Quest Log
|
||||
|
||||
g.AddButton(130, 430, 0x2EEF, 0x2EF1, (int)Buttons.PreviousPage, GumpButtonType.Reply, 0);
|
||||
g.AddButton(275, 430, 0x2EE9, 0x2EEB, (int)Buttons.NextPage, GumpButtonType.Reply, 0);
|
||||
|
||||
g.AddHtmlObject(160, 70, 200, 40, Title, BaseQuestGump.DarkGreen, false, false);
|
||||
g.AddHtmlLocalized(98, 140, 312, 16, 1049073, 0x2710, false, false); // Objective:
|
||||
|
||||
g.AddHtmlLocalized(98, 156, 312, 16, 1072208, 0x2710, false, false); // All of the following
|
||||
|
||||
g.AddHtmlLocalized(98, 172, 312, 83, 1158302, BaseQuestGump.LightGreen, false, false);
|
||||
/* Enter the appropriate level of despise based on your karma. Once inside, find and use an ankh.*/
|
||||
|
||||
g.AddHtmlLocalized(98, 255, 312, 40, 1158305, BaseQuestGump.LightGreen, false, false);
|
||||
//Using your wisp, posses a creature within the dungeon.
|
||||
|
||||
g.AddHtmlLocalized(98, 335, 312, 40, 1158306, BaseQuestGump.LightGreen, false, false);
|
||||
// Defeat Andros or Adrian in the depths of Despise.
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public static void OnBossSlain(Server.Engines.Despise.DespiseBoss boss)
|
||||
{
|
||||
foreach (var ds in boss.GetLootingRights())
|
||||
{
|
||||
if(ds.m_Mobile is PlayerMobile)
|
||||
{
|
||||
var pm = ds.m_Mobile as PlayerMobile;
|
||||
var quest = QuestHelper.GetQuest<WhisperingWithWispsQuest>(pm);
|
||||
|
||||
if(quest != null && !quest.Completed)
|
||||
{
|
||||
quest.Objectives[0].CurProgress++;
|
||||
quest.OnCompleted();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void CompleteQuest()
|
||||
{
|
||||
TownCryerSystem.CompleteQuest(Owner, 1158303, 1158323, 0x650);
|
||||
GiveRewards();
|
||||
|
||||
Owner.SendLocalizedMessage(1158326); // For your accomplishments you have been awarded a bonus 1000 Despise points! Trade with the wisp to redeem them!
|
||||
Server.Engines.Points.PointsSystem.DespiseCrystals.AwardPoints(Owner, 1000, false, false);
|
||||
}
|
||||
|
||||
private class InternalObjective : BaseObjective
|
||||
{
|
||||
public override object ObjectiveDescription { get { return Quest.Uncomplete; } }
|
||||
|
||||
public InternalObjective()
|
||||
: base(1)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.Write((int)0); // version
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
int version = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user