When you say you have disabled recall, may I ask how? Did you remove the spell Recall completely so it doesn't exist in your shard, or did you comment out the target checks?
One way that you cold disable recall off of runes or runebooks and still have them recall off their boat key is quite simple. In Recall.cs you have the target method of the spell (where you usally target a rune or rune book) which involves a series of checks to see whether or not the item targeted is valid.
All you have to do is simply remove these checks to something like this:
Code:
protected override void OnTarget( Mobile from, object o )
{
if ( o is RecallRune )
{
RecallRune rune = (RecallRune)o;
from.SendMessage("The spell fizzles");
/*if ( rune.Marked )
m_Owner.Effect( rune.Target, rune.TargetMap, true );
else
from.SendLocalizedMessage( 501805 ); // That rune is not yet marked.*/
}
else if ( o is Runebook )
{
RunebookEntry e = ((Runebook)o).Default;
from.SendMessage("The spell fizzles");
/*if ( e != null )
m_Owner.Effect( e.Location, e.Map, true );
else
from.SendLocalizedMessage( 502354 ); // Target is not marked.*/
}
else if ( o is Key && ((Key)o).KeyValue != 0 && ((Key)o).Link is BaseBoat )
{
BaseBoat boat = ((Key)o).Link as BaseBoat;
if ( !boat.Deleted && boat.CheckKey( ((Key)o).KeyValue ) )
m_Owner.Effect( boat.GetMarkedLocation(), boat.Map, false );
else
from.Send( new MessageLocalized( from.Serial, from.Body, MessageType.Regular, 0x3B2, 3, 502357, from.Name, "" ) ); // I can not recall from that object.
}
else
{
from.Send( new MessageLocalized( from.Serial, from.Body, MessageType.Regular, 0x3B2, 3, 502357, from.Name, "" ) ); // I can not recall from that object.
}
}