- Modified the quest system to allow non-BaseCreature quest givers, now requires IQuestGiver.
- Added base quest giver items, both timed and untimed. - Added BatteredBucket and Lost and Found quest. - Moved quester 'friendly names' to a class attribute. If left unspecified, the type name is used. - Misc quest corrections. - The bag of sending will now reject nontransferable items. - Fixed quest items generating error messages when StackWith was attempted on them. (StackWith is not supposed to produce feedback.) - Quest items can now be dropped onto the player's backpack.
This commit is contained in:
parent
0fcd5821a5
commit
71a9e054de
36 changed files with 627 additions and 258 deletions
167
Scripts/Engines/MLQuests/Items/QuestGiverItem.cs
Normal file
167
Scripts/Engines/MLQuests/Items/QuestGiverItem.cs
Normal file
|
|
@ -0,0 +1,167 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Server;
|
||||
using Server.Items;
|
||||
using Server.Mobiles;
|
||||
using Server.Network;
|
||||
|
||||
namespace Server.Engines.MLQuests.Items
|
||||
{
|
||||
public abstract class QuestGiverItem : Item, IQuestGiver
|
||||
{
|
||||
private List<MLQuest> m_MLQuests;
|
||||
|
||||
public List<MLQuest> MLQuests
|
||||
{
|
||||
get
|
||||
{
|
||||
if ( m_MLQuests == null )
|
||||
{
|
||||
m_MLQuests = MLQuestSystem.FindQuestList( GetType() );
|
||||
|
||||
if ( m_MLQuests == null )
|
||||
m_MLQuests = MLQuestSystem.EmptyList;
|
||||
}
|
||||
|
||||
return m_MLQuests;
|
||||
}
|
||||
}
|
||||
|
||||
public bool CanGiveMLQuest { get { return ( MLQuests.Count != 0 ); } }
|
||||
|
||||
public QuestGiverItem( int itemId )
|
||||
: base( itemId )
|
||||
{
|
||||
}
|
||||
|
||||
public override bool Nontransferable { get { return true; } }
|
||||
|
||||
public override void AddNameProperties( ObjectPropertyList list )
|
||||
{
|
||||
base.AddNameProperties( list );
|
||||
|
||||
AddQuestItemProperty( list );
|
||||
|
||||
if ( CanGiveMLQuest )
|
||||
list.Add( 1072269 ); // Quest Giver
|
||||
}
|
||||
|
||||
public override void OnDoubleClick( Mobile from )
|
||||
{
|
||||
if ( !from.InRange( GetWorldLocation(), 2 ) )
|
||||
from.LocalOverheadMessage( MessageType.Regular, 0x3B2, 1019045 ); // I can't reach that.
|
||||
else if ( !IsChildOf( from.Backpack ) )
|
||||
from.SendLocalizedMessage( 1042593 ); // That is not in your backpack.
|
||||
else if ( MLQuestSystem.Enabled && CanGiveMLQuest && from is PlayerMobile )
|
||||
MLQuestSystem.OnDoubleClick( this, (PlayerMobile)from );
|
||||
}
|
||||
|
||||
public override void OnAfterDelete()
|
||||
{
|
||||
base.OnAfterDelete();
|
||||
|
||||
if ( MLQuestSystem.Enabled )
|
||||
MLQuestSystem.HandleDeletion( this );
|
||||
}
|
||||
|
||||
public QuestGiverItem( 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 abstract class TransientQuestGiverItem : TransientItem, IQuestGiver
|
||||
{
|
||||
private List<MLQuest> m_MLQuests;
|
||||
|
||||
public List<MLQuest> MLQuests
|
||||
{
|
||||
get
|
||||
{
|
||||
if ( m_MLQuests == null )
|
||||
{
|
||||
m_MLQuests = MLQuestSystem.FindQuestList( GetType() );
|
||||
|
||||
if ( m_MLQuests == null )
|
||||
m_MLQuests = MLQuestSystem.EmptyList;
|
||||
}
|
||||
|
||||
return m_MLQuests;
|
||||
}
|
||||
}
|
||||
|
||||
public bool CanGiveMLQuest { get { return ( MLQuests.Count != 0 ); } }
|
||||
|
||||
public TransientQuestGiverItem( int itemId, TimeSpan lifeSpan )
|
||||
: base( itemId, lifeSpan )
|
||||
{
|
||||
}
|
||||
|
||||
public override bool Nontransferable { get { return true; } }
|
||||
|
||||
public override void HandleInvalidTransfer( Mobile from )
|
||||
{
|
||||
}
|
||||
|
||||
public override void AddNameProperties( ObjectPropertyList list )
|
||||
{
|
||||
base.AddNameProperties( list );
|
||||
|
||||
AddQuestItemProperty( list );
|
||||
|
||||
if ( CanGiveMLQuest )
|
||||
list.Add( 1072269 ); // Quest Giver
|
||||
}
|
||||
|
||||
public override void OnDoubleClick( Mobile from )
|
||||
{
|
||||
if ( !from.InRange( GetWorldLocation(), 2 ) )
|
||||
from.LocalOverheadMessage( MessageType.Regular, 0x3B2, 1019045 ); // I can't reach that.
|
||||
else if ( !IsChildOf( from.Backpack ) )
|
||||
from.SendLocalizedMessage( 1042593 ); // That is not in your backpack.
|
||||
else if ( MLQuestSystem.Enabled && CanGiveMLQuest && from is PlayerMobile )
|
||||
MLQuestSystem.OnDoubleClick( this, (PlayerMobile)from );
|
||||
}
|
||||
|
||||
public override void OnAfterDelete()
|
||||
{
|
||||
base.OnAfterDelete();
|
||||
|
||||
if ( MLQuestSystem.Enabled )
|
||||
MLQuestSystem.HandleDeletion( this );
|
||||
}
|
||||
|
||||
public TransientQuestGiverItem( 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();
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue