ML quest system; first SVN release.
Secondary changes: - Region fixes, mainly for New Haven. - Recipe system changes. - Enabled ML craftables. - Dyeing/cutting restrictions for quest items. - Moved IsInvulnerable from BaseVendor to BaseCreature. - Moved RandomBrightHue to Utility. - Items no longer decay when attached to a spawner. - Quest item hue is now faked through packets, instead of overriding Hue. - Re-enabled item drag effects for SA clients. - Fixed AssignRandomFacialHair bug in Utility. - Added random hue comments to Utility.
This commit is contained in:
parent
5c7af18dfb
commit
35fbffdb51
167 changed files with 23218 additions and 234 deletions
295
Scripts/Engines/MLQuests/Definitions/AGhostOfCovetous.cs
Normal file
295
Scripts/Engines/MLQuests/Definitions/AGhostOfCovetous.cs
Normal file
|
|
@ -0,0 +1,295 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Server;
|
||||
using Server.ContextMenus;
|
||||
using Server.Engines.MLQuests.Objectives;
|
||||
using Server.Engines.MLQuests.Rewards;
|
||||
using Server.Items;
|
||||
using Server.Misc;
|
||||
using Server.Mobiles;
|
||||
|
||||
namespace Server.Engines.MLQuests.Definitions
|
||||
{
|
||||
#region Quests
|
||||
|
||||
public class AGhostOfCovetous : MLQuest
|
||||
{
|
||||
public override Type NextQuest { get { return typeof( SaveHisDad ); } }
|
||||
|
||||
public AGhostOfCovetous()
|
||||
{
|
||||
Activated = true;
|
||||
OneTimeOnly = true;
|
||||
Title = 1075287; // A Ghost of Covetous
|
||||
Description = 1075286; // What? Oh, you startled me! Sorry, I'm a little jumpy. My master Griswolt learned that a ghost has recently taken up residence in the Covetous dungeon. He sent me to capture it, but I . . . well, it terrified me, to be perfectly honest. If you think yourself courageous enough, I'll give you my Spirit Bottle, and you can try to capture it yourself. I'm certain my master would reward you richly for such service.
|
||||
RefusalMessage = 1075288; // That's okay, I'm sure someone with more courage than either of us will come along eventually.
|
||||
InProgressMessage = 1075290; // You'll find that ghost in the mountain pass above the Covetous dungeon.
|
||||
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!
|
||||
|
||||
Objectives.Add( new DeliverObjective( typeof( SpiritBottle ), 1, 1075283, typeof( Frederic ), "The Ghost of Frederic Smithson" ) ); // Spirit bottle
|
||||
|
||||
Rewards.Add( new DummyReward( 1075284 ) ); // Return the filled Spirit Bottle to Griswolt the Master Necromancer to receive a reward.
|
||||
}
|
||||
|
||||
public override void OnComplete( MLQuestInstance instance )
|
||||
{
|
||||
instance.Player.SendLocalizedMessage( 1046258, "", 0x23 ); // Your quest is complete.
|
||||
}
|
||||
|
||||
public override void Generate()
|
||||
{
|
||||
base.Generate();
|
||||
|
||||
PutSpawner( new Spawner( 1, 5, 10, 0, 3, "Ben" ), new Point3D( 2467, 402, 15 ), Map.Trammel );
|
||||
PutSpawner( new Spawner( 1, 5, 10, 0, 3, "Ben" ), new Point3D( 2467, 402, 15 ), Map.Felucca );
|
||||
}
|
||||
}
|
||||
|
||||
public class SaveHisDad : MLQuest
|
||||
{
|
||||
public override Type NextQuest { get { return typeof( AFathersGratitude ); } }
|
||||
public override bool IsChainTriggered { get { return true; } }
|
||||
|
||||
public SaveHisDad()
|
||||
{
|
||||
Activated = true;
|
||||
Title = 1075337; // Save His Dad
|
||||
Description = 1075338; // My father, Andros, is a smith in Minoc. Last week his forge overturned and he was splashed by molten steel. He was horribly burned, and we feared he would die. An alchemist in Vesper promised to make a bandage that could heal him, but he needed the silk of a dread spider. I came here to get some, but I was careless, and succumbed to their poison. Please, won’t you help my father?
|
||||
RefusalMessage = 1075340; // Oh . . . that’s your decision . . . OooOoooOOoo . . .
|
||||
InProgressMessage = 1075341; // Thank you! Deliver it to Leon the Alchemist in Vesper. The silk crumbles easily, and much time has already passed since I died. Please! Hurry!
|
||||
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?
|
||||
|
||||
Objectives.Add( new TimedDeliverObjective( TimeSpan.FromSeconds( 600 ), typeof( DreadSpiderSilk ), 1, 1075319, typeof( Leon ), "Leon" ) ); // Dread Spider Silk
|
||||
|
||||
Rewards.Add( new DummyReward( 1075339 ) ); // Hurry! You must get the silk to Leon the Alchemist quickly, or it will crumble and become useless!
|
||||
}
|
||||
|
||||
public override void OnComplete( MLQuestInstance instance )
|
||||
{
|
||||
instance.Player.SendLocalizedMessage( 1046258, "", 0x23 ); // Your quest is complete.
|
||||
}
|
||||
|
||||
public override void Generate()
|
||||
{
|
||||
base.Generate();
|
||||
|
||||
PutSpawner( new Spawner( 1, 5, 10, 0, 0, "Frederic" ), new Point3D( 2415, 887, 0 ), Map.Trammel );
|
||||
PutSpawner( new Spawner( 1, 5, 10, 0, 0, "Frederic" ), new Point3D( 2415, 887, 0 ), Map.Felucca );
|
||||
}
|
||||
}
|
||||
|
||||
public class AFathersGratitude : MLQuest
|
||||
{
|
||||
public override bool IsChainTriggered { get { return true; } }
|
||||
|
||||
public AFathersGratitude()
|
||||
{
|
||||
Activated = true;
|
||||
Title = 1075343; // A Father’s Gratitude
|
||||
Description = 1075344; // That is simply terrible. First Andros, and now his son. Well, let’s make sure Frederic’s sacrifice wasn’t in vain. Will you take the bandages to his father? You can probably deliver them faster than I can, can’t you?
|
||||
RefusalMessage = 1075346; // Well I’m sorry to hear you say that. Without your help, I don’t know if I can get these to Andros quickly enough to help him.
|
||||
InProgressMessage = 1075347; // I don’t know how much longer Andros will survive. You’d better get this to him as quick as you can. Every second counts!
|
||||
CompletionMessage = 1075348; // Sorry, I’m not accepting commissions at the moment. What? You have the bandage I need from Leon? Thank you so much! But why didn’t 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.
|
||||
|
||||
Objectives.Add( new DeliverObjective( typeof( AlchemistsBandage ), 1, 1075452, typeof( Andros ), "Andros" ) ); // Alchemist's Bandage
|
||||
|
||||
Rewards.Add( new ItemReward( 1075345, typeof( AndrosGratitude ) ) ); // Andros’ Gratitude
|
||||
}
|
||||
|
||||
public override void OnComplete( MLQuestInstance instance )
|
||||
{
|
||||
instance.Player.SendLocalizedMessage( 1046258, "", 0x23 ); // Your quest is complete.
|
||||
}
|
||||
|
||||
public override void Generate()
|
||||
{
|
||||
base.Generate();
|
||||
|
||||
PutSpawner( new Spawner( 1, 5, 10, 0, 3, "Leon" ), new Point3D( 2918, 851, 0 ), Map.Trammel );
|
||||
PutSpawner( new Spawner( 1, 5, 10, 0, 3, "Leon" ), new Point3D( 2918, 851, 0 ), Map.Felucca );
|
||||
PutSpawner( new Spawner( 1, 5, 10, 0, 3, "Andros" ), new Point3D( 2531, 581, 0 ), Map.Trammel );
|
||||
PutSpawner( new Spawner( 1, 5, 10, 0, 3, "Andros" ), new Point3D( 2531, 581, 0 ), Map.Felucca );
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Mobiles
|
||||
|
||||
public class Ben : BaseCreature
|
||||
{
|
||||
public override bool IsInvulnerable { get { return true; } }
|
||||
|
||||
[Constructable]
|
||||
public Ben()
|
||||
: base( AIType.AI_Vendor, FightMode.None, 2, 1, 0.5, 2 )
|
||||
{
|
||||
Name = "Ben";
|
||||
Title = "the Apprentice Necromancer";
|
||||
BodyValue = 0x190;
|
||||
Hue = 0x83FD;
|
||||
HairItemID = 0x2048;
|
||||
HairHue = 0x463;
|
||||
FacialHairItemID = 0x204C;
|
||||
FacialHairHue = 0x463;
|
||||
|
||||
InitStats( 100, 100, 25 );
|
||||
|
||||
AddItem( new Backpack() );
|
||||
AddItem( new Shoes( 0x901 ) );
|
||||
AddItem( new LongPants( 0x1BB ) );
|
||||
AddItem( new FancyShirt( 0x756 ) );
|
||||
|
||||
}
|
||||
|
||||
public Ben( 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();
|
||||
}
|
||||
}
|
||||
|
||||
public class Frederic : BaseCreature
|
||||
{
|
||||
public override bool IsInvulnerable { get { return true; } }
|
||||
|
||||
[Constructable]
|
||||
public Frederic()
|
||||
: base( AIType.AI_Vendor, FightMode.None, 2, 1, 0.5, 2 )
|
||||
{
|
||||
Name = "The Ghost of Frederic Smithson";
|
||||
BodyValue = 0x1A;
|
||||
Hue = 0x455;
|
||||
Frozen = true;
|
||||
|
||||
InitStats( 100, 100, 25 );
|
||||
|
||||
}
|
||||
|
||||
public Frederic( 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();
|
||||
}
|
||||
}
|
||||
|
||||
public class Leon : BaseCreature
|
||||
{
|
||||
public override bool IsInvulnerable { get { return true; } }
|
||||
|
||||
[Constructable]
|
||||
public Leon()
|
||||
: base( AIType.AI_Vendor, FightMode.None, 2, 1, 0.5, 2 )
|
||||
{
|
||||
Name = "Leon";
|
||||
Title = "the Alchemist";
|
||||
Race = Race.Human;
|
||||
BodyValue = 0x190;
|
||||
Female = false;
|
||||
Hue = Race.RandomSkinHue();
|
||||
InitStats( 100, 100, 25 );
|
||||
|
||||
Utility.AssignRandomHair( this, true );
|
||||
|
||||
AddItem( new Backpack() );
|
||||
AddItem( new Shoes( 0x901 ) );
|
||||
AddItem( new Robe( 0x657 ) );
|
||||
|
||||
}
|
||||
|
||||
public Leon( 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();
|
||||
}
|
||||
}
|
||||
|
||||
public class Andros : BaseCreature
|
||||
{
|
||||
public override bool IsInvulnerable { get { return true; } }
|
||||
|
||||
[Constructable]
|
||||
public Andros()
|
||||
: base( AIType.AI_Vendor, FightMode.None, 2, 1, 0.5, 2 )
|
||||
{
|
||||
Name = "Andros";
|
||||
Title = "the Blacksmith";
|
||||
BodyValue = 0x190;
|
||||
Hue = 0x8409;
|
||||
FacialHairItemID = 0x2041;
|
||||
FacialHairHue = 0x45E;
|
||||
HairItemID = 0x2049;
|
||||
HairHue = 0x45E;
|
||||
|
||||
InitStats( 100, 100, 25 );
|
||||
|
||||
AddItem( new Backpack() );
|
||||
AddItem( new Boots( 0x901 ) );
|
||||
AddItem( new FancyShirt( 0x60B ) );
|
||||
AddItem( new LongPants( 0x1BB ) );
|
||||
AddItem( new FullApron( 0x901 ) );
|
||||
AddItem( new SmithHammer() );
|
||||
|
||||
}
|
||||
|
||||
public Andros( 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
|
||||
}
|
||||
28
Scripts/Engines/MLQuests/Definitions/BaseEscort.cs
Normal file
28
Scripts/Engines/MLQuests/Definitions/BaseEscort.cs
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
using System;
|
||||
using Server;
|
||||
|
||||
namespace Server.Engines.MLQuests.Definitions
|
||||
{
|
||||
// Base class for escorts providing the AwardHumanInNeed option
|
||||
public class BaseEscort : MLQuest
|
||||
{
|
||||
public virtual bool AwardHumanInNeed { get { return true; } }
|
||||
|
||||
public BaseEscort()
|
||||
{
|
||||
}
|
||||
|
||||
public override void OnComplete( MLQuestInstance instance )
|
||||
{
|
||||
instance.Player.SendLocalizedMessage( 1046258, "", 0x23 ); // Your quest is complete.
|
||||
}
|
||||
|
||||
public override void GetRewards( MLQuestInstance instance )
|
||||
{
|
||||
if ( AwardHumanInNeed )
|
||||
HumanInNeed.AwardTo( instance.Player );
|
||||
|
||||
base.GetRewards( instance );
|
||||
}
|
||||
}
|
||||
}
|
||||
273
Scripts/Engines/MLQuests/Definitions/BlightedGrove.cs
Normal file
273
Scripts/Engines/MLQuests/Definitions/BlightedGrove.cs
Normal file
|
|
@ -0,0 +1,273 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using Server.Mobiles;
|
||||
using Server.Items;
|
||||
using Server.Engines.MLQuests.Objectives;
|
||||
using Server.Engines.MLQuests.Rewards;
|
||||
|
||||
namespace Server.Engines.MLQuests.Definitions
|
||||
{
|
||||
#region Quests
|
||||
|
||||
public class VilePoison : MLQuest
|
||||
{
|
||||
public override Type NextQuest { get { return typeof( ARockAndAHardPlace ); } }
|
||||
|
||||
public VilePoison()
|
||||
{
|
||||
Activated = true;
|
||||
Title = 1074950; // Vile Poison
|
||||
Description = 1074956; // Heya! I'm sure glad to see you. Listen I'm in a bit of a bind here. I'm supposed to be gathering poisoned water at the base of that corrupted tree there, but I can't get in under the roots to get a good sample. The branches and brush are so tainted that they can't be cut, burned or even magically passed. It's put my work at a real standstill. If you help me out, I'll help you get in there too. Whadda ya say?
|
||||
RefusalMessage = 1074964; // Okay. If you change your mind, I'll probably still be stuck here trying to get in.
|
||||
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)" ) );
|
||||
|
||||
Rewards.Add( new DummyReward( 1074962 ) ); // A step closer to entering Blighted Grove.
|
||||
}
|
||||
|
||||
public override void Generate()
|
||||
{
|
||||
base.Generate();
|
||||
|
||||
PutSpawner( new Spawner( 1, 5, 10, 0, 5, "Jamal" ), new Point3D( 559, 1651, 0 ), Map.Felucca );
|
||||
PutSpawner( new Spawner( 1, 5, 10, 0, 5, "Jamal" ), new Point3D( 559, 1651, 0 ), Map.Trammel );
|
||||
|
||||
PutSpawner( new Spawner( 1, 5, 10, 0, 2, "Iosep" ), new Point3D( 1354, 3754, 0 ), Map.Felucca );
|
||||
PutSpawner( new Spawner( 1, 5, 10, 0, 2, "Iosep" ), new Point3D( 1354, 3754, 0 ), Map.Trammel );
|
||||
}
|
||||
}
|
||||
|
||||
public class ARockAndAHardPlace : MLQuest
|
||||
{
|
||||
public override Type NextQuest { get { return typeof( SympatheticMagic ); } }
|
||||
public override bool IsChainTriggered { get { return true; } }
|
||||
|
||||
public ARockAndAHardPlace()
|
||||
{
|
||||
Activated = true;
|
||||
Title = 1074951; // A Rock and a Hard Place
|
||||
Description = 1074957; // This is some nasty stuff, that's for certain. I don't even want to think about what sort of blight caused this venomous reaction from that old tree. Let's get to work … we'll need to try something really hard but still workable as our base material. Nothing's harder than stone and diamond. Let's try them first.
|
||||
RefusalMessage = 1074965; // Sure, no problem. I thought you were interested in figuring this out.
|
||||
InProgressMessage = 1074969; // If you're a miner, you should have no trouble getting that stuff. If not, you can probably buy some samples from a miner?
|
||||
CompletionMessage = 1074992; // Have you got the granite and diamonds? Great, let me see them and we'll see what effect this venom has upon them.
|
||||
|
||||
// Any type of granite works
|
||||
Objectives.Add( new CollectObjective( 4, typeof( BaseGranite ), 1026009 ) ); // rock
|
||||
Objectives.Add( new CollectObjective( 2, typeof( BlueDiamond ), 1032696 ) ); // Blue Diamond
|
||||
|
||||
Rewards.Add( new DummyReward( 1074962 ) ); // A step closer to entering Blighted Grove.
|
||||
}
|
||||
}
|
||||
|
||||
public class SympatheticMagic : MLQuest
|
||||
{
|
||||
public override Type NextQuest { get { return typeof( AlreadyDead ); } }
|
||||
public override bool IsChainTriggered { get { return true; } }
|
||||
|
||||
public SympatheticMagic()
|
||||
{
|
||||
Activated = true;
|
||||
Title = 1074952; // Sympathetic Magic
|
||||
Description = 1074958; // Hmm, I've never even heard of something that can damage diamond like that. I guess we'll have to go with plan B. Let's try something similar. Sometimes there's a natural immunity to be found when you use a substance that's like the one you're trying to cut. A sort of "sympathetic" thing. Y'know?
|
||||
RefusalMessage = 1074965; // Sure, no problem. I thought you were interested in figuring this out.
|
||||
InProgressMessage = 1074970; // I think a lumberjack can help supply bark.
|
||||
CompletionMessage = 1074993; // You're back with the bark already? Terrific! I bet this will do the trick.
|
||||
|
||||
Objectives.Add( new CollectObjective( 10, typeof( BarkFragment ), 1032687 ) ); // Bark Fragment
|
||||
|
||||
Rewards.Add( new DummyReward( 1074962 ) ); // A step closer to entering Blighted Grove.
|
||||
}
|
||||
}
|
||||
|
||||
public class AlreadyDead : MLQuest
|
||||
{
|
||||
public override Type NextQuest { get { return typeof( Eureka ); } }
|
||||
public override bool IsChainTriggered { get { return true; } }
|
||||
|
||||
public AlreadyDead()
|
||||
{
|
||||
Activated = true;
|
||||
Title = 1074953; // Already Dead
|
||||
Description = 1074959; // Amazing! The bark was reduced to ash in seconds. Whatever this taint is, it plays havok with living things. And of course, it took the edge off both diamonds and granite even faster. What we need is something workable but dead; something that can hold an edge without melting. See what you can come up with, please.
|
||||
RefusalMessage = 1074965; // Sure, no problem. I thought you were interested in figuring this out.
|
||||
InProgressMessage = 1074971; // I'm thinking we need something fairly brittle or it won't hold an edge. And, it can't be alive, of course.
|
||||
CompletionMessage = 1074994; // Great thought! Bone might just do the trick.
|
||||
|
||||
Objectives.Add( new InternalObjective() );
|
||||
|
||||
Rewards.Add( new DummyReward( 1074962 ) ); // A step closer to entering Blighted Grove.
|
||||
}
|
||||
|
||||
private class InternalObjective : CollectObjective
|
||||
{
|
||||
public override bool ShowDetailed { get { return false; } }
|
||||
|
||||
public InternalObjective()
|
||||
: base( 10, typeof( Bone ), 1074963 ) // (10) workable samples
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class Eureka : MLQuest
|
||||
{
|
||||
public override Type NextQuest { get { return typeof( SubContracting ); } }
|
||||
public override bool IsChainTriggered { get { return true; } }
|
||||
|
||||
public Eureka()
|
||||
{
|
||||
Activated = true;
|
||||
Title = 1074954; // Eureka!
|
||||
Description = 1074960; // We're in business! I've put together the instructions for chopping sort of sword, in the style of one of those new-fangled elven machetes. Take those back to Jamal for me, if you would.
|
||||
RefusalMessage = 1074966; // Well, okay. I guess I thought you'd want to see this through.
|
||||
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)" ) );
|
||||
|
||||
Rewards.Add( new DummyReward( 1074962 ) ); // A step closer to entering Blighted Grove.
|
||||
}
|
||||
|
||||
public override void GetRewards( MLQuestInstance instance )
|
||||
{
|
||||
PlayerMobile pm = instance.Player;
|
||||
|
||||
if ( !pm.HasRecipe( 32 ) )
|
||||
{
|
||||
// The ability is awarded regardless of blacksmithy skill
|
||||
pm.AcquireRecipe( 32 );
|
||||
|
||||
if ( pm.Skills[SkillName.Blacksmith].Base < 45.0 ) // TODO: Verify threshold
|
||||
pm.SendLocalizedMessage( 1075005 ); // You observe carefully but you can't grasp the complexities of smithing a bone handled machete.
|
||||
else
|
||||
pm.SendLocalizedMessage( 1075006 ); // You have learned how to smith a bone handled machete!
|
||||
}
|
||||
|
||||
base.GetRewards( instance );
|
||||
}
|
||||
}
|
||||
|
||||
public class SubContracting : MLQuest
|
||||
{
|
||||
public override bool IsChainTriggered { get { return true; } }
|
||||
|
||||
public SubContracting()
|
||||
{
|
||||
Activated = true;
|
||||
Title = 1074955; // Sub Contracting
|
||||
Description = 1074961; // Wonderful! Now we can both get in there! Let me show you these instructions for making this machete. If you're not skilled in smithing, I'm not sure how much sense it will make though. Listen, if you're heading in there anyway … maybe you'd do me one more favor? I'm ah ... buried in work out here ... so if you'd go in and get me a few water samples, I'd be obliged.
|
||||
RefusalMessage = 1074967; // Oh. Right, I guess you're really ... ah ... busy too.
|
||||
InProgressMessage = 1074973; // Once you're inside, look for places where the water has twisted and warped the natural creatures.
|
||||
CompletionMessage = 1074996; // I hear sloshing ... that must mean you've got my water samples. Whew, I'm so glad you braved the dangers in there ... I mean, I would have but I'm so busy out here. Here's your reward!
|
||||
|
||||
Objectives.Add( new CollectObjective( 3, typeof( SamplesOfCorruptedWater ), "samples of corrupted water" ) ); // On OSI the label is "#1074999"
|
||||
// TODO: "Return to" should say "Jamal (near Blighted Grove)"
|
||||
// Maybe every quest NPC has directions as a property?
|
||||
|
||||
Rewards.Add( ItemReward.LargeBagOfTreasure );
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Mobiles
|
||||
|
||||
public class Jamal : BaseCreature
|
||||
{
|
||||
public override bool IsInvulnerable { get { return true; } }
|
||||
|
||||
[Constructable]
|
||||
public Jamal()
|
||||
: base( AIType.AI_Vendor, FightMode.None, 2, 1, 0.2, 0.4 )
|
||||
{
|
||||
Name = "Jamal";
|
||||
Title = "the Fisherman";
|
||||
Body = 400;
|
||||
Hue = Race.RandomSkinHue();
|
||||
InitStats( 100, 100, 25 );
|
||||
|
||||
Utility.AssignRandomHair( this );
|
||||
Utility.AssignRandomFacialHair( this, HairHue );
|
||||
|
||||
AddItem( new Shirt( 0x1BB ) );
|
||||
AddItem( new ShortPants( Utility.RandomNeutralHue() ) );
|
||||
AddItem( new ThighBoots( Utility.RandomAnimalHue() ) );
|
||||
AddItem( new Backpack() );
|
||||
}
|
||||
|
||||
public Jamal( 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 );
|
||||
|
||||
reader.ReadInt();
|
||||
}
|
||||
}
|
||||
|
||||
public class Iosep : BaseCreature
|
||||
{
|
||||
// TODO: EmbracingHumanity
|
||||
|
||||
public override bool IsInvulnerable { get { return true; } }
|
||||
|
||||
public override bool CanShout { get { return true; } }
|
||||
public override void Shout( PlayerMobile pm )
|
||||
{
|
||||
MLQuestSystem.Tell( this, pm, Utility.RandomList(
|
||||
1074209, // Hey, could you help me out with something?
|
||||
1074215 // Don’t test my patience you sniveling worm!
|
||||
) );
|
||||
}
|
||||
|
||||
[Constructable]
|
||||
public Iosep()
|
||||
: base( AIType.AI_Vendor, FightMode.None, 2, 1, 0.2, 0.4 )
|
||||
{
|
||||
Name = "Iosep";
|
||||
Title = "the Exporter";
|
||||
Body = 400;
|
||||
Hue = Race.RandomSkinHue();
|
||||
InitStats( 100, 100, 25 );
|
||||
|
||||
AddItem( new FancyShirt( Utility.RandomBlueHue() ) );
|
||||
AddItem( new LongPants( 0x1BB ) );
|
||||
AddItem( new Shoes( Utility.RandomNeutralHue() ) );
|
||||
AddItem( new Backpack() );
|
||||
}
|
||||
|
||||
public Iosep( 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 );
|
||||
|
||||
reader.ReadInt();
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
204
Scripts/Engines/MLQuests/Definitions/Britannia.cs
Normal file
204
Scripts/Engines/MLQuests/Definitions/Britannia.cs
Normal file
|
|
@ -0,0 +1,204 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Server;
|
||||
using Server.ContextMenus;
|
||||
using Server.Engines.MLQuests.Objectives;
|
||||
using Server.Engines.MLQuests.Rewards;
|
||||
using Server.Items;
|
||||
using Server.Misc;
|
||||
using Server.Mobiles;
|
||||
|
||||
namespace Server.Engines.MLQuests.Definitions
|
||||
{
|
||||
#region Quests
|
||||
|
||||
public class Aemaeth1 : MLQuest
|
||||
{
|
||||
public override Type NextQuest { get { return typeof( Aemaeth2 ); } }
|
||||
|
||||
public Aemaeth1()
|
||||
{
|
||||
Activated = true;
|
||||
Title = 1075321; // Aemaeth
|
||||
Description = 1075322; // My father died in an accident some months ago. My mother refused to accept his death. We had a little money set by, and she took it to a necromancer, who promised to restore my father to life. Well, he revived my father, all right, the cheat! Now my father is a walking corpse, a travesty . . . a monster. My mother is beside herself -- she won't eat, she can't sleep. I prayed at the shrine of Spirituality for guidance, and I must have fallen asleep. When I awoke, there was this basin of clear water. I cannot leave my mother, for I fear what she might do to herself. Could you take this to the graveyard, and give it to what is left of my father?
|
||||
RefusalMessage = 1075324; // Oh! Alright then. I hope someone comes along soon who can help me, or I dont know what will become of us.
|
||||
InProgressMessage = 1075325; // My father - or what remains of him - can be found in the graveyard northwest of the city.
|
||||
CompletionMessage = 1075326; // What is this you give me? A basin of water?
|
||||
|
||||
Objectives.Add( new DeliverObjective( typeof( BasinOfCrystalClearWater ), 1, 1075303, typeof( SkeletonOfSzandor ), "Szandor" ) );
|
||||
|
||||
Rewards.Add( new DummyReward( 1075323 ) ); // Aurelia's gratitude.
|
||||
}
|
||||
|
||||
public override bool CanOffer( BaseCreature quester, PlayerMobile pm )
|
||||
{
|
||||
if ( !base.CanOffer( quester, pm ) )
|
||||
return false;
|
||||
|
||||
MLQuestContext context = MLQuestSystem.GetContext( pm );
|
||||
|
||||
// This quest can be repeated, but only while the next quest has not been completed.
|
||||
if ( context != null && context.HasDoneQuest( NextQuest ) )
|
||||
{
|
||||
MLQuestSystem.Tell( quester, pm, 1075454 ); // I cannot offer you the quest again.
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public override void OnComplete( MLQuestInstance instance )
|
||||
{
|
||||
instance.Player.SendLocalizedMessage( 1046258, "", 0x23 ); // Your quest is complete.
|
||||
}
|
||||
|
||||
public override void Generate()
|
||||
{
|
||||
base.Generate();
|
||||
|
||||
PutSpawner( new Spawner( 1, 5, 10, 0, 4, "Aurelia" ), new Point3D( 1459, 3795, 0 ), Map.Trammel );
|
||||
PutSpawner( new Spawner( 1, 5, 10, 0, 4, "Aurelia" ), new Point3D( 1459, 3795, 0 ), Map.Felucca );
|
||||
}
|
||||
}
|
||||
|
||||
public class Aemaeth2 : MLQuest
|
||||
{
|
||||
public override bool IsChainTriggered { get { return true; } }
|
||||
|
||||
public Aemaeth2()
|
||||
{
|
||||
Activated = true;
|
||||
OneTimeOnly = true;
|
||||
Title = 1075327; // Aemaeth
|
||||
Description = 1075328; // You tell me it is time to leave this flesh. I did not understand until now. I thought: I can see my wife and my daughter, I can speak. Is this not life? But now, as I regard my reflection, I see what I have become. This only a mockery of life. Thank you for having the courage to show me the truth. For the love I bear my wife and daughter, I know now that I must pass beyond the veil. Will you return this basin to Aurelia? She will know by this that I am at rest.
|
||||
RefusalMessage = 1075330; // You wont take this back to my daughter? Please, I cannot leave until she knows I am at peace.
|
||||
InProgressMessage = 1075331; // My daughter will be at my home, on the east side of the city.
|
||||
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.
|
||||
|
||||
Objectives.Add( new DeliverObjective( typeof( BasinOfCrystalClearWater ), 1, 1075303, typeof( Aurelia ), "Aurelia" ) );
|
||||
|
||||
Rewards.Add( new ItemReward( 1075304, typeof( MirrorOfPurification ) ) );
|
||||
}
|
||||
|
||||
public override void OnComplete( MLQuestInstance instance )
|
||||
{
|
||||
instance.Player.SendLocalizedMessage( 1046258, "", 0x23 ); // Your quest is complete.
|
||||
}
|
||||
|
||||
public override void Generate()
|
||||
{
|
||||
base.Generate();
|
||||
|
||||
PutSpawner( new Spawner( 1, 5, 10, 0, 2, "SkeletonOfSzandor" ), new Point3D( 1277, 3731, 0 ), Map.Trammel );
|
||||
PutSpawner( new Spawner( 1, 5, 10, 0, 2, "SkeletonOfSzandor" ), new Point3D( 1277, 3731, 0 ), Map.Felucca );
|
||||
}
|
||||
}
|
||||
|
||||
public class OddsAndEnds : MLQuest
|
||||
{
|
||||
public OddsAndEnds()
|
||||
{
|
||||
Activated = true;
|
||||
OneTimeOnly = true;
|
||||
Title = 1074354; // Odds and Ends
|
||||
Description = 1074677; // I've always been fascinated by primitive cultures -- especially the artifacts. I'm a collector, you see. I'm working on building my troglodyte display and I'm saddened to say that I'm short on examples of religion and superstition amongst the creatures. If you come across any primitive fetishes, I'd be happy to trade you something interesting for them.
|
||||
RefusalMessage = 1072270; // Well, okay. But if you decide you are up for it after all, c'mon back and see me.
|
||||
InProgressMessage = 1074678; // I don't really want to know where you get the primitive fetishes, as I can't support the destruction of their lifestyle and culture. That would be wrong.
|
||||
CompletionMessage = 1074679; // Bravo! These fetishes are just what I needed. You've earned this reward.
|
||||
|
||||
Objectives.Add( new CollectObjective( 12, typeof( PrimitiveFetish ), 1151986 ) ); // Primitive Fetishes
|
||||
|
||||
Rewards.Add( ItemReward.BagOfTreasure );
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Mobiles
|
||||
|
||||
public class Aurelia : BaseCreature
|
||||
{
|
||||
public override bool IsInvulnerable { get { return true; } }
|
||||
|
||||
[Constructable]
|
||||
public Aurelia()
|
||||
: base( AIType.AI_Vendor, FightMode.None, 2, 1, 0.5, 2 )
|
||||
{
|
||||
Name = "Aurelia";
|
||||
Title = "the Architect's Daughter";
|
||||
Race = Race.Human;
|
||||
BodyValue = 0x191;
|
||||
Female = true;
|
||||
Hue = Race.RandomSkinHue();
|
||||
InitStats( 100, 100, 25 );
|
||||
|
||||
Utility.AssignRandomHair( this, true );
|
||||
|
||||
AddItem( new Backpack() );
|
||||
AddItem( new Sandals( Utility.RandomPinkHue() ) );
|
||||
|
||||
if ( Utility.RandomBool() )
|
||||
AddItem( new Kilt( Utility.RandomPinkHue() ) );
|
||||
else
|
||||
AddItem( new Skirt( Utility.RandomPinkHue() ) );
|
||||
|
||||
AddItem( new FancyShirt( Utility.RandomRedHue() ) );
|
||||
}
|
||||
|
||||
public Aurelia( 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();
|
||||
}
|
||||
}
|
||||
|
||||
public class SkeletonOfSzandor : BaseCreature
|
||||
{
|
||||
public override bool IsInvulnerable { get { return true; } }
|
||||
|
||||
[Constructable]
|
||||
public SkeletonOfSzandor()
|
||||
: base( AIType.AI_Vendor, FightMode.None, 2, 1, 0.5, 2 )
|
||||
{
|
||||
Name = "Skeleton of Szandor";
|
||||
Title = "the Late Architect";
|
||||
Hue = 0x83F2; // TODO: Random human hue? Why???
|
||||
Body = 0x32;
|
||||
InitStats( 100, 100, 25 );
|
||||
}
|
||||
|
||||
public SkeletonOfSzandor( 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
|
||||
}
|
||||
4501
Scripts/Engines/MLQuests/Definitions/Heartwood.cs
Normal file
4501
Scripts/Engines/MLQuests/Definitions/Heartwood.cs
Normal file
File diff suppressed because it is too large
Load diff
812
Scripts/Engines/MLQuests/Definitions/Heritage.cs
Normal file
812
Scripts/Engines/MLQuests/Definitions/Heritage.cs
Normal file
|
|
@ -0,0 +1,812 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using Server.Engines.MLQuests.Rewards;
|
||||
using Server.Engines.MLQuests.Objectives;
|
||||
using Server.Items;
|
||||
using Server.Gumps;
|
||||
using Server.Mobiles;
|
||||
|
||||
namespace Server.Engines.MLQuests.Definitions
|
||||
{
|
||||
#region Human To Elf Quests
|
||||
|
||||
public class Seasons : MLQuest
|
||||
{
|
||||
public override bool RecordCompletion { get { return true; } }
|
||||
|
||||
public Seasons()
|
||||
{
|
||||
Activated = true;
|
||||
Title = 1072782; // Seasons
|
||||
Description = 1072802; // *rumbling growl* *sniff* ... not-smell ... seek-fight ... not-smell ... fear-stench ... *rumble* ... cold-soon-time comes ... hungry ... eat-fish ... sleep-soon-time ... *deep fang-filled yawn* ... much-fish.
|
||||
RefusalMessage = 1072810; // *yawn* ... cold-soon-time ... *growl*
|
||||
InProgressMessage = 1072811; // *sniff* *sniff* ... not-much-fish ... hungry ... *grumble*
|
||||
CompletionMessage = 1074174; // *sniff* fish! much-fish!
|
||||
|
||||
Objectives.Add( new CollectObjective( 20, typeof( RawFishSteak ), 1022426 ) ); // raw fish steak
|
||||
|
||||
Rewards.Add( new DummyReward( 1072803 ) ); // The boon of Maul.
|
||||
}
|
||||
|
||||
public override void GetRewards( MLQuestInstance instance )
|
||||
{
|
||||
instance.Player.SendLocalizedMessage( 1074940, "", 0x2A ); // You have gained the boon of Maul! Your understanding of the seasons grows. You are one step closer to claiming your elven heritage.
|
||||
instance.ClaimRewards(); // skip gump
|
||||
}
|
||||
|
||||
public override void Generate()
|
||||
{
|
||||
base.Generate();
|
||||
|
||||
PutSpawner( new Spawner( 1, 5, 10, 0, 5, "Darius" ), new Point3D( 4310, 954, 10 ), Map.Felucca );
|
||||
PutSpawner( new Spawner( 1, 5, 10, 0, 5, "Darius" ), new Point3D( 4310, 954, 10 ), Map.Trammel );
|
||||
|
||||
PutSpawner( new Spawner( 1, 5, 10, 0, 5, "MaulTheBear" ), new Point3D( 1730, 257, 16 ), Map.Felucca );
|
||||
PutSpawner( new Spawner( 1, 5, 10, 0, 5, "MaulTheBear" ), new Point3D( 1730, 257, 16 ), Map.Trammel );
|
||||
}
|
||||
}
|
||||
|
||||
public class CaretakerOfTheLand : MLQuest
|
||||
{
|
||||
public override bool RecordCompletion { get { return true; } }
|
||||
|
||||
public CaretakerOfTheLand()
|
||||
{
|
||||
Activated = true;
|
||||
Title = 1072783; // Caretaker of the Land
|
||||
Description = 1072812; // Hrrrrr. Hurrrr. Huuuman. *creaking branches* Suuun on baaark, roooooots diiig deeeeeep, wiiind caaaresses leeeaves … Hrrrrr. Saaap of Sooosaria feeeeeeds us. Hrrrrr. Huuuman leeearn. Caaaretaker of plaaants … teeend … prooove.<br>
|
||||
RefusalMessage = 1072813; // Hrrrrr. Hrrrrr. Huuuman.
|
||||
InProgressMessage = 1072814; // Hrrrr. Hrrrr. Roooooots neeeeeed saaap of Sooosaria. Hrrrrr. Roooooots tiiingle neeeaaar Yeeew. Seeeaaarch. Hrrrr!
|
||||
CompletionMessage = 1074175; // Thiiirsty. Hurrr. Hurrr.
|
||||
|
||||
Objectives.Add( new CollectObjective( 1, typeof( SapOfSosaria ), "sap of sosaria" ) );
|
||||
|
||||
Rewards.Add( new DummyReward( 1072804 ) ); // The boon of Strongroot.
|
||||
}
|
||||
|
||||
public override void GetRewards( MLQuestInstance instance )
|
||||
{
|
||||
instance.Player.SendLocalizedMessage( 1074941, "", 0x2A ); // You have gained the boon of Strongroot! You have been approved by one whose roots touch the bones of Sosaria. You are one step closer to claiming your elven heritage.
|
||||
instance.ClaimRewards(); // skip gump
|
||||
}
|
||||
|
||||
public override void Generate()
|
||||
{
|
||||
base.Generate();
|
||||
|
||||
PutSpawner( new Spawner( 1, 5, 10, 0, 5, "Strongroot" ), new Point3D( 597, 1744, 0 ), Map.Felucca );
|
||||
PutSpawner( new Spawner( 1, 5, 10, 0, 5, "Strongroot" ), new Point3D( 597, 1744, 0 ), Map.Trammel );
|
||||
|
||||
PutSpawner( new Spawner( 1, TimeSpan.FromSeconds( 30 ), TimeSpan.FromMinutes( 2 ), 0, 12, "SapOfSosaria" ), new Point3D( 757, 1004, 0 ), Map.Felucca );
|
||||
PutSpawner( new Spawner( 1, TimeSpan.FromSeconds( 30 ), TimeSpan.FromMinutes( 2 ), 0, 12, "SapOfSosaria" ), new Point3D( 757, 1004, 0 ), Map.Trammel );
|
||||
}
|
||||
}
|
||||
|
||||
public class WisdomOfTheSphynx : MLQuest
|
||||
{
|
||||
public override bool RecordCompletion { get { return true; } }
|
||||
|
||||
public WisdomOfTheSphynx()
|
||||
{
|
||||
Activated = true;
|
||||
Title = 1072784; // Wisdom of the Sphynx
|
||||
Description = 1072822; // I greet thee human and divine my boon thou seek. Convey hence the object of my riddle and I shall reward thee with thy desire.<br><br>Three lives have I.<br>Gentle enough to soothe the skin,<br>Light enough to caress the sky,<br>Hard enough to crack rocks<br>What am I?
|
||||
RefusalMessage = 1072823; // As thou wish, human.
|
||||
InProgressMessage = 1072824; // I give thee a hint then human. The answer to my riddle must be held carefully or it cannot be contained at all. Bring this elusive item to me in a suitable container.
|
||||
CompletionMessage = 1074176; // Ah, thus it ends.
|
||||
|
||||
Objectives.Add( new InternalObjective() );
|
||||
|
||||
Rewards.Add( new DummyReward( 1072805 ) ); // The boon of Enigma.
|
||||
}
|
||||
|
||||
public override void GetRewards( MLQuestInstance instance )
|
||||
{
|
||||
instance.Player.SendLocalizedMessage( 1074945, "", 0x2A ); // You have gained the boon of Enigma! You are wise enough to know how little you know. You are one step closer to claiming your elven heritage.
|
||||
instance.ClaimRewards(); // skip gump
|
||||
}
|
||||
|
||||
public override void Generate()
|
||||
{
|
||||
base.Generate();
|
||||
|
||||
PutSpawner( new Spawner( 1, 5, 10, 0, 5, "Enigma" ), new Point3D( 1828, 961, 7 ), Map.Felucca );
|
||||
PutSpawner( new Spawner( 1, 5, 10, 0, 5, "Enigma" ), new Point3D( 1828, 961, 7 ), Map.Trammel );
|
||||
}
|
||||
|
||||
private class InternalObjective : CollectObjective
|
||||
{
|
||||
public override bool ShowDetailed { get { return false; } }
|
||||
|
||||
public InternalObjective()
|
||||
: base( 1, typeof( Pitcher ), 1074869 ) // The answer to the riddle.
|
||||
{
|
||||
}
|
||||
|
||||
public override bool CheckItem( Item item )
|
||||
{
|
||||
Pitcher pitcher = item as Pitcher; // Only pitchers work
|
||||
|
||||
return ( pitcher != null && pitcher.Content == BeverageType.Water && pitcher.Quantity > 0 );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class DefendingTheHerd : MLQuest
|
||||
{
|
||||
public override bool RecordCompletion { get { return true; } }
|
||||
|
||||
public DefendingTheHerd()
|
||||
{
|
||||
Activated = true;
|
||||
Title = 1072785; // Defending the Herd
|
||||
Description = 1072825; // *snort* ... guard-mates ... guard-herd *hoof stomp* ... defend-with-hoof-and-horn ... thirsty-drink. *proud head-toss*
|
||||
RefusalMessage = 1072826; // *snort*
|
||||
InProgressMessage = 1072827; // *impatient hoof stomp* ... thirsty herd ... water scent.
|
||||
|
||||
Objectives.Add( new EscortObjective( new QuestArea( 1074779, "Bravehorn's drinking pool" ) ) ); // Bravehorn's drinking pool
|
||||
|
||||
Rewards.Add( new DummyReward( 1072806 ) ); // The boon of Bravehorn.
|
||||
}
|
||||
|
||||
public override void OnComplete( MLQuestInstance instance )
|
||||
{
|
||||
instance.Player.SendLocalizedMessage( 1046258, "", 0x23 ); // Your quest is complete.
|
||||
}
|
||||
|
||||
public override void GetRewards( MLQuestInstance instance )
|
||||
{
|
||||
instance.Player.SendLocalizedMessage( 1074942, "", 0x2A ); // You have gained the boon of Bravehorn! You have glimpsed the nobility of those that sacrifice themselves for their people. You are one step closer to claiming your elven heritage.
|
||||
instance.ClaimRewards(); // skip gump
|
||||
}
|
||||
|
||||
public override void Generate()
|
||||
{
|
||||
base.Generate();
|
||||
|
||||
PutSpawner( new Spawner( 1, TimeSpan.FromSeconds( 30 ), TimeSpan.FromSeconds( 90 ), 0, 5, "Bravehorn" ), new Point3D( 1193, 2467, 0 ), Map.Felucca );
|
||||
PutSpawner( new Spawner( 1, TimeSpan.FromSeconds( 30 ), TimeSpan.FromSeconds( 90 ), 0, 5, "Bravehorn" ), new Point3D( 1193, 2467, 0 ), Map.Trammel );
|
||||
|
||||
PutSpawner( new Spawner( 5, TimeSpan.FromSeconds( 20 ), TimeSpan.FromSeconds( 30 ), 0, 8, "BravehornsMate" ), new Point3D( 1192, 2467, 0 ), Map.Felucca );
|
||||
PutSpawner( new Spawner( 5, TimeSpan.FromSeconds( 20 ), TimeSpan.FromSeconds( 30 ), 0, 8, "BravehornsMate" ), new Point3D( 1192, 2467, 0 ), Map.Trammel );
|
||||
}
|
||||
}
|
||||
|
||||
public class TheBalanceOfNature : MLQuest
|
||||
{
|
||||
public override bool RecordCompletion { get { return true; } }
|
||||
|
||||
public TheBalanceOfNature()
|
||||
{
|
||||
Activated = true;
|
||||
Title = 1072786; // The Balance of Nature
|
||||
Description = 1072829; // Ho, there human. Why do you seek out the Huntsman? The hunter serves the land by culling both predators and prey. The hunter maintains the essential balance of life and does not kill for sport or glory. If you seek my favor, human, then demonstrate you are capable of the duty. Cull the wolves nearby.
|
||||
RefusalMessage = 1072830; // Then begone. I have no time to waste on you, human.
|
||||
InProgressMessage = 1072831; // The timber wolves are easily tracked, human.
|
||||
|
||||
Objectives.Add( new KillObjective( 15, new Type[] { typeof( TimberWolf ) }, "timber wolves", new QuestArea( 1074833, "Huntsman's Forest" ) ) ); // Huntsman's Forest
|
||||
|
||||
Rewards.Add( new DummyReward( 1072807 ) ); // The boon of the Huntsman.
|
||||
}
|
||||
|
||||
public override void GetRewards( MLQuestInstance instance )
|
||||
{
|
||||
instance.Player.SendLocalizedMessage( 1074943, "", 0x2A ); // You have gained the boon of the Huntsman! You have been given a taste of the bittersweet duty of those who guard the balance. You are one step closer to claiming your elven heritage.
|
||||
instance.ClaimRewards(); // skip gump
|
||||
}
|
||||
|
||||
public override void Generate()
|
||||
{
|
||||
base.Generate();
|
||||
|
||||
PutSpawner( new Spawner( 1, 5, 10, 0, 5, "Huntsman" ), new Point3D( 1676, 593, 16 ), Map.Felucca );
|
||||
PutSpawner( new Spawner( 1, 5, 10, 0, 5, "Huntsman" ), new Point3D( 1676, 593, 16 ), Map.Trammel );
|
||||
|
||||
PutSpawner( new Spawner( 5, TimeSpan.FromSeconds( 5 ), TimeSpan.FromSeconds( 15 ), 0, 10, "TimberWolf" ), new Point3D( 1671, 592, 16 ), Map.Felucca );
|
||||
PutSpawner( new Spawner( 5, TimeSpan.FromSeconds( 5 ), TimeSpan.FromSeconds( 15 ), 0, 10, "TimberWolf" ), new Point3D( 1671, 592, 16 ), Map.Trammel );
|
||||
}
|
||||
}
|
||||
|
||||
public class TheJoysOfLife : MLQuest
|
||||
{
|
||||
public override bool RecordCompletion { get { return true; } }
|
||||
|
||||
public TheJoysOfLife()
|
||||
{
|
||||
Activated = true;
|
||||
Title = 1072787; // The Joys of Life
|
||||
Description = 1072832; // *giggle* So serious, so grim! *tickle* Enjoy life! Have fun! Laugh! Be merry! *giggle* Find three of my baubles ... *giggle* I hid them! *giggles hysterically* Hid them! La la la! Bring them quickly! They are magical and will hide themselves again if you are too slow.
|
||||
RefusalMessage = 1072833; // *giggle* Too serious. Too thinky!
|
||||
InProgressMessage = 1072834; // Magical baubles hidden, find them as you're bidden! *giggle*
|
||||
CompletionMessage = 1074177; // *giggle* So pretty!
|
||||
|
||||
Objectives.Add( new CollectObjective( 3, typeof( ABauble ), "arielle's baubles" ) );
|
||||
|
||||
Rewards.Add( new DummyReward( 1072809 ) ); // The boon of Arielle.
|
||||
}
|
||||
|
||||
public override void GetRewards( MLQuestInstance instance )
|
||||
{
|
||||
instance.Player.SendLocalizedMessage( 1074944, "", 0x2A ); // You have gained the boon of Arielle! You have been taught the importance of laughter and light spirits. You are one step closer to claiming your elven heritage.
|
||||
instance.ClaimRewards(); // skip gump
|
||||
}
|
||||
|
||||
public override void Generate()
|
||||
{
|
||||
base.Generate();
|
||||
|
||||
PutSpawner( new Spawner( 1, 5, 10, 0, 5, "Arielle" ), new Point3D( 1560, 1182, -27 ), Map.Ilshenar );
|
||||
PutSpawner( new Spawner( 1, 5, 10, 0, 5, "Arielle" ), new Point3D( 3366, 292, 9 ), Map.Felucca ); // Felucca spawn for reds
|
||||
|
||||
PutSpawner( new Spawner( 6, TimeSpan.FromSeconds( 5 ), TimeSpan.FromSeconds( 30 ), 0, 20, "ABauble" ), new Point3D( 1585, 1212, -13 ), Map.Ilshenar );
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Human To Elf Mobiles
|
||||
|
||||
public class MaulTheBear : GrizzlyBear
|
||||
{
|
||||
public override bool IsInvulnerable { get { return true; } }
|
||||
|
||||
[Constructable]
|
||||
public MaulTheBear()
|
||||
{
|
||||
Name = "Maul";
|
||||
AI = AIType.AI_Vendor;
|
||||
FightMode = FightMode.None;
|
||||
Tamable = false;
|
||||
}
|
||||
|
||||
public MaulTheBear( 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();
|
||||
}
|
||||
}
|
||||
|
||||
public class Strongroot : Treefellow
|
||||
{
|
||||
public override bool IsInvulnerable { get { return true; } }
|
||||
|
||||
[Constructable]
|
||||
public Strongroot()
|
||||
{
|
||||
Name = "Strongroot";
|
||||
AI = AIType.AI_Vendor;
|
||||
FightMode = FightMode.None;
|
||||
}
|
||||
|
||||
public Strongroot( 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();
|
||||
}
|
||||
}
|
||||
|
||||
public class Enigma : BaseCreature
|
||||
{
|
||||
public override bool IsInvulnerable { get { return true; } }
|
||||
|
||||
[Constructable]
|
||||
public Enigma()
|
||||
: base( AIType.AI_Vendor, FightMode.None, 2, 1, 0.5, 2 )
|
||||
{
|
||||
Name = "Enigma";
|
||||
BodyValue = 788;
|
||||
BaseSoundID = 0x3EE;
|
||||
|
||||
InitStats( 100, 100, 25 );
|
||||
}
|
||||
|
||||
public Enigma( 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();
|
||||
}
|
||||
}
|
||||
|
||||
public class Bravehorn : BaseEscortable
|
||||
{
|
||||
public override bool StaticMLQuester { get { return true; } }
|
||||
public override bool InitialInnocent { get { return true; } }
|
||||
|
||||
[Constructable]
|
||||
public Bravehorn()
|
||||
{
|
||||
}
|
||||
|
||||
public override void InitBody()
|
||||
{
|
||||
Name = "Bravehorn";
|
||||
Body = 0xEA;
|
||||
|
||||
SetStr( 41, 71 );
|
||||
SetDex( 47, 77 );
|
||||
SetInt( 27, 57 );
|
||||
|
||||
SetHits( 27, 41 );
|
||||
SetMana( 0 );
|
||||
|
||||
SetDamage( 5, 9 );
|
||||
|
||||
SetDamageType( ResistanceType.Physical, 100 );
|
||||
|
||||
SetResistance( ResistanceType.Physical, 20, 25 );
|
||||
SetResistance( ResistanceType.Cold, 5, 10 );
|
||||
|
||||
SetSkill( SkillName.MagicResist, 26.8, 44.5 );
|
||||
SetSkill( SkillName.Tactics, 29.8, 47.5 );
|
||||
SetSkill( SkillName.Wrestling, 29.8, 47.5 );
|
||||
|
||||
Fame = 300;
|
||||
Karma = 0;
|
||||
|
||||
VirtualArmor = 24;
|
||||
}
|
||||
|
||||
public override void InitOutfit()
|
||||
{
|
||||
}
|
||||
|
||||
public override int GetAttackSound()
|
||||
{
|
||||
return 0x82;
|
||||
}
|
||||
|
||||
public override int GetHurtSound()
|
||||
{
|
||||
return 0x83;
|
||||
}
|
||||
|
||||
public override int GetDeathSound()
|
||||
{
|
||||
return 0x84;
|
||||
}
|
||||
|
||||
public Bravehorn( 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();
|
||||
}
|
||||
}
|
||||
|
||||
public class BravehornsMate : Hind
|
||||
{
|
||||
[Constructable]
|
||||
public BravehornsMate()
|
||||
{
|
||||
Name = "bravehorn's mate";
|
||||
Tamable = false;
|
||||
}
|
||||
|
||||
public BravehornsMate( 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();
|
||||
}
|
||||
}
|
||||
|
||||
public class Huntsman : Centaur
|
||||
{
|
||||
public override bool IsInvulnerable { get { return true; } }
|
||||
|
||||
[Constructable]
|
||||
public Huntsman()
|
||||
{
|
||||
Name = "Huntsman";
|
||||
AI = AIType.AI_Vendor;
|
||||
FightMode = FightMode.None;
|
||||
}
|
||||
|
||||
public Huntsman( 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();
|
||||
}
|
||||
}
|
||||
|
||||
public class Arielle : Pixie
|
||||
{
|
||||
public override bool IsInvulnerable { get { return true; } }
|
||||
|
||||
[Constructable]
|
||||
public Arielle()
|
||||
{
|
||||
Name = "Arielle";
|
||||
AI = AIType.AI_Vendor;
|
||||
FightMode = FightMode.None;
|
||||
}
|
||||
|
||||
public Arielle( 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
|
||||
|
||||
#region Elf To Human Quests
|
||||
|
||||
public class Ingenuity : MLQuest
|
||||
{
|
||||
public override bool RecordCompletion { get { return true; } }
|
||||
|
||||
public Ingenuity()
|
||||
{
|
||||
Activated = true;
|
||||
Title = 1074350; // Ingenuity
|
||||
Description = 1074462; // The best thing about my job is that I do a little bit of everything, every day. It's what we're good at really. Just picking up something and making it do something else. Listen, I'm really low on parts. Are you interested in fetching me some supplies?
|
||||
RefusalMessage = 1074508; // Okay. Best of luck with your other endeavors.
|
||||
InProgressMessage = 1074509; // Lord overseers are the best source I know for power crystals of the type I need. Iron golems too, can have them but they're harder to find.
|
||||
CompletionMessage = 1074510; // Do you have those power crystals? I'm ready to put the finishing touches on my latest experiment.
|
||||
|
||||
Objectives.Add( new CollectObjective( 10, typeof( PowerCrystal ), "Power Crystals" ) );
|
||||
|
||||
Rewards.Add( new DummyReward( 1074875 ) ); // Another step closer to becoming human.
|
||||
}
|
||||
|
||||
public override void OnComplete( MLQuestInstance instance )
|
||||
{
|
||||
instance.Player.SendLocalizedMessage( 1073775, "", 0x23 ); // Your quest is complete. Return for your reward.
|
||||
}
|
||||
|
||||
public override void GetRewards( MLQuestInstance instance )
|
||||
{
|
||||
instance.Player.SendLocalizedMessage( 1074946, "", 0x2A ); // You have demonstrated your ingenuity! Humans are jacks of all trades and know a little about a lot of things. You are one step closer to achieving humanity.
|
||||
instance.ClaimRewards(); // skip gump
|
||||
}
|
||||
|
||||
public override void Generate()
|
||||
{
|
||||
base.Generate();
|
||||
|
||||
PutSpawner( new Spawner( 1, 5, 10, 0, 5, "Nedrick" ), new Point3D( 2958, 3466, 15 ), Map.Felucca );
|
||||
PutSpawner( new Spawner( 1, 5, 10, 0, 5, "Nedrick" ), new Point3D( 2958, 3466, 15 ), Map.Trammel );
|
||||
|
||||
PutSpawner( new Spawner( 1, 5, 10, 0, 5, "Sledge" ), new Point3D( 2673, 2129, 0 ), Map.Felucca );
|
||||
PutSpawner( new Spawner( 1, 5, 10, 0, 5, "Sledge" ), new Point3D( 2673, 2129, 0 ), Map.Trammel );
|
||||
}
|
||||
}
|
||||
|
||||
public class HeaveHo : MLQuest
|
||||
{
|
||||
public override bool RecordCompletion { get { return true; } }
|
||||
|
||||
public HeaveHo()
|
||||
{
|
||||
Activated = true;
|
||||
Title = 1074351; // Heave Ho!
|
||||
Description = 1074519; // Ho there! There's nothing quite like a day's honest labor to make you appreciate being alive. Hey, maybe you'd like to help out with this project? These crates need to be delivered to Sledge. The only thing is -- it's a bit of a rush job and if you don't make it in time, he won't take them. Can I trust you to help out?
|
||||
RefusalMessage = 1074521; // Oh yah, if you're too busy, no problem.
|
||||
InProgressMessage = 1074522; // Sledge can be found in Buc's Den. Better hurry, he won't take those crates if you take too long with them.
|
||||
CompletionMessage = 1074523; // Hey, if you have cargo for me, you can start unloading over here.
|
||||
|
||||
Objectives.Add( new TimedDeliverObjective( TimeSpan.FromHours( 1 ), typeof( CrateForSledge ), 5, "Crates for Sledge", typeof( Sledge ), "Sledge (Buc's Den)" ) );
|
||||
|
||||
Rewards.Add( new DummyReward( 1074875 ) ); // Another step closer to becoming human.
|
||||
}
|
||||
|
||||
public override void OnComplete( MLQuestInstance instance )
|
||||
{
|
||||
instance.Player.SendLocalizedMessage( 1046258, "", 0x23 ); // Your quest is complete.
|
||||
}
|
||||
|
||||
public override void GetRewards( MLQuestInstance instance )
|
||||
{
|
||||
instance.Player.SendLocalizedMessage( 1074948, "", 0x2A ); // You have demonstrated your physical strength! Humans can carry vast loads without complaint. You are one step closer to achieving humanity.
|
||||
instance.ClaimRewards(); // skip gump
|
||||
}
|
||||
|
||||
public override void Generate()
|
||||
{
|
||||
base.Generate();
|
||||
|
||||
PutSpawner( new Spawner( 1, 5, 10, 0, 5, "Patricus" ), new Point3D( 3007, 823, -2 ), Map.Felucca );
|
||||
PutSpawner( new Spawner( 1, 5, 10, 0, 5, "Patricus" ), new Point3D( 3007, 823, -2 ), Map.Trammel );
|
||||
}
|
||||
}
|
||||
|
||||
// This is not a real quest, it is only used as a reference
|
||||
public class HumanInNeed : MLQuest
|
||||
{
|
||||
public override bool RecordCompletion { get { return true; } }
|
||||
|
||||
public HumanInNeed()
|
||||
{
|
||||
Title = 1075011; // A quest that asks you to defend a human in need.
|
||||
Description = 0;
|
||||
RefusalMessage = 0;
|
||||
InProgressMessage = 0;
|
||||
}
|
||||
|
||||
public static void AwardTo( PlayerMobile pm )
|
||||
{
|
||||
MLQuestSystem.GetOrCreateContext( pm ).SetDoneQuest( MLQuestSystem.FindQuest( typeof( HumanInNeed ) ) );
|
||||
pm.SendLocalizedMessage( 1074949, "", 0x2A ); // You have demonstrated your compassion! Your kind actions have been noted.
|
||||
}
|
||||
}
|
||||
|
||||
public class AllSeasonAdventurer : MLQuest
|
||||
{
|
||||
public override bool RecordCompletion { get { return true; } }
|
||||
|
||||
public AllSeasonAdventurer()
|
||||
{
|
||||
Activated = true;
|
||||
Title = 1074353; // All Season Adventurer
|
||||
Description = 1074527; // It's all about hardship, suffering, struggle and pain. Without challenges, you've got nothing to test yourself against -- and that's what life is all about. Self improvement! Honing your body and mind! Overcoming obstacles ... You'll see what I mean if you take on my challenge.
|
||||
RefusalMessage = 1074528; // My way of life isn't for everyone, that's true enough.
|
||||
InProgressMessage = 1074529; // You're not making much progress in the honing-mind-and-body department, are you?
|
||||
|
||||
Objectives.Add( new KillObjective( 5, new Type[] { typeof( Efreet ) }, "efreets", new QuestArea( 1074808, "Fire" ) ) ); // Fire
|
||||
Objectives.Add( new KillObjective( 5, new Type[] { typeof( IceFiend ) }, "ice fiends", new QuestArea( 1074809, "Ice" ) ) ); // Ice
|
||||
|
||||
Rewards.Add( new DummyReward( 1074875 ) ); // Another step closer to becoming human.
|
||||
}
|
||||
|
||||
public override void OnComplete( MLQuestInstance instance )
|
||||
{
|
||||
instance.Player.SendLocalizedMessage( 1073775, "", 0x23 ); // Your quest is complete. Return for your reward.
|
||||
}
|
||||
|
||||
public override void GetRewards( MLQuestInstance instance )
|
||||
{
|
||||
instance.Player.SendLocalizedMessage( 1074947, "", 0x2A ); // You have demonstrated your toughness! Humans are able to endure unimaginable hardships in pursuit of their goals. You are one step closer to achieving humanity.
|
||||
instance.ClaimRewards(); // skip gump
|
||||
}
|
||||
|
||||
public override void Generate()
|
||||
{
|
||||
base.Generate();
|
||||
|
||||
PutSpawner( new Spawner( 1, 5, 10, 0, 5, "Belulah" ), new Point3D( 3782, 1266, 0 ), Map.Felucca );
|
||||
PutSpawner( new Spawner( 1, 5, 10, 0, 5, "Belulah" ), new Point3D( 3782, 1266, 0 ), Map.Trammel );
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Elf To Human Mobiles
|
||||
|
||||
public class Sledge : BaseCreature
|
||||
{
|
||||
// TODO: Pointy Ears
|
||||
|
||||
public override bool IsInvulnerable { get { return true; } }
|
||||
|
||||
public override bool CanShout { get { return true; } }
|
||||
public override void Shout( PlayerMobile pm )
|
||||
{
|
||||
MLQuestSystem.Tell( this, pm, Utility.RandomList(
|
||||
1074188, // Weakling! You are not up to the task I have.
|
||||
1074195 // You there, in the stupid hat! Come here.
|
||||
) );
|
||||
}
|
||||
|
||||
[Constructable]
|
||||
public Sledge()
|
||||
: base( AIType.AI_Vendor, FightMode.None, 2, 1, 0.5, 2 )
|
||||
{
|
||||
Name = "Sledge";
|
||||
Title = "the Versatile";
|
||||
Body = 400;
|
||||
Hue = Race.RandomSkinHue();
|
||||
InitStats( 100, 100, 25 );
|
||||
|
||||
AddItem( new Tunic( Utility.RandomNeutralHue() ) );
|
||||
AddItem( new LongPants( Utility.RandomBlueHue() ) );
|
||||
AddItem( new Cloak( Utility.RandomBrightHue() ) );
|
||||
AddItem( new ElvenBoots( Utility.RandomNeutralHue() ) );
|
||||
AddItem( new Backpack() );
|
||||
}
|
||||
|
||||
public Sledge( 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();
|
||||
}
|
||||
}
|
||||
|
||||
public class Patricus : BaseCreature
|
||||
{
|
||||
public override bool IsInvulnerable { get { return true; } }
|
||||
|
||||
[Constructable]
|
||||
public Patricus()
|
||||
: base( AIType.AI_Vendor, FightMode.None, 2, 1, 0.5, 2 )
|
||||
{
|
||||
Name = "Patricus";
|
||||
Title = "the Trader";
|
||||
Body = 400;
|
||||
Hue = Race.RandomSkinHue();
|
||||
InitStats( 100, 100, 25 );
|
||||
|
||||
AddItem( new FancyShirt( Utility.RandomNeutralHue() ) );
|
||||
AddItem( new LongPants( Utility.RandomBrightHue() ) );
|
||||
AddItem( new Cloak( 0x1BB ) );
|
||||
AddItem( new Shoes( Utility.RandomNeutralHue() ) );
|
||||
AddItem( new Backpack() );
|
||||
}
|
||||
|
||||
public Patricus( 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();
|
||||
}
|
||||
}
|
||||
|
||||
public class Belulah : BaseCreature
|
||||
{
|
||||
public override bool IsInvulnerable { get { return true; } }
|
||||
|
||||
public override bool CanShout { get { return true; } }
|
||||
public override void Shout( PlayerMobile pm )
|
||||
{
|
||||
/*
|
||||
* 1074205 - Oh great adventurer, would you please assist a weak soul in need of aid?
|
||||
* 1074206 - Excuse me please traveler, might I have a little of your time?
|
||||
*/
|
||||
MLQuestSystem.Tell( this, pm, Utility.Random( 1074205, 2 ) );
|
||||
}
|
||||
|
||||
[Constructable]
|
||||
public Belulah()
|
||||
: base( AIType.AI_Vendor, FightMode.None, 2, 1, 0.5, 2 )
|
||||
{
|
||||
Name = "Belulah";
|
||||
Title = "the scorned";
|
||||
Female = true;
|
||||
Body = 401;
|
||||
Hue = Race.RandomSkinHue();
|
||||
InitStats( 100, 100, 25 );
|
||||
|
||||
Utility.AssignRandomHair( this, true );
|
||||
|
||||
AddItem( new FancyShirt( Utility.RandomBlueHue() ) );
|
||||
AddItem( new LongPants( Utility.RandomNondyedHue() ) );
|
||||
AddItem( new Boots() );
|
||||
}
|
||||
|
||||
public Belulah( 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
|
||||
}
|
||||
173
Scripts/Engines/MLQuests/Definitions/HonestBeggar.cs
Normal file
173
Scripts/Engines/MLQuests/Definitions/HonestBeggar.cs
Normal file
|
|
@ -0,0 +1,173 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Server;
|
||||
using Server.ContextMenus;
|
||||
using Server.Engines.MLQuests.Objectives;
|
||||
using Server.Engines.MLQuests.Rewards;
|
||||
using Server.Items;
|
||||
using Server.Misc;
|
||||
using Server.Mobiles;
|
||||
|
||||
namespace Server.Engines.MLQuests.Definitions
|
||||
{
|
||||
#region Quests
|
||||
|
||||
public class HonestBeggar : MLQuest
|
||||
{
|
||||
public override Type NextQuest { get { return typeof( ReginasThanks ); } }
|
||||
|
||||
public HonestBeggar()
|
||||
{
|
||||
Activated = true;
|
||||
OneTimeOnly = true;
|
||||
Title = 1075392; // Honest Beggar
|
||||
Description = 1075393; // Beg pardon, sir. I mean, madam. Uh, can I ask a favor of you? I found this jeweled ring. Most people would sell it and keep the money, but not me. I ain't never stole nothing, and I ain't about to start. I tried to take it over to Brit castle, figgerin' it must belong to some highborn lady, but the guards threw me out. You look like they might let you pass. Will you take the ring over there and see if you can find the owner?
|
||||
RefusalMessage = 1075395; // I see. Too good to help an honest beggar like me, eh?
|
||||
InProgressMessage = 1075396; // A jewel like this must be worth a lot, so it must belong to some noble or another. I would show it around the castle. Someone’s bound to recognize it.
|
||||
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.
|
||||
|
||||
Objectives.Add( new DeliverObjective( typeof( ReginasRing ), 1, 1075305, typeof( Regina ), "Regina" ) );
|
||||
|
||||
Rewards.Add( new DummyReward( 1075394 ) ); // Find the ring’s owner.
|
||||
}
|
||||
|
||||
public override void OnComplete( MLQuestInstance instance )
|
||||
{
|
||||
instance.Player.SendLocalizedMessage( 1046258, "", 0x23 ); // Your quest is complete.
|
||||
}
|
||||
|
||||
public override void Generate()
|
||||
{
|
||||
base.Generate();
|
||||
|
||||
PutSpawner( new Spawner( 1, 5, 10, 0, 4, "Evan" ), new Point3D( 1486, 1706, 0 ), Map.Trammel );
|
||||
PutSpawner( new Spawner( 1, 5, 10, 0, 4, "Evan" ), new Point3D( 1486, 1706, 0 ), Map.Felucca );
|
||||
}
|
||||
}
|
||||
|
||||
public class ReginasThanks : MLQuest
|
||||
{
|
||||
public override bool IsChainTriggered { get { return true; } }
|
||||
|
||||
public ReginasThanks()
|
||||
{
|
||||
Activated = true;
|
||||
Title = 1075398; // Regina’s Thanks
|
||||
Description = 1075399; // What’s that you say? It was a humble beggar that found my ring? Such honesty must be rewarded. Here, take this packet and return it to him, and I will be in your debt.
|
||||
RefusalMessage = 1075401; // Hmph. Very well. What did you say his name was?
|
||||
InProgressMessage = 1075402; // Take the packet and return it to the beggar who found my ring.
|
||||
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!
|
||||
|
||||
Objectives.Add( new DeliverObjective( typeof( ReginasLetter ), 1, 1075306, typeof( Evan ), "Evan" ) );
|
||||
|
||||
Rewards.Add( new ItemReward( 1075400, typeof( TransparentHeart ) ) ); // Transparent Heart
|
||||
}
|
||||
|
||||
public override void OnComplete( MLQuestInstance instance )
|
||||
{
|
||||
instance.Player.SendLocalizedMessage( 1046258, "", 0x23 ); // Your quest is complete.
|
||||
}
|
||||
|
||||
public override void Generate()
|
||||
{
|
||||
base.Generate();
|
||||
|
||||
PutSpawner( new Spawner( 1, 5, 10, 0, 0, "Regina" ), new Point3D( 1362, 1622, 50 ), Map.Trammel );
|
||||
PutSpawner( new Spawner( 1, 5, 10, 0, 3, "Regina" ), new Point3D( 1422, 1621, 20 ), Map.Felucca );
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Mobiles
|
||||
|
||||
public class Evan : BaseCreature
|
||||
{
|
||||
public override bool IsInvulnerable { get { return true; } }
|
||||
|
||||
[Constructable]
|
||||
public Evan()
|
||||
: base( AIType.AI_Vendor, FightMode.None, 2, 1, 0.5, 2 )
|
||||
{
|
||||
Name = "Evan";
|
||||
Title = "the Beggar";
|
||||
Race = Race.Human;
|
||||
BodyValue = 0x190;
|
||||
Female = false;
|
||||
Hue = Race.RandomSkinHue();
|
||||
InitStats( 100, 100, 25 );
|
||||
|
||||
Utility.AssignRandomHair( this, true );
|
||||
|
||||
AddItem( new Backpack() );
|
||||
AddItem( new Doublet() );
|
||||
AddItem( new ShortPants( 0x755 ) );
|
||||
|
||||
}
|
||||
|
||||
public Evan( 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();
|
||||
}
|
||||
}
|
||||
|
||||
public class Regina : BaseCreature
|
||||
{
|
||||
public override bool IsInvulnerable { get { return true; } }
|
||||
|
||||
[Constructable]
|
||||
public Regina()
|
||||
: base( AIType.AI_Vendor, FightMode.None, 2, 1, 0.5, 2 )
|
||||
{
|
||||
Name = "Regina";
|
||||
Title = "the Noble";
|
||||
Race = Race.Human;
|
||||
BodyValue = 0x191;
|
||||
Female = true;
|
||||
Hue = Race.RandomSkinHue();
|
||||
InitStats( 100, 100, 25 );
|
||||
|
||||
Utility.AssignRandomHair( this, true );
|
||||
|
||||
AddItem( new Backpack() );
|
||||
AddItem( new GildedDress() );
|
||||
AddItem( new Boots() );
|
||||
|
||||
}
|
||||
|
||||
public Regina( 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
|
||||
}
|
||||
333
Scripts/Engines/MLQuests/Definitions/Ilshenar.cs
Normal file
333
Scripts/Engines/MLQuests/Definitions/Ilshenar.cs
Normal file
|
|
@ -0,0 +1,333 @@
|
|||
using System;
|
||||
using Server;
|
||||
using Server.Engines.MLQuests.Objectives;
|
||||
using Server.Engines.MLQuests.Rewards;
|
||||
using Server.Items;
|
||||
using Server.Mobiles;
|
||||
|
||||
namespace Server.Engines.MLQuests.Definitions
|
||||
{
|
||||
public class Responsibility : BaseEscort
|
||||
{
|
||||
public Responsibility()
|
||||
{
|
||||
Activated = true;
|
||||
Title = 1074352; // Responsibility
|
||||
Description = 1074524; // Oh! I just don't know what to do. My mother is away and my father told me not to talk to strangers ... *worried frown* But my grandfather has sent word that he has been hurt and needs me to tend his wounds. He has a small farm southeast of here. Would you ... could you ... escort me there safely?
|
||||
RefusalMessage = 1074525; // I hope my grandfather will be alright.
|
||||
InProgressMessage = 1074526; // Grandfather's farm is a ways west of the Shrine of Spirituality. So, we're not quite there yet. Thank you again for keeping me safe.
|
||||
|
||||
Objectives.Add( new EscortObjective( new QuestArea( 1074781, "Sheep Farm" ) ) ); // Sheep Farm
|
||||
|
||||
Rewards.Add( ItemReward.BagOfTrinkets );
|
||||
}
|
||||
|
||||
// OSI sends this instead, but it doesn't make sense for an escortable
|
||||
//public override void OnComplete( MLQuestInstance instance )
|
||||
//{
|
||||
// instance.Player.SendLocalizedMessage( 1073775, "", 0x23 ); // Your quest is complete. Return for your reward.
|
||||
//}
|
||||
|
||||
public override void Generate()
|
||||
{
|
||||
base.Generate();
|
||||
|
||||
PutSpawner( new Spawner( 1, TimeSpan.FromSeconds( 10 ), TimeSpan.FromSeconds( 30 ), 0, 5, "Lissbet" ), new Point3D( 1568, 1040, -7 ), Map.Ilshenar );
|
||||
PutSpawner( new Spawner( 1, 5, 10, 0, 8, "GrandpaCharley" ), new Point3D( 1322, 1331, -14 ), Map.Ilshenar );
|
||||
PutSpawner( new Spawner( 1, TimeSpan.FromSeconds( 10 ), TimeSpan.FromSeconds( 30 ), 0, 3, "Sheep" ), new Point3D( 1308, 1324, -14 ), Map.Ilshenar );
|
||||
}
|
||||
}
|
||||
|
||||
public class SomethingToWailAbout : MLQuest
|
||||
{
|
||||
public SomethingToWailAbout()
|
||||
{
|
||||
Activated = true;
|
||||
Title = 1073071; // Something to Wail About
|
||||
Description = 1073561; // Can you hear them? The never-ending howling? The incessant wailing? These banshees, they never cease! Never! They haunt my nights. Please, I beg you -- will you silence them? I would be ever so grateful.
|
||||
RefusalMessage = 1073580; // I hope you'll reconsider. Until then, farwell.
|
||||
InProgressMessage = 1073581; // Until you kill 12 Wailing Banshees, there will be no peace.
|
||||
|
||||
Objectives.Add( new KillObjective( 12, new Type[] { typeof( WailingBanshee ) }, "wailing banshees" ) );
|
||||
|
||||
Rewards.Add( ItemReward.BagOfTreasure );
|
||||
}
|
||||
|
||||
public override void Generate()
|
||||
{
|
||||
base.Generate();
|
||||
|
||||
PutSpawner( new Spawner( 1, 5, 10, 0, 4, "Jelrice" ), new Point3D( 1176, 1196, -25 ), Map.Ilshenar );
|
||||
}
|
||||
}
|
||||
|
||||
public class Runaways : MLQuest
|
||||
{
|
||||
public Runaways()
|
||||
{
|
||||
Activated = true;
|
||||
Title = 1072993; // Runaways!
|
||||
Description = 1073026; // You've got to help me out! Those wild ostards have been causing absolute havok around here. Kill them off before they destroy my land. There are around twelve of them.
|
||||
RefusalMessage = 1072270; // Well, okay. But if you decide you are up for it after all, c'mon back and see me.
|
||||
InProgressMessage = 1072271; // You're not quite done yet. Get back to work!
|
||||
|
||||
Objectives.Add( new KillObjective( 12, new Type[] { typeof( FrenziedOstard ) }, "frenzied ostards" ) );
|
||||
|
||||
Rewards.Add( ItemReward.BagOfTrinkets );
|
||||
}
|
||||
}
|
||||
|
||||
public class ViciousPredator : MLQuest
|
||||
{
|
||||
public ViciousPredator()
|
||||
{
|
||||
Activated = true;
|
||||
Title = 1072994; // Vicious Predator
|
||||
Description = 1073028; // You've got to help me out! Those dire wolves have been causing absolute havok around here. Kill them off before they destroy my land. They run around in a pack of around ten.
|
||||
RefusalMessage = 1072270; // Well, okay. But if you decide you are up for it after all, c'mon back and see me.
|
||||
InProgressMessage = 1072271; // You're not quite done yet. Get back to work!
|
||||
|
||||
Objectives.Add( new KillObjective( 10, new Type[] { typeof( DireWolf ) }, "dire wolves" ) );
|
||||
|
||||
Rewards.Add( ItemReward.BagOfTrinkets );
|
||||
}
|
||||
}
|
||||
|
||||
public class GuileIrkAndSpite : MLQuest
|
||||
{
|
||||
public GuileIrkAndSpite()
|
||||
{
|
||||
Activated = true;
|
||||
Title = 1074739; // Guile, Irk and Spite
|
||||
Description = 1074740; // You know them, don't you. The three? They look like you, you'll see. They looked like me, I remember, they looked like, well, you'll see. The three. They'll drive you mad too, if you let them. They are trouble, and they need to be slain. Seek them out.
|
||||
RefusalMessage = 1074745; // You just don't understand the gravity of the situation. If you did, you'd agree to my task.
|
||||
InProgressMessage = 1074746; // Perhaps I was unclear. You'll know them when you see them, because you'll see you, and you, and you. Hurry now.
|
||||
CompletionMessage = 1074747; // Are you one of THEM? Ahhhh! Oh, wait, if you were them, then you'd be me. So you're -- you. Good job!
|
||||
|
||||
Objectives.Add( new KillObjective( 1, new Type[] { typeof( Guile ) }, "Guile" ) );
|
||||
Objectives.Add( new KillObjective( 1, new Type[] { typeof( Irk ) }, "Irk" ) );
|
||||
Objectives.Add( new KillObjective( 1, new Type[] { typeof( Spite ) }, "Spite" ) );
|
||||
|
||||
Rewards.Add( ItemReward.Strongbox );
|
||||
}
|
||||
|
||||
public override void Generate()
|
||||
{
|
||||
base.Generate();
|
||||
|
||||
PutSpawner( new Spawner( 1, 5, 10, 0, 5, "Yorus" ), new Point3D( 1389, 423, -24 ), Map.Ilshenar );
|
||||
}
|
||||
}
|
||||
|
||||
public class Lissbet : BaseEscortable
|
||||
{
|
||||
public override bool StaticMLQuester { get { return true; } }
|
||||
public override bool InitialInnocent { get { return true; } }
|
||||
|
||||
public override bool CanShout { get { return true; } }
|
||||
public override void Shout( PlayerMobile pm )
|
||||
{
|
||||
MLQuestSystem.Tell( this, pm, Utility.RandomList(
|
||||
1074204, // Greetings seeker. I have an urgent matter for you, if you are willing.
|
||||
1074222 // Could I trouble you for some assistance?
|
||||
) );
|
||||
}
|
||||
|
||||
[Constructable]
|
||||
public Lissbet()
|
||||
{
|
||||
}
|
||||
|
||||
public override void InitBody()
|
||||
{
|
||||
SetStr( 40, 50 );
|
||||
SetDex( 70, 80 );
|
||||
SetInt( 80, 90 );
|
||||
|
||||
Hue = Utility.RandomSkinHue();
|
||||
Female = true;
|
||||
Body = 401;
|
||||
Name = "Lissbet";
|
||||
Title = "the flower girl";
|
||||
|
||||
HairItemID = 0x203D;
|
||||
HairHue = 0x1BB;
|
||||
}
|
||||
|
||||
public override void InitOutfit()
|
||||
{
|
||||
AddItem( new Kilt( Utility.RandomYellowHue() ) );
|
||||
AddItem( new FancyShirt( Utility.RandomYellowHue() ) );
|
||||
AddItem( new Sandals() );
|
||||
}
|
||||
|
||||
public Lissbet( 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();
|
||||
}
|
||||
}
|
||||
|
||||
public class GrandpaCharley : BaseCreature
|
||||
{
|
||||
public override bool IsInvulnerable { get { return true; } }
|
||||
public override bool CanTeach { get { return true; } }
|
||||
|
||||
[Constructable]
|
||||
public GrandpaCharley()
|
||||
: base( AIType.AI_Vendor, FightMode.None, 2, 1, 0.5, 2 )
|
||||
{
|
||||
Name = "Grandpa Charley";
|
||||
Title = "the farmer";
|
||||
Body = 400;
|
||||
Hue = Race.RandomSkinHue();
|
||||
InitStats( 100, 100, 25 );
|
||||
|
||||
int hairHue = 0x3B2 + Utility.Random( 2 );
|
||||
Utility.AssignRandomHair( this, hairHue );
|
||||
|
||||
FacialHairItemID = 0x203E; // Long Beard
|
||||
FacialHairHue = hairHue;
|
||||
|
||||
SetSkill( SkillName.ItemID, 80, 90 );
|
||||
|
||||
AddItem( new WideBrimHat( Utility.RandomNondyedHue() ) );
|
||||
AddItem( new FancyShirt( Utility.RandomNondyedHue() ) );
|
||||
AddItem( new LongPants( Utility.RandomNondyedHue() ) );
|
||||
AddItem( new Sandals( Utility.RandomNeutralHue() ) );
|
||||
AddItem( new ShepherdsCrook() );
|
||||
AddItem( new Backpack() );
|
||||
}
|
||||
|
||||
public GrandpaCharley( 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();
|
||||
}
|
||||
}
|
||||
|
||||
public class Jelrice : BaseCreature
|
||||
{
|
||||
public override bool IsInvulnerable { get { return true; } }
|
||||
|
||||
public override bool CanShout { get { return true; } }
|
||||
public override void Shout( PlayerMobile pm )
|
||||
{
|
||||
MLQuestSystem.Tell( this, pm, 1074221 ); // Greetings! I have a small task for you good traveler.
|
||||
}
|
||||
|
||||
[Constructable]
|
||||
public Jelrice()
|
||||
: base( AIType.AI_Vendor, FightMode.None, 2, 1, 0.5, 2 )
|
||||
{
|
||||
Name = "Jelrice";
|
||||
Title = "the trader";
|
||||
Race = Race.Human;
|
||||
BodyValue = 0x191;
|
||||
Female = true;
|
||||
Hue = Race.RandomSkinHue();
|
||||
InitStats( 100, 100, 25 );
|
||||
|
||||
Utility.AssignRandomHair( this, true );
|
||||
|
||||
AddItem( new Shoes( Utility.RandomNeutralHue() ) );
|
||||
AddItem( new Skirt( Utility.RandomBlueHue() ) );
|
||||
AddItem( new FancyShirt( Utility.RandomRedHue() ) );
|
||||
}
|
||||
|
||||
public Jelrice( 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();
|
||||
}
|
||||
}
|
||||
|
||||
public class Yorus : BaseCreature
|
||||
{
|
||||
public override bool IsInvulnerable { get { return true; } }
|
||||
|
||||
public override bool CanShout { get { return true; } }
|
||||
public override void Shout( PlayerMobile pm )
|
||||
{
|
||||
MLQuestSystem.Tell( this, pm, 1074218 ); // Hey! I want to talk to you, now.
|
||||
}
|
||||
|
||||
[Constructable]
|
||||
public Yorus()
|
||||
: base( AIType.AI_Vendor, FightMode.None, 2, 1, 0.5, 2 )
|
||||
{
|
||||
Name = "Yorus";
|
||||
Title = "the tinker";
|
||||
Race = Race.Human;
|
||||
BodyValue = 0x190;
|
||||
Female = false;
|
||||
Hue = Race.RandomSkinHue();
|
||||
InitStats( 100, 100, 25 );
|
||||
|
||||
Utility.AssignRandomHair( this, true );
|
||||
|
||||
AddItem( new Shoes( Utility.RandomNeutralHue() ) );
|
||||
AddItem( new LongPants( Utility.RandomBlueHue() ) );
|
||||
AddItem( new FancyShirt( Utility.RandomOrangeHue() ) );
|
||||
AddItem( new Cloak( Utility.RandomBrightHue() ) );
|
||||
}
|
||||
|
||||
public Yorus( 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();
|
||||
}
|
||||
}
|
||||
}
|
||||
126
Scripts/Engines/MLQuests/Definitions/NewHaven.cs
Normal file
126
Scripts/Engines/MLQuests/Definitions/NewHaven.cs
Normal file
|
|
@ -0,0 +1,126 @@
|
|||
using System;
|
||||
using Server;
|
||||
using Server.Engines.MLQuests.Objectives;
|
||||
using Server.Engines.MLQuests.Rewards;
|
||||
using Server.Items;
|
||||
|
||||
namespace Server.Engines.MLQuests.Definitions
|
||||
{
|
||||
public class NewHavenEscort : BaseEscort
|
||||
{
|
||||
// New Haven escorts do not count for 'helping a human in need'
|
||||
public override bool AwardHumanInNeed { get { return false; } }
|
||||
|
||||
// Escort reward
|
||||
private static readonly BaseReward m_Reward = new ItemReward( "Gold", typeof( Gold ), 500 );
|
||||
|
||||
public NewHavenEscort( int title, int description, int progress, int destination, string region )
|
||||
{
|
||||
Activated = true;
|
||||
Title = title;
|
||||
Description = description;
|
||||
RefusalMessage = 1072288; // I wish you would reconsider my offer. I'll be waiting right here for someone brave enough to assist me.
|
||||
InProgressMessage = progress;
|
||||
|
||||
Objectives.Add( new EscortObjective( new QuestArea( destination, region ) ) );
|
||||
|
||||
Rewards.Add( m_Reward );
|
||||
}
|
||||
}
|
||||
|
||||
public class EscortToNHAlchemist : NewHavenEscort
|
||||
{
|
||||
public EscortToNHAlchemist()
|
||||
: base( 1072314, 1042769, 1072326, 1073864, "the New Haven Alchemist" )
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
public class EscortToNHBard : NewHavenEscort
|
||||
{
|
||||
public EscortToNHBard()
|
||||
: base( 1072315, 1042772, 1072327, 1073865, "the New Haven Bard" )
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
public class EscortToNHWarrior : NewHavenEscort
|
||||
{
|
||||
public EscortToNHWarrior()
|
||||
: base( 1072316, 1042787, 1072328, 1073866, "the New Haven Warrior" )
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
public class EscortToNHTailor : NewHavenEscort
|
||||
{
|
||||
public EscortToNHTailor()
|
||||
: base( 1072317, 1042781, 1072329, 1073867, "the New Haven Tailor" )
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
public class EscortToNHCarpenter : NewHavenEscort
|
||||
{
|
||||
public EscortToNHCarpenter()
|
||||
: base( 1072318, 1042775, 1072330, 1073868, "the New Haven Carpenter" )
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
public class EscortToNHMapmaker : NewHavenEscort
|
||||
{
|
||||
public EscortToNHMapmaker()
|
||||
: base( 1072319, 1042793, 1072331, 1073869, "the New Haven Mapmaker" )
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
public class EscortToNHMage : NewHavenEscort
|
||||
{
|
||||
public EscortToNHMage()
|
||||
: base( 1072320, 1042790, 1072332, 1073870, "the New Haven Mage" )
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
public class EscortToNHInn : NewHavenEscort
|
||||
{
|
||||
public EscortToNHInn()
|
||||
: base( 1072321, 1042796, 1072333, 1073871, "the New Haven Inn" )
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
public class EscortToNHFarm : NewHavenEscort
|
||||
{
|
||||
public EscortToNHFarm()
|
||||
: base( 1072322, 1042799, 1072334, 1073872, "the New Haven Farm" )
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
public class EscortToNHDocks : NewHavenEscort
|
||||
{
|
||||
public EscortToNHDocks()
|
||||
: base( 1072323, 1042802, 1072335, 1073873, "the New Haven Docks" )
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
public class EscortToNHBowyer : NewHavenEscort
|
||||
{
|
||||
public EscortToNHBowyer()
|
||||
: base( 1072324, 1042805, 1072336, 1073874, "the New Haven Bowyer" )
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
public class EscortToNHBank : NewHavenEscort
|
||||
{
|
||||
public EscortToNHBank()
|
||||
: base( 1072325, 1042784, 1072337, 1073875, "the New Haven Bank" )
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
2517
Scripts/Engines/MLQuests/Definitions/NewHavenSkillTraining.cs
Normal file
2517
Scripts/Engines/MLQuests/Definitions/NewHavenSkillTraining.cs
Normal file
File diff suppressed because it is too large
Load diff
994
Scripts/Engines/MLQuests/Definitions/NewHavenTraining.cs
Normal file
994
Scripts/Engines/MLQuests/Definitions/NewHavenTraining.cs
Normal file
|
|
@ -0,0 +1,994 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Server;
|
||||
using Server.ContextMenus;
|
||||
using Server.Engines.MLQuests.Objectives;
|
||||
using Server.Engines.MLQuests.Rewards;
|
||||
using Server.Items;
|
||||
using Server.Misc;
|
||||
using Server.Mobiles;
|
||||
|
||||
namespace Server.Engines.MLQuests.Definitions
|
||||
{
|
||||
#region Quests
|
||||
// TODO: Time delay on doing these quests (2 mins?)
|
||||
// I'm sorry, but I don't have anything else for you right now. Could you check back with me in a few minutes?
|
||||
// I'm sorry, I have nothing for you at this time.
|
||||
|
||||
public class SplitEnds : MLQuest
|
||||
{
|
||||
public SplitEnds()
|
||||
{
|
||||
Activated = true;
|
||||
Title = 1075506; // Split Ends
|
||||
Description = 1075507; // *sighs* I think bowcrafting is a might beyond my talents. Say there, you look a bit more confident with tools. Can I persuade thee to make a few arrows? You could have my satchel in return... 'tis useless to me! You'll need a fletching kit to start, some feathers, and a few arrow shafts. Just use the fletching kit while you have the other things, and I'm sure you'll figure out the rest.
|
||||
RefusalMessage = 1075508; // Oh. Well. I'll just keep trying alone, I suppose...
|
||||
InProgressMessage = 1072271; // You're not quite done yet. Get back to work!
|
||||
CompletionMessage = 1072272; // Thanks for helping me out. Here's the reward I promised you.
|
||||
|
||||
Objectives.Add( new CollectObjective( 20, typeof( Arrow ), 1023902 ) ); // arrow
|
||||
|
||||
Rewards.Add( new ItemReward( 1074282, typeof( AndricSatchel ) ) ); // Craftsmans's Satchel
|
||||
}
|
||||
|
||||
public override void Generate()
|
||||
{
|
||||
base.Generate();
|
||||
|
||||
PutSpawner( new Spawner( 1, 5, 10, 0, 0, "Andric" ), new Point3D( 3742, 2582, 40 ), Map.Trammel );
|
||||
}
|
||||
}
|
||||
|
||||
public class IShotAnArrowIntoTheAir : MLQuest
|
||||
{
|
||||
public IShotAnArrowIntoTheAir()
|
||||
{
|
||||
Activated = true;
|
||||
Title = 1075486; // I Shot an Arrow Into the Air...
|
||||
Description = 1075482; // Truth be told, the only way to get a feel for the bow is to shoot one and there's no better practice target than a sheep. If ye can shoot ten of them I think ye will have proven yer abilities. Just grab a bow and make sure to take enough ammunition. Bows tend to use arrows and crossbows use bolts. Ye can buy 'em or have someone craft 'em. How about it then? Come back here when ye are done.
|
||||
RefusalMessage = 1075483; // Fair enough, the bow isn't for everyone. Good day then.
|
||||
InProgressMessage = 1075484; // Return once ye have killed ten sheep with a bow and not a moment before.
|
||||
|
||||
Objectives.Add( new KillObjective( 10, new Type[] { typeof( Sheep ) }, 1018270 ) ); // sheep
|
||||
|
||||
Rewards.Add( ItemReward.BagOfTrinkets );
|
||||
}
|
||||
|
||||
public override void Generate()
|
||||
{
|
||||
base.Generate();
|
||||
|
||||
PutSpawner( new Spawner( 1, 5, 10, 0, 0, "Kashiel" ), new Point3D( 3744, 2586, 40 ), Map.Trammel );
|
||||
}
|
||||
}
|
||||
|
||||
public class BakersDozen : MLQuest
|
||||
{
|
||||
public BakersDozen()
|
||||
{
|
||||
Activated = true;
|
||||
Title = 1075478; // Baker's Dozen
|
||||
Description = 1075479; // You there! Do you know much about the ways of cooking? If you help me out, I'll show you a thing or two about how it's done. Bring me some cookie mix, about 5 batches will do it, and I will reward you. Although, I don't think you can buy it, you can make some in a snap! First get a rolling pin or frying pan or even a flour sifter. Then you mix one pinch of flour with some water and you've got some dough! Take that dough and add one dollop of honey and you've got sweet dough. add one more drop of honey and you've got cookie mix. See? Nothing to it! Now get to work!
|
||||
RefusalMessage = 1075480; // Argh, I absolutely must have more of these 'cookies!' Come back if you change your mind.
|
||||
InProgressMessage = 1072271; // You're not quite done yet. Get back to work!
|
||||
CompletionMessage = 1075481; // Thank you! I haven't been this excited about food in months!
|
||||
|
||||
Objectives.Add( new CollectObjective( 5, typeof( CookieMix ), 1024159 ) ); // cookie mix
|
||||
|
||||
Rewards.Add( new ItemReward( 1074282, typeof( AsandosSatchel ) ) ); // Craftsmans's Satchel
|
||||
}
|
||||
|
||||
public override void Generate()
|
||||
{
|
||||
base.Generate();
|
||||
|
||||
PutSpawner( new Spawner( 1, 5, 10, 0, 0, "Asandos" ), new Point3D( 3505, 2513, 27 ), Map.Trammel );
|
||||
}
|
||||
}
|
||||
|
||||
public class AStitchInTime : MLQuest
|
||||
{
|
||||
public AStitchInTime()
|
||||
{
|
||||
Activated = true;
|
||||
Title = 1075523; // A Stitch in Time
|
||||
Description = 1075522; // Oh how I wish I had a fancy dress like the noble ladies of Castle British! I don't have much... but I have a few trinkets I might trade for it. It would mean the world to me to go to a fancy ball and dance the night away. Oh, and I could tell you how to make one! You just need to use your sewing kit on enough cut cloth, that's all.
|
||||
RefusalMessage = 1075526; // Won't you reconsider? It'd mean the world to me, it would!
|
||||
InProgressMessage = 1075527; // Hello again! Do you need anything? You may want to visit the tailor's shop for cloth and a sewing kit, if you don't already have them.
|
||||
CompletionMessage = 1075528; // It's gorgeous! I only have a few things to give you in return, but I can't thank you enough! Maybe I'll even catch Uzeraan's eye at the, er, *blushes* I mean, I can't wait to wear it to the next town dance!
|
||||
|
||||
Objectives.Add( new CollectObjective( 1, typeof( FancyDress ), 1015275 ) ); // fancy dress
|
||||
|
||||
Rewards.Add( new ItemReward( 1075524, typeof( AnOldRing ) ) ); // an old ring
|
||||
Rewards.Add( new ItemReward( 1075525, typeof( AnOldNecklace ) ) ); // an old necklace
|
||||
}
|
||||
|
||||
public override void Generate()
|
||||
{
|
||||
base.Generate();
|
||||
|
||||
PutSpawner( new Spawner( 1, 5, 10, 0, 0, "Clairesse" ), new Point3D( 3492, 2546, 20 ), Map.Trammel );
|
||||
}
|
||||
}
|
||||
|
||||
public class BatteredBucklers : MLQuest
|
||||
{
|
||||
public BatteredBucklers()
|
||||
{
|
||||
Activated = true;
|
||||
Title = 1075511; // Battered Bucklers
|
||||
Description = 1075512; // Hey there! Yeah... you! Ya' any good with a hammer? Tell ya what, if yer thinking about tryin' some metal work, and have a bit of skill, I can show ya how to bend it into shape. Just get some of those ingots there, and grab a hammer and use it over here at this forge. I need a few more bucklers hammered out to fill this here order with... hmmm about ten more. that'll give some taste of how to work the metal.
|
||||
RefusalMessage = 1075514; // Not enough muscle on yer bones to use it? hmph, probably afraid of the sparks markin' up yer loverly skin... to good for some honest labor... ha!... off with ya!
|
||||
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
|
||||
|
||||
Rewards.Add( new ItemReward( 1074282, typeof( GervisSatchel ) ) ); // Craftsmans's Satchel
|
||||
}
|
||||
|
||||
public override void Generate()
|
||||
{
|
||||
base.Generate();
|
||||
|
||||
PutSpawner( new Spawner( 1, 5, 10, 0, 0, "Gervis" ), new Point3D( 3505, 2749, 0 ), Map.Trammel );
|
||||
}
|
||||
}
|
||||
|
||||
public class MoreOrePlease : MLQuest
|
||||
{
|
||||
public MoreOrePlease()
|
||||
{
|
||||
Activated = true;
|
||||
Title = 1075530; // More Ore Please
|
||||
Description = 1075529; // Have a pickaxe? My supplier is late and I need some iron ore so I can complete a bulk order for another merchant. If you can get me some soon I'll pay you double what it's worth on the market. Just find a cave or mountainside and try to use your pickaxe there, maybe you'll strike a good vein! 5 large pieces should do it.
|
||||
RefusalMessage = 1075531; // Not feeling strong enough today? Its alright, I didn't need a bucket of rocks anyway.
|
||||
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
|
||||
|
||||
Rewards.Add( new ItemReward( 1074282, typeof( MuggSatchel ) ) ); // Craftsmans's Satchel
|
||||
}
|
||||
|
||||
public override void Generate()
|
||||
{
|
||||
base.Generate();
|
||||
|
||||
PutSpawner( new Spawner( 1, 5, 10, 0, 0, "Mugg" ), new Point3D( 3507, 2747, 0 ), Map.Trammel );
|
||||
}
|
||||
}
|
||||
|
||||
public class ComfortableSeating : MLQuest
|
||||
{
|
||||
public ComfortableSeating()
|
||||
{
|
||||
Activated = true;
|
||||
Title = 1075517; // Comfortable Seating
|
||||
Description = 1075518; // Hail friend, hast thou a moment? A mishap with a saw hath left me in a sorry state, for it shall be a while before I canst return to carpentry. In the meantime, I need a comfortable chair that I may rest. Could thou craft a straw chair? Only a tool, such as a dovetail saw, a few boards, and some skill as a carpenter is needed. Remember, this is a piece of furniture, so please pay attention to detail.
|
||||
RefusalMessage = 1072687; // I quite understand your reluctance. If you reconsider, I'll be here.
|
||||
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
|
||||
|
||||
Rewards.Add( new ItemReward( 1074282, typeof( LowelSatchel ) ) ); // Craftsmans's Satchel
|
||||
}
|
||||
|
||||
public override void Generate()
|
||||
{
|
||||
base.Generate();
|
||||
|
||||
PutSpawner( new Spawner( 1, 5, 10, 0, 0, "Lowel" ), new Point3D( 3440, 2645, 27 ), Map.Trammel );
|
||||
}
|
||||
}
|
||||
|
||||
public class ThePenIsMightier : MLQuest
|
||||
{
|
||||
public ThePenIsMightier()
|
||||
{
|
||||
Activated = true;
|
||||
Title = 1075542; // The Pen is Mightier
|
||||
Description = 1075543; // Do you know anything about 'Inscription?' I've been trying to get my hands on some hand crafted Recall scrolls for a while now, and I could really use some help. I don't have a scribe's pen, let alone a spellbook with Recall in it, or blank scrolls, so there's no way I can do it on my own. How about you though? I could trade you one of my old leather bound books for some.
|
||||
RefusalMessage = 1075546; // Hmm, thought I had your interest there for a moment. It's not everyday you see a book made from real daemon skin, after all!
|
||||
InProgressMessage = 1075547; // Inscribing... yes, you'll need a scribe's pen, some reagents, some blank scroll, and of course your own magery book. You might want to visit the magery shop if you're lacking some materials.
|
||||
CompletionMessage = 1075548; // Ha! Finally! I've had a rune to the waterfalls near Justice Isle that I've been wanting to use for the longest time, and now I can visit at last. Here's that book I promised you... glad to be rid of it, to be honest.
|
||||
|
||||
Objectives.Add( new CollectObjective( 5, typeof( RecallScroll ), "recall scroll" ) );
|
||||
|
||||
Rewards.Add( new ItemReward( 1075545, typeof( RedLeatherBook ) ) ); // a book bound in red leather
|
||||
}
|
||||
|
||||
public override void Generate()
|
||||
{
|
||||
base.Generate();
|
||||
|
||||
PutSpawner( new Spawner( 1, 5, 10, 0, 0, "Lyle" ), new Point3D( 3503, 2584, 14 ), Map.Trammel );
|
||||
}
|
||||
}
|
||||
|
||||
public class AClockworkPuzzle : MLQuest
|
||||
{
|
||||
public AClockworkPuzzle()
|
||||
{
|
||||
Activated = true;
|
||||
Title = 1075535; // A clockwork puzzle
|
||||
Description = 1075534; // 'Tis a riddle, you see! "What kind of clock is only right twice per day? A broken one!" *laughs heartily* Ah, yes *wipes eye*, that's one of my favorites! Ah... to business. Could you fashion me some clock parts? I wish my own clocks to be right all the day long! You'll need some tinker's tools and some iron ingots, I think, but from there it should be just a matter of working the metal.
|
||||
RefusalMessage = 1072981; // Or perhaps you'd rather not.
|
||||
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
|
||||
|
||||
Rewards.Add( new ItemReward( 1074282, typeof( NibbetSatchel ) ) ); // Craftsmans's Satchel
|
||||
}
|
||||
|
||||
public override void Generate()
|
||||
{
|
||||
base.Generate();
|
||||
|
||||
PutSpawner( new Spawner( 1, 5, 10, 0, 0, "Nibbet" ), new Point3D( 3459, 2525, 53 ), Map.Trammel );
|
||||
}
|
||||
}
|
||||
|
||||
public class DeliciousFishes : MLQuest
|
||||
{
|
||||
public DeliciousFishes()
|
||||
{
|
||||
Activated = true;
|
||||
Title = 1075555; // Delicious Fishes
|
||||
Description = 1075556; // Ello there, looking for a good place on the dock to fish? I like the southeast corner meself. What's that? Oh, no, *sighs* me pole is broken and in for fixin'. My grandpappy gave me that pole, means a lot you see. Miss the taste of fish though... Oh say, since you're here, could you catch me a few fish? I can cook a mean fish steak, and I'll split 'em with you! But make sure it's one of the green kind, they're the best for seasoning!
|
||||
RefusalMessage = 1075558; // Ah, you're missin' out my friend, you're missing out. My peppercorn fishsteaks are famous on this little isle of ours!
|
||||
InProgressMessage = 1075559; // Eh? Find yerself a pole and get close to some water. Just toss the line on in and hopefully you won't snag someone's old boots! Remember, that's twenty of them green fish we'll be needin', so come back when you've got em, 'aight?
|
||||
CompletionMessage = 1075560; // Just a moment my friend, just a moment! *rummages in his pack* Here we are! My secret blend of peppers always does the trick, never fails, no not once. These'll fill you up much faster than that tripe they sell in the market!
|
||||
|
||||
Objectives.Add( new CollectObjective( 5, typeof( Fish ), 1022508 ) ); // fish
|
||||
|
||||
Rewards.Add( new ItemReward( 1075557, typeof( PeppercornFishsteak ), 3 ) ); // peppercorn fishsteak
|
||||
}
|
||||
|
||||
public override void Generate()
|
||||
{
|
||||
base.Generate();
|
||||
|
||||
PutSpawner( new Spawner( 1, 5, 10, 0, 0, "Norton" ), new Point3D( 3502, 2603, 1 ), Map.Trammel );
|
||||
}
|
||||
}
|
||||
|
||||
public class FleeAndFatigue : MLQuest
|
||||
{
|
||||
public FleeAndFatigue()
|
||||
{
|
||||
Activated = true;
|
||||
Title = 1075487; // Flee and Fatigue
|
||||
Description = 1075488; // I was just *coughs* ambushed near the moongate. *wheeze* Why do I pay my taxes? Where were the guards? You then, you an Alchemist? If you can make me a few Refresh potions, I will be back on my feet and can give those lizards the what for! Find a mortar and pestle, a good amount of black pearl, and ten empty bottles to store the finished potions in. Just use the mortar and pestle and the rest will surely come to you. When you return, the favor will be repaid.
|
||||
RefusalMessage = 1075489; // Fine fine, off with *cough* thee then! The next time you see a lizardman though, give him a whallop for me, eh?
|
||||
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
|
||||
|
||||
Rewards.Add( new ItemReward( 1074282, typeof( SadrahSatchel ) ) ); // Craftsmans's Satchel
|
||||
}
|
||||
|
||||
public override void Generate()
|
||||
{
|
||||
base.Generate();
|
||||
|
||||
PutSpawner( new Spawner( 1, 5, 10, 0, 0, "Sadrah" ), new Point3D( 3742, 2731, 7 ), Map.Trammel );
|
||||
}
|
||||
}
|
||||
|
||||
public class ChopChopOnTheDouble : MLQuest
|
||||
{
|
||||
public ChopChopOnTheDouble()
|
||||
{
|
||||
Activated = true;
|
||||
Title = 1075537; // Chop Chop, On The Double!
|
||||
Description = 1075538; // That's right, move it! I need sixty logs on the double, and they need to be freshly cut! If you can get them to me fast I'll have your payment in your hands before you have the scent of pine out from beneath your nostrils. Just get a sharp axe and hack away at some of the trees in the land and your lumberjacking skill will rise in no time.
|
||||
RefusalMessage = 1072981; // Or perhaps you'd rather not.
|
||||
InProgressMessage = 1072271; // You're not quite done yet. Get back to work!
|
||||
CompletionMessage = 1075539; // Ahhh! The smell of fresh cut lumber. And look at you, all strong and proud, as if you had done an honest days work!
|
||||
|
||||
Objectives.Add( new CollectObjective( 60, typeof( Log ), 1027133 ) ); // log
|
||||
|
||||
Rewards.Add( new ItemReward( 1074282, typeof( HargroveSatchel ) ) ); // Craftsmans's Satchel
|
||||
}
|
||||
|
||||
public override void Generate()
|
||||
{
|
||||
base.Generate();
|
||||
|
||||
PutSpawner( new Spawner( 1, 5, 10, 0, 0, "Hargrove" ), new Point3D( 3445, 2633, 28 ), Map.Trammel );
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Mobiles
|
||||
|
||||
public class Andric : BaseCreature
|
||||
{
|
||||
public override bool IsInvulnerable { get { return true; } }
|
||||
public override bool CanTeach { get { return true; } }
|
||||
|
||||
public override bool CanShout { get { return true; } }
|
||||
public override void Shout( PlayerMobile pm )
|
||||
{
|
||||
MLQuestSystem.Tell( this, pm, Utility.RandomList(
|
||||
1074205, // Oh great adventurer, would you please assist a weak soul in need of aid?
|
||||
1074213 // Hey buddy. Looking for work?
|
||||
) );
|
||||
}
|
||||
|
||||
[Constructable]
|
||||
public Andric()
|
||||
: base( AIType.AI_Vendor, FightMode.None, 2, 1, 0.5, 2 )
|
||||
{
|
||||
Name = "Andric";
|
||||
Title = "the archer trainer";
|
||||
Race = Race.Human;
|
||||
BodyValue = 0x190;
|
||||
Female = false;
|
||||
Hue = Race.RandomSkinHue();
|
||||
InitStats( 100, 100, 25 );
|
||||
|
||||
Utility.AssignRandomHair( this, true );
|
||||
|
||||
SetSkill( SkillName.Archery, 60.0, 80.0 );
|
||||
|
||||
AddItem( new Backpack() );
|
||||
|
||||
Item item;
|
||||
|
||||
item = new LeatherChest();
|
||||
item.Hue = 0x1BB;
|
||||
AddItem( item );
|
||||
|
||||
item = new LeatherLegs();
|
||||
item.Hue = 0x6AD;
|
||||
AddItem( item );
|
||||
|
||||
item = new LeatherArms();
|
||||
item.Hue = 0x6AD;
|
||||
AddItem( item );
|
||||
|
||||
item = new LeatherGloves();
|
||||
item.Hue = 0x1BB;
|
||||
AddItem( item );
|
||||
|
||||
AddItem( new Boots( 0x1BB ) );
|
||||
AddItem( new CompositeBow() );
|
||||
}
|
||||
|
||||
public Andric( 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();
|
||||
}
|
||||
}
|
||||
|
||||
public class Kashiel : BaseCreature
|
||||
{
|
||||
public override bool IsInvulnerable { get { return true; } }
|
||||
|
||||
[Constructable]
|
||||
public Kashiel()
|
||||
: base( AIType.AI_Vendor, FightMode.None, 2, 1, 0.5, 2 )
|
||||
{
|
||||
Name = "Kashiel";
|
||||
Title = "the archer";
|
||||
Race = Race.Human;
|
||||
BodyValue = 0x191;
|
||||
Female = true;
|
||||
Hue = Race.RandomSkinHue();
|
||||
InitStats( 100, 100, 25 );
|
||||
|
||||
Utility.AssignRandomHair( this, true );
|
||||
|
||||
AddItem( new Backpack() );
|
||||
|
||||
Item item;
|
||||
|
||||
item = new LeatherChest();
|
||||
item.Hue = 0x1BB;
|
||||
AddItem( item );
|
||||
|
||||
item = new LeatherLegs();
|
||||
item.Hue = 0x901;
|
||||
AddItem( item );
|
||||
|
||||
item = new LeatherArms();
|
||||
item.Hue = 0x901;
|
||||
AddItem( item );
|
||||
|
||||
item = new LeatherGloves();
|
||||
item.Hue = 0x1BB;
|
||||
AddItem( item );
|
||||
|
||||
AddItem( new Boots( 0x1BB ) );
|
||||
AddItem( new CompositeBow() );
|
||||
}
|
||||
|
||||
public Kashiel( 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();
|
||||
}
|
||||
}
|
||||
|
||||
public class Asandos : BaseCreature
|
||||
{
|
||||
public override bool IsInvulnerable { get { return true; } }
|
||||
|
||||
public override bool CanShout { get { return true; } }
|
||||
public override void Shout( PlayerMobile pm )
|
||||
{
|
||||
MLQuestSystem.Tell( this, pm, Utility.RandomList(
|
||||
1074205, // Oh great adventurer, would you please assist a weak soul in need of aid?
|
||||
1074213 // Hey buddy. Looking for work?
|
||||
) );
|
||||
}
|
||||
|
||||
[Constructable]
|
||||
public Asandos()
|
||||
: base( AIType.AI_Vendor, FightMode.None, 2, 1, 0.5, 2 )
|
||||
{
|
||||
Name = "Asandos";
|
||||
Title = "the chef";
|
||||
Race = Race.Human;
|
||||
BodyValue = 0x190;
|
||||
Female = false;
|
||||
Hue = Race.RandomSkinHue();
|
||||
InitStats( 100, 100, 25 );
|
||||
|
||||
Utility.AssignRandomHair( this, true );
|
||||
|
||||
AddItem( new Backpack() );
|
||||
AddItem( new Boots( 0x901 ) );
|
||||
AddItem( new ShortPants() );
|
||||
AddItem( new Shirt() );
|
||||
AddItem( new Cap() );
|
||||
AddItem( new HalfApron( 0x28 ) );
|
||||
}
|
||||
|
||||
public Asandos( 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();
|
||||
}
|
||||
}
|
||||
|
||||
public class Clairesse : BaseCreature
|
||||
{
|
||||
public override bool IsInvulnerable { get { return true; } }
|
||||
|
||||
public override bool CanShout { get { return true; } }
|
||||
public override void Shout( PlayerMobile pm )
|
||||
{
|
||||
MLQuestSystem.Tell( this, pm, Utility.RandomList(
|
||||
1074205, // Oh great adventurer, would you please assist a weak soul in need of aid?
|
||||
1074213 // Hey buddy. Looking for work?
|
||||
) );
|
||||
}
|
||||
|
||||
[Constructable]
|
||||
public Clairesse()
|
||||
: base( AIType.AI_Vendor, FightMode.None, 2, 1, 0.5, 2 )
|
||||
{
|
||||
Name = "Clairesse";
|
||||
Title = "the servant";
|
||||
Race = Race.Human;
|
||||
BodyValue = 0x191;
|
||||
Female = true;
|
||||
Hue = Race.RandomSkinHue();
|
||||
InitStats( 100, 100, 25 );
|
||||
|
||||
Utility.AssignRandomHair( this, true );
|
||||
|
||||
AddItem( new Backpack() );
|
||||
AddItem( new Shoes( Utility.RandomNeutralHue() ) );
|
||||
AddItem( new PlainDress( 0x3C9 ) );
|
||||
}
|
||||
|
||||
public Clairesse( 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();
|
||||
}
|
||||
}
|
||||
|
||||
public class Gervis : BaseCreature
|
||||
{
|
||||
public override bool IsInvulnerable { get { return true; } }
|
||||
public override bool CanTeach { get { return true; } }
|
||||
|
||||
public override bool CanShout { get { return true; } }
|
||||
public override void Shout( PlayerMobile pm )
|
||||
{
|
||||
MLQuestSystem.Tell( this, pm, Utility.RandomList(
|
||||
1074205, // Oh great adventurer, would you please assist a weak soul in need of aid?
|
||||
1074213, // Hey buddy. Looking for work?
|
||||
1074211 // I could use some help.
|
||||
) );
|
||||
}
|
||||
|
||||
[Constructable]
|
||||
public Gervis()
|
||||
: base( AIType.AI_Vendor, FightMode.None, 2, 1, 0.5, 2 )
|
||||
{
|
||||
Name = "Gervis";
|
||||
Title = "the blacksmith trainer";
|
||||
Race = Race.Human;
|
||||
BodyValue = 0x190;
|
||||
Female = false;
|
||||
Hue = Race.RandomSkinHue();
|
||||
InitStats( 100, 100, 25 );
|
||||
|
||||
Utility.AssignRandomHair( this, true );
|
||||
|
||||
SetSkill( SkillName.Blacksmith, 60.0, 80.0 );
|
||||
|
||||
AddItem( new Backpack() );
|
||||
AddItem( new Boots( 0x3B3 ) );
|
||||
AddItem( new ShortPants( 0x1BB ) );
|
||||
AddItem( new Doublet( 0x652 ) );
|
||||
AddItem( new SmithHammer() );
|
||||
|
||||
Item item;
|
||||
|
||||
item = new LeatherGloves();
|
||||
item.Hue = 0x3B2;
|
||||
AddItem( item );
|
||||
}
|
||||
|
||||
public Gervis( 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();
|
||||
}
|
||||
}
|
||||
|
||||
public class Mugg : BaseCreature
|
||||
{
|
||||
public override bool IsInvulnerable { get { return true; } }
|
||||
|
||||
public override bool CanShout { get { return true; } }
|
||||
public override void Shout( PlayerMobile pm )
|
||||
{
|
||||
MLQuestSystem.Tell( this, pm, 1074211 ); // I could use some help.
|
||||
}
|
||||
|
||||
[Constructable]
|
||||
public Mugg()
|
||||
: base( AIType.AI_Vendor, FightMode.None, 2, 1, 0.5, 2 )
|
||||
{
|
||||
Name = "Mugg";
|
||||
Title = "the miner";
|
||||
Race = Race.Human;
|
||||
BodyValue = 0x190;
|
||||
Female = false;
|
||||
Hue = Race.RandomSkinHue();
|
||||
InitStats( 100, 100, 25 );
|
||||
|
||||
Utility.AssignRandomHair( this, true );
|
||||
|
||||
AddItem( new Backpack() );
|
||||
AddItem( new Boots( 0x901 ) );
|
||||
AddItem( new ShortPants( 0x3B3 ) );
|
||||
AddItem( new Shirt( 0x22B ) );
|
||||
AddItem( new HalfApron( 0x5F1 ) );
|
||||
AddItem( new SkullCap( 0x177 ) );
|
||||
AddItem( new Pickaxe() );
|
||||
}
|
||||
|
||||
public Mugg( 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();
|
||||
}
|
||||
}
|
||||
|
||||
public class Lowel : BaseCreature
|
||||
{
|
||||
public override bool IsInvulnerable { get { return true; } }
|
||||
|
||||
public override bool CanShout { get { return true; } }
|
||||
public override void Shout( PlayerMobile pm )
|
||||
{
|
||||
MLQuestSystem.Tell( this, pm, Utility.RandomList(
|
||||
1074205, // Oh great adventurer, would you please assist a weak soul in need of aid?
|
||||
1074213 // Hey buddy. Looking for work?
|
||||
) );
|
||||
}
|
||||
|
||||
[Constructable]
|
||||
public Lowel()
|
||||
: base( AIType.AI_Vendor, FightMode.None, 2, 1, 0.5, 2 )
|
||||
{
|
||||
Name = "Lowel";
|
||||
Title = "the carpenter";
|
||||
Race = Race.Human;
|
||||
BodyValue = 0x190;
|
||||
Female = false;
|
||||
Hue = Race.RandomSkinHue();
|
||||
InitStats( 100, 100, 25 );
|
||||
|
||||
Utility.AssignRandomHair( this, true );
|
||||
|
||||
AddItem( new Backpack() );
|
||||
AddItem( new Boots( 0x543 ) );
|
||||
AddItem( new ShortPants( 0x758 ) );
|
||||
AddItem( new FancyShirt( 0x53A ) );
|
||||
AddItem( new HalfApron( 0x6D2 ) );
|
||||
}
|
||||
|
||||
public Lowel( 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();
|
||||
}
|
||||
}
|
||||
|
||||
public class Lyle : BaseCreature
|
||||
{
|
||||
public override bool IsInvulnerable { get { return true; } }
|
||||
|
||||
public override bool CanShout { get { return true; } }
|
||||
public override void Shout( PlayerMobile pm )
|
||||
{
|
||||
MLQuestSystem.Tell( this, pm, Utility.RandomList(
|
||||
1074205, // Oh great adventurer, would you please assist a weak soul in need of aid?
|
||||
1074213 // Hey buddy. Looking for work?
|
||||
) );
|
||||
}
|
||||
|
||||
[Constructable]
|
||||
public Lyle()
|
||||
: base( AIType.AI_Vendor, FightMode.None, 2, 1, 0.5, 2 )
|
||||
{
|
||||
Name = "Lyle";
|
||||
Title = "the mage";
|
||||
Race = Race.Human;
|
||||
BodyValue = 0x190;
|
||||
Female = false;
|
||||
Hue = Race.RandomSkinHue();
|
||||
InitStats( 100, 100, 25 );
|
||||
|
||||
Utility.AssignRandomHair( this, true );
|
||||
|
||||
AddItem( new Backpack() );
|
||||
AddItem( new Robe( 0x2FD ) );
|
||||
AddItem( new ThighBoots() );
|
||||
}
|
||||
|
||||
public Lyle( 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();
|
||||
}
|
||||
}
|
||||
|
||||
public class Nibbet : BaseCreature
|
||||
{
|
||||
public override bool IsInvulnerable { get { return true; } }
|
||||
|
||||
[Constructable]
|
||||
public Nibbet()
|
||||
: base( AIType.AI_Vendor, FightMode.None, 2, 1, 0.5, 2 )
|
||||
{
|
||||
Name = "Nibbet";
|
||||
Title = "the tinker";
|
||||
Race = Race.Human;
|
||||
BodyValue = 0x190;
|
||||
Female = false;
|
||||
Hue = Race.RandomSkinHue();
|
||||
InitStats( 100, 100, 25 );
|
||||
|
||||
Utility.AssignRandomHair( this, true );
|
||||
|
||||
AddItem( new Backpack() );
|
||||
AddItem( new Boots( 0x591 ) );
|
||||
AddItem( new ShortPants( 0xF8 ) );
|
||||
AddItem( new Shirt( 0x2D ) );
|
||||
AddItem( new FullApron( 0x288 ) );
|
||||
}
|
||||
|
||||
public Nibbet( 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();
|
||||
}
|
||||
}
|
||||
|
||||
public class Norton : BaseCreature
|
||||
{
|
||||
public override bool IsInvulnerable { get { return true; } }
|
||||
|
||||
public override bool CanShout { get { return true; } }
|
||||
public override void Shout( PlayerMobile pm )
|
||||
{
|
||||
MLQuestSystem.Tell( this, pm, Utility.RandomList(
|
||||
1074205, // Oh great adventurer, would you please assist a weak soul in need of aid?
|
||||
1074213, // Hey buddy. Looking for work?
|
||||
1074211 // I could use some help.
|
||||
) );
|
||||
}
|
||||
|
||||
[Constructable]
|
||||
public Norton()
|
||||
: base( AIType.AI_Vendor, FightMode.None, 2, 1, 0.5, 2 )
|
||||
{
|
||||
Name = "Norton";
|
||||
Title = "the fisher";
|
||||
Race = Race.Human;
|
||||
BodyValue = 0x190;
|
||||
Female = false;
|
||||
Hue = Race.RandomSkinHue();
|
||||
InitStats( 100, 100, 25 );
|
||||
|
||||
Utility.AssignRandomHair( this, true );
|
||||
|
||||
AddItem( new Backpack() );
|
||||
AddItem( new ThighBoots() );
|
||||
AddItem( new LongPants( 0x6C2 ) );
|
||||
AddItem( new Shirt( 0x11D ) );
|
||||
}
|
||||
|
||||
public Norton( 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();
|
||||
}
|
||||
}
|
||||
|
||||
public class Sadrah : BaseCreature
|
||||
{
|
||||
public override bool IsInvulnerable { get { return true; } }
|
||||
|
||||
public override bool CanShout { get { return true; } }
|
||||
public override void Shout( PlayerMobile pm )
|
||||
{
|
||||
MLQuestSystem.Tell( this, pm, Utility.RandomList(
|
||||
1074205, // Oh great adventurer, would you please assist a weak soul in need of aid?
|
||||
1074213, // Hey buddy. Looking for work?
|
||||
1074211 // I could use some help.
|
||||
) );
|
||||
}
|
||||
|
||||
[Constructable]
|
||||
public Sadrah()
|
||||
: base( AIType.AI_Vendor, FightMode.None, 2, 1, 0.5, 2 )
|
||||
{
|
||||
Name = "Sadrah";
|
||||
Title = "the courier";
|
||||
Race = Race.Human;
|
||||
BodyValue = 0x191;
|
||||
Female = true;
|
||||
Hue = Race.RandomSkinHue();
|
||||
InitStats( 100, 100, 25 );
|
||||
|
||||
Utility.AssignRandomHair( this, true );
|
||||
|
||||
AddItem( new Backpack() );
|
||||
AddItem( new Boots( 0x901 ) );
|
||||
AddItem( new Skirt( 0x52 ) );
|
||||
AddItem( new Shirt( 0x127 ) );
|
||||
AddItem( new Cloak( 0x65) );
|
||||
AddItem( new Longsword() );
|
||||
}
|
||||
|
||||
public Sadrah( 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();
|
||||
}
|
||||
}
|
||||
|
||||
public class Hargrove : BaseCreature
|
||||
{
|
||||
public override bool IsInvulnerable { get { return true; } }
|
||||
|
||||
public override bool CanShout { get { return true; } }
|
||||
public override void Shout( PlayerMobile pm )
|
||||
{
|
||||
MLQuestSystem.Tell( this, pm, Utility.RandomList(
|
||||
1074213, // Hey buddy. Looking for work?
|
||||
1074211 // I could use some help.
|
||||
) );
|
||||
}
|
||||
|
||||
[Constructable]
|
||||
public Hargrove()
|
||||
: base( AIType.AI_Vendor, FightMode.None, 2, 1, 0.5, 2 )
|
||||
{
|
||||
Name = "Hargrove";
|
||||
Title = "the Lumberjack";
|
||||
Race = Race.Human;
|
||||
BodyValue = 0x190;
|
||||
Female = false;
|
||||
Hue = Race.RandomSkinHue();
|
||||
InitStats( 100, 100, 25 );
|
||||
|
||||
Utility.AssignRandomHair( this, true );
|
||||
|
||||
AddItem( new Backpack() );
|
||||
AddItem( new Boots( 0x901 ) );
|
||||
AddItem( new StuddedLegs() );
|
||||
AddItem( new Shirt( 0x288 ) );
|
||||
AddItem( new Bandana( 0x20 ) );
|
||||
AddItem( new BattleAxe() );
|
||||
|
||||
Item item;
|
||||
|
||||
item = new PlateGloves();
|
||||
item.Hue = 0x21E;
|
||||
AddItem( item );
|
||||
|
||||
}
|
||||
|
||||
public Hargrove( 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
|
||||
}
|
||||
1206
Scripts/Engines/MLQuests/Definitions/Sanctuary.cs
Normal file
1206
Scripts/Engines/MLQuests/Definitions/Sanctuary.cs
Normal file
File diff suppressed because it is too large
Load diff
691
Scripts/Engines/MLQuests/Definitions/Spellweaving.cs
Normal file
691
Scripts/Engines/MLQuests/Definitions/Spellweaving.cs
Normal file
|
|
@ -0,0 +1,691 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using Server.Engines.MLQuests.Objectives;
|
||||
using Server.Items;
|
||||
using Server.Engines.MLQuests.Rewards;
|
||||
using Server.Mobiles;
|
||||
|
||||
namespace Server.Engines.MLQuests.Definitions
|
||||
{
|
||||
public static class Spellweaving
|
||||
{
|
||||
public static void AwardTo( PlayerMobile pm )
|
||||
{
|
||||
if ( pm == null )
|
||||
return;
|
||||
|
||||
MLQuestContext context = MLQuestSystem.GetOrCreateContext( pm );
|
||||
|
||||
if ( !context.Spellweaving )
|
||||
{
|
||||
context.Spellweaving = true;
|
||||
|
||||
Effects.SendLocationParticles( EffectItem.Create( pm.Location, pm.Map, EffectItem.DefaultDuration ), 0, 0, 0, 0, 0, 5060, 0 );
|
||||
Effects.PlaySound( pm.Location, pm.Map, 0x243 );
|
||||
|
||||
Effects.SendMovingParticles( new Entity( Server.Serial.Zero, new Point3D( pm.X - 6, pm.Y - 6, pm.Z + 15 ), pm.Map ), pm, 0x36D4, 7, 0, false, true, 0x497, 0, 9502, 1, 0, (EffectLayer)255, 0x100 );
|
||||
Effects.SendMovingParticles( new Entity( Server.Serial.Zero, new Point3D( pm.X - 4, pm.Y - 6, pm.Z + 15 ), pm.Map ), pm, 0x36D4, 7, 0, false, true, 0x497, 0, 9502, 1, 0, (EffectLayer)255, 0x100 );
|
||||
Effects.SendMovingParticles( new Entity( Server.Serial.Zero, new Point3D( pm.X - 6, pm.Y - 4, pm.Z + 15 ), pm.Map ), pm, 0x36D4, 7, 0, false, true, 0x497, 0, 9502, 1, 0, (EffectLayer)255, 0x100 );
|
||||
|
||||
Effects.SendTargetParticles( pm, 0x375A, 35, 90, 0x00, 0x00, 9502, (EffectLayer)255, 0x100 );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#region Patience
|
||||
|
||||
public class Patience : MLQuest
|
||||
{
|
||||
public override Type NextQuest { get { return typeof( NeedsOfTheManyHeartwood1 ); } }
|
||||
|
||||
public Patience()
|
||||
{
|
||||
Activated = true;
|
||||
Title = 1072753; // Patience
|
||||
Description = 1072762; // Learning to weave spells and control the forces of nature requires sacrifice, discipline, focus, and an unwavering dedication to Sosaria herself. We do not teach the unworthy. They do not comprehend the lessons nor the dedication required. If you would walk the path of the Arcanist, then you must do as I require without hesitation or question. Your first task is to gather miniature mushrooms ... 20 of them from the branches of our mighty home. I give you one hour to complete the task.
|
||||
RefusalMessage = 1072767; // *nods* Not everyone has the temperment to undertake the way of the Arcanist.
|
||||
InProgressMessage = 1072774; // The mushrooms I seek can be found growing here in The Heartwood. Seek them out and gather them. You are running out of time.
|
||||
CompletionMessage = 1074166; // Have you gathered the mushrooms?
|
||||
|
||||
Objectives.Add( new TimedCollectObjective( TimeSpan.FromHours( 1 ), 20, typeof( MiniatureMushroom ), "miniature mushrooms" ) );
|
||||
|
||||
Rewards.Add( new DummyReward( 1074872 ) ); // The opportunity to learn the ways of the Arcanist.
|
||||
}
|
||||
|
||||
public override void Generate()
|
||||
{
|
||||
base.Generate();
|
||||
|
||||
PutSpawner( new Spawner( 1, 5, 10, 0, 3, "Aeluva" ), new Point3D( 7064, 349, 0 ), Map.Felucca );
|
||||
PutSpawner( new Spawner( 1, 5, 10, 0, 3, "Aeluva" ), new Point3D( 7064, 349, 0 ), Map.Trammel );
|
||||
|
||||
// Split up to prevent stacking on the spawner
|
||||
PutSpawner( new Spawner( 20, TimeSpan.FromSeconds( 15 ), TimeSpan.FromSeconds( 30 ), 0, 30, "MiniatureMushroom" ), new Point3D( 7015, 366, 0 ), Map.Felucca );
|
||||
PutSpawner( new Spawner( 20, TimeSpan.FromSeconds( 15 ), TimeSpan.FromSeconds( 30 ), 0, 30, "MiniatureMushroom" ), new Point3D( 7015, 366, 0 ), Map.Trammel );
|
||||
|
||||
PutSpawner( new Spawner( 5, TimeSpan.FromSeconds( 15 ), TimeSpan.FromSeconds( 30 ), 0, 20, "MiniatureMushroom" ), new Point3D( 7081, 373, 0 ), Map.Felucca );
|
||||
PutSpawner( new Spawner( 5, TimeSpan.FromSeconds( 15 ), TimeSpan.FromSeconds( 30 ), 0, 20, "MiniatureMushroom" ), new Point3D( 7081, 373, 0 ), Map.Trammel );
|
||||
|
||||
PutSpawner( new Spawner( 15, TimeSpan.FromSeconds( 15 ), TimeSpan.FromSeconds( 30 ), 0, 20, "MiniatureMushroom" ), new Point3D( 7052, 414, 0 ), Map.Felucca );
|
||||
PutSpawner( new Spawner( 15, TimeSpan.FromSeconds( 15 ), TimeSpan.FromSeconds( 30 ), 0, 20, "MiniatureMushroom" ), new Point3D( 7052, 414, 0 ), Map.Trammel );
|
||||
}
|
||||
}
|
||||
|
||||
public class NeedsOfTheManyHeartwood1 : MLQuest
|
||||
{
|
||||
public override Type NextQuest { get { return typeof( NeedsOfTheManyHeartwood2 ); } }
|
||||
public override bool IsChainTriggered { get { return true; } }
|
||||
|
||||
public NeedsOfTheManyHeartwood1()
|
||||
{
|
||||
Activated = true;
|
||||
Title = 1072797; // Needs of the Many - The Heartwood
|
||||
Description = 1072763; // The way of the Arcanist involves cooperation with others and a strong committment to the community of your people. We have run low on the cotton we use to pack wounds and our people have need. Bring 10 bales of cotton to me.
|
||||
RefusalMessage = 1072768; // You endanger your progress along the path with your unwillingness.
|
||||
InProgressMessage = 1072775; // I care not where you acquire the cotton, merely that you provide it.
|
||||
CompletionMessage = 1074110; // Well, where are the cotton bales?
|
||||
|
||||
Objectives.Add( new CollectObjective( 10, typeof( Cotton ), 1023577 ) ); // bale of cotton
|
||||
|
||||
Rewards.Add( new DummyReward( 1074872 ) ); // The opportunity to learn the ways of the Arcanist.
|
||||
}
|
||||
}
|
||||
|
||||
public class NeedsOfTheManyHeartwood2 : MLQuest
|
||||
{
|
||||
public override Type NextQuest { get { return typeof( MakingAContributionHeartwood ); } }
|
||||
public override bool IsChainTriggered { get { return true; } }
|
||||
|
||||
public NeedsOfTheManyHeartwood2()
|
||||
{
|
||||
Activated = true;
|
||||
Title = 1072797; // Needs of the Many - The Heartwood
|
||||
Description = 1072764; // We must look to the defense of our people! Bring boards for new arrows.
|
||||
RefusalMessage = 1072769; // The people have need of these items. You are proving yourself inadequate to the demands of a member of this community.
|
||||
InProgressMessage = 1072776; // The requirements are simple -- 250 boards.
|
||||
CompletionMessage = 1074152; // Well, where are the boards?
|
||||
|
||||
Objectives.Add( new CollectObjective( 250, typeof( Board ), 1027127 ) ); // board
|
||||
|
||||
Rewards.Add( new DummyReward( 1074872 ) ); // The opportunity to learn the ways of the Arcanist.
|
||||
}
|
||||
}
|
||||
|
||||
public class MakingAContributionHeartwood : MLQuest
|
||||
{
|
||||
public override Type NextQuest { get { return typeof( UnnaturalCreations ); } }
|
||||
public override bool IsChainTriggered { get { return true; } }
|
||||
|
||||
public MakingAContributionHeartwood()
|
||||
{
|
||||
Activated = true;
|
||||
Title = 1072798; // Making a Contribution - The Heartwood
|
||||
Description = 1072765; // With health and defense assured, we need look to the need of the community for food and drink. We will feast on fish steaks, sweets, and wine. You will supply the ingredients, the cooks will prepare the meal. As a Arcanist relies upon others to build focus and lend their power to her workings, the community needs the effort of all to survive.
|
||||
RefusalMessage = 1072770; // Do not falter now. You have begun to show promise.
|
||||
InProgressMessage = 1072777; // Where are the items you've been tasked to supply for the feast?
|
||||
CompletionMessage = 1074158; // Ah good, you're back. We're eager for the feast.
|
||||
|
||||
Objectives.Add( new CollectObjective( 1, typeof( SackFlour ), 1024153 ) ); // sack of flour
|
||||
Objectives.Add( new CollectObjective( 10, typeof( JarHoney ), 1022540 ) ); // jar of honey
|
||||
Objectives.Add( new CollectObjective( 20, typeof( FishSteak ), 1022427 ) ); // fish steak
|
||||
|
||||
Rewards.Add( new DummyReward( 1074872 ) ); // The opportunity to learn the ways of the Arcanist.
|
||||
}
|
||||
}
|
||||
|
||||
public class UnnaturalCreations : MLQuest
|
||||
{
|
||||
public override bool IsChainTriggered { get { return true; } }
|
||||
|
||||
public UnnaturalCreations()
|
||||
{
|
||||
Activated = true;
|
||||
Title = 1072758; // Unnatural Creations
|
||||
Description = 1072780; // You have proven your desire to contribute to the community and serve the people. Now you must demonstrate your willingness to defend Sosaria from the greatest blight that plagues her. Unnatural creatures, brought to a sort of perverted life, despoil our fair world. Destroy them -- 5 Exodus Overseers and 2 Exodus Minions.
|
||||
RefusalMessage = 1072771; // You must serve Sosaria with all your heart and strength. Your unwillingness does not reflect favorably upon you.
|
||||
InProgressMessage = 1072779; // Every moment you procrastinate, these unnatural creatures damage Sosaria.
|
||||
CompletionMessage = 1074167; // Well done! Well done, indeed. You are worthy to become an arcanist!
|
||||
|
||||
Objectives.Add( new KillObjective( 5, new Type[] { typeof( ExodusOverseer ) }, "Exodus Overseers" ) );
|
||||
Objectives.Add( new KillObjective( 2, new Type[] { typeof( ExodusMinion ) }, "Exodus Minions" ) );
|
||||
|
||||
Rewards.Add( new ItemReward( 1031601, typeof( ArcaneCircleScroll ) ) ); // Arcane Circle
|
||||
Rewards.Add( new ItemReward( 1031600, typeof( SpellweavingBook ) ) ); // Spellweaving Spellbook
|
||||
Rewards.Add( new ItemReward( 1031602, typeof( GiftOfRenewalScroll ) ) ); // Gift of Renewal
|
||||
}
|
||||
|
||||
public override void GetRewards( MLQuestInstance instance )
|
||||
{
|
||||
Spellweaving.AwardTo( instance.Player );
|
||||
base.GetRewards( instance );
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Discipline
|
||||
|
||||
public class Discipline : MLQuest
|
||||
{
|
||||
public override Type NextQuest { get { return typeof( NeedsOfTheManySanctuary ); } }
|
||||
|
||||
public Discipline()
|
||||
{
|
||||
Activated = true;
|
||||
Title = 1072752; // Discipline
|
||||
Description = 1072761; // Learning to weave spells and control the forces of nature requires sacrifice, discipline, focus, and an unwavering dedication to Sosaria herself. We do not teach the unworthy. They do not comprehend the lessons nor the dedication required. If you would walk the path of the Arcanist, then you must do as I require without hesitation or question. Your first task is to rid our home of rats ... 50 of them in the next hour.
|
||||
RefusalMessage = 1072767; // *nods* Not everyone has the temperment to undertake the way of the Arcanist.
|
||||
InProgressMessage = 1072773; // You waste my time. The task is simple. Kill 50 rats in an hour.
|
||||
// No completion message
|
||||
|
||||
Objectives.Add( new TimedKillObjective( TimeSpan.FromHours( 1 ), 50, new Type[] { typeof( Rat ) }, "rats", new QuestArea( 1074807, "Sanctuary" ) ) ); // Sanctuary
|
||||
|
||||
Rewards.Add( new DummyReward( 1074872 ) ); // The opportunity to learn the ways of the Arcanist.
|
||||
}
|
||||
|
||||
public override void Generate()
|
||||
{
|
||||
base.Generate();
|
||||
|
||||
PutSpawner( new Spawner( 1, 5, 10, 0, 0, "Koole" ), new Point3D( 6257, 110, -10 ), Map.Felucca );
|
||||
PutSpawner( new Spawner( 1, 5, 10, 0, 0, "Koole" ), new Point3D( 6257, 110, -10 ), Map.Trammel );
|
||||
}
|
||||
}
|
||||
|
||||
public class NeedsOfTheManySanctuary : MLQuest
|
||||
{
|
||||
public override Type NextQuest { get { return typeof( MakingAContributionSanctuary ); } }
|
||||
public override bool IsChainTriggered { get { return true; } }
|
||||
|
||||
public NeedsOfTheManySanctuary()
|
||||
{
|
||||
Activated = true;
|
||||
Title = 1072754; // Needs of the Many - Sanctuary
|
||||
Description = 1072763; // The way of the Arcanist involves cooperation with others and a strong committment to the community of your people. We have run low on the cotton we use to pack wounds and our people have need. Bring 10 bales of cotton to me.
|
||||
RefusalMessage = 1072768; // You endanger your progress along the path with your unwillingness.
|
||||
InProgressMessage = 1072775; // I care not where you acquire the cotton, merely that you provide it.
|
||||
CompletionMessage = 1074110; // Well, where are the cotton bales?
|
||||
|
||||
Objectives.Add( new CollectObjective( 10, typeof( Cotton ), 1023577 ) ); // bale of cotton
|
||||
|
||||
Rewards.Add( new DummyReward( 1074872 ) ); // The opportunity to learn the ways of the Arcanist.
|
||||
}
|
||||
}
|
||||
|
||||
public class MakingAContributionSanctuary : MLQuest
|
||||
{
|
||||
public override Type NextQuest { get { return typeof( SuppliesForSanctuary ); } }
|
||||
public override bool IsChainTriggered { get { return true; } }
|
||||
|
||||
public MakingAContributionSanctuary()
|
||||
{
|
||||
Activated = true;
|
||||
Title = 1072755; // Making a Contribution - Sanctuary
|
||||
Description = 1072764; // We must look to the defense of our people! Bring boards for new arrows.
|
||||
RefusalMessage = 1072769; // The people have need of these items. You are proving yourself inadequate to the demands of a member of this community.
|
||||
InProgressMessage = 1072776; // The requirements are simple -- 250 boards.
|
||||
CompletionMessage = 1074152; // Well, where are the boards?
|
||||
|
||||
Objectives.Add( new CollectObjective( 250, typeof( Board ), 1027127 ) ); // board
|
||||
|
||||
Rewards.Add( new DummyReward( 1074872 ) ); // The opportunity to learn the ways of the Arcanist.
|
||||
}
|
||||
}
|
||||
|
||||
public class SuppliesForSanctuary : MLQuest
|
||||
{
|
||||
public override Type NextQuest { get { return typeof( TheHumanBlight ); } }
|
||||
public override bool IsChainTriggered { get { return true; } }
|
||||
|
||||
public SuppliesForSanctuary()
|
||||
{
|
||||
Activated = true;
|
||||
Title = 1072756; // Supplies for Sanctuary
|
||||
Description = 1072765; // With health and defense assured, we need look to the need of the community for food and drink. We will feast on fish steaks, sweets, and wine. You will supply the ingredients, the cooks will prepare the meal. As a Arcanist relies upon others to build focus and lend their power to her workings, the community needs the effort of all to survive.
|
||||
RefusalMessage = 1072770; // Do not falter now. You have begun to show promise.
|
||||
InProgressMessage = 1072777; // Where are the items you've been tasked to supply for the feast?
|
||||
CompletionMessage = 1074158; // Ah good, you're back. We're eager for the feast.
|
||||
|
||||
Objectives.Add( new CollectObjective( 1, typeof( SackFlour ), 1024153 ) ); // sack of flour
|
||||
Objectives.Add( new CollectObjective( 10, typeof( JarHoney ), 1022540 ) ); // jar of honey
|
||||
Objectives.Add( new CollectObjective( 20, typeof( FishSteak ), 1022427 ) ); // fish steak
|
||||
|
||||
Rewards.Add( new DummyReward( 1074872 ) ); // The opportunity to learn the ways of the Arcanist.
|
||||
}
|
||||
}
|
||||
|
||||
public class TheHumanBlight : MLQuest
|
||||
{
|
||||
public override bool IsChainTriggered { get { return true; } }
|
||||
|
||||
public TheHumanBlight()
|
||||
{
|
||||
Activated = true;
|
||||
Title = 1072757; // The Human Blight
|
||||
Description = 1072766; // You have proven your desire to contribute to the community and serve the people. Now you must demonstrate your willingness to defend Sosaria from the greatest blight that plagues her. The human vermin that have spread as a disease, despoiling the land are the greatest blight we face. Kill humans and return to me the proof of your actions. Bring me 30 human ears.
|
||||
RefusalMessage = 1072771; // You must serve Sosaria with all your heart and strength. Your unwillingness does not reflect favorably upon you.
|
||||
InProgressMessage = 1072778; // Why do you delay? The human blight must be averted.
|
||||
CompletionMessage = 1074160; // I will take the ears you have collected now. Hand them here.
|
||||
|
||||
Objectives.Add( new CollectObjective( 30, typeof( SeveredHumanEars ), 1032591 ) ); // severed human ears
|
||||
|
||||
Rewards.Add( new ItemReward( 1031601, typeof( ArcaneCircleScroll ) ) ); // Arcane Circle
|
||||
Rewards.Add( new ItemReward( 1031600, typeof( SpellweavingBook ) ) ); // Spellweaving Spellbook
|
||||
Rewards.Add( new ItemReward( 1031602, typeof( GiftOfRenewalScroll ) ) ); // Gift of Renewal
|
||||
}
|
||||
|
||||
public override void GetRewards( MLQuestInstance instance )
|
||||
{
|
||||
Spellweaving.AwardTo( instance.Player );
|
||||
base.GetRewards( instance );
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Friend of the Fey
|
||||
|
||||
public class FriendOfTheFey : MLQuest
|
||||
{
|
||||
public override Type NextQuest { get { return typeof( TokenOfFriendship ); } }
|
||||
|
||||
public FriendOfTheFey()
|
||||
{
|
||||
Activated = true;
|
||||
Title = 1074284; // Friend of the Fey
|
||||
Description = 1074286; // The children of Sosaria understand the dedication and committment of an arcanist -- and will, from time to time offer their friendship. If you would forge such a bond, first seek out a goodwill offering to present. Pixies enjoy sweets and pretty things.
|
||||
RefusalMessage = 1074288; // There's always time to make new friends.
|
||||
InProgressMessage = 1074290; // I think honey and some sparkly beads would please a pixie.
|
||||
CompletionMessage = 1074292; // What have we here? Oh yes, gifts for a pixie.
|
||||
|
||||
Objectives.Add( new CollectObjective( 1, typeof( Beads ), 1024235 ) ); // beads
|
||||
Objectives.Add( new CollectObjective( 1, typeof( JarHoney ), 1022540 ) ); // jar of honey
|
||||
|
||||
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)
|
||||
}
|
||||
|
||||
public override void Generate()
|
||||
{
|
||||
base.Generate();
|
||||
|
||||
PutSpawner( new Spawner( 1, 5, 10, 0, 3, "Synaeva" ), new Point3D( 7064, 350, 0 ), Map.Felucca );
|
||||
PutSpawner( new Spawner( 1, 5, 10, 0, 3, "Synaeva" ), new Point3D( 7064, 350, 0 ), Map.Trammel );
|
||||
}
|
||||
}
|
||||
|
||||
public class TokenOfFriendship : MLQuest
|
||||
{
|
||||
public override Type NextQuest { get { return typeof( Alliance ); } }
|
||||
public override bool IsChainTriggered { get { return true; } }
|
||||
|
||||
public TokenOfFriendship()
|
||||
{
|
||||
Activated = true;
|
||||
Title = 1074293; // Token of Friendship
|
||||
Description = 1074297; // I've wrapped your gift suitably to present to a pixie of discriminating taste. Seek out Arielle and give her your offering.
|
||||
RefusalMessage = 1074310; // I'll hold onto this gift in case you change your mind.
|
||||
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" ) );
|
||||
|
||||
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)
|
||||
}
|
||||
}
|
||||
|
||||
public class Alliance : MLQuest
|
||||
{
|
||||
public override bool IsChainTriggered { get { return true; } }
|
||||
|
||||
public Alliance()
|
||||
{
|
||||
Activated = true;
|
||||
Title = 1074294; // Alliance
|
||||
Description = 1074298; // *giggle* Mean reapers make pixies unhappy. *light-hearted giggle* You could fix them!
|
||||
RefusalMessage = 1074311; // *giggle* Okies!
|
||||
InProgressMessage = 1074316; // Mean reapers are all around trees! *giggle* You fix them up, please.
|
||||
|
||||
Objectives.Add( new KillObjective( 20, new Type[] { typeof( Reaper ) }, "reapers" ) );
|
||||
|
||||
Rewards.Add( new ItemReward( 1031607, typeof( SummonFeyScroll ) ) ); // Summon Fey
|
||||
}
|
||||
|
||||
public override void OnComplete( MLQuestInstance instance )
|
||||
{
|
||||
instance.Player.SendLocalizedMessage( 1073775, "", 0x23 ); // Your quest is complete. Return for your reward.
|
||||
}
|
||||
|
||||
public override void GetRewards( MLQuestInstance instance )
|
||||
{
|
||||
instance.PlayerContext.SummonFey = true;
|
||||
instance.Player.SendLocalizedMessage( 1074320, "", 0x2A ); // *giggle* Mean reapers got fixed! Pixie friend now! *giggle* When mean thingies bother you, a brave pixie will help.
|
||||
|
||||
base.GetRewards( instance );
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Fiendish Friends
|
||||
|
||||
public class FiendishFriends : MLQuest
|
||||
{
|
||||
public override Type NextQuest { get { return typeof( CrackingTheWhipI ); } }
|
||||
|
||||
public FiendishFriends()
|
||||
{
|
||||
Activated = true;
|
||||
Title = 1074283; // Fiendish Friends
|
||||
Description = 1074285; // It is true that a skilled arcanist can summon and dominate an imp to serve at their pleasure. To do such at thing though, you must master the miserable little fiends utterly by demonstrating your superiority. Rough them up some -- kill a few. That will do the trick.
|
||||
RefusalMessage = 1074287; // You're probably right. They're not worth the effort.
|
||||
InProgressMessage = 1074289; // Surely you're not having difficulties swatting down those annoying pests?
|
||||
// TODO: Verify
|
||||
CompletionMessage = 1074291; // Hah! You showed them!
|
||||
|
||||
Objectives.Add( new KillObjective( 50, new Type[] { typeof( Imp ) }, "imps" ) );
|
||||
|
||||
Rewards.Add( new DummyReward( 1074873 ) ); // The opportunity to prove yourself worthy of learning to Summon Fiends. (Sufficient spellweaving skill is required to cast the spell)
|
||||
}
|
||||
|
||||
public override void Generate()
|
||||
{
|
||||
base.Generate();
|
||||
|
||||
PutSpawner( new Spawner( 1, 5, 10, 0, 0, "ElderBrae" ), new Point3D( 6266, 124, 0 ), Map.Felucca );
|
||||
PutSpawner( new Spawner( 1, 5, 10, 0, 0, "ElderBrae" ), new Point3D( 6266, 124, 0 ), Map.Trammel );
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: Verify
|
||||
public class CrackingTheWhipI : MLQuest
|
||||
{
|
||||
public override Type NextQuest { get { return typeof( CrackingTheWhipII ); } }
|
||||
public override bool IsChainTriggered { get { return true; } }
|
||||
|
||||
public CrackingTheWhipI()
|
||||
{
|
||||
Activated = true;
|
||||
Title = 1074295; // Cracking the Whip
|
||||
Description = 1074300; // Now that you've shown those mini pests your might, you should collect suitable implements to use to train your summoned pet. I suggest a stout whip.
|
||||
RefusalMessage = 1074313; // Heh. Changed your mind, eh?
|
||||
InProgressMessage = 1074317; // Well, hurry up. If you don't get a whip how do you expect to control the little devil?
|
||||
CompletionMessage = 1074321; // That's a well-made whip. No imp will ignore the sting of that lash.
|
||||
|
||||
Objectives.Add( new CollectObjective( 1, typeof( StoutWhip ), "Stout Whip" ) );
|
||||
|
||||
Rewards.Add( new DummyReward( 1074873 ) ); // The opportunity to prove yourself worthy of learning to Summon Fiends. (Sufficient spellweaving skill is required to cast the spell)
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: Verify
|
||||
public class CrackingTheWhipII : MLQuest
|
||||
{
|
||||
public override bool IsChainTriggered { get { return true; } }
|
||||
|
||||
public CrackingTheWhipII()
|
||||
{
|
||||
Activated = true;
|
||||
Title = 1074295; // Cracking the Whip
|
||||
Description = 1074302; // Now you just need to make the little buggers fear you -- if you can slay an arcane daemon, you'll earn their subservience.
|
||||
RefusalMessage = 1074314; // If you're not up for it, so be it.
|
||||
InProgressMessage = 1074318; // You need to vanquish an arcane daemon before the imps will fear you properly.
|
||||
|
||||
Objectives.Add( new KillObjective( 1, new Type[] { typeof( ArcaneDaemon ) }, 1029733 ) ); // arcane demon
|
||||
|
||||
Rewards.Add( new ItemReward( 1031608, typeof( SummonFiendScroll ) ) ); // Summon Fiend
|
||||
}
|
||||
|
||||
public override void GetRewards( MLQuestInstance instance )
|
||||
{
|
||||
instance.PlayerContext.SummonFiend = true;
|
||||
instance.Player.SendLocalizedMessage( 1074322, "", 0x2A ); // You've demonstrated your strength, got a means of control, and taught the imps to fear you. You're ready now to summon them.
|
||||
|
||||
base.GetRewards( instance );
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Mobiles
|
||||
|
||||
public class Aeluva : BaseCreature
|
||||
{
|
||||
public override bool IsInvulnerable { get { return true; } }
|
||||
public override bool CanTeach { get { return true; } }
|
||||
|
||||
public override bool CanShout { get { return true; } }
|
||||
public override void Shout( PlayerMobile pm )
|
||||
{
|
||||
/*
|
||||
* 1074206 - Excuse me please traveler, might I have a little of your time?
|
||||
* 1074207 - Good day to you friend! Allow me to offer you a fabulous opportunity! Thrills and adventure await!
|
||||
*/
|
||||
MLQuestSystem.Tell( this, pm, Utility.Random( 1074206, 2 ) );
|
||||
}
|
||||
|
||||
[Constructable]
|
||||
public Aeluva()
|
||||
: base( AIType.AI_Vendor, FightMode.None, 2, 1, 0.5, 2.0 )
|
||||
{
|
||||
Name = "Aeluva";
|
||||
Title = "the arcanist";
|
||||
Race = Race.Elf;
|
||||
Female = true;
|
||||
Body = 606;
|
||||
Hue = Race.RandomSkinHue();
|
||||
InitStats( 100, 100, 25 );
|
||||
|
||||
Utility.AssignRandomHair( this, true );
|
||||
|
||||
SetSkill( SkillName.Meditation, 60.0, 80.0 );
|
||||
SetSkill( SkillName.Focus, 60.0, 80.0 );
|
||||
|
||||
AddItem( new ElvenShirt() );
|
||||
AddItem( new Kilt( Utility.RandomNondyedHue() ) ); // Note: OSI hue = 0x1516, typo?
|
||||
AddItem( new ElvenBoots() );
|
||||
AddItem( new Circlet() );
|
||||
}
|
||||
|
||||
public Aeluva( 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();
|
||||
}
|
||||
}
|
||||
|
||||
public class Koole : BaseCreature
|
||||
{
|
||||
public override bool IsInvulnerable { get { return true; } }
|
||||
public override bool CanTeach { get { return true; } }
|
||||
|
||||
public override bool CanShout { get { return true; } }
|
||||
public override void Shout( PlayerMobile pm )
|
||||
{
|
||||
MLQuestSystem.Tell( this, pm, Utility.RandomList(
|
||||
1074186, // Come here, I have a task.
|
||||
1074218 // Hey! I want to talk to you, now.
|
||||
) );
|
||||
}
|
||||
|
||||
[Constructable]
|
||||
public Koole()
|
||||
: base( AIType.AI_Vendor, FightMode.None, 2, 1, 0.5, 2.0 )
|
||||
{
|
||||
Name = "Koole";
|
||||
Title = "the arcanist";
|
||||
Race = Race.Elf;
|
||||
Body = 605;
|
||||
Hue = Race.RandomSkinHue();
|
||||
InitStats( 100, 100, 25 );
|
||||
|
||||
Utility.AssignRandomHair( this, true );
|
||||
|
||||
SetSkill( SkillName.Meditation, 60.0, 80.0 );
|
||||
SetSkill( SkillName.Focus, 60.0, 80.0 );
|
||||
|
||||
Item item;
|
||||
|
||||
item = new LeafChest();
|
||||
item.Hue = 443;
|
||||
AddItem( item );
|
||||
|
||||
item = new LeafArms();
|
||||
item.Hue = 443;
|
||||
AddItem( item );
|
||||
|
||||
AddItem( new LeafTonlet() );
|
||||
AddItem( new ThighBoots( Utility.RandomAnimalHue() ) );
|
||||
AddItem( new RoyalCirclet() );
|
||||
}
|
||||
|
||||
public Koole( 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();
|
||||
}
|
||||
}
|
||||
|
||||
public class Synaeva : BaseCreature
|
||||
{
|
||||
public override bool IsInvulnerable { get { return true; } }
|
||||
public override bool CanTeach { get { return true; } }
|
||||
|
||||
public override bool CanShout { get { return true; } }
|
||||
public override void Shout( PlayerMobile pm )
|
||||
{
|
||||
MLQuestSystem.Tell( this, pm, 1074223 ); // Have you done it yet? Oh, I haven’t told you, have I?
|
||||
}
|
||||
|
||||
[Constructable]
|
||||
public Synaeva()
|
||||
: base( AIType.AI_Vendor, FightMode.None, 2, 1, 0.5, 2.0 )
|
||||
{
|
||||
Name = "Synaeva";
|
||||
Title = "the arcanist";
|
||||
Race = Race.Elf;
|
||||
Female = true;
|
||||
Body = 606;
|
||||
Hue = Race.RandomSkinHue();
|
||||
InitStats( 100, 100, 25 );
|
||||
|
||||
Utility.AssignRandomHair( this, true );
|
||||
|
||||
SetSkill( SkillName.Meditation, 60.0, 80.0 );
|
||||
SetSkill( SkillName.Focus, 60.0, 80.0 );
|
||||
|
||||
Item item = new RavenHelm();
|
||||
item.Hue = Utility.RandomGreenHue();
|
||||
AddItem( item );
|
||||
|
||||
AddItem( new FemaleLeafChest() );
|
||||
AddItem( new LeafArms() );
|
||||
AddItem( new LeafTonlet() );
|
||||
AddItem( new ElvenBoots() );
|
||||
AddItem( new WildStaff() );
|
||||
}
|
||||
|
||||
public Synaeva( 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();
|
||||
}
|
||||
}
|
||||
|
||||
public class ElderBrae : BaseCreature
|
||||
{
|
||||
public override bool IsInvulnerable { get { return true; } }
|
||||
public override bool CanTeach { get { return true; } }
|
||||
|
||||
public override bool CanShout { get { return true; } }
|
||||
public override void Shout( PlayerMobile pm )
|
||||
{
|
||||
MLQuestSystem.Tell( this, pm, Utility.RandomList(
|
||||
1074215, // Don’t test my patience you sniveling worm!
|
||||
1074218 // Hey! I want to talk to you, now.
|
||||
) );
|
||||
}
|
||||
|
||||
[Constructable]
|
||||
public ElderBrae()
|
||||
: base( AIType.AI_Vendor, FightMode.None, 2, 1, 0.5, 2.0 )
|
||||
{
|
||||
Name = "Elder Brae";
|
||||
Title = "the wise";
|
||||
Race = Race.Elf;
|
||||
Female = true;
|
||||
Body = 606;
|
||||
Hue = Race.RandomSkinHue();
|
||||
InitStats( 100, 100, 25 );
|
||||
|
||||
Utility.AssignRandomHair( this, true );
|
||||
|
||||
SetSkill( SkillName.Meditation, 60.0, 80.0 );
|
||||
SetSkill( SkillName.Focus, 60.0, 80.0 );
|
||||
|
||||
AddItem( new GemmedCirclet() );
|
||||
AddItem( new FemaleElvenRobe( Utility.RandomBrightHue() ) );
|
||||
AddItem( new ElvenBoots( Utility.RandomAnimalHue() ) );
|
||||
}
|
||||
|
||||
public ElderBrae( 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
|
||||
}
|
||||
159
Scripts/Engines/MLQuests/Definitions/TheAncientWorld.cs
Normal file
159
Scripts/Engines/MLQuests/Definitions/TheAncientWorld.cs
Normal file
|
|
@ -0,0 +1,159 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Server;
|
||||
using Server.ContextMenus;
|
||||
using Server.Engines.MLQuests.Objectives;
|
||||
using Server.Engines.MLQuests.Rewards;
|
||||
using Server.Items;
|
||||
using Server.Misc;
|
||||
using Server.Mobiles;
|
||||
|
||||
namespace Server.Engines.MLQuests.Definitions
|
||||
{
|
||||
#region Quests
|
||||
|
||||
public class TheAncientWorld : MLQuest
|
||||
{
|
||||
public override Type NextQuest { get { return typeof( TheGoldenHorn ); } }
|
||||
|
||||
public TheAncientWorld()
|
||||
{
|
||||
Activated = true;
|
||||
Title = 1074534; // The Ancient World
|
||||
Description = 1074535; // The lore of my people mentions Mondain many times. In one tale, it is revealed that he created and enslaved a race -- a sort of man bull, known as a 'minotaur'. The tales speak of mighty warriors who charged with blood-soaked horns into the heat of battle. But, alas, the fate of the bull-men is unknown after the rupture. Will you seek information about their civilization?
|
||||
RefusalMessage = 1074538; // I am disappointed, but I respect your decision.
|
||||
InProgressMessage = 1074539; // A traveler has told me that worshippers of Mondain still exist and wander the land. Perhaps their lore speaks of whether the bull-men survived. I do not think they share their secrets gladly. You may need to be 'persuasive'.
|
||||
CompletionMessage = 1074542; // What have you found?
|
||||
|
||||
Objectives.Add( new CollectObjective( 1, typeof( FragmentOfAMap ), "fragment of a map" ) );
|
||||
|
||||
Rewards.Add( new DummyReward( 1074876 ) ); // Knowledge of the legendary minotaur.
|
||||
}
|
||||
|
||||
public override void Generate()
|
||||
{
|
||||
base.Generate();
|
||||
|
||||
PutSpawner( new Spawner( 1, 5, 10, 0, 5, "LorekeeperBroolol" ), new Point3D( 7011, 375, 0 ), Map.Trammel );
|
||||
PutSpawner( new Spawner( 1, 5, 10, 0, 5, "LorekeeperBroolol" ), new Point3D( 7011, 375, 0 ), Map.Felucca );
|
||||
}
|
||||
}
|
||||
|
||||
public class TheGoldenHorn : MLQuest
|
||||
{
|
||||
public override Type NextQuest { get { return typeof( Bullish ); } }
|
||||
public override bool IsChainTriggered { get { return true; } }
|
||||
|
||||
public TheGoldenHorn()
|
||||
{
|
||||
Activated = true;
|
||||
Title = 1074543; // The Golden Horn
|
||||
Description = 1074545; // Ah ha! You see here ... and over here ... The map fragment places the city of the bull-men, Labyrinth, on that piece of Sosaria that was thrown into the sky. Hmmm, I would have you go there and find any artifacts that remain that help tell the story. But, legend speaks of a mighty barrier to prevent invasion of the city. Take this map to Braen and explain the problem. Perhaps he can devise a solution.
|
||||
RefusalMessage = 1074538; // I am disappointed, but I respect your decision.
|
||||
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)" ) );
|
||||
|
||||
Rewards.Add( new DummyReward( 1074876 ) ); // Knowledge of the legendary minotaur.
|
||||
}
|
||||
}
|
||||
|
||||
public class Bullish : MLQuest
|
||||
{
|
||||
public override Type NextQuest { get { return typeof( LostCivilization ); } }
|
||||
public override bool IsChainTriggered { get { return true; } }
|
||||
|
||||
public Bullish()
|
||||
{
|
||||
Activated = true;
|
||||
Title = 1074550; // Bullish
|
||||
Description = 1074552; // Oh, I see. I will need some materials to infuse you with the essence of a bull-man, so you can fool their defenses. The most similar beast to the original Baratarian bull that the minotaur were bred from is undoubtedly the mighty Gaman, native to the Lands of the Feudal Lords. I need horns, in great quantity to undertake this magic.
|
||||
RefusalMessage = 1074554; // Oh come now, don't be afraid. The magic won't harm you.
|
||||
InProgressMessage = 1074555; // I cannot grant you the ability to pass through the bull-men's defenses without the gaman horns.
|
||||
CompletionMessage = 1074556; // You've returned at last! Give me just a moment to examine what you've brought and I can perform the magic that will allow you enter the Labyrinth.
|
||||
|
||||
Objectives.Add( new CollectObjective( 20, typeof( GamanHorns ), "gaman horns" ) );
|
||||
|
||||
Rewards.Add( new DummyReward( 1074876 ) ); // Knowledge of the legendary minotaur.
|
||||
}
|
||||
}
|
||||
|
||||
public class LostCivilization : MLQuest
|
||||
{
|
||||
public override bool IsChainTriggered { get { return true; } }
|
||||
|
||||
public LostCivilization()
|
||||
{
|
||||
Activated = true;
|
||||
Title = 1074823; // Lost Civilization
|
||||
Description = 1074825; // *whew* It is done! The fierce essence of the bull has been infused into your aura. You are able now to breach the ancient defenses of the city. Go forth and seek the minotaur -- and then return with wonderous tales and evidence of your visit to the Labyrinth.
|
||||
RefusalMessage = 1074827; // As you wish. I can't understand why you'd pass up such a remarkable opportunity. Think of the adventures you would have.
|
||||
InProgressMessage = 1074828; // You won't reach the minotaur city by loitering around here! What are you waiting for? You need to get to Malas and find the access point for the island. You'll be renowned for your discovery!
|
||||
CompletionMessage = 1074829; // Oh! You've returned at last! I can't wait to hear the tales ... but first, let me see those artifacts. You've certainly earned this reward.
|
||||
|
||||
Objectives.Add( new CollectObjective( 3, typeof( MinotaurArtifact ), "minotaur artifacts" ) );
|
||||
|
||||
Rewards.Add( ItemReward.Strongbox );
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Mobiles
|
||||
|
||||
public class LorekeeperBroolol : BaseCreature
|
||||
{
|
||||
public override bool IsInvulnerable { get { return true; } }
|
||||
public override bool CanTeach { get { return true; } }
|
||||
|
||||
public override bool CanShout { get { return true; } }
|
||||
public override void Shout( PlayerMobile pm )
|
||||
{
|
||||
MLQuestSystem.Tell( this, pm, 1074200 ); // Thank goodness you are here, there’s no time to lose.
|
||||
}
|
||||
|
||||
[Constructable]
|
||||
public LorekeeperBroolol()
|
||||
: base( AIType.AI_Vendor, FightMode.None, 2, 1, 0.5, 2 )
|
||||
{
|
||||
Name = "Lorekeeper Broolol";
|
||||
Title = "the keeper of tradition";
|
||||
Race = Race.Elf;
|
||||
BodyValue = 0x25E;
|
||||
Female = true;
|
||||
Hue = Race.RandomSkinHue();
|
||||
InitStats( 100, 100, 25 );
|
||||
|
||||
Utility.AssignRandomHair( this, true );
|
||||
|
||||
SetSkill( SkillName.Meditation, 60.0, 80.0 );
|
||||
SetSkill( SkillName.Focus, 60.0, 80.0 );
|
||||
|
||||
AddItem( new ElvenBoots( 0x70D ) );
|
||||
AddItem( new FemaleElvenRobe( 0x3A ) );
|
||||
AddItem( new WildStaff() );
|
||||
}
|
||||
|
||||
public LorekeeperBroolol( 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
|
||||
}
|
||||
131
Scripts/Engines/MLQuests/Definitions/TownEscorts.cs
Normal file
131
Scripts/Engines/MLQuests/Definitions/TownEscorts.cs
Normal file
|
|
@ -0,0 +1,131 @@
|
|||
using System;
|
||||
using Server;
|
||||
using Server.Engines.MLQuests.Objectives;
|
||||
using Server.Engines.MLQuests.Rewards;
|
||||
using Server.Items;
|
||||
|
||||
namespace Server.Engines.MLQuests.Definitions
|
||||
{
|
||||
public class TownEscort : BaseEscort
|
||||
{
|
||||
// Escort reward
|
||||
private static readonly BaseReward m_Reward = new ItemReward( "Gold", typeof( Gold ), 500 );
|
||||
|
||||
public TownEscort( int title, int progress, int destination, string region )
|
||||
{
|
||||
Activated = true;
|
||||
Title = title;
|
||||
Description = 1072287; // I seek a worthy escort. I can offer some small pay to any able bodied adventurer who can assist me. It is imperative that I reach my destination.
|
||||
RefusalMessage = 1072288; // I wish you would reconsider my offer. I'll be waiting right here for someone brave enough to assist me.
|
||||
InProgressMessage = progress;
|
||||
|
||||
Objectives.Add( new EscortObjective( new QuestArea( destination, region ) ) );
|
||||
|
||||
Rewards.Add( m_Reward );
|
||||
}
|
||||
}
|
||||
|
||||
public class EscortToYew : TownEscort
|
||||
{
|
||||
public EscortToYew()
|
||||
: base( 1072275, 1072289, 1072227, "Yew" )
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
public class EscortToVesper : TownEscort
|
||||
{
|
||||
public EscortToVesper()
|
||||
: base( 1072276, 1072290, 1072229, "Vesper" )
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
public class EscortToTrinsic : TownEscort
|
||||
{
|
||||
public EscortToTrinsic()
|
||||
: base( 1072277, 1072291, 1072236, "Trinsic" )
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
public class EscortToSkaraBrae : TownEscort
|
||||
{
|
||||
public EscortToSkaraBrae()
|
||||
: base( 1072278, 1072292, 1072235, "Skara Brae" )
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
public class EscortToSerpentsHold : TownEscort
|
||||
{
|
||||
public EscortToSerpentsHold()
|
||||
: base( 1072279, 1072293, 1072238, "Serpent's Hold" )
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
public class EscortToNujelm : TownEscort
|
||||
{
|
||||
public EscortToNujelm()
|
||||
: base( 1072280, 1072294, 1072237, "Nujel'm" )
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
public class EscortToMoonglow : TownEscort
|
||||
{
|
||||
public EscortToMoonglow()
|
||||
: base( 1072281, 1072295, 1072232, "Moonglow" )
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
public class EscortToMinoc : TownEscort
|
||||
{
|
||||
public EscortToMinoc()
|
||||
: base( 1072282, 1072296, 1072228, "Minoc" )
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
public class EscortToMagincia : TownEscort
|
||||
{
|
||||
public EscortToMagincia()
|
||||
: base( 1072283, 1072297, 1072233, "Magincia" )
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
public class EscortToJhelom : TownEscort
|
||||
{
|
||||
public EscortToJhelom()
|
||||
: base( 1072284, 1072298, 1072239, "Jhelom" )
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
public class EscortToCove : TownEscort
|
||||
{
|
||||
public EscortToCove()
|
||||
: base( 1072285, 1072299, 1072230, "Cove" )
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
public class EscortToBritain : TownEscort
|
||||
{
|
||||
public EscortToBritain()
|
||||
: base( 1072286, 1072300, 1072231, "Britain" )
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
public class EscortToOcllo : TownEscort
|
||||
{
|
||||
public EscortToOcllo()
|
||||
: base( 1072312, 1072313, 1072234, "Ocllo" )
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
201
Scripts/Engines/MLQuests/Definitions/UnfadingMemories.cs
Normal file
201
Scripts/Engines/MLQuests/Definitions/UnfadingMemories.cs
Normal file
|
|
@ -0,0 +1,201 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Server;
|
||||
using Server.ContextMenus;
|
||||
using Server.Engines.MLQuests.Objectives;
|
||||
using Server.Engines.MLQuests.Rewards;
|
||||
using Server.Items;
|
||||
using Server.Misc;
|
||||
using Server.Mobiles;
|
||||
|
||||
namespace Server.Engines.MLQuests.Definitions
|
||||
{
|
||||
#region Quests
|
||||
|
||||
public class UnfadingMemoriesPartOne : MLQuest
|
||||
{
|
||||
public override Type NextQuest { get { return typeof( UnfadingMemoriesPartTwo ); } }
|
||||
|
||||
public UnfadingMemoriesPartOne()
|
||||
{
|
||||
Activated = true;
|
||||
OneTimeOnly = true; // TODO: Similar issue as Aemaeth, part one may be taken while part three is not finished
|
||||
Title = 1075355; // Unfading Memories
|
||||
Description = 1075356; // Aargh! It’s just not right! It doesn’t capture the unique color of her hair at all! If only I had some Prismatic Amber. That would be perfect. They used to mine it in Malas, but alas, those veins ran dry some time ago. I hear it may have been found in the Prism of Light. Oh, if only there were a bold adventurer within earshot who would go to the Prism of Light and retrieve some for me!
|
||||
RefusalMessage = 1075358; // Is there no one who can help a humble artist pursue his Muse?
|
||||
InProgressMessage = 1075359; // You can find Prismatic Amber in the Prism of Light, located just north of the city of Nujel'm.
|
||||
CompletionMessage = 1075360; // I knew it! See, it’s just the color I needed! Look how it brings out the highlights of her wheaten tresses!
|
||||
|
||||
Objectives.Add( new CollectObjective( 1, typeof( PrismaticAmber ), "Prismatic Amber" ) );
|
||||
|
||||
Rewards.Add( new DummyReward( 1075357 ) ); // The joy of contributing to a noble artistic effort, however paltry the end product.
|
||||
}
|
||||
|
||||
public override void OnComplete( MLQuestInstance instance )
|
||||
{
|
||||
instance.Player.SendLocalizedMessage( 1046258, "", 0x23 ); // Your quest is complete.
|
||||
}
|
||||
|
||||
public override void Generate()
|
||||
{
|
||||
base.Generate();
|
||||
|
||||
PutSpawner( new Spawner( 1, 5, 10, 0, 3, "Emilio" ), new Point3D( 1447, 1664, 10 ), Map.Trammel );
|
||||
PutSpawner( new Spawner( 1, 5, 10, 0, 3, "Emilio" ), new Point3D( 1447, 1664, 10 ), Map.Felucca );
|
||||
}
|
||||
}
|
||||
|
||||
public class UnfadingMemoriesPartTwo : MLQuest
|
||||
{
|
||||
public override Type NextQuest { get { return typeof( UnfadingMemoriesPartThree ); } }
|
||||
public override bool IsChainTriggered { get { return true; } }
|
||||
|
||||
public UnfadingMemoriesPartTwo()
|
||||
{
|
||||
Activated = true;
|
||||
Title = 1075367; // Unfading Memories
|
||||
Description = 1075368; // Finished! With the pigment I was able to create from the Prismatic Amber you brought me, I was able to complete my humble work. I should explain. Once, I loved a noble lady of gentleness and refinement, who possessed such beauty that I have found myself unable to love another to this day. But it was from afar that I admired her, for it is not for one so lowly as I to pay court to the likes of her. You have heard of the fair Thalia, Lady of Nujel'm? No? Well, she was my Muse, my inspiration, and when I heard she was to be married, I lost whatever pitiful talent I possessed. I felt I must compose a portrait of her, my masterpiece, or I would never be able to paint again. You, my friend, have helped me complete my work. Now I ask another favor of you. Will you take it to her as a wedding gift? She will probably reject it, but I must make the offer.
|
||||
RefusalMessage = 1075370; // Alright then, you have already helped me more than I deserved. I shall find someone else to undertake this task.
|
||||
InProgressMessage = 1075371; // The wedding is taking place in the palace in Nujel'm. You will likely find her there.
|
||||
CompletionMessage = 1075372; // I’m sorry, I’m getting ready to be married. I don’t have time to . . . what’s that you say?
|
||||
|
||||
Objectives.Add( new DeliverObjective( typeof( PortraitOfTheBride ), 1, "Portrait of the Bride", typeof( Thalia ), "Bride" ) );
|
||||
|
||||
Rewards.Add( new DummyReward( 1075369 ) ); // The Artist’s gratitude.
|
||||
}
|
||||
|
||||
public override void OnComplete( MLQuestInstance instance )
|
||||
{
|
||||
instance.Player.SendLocalizedMessage( 1046258, "", 0x23 ); // Your quest is complete.
|
||||
}
|
||||
}
|
||||
|
||||
public class UnfadingMemoriesPartThree : MLQuest
|
||||
{
|
||||
public override bool IsChainTriggered { get { return true; } }
|
||||
|
||||
public UnfadingMemoriesPartThree()
|
||||
{
|
||||
Activated = true;
|
||||
Title = 1075373; // Unfading Memories
|
||||
Description = 1075374; // Emilio painted this? It is absolutely wonderful! I used to love looking at his paintings, but I don’t remember him creating anything like this before. Would you be so kind as to carry a letter to him? Fate may have it that I am to marry another, yet I am compelled to reveal to him that his love was not entirely unrequited.
|
||||
RefusalMessage = 1075376; // Very well, then. If you will excuse me, I need to get ready.
|
||||
InProgressMessage = 1075377; // Take the letter back to the Artist’s Guild in Britain, if you would do me this kindness.
|
||||
CompletionMessage = 1075378; // She said what? She thinks what of me? I . . . I can’t 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.
|
||||
|
||||
Objectives.Add( new DeliverObjective( typeof( BridesLetter ), 1, "Bride's Letter", typeof( Emilio ), "Artist" ) );
|
||||
|
||||
Rewards.Add( new ItemReward( 1075375, typeof( Bleach ) ) ); // Bleach
|
||||
}
|
||||
|
||||
public override void OnComplete( MLQuestInstance instance )
|
||||
{
|
||||
instance.Player.SendLocalizedMessage( 1046258, "", 0x23 ); // Your quest is complete.
|
||||
}
|
||||
|
||||
public override void Generate()
|
||||
{
|
||||
base.Generate();
|
||||
|
||||
PutSpawner( new Spawner( 1, 5, 10, 0, 3, "Thalia" ), new Point3D( 3675, 1322, 20 ), Map.Trammel );
|
||||
PutSpawner( new Spawner( 1, 5, 10, 0, 3, "Thalia" ), new Point3D( 3675, 1322, 20 ), Map.Felucca );
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Mobiles
|
||||
|
||||
public class Emilio : BaseCreature
|
||||
{
|
||||
public override bool IsInvulnerable { get { return true; } }
|
||||
|
||||
[Constructable]
|
||||
public Emilio()
|
||||
: base( AIType.AI_Vendor, FightMode.None, 2, 1, 0.5, 2 )
|
||||
{
|
||||
Name = "Emilio";
|
||||
Title = "the Tortured Artist";
|
||||
Race = Race.Human;
|
||||
BodyValue = 0x190;
|
||||
Female = false;
|
||||
Hue = Race.RandomSkinHue();
|
||||
InitStats( 100, 100, 25 );
|
||||
|
||||
Utility.AssignRandomHair( this, true );
|
||||
|
||||
AddItem( new Backpack() );
|
||||
AddItem( new Sandals( 0x72B ) );
|
||||
AddItem( new LongPants( 0x525 ) );
|
||||
AddItem( new FancyShirt( 0x53F ) );
|
||||
AddItem( new FloppyHat( 0x58C ) );
|
||||
AddItem( new BodySash( 0x1C ) );
|
||||
|
||||
}
|
||||
|
||||
public Emilio( 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();
|
||||
}
|
||||
}
|
||||
|
||||
public class Thalia : BaseCreature
|
||||
{
|
||||
public override bool IsInvulnerable { get { return true; } }
|
||||
|
||||
[Constructable]
|
||||
public Thalia()
|
||||
: base( AIType.AI_Vendor, FightMode.None, 2, 1, 0.5, 2 )
|
||||
{
|
||||
Name = "Thalia";
|
||||
Title = "the Bride";
|
||||
Race = Race.Human;
|
||||
BodyValue = 0x191;
|
||||
Female = true;
|
||||
Hue = Race.RandomSkinHue();
|
||||
InitStats( 100, 100, 25 );
|
||||
|
||||
Utility.AssignRandomHair( this, true );
|
||||
|
||||
AddItem( new Backpack() );
|
||||
AddItem( new Sandals( 0x8FD ) );
|
||||
AddItem( new FancyDress( 0x8FD ) );
|
||||
|
||||
}
|
||||
|
||||
public Thalia( 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
|
||||
}
|
||||
|
|
@ -0,0 +1,90 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Server;
|
||||
using Server.ContextMenus;
|
||||
using Server.Engines.MLQuests.Objectives;
|
||||
using Server.Engines.MLQuests.Rewards;
|
||||
using Server.Items;
|
||||
using Server.Misc;
|
||||
using Server.Mobiles;
|
||||
|
||||
namespace Server.Engines.MLQuests.Definitions
|
||||
{
|
||||
public class WarriorsOfTheGemkeeper : MLQuest
|
||||
{
|
||||
public override Type NextQuest { get { return typeof( CloseEnough ); } }
|
||||
|
||||
public WarriorsOfTheGemkeeper()
|
||||
{
|
||||
Activated = true;
|
||||
Title = 1074536; // Warriors of the Gemkeeper
|
||||
Description = 1074537; // Here we honor the Gemkeeper's Apprentice and seek to aid her efforts against the humans responsible for the death of her teacher - and the destruction of the elven way of life. Our tales speak of a fierce race of servants of the Gemkeeper, the men-bulls whose battle-skill was renowned. It is desireable to discover the fate of these noble creatures after the Rupture. Will you seek information?
|
||||
RefusalMessage = 1074063; // Fine then, I'm shall find another to run my errands then.
|
||||
InProgressMessage = 1074540; // I care not how you get the information. Kill as many humans as you must ... but find the fate of the minotaurs. Perhaps another of the Gemkeeper's servants has the knowledge we seek.
|
||||
CompletionMessage = 1074542; // What have you found?
|
||||
|
||||
Objectives.Add( new CollectObjective( 1, typeof( FragmentOfAMap ), "fragment of a map" ) );
|
||||
|
||||
Rewards.Add( new DummyReward( 1074876 ) ); // Knowledge of the legendary minotaur.
|
||||
}
|
||||
}
|
||||
|
||||
public class CloseEnough : MLQuest
|
||||
{
|
||||
public override Type NextQuest { get { return typeof( TakingTheBullByTheHorns ); } }
|
||||
public override bool IsChainTriggered { get { return true; } }
|
||||
|
||||
public CloseEnough()
|
||||
{
|
||||
Activated = true;
|
||||
Title = 1074544; // Close Enough
|
||||
Description = 1074546; // Ah ha! You see here ... and over here ... The map fragment places the city of the bull-men, Labyrinth, on that piece of Sosaria that was thrown into the sky. Hmmm, I would have you go there and seek out these warriors to see if they might join our cause. But, legend speaks of a mighty barrier to prevent invasion of the city. Take this map to Canir and explain the problem. Perhaps she can devise a solution.
|
||||
RefusalMessage = 1074063; // Fine then, I'm shall find another to run my errands then.
|
||||
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)" ) );
|
||||
|
||||
Rewards.Add( new DummyReward( 1074876 ) ); // Knowledge of the legendary minotaur.
|
||||
}
|
||||
}
|
||||
|
||||
public class TakingTheBullByTheHorns : MLQuest
|
||||
{
|
||||
public override Type NextQuest { get { return typeof( EmissaryToTheMinotaur ); } }
|
||||
public override bool IsChainTriggered { get { return true; } }
|
||||
|
||||
public TakingTheBullByTheHorns()
|
||||
{
|
||||
Activated = true;
|
||||
Title = 1074551; // Taking the Bull by the Horns
|
||||
Description = 1074553; // Interesting. I believe I have a way. I will need some materials to infuse you with the essence of a bull-man, so you can fool their defenses. The most similar beast to the original Baratarian bull that the minotaur were bred from is undoubtedly the mighty Gaman, native to the Lands of the Feudal Lords. I need horns, in great quantity to undertake this magic.
|
||||
RefusalMessage = 1074554; // Oh come now, don't be afraid. The magic won't harm you.
|
||||
InProgressMessage = 1074555; // I cannot grant you the ability to pass through the bull-men's defenses without the gaman horns.
|
||||
CompletionMessage = 1074556; // You've returned at last! Give me just a moment to examine what you've brought and I can perform the magic that will allow you enter the Labyrinth.
|
||||
|
||||
Objectives.Add( new CollectObjective( 20, typeof( GamanHorns ), "gaman horns" ) );
|
||||
|
||||
Rewards.Add( new DummyReward( 1074876 ) ); // Knowledge of the legendary minotaur.
|
||||
}
|
||||
}
|
||||
|
||||
public class EmissaryToTheMinotaur : MLQuest
|
||||
{
|
||||
public override bool IsChainTriggered { get { return true; } }
|
||||
|
||||
public EmissaryToTheMinotaur()
|
||||
{
|
||||
Activated = true;
|
||||
Title = 1074824; // Emissary to the Minotaur
|
||||
Description = 1074825; // *whew* It is done! The fierce essence of the bull has been infused into your aura. You are able now to breach the ancient defenses of the city. Go forth and seek the minotaur -- and then return with wonderous tales and evidence of your visit to the Labyrinth.
|
||||
RefusalMessage = 1074827; // As you wish. I can't understand why you'd pass up such a remarkable opportunity. Think of the adventures you would have.
|
||||
InProgressMessage = 1074828; // You won't reach the minotaur city by loitering around here! What are you waiting for? You need to get to Malas and find the access point for the island. You'll be renowned for your discovery!
|
||||
CompletionMessage = 1074829; // Oh! You've returned at last! I can't wait to hear the tales ... but first, let me see those artifacts. You've certainly earned this reward.
|
||||
|
||||
Objectives.Add( new CollectObjective( 3, typeof( MinotaurArtifact ), "minotaur artifacts" ) );
|
||||
|
||||
Rewards.Add( ItemReward.Strongbox );
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue