From dadddce228d26b7725890085eb994aa38a7b2348 Mon Sep 17 00:00:00 2001 From: eos Date: Sun, 10 Feb 2013 21:49:04 +0000 Subject: [PATCH] Bedlam access. --- .../MLQuests/Definitions/MistakenIdentity.cs | 15 ++++- .../MLQuests/Items/BedlamTeleporter.cs | 62 +++++++++++++++++++ Scripts/Engines/MLQuests/MLQuest.cs | 23 +++++++ Scripts/Engines/MLQuests/MLQuestContext.cs | 10 ++- 4 files changed, 107 insertions(+), 3 deletions(-) create mode 100644 Scripts/Engines/MLQuests/Items/BedlamTeleporter.cs diff --git a/Scripts/Engines/MLQuests/Definitions/MistakenIdentity.cs b/Scripts/Engines/MLQuests/Definitions/MistakenIdentity.cs index e6e02b990..96658c9a0 100644 --- a/Scripts/Engines/MLQuests/Definitions/MistakenIdentity.cs +++ b/Scripts/Engines/MLQuests/Definitions/MistakenIdentity.cs @@ -2,6 +2,7 @@ using System; using System.Collections.Generic; using Server; using Server.ContextMenus; +using Server.Engines.MLQuests.Items; using Server.Engines.MLQuests.Objectives; using Server.Engines.MLQuests.Rewards; using Server.Items; @@ -92,8 +93,6 @@ namespace Server.Engines.MLQuests.Definitions 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; } } @@ -111,6 +110,18 @@ namespace Server.Engines.MLQuests.Definitions Rewards.Add( new DummyReward( 1074634 ) ); // Tuition Reimbursement } + + public override void Generate() + { + base.Generate(); + + PutDeco( new BedlamTeleporter(), new Point3D( 2067, 1371, -75 ), Map.Malas ); + } + + public override void OnAccepted( MLQuestInstance instance ) + { + instance.PlayerContext.BedlamAccess = true; // Permanent access + } } public class ConvinceMe : MLQuest diff --git a/Scripts/Engines/MLQuests/Items/BedlamTeleporter.cs b/Scripts/Engines/MLQuests/Items/BedlamTeleporter.cs new file mode 100644 index 000000000..80e3e7df6 --- /dev/null +++ b/Scripts/Engines/MLQuests/Items/BedlamTeleporter.cs @@ -0,0 +1,62 @@ +using System; +using Server; +using Server.Engines.MLQuests; +using Server.Mobiles; +using Server.Network; + +namespace Server.Engines.MLQuests.Items +{ + public class BedlamTeleporter : Item + { + public override int LabelNumber { get { return 1074161; } } // Access to Bedlam by invitation only + + private static readonly Point3D PointDest = new Point3D( 120, 1682, 0 ); + private static readonly Map MapDest = Map.Malas; + + public BedlamTeleporter() + : base( 0x124D ) + { + Movable = false; + } + + public override void OnDoubleClick( Mobile from ) + { + if ( !from.InRange( GetWorldLocation(), 2 ) ) + { + from.LocalOverheadMessage( MessageType.Regular, 0x3B2, 1019045 ); // I can't reach that. + return; + } + + MLQuestContext context; + + if ( from is PlayerMobile && ( context = MLQuestSystem.GetContext( (PlayerMobile)from ) ) != null && context.BedlamAccess ) + { + BaseCreature.TeleportPets( from, PointDest, MapDest ); + from.MoveToWorld( PointDest, MapDest ); + } + else + { + from.SendLocalizedMessage( 1074276 ); // You press and push on the iron maiden, but nothing happens. + } + } + + public BedlamTeleporter( 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(); + } + } +} diff --git a/Scripts/Engines/MLQuests/MLQuest.cs b/Scripts/Engines/MLQuests/MLQuest.cs index 8f334c448..68d455b41 100644 --- a/Scripts/Engines/MLQuests/MLQuest.cs +++ b/Scripts/Engines/MLQuests/MLQuest.cs @@ -210,6 +210,23 @@ namespace Server.Engines.MLQuests s.MoveToWorld( loc, map ); } + public void PutDeco( Item deco, Point3D loc, Map map ) + { + // Auto cleanup on regeneration + List toDelete = new List(); + + foreach ( Item item in map.GetItemsInRange( loc, 0 ) ) + { + if ( item.ItemID == deco.ItemID && item.Z == loc.Z ) + toDelete.Add( item ); + } + + foreach ( Item item in toDelete ) + item.Delete(); + + deco.MoveToWorld( loc, map ); + } + #endregion public MLQuestInstance CreateInstance( BaseCreature quester, PlayerMobile pm ) @@ -292,10 +309,16 @@ namespace Server.Engines.MLQuests pm.SendLocalizedMessage( 1049019 ); // You have accepted the Quest. pm.SendSound( 0x2E7 ); // private sound + OnAccepted( instance ); + foreach ( BaseObjectiveInstance obj in instance.Objectives ) obj.OnQuestAccepted(); } + public virtual void OnAccepted( MLQuestInstance instance ) + { + } + public virtual void OnRefuse( BaseCreature quester, PlayerMobile pm ) { pm.SendGump( new QuestConversationGump( this, pm, RefusalMessage ) ); diff --git a/Scripts/Engines/MLQuests/MLQuestContext.cs b/Scripts/Engines/MLQuests/MLQuestContext.cs index 8f4165c32..3da31f7a7 100644 --- a/Scripts/Engines/MLQuests/MLQuestContext.cs +++ b/Scripts/Engines/MLQuests/MLQuestContext.cs @@ -12,7 +12,8 @@ namespace Server.Engines.MLQuests None = 0x00, Spellweaving = 0x01, SummonFey = 0x02, - SummonFiend = 0x04 + SummonFiend = 0x04, + BedlamAccess = 0x08 } [PropertyObject] @@ -95,6 +96,13 @@ namespace Server.Engines.MLQuests set { SetFlag( MLQuestFlag.SummonFiend, value ); } } + [CommandProperty( AccessLevel.GameMaster )] + public bool BedlamAccess + { + get { return GetFlag( MLQuestFlag.BedlamAccess ); } + set { SetFlag( MLQuestFlag.BedlamAccess, value ); } + } + public MLQuestContext( PlayerMobile owner ) { m_Owner = owner;