#W# Source and Scripts added. Added Scripts/Settings.cs to expose some basic tweak able settings.
This commit is contained in:
parent
b51c58f514
commit
3045c83799
3512 changed files with 627673 additions and 0 deletions
164
Scripts/Skills/Inscribe.cs
Normal file
164
Scripts/Skills/Inscribe.cs
Normal file
|
|
@ -0,0 +1,164 @@
|
|||
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 );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue