#W# Source and Scripts added. Added Scripts/Settings.cs to expose some basic tweak able settings.

This commit is contained in:
WarrentyExpired 2026-08-06 11:06:05 -04:00
parent b51c58f514
commit 3045c83799
3512 changed files with 627673 additions and 0 deletions

View file

@ -0,0 +1,202 @@
using System;
using System.Collections.Generic;
using Server;
using Server.Mobiles;
using Server.Items;
using Server.ContextMenus;
using Server.Engines.Quests;
namespace Server.Engines.Quests.Haven
{
public class Dryad : BaseQuester
{
public override bool IsActiveVendor{ get{ return true; } }
public override bool DisallowAllMoves{ get{ return false; } }
public override bool ClickTitle{ get { return true; } }
public override bool CanTeach{ get{ return true; } }
[Constructable]
public Dryad() : base( "the Dryad" )
{
SetSkill( SkillName.Peacemaking, 80.0, 100.0 );
SetSkill( SkillName.Cooking, 80.0, 100.0 );
SetSkill( SkillName.Provocation, 80.0, 100.0 );
SetSkill( SkillName.Musicianship, 80.0, 100.0 );
SetSkill( SkillName.Poisoning, 80.0, 100.0 );
SetSkill( SkillName.Archery, 80.0, 100.0 );
SetSkill( SkillName.Tailoring, 80.0, 100.0 );
}
public Dryad( Serial serial ) : base( serial )
{
}
public override void InitBody()
{
InitStats( 100, 100, 25 );
Hue = 0x85A7;
Female = true;
Body = 0x191;
Name = "Anwin Brenna";
}
public override void InitOutfit()
{
AddItem( new Kilt( 0x301 ) );
AddItem( new FancyShirt( 0x300 ) );
HairItemID = 0x203D; // Pony Tail
HairHue = 0x22;
Bow bow = new Bow();
bow.Movable = false;
AddItem( bow );
}
public override void InitSBInfo()
{
m_SBInfos.Add( new SBDryad() );
}
public override int GetAutoTalkRange( PlayerMobile pm )
{
return 4;
}
public override bool CanTalkTo( PlayerMobile to )
{
UzeraanTurmoilQuest qs = to.Quest as UzeraanTurmoilQuest;
return ( qs != null && qs.FindObjective( typeof( FindDryadObjective ) ) != null );
}
public override void OnTalk( PlayerMobile player, bool contextMenu )
{
QuestSystem qs = player.Quest;
if ( qs is UzeraanTurmoilQuest )
{
if ( UzeraanTurmoilQuest.HasLostFertileDirt( player ) )
{
FocusTo( player );
qs.AddConversation( new LostFertileDirtConversation( false ) );
}
else
{
QuestObjective obj = qs.FindObjective( typeof( FindDryadObjective ) );
if ( obj != null && !obj.Completed )
{
FocusTo( player );
Item fertileDirt = new QuestFertileDirt();
if ( !player.PlaceInBackpack( fertileDirt ) )
{
fertileDirt.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
{
obj.Complete();
}
}
else if ( contextMenu )
{
FocusTo( player );
SayTo( player, 1049357 ); // I have nothing more for you at this time.
}
}
}
}
public override bool OnDragDrop( Mobile from, Item dropped )
{
PlayerMobile player = from as PlayerMobile;
if ( player != null )
{
UzeraanTurmoilQuest qs = player.Quest as UzeraanTurmoilQuest;
if ( qs != null && dropped is Apple && UzeraanTurmoilQuest.HasLostFertileDirt( from ) )
{
FocusTo( from );
Item fertileDirt = new QuestFertileDirt();
if ( !player.PlaceInBackpack( fertileDirt ) )
{
fertileDirt.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.
return false;
}
else
{
dropped.Consume();
qs.AddConversation( new DryadAppleConversation() );
return dropped.Deleted;
}
}
}
return base.OnDragDrop( from, dropped );
}
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 SBDryad : SBInfo
{
private List<GenericBuyInfo> m_BuyInfo = new InternalBuyInfo();
private IShopSellInfo m_SellInfo = new InternalSellInfo();
public SBDryad()
{
}
public override IShopSellInfo SellInfo { get { return m_SellInfo; } }
public override List<GenericBuyInfo> BuyInfo { get { return m_BuyInfo; } }
public class InternalBuyInfo : List<GenericBuyInfo>
{
public InternalBuyInfo()
{
Add( new GenericBuyInfo( typeof( Bandage ), 5, 20, 0xE21, 0 ) );
Add( new GenericBuyInfo( typeof( Ginseng ), 3, 20, 0xF85, 0 ) );
Add( new GenericBuyInfo( typeof( Garlic ), 3, 20, 0xF84, 0 ) );
Add( new GenericBuyInfo( typeof( Bloodmoss ), 5, 20, 0xF7B, 0 ) );
Add( new GenericBuyInfo( typeof( Nightshade ), 3, 20, 0xF88, 0 ) );
Add( new GenericBuyInfo( typeof( SpidersSilk ), 3, 20, 0xF8D, 0 ) );
Add( new GenericBuyInfo( typeof( MandrakeRoot ), 3, 20, 0xF86, 0 ) );
}
}
public class InternalSellInfo : GenericSellInfo
{
public InternalSellInfo()
{
Add( typeof( Bandage ), 2 );
Add( typeof( Garlic ), 2 );
Add( typeof( Ginseng ), 2 );
Add( typeof( Bloodmoss ), 3 );
Add( typeof( Nightshade ), 2 );
Add( typeof( SpidersSilk ), 2 );
Add( typeof( MandrakeRoot ), 2 );
}
}
}
}

View file

@ -0,0 +1,80 @@
using System;
using Server;
using Server.Mobiles;
using Server.Items;
using Server.Engines.Quests;
namespace Server.Engines.Quests.Haven
{
public class MansionGuard : BaseQuester
{
[Constructable]
public MansionGuard() : base( "the Mansion Guard" )
{
}
public override void InitBody()
{
InitStats( 100, 100, 25 );
Hue = Utility.RandomSkinHue();
Female = false;
Body = 0x190;
Name = NameList.RandomName( "male" );
}
public override void InitOutfit()
{
AddItem( new PlateChest() );
AddItem( new PlateArms() );
AddItem( new PlateGloves() );
AddItem( new PlateLegs() );
Utility.AssignRandomHair( this );
Utility.AssignRandomFacialHair( this, HairHue );
Bardiche weapon = new Bardiche();
weapon.Movable = false;
AddItem( weapon );
}
public override int GetAutoTalkRange( PlayerMobile pm )
{
return 3;
}
public override bool CanTalkTo( PlayerMobile to )
{
return ( to.Quest == null && QuestSystem.CanOfferQuest( to, typeof( UzeraanTurmoilQuest ) ) );
}
public override void OnTalk( PlayerMobile player, bool contextMenu )
{
if ( player.Quest == null && QuestSystem.CanOfferQuest( player, typeof( UzeraanTurmoilQuest ) ) )
{
Direction = GetDirectionTo( player );
new UzeraanTurmoilQuest( player ).SendOffer();
}
}
public MansionGuard( 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

@ -0,0 +1,113 @@
using System;
using Server;
using Server.Items;
using Server.Mobiles;
using Server.Engines.Quests;
namespace Server.Engines.Quests.Haven
{
public class MilitiaCanoneer : BaseQuester
{
private bool m_Active;
[CommandProperty( AccessLevel.GameMaster )]
public bool Active
{
get { return m_Active; }
set { m_Active = value; }
}
[Constructable]
public MilitiaCanoneer() : base( "the Militia Canoneer" )
{
m_Active = true;
}
public override void InitBody()
{
InitStats( 100, 125, 25 );
Hue = Utility.RandomSkinHue();
Female = false;
Body = 0x190;
Name = NameList.RandomName( "male" );
}
public override void InitOutfit()
{
Utility.AssignRandomHair( this );
Utility.AssignRandomFacialHair( this, HairHue );
AddItem( new PlateChest() );
AddItem( new PlateArms() );
AddItem( new PlateGloves() );
AddItem( new PlateLegs() );
Torch torch = new Torch();
torch.Movable = false;
AddItem( torch );
torch.Ignite();
}
public override bool CanTalkTo( PlayerMobile to )
{
return false;
}
public override void OnTalk( PlayerMobile player, bool contextMenu )
{
}
public override bool IsEnemy( Mobile m )
{
if ( m.Player || m is BaseVendor )
return false;
if ( m is BaseCreature )
{
BaseCreature bc = (BaseCreature)m;
Mobile master = bc.GetMaster();
if( master != null )
return IsEnemy( master );
}
return m.Karma < 0;
}
public bool WillFire( Cannon cannon, Mobile target )
{
if ( m_Active && IsEnemy( target ) )
{
Direction = GetDirectionTo( target );
Say( Utility.RandomList( 500651, 1049098, 1049320, 1043149 ) );
return true;
}
return false;
}
public MilitiaCanoneer( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int) 0 ); // version
writer.Write( (bool) m_Active );
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
m_Active = reader.ReadBool();
}
}
}

View file

@ -0,0 +1,151 @@
using System;
using System.Collections;
using System.Collections.Generic;
using Server;
using Server.Items;
using Server.Mobiles;
using Server.Network;
namespace Server.Engines.Quests.Haven
{
public class MilitiaFighter : BaseCreature
{
[Constructable]
public MilitiaFighter() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 )
{
InitStats( 40, 30, 5 );
Title = "the Militia Fighter";
SpeechHue = Utility.RandomDyedHue();
Hue = Utility.RandomSkinHue();
Female = false;
Body = 0x190;
Name = NameList.RandomName( "male" );
Utility.AssignRandomHair( this );
Utility.AssignRandomFacialHair( this, HairHue );
AddItem( new ThighBoots( 0x1BB ) );
AddItem( new LeatherChest() );
AddItem( new LeatherArms() );
AddItem( new LeatherLegs() );
AddItem( new LeatherCap() );
AddItem( new LeatherGloves() );
AddItem( new LeatherGorget() );
Item weapon;
switch ( Utility.Random( 6 ) )
{
case 0: weapon = new Broadsword(); break;
case 1: weapon = new Cutlass(); break;
case 2: weapon = new Katana(); break;
case 3: weapon = new Longsword(); break;
case 4: weapon = new Scimitar(); break;
default: weapon = new VikingSword(); break;
}
weapon.Movable = false;
AddItem( weapon );
Item shield = new BronzeShield();
shield.Movable = false;
AddItem( shield );
SetSkill( SkillName.Swords, 20.0 );
}
public override bool ClickTitle { get { return false; } }
public override bool IsEnemy( Mobile m )
{
if ( m.Player || m is BaseVendor )
return false;
if ( m is BaseCreature )
{
BaseCreature bc = (BaseCreature)m;
Mobile master = bc.GetMaster();
if( master != null )
return IsEnemy( master );
}
return m.Karma < 0;
}
public MilitiaFighter( 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 MilitiaFighterCorpse : Corpse
{
public MilitiaFighterCorpse( Mobile owner, HairInfo hair, FacialHairInfo facialhair, List<Item> equipItems ) : base( owner, hair, facialhair, equipItems )
{
}
public override void AddNameProperty( ObjectPropertyList list )
{
if ( ItemID == 0x2006 ) // Corpse form
{
list.Add( "a human corpse" );
list.Add( 1049318, this.Name ); // the remains of ~1_NAME~ the militia fighter
}
else
{
list.Add( 1049319 ); // the remains of a militia fighter
}
}
public override void OnSingleClick( Mobile from )
{
int hue = Notoriety.GetHue( Server.Misc.NotorietyHandlers.CorpseNotoriety( from, this ) );
if ( ItemID == 0x2006 ) // Corpse form
from.Send( new MessageLocalized( Serial, ItemID, MessageType.Label, hue, 3, 1049318, "", Name ) ); // the remains of ~1_NAME~ the militia fighter
else
from.Send( new MessageLocalized( Serial, ItemID, MessageType.Label, hue, 3, 1049319, "", "" ) ); // the remains of a militia fighter
}
public override void Open( Mobile from, bool checkSelfLoot )
{
if ( from.InRange( this.GetWorldLocation(), 2 ) )
{
from.SendLocalizedMessage( 1049661, "", 0x22 ); // Thinking about his sacrifice, you can't bring yourself to loot the body of this militia fighter.
}
}
public MilitiaFighterCorpse( 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

@ -0,0 +1,156 @@
using System;
using Server;
using Server.Mobiles;
using Server.Items;
using Server.Gumps;
using Server.Engines.Quests;
namespace Server.Engines.Quests.Haven
{
public class Schmendrick : BaseQuester
{
[Constructable]
public Schmendrick() : base( "the High Mage" )
{
}
public override void InitBody()
{
InitStats( 100, 100, 25 );
Hue = 0x83F3;
Female = false;
Body = 0x190;
Name = "Schmendrick";
}
public override void InitOutfit()
{
AddItem( new Robe( 0x4DD ) );
AddItem( new WizardsHat( 0x482 ) );
AddItem( new Shoes( 0x482 ) );
HairItemID = 0x203C;
HairHue = 0x455;
FacialHairItemID = 0x203E;
FacialHairHue = 0x455;
GlacialStaff staff = new GlacialStaff();
staff.Movable = false;
AddItem( staff );
Backpack pack = new Backpack();
pack.Movable = false;
AddItem( pack );
}
public override int GetAutoTalkRange( PlayerMobile pm )
{
return 7;
}
public override bool CanTalkTo( PlayerMobile to )
{
UzeraanTurmoilQuest qs = to.Quest as UzeraanTurmoilQuest;
return ( qs != null && qs.FindObjective( typeof( FindSchmendrickObjective ) ) != null );
}
public override void OnTalk( PlayerMobile player, bool contextMenu )
{
QuestSystem qs = player.Quest;
if ( qs is UzeraanTurmoilQuest )
{
if ( UzeraanTurmoilQuest.HasLostScrollOfPower( player ) )
{
FocusTo( player );
qs.AddConversation( new LostScrollOfPowerConversation( false ) );
}
else
{
QuestObjective obj = qs.FindObjective( typeof( FindSchmendrickObjective ) );
if ( obj != null && !obj.Completed )
{
FocusTo( player );
obj.Complete();
}
else if ( contextMenu )
{
FocusTo( player );
SayTo( player, 1049357 ); // I have nothing more for you at this time.
}
}
}
}
public override bool OnDragDrop( Mobile from, Item dropped )
{
if ( dropped is BlankScroll && UzeraanTurmoilQuest.HasLostScrollOfPower( from ) )
{
FocusTo( from );
Item scroll = new SchmendrickScrollOfPower();
if ( !from.PlaceInBackpack( scroll ) )
{
scroll.Delete();
from.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.
return false;
}
else
{
dropped.Consume();
from.SendLocalizedMessage( 1049346 ); // Schmendrick scribbles on the scroll for a few moments and hands you the finished product.
return dropped.Deleted;
}
}
return base.OnDragDrop( from, dropped );
}
public override void OnMovement( Mobile m, Point3D oldLocation )
{
base.OnMovement( m, oldLocation );
if ( m is PlayerMobile && !m.Frozen && !m.Alive && InRange( m, 4 ) && !InRange( oldLocation, 4 ) && InLOS( m ) )
{
if ( m.Map == null || !m.Map.CanFit( m.Location, 16, false, false ) )
{
m.SendLocalizedMessage( 502391 ); // Thou can not be resurrected there!
}
else
{
Direction = GetDirectionTo( m );
m.PlaySound( 0x214 );
m.FixedEffect( 0x376A, 10, 16 );
m.CloseGump( typeof( ResurrectGump ) );
m.SendGump( new ResurrectGump( m, ResurrectMessage.Healer ) );
}
}
}
public Schmendrick( 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

@ -0,0 +1,434 @@
using System;
using Server;
using Server.Mobiles;
using Server.Items;
using Server.Gumps;
using Server.Engines.Quests;
namespace Server.Engines.Quests.Haven
{
public class Uzeraan : BaseQuester
{
[Constructable]
public Uzeraan() : base( "the Conjurer" )
{
}
public override void InitBody()
{
InitStats( 100, 100, 25 );
Hue = 0x83F3;
Female = false;
Body = 0x190;
Name = "Uzeraan";
}
public override void InitOutfit()
{
AddItem( new Robe( 0x4DD ) );
AddItem( new WizardsHat( 0x8A5 ) );
AddItem( new Shoes( 0x8A5 ) );
HairItemID = 0x203C;
HairHue = 0x455;
FacialHairItemID = 0x203E;
FacialHairHue = 0x455;
BlackStaff staff = new BlackStaff();
staff.Movable = false;
AddItem( staff );
}
public override int GetAutoTalkRange( PlayerMobile pm )
{
return 3;
}
public override bool CanTalkTo( PlayerMobile to )
{
return to.Quest is UzeraanTurmoilQuest;
}
public override void OnTalk( PlayerMobile player, bool contextMenu )
{
QuestSystem qs = player.Quest;
if ( qs is UzeraanTurmoilQuest )
{
if ( UzeraanTurmoilQuest.HasLostScrollOfPower( player ) )
{
qs.AddConversation( new LostScrollOfPowerConversation( true ) );
}
else if ( UzeraanTurmoilQuest.HasLostFertileDirt( player ) )
{
qs.AddConversation( new LostFertileDirtConversation( true ) );
}
else if ( UzeraanTurmoilQuest.HasLostDaemonBlood( player ) )
{
qs.AddConversation( new LostDaemonBloodConversation() );
}
else if ( UzeraanTurmoilQuest.HasLostDaemonBone( player ) )
{
qs.AddConversation( new LostDaemonBoneConversation() );
}
else
{
if ( player.Profession == 2 ) // magician
{
Container backpack = player.Backpack;
if ( backpack == null
|| backpack.GetAmount( typeof( BlackPearl ) ) < 30
|| backpack.GetAmount( typeof( Bloodmoss ) ) < 30
|| backpack.GetAmount( typeof( Garlic ) ) < 30
|| backpack.GetAmount( typeof( Ginseng ) ) < 30
|| backpack.GetAmount( typeof( MandrakeRoot ) ) < 30
|| backpack.GetAmount( typeof( Nightshade ) ) < 30
|| backpack.GetAmount( typeof( SulfurousAsh ) ) < 30
|| backpack.GetAmount( typeof( SpidersSilk ) ) < 30 )
{
qs.AddConversation( new FewReagentsConversation() );
}
}
QuestObjective obj = qs.FindObjective( typeof( FindUzeraanBeginObjective ) );
if ( obj != null && !obj.Completed )
{
obj.Complete();
}
else
{
obj = qs.FindObjective( typeof( FindUzeraanFirstTaskObjective ) );
if ( obj != null && !obj.Completed )
{
obj.Complete();
}
else
{
obj = qs.FindObjective( typeof( FindUzeraanAboutReportObjective ) );
if ( obj != null && !obj.Completed )
{
Container cont = GetNewContainer();
if ( player.Profession == 2 ) // magician
{
cont.DropItem( new MarkScroll( 5 ) );
cont.DropItem( new RecallScroll( 5 ) );
for ( int i = 0; i < 5; i++ )
{
cont.DropItem( new RecallRune() );
}
}
else
{
cont.DropItem( new Gold( 300 ) );
for ( int i = 0; i < 6; i++ )
{
cont.DropItem( new NightSightPotion() );
cont.DropItem( new LesserHealPotion() );
}
}
if ( !player.PlaceInBackpack( cont ) )
{
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
{
obj.Complete();
}
}
else
{
obj = qs.FindObjective( typeof( ReturnScrollOfPowerObjective ) );
if ( obj != null && !obj.Completed )
{
FocusTo( player );
SayTo( player, 1049378 ); // Hand me the scroll, if you have it.
}
else
{
obj = qs.FindObjective( typeof( ReturnFertileDirtObjective ) );
if ( obj != null && !obj.Completed )
{
FocusTo( player );
SayTo( player, 1049381 ); // Hand me the Fertile Dirt, if you have it.
}
else
{
obj = qs.FindObjective( typeof( ReturnDaemonBloodObjective ) );
if ( obj != null && !obj.Completed )
{
FocusTo( player );
SayTo( player, 1049379 ); // Hand me the Vial of Blood, if you have it.
}
else
{
obj = qs.FindObjective( typeof( ReturnDaemonBoneObjective ) );
if ( obj != null && !obj.Completed )
{
FocusTo( player );
SayTo( player, 1049380 ); // Hand me the Daemon Bone, if you have it.
}
else
{
SayTo( player, 1049357 ); // I have nothing more for you at this time.
}
}
}
}
}
}
}
}
}
}
public override bool OnDragDrop( Mobile from, Item dropped )
{
PlayerMobile player = from as PlayerMobile;
if ( player != null )
{
QuestSystem qs = player.Quest;
if ( qs is UzeraanTurmoilQuest )
{
if ( dropped is UzeraanTurmoilHorn )
{
if ( player.Young )
{
UzeraanTurmoilHorn horn = (UzeraanTurmoilHorn)dropped;
if ( horn.Charges < 10 )
{
SayTo( from, 1049384 ); // I have recharged the item for you.
horn.Charges = 10;
}
else
{
SayTo( from, 1049385 ); // That doesn't need recharging yet.
}
}
else
{
player.SendLocalizedMessage(1114333); //You must be young to have this item recharged.
}
return false;
}
if ( dropped is SchmendrickScrollOfPower )
{
QuestObjective obj = qs.FindObjective( typeof( ReturnScrollOfPowerObjective ) );
if ( obj != null && !obj.Completed )
{
Container cont = GetNewContainer();
cont.DropItem( new TreasureMap( player.Young ? 0 : 1, Map.Trammel ) );
cont.DropItem( new Shovel() );
cont.DropItem( new UzeraanTurmoilHorn() );
if ( !player.PlaceInBackpack( cont ) )
{
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.
return false;
}
else
{
dropped.Delete();
obj.Complete();
return true;
}
}
}
else if ( dropped is QuestFertileDirt )
{
QuestObjective obj = qs.FindObjective( typeof( ReturnFertileDirtObjective ) );
if ( obj != null && !obj.Completed )
{
Container cont = GetNewContainer();
if ( player.Profession == 2 ) // magician
{
cont.DropItem( new BlackPearl( 20 ) );
cont.DropItem( new Bloodmoss( 20 ) );
cont.DropItem( new Garlic( 20 ) );
cont.DropItem( new Ginseng( 20 ) );
cont.DropItem( new MandrakeRoot( 20 ) );
cont.DropItem( new Nightshade( 20 ) );
cont.DropItem( new SulfurousAsh( 20 ) );
cont.DropItem( new SpidersSilk( 20 ) );
for ( int i = 0; i < 3; i++ )
cont.DropItem( Loot.RandomScroll( 0, 23, SpellbookType.Regular ) );
}
else
{
cont.DropItem( new Gold( 300 ) );
cont.DropItem( new Bandage( 25 ) );
for ( int i = 0; i < 5; i++ )
cont.DropItem( new LesserHealPotion() );
}
if ( !player.PlaceInBackpack( cont ) )
{
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.
return false;
}
else
{
dropped.Delete();
obj.Complete();
return true;
}
}
}
else if ( dropped is QuestDaemonBlood )
{
QuestObjective obj = qs.FindObjective( typeof( ReturnDaemonBloodObjective ) );
if ( obj != null && !obj.Completed )
{
Item reward;
if ( player.Profession == 2 ) // magician
{
Container cont = GetNewContainer();
cont.DropItem( new ExplosionScroll( 4 ) );
cont.DropItem( new MagicWizardsHat() );
reward = cont;
}
else
{
BaseWeapon weapon;
switch ( Utility.Random( 6 ) )
{
case 0: weapon = new Broadsword(); break;
case 1: weapon = new Cutlass(); break;
case 2: weapon = new Katana(); break;
case 3: weapon = new Longsword(); break;
case 4: weapon = new Scimitar(); break;
default: weapon = new VikingSword(); break;
}
if ( Core.AOS )
{
BaseRunicTool.ApplyAttributesTo( weapon, 3, 20, 40 );
}
else
{
weapon.DamageLevel = (WeaponDamageLevel)BaseCreature.RandomMinMaxScaled( 2, 4 );
weapon.AccuracyLevel = (WeaponAccuracyLevel)BaseCreature.RandomMinMaxScaled( 2, 4 );
weapon.DurabilityLevel = (WeaponDurabilityLevel)BaseCreature.RandomMinMaxScaled( 2, 4 );
}
weapon.Slayer = SlayerName.Silver;
reward = weapon;
}
if ( !player.PlaceInBackpack( reward ) )
{
reward.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.
return false;
}
else
{
dropped.Delete();
obj.Complete();
return true;
}
}
}
else if ( dropped is QuestDaemonBone )
{
QuestObjective obj = qs.FindObjective( typeof( ReturnDaemonBoneObjective ) );
if ( obj != null && !obj.Completed )
{
Container cont = GetNewContainer();
cont.DropItem( new BankCheck( 2000 ) );
cont.DropItem( new EnchantedSextant() );
if ( !player.PlaceInBackpack( cont ) )
{
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.
return false;
}
else
{
dropped.Delete();
obj.Complete();
return true;
}
}
}
}
}
return base.OnDragDrop( from, dropped );
}
public override void OnMovement( Mobile m, Point3D oldLocation )
{
base.OnMovement( m, oldLocation );
if ( m is PlayerMobile && !m.Frozen && !m.Alive && InRange( m, 4 ) && !InRange( oldLocation, 4 ) && InLOS( m ) )
{
if ( m.Map == null || !m.Map.CanFit( m.Location, 16, false, false ) )
{
m.SendLocalizedMessage( 502391 ); // Thou can not be resurrected there!
}
else
{
Direction = GetDirectionTo( m );
m.PlaySound( 0x214 );
m.FixedEffect( 0x376A, 10, 16 );
m.CloseGump( typeof( ResurrectGump ) );
m.SendGump( new ResurrectGump( m, ResurrectMessage.Healer ) );
}
}
}
public Uzeraan( 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();
}
}
}