mirror of
https://github.com/runuo/runuo
synced 2026-08-11 22:26:04 -04:00
164 lines
No EOL
4.7 KiB
C#
164 lines
No EOL
4.7 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using Server;
|
|
using Server.Targeting;
|
|
using Server.Items;
|
|
|
|
namespace Server.SkillHandlers
|
|
{
|
|
public class Inscribe
|
|
{
|
|
public static void Initialize()
|
|
{
|
|
SkillInfo.Table[(int)SkillName.Inscribe].Callback = new SkillUseCallback( OnUse );
|
|
}
|
|
|
|
public static TimeSpan OnUse( Mobile m )
|
|
{
|
|
Target target = new InternalTargetSrc();
|
|
m.Target = target;
|
|
m.SendLocalizedMessage( 1046295 ); // Target the book you wish to copy.
|
|
target.BeginTimeout( m, TimeSpan.FromMinutes( 1.0 ) );
|
|
|
|
return TimeSpan.FromSeconds( 1.0 );
|
|
}
|
|
|
|
private static Dictionary<BaseBook, Mobile> m_UseTable = new Dictionary<BaseBook, Mobile>();
|
|
|
|
private static void SetUser( BaseBook book, Mobile mob )
|
|
{
|
|
m_UseTable[book] = mob;
|
|
}
|
|
|
|
private static void CancelUser( BaseBook book )
|
|
{
|
|
m_UseTable.Remove( book );
|
|
}
|
|
|
|
public static Mobile GetUser( BaseBook book )
|
|
{
|
|
Mobile m = null;
|
|
m_UseTable.TryGetValue(book, out m);
|
|
return m;
|
|
}
|
|
|
|
public static bool IsEmpty( BaseBook book )
|
|
{
|
|
foreach ( BookPageInfo page in book.Pages )
|
|
{
|
|
foreach ( string line in page.Lines )
|
|
{
|
|
if ( line.Trim().Length != 0 )
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
public static void Copy( BaseBook bookSrc, BaseBook bookDst )
|
|
{
|
|
bookDst.Title = bookSrc.Title;
|
|
bookDst.Author = bookSrc.Author;
|
|
|
|
BookPageInfo[] pagesSrc = bookSrc.Pages;
|
|
BookPageInfo[] pagesDst = bookDst.Pages;
|
|
for ( int i = 0; i < pagesSrc.Length && i < pagesDst.Length; i++ )
|
|
{
|
|
BookPageInfo pageSrc = pagesSrc[i];
|
|
BookPageInfo pageDst = pagesDst[i];
|
|
|
|
int length = pageSrc.Lines.Length;
|
|
pageDst.Lines = new string[length];
|
|
|
|
for ( int j = 0; j < length; j++ )
|
|
pageDst.Lines[j] = pageSrc.Lines[j];
|
|
}
|
|
}
|
|
|
|
private class InternalTargetSrc : Target
|
|
{
|
|
public InternalTargetSrc() : base ( 3, false, TargetFlags.None )
|
|
{
|
|
}
|
|
|
|
protected override void OnTarget( Mobile from, object targeted )
|
|
{
|
|
BaseBook book = targeted as BaseBook;
|
|
if ( book == null )
|
|
from.SendLocalizedMessage( 1046296 ); // That is not a book
|
|
else if ( Inscribe.IsEmpty( book ) )
|
|
from.SendLocalizedMessage( 501611 ); // Can't copy an empty book.
|
|
else if ( Inscribe.GetUser( book ) != null )
|
|
from.SendLocalizedMessage( 501621 ); // Someone else is inscribing that item.
|
|
else
|
|
{
|
|
Target target = new InternalTargetDst( book );
|
|
from.Target = target;
|
|
from.SendLocalizedMessage( 501612 ); // Select a book to copy this to.
|
|
target.BeginTimeout( from, TimeSpan.FromMinutes( 1.0 ) );
|
|
Inscribe.SetUser( book, from );
|
|
}
|
|
}
|
|
|
|
protected override void OnTargetCancel( Mobile from, TargetCancelType cancelType )
|
|
{
|
|
if ( cancelType == TargetCancelType.Timeout )
|
|
from.SendLocalizedMessage( 501619 ); // You have waited too long to make your inscribe selection, your inscription attempt has timed out.
|
|
}
|
|
}
|
|
|
|
private class InternalTargetDst : Target
|
|
{
|
|
private BaseBook m_BookSrc;
|
|
|
|
public InternalTargetDst( BaseBook bookSrc ) : base ( 3, false, TargetFlags.None )
|
|
{
|
|
m_BookSrc = bookSrc;
|
|
}
|
|
|
|
protected override void OnTarget( Mobile from, object targeted )
|
|
{
|
|
if ( m_BookSrc.Deleted )
|
|
return;
|
|
|
|
BaseBook bookDst = targeted as BaseBook;
|
|
|
|
if ( bookDst == null )
|
|
from.SendLocalizedMessage( 1046296 ); // That is not a book
|
|
else if ( Inscribe.IsEmpty( m_BookSrc ) )
|
|
from.SendLocalizedMessage( 501611 ); // Can't copy an empty book.
|
|
else if ( bookDst == m_BookSrc )
|
|
from.SendLocalizedMessage( 501616 ); // Cannot copy a book onto itself.
|
|
else if ( !bookDst.Writable )
|
|
from.SendLocalizedMessage( 501614 ); // Cannot write into that book.
|
|
else if ( Inscribe.GetUser( bookDst ) != null )
|
|
from.SendLocalizedMessage( 501621 ); // Someone else is inscribing that item.
|
|
else
|
|
{
|
|
if ( from.CheckTargetSkill( SkillName.Inscribe, bookDst, 0, 50 ) )
|
|
{
|
|
Inscribe.Copy( m_BookSrc, bookDst );
|
|
|
|
from.SendLocalizedMessage( 501618 ); // You make a copy of the book.
|
|
from.PlaySound( 0x249 );
|
|
}
|
|
else
|
|
{
|
|
from.SendLocalizedMessage( 501617 ); // You fail to make a copy of the book.
|
|
}
|
|
}
|
|
}
|
|
|
|
protected override void OnTargetCancel( Mobile from, TargetCancelType cancelType )
|
|
{
|
|
if ( cancelType == TargetCancelType.Timeout )
|
|
from.SendLocalizedMessage( 501619 ); // You have waited too long to make your inscribe selection, your inscription attempt has timed out.
|
|
}
|
|
|
|
protected override void OnTargetFinish( Mobile from )
|
|
{
|
|
Inscribe.CancelUser( m_BookSrc );
|
|
}
|
|
}
|
|
}
|
|
} |