- Modified the quest system to allow non-BaseCreature quest givers, now requires IQuestGiver.

- Added base quest giver items, both timed and untimed.
- Added BatteredBucket and Lost and Found quest.
- Moved quester 'friendly names' to a class attribute. If left unspecified, the type name is used.
- Misc quest corrections.
- The bag of sending will now reject nontransferable items.
- Fixed quest items generating error messages when StackWith was attempted on them. (StackWith is not supposed to produce feedback.)
- Quest items can now be dropped onto the player's backpack.
This commit is contained in:
eos 2013-02-24 00:31:44 +00:00
parent 0fcd5821a5
commit 71a9e054de
36 changed files with 627 additions and 258 deletions

View file

@ -26,7 +26,7 @@ namespace Server.Engines.MLQuests.Definitions
CompletionMessage = 1075291; // (As you try to use the Spirit Bottle, the ghost snatches it out of your hand and smashes it on the rocks) Please, don't be frightened. I need your help!
CompletionNotice = CompletionNoticeShort;
Objectives.Add( new DeliverObjective( typeof( SpiritBottle ), 1, "Spirit Bottle", typeof( Frederic ), "The Ghost of Frederic Smithson" ) );
Objectives.Add( new DeliverObjective( typeof( SpiritBottle ), 1, "Spirit Bottle", typeof( Frederic ) ) );
Rewards.Add( new DummyReward( 1075284 ) ); // Return the filled Spirit Bottle to Griswolt the Master Necromancer to receive a reward.
}
@ -55,7 +55,7 @@ namespace Server.Engines.MLQuests.Definitions
CompletionMessage = 1075342; // How may I help thee? You have the silk of a dread spider? Of course I can make you a bandage, but what happened to Frederic?
CompletionNotice = CompletionNoticeShort;
Objectives.Add( new TimedDeliverObjective( TimeSpan.FromSeconds( 600 ), typeof( DreadSpiderSilk ), 1, "Dread Spider Silk", typeof( Leon ), "Leon" ) );
Objectives.Add( new TimedDeliverObjective( TimeSpan.FromSeconds( 600 ), typeof( DreadSpiderSilk ), 1, "Dread Spider Silk", typeof( Leon ) ) );
Rewards.Add( new DummyReward( 1075339 ) ); // Hurry! You must get the silk to Leon the Alchemist quickly, or it will crumble and become useless!
}
@ -84,7 +84,7 @@ namespace Server.Engines.MLQuests.Definitions
CompletionMessage = 1075348; // Sorry, Im not accepting commissions at the moment. What? You have the bandage I need from Leon? Thank you so much! But why didnt my son bring this to me himself? . . . Oh, no! You can't be serious! *sag* My Freddie, my son! Thank you for carrying out his last wish. Here -- I made this for my son, to give to him when he became a journeyman. I want you to have it.
CompletionNotice = CompletionNoticeShort;
Objectives.Add( new DeliverObjective( typeof( AlchemistsBandage ), 1, "Alchemist's Bandage", typeof( Andros ), "Andros" ) );
Objectives.Add( new DeliverObjective( typeof( AlchemistsBandage ), 1, "Alchemist's Bandage", typeof( Andros ) ) );
Rewards.Add( new ItemReward( 1075345, typeof( AndrosGratitude ) ) ); // Andros Gratitude
}
@ -150,6 +150,7 @@ namespace Server.Engines.MLQuests.Definitions
}
}
[QuesterName( "The Ghost of Frederic Smithson" )]
public class Frederic : BaseCreature
{
public override bool IsInvulnerable { get { return true; } }

View file

@ -83,6 +83,7 @@ namespace Server.Engines.MLQuests.Definitions
#region Mobiles
[QuesterName( "Kia (Bedlam)" )]
public class Kia : BaseCreature
{
public override bool IsInvulnerable { get { return true; } }
@ -126,6 +127,7 @@ namespace Server.Engines.MLQuests.Definitions
}
}
[QuesterName( "Emerillo (Bedlam)" )]
public class Emerillo : BaseCreature
{
public override bool IsInvulnerable { get { return true; } }

View file

@ -23,7 +23,7 @@ namespace Server.Engines.MLQuests.Definitions
InProgressMessage = 1074968; // My friend, Iosep, is a weaponsmith in Jhelom. If anyone can help us, he can!
CompletionMessage = 1074991; // Greetings. What have you there? Ah, a sample from a poisonous tree, you say? My friend Jamal sent you? Well, let me see that then, and we'll get to work.
Objectives.Add( new DeliverObjective( typeof( TaintedTreeSample ), 1, "tainted tree sample", typeof( Iosep ), "Iosep (Jhelom)" ) );
Objectives.Add( new DeliverObjective( typeof( TaintedTreeSample ), 1, "tainted tree sample", typeof( Iosep ) ) );
Rewards.Add( new DummyReward( 1074962 ) ); // A step closer to entering Blighted Grove.
}
@ -126,7 +126,7 @@ namespace Server.Engines.MLQuests.Definitions
InProgressMessage = 1074972; // I'm sure Jamal is eager to get this information. He's probably still hanging around near that big old blighted tree.
CompletionMessage = 1074995; // Heya! You're back. Was Iosep able to help? Let me see what he's sent.
Objectives.Add( new DeliverObjective( typeof( SealedNotesForJamal ), 1, "sealed note for Jamal", typeof( Jamal ), "Jamal (near Blighted Grove)" ) );
Objectives.Add( new DeliverObjective( typeof( SealedNotesForJamal ), 1, "sealed note for Jamal", typeof( Jamal ) ) );
Rewards.Add( new DummyReward( 1074962 ) ); // A step closer to entering Blighted Grove.
}
@ -175,6 +175,7 @@ namespace Server.Engines.MLQuests.Definitions
#region Mobiles
[QuesterName( "Jamal (near Blighted Grove)" )]
public class Jamal : BaseCreature
{
public override bool IsInvulnerable { get { return true; } }
@ -218,6 +219,7 @@ namespace Server.Engines.MLQuests.Definitions
}
}
[QuesterName( "Iosep (Jhelom)" )]
public class Iosep : BaseCreature
{
public override bool IsInvulnerable { get { return true; } }

View file

@ -26,7 +26,7 @@ namespace Server.Engines.MLQuests.Definitions
CompletionMessage = 1075326; // What is this you give me? A basin of water?
CompletionNotice = CompletionNoticeShort;
Objectives.Add( new DeliverObjective( typeof( BasinOfCrystalClearWater ), 1, 1075303, typeof( SkeletonOfSzandor ), "Szandor" ) );
Objectives.Add( new DeliverObjective( typeof( BasinOfCrystalClearWater ), 1, "Basin of Crystal Clear Water", typeof( SkeletonOfSzandor ) ) );
Rewards.Add( new DummyReward( 1075323 ) ); // Aurelia's gratitude.
}
@ -55,9 +55,9 @@ namespace Server.Engines.MLQuests.Definitions
CompletionMessage = 1075332; // Thank goodness! Now we can honor my father for the great man he was while he lived, rather than the horror he became.
CompletionNotice = CompletionNoticeShort;
Objectives.Add( new DeliverObjective( typeof( BasinOfCrystalClearWater ), 1, 1075303, typeof( Aurelia ), "Aurelia" ) );
Objectives.Add( new DeliverObjective( typeof( BasinOfCrystalClearWater ), 1, "Basin of Crystal Clear Water", typeof( Aurelia ) ) );
Rewards.Add( new ItemReward( 1075304, typeof( MirrorOfPurification ) ) );
Rewards.Add( new ItemReward( 1075304, typeof( MirrorOfPurification ) ) ); // Mirror of Purification
}
public override void Generate()
@ -98,7 +98,7 @@ namespace Server.Engines.MLQuests.Definitions
InProgressMessage = 1074460; // If I knew where my cousin was, I'd make the delivery myself.
CompletionMessage = 1074461; // Oh, hello there. What do you have for me?
Objectives.Add( new DeliverObjective( typeof( SpecialTreatForDrithen ), 1, "treat for Drithen", typeof( Drithen ), "Drithen (Umbra)" ) );
Objectives.Add( new DeliverObjective( typeof( SpecialTreatForDrithen ), 1, "treat for Drithen", typeof( Drithen ) ) );
Rewards.Add( ItemReward.BagOfTreasure );
}
@ -157,6 +157,7 @@ namespace Server.Engines.MLQuests.Definitions
}
}
[QuesterName( "Szandor" )]
public class SkeletonOfSzandor : BaseCreature
{
public override bool IsInvulnerable { get { return true; } }

View file

@ -1110,7 +1110,7 @@ namespace Server.Engines.MLQuests.Definitions
InProgressMessage = 1073948; // I will be in your debt if you bring me kilts.
CompletionMessage = 1073974; // I say truly - that is a magnificent garment! You have more than earned a reward.
Objectives.Add( new CollectObjective( 10, typeof( Kilt ), 1015281 ) ); // kilt
Objectives.Add( new CollectObjective( 10, typeof( Kilt ), 1025431 ) ); // kilt
Rewards.Add( ItemReward.TailorSatchel );
}
@ -1128,7 +1128,7 @@ namespace Server.Engines.MLQuests.Definitions
InProgressMessage = 1073949; // I will be in your debt if you bring me fancy shirts.
CompletionMessage = 1073973; // I appreciate your service. Now, see what elven hands can create.
Objectives.Add( new CollectObjective( 10, typeof( FancyShirt ), 1015272 ) ); // fancy shirt
Objectives.Add( new CollectObjective( 10, typeof( FancyShirt ), 1027933 ) ); // fancy shirt
Rewards.Add( ItemReward.TailorSatchel );
}
@ -1146,7 +1146,7 @@ namespace Server.Engines.MLQuests.Definitions
InProgressMessage = 1073951; // I will be in your debt if you bring me studded bustiers.
CompletionMessage = 1073976; // Truly, it is worse than I feared. Still, I appreciate your efforts on my behalf.
Objectives.Add( new CollectObjective( 10, typeof( FemaleStuddedChest ), 1015310 ) ); // studded bustier
Objectives.Add( new CollectObjective( 10, typeof( FemaleStuddedChest ), 1027180 ) ); // studded bustier
Rewards.Add( ItemReward.TailorSatchel );
}
@ -1236,7 +1236,7 @@ namespace Server.Engines.MLQuests.Definitions
InProgressMessage = 1073952; // I will be in your debt if you bring me tinker's tools.
CompletionMessage = 1073977; // Now, I shall see what an elf can invent!
Objectives.Add( new CollectObjective( 10, typeof( TinkerTools ), 1011218 ) ); // tinker's tools
Objectives.Add( new CollectObjective( 10, typeof( TinkerTools ), 1027868 ) ); // tinker's tools
Rewards.Add( ItemReward.TinkerSatchel );
}
@ -1438,7 +1438,7 @@ namespace Server.Engines.MLQuests.Definitions
InProgressMessage = 1073959; // I will be in your debt if you bring me broadswords.
CompletionMessage = 1073978; // Enjoy my thanks for your service.
Objectives.Add( new CollectObjective( 12, typeof( Broadsword ), 1015055 ) ); // broadsword
Objectives.Add( new CollectObjective( 12, typeof( Broadsword ), 1023934 ) ); // broadsword
Rewards.Add( ItemReward.BlacksmithSatchel );
}
@ -1474,7 +1474,7 @@ namespace Server.Engines.MLQuests.Definitions
InProgressMessage = 1073957; // I will be in your debt if you bring me bascinets.
CompletionMessage = 1073978; // Enjoy my thanks for your service.
Objectives.Add( new CollectObjective( 15, typeof( Bascinet ), 1015040 ) ); // bascinet
Objectives.Add( new CollectObjective( 15, typeof( Bascinet ), 1025132 ) ); // bascinet
Rewards.Add( ItemReward.BlacksmithSatchel );
}
@ -1821,6 +1821,7 @@ namespace Server.Engines.MLQuests.Definitions
#region Mobiles
[QuesterName( "Saril (The Heartwood)" )]
public class Saril : BaseCreature
{
public override bool IsInvulnerable { get { return true; } }
@ -1881,6 +1882,7 @@ namespace Server.Engines.MLQuests.Definitions
}
}
[QuesterName( "Cailla (The Heartwood)" )]
public class Cailla : BaseCreature
{
public override bool IsInvulnerable { get { return true; } }
@ -1942,6 +1944,7 @@ namespace Server.Engines.MLQuests.Definitions
}
}
[QuesterName( "Tamm (The Heartwood)" )]
public class Tamm : BaseCreature
{
public override bool IsInvulnerable { get { return true; } }
@ -2001,6 +2004,7 @@ namespace Server.Engines.MLQuests.Definitions
}
}
[QuesterName( "Landy (The Heartwood)" )]
public class Landy : BaseCreature
{
public override bool IsInvulnerable { get { return true; } }
@ -2061,6 +2065,7 @@ namespace Server.Engines.MLQuests.Definitions
}
}
[QuesterName( "Elder Alejaha (The Heartwood)" )]
public class Alejaha : BaseCreature
{
public override bool IsInvulnerable { get { return true; } }
@ -2120,6 +2125,7 @@ namespace Server.Engines.MLQuests.Definitions
}
}
[QuesterName( "Mielan (The Heartwood)" )]
public class Mielan : BaseCreature
{
public override bool IsInvulnerable { get { return true; } }
@ -2177,6 +2183,7 @@ namespace Server.Engines.MLQuests.Definitions
}
}
[QuesterName( "Ciala (The Heartwood)" )]
public class Ciala : BaseCreature
{
public override bool IsInvulnerable { get { return true; } }
@ -2238,6 +2245,7 @@ namespace Server.Engines.MLQuests.Definitions
}
}
[QuesterName( "Aniel (The Heartwood)" )]
public class Aniel : BaseCreature
{
public override bool IsInvulnerable { get { return true; } }
@ -2295,6 +2303,7 @@ namespace Server.Engines.MLQuests.Definitions
}
}
[QuesterName( "Aulan (The Heartwood)" )]
public class Aulan : BaseCreature
{
public override bool IsInvulnerable { get { return true; } }
@ -2366,6 +2375,7 @@ namespace Server.Engines.MLQuests.Definitions
}
}
[QuesterName( "Brinnae (The Heartwood)" )]
public class Brinnae : BaseCreature
{
public override bool IsInvulnerable { get { return true; } }
@ -2420,6 +2430,7 @@ namespace Server.Engines.MLQuests.Definitions
}
}
[QuesterName( "Elder Caelas (The Heartwood)" )]
public class Caelas : BaseCreature
{
public override bool IsInvulnerable { get { return true; } }
@ -2477,6 +2488,7 @@ namespace Server.Engines.MLQuests.Definitions
}
}
[QuesterName( "Clehin (The Heartwood)" )]
public class Clehin : BaseCreature
{
public override bool IsInvulnerable { get { return true; } }
@ -2603,6 +2615,7 @@ namespace Server.Engines.MLQuests.Definitions
}
}
[QuesterName( "Salaenih (The Heartwood)" )]
public class Salaenih : BaseCreature
{
public override bool IsInvulnerable { get { return true; } }
@ -2680,6 +2693,7 @@ namespace Server.Engines.MLQuests.Definitions
}
}
[QuesterName( "Vilo (The Heartwood)" )]
public class Vilo : BaseCreature
{
public override bool IsInvulnerable { get { return true; } }
@ -2741,6 +2755,7 @@ namespace Server.Engines.MLQuests.Definitions
}
}
[QuesterName( "Tholef (The Heartwood)" )]
public class Tholef : BaseCreature
{
public override bool IsInvulnerable { get { return true; } }
@ -2804,6 +2819,7 @@ namespace Server.Engines.MLQuests.Definitions
}
}
[QuesterName( "Tillanil (The Heartwood)" )]
public class Tillanil : BaseCreature
{
public override bool IsInvulnerable { get { return true; } }
@ -2860,6 +2876,7 @@ namespace Server.Engines.MLQuests.Definitions
}
}
[QuesterName( "Waelian (The Heartwood)" )]
public class Waelian : BaseCreature
{
public override bool IsInvulnerable { get { return true; } }
@ -2923,6 +2940,7 @@ namespace Server.Engines.MLQuests.Definitions
}
}
[QuesterName( "Sleen (The Heartwood)" )]
public class Sleen : BaseCreature
{
public override bool IsInvulnerable { get { return true; } }
@ -2980,6 +2998,7 @@ namespace Server.Engines.MLQuests.Definitions
}
}
[QuesterName( "Unoelil (The Heartwood)" )]
public class Unoelil : BaseCreature
{
public override bool IsInvulnerable { get { return true; } }
@ -3036,6 +3055,7 @@ namespace Server.Engines.MLQuests.Definitions
}
}
[QuesterName( "Anolly (The Heartwood)" )]
public class Anolly : BaseCreature
{
public override bool IsInvulnerable { get { return true; } }
@ -3084,6 +3104,7 @@ namespace Server.Engines.MLQuests.Definitions
}
}
[QuesterName( "Jusae (The Heartwood)" )]
public class Jusae : BaseCreature
{
public override bool IsInvulnerable { get { return true; } }
@ -3150,6 +3171,7 @@ namespace Server.Engines.MLQuests.Definitions
}
}
[QuesterName( "Cillitha (The Heartwood)" )]
public class Cillitha : BaseCreature
{
public override bool IsInvulnerable { get { return true; } }
@ -3206,6 +3228,7 @@ namespace Server.Engines.MLQuests.Definitions
}
}
[QuesterName( "Lohn (The Heartwood)" )]
public class Lohn : BaseCreature
{
public override bool IsInvulnerable { get { return true; } }
@ -3269,6 +3292,7 @@ namespace Server.Engines.MLQuests.Definitions
}
}
[QuesterName( "Olla (The Heartwood)" )]
public class Olla : BaseCreature
{
public override bool IsInvulnerable { get { return true; } }
@ -3328,6 +3352,7 @@ namespace Server.Engines.MLQuests.Definitions
}
}
[QuesterName( "Thallary (The Heartwood)" )]
public class Thallary : BaseCreature
{
public override bool IsInvulnerable { get { return true; } }
@ -3386,6 +3411,7 @@ namespace Server.Engines.MLQuests.Definitions
}
}
[QuesterName( "Ahie (The Heartwood)" )]
public class Ahie : BaseCreature
{
public override bool IsInvulnerable { get { return true; } }
@ -4195,6 +4221,7 @@ namespace Server.Engines.MLQuests.Definitions
}
}
[QuesterName( "Nillaen (The Heartwood)" )]
public class LorekeeperNillaen : BaseCreature
{
public override bool IsInvulnerable { get { return true; } }
@ -4245,6 +4272,7 @@ namespace Server.Engines.MLQuests.Definitions
}
}
[QuesterName( "Ryal (The Heartwood)" )]
public class LorekeeperRyal : BaseCreature
{
public override bool IsInvulnerable { get { return true; } }
@ -4303,6 +4331,7 @@ namespace Server.Engines.MLQuests.Definitions
}
}
[QuesterName( "Braen (The Heartwood)" )]
public class Braen : BaseCreature
{
public override bool IsInvulnerable { get { return true; } }
@ -4356,6 +4385,7 @@ namespace Server.Engines.MLQuests.Definitions
}
}
[QuesterName( "Elder Acob (The Heartwood)" )]
public class ElderAcob : BaseCreature
{
public override bool IsInvulnerable { get { return true; } }

View file

@ -243,6 +243,7 @@ namespace Server.Engines.MLQuests.Definitions
#region Human To Elf Mobiles
[QuesterName( "Maul" )]
public class MaulTheBear : GrizzlyBear
{
public override bool IsInvulnerable { get { return true; } }
@ -569,7 +570,7 @@ namespace Server.Engines.MLQuests.Definitions
CompletionMessage = 1074523; // Hey, if you have cargo for me, you can start unloading over here.
CompletionNotice = CompletionNoticeShort;
Objectives.Add( new TimedDeliverObjective( TimeSpan.FromHours( 1 ), typeof( CrateForSledge ), 5, "Crates for Sledge", typeof( Sledge ), "Sledge (Buc's Den)" ) );
Objectives.Add( new TimedDeliverObjective( TimeSpan.FromHours( 1 ), typeof( CrateForSledge ), 5, "Crates for Sledge", typeof( Sledge ) ) );
Rewards.Add( new DummyReward( 1074875 ) ); // Another step closer to becoming human.
}
@ -647,6 +648,7 @@ namespace Server.Engines.MLQuests.Definitions
#region Elf To Human Mobiles
[QuesterName( "Sledge (Buc's Den)" )]
public class Sledge : BaseCreature
{
public override bool IsInvulnerable { get { return true; } }
@ -697,6 +699,7 @@ namespace Server.Engines.MLQuests.Definitions
}
}
[QuesterName( "Patricus (Vesper)" )]
public class Patricus : BaseCreature
{
public override bool IsInvulnerable { get { return true; } }
@ -738,6 +741,7 @@ namespace Server.Engines.MLQuests.Definitions
}
}
[QuesterName( "Belulah (Nujel'm)" )] // On OSI it's "Belulah (Nu'Jelm)" (incorrect spelling)
public class Belulah : BaseCreature
{
public override bool IsInvulnerable { get { return true; } }

View file

@ -26,7 +26,7 @@ namespace Server.Engines.MLQuests.Definitions
CompletionMessage = 1075397; // Didst thou find my ring? I thank thee very much! It is an old ring, and a gift from my husband. I was most distraught when I realized it was missing.
CompletionNotice = CompletionNoticeShort;
Objectives.Add( new DeliverObjective( typeof( ReginasRing ), 1, "Regina's Ring", typeof( Regina ), "Regina" ) );
Objectives.Add( new DeliverObjective( typeof( ReginasRing ), 1, "Regina's Ring", typeof( Regina ) ) );
Rewards.Add( new DummyReward( 1075394 ) ); // Find the rings owner.
}
@ -55,7 +55,7 @@ namespace Server.Engines.MLQuests.Definitions
CompletionMessage = 1075403; // What? For me? Let me see . . . these sapphire earrings are for you, it says. Oh, she wants to offer me a job! This is the most wonderful thing that ever happened to me!
CompletionNotice = CompletionNoticeShort;
Objectives.Add( new DeliverObjective( typeof( ReginasLetter ), 1, "Regina's Letter", typeof( Evan ), "Evan" ) );
Objectives.Add( new DeliverObjective( typeof( ReginasLetter ), 1, "Regina's Letter", typeof( Evan ) ) );
Rewards.Add( new ItemReward( 1075400, typeof( TransparentHeart ) ) ); // Transparent Heart
}

View file

@ -232,6 +232,7 @@ namespace Server.Engines.MLQuests.Definitions
}
}
[QuesterName( "Jelrice (Ilshenar)" )]
public class Jelrice : BaseCreature
{
public override bool IsInvulnerable { get { return true; } }
@ -281,6 +282,7 @@ namespace Server.Engines.MLQuests.Definitions
}
}
[QuesterName( "Yorus (Ilshenar)" )]
public class Yorus : BaseCreature
{
public override bool IsInvulnerable { get { return true; } }

View file

@ -0,0 +1,70 @@
using System;
using Server;
using Server.Engines.MLQuests;
using Server.Engines.MLQuests.Items;
using Server.Engines.MLQuests.Objectives;
using Server.Engines.MLQuests.Rewards;
namespace Server.Engines.MLQuests.Definitions
{
// TODO: Assassination Contract, Evidence, Lost in Transit, Last Words
#region Quests
public class LostAndFound : MLQuest
{
public LostAndFound()
{
Activated = true;
Title = 1072370; // Lost and Found
Description = 1072589; // The battered, old bucket is inscribed with barely legible writing that indicates it belongs to someone named "Dallid". Maybe they'd pay for its return?
RefusalMessage = 1072590; // You're right, who cares if Dallid might pay for his battered old bucket back. This way you can carry it around with you!
InProgressMessage = 1072591; // Whoever this "Dallid" might be, he's probably looking for his bucket.
CompletionMessage = 1074580; // Is that my bucket? I had to ditch my favorite bucket when a group of ratmen jumped me!
Objectives.Add( new TimedDeliverObjective( TimeSpan.FromSeconds( 600 ), typeof( BatteredBucket ), 1, "battered bucket", typeof( Dallid ), false ) );
Rewards.Add( ItemReward.BagOfTrinkets );
}
}
#endregion
#region Items
public class BatteredBucket : TransientQuestGiverItem
{
// Original label, doesn't fit the expiration message well
//public override int LabelNumber { get { return 1073129; } } // A battered bucket.
public override string DefaultName { get { return "battered bucket"; } }
[Constructable]
public BatteredBucket()
: base( 0x2004, TimeSpan.FromMinutes( 10 ) )
{
LootType = LootType.Blessed;
}
public BatteredBucket( 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();
}
}
#endregion
}

View file

@ -23,7 +23,7 @@ namespace Server.Engines.MLQuests.Definitions
InProgressMessage = 1074643; // I can't pay a bounty if you don't bring bag the ears.
CompletionMessage = 1074644; // Here to collect on a bounty?
Objectives.Add( new CollectObjective( 20, typeof( SeveredElfEars ), "severed elf ears" ) );
Objectives.Add( new CollectObjective( 20, typeof( SeveredElfEars ), 1032590 ) ); // severed elf ears
Rewards.Add( ItemReward.BagOfTrinkets );
}
@ -40,6 +40,7 @@ namespace Server.Engines.MLQuests.Definitions
#region Mobiles
[QuesterName( "Drithen (Umbra)" )]
public class Drithen : BaseCreature
{
public override bool IsInvulnerable { get { return true; } }

View file

@ -27,7 +27,7 @@ namespace Server.Engines.MLQuests.Definitions
CompletionMessage = 1074607; // Oh blast! Not another of those forms. I'm so sick of this endless paperwork.
CompletionNotice = CompletionNoticeShort;
Objectives.Add( new DeliverObjective( typeof( TuitionReimbursementForm ), 1, "Tuition Reimbursement Form", typeof( Gorrow ), "Gorrow (Luna)" ) );
Objectives.Add( new DeliverObjective( typeof( TuitionReimbursementForm ), 1, "Tuition Reimbursement Form", typeof( Gorrow ) ) );
Rewards.Add( new DummyReward( 1074634 ) ); // Tuition Reimbursement
}
@ -85,7 +85,7 @@ namespace Server.Engines.MLQuests.Definitions
CompletionMessage = 1074622; // What? Hrmph. Gorrow signed your form did he? Let me see that. *squint*
CompletionNotice = CompletionNoticeShort;
Objectives.Add( new DeliverObjective( typeof( SignedTuitionReimbursementForm ), 1, "Signed Tuition Reimbursement Form", typeof( Aernya ), "Aernya (Umbra)" ) );
Objectives.Add( new DeliverObjective( typeof( SignedTuitionReimbursementForm ), 1, "Signed Tuition Reimbursement Form", typeof( Aernya ) ) );
Rewards.Add( new DummyReward( 1074634 ) ); // Tuition Reimbursement
}
@ -106,7 +106,7 @@ namespace Server.Engines.MLQuests.Definitions
CompletionMessage = 1074628; // Made it through did you? Did you happen to see Red Death out there? Big horse, skeletal ... burning eyes? No? What's this? Forms? FORMS? I'm up to my eyebrows in ravenous out-of-control undead and you want a signature?
CompletionNotice = CompletionNoticeShort;
Objectives.Add( new DeliverObjective( typeof( SignedTuitionReimbursementForm ), 1, "Signed Tuition Reimbursement Form", typeof( MasterGnosos ), "Master Gnosos (Bedlam)" ) );
Objectives.Add( new DeliverObjective( typeof( SignedTuitionReimbursementForm ), 1, "Signed Tuition Reimbursement Form", typeof( MasterGnosos ) ) );
Rewards.Add( new DummyReward( 1074634 ) ); // Tuition Reimbursement
}
@ -170,7 +170,7 @@ namespace Server.Engines.MLQuests.Definitions
CompletionMessage = 1074638; // *disinterested stare* What? Oh, you've gotten your form filled in. How nice. *glare* And I'd hoped you'd drop this charade before I was forced to rub your nose in it. *nasty smile* You're not even a student and as such, you're not eligible for a refund -- you've never paid tuition. For your services, Master Gnosos has recommended you receive pay. So here. Now go away.
CompletionNotice = CompletionNoticeShort;
Objectives.Add( new DeliverObjective( typeof( CompletedTuitionReimbursementForm ), 1, "Completed Tuition Reimbursement Form", typeof( Aernya ), "Aernya (Umbra)" ) );
Objectives.Add( new DeliverObjective( typeof( CompletedTuitionReimbursementForm ), 1, "Completed Tuition Reimbursement Form", typeof( Aernya ) ) );
Rewards.Add( ItemReward.Strongbox );
}
@ -180,6 +180,7 @@ namespace Server.Engines.MLQuests.Definitions
#region Mobiles
[QuesterName( "Aernya (Umbra)" )]
public class Aernya : BaseCreature
{
public override bool IsInvulnerable { get { return true; } }
@ -225,6 +226,7 @@ namespace Server.Engines.MLQuests.Definitions
}
}
[QuesterName( "Gorrow (Luna)" )]
public class Gorrow : BaseCreature
{
public override bool IsInvulnerable { get { return true; } }
@ -277,6 +279,7 @@ namespace Server.Engines.MLQuests.Definitions
}
}
[QuesterName( "Master Gnosos (Bedlam)" )]
public class MasterGnosos : BaseCreature
{
public override bool IsInvulnerable { get { return true; } }

View file

@ -123,7 +123,7 @@ namespace Server.Engines.MLQuests.Definitions
InProgressMessage = 1075515; // Come On! Whats that... a bucket? We need ten bucklers... not spitoons.
CompletionMessage = 1075516; // Thanks for the help. Here's something for ya to remember me by.
Objectives.Add( new CollectObjective( 10, typeof( Buckler ), 1015044 ) ); // buckler
Objectives.Add( new CollectObjective( 10, typeof( Buckler ), 1027027 ) ); // buckler
Rewards.Add( new ItemReward( 1074282, typeof( GervisSatchel ) ) ); // Craftsmans's Satchel
}
@ -148,7 +148,7 @@ namespace Server.Engines.MLQuests.Definitions
InProgressMessage = 1075532; // Hmmm… we need some more Ore. Try finding a mountain or cave, and give it a whack.
CompletionMessage = 1075533; // I see you found a good vien! Great! This will help get this order out on time. Good work!
Objectives.Add( new CollectObjective( 5, typeof( IronOre ), 1042853 ) ); // iron ore
Objectives.Add( new InternalObjective() );
Rewards.Add( new ItemReward( 1074282, typeof( MuggSatchel ) ) ); // Craftsmans's Satchel
}
@ -159,6 +159,20 @@ namespace Server.Engines.MLQuests.Definitions
PutSpawner( new Spawner( 1, 5, 10, 0, 0, "Mugg" ), new Point3D( 3507, 2747, 0 ), Map.Trammel );
}
private class InternalObjective : CollectObjective
{
// Any type of ore is allowed
public InternalObjective()
: base( 5, typeof( BaseOre ), 1026585 ) // ore
{
}
public override bool CheckItem( Item item )
{
return ( item.ItemID == 6585 ); // Only large pieces count
}
}
}
public class ComfortableSeating : MLQuest
@ -173,7 +187,7 @@ namespace Server.Engines.MLQuests.Definitions
InProgressMessage = 1075509; // Is all going well? I look forward to the simple comforts in my very own home.
CompletionMessage = 1074720; // This is perfect!
Objectives.Add( new CollectObjective( 1, typeof( BambooChair ), 1044300 ) ); // straw chair
Objectives.Add( new CollectObjective( 1, typeof( BambooChair ), "straw chair" ) );
Rewards.Add( new ItemReward( 1074282, typeof( LowelSatchel ) ) ); // Craftsmans's Satchel
}
@ -223,7 +237,7 @@ namespace Server.Engines.MLQuests.Definitions
InProgressMessage = 1072271; // You're not quite done yet. Get back to work!
CompletionMessage = 1075536; // Wonderful! Tick tock, tick tock, soon all shall be well with grandfather's clock!
Objectives.Add( new CollectObjective( 5, typeof( ClockParts ), 1011205 ) ); // clock parts
Objectives.Add( new CollectObjective( 5, typeof( ClockParts ), 1024175 ) ); // clock parts
Rewards.Add( new ItemReward( 1074282, typeof( NibbetSatchel ) ) ); // Craftsmans's Satchel
}
@ -273,7 +287,7 @@ namespace Server.Engines.MLQuests.Definitions
InProgressMessage = 1075490; // Just remember you need to use your mortar and pestle while you have empty bottles and some black pearl. Refresh potions are what I need.
CompletionMessage = 1075491; // *glug* *glug* Ahh... Yes! Yes! That feels great! Those lizardmen will never know what hit 'em! Here, take this, I can get more from the lizards.
Objectives.Add( new CollectObjective( 10, typeof( RefreshPotion ), 1048029 ) ); // refresh potion
Objectives.Add( new CollectObjective( 10, typeof( RefreshPotion ), "refresh potions" ) );
Rewards.Add( new ItemReward( 1074282, typeof( SadrahSatchel ) ) ); // Craftsmans's Satchel
}
@ -506,6 +520,7 @@ namespace Server.Engines.MLQuests.Definitions
}
}
//[QuesterName( "Clarisse" )] // On OSI the gumps refer to her as this, different from actual name
public class Clairesse : BaseCreature
{
public override bool IsInvulnerable { get { return true; } }

View file

@ -140,7 +140,7 @@ namespace Server.Engines.MLQuests.Definitions
InProgressMessage = 1074064; // Hurry up! I don't have all day to wait for you to bring what I desire!
CompletionMessage = 1074065; // These human made goods are laughable! It offends so -- I must show you what elven skill is capable of!
Objectives.Add( new CollectObjective( 12, typeof( Broadsword ), 1015055 ) ); // broadsword
Objectives.Add( new CollectObjective( 12, typeof( Broadsword ), 1023934 ) ); // broadsword
Rewards.Add( ItemReward.BlacksmithSatchel );
}
@ -230,7 +230,7 @@ namespace Server.Engines.MLQuests.Definitions
InProgressMessage = 1074064; // Hurry up! I don't have all day to wait for you to bring what I desire!
CompletionMessage = 1074065; // These human made goods are laughable! It offends so -- I must show you what elven skill is capable of!
Objectives.Add( new CollectObjective( 10, typeof( TinkerTools ), 1011218 ) ); // tinker's tools
Objectives.Add( new CollectObjective( 10, typeof( TinkerTools ), 1027868 ) ); // tinker's tools
Rewards.Add( ItemReward.TinkerSatchel );
}
@ -264,7 +264,7 @@ namespace Server.Engines.MLQuests.Definitions
InProgressMessage = 1074064; // Hurry up! I don't have all day to wait for you to bring what I desire!
CompletionMessage = 1074065; // These human made goods are laughable! It offends so -- I must show you what elven skill is capable of!
Objectives.Add( new CollectObjective( 10, typeof( Kilt ), 1015281 ) ); // kilt
Objectives.Add( new CollectObjective( 10, typeof( Kilt ), 1025431 ) ); // kilt
Rewards.Add( ItemReward.TailorSatchel );
}
@ -282,7 +282,7 @@ namespace Server.Engines.MLQuests.Definitions
InProgressMessage = 1074064; // Hurry up! I don't have all day to wait for you to bring what I desire!
CompletionMessage = 1074065; // These human made goods are laughable! It offends so -- I must show you what elven skill is capable of!
Objectives.Add( new CollectObjective( 10, typeof( FancyShirt ), 1015272 ) ); // fancy shirt
Objectives.Add( new CollectObjective( 10, typeof( FancyShirt ), 1027933 ) ); // fancy shirt
Rewards.Add( ItemReward.TailorSatchel );
}
@ -300,7 +300,7 @@ namespace Server.Engines.MLQuests.Definitions
InProgressMessage = 1074064; // Hurry up! I don't have all day to wait for you to bring what I desire!
CompletionMessage = 1074065; // These human made goods are laughable! It offends so -- I must show you what elven skill is capable of!
Objectives.Add( new CollectObjective( 10, typeof( FemaleStuddedChest ), 1015310 ) ); // studded bustier
Objectives.Add( new CollectObjective( 10, typeof( FemaleStuddedChest ), 1027180 ) ); // studded bustier
Rewards.Add( ItemReward.TailorSatchel );
}
@ -623,7 +623,7 @@ namespace Server.Engines.MLQuests.Definitions
CompletionMessage = 1074579; // Yes, can I help you?
CompletionNotice = CompletionNoticeShort;
Objectives.Add( new DeliverObjective( typeof( APersonalLetterAddressedToAhie ), 1, "letter", typeof( Ahie ), "Ahie (The Heartwood)" ) );
Objectives.Add( new DeliverObjective( typeof( APersonalLetterAddressedToAhie ), 1, "letter", typeof( Ahie ) ) );
Rewards.Add( ItemReward.BagOfTrinkets );
}
@ -639,7 +639,7 @@ namespace Server.Engines.MLQuests.Definitions
RefusalMessage = 1073580; // I hope you'll reconsider. Until then, farwell.
InProgressMessage = 1073592; // The Brigands still plague us. Have you killed 20 of their number?<br>
Objectives.Add( new KillObjective( 20, new Type[] { typeof( Brigand ) }, "common brigands" ) );
Objectives.Add( new KillObjective( 20, new Type[] { typeof( Brigand ) }, 1074894 ) ); // Common brigands
Rewards.Add( ItemReward.BagOfTreasure );
}
@ -649,6 +649,7 @@ namespace Server.Engines.MLQuests.Definitions
#region Mobiles
[QuesterName( "Beotham (Sanctuary)" )]
public class Beotham : BaseCreature
{
public override bool IsInvulnerable { get { return true; } }
@ -711,6 +712,7 @@ namespace Server.Engines.MLQuests.Definitions
}
}
[QuesterName( "Danoel (Sanctuary)" )]
public class Danoel : BaseCreature
{
// TODO: Add quests: Spring Cleaning
@ -769,6 +771,7 @@ namespace Server.Engines.MLQuests.Definitions
}
}
[QuesterName( "Tallinin (Sanctuary)" )]
public class Tallinin : BaseCreature
{
public override bool IsInvulnerable { get { return true; } }
@ -825,6 +828,7 @@ namespace Server.Engines.MLQuests.Definitions
}
}
[QuesterName( "Tiana (Sanctuary)" )]
public class Tiana : BaseCreature
{
public override bool IsInvulnerable { get { return true; } }
@ -892,6 +896,7 @@ namespace Server.Engines.MLQuests.Definitions
}
}
[QuesterName( "Oolua (Sanctuary)" )]
public class LorekeeperOolua : BaseCreature
{
// TODO: Add quest Dreadhorn
@ -949,6 +954,7 @@ namespace Server.Engines.MLQuests.Definitions
}
}
[QuesterName( "Rollarn (Sanctuary)" )]
public class LorekeeperRollarn : BaseCreature
{
public override bool IsInvulnerable { get { return true; } }
@ -1012,6 +1018,7 @@ namespace Server.Engines.MLQuests.Definitions
}
}
[QuesterName( "Dallid (Sanctuary)" )]
public class Dallid : BaseCreature
{
public override bool IsInvulnerable { get { return true; } }
@ -1070,6 +1077,7 @@ namespace Server.Engines.MLQuests.Definitions
}
}
[QuesterName( "Canir (Sanctuary)" )]
public class Canir : BaseCreature
{
public override bool IsInvulnerable { get { return true; } }
@ -1172,6 +1180,7 @@ namespace Server.Engines.MLQuests.Definitions
}
}
[QuesterName( "Elder Onallan (Sanctuary)" )]
public class ElderOnallan : BaseCreature
{
public override bool IsInvulnerable { get { return true; } }

View file

@ -328,7 +328,7 @@ namespace Server.Engines.MLQuests.Definitions
InProgressMessage = 1074315; // Arielle wanders quite a bit, so I'm not sure exactly where to find her. I'm sure she's going to love your gift.
CompletionMessage = 1074319; // *giggle* Oooh! For me?
Objectives.Add( new DeliverObjective( typeof( GiftForArielle ), 1, "gift for Arielle", typeof( Arielle ), "Arielle" ) );
Objectives.Add( new DeliverObjective( typeof( GiftForArielle ), 1, "gift for Arielle", typeof( Arielle ) ) );
Rewards.Add( new DummyReward( 1074874 ) ); // The opportunity to prove yourself worthy of learning to Summon Fey. (Sufficient spellweaving skill is required to cast the spell)
}
@ -445,6 +445,7 @@ namespace Server.Engines.MLQuests.Definitions
#region Mobiles
[QuesterName( "Aeluva (The Heartwood)" )]
public class Aeluva : BaseCreature
{
public override bool IsInvulnerable { get { return true; } }
@ -503,6 +504,7 @@ namespace Server.Engines.MLQuests.Definitions
}
}
[QuesterName( "Koole (Sanctuary)" )]
public class Koole : BaseCreature
{
public override bool IsInvulnerable { get { return true; } }
@ -568,6 +570,7 @@ namespace Server.Engines.MLQuests.Definitions
}
}
[QuesterName( "Synaeva (The Heartwood)" )]
public class Synaeva : BaseCreature
{
public override bool IsInvulnerable { get { return true; } }
@ -627,6 +630,7 @@ namespace Server.Engines.MLQuests.Definitions
}
}
[QuesterName( "Elder Brae (Sanctuary)" )]
public class ElderBrae : BaseCreature
{
public override bool IsInvulnerable { get { return true; } }

View file

@ -53,7 +53,7 @@ namespace Server.Engines.MLQuests.Definitions
InProgressMessage = 1074547; // Braen is nearby, run and speak with him.
CompletionMessage = 1074549; // Yes? What do you want? I'm very busy.
Objectives.Add( new DeliverObjective( typeof( FragmentOfAMapDelivery ), 1, "fragment of a map", typeof( Braen ), "Braen (The Heartwood)" ) );
Objectives.Add( new DeliverObjective( typeof( FragmentOfAMapDelivery ), 1, "fragment of a map", typeof( Braen ) ) );
Rewards.Add( new DummyReward( 1074876 ) ); // Knowledge of the legendary minotaur.
}
@ -102,6 +102,7 @@ namespace Server.Engines.MLQuests.Definitions
#region Mobiles
[QuesterName( "Broolol (The Heartwood)" )]
public class LorekeeperBroolol : BaseCreature
{
public override bool IsInvulnerable { get { return true; } }

View file

@ -55,7 +55,7 @@ namespace Server.Engines.MLQuests.Definitions
CompletionMessage = 1075372; // Im sorry, Im getting ready to be married. I dont have time to . . . whats that you say?
CompletionNotice = CompletionNoticeShort;
Objectives.Add( new DeliverObjective( typeof( PortraitOfTheBride ), 1, "Portrait of the Bride", typeof( Thalia ), "Thalia (Nujel'm)" ) ); // OSI's description is "Bride"
Objectives.Add( new DeliverObjective( typeof( PortraitOfTheBride ), 1, "Portrait of the Bride", typeof( Thalia ) ) );
Rewards.Add( new DummyReward( 1075369 ) ); // The Artists gratitude.
}
@ -76,7 +76,7 @@ namespace Server.Engines.MLQuests.Definitions
CompletionMessage = 1075378; // She said what? She thinks what of me? I . . . I cant believe it! All this time, I never knew how she truly felt. Thank you, my friend. I believe now I will be able to paint once again. Here, take this bleach. I was going to use it to destroy all of my works. Perhaps you can find a better use for it now.
CompletionNotice = CompletionNoticeShort;
Objectives.Add( new DeliverObjective( typeof( BridesLetter ), 1, "Bride's Letter", typeof( Emilio ), "Emilio (Britain)" ) ); // OSI's description is "Artist"
Objectives.Add( new DeliverObjective( typeof( BridesLetter ), 1, "Bride's Letter", typeof( Emilio ) ) );
Rewards.Add( new ItemReward( 1075375, typeof( Bleach ) ) ); // Bleach
}
@ -94,6 +94,7 @@ namespace Server.Engines.MLQuests.Definitions
#region Mobiles
[QuesterName( "Emilio (Britain)" )] // OSI's description is "Artist", not very helpful
public class Emilio : BaseCreature
{
public override bool IsInvulnerable { get { return true; } }
@ -141,6 +142,7 @@ namespace Server.Engines.MLQuests.Definitions
}
}
[QuesterName( "Thalia (Nujel'm)" )] // OSI's description is "Bride", not very helpful
public class Thalia : BaseCreature
{
public override bool IsInvulnerable { get { return true; } }

View file

@ -43,7 +43,7 @@ namespace Server.Engines.MLQuests.Definitions
InProgressMessage = 1074548; // Canir is nearby, run and speak with her.
CompletionMessage = 1074549; // Yes? What do you want? I'm very busy.
Objectives.Add( new DeliverObjective( typeof( FragmentOfAMapDelivery ), 1, "fragment of a map", typeof( Canir ), "Canir (Sanctuary)" ) );
Objectives.Add( new DeliverObjective( typeof( FragmentOfAMapDelivery ), 1, "fragment of a map", typeof( Canir ) ) );
Rewards.Add( new DummyReward( 1074876 ) ); // Knowledge of the legendary minotaur.
}