220 lines
No EOL
5.9 KiB
C#
220 lines
No EOL
5.9 KiB
C#
using System;
|
|
using Server;
|
|
using Server.Mobiles;
|
|
using Server.Items;
|
|
using Server.Engines.Quests;
|
|
|
|
namespace Server.Engines.Quests.Hag
|
|
{
|
|
public class Grizelda : BaseQuester
|
|
{
|
|
public override bool ClickTitle{ get{ return true; } }
|
|
|
|
[Constructable]
|
|
public Grizelda() : base( "the Hag" )
|
|
{
|
|
}
|
|
|
|
public Grizelda( Serial serial ) : base( serial )
|
|
{
|
|
}
|
|
|
|
public override void InitBody()
|
|
{
|
|
InitStats( 100, 100, 25 );
|
|
|
|
Hue = 0x83EA;
|
|
|
|
Female = true;
|
|
Body = 0x191;
|
|
Name = "Grizelda";
|
|
}
|
|
|
|
public override void InitOutfit()
|
|
{
|
|
AddItem( new Robe( 0x1 ) );
|
|
AddItem( new Sandals() );
|
|
AddItem( new WizardsHat( 0x1 ) );
|
|
AddItem( new GoldBracelet() );
|
|
|
|
HairItemID = 0x203C;
|
|
|
|
Item staff = new GnarledStaff();
|
|
staff.Movable = false;
|
|
AddItem( staff );
|
|
}
|
|
|
|
public override void OnTalk( PlayerMobile player, bool contextMenu )
|
|
{
|
|
Direction = GetDirectionTo( player );
|
|
|
|
QuestSystem qs = player.Quest;
|
|
|
|
if ( qs is WitchApprenticeQuest )
|
|
{
|
|
if ( qs.IsObjectiveInProgress( typeof( FindApprenticeObjective ) ) )
|
|
{
|
|
PlaySound( 0x259 );
|
|
PlaySound( 0x206 );
|
|
qs.AddConversation( new HagDuringCorpseSearchConversation() );
|
|
}
|
|
else
|
|
{
|
|
QuestObjective obj = qs.FindObjective( typeof( FindGrizeldaAboutMurderObjective ) );
|
|
|
|
if ( obj != null && !obj.Completed )
|
|
{
|
|
PlaySound( 0x420 );
|
|
PlaySound( 0x20 );
|
|
obj.Complete();
|
|
}
|
|
else if ( qs.IsObjectiveInProgress( typeof( KillImpsObjective ) )
|
|
|| qs.IsObjectiveInProgress( typeof( FindZeefzorpulObjective ) ) )
|
|
{
|
|
PlaySound( 0x259 );
|
|
PlaySound( 0x206 );
|
|
qs.AddConversation( new HagDuringImpSearchConversation() );
|
|
}
|
|
else
|
|
{
|
|
obj = qs.FindObjective( typeof( ReturnRecipeObjective ) );
|
|
|
|
if ( obj != null && !obj.Completed )
|
|
{
|
|
PlaySound( 0x258 );
|
|
PlaySound( 0x41B );
|
|
obj.Complete();
|
|
}
|
|
else if ( qs.IsObjectiveInProgress( typeof( FindIngredientObjective ) ) )
|
|
{
|
|
PlaySound( 0x259 );
|
|
PlaySound( 0x206 );
|
|
qs.AddConversation( new HagDuringIngredientsConversation() );
|
|
}
|
|
else
|
|
{
|
|
obj = qs.FindObjective( typeof( ReturnIngredientsObjective ) );
|
|
|
|
if ( obj != null && !obj.Completed )
|
|
{
|
|
Container cont = GetNewContainer();
|
|
|
|
cont.DropItem( new BlackPearl( 30 ) );
|
|
cont.DropItem( new Bloodmoss( 30 ) );
|
|
cont.DropItem( new Garlic( 30 ) );
|
|
cont.DropItem( new Ginseng( 30 ) );
|
|
cont.DropItem( new MandrakeRoot( 30 ) );
|
|
cont.DropItem( new Nightshade( 30 ) );
|
|
cont.DropItem( new SulfurousAsh( 30 ) );
|
|
cont.DropItem( new SpidersSilk( 30 ) );
|
|
|
|
cont.DropItem( new Cauldron() );
|
|
cont.DropItem( new MoonfireBrew() );
|
|
cont.DropItem( new TreasureMap( Utility.RandomMinMax( 1, 4 ), this.Map ) );
|
|
cont.DropItem( new Gold( 2000, 2200 ) );
|
|
|
|
if ( Utility.RandomBool() )
|
|
{
|
|
BaseWeapon weapon = Loot.RandomWeapon();
|
|
|
|
if ( Core.AOS )
|
|
{
|
|
BaseRunicTool.ApplyAttributesTo( weapon, 2, 20, 30 );
|
|
}
|
|
else
|
|
{
|
|
weapon.DamageLevel = (WeaponDamageLevel)BaseCreature.RandomMinMaxScaled( 2, 3 );
|
|
weapon.AccuracyLevel = (WeaponAccuracyLevel)BaseCreature.RandomMinMaxScaled( 2, 3 );
|
|
weapon.DurabilityLevel = (WeaponDurabilityLevel)BaseCreature.RandomMinMaxScaled( 2, 3 );
|
|
}
|
|
|
|
cont.DropItem( weapon );
|
|
}
|
|
else
|
|
{
|
|
Item item;
|
|
|
|
if ( Core.AOS )
|
|
{
|
|
item = Loot.RandomArmorOrShieldOrJewelry();
|
|
|
|
if ( item is BaseArmor )
|
|
BaseRunicTool.ApplyAttributesTo( (BaseArmor)item, 2, 20, 30 );
|
|
else if ( item is BaseJewel )
|
|
BaseRunicTool.ApplyAttributesTo( (BaseJewel)item, 2, 20, 30 );
|
|
}
|
|
else
|
|
{
|
|
BaseArmor armor = Loot.RandomArmorOrShield();
|
|
item = armor;
|
|
|
|
armor.ProtectionLevel = (ArmorProtectionLevel)BaseCreature.RandomMinMaxScaled( 2, 3 );
|
|
armor.Durability = (ArmorDurabilityLevel)BaseCreature.RandomMinMaxScaled( 2, 3 );
|
|
}
|
|
|
|
cont.DropItem( item );
|
|
}
|
|
|
|
if ( player.BAC > 0 )
|
|
cont.DropItem( new HangoverCure() );
|
|
|
|
if ( player.PlaceInBackpack( cont ) )
|
|
{
|
|
bool gainedPath = false;
|
|
|
|
if ( VirtueHelper.Award( player, VirtueName.Sacrifice, 250, ref gainedPath ) ) // TODO: Check amount on OSI.
|
|
player.SendLocalizedMessage( 1054160 ); // You have gained in sacrifice.
|
|
|
|
PlaySound( 0x253 );
|
|
PlaySound( 0x20 );
|
|
obj.Complete();
|
|
}
|
|
else
|
|
{
|
|
cont.Delete();
|
|
player.SendLocalizedMessage( 1046260 ); // You need to clear some space in your inventory to continue with the quest. Come back here when you have more space in your inventory.
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
QuestSystem newQuest = new WitchApprenticeQuest( player );
|
|
bool inRestartPeriod = false;
|
|
|
|
if ( qs != null )
|
|
{
|
|
newQuest.AddConversation( new DontOfferConversation() );
|
|
}
|
|
else if ( QuestSystem.CanOfferQuest( player, typeof( WitchApprenticeQuest ), out inRestartPeriod ) )
|
|
{
|
|
PlaySound( 0x20 );
|
|
PlaySound( 0x206 );
|
|
newQuest.SendOffer();
|
|
}
|
|
else if ( inRestartPeriod )
|
|
{
|
|
PlaySound( 0x259 );
|
|
PlaySound( 0x206 );
|
|
newQuest.AddConversation( new RecentlyFinishedConversation() );
|
|
}
|
|
}
|
|
}
|
|
|
|
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();
|
|
}
|
|
}
|
|
} |