This commit is contained in:
eos 2013-02-10 19:40:13 +00:00
parent 75d9694012
commit cb6e0910fe
16 changed files with 857 additions and 19 deletions

View file

@ -0,0 +1,224 @@
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 Momento : MLQuest
{
public Momento()
{
Activated = true;
Title = 1074750; // Momento!
Description = 1074751; // I was going to march right out there and get it myself, but no ... Master Gnosos won't let me. But you see, that bridle means so much to me. A momento of happier, less-dead ... well undead horseback riding. Could you fetch it for me? I think my horse, formerly known as 'Resolve', may still be wearing it.
RefusalMessage = 1074752; // Hrmph.
InProgressMessage = 1074753; // The bridle would be hard to miss on him now ... since he's skeletal. Please do what you need to do to retreive it for me.
CompletionMessage = 1074754; // I'd know that jingling sound anywhere! You have recovered my bridle. Thank you.
Objectives.Add( new CollectObjective( 1, typeof( ResolvesBridle ), "Resolve's Bridle" ) );
Rewards.Add( ItemReward.LargeBagOfTreasure );
}
public override void Generate()
{
base.Generate();
PutSpawner( new Spawner( 1, 5, 10, 0, 3, "Kia" ), new Point3D( 87, 1640, 0 ), Map.Malas );
PutSpawner( new Spawner( 1, 5, 10, 0, 3, "Nythalia" ), new Point3D( 91, 1639, 0 ), Map.Malas );
}
}
public class CulinaryCrisis : MLQuest
{
public CulinaryCrisis()
{
Activated = true;
Title = 1074755; // Culinary Crisis
Description = 1074756; // You have NO idea how impossible this is. Simply intolerable! How can one expect an artiste' like me to create masterpieces of culinary delight without the best, fresh ingredients? Ever since this whositwhatsit started this uproar, my thrice-daily produce deliveries have ended. I can't survive another hour without produce!
RefusalMessage = 1074757; // You have no artistry in your soul.
InProgressMessage = 1074758; // I must have fresh produce and cheese at once!
CompletionMessage = 1074759; // Those dates look bruised! Oh no, and you fetched a soft cheese. *deep pained sigh* Well, even I can only do so much with inferior ingredients. BAM!
Objectives.Add( new CollectObjective( 20, typeof( Dates ), 1025927 ) ); // bunch of dates
Objectives.Add( new CollectObjective( 5, typeof( CheeseWheel ), 1022430 ) ); // wheel of cheese
Rewards.Add( ItemReward.BagOfTreasure );
}
public override void Generate()
{
base.Generate();
PutSpawner( new Spawner( 1, 5, 10, 0, 3, "Emerillo" ), new Point3D( 90, 1639, 0 ), Map.Malas );
}
}
public class GoneNative : MLQuest
{
public GoneNative()
{
Activated = true;
Title = 1074855; // Gone Native
Description = 1074856; // Pathetic really. I must say, a senior instructor going native -- forgetting about his students and peers and engaging in such disgraceful behavior! I'm speaking, of course, of Theophilus. Master Theophilus to you. He may have gone native but he still holds a Mastery Degree from Bedlam College! But, well, that's neither here nor there. I need you to take care of my colleague. Convince him of the error of his ways. He may resist. In fact, assume he will and kill him. We'll get him resurrected and be ready to cure his folly. What do you say?
RefusalMessage = 1074857; // I understand. A Master of Bedlam, even one entirely off his rocker, is too much for you to handle.
InProgressMessage = 1074858; // You had better get going. Master Theophilus isn't likely to kill himself just to save me this embarrassment.
CompletionMessage = 1074859; // You look a bit worse for wear! He put up a good fight did he? Hah! That's the spirit … a Master of Bedlam is a match for most.
Objectives.Add( new KillObjective( 1, new Type[] { typeof( MasterTheophilus ) }, "Master Theophilus" ) );
Rewards.Add( ItemReward.LargeBagOfTreasure );
}
}
#endregion
#region Mobiles
public class Kia : BaseCreature
{
public override bool IsInvulnerable { get { return true; } }
[Constructable]
public Kia()
: base( AIType.AI_Vendor, FightMode.None, 2, 1, 0.5, 2 )
{
Name = "Kia";
Title = "the student";
Race = Race.Human;
BodyValue = 0x191;
Female = true;
Hue = Race.RandomSkinHue();
InitStats( 100, 100, 25 );
Utility.AssignRandomHair( this, true );
AddItem( new Backpack() );
AddItem( new Sandals( 0x709 ) );
AddItem( new Robe( 0x497 ) );
}
public Kia( 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 Emerillo : 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, 1074222 ); // Could I trouble you for some assistance?
}
[Constructable]
public Emerillo()
: base( AIType.AI_Vendor, FightMode.None, 2, 1, 0.5, 2 )
{
Name = "Emerillo";
Title = "the cook";
Race = Race.Human;
BodyValue = 0x190;
Female = false;
Hue = Race.RandomSkinHue();
InitStats( 100, 100, 25 );
Utility.AssignRandomHair( this, true );
AddItem( new Backpack() );
AddItem( new Sandals( Utility.RandomNeutralHue() ) );
AddItem( new ShortPants( Utility.RandomPinkHue() ) );
AddItem( new Shirt() );
AddItem( new HalfApron( 0x8FD ) );
}
public Emerillo( 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 Nythalia : BaseCreature
{
public override bool IsInvulnerable { get { return true; } }
[Constructable]
public Nythalia()
: base( AIType.AI_Vendor, FightMode.None, 2, 1, 0.5, 2 )
{
Name = "Nythalia";
Title = "the student";
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 Robe( Utility.RandomBool() ? 0x497 : 0x498 ) );
}
public Nythalia( Serial serial )
: base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int) 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
}
}
#endregion
}

View file

@ -220,8 +220,6 @@ namespace Server.Engines.MLQuests.Definitions
public class Iosep : BaseCreature
{
// TODO: EmbracingHumanity
public override bool IsInvulnerable { get { return true; } }
public override bool CanShout { get { return true; } }

View file

@ -74,14 +74,31 @@ namespace Server.Engines.MLQuests.Definitions
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
Objectives.Add( new CollectObjective( 12, typeof( PrimitiveFetish ), "Primitive Fetishes" ) );
Rewards.Add( ItemReward.BagOfTreasure );
}
}
public class EmbracingHumanity : MLQuest
{
public EmbracingHumanity()
{
Activated = true;
OneTimeOnly = true; // OSI has no limit or delay, VERY exploitable
Title = 1074349; // Embracing Humanity
Description = 1074357; // Well, I don't mind saying it -- I'm flabbergasted! Absolutely astonished. I just heard that some elves want to convert themselves to humans through some magical process. My cousin Nedrick does whatever needs doing. I guess you could check it out for yourself if you're curious. Anyway, I wonder if you'll bring my cousin, Drithen, this here treat my wife baked up for him special.
RefusalMessage = 1074459; // That's okay, I'll find someone else to make the delivery.
InProgressMessage = 1074460; // If I knew where my cousin was, I'd make the delivery myself.
CompletionMessage = 1074461; // Oh, hello there. What do you have for me?
Objectives.Add( new DeliverObjective( typeof( SpecialTreatForDrithen ), 1, "treat for Drithen", typeof( Drithen ), "Drithen (Umbra)" ) );
Rewards.Add( ItemReward.BagOfTreasure );
}

View file

@ -385,7 +385,7 @@ namespace Server.Engines.MLQuests.Definitions
InProgressMessage = 1074735; // If you're going to get anywhere in the adventuring game, you have to take some risks. A harpy, well, it's bad, but it's not a dragon.
CompletionMessage = 1074734; // The hero returns from the glorious battle and - oh, such a small feather?
Objectives.Add( new CollectObjective( 1, typeof( SalivasFeather ), 1151994 ) ); // Saliva's Feathers
Objectives.Add( new CollectObjective( 1, typeof( SalivasFeather ), "Saliva's Feather" ) );
Rewards.Add( ItemReward.BagOfTreasure );
}
@ -402,7 +402,7 @@ namespace Server.Engines.MLQuests.Definitions
InProgressMessage = 1074729; // Em, I thought I had explained already. Abscess, the hydra, you know? Lots of heads but just the one tail. I need the tail. I have my reasons. Go go go.
CompletionMessage = 1074730; // Ah, the tail. You did it! You know the rumours about dried ground hydra tail powder are all true? Thank you so much!
Objectives.Add( new CollectObjective( 1, typeof( AbscessTail ), 1074231 ) ); // Abscess' Tail
Objectives.Add( new CollectObjective( 1, typeof( AbscessTail ), "Abscess' Tail" ) );
Rewards.Add( ItemReward.BagOfTreasure );
}
@ -1419,8 +1419,8 @@ namespace Server.Engines.MLQuests.Definitions
InProgressMessage = 1074724; // Hydras have been spotted in the Blighted Grove. You won't get those scales without getting your feet wet, I'm afraid.
CompletionMessage = 1074725; // I can't wait to get to work now that you've returned with my scales.
Objectives.Add( new CollectObjective( 1, typeof( ThrashersTail ), 1074230 ) ); // Thrasher's Tail
Objectives.Add( new CollectObjective( 10, typeof( HydraScale ), 1151992 ) ); // Hydra Scales
Objectives.Add( new CollectObjective( 1, typeof( ThrashersTail ), "Thrasher's Tail" ) );
Objectives.Add( new CollectObjective( 10, typeof( HydraScale ), "Hydra Scales" ) );
Rewards.Add( ItemReward.BagOfTreasure );
}

View file

@ -649,8 +649,6 @@ namespace Server.Engines.MLQuests.Definitions
public class Sledge : BaseCreature
{
// TODO: Pointy Ears
public override bool IsInvulnerable { get { return true; } }
public override bool CanShout { get { return true; } }

View file

@ -0,0 +1,96 @@
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 PointyEars : MLQuest
{
public PointyEars()
{
Activated = true;
Title = 1074640; // Pointy Ears
Description = 1074641; // I've heard ... there's some that will pay a good bounty for pointed ears, much like we used to pay for each wolf skin. I've got nothing personal against these elves. It's just business. You want in on this? I'm not fussy who I work with.
RefusalMessage = 1074642; // Suit yourself.
InProgressMessage = 1074643; // I can't pay a bounty if you don't bring bag the ears.
CompletionMessage = 1074644; // Here to collect on a bounty?
Objectives.Add( new CollectObjective( 20, typeof( SeveredElfEars ), "severed elf ears" ) );
Rewards.Add( ItemReward.BagOfTrinkets );
}
public override void Generate()
{
base.Generate();
PutSpawner( new Spawner( 1, 5, 10, 0, 4, "Drithen" ), new Point3D( 1983, 1364, -80 ), Map.Malas );
}
}
#endregion
#region Mobiles
public class Drithen : 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, 1074188 ); // Weakling! You are not up to the task I have.
}
[Constructable]
public Drithen()
: base( AIType.AI_Vendor, FightMode.None, 2, 1, 0.5, 2 )
{
Name = "Drithen";
Title = "the Fierce";
Race = Race.Human;
BodyValue = 0x190;
Female = false;
Hue = Race.RandomSkinHue();
InitStats( 100, 100, 25 );
AddItem( new Backpack() );
AddItem( new ElvenBoots( Utility.RandomNeutralHue() ) );
AddItem( new LongPants( Utility.RandomBlueHue() ) );
AddItem( new Tunic( Utility.RandomNeutralHue() ) );
AddItem( new Cloak( Utility.RandomBrightHue() ) );
SetSkill( SkillName.Focus, 60.0, 80.0 );
}
public Drithen( Serial serial )
: base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int) 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
}
}
#endregion
}

View file

@ -0,0 +1,328 @@
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 MistakenIdentity : MLQuest
{
public override Type NextQuest { get { return typeof( YouScratchMyBack ); } }
public MistakenIdentity()
{
Activated = true;
Title = 1074573; // Mistaken Identity
Description = 1074574; // What do you want? Wonderful, another whining request for a refund on tuition. You know, experiences like that are invaluable ... and infrequent. Having the opportunity to test yourself under such realistic situations isn't something the college offers all students. Fine. Fine. You'll need to submit a refund request form in triplicate before I can return your 1,000,000 gold tuition. You'll need to get some signatures and a few other odds and ends.
RefusalMessage = 1074606; // If you're not willing to follow the proper process then go away.
InProgressMessage = 1074605; // You're not getting a refund without the proper forms and signatures.
CompletionMessage = 1074607; // Oh blast! Not another of those forms. I'm so sick of this endless paperwork.
CompletionNotice = CompletionNoticeShort;
Objectives.Add( new DeliverObjective( typeof( TuitionReimbursementForm ), 1, "Tuition Reimbursement Form", typeof( Gorrow ), "Gorrow (Luna)" ) );
Rewards.Add( new DummyReward( 1074634 ) ); // Tuition Reimbursement
}
public override void Generate()
{
base.Generate();
PutSpawner( new Spawner( 1, 5, 10, 0, 4, "Aernya" ), new Point3D( 2095, 1380, -90 ), Map.Malas );
}
}
public class YouScratchMyBack : MLQuest
{
public override Type NextQuest { get { return typeof( FoolingAernya ); } }
public override bool IsChainTriggered { get { return true; } }
public YouScratchMyBack()
{
Activated = true;
Title = 1074608; // You Scratch My Back
Description = 1074609; // Heh. Heheheh. Good one. You're not a Bedlam student and you're definitely not eligible for a tuition refund. Heheheh. That old witch Aernya doesn't see as well as she used to you know. Otherwise, she would have ... hmmm, wait a minute. I sense a certain 'opportunity' here. I'll sign your forms in return for a little help with a project of my own. What do you say?
RefusalMessage = 1074615; // Hehehe. Your choice.
InProgressMessage = 1074616; // I'm something of a gourmet, you see. It's tough getting some of the ingredients, though. Bring me back some pixie legs, unicorn ribs and ki-rin brains and I'll sign your form.
CompletionMessage = 1074617; // Oh excellent, you're back. I'll get the oven going. That thing about pixie legs, you see, is that they burn and dry out if you're not really careful. Taste just like chicken too!
CompletionNotice = CompletionNoticeShortReturn;
Objectives.Add( new CollectObjective( 1, typeof( UnicornRibs ), "Unicorn Ribs" ) );
Objectives.Add( new CollectObjective( 2, typeof( KirinBrains ), "Ki-Rin Brains" ) );
Objectives.Add( new CollectObjective( 5, typeof( PixieLeg ), "Pixie Leg" ) );
Rewards.Add( new DummyReward( 1074634 ) ); // Tuition Reimbursement
}
public override void Generate()
{
base.Generate();
PutSpawner( new Spawner( 1, 5, 10, 0, 4, "Gorrow" ), new Point3D( 993, 512, -50 ), Map.Malas );
}
}
public class FoolingAernya : MLQuest
{
public override Type NextQuest { get { return typeof( NotQuiteThatEasy ); } }
public override bool IsChainTriggered { get { return true; } }
public FoolingAernya()
{
Activated = true;
Title = 1074618; // Fooling Aernya
Description = 1074619; // Now that I've signed your papers you'd better get back to that witch Aernya. Mmmm mmm smell those ribs!
RefusalMessage = 1074620; // Giving up on your scheme eh? Suit yourself.
InProgressMessage = 1074621; // You better hurry back to Mistress Aernya with that signed form. The college only has so much money and with enough claims you may find yourself unable to get your tuition refunded. *wink*
CompletionMessage = 1074622; // What? Hrmph. Gorrow signed your form did he? Let me see that. *squint*
CompletionNotice = CompletionNoticeShort;
Objectives.Add( new DeliverObjective( typeof( SignedTuitionReimbursementForm ), 1, "Signed Tuition Reimbursement Form", typeof( Aernya ), "Aernya (Umbra)" ) );
Rewards.Add( new DummyReward( 1074634 ) ); // Tuition Reimbursement
}
}
public class NotQuiteThatEasy : MLQuest
{
// TODO: This quest allows permanent access to Bedlam (only need to do this once)
public override Type NextQuest { get { return typeof( ConvinceMe ); } }
public override bool IsChainTriggered { get { return true; } }
public NotQuiteThatEasy()
{
Activated = true;
Title = 1074623; // Not Quite That Easy
Description = 1074624; // I wouldn't be too smug just yet, whiner. You still need Master Gnosos' signature before I can cut your refund. Last I heard, he's coordinating the recovery of the portions of the college that are currently overrun. *nasty smile* Off with you.
RefusalMessage = 1074626; // Coward.
InProgressMessage = 1074627; // What are you waiting for? The iron maiden is still the portal to Bedlam.
CompletionMessage = 1074628; // Made it through did you? Did you happen to see Red Death out there? Big horse, skeletal ... burning eyes? No? What's this? Forms? FORMS? I'm up to my eyebrows in ravenous out-of-control undead and you want a signature?
CompletionNotice = CompletionNoticeShort;
Objectives.Add( new DeliverObjective( typeof( SignedTuitionReimbursementForm ), 1, "Signed Tuition Reimbursement Form", typeof( MasterGnosos ), "Master Gnosos (Bedlam)" ) );
Rewards.Add( new DummyReward( 1074634 ) ); // Tuition Reimbursement
}
}
public class ConvinceMe : MLQuest
{
public override Type NextQuest { get { return typeof( TuitionReimbursement ); } }
public override bool IsChainTriggered { get { return true; } }
public ConvinceMe()
{
Activated = true;
Title = 1074629; // Convince Me
Description = 1074630; // I'm not signing any forms until the situation here is under control. So, you can either help out or you can forget getting your tuition refund. Which will it be? Help control the shambling dead?
RefusalMessage = 1074631; // No signature for you.
InProgressMessage = 1074632; // No signature for you until you kill off some of the shambling dead out there and destroy that blasted horse.
CompletionMessage = 1074633; // Pulled it off huh? Well then you've earned this signature!
CompletionNotice = CompletionNoticeShortReturn;
QuestArea bedlam = new QuestArea( 1074835, "Bedlam" ); // Bedlam
Objectives.Add( new KillObjective( 1, new Type[] { typeof( RedDeath ) }, "Red Death", bedlam ) );
Objectives.Add( new KillObjective( 10, new Type[] { typeof( GoreFiend ) }, "gore fiends", bedlam ) );
Objectives.Add( new KillObjective( 8, new Type[] { typeof( RottingCorpse ) }, "rotting corpses", bedlam ) );
Rewards.Add( new DummyReward( 1074634 ) ); // Tuition Reimbursement
}
public override void Generate()
{
base.Generate();
PutSpawner( new Spawner( 1, 5, 10, 0, 3, "MasterGnosos" ), new Point3D( 87, 1639, 0 ), Map.Malas );
}
}
public class TuitionReimbursement : MLQuest
{
public override bool IsChainTriggered { get { return true; } }
public TuitionReimbursement()
{
Activated = true;
Title = 1074634; // Tuition Reimbursement
Description = 1074635; // Well, there you are. I've added my signature to that of Gorrow, so you should be set to return to Mistress Aernya and get your tuition refunded.
RefusalMessage = 1074636; // Great! If you're going to stick around here, I know we have more tasks for you to perform.
InProgressMessage = 1074637; // Just head out the main gates there and you'll find yourself embracing the iron maiden in the Bloodletter's Guild.
CompletionMessage = 1074638; // *disinterested stare* What? Oh, you've gotten your form filled in. How nice. *glare* And I'd hoped you'd drop this charade before I was forced to rub your nose in it. *nasty smile* You're not even a student and as such, you're not eligible for a refund -- you've never paid tuition. For your services, Master Gnosos has recommended you receive pay. So here. Now go away.
CompletionNotice = CompletionNoticeShort;
Objectives.Add( new DeliverObjective( typeof( CompletedTuitionReimbursementForm ), 1, "Completed Tuition Reimbursement Form", typeof( Aernya ), "Aernya (Umbra)" ) );
Rewards.Add( ItemReward.Strongbox );
}
}
#endregion
#region Mobiles
public class Aernya : BaseCreature
{
public override bool IsInvulnerable { get { return true; } }
[Constructable]
public Aernya()
: base( AIType.AI_Vendor, FightMode.None, 2, 1, 0.5, 2 )
{
Name = "Aernya";
Title = "the Mistress of Admissions";
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.RandomNeutralHue() ) );
AddItem( new Skirt( Utility.RandomBool() ? 0x1 : 0x0 ) );
AddItem( new Cloak( Utility.RandomBrightHue() ) );
AddItem( new FancyShirt( Utility.RandomBool() ? 0x3B2 : 0x3B3 ) );
}
public Aernya( 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 Gorrow : 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(
1074200, // Thank goodness you are here, theres no time to lose.
1074203 // Hello friend. I realize you are busy but if you would be willing to render me a service I can assure you that you will be judiciously renumerated.
) );
}
[Constructable]
public Gorrow()
: base( AIType.AI_Vendor, FightMode.None, 2, 1, 0.5, 2 )
{
Name = "Gorrow";
Title = "the Mayor";
Race = Race.Human;
BodyValue = 0x190;
Female = false;
Hue = Race.RandomSkinHue();
InitStats( 100, 100, 25 );
AddItem( new Backpack() );
AddItem( new Shoes( 0x1BB ) );
AddItem( new Tunic( Utility.RandomNeutralHue() ) );
AddItem( new LongPants( 0x901 ) );
AddItem( new Cloak( Utility.RandomRedHue() ) );
}
public Gorrow( 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 MasterGnosos : 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, 1074186 ); // Come here, I have a task.
}
[Constructable]
public MasterGnosos()
: base( AIType.AI_Vendor, FightMode.None, 2, 1, 0.5, 2 )
{
Name = "Master Gnosos";
Title = "the necromancer";
Race = Race.Human;
BodyValue = 0x190;
Female = false;
Hue = 0x83E8;
InitStats( 100, 100, 25 );
HairItemID = 0x2049;
FacialHairItemID = 0x204B;
AddItem( new Backpack() );
AddItem( new Shoes( 0x485 ) );
AddItem( new Robe( 0x497 ) );
SetSkill( SkillName.EvalInt, 60.0, 80.0 );
SetSkill( SkillName.Inscribe, 60.0, 80.0 );
SetSkill( SkillName.MagicResist, 60.0, 80.0 );
SetSkill( SkillName.SpiritSpeak, 60.0, 80.0 );
SetSkill( SkillName.Meditation, 60.0, 80.0 );
SetSkill( SkillName.Necromancy, 60.0, 80.0 );
}
public MasterGnosos( Serial serial )
: base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int) 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
}
}
#endregion
}

View file

@ -335,7 +335,7 @@ namespace Server.Engines.MLQuests.Definitions
InProgressMessage = 1074686; // I've told you all I know of the creature. Until you return with Grobu's fur I can't finish my cloak.
CompletionMessage = 1074687; // Ah! So soft, so supple. What a wonderful texture. Here you are ... my thanks.
Objectives.Add( new CollectObjective( 1, typeof( GrobusFur ), 1074676 ) ); // Grobu's Fur
Objectives.Add( new CollectObjective( 1, typeof( GrobusFur ), "Grobu's Fur" ) );
Rewards.Add( ItemReward.TailorSatchel );
}
@ -629,6 +629,22 @@ namespace Server.Engines.MLQuests.Definitions
}
}
public class CommonBrigands : MLQuest
{
public CommonBrigands()
{
Activated = true;
Title = 1073082; // Common Brigands
Description = 1073572; // Thank goodness, a hero like you has arrived! Brigands have descended upon this area like locusts, stealing and looting where ever they go. We need someone to put these vile curs where they belong -- in their graves. Are you up to the task?
RefusalMessage = 1073580; // I hope you'll reconsider. Until then, farwell.
InProgressMessage = 1073592; // The Brigands still plague us. Have you killed 20 of their number?<br>
Objectives.Add( new KillObjective( 20, new Type[] { typeof( Brigand ) }, "common brigands" ) );
Rewards.Add( ItemReward.BagOfTreasure );
}
}
#endregion
#region Mobiles
@ -811,8 +827,6 @@ namespace Server.Engines.MLQuests.Definitions
public class Tiana : BaseCreature
{
// TODO: Add quests, Common Brigands (needs Elf and Human Brigands put in first)
public override bool IsInvulnerable { get { return true; } }
public override bool CanTeach { get { return true; } }
@ -937,8 +951,6 @@ namespace Server.Engines.MLQuests.Definitions
public class LorekeeperRollarn : BaseCreature
{
// TODO: Add quest Brotherly Love
public override bool IsInvulnerable { get { return true; } }
public override bool CanTeach { get { return true; } }

View file

@ -19,7 +19,6 @@ namespace Server.Items
public TuitionReimbursementForm() : base( 0xE3A )
{
LootType = LootType.Blessed;
Hue = 0x395;
}
public TuitionReimbursementForm( Serial serial ) : base( serial )

View file

@ -1,6 +1,7 @@
using System;
using Server.Mobiles;
using Server.Network;
using Server.Items;
namespace Server.Mobiles
{
@ -90,6 +91,14 @@ namespace Server.Mobiles
AddLoot( LootPack.Potions );
}
public override void OnDeath( Container c )
{
base.OnDeath( c );
if ( Utility.RandomDouble() < 0.10 )
c.DropItem( new KirinBrains() );
}
public override OppositionGroup OppositionGroup
{
get{ return OppositionGroup.FeyAndUndead; }

View file

@ -1,6 +1,7 @@
using System;
using Server.Mobiles;
using Server.Network;
using Server.Items;
namespace Server.Mobiles
{
@ -100,6 +101,14 @@ namespace Server.Mobiles
AddLoot( LootPack.Potions );
}
public override void OnDeath( Container c )
{
base.OnDeath( c );
if ( Utility.RandomDouble() < 0.10 )
c.DropItem( new UnicornRibs() );
}
public override OppositionGroup OppositionGroup
{
get{ return OppositionGroup.FeyAndUndead; }

View file

@ -0,0 +1,114 @@
using System;
using System.Collections;
using Server.Items;
using Server.ContextMenus;
using Server.Misc;
using Server.Network;
namespace Server.Mobiles
{
// TODO: Needs some Spellweaving abilities
public class ElfBrigand : BaseCreature
{
public override bool ClickTitle{ get{ return false; } }
[Constructable]
public ElfBrigand() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 )
{
SpeechHue = Utility.RandomDyedHue();
Title = "the brigand";
Race = Race.Elf;
Hue = Race.RandomSkinHue();
if ( this.Female = Utility.RandomBool() )
{
Body = 0x25E;
Name = NameList.RandomName( "female elf brigand" );
switch ( Utility.Random( 2 ) )
{
case 0: AddItem( new Skirt( Utility.RandomNondyedHue() ) ); break;
case 1: AddItem( new Kilt( Utility.RandomNondyedHue() ) ); break;
}
}
else
{
Body = 0x25D;
Name = NameList.RandomName( "male elf brigand" );
AddItem( new ShortPants( Utility.RandomNondyedHue() ) );
}
SetStr( 86, 100 );
SetDex( 81, 95 );
SetInt( 61, 75 );
SetDamage( 10, 23 );
SetSkill( SkillName.Fencing, 66.0, 97.5 );
SetSkill( SkillName.Macing, 65.0, 87.5 );
SetSkill( SkillName.MagicResist, 25.0, 47.5 );
SetSkill( SkillName.Swords, 65.0, 87.5 );
SetSkill( SkillName.Tactics, 65.0, 87.5 );
SetSkill( SkillName.Wrestling, 15.0, 37.5 );
Fame = 1000;
Karma = -1000;
switch ( Utility.Random( 4 ) )
{
case 0: AddItem( new Boots() ); break;
case 1: AddItem( new ThighBoots() ); break;
case 2: AddItem( new Sandals() ); break;
case 3: AddItem( new Shoes() ); break;
}
AddItem( new Shirt( Utility.RandomNondyedHue() ) );
switch ( Utility.Random( 7 ) )
{
case 0: AddItem( new Longsword() ); break;
case 1: AddItem( new Cutlass() ); break;
case 2: AddItem( new Broadsword() ); break;
case 3: AddItem( new Axe() ); break;
case 4: AddItem( new Club() ); break;
case 5: AddItem( new Dagger() ); break;
case 6: AddItem( new Spear() ); break;
}
Utility.AssignRandomHair( this, true );
}
public override void OnDeath( Container c )
{
base.OnDeath( c );
if ( Utility.RandomDouble() < 0.9 )
c.DropItem( new SeveredElfEars() );
}
public override void GenerateLoot()
{
AddLoot( LootPack.Average );
}
public override bool AlwaysMurderer{ get{ return true; } }
public ElfBrigand( 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();
}
}
}

View file

@ -1,6 +1,7 @@
using System;
using Server;
using Server.Misc;
using Server.Items;
namespace Server.Mobiles
{
@ -53,6 +54,14 @@ namespace Server.Mobiles
AddLoot( LootPack.Gems, 2 );
}
public override void OnDeath( Container c )
{
base.OnDeath( c );
if ( Utility.RandomBool() )
c.DropItem( new PixieLeg() );
}
public override HideType HideType{ get{ return HideType.Spined; } }
public override int Hides{ get{ return 5; } }
public override int Meat{ get{ return 1; } }

View file

@ -570,7 +570,7 @@ namespace Server.Mobiles
{
MLQuest quest = MLQuestSystem.ReadQuestRef( reader );
if ( quest != null && !StaticMLQuester )
if ( MLQuestSystem.Enabled && quest != null && !StaticMLQuester )
SetMLQuest( quest );
}
}