Overwrite
Complete Overwrite of the Folder with the free shard. ServUO 57.3 has been added.
This commit is contained in:
171
Scripts/Skills/Inscribe.cs
Normal file
171
Scripts/Skills/Inscribe.cs
Normal file
@@ -0,0 +1,171 @@
|
||||
using System;
|
||||
using System.Collections;
|
||||
using Server.Items;
|
||||
using Server.Targeting;
|
||||
|
||||
namespace Server.SkillHandlers
|
||||
{
|
||||
public class Inscribe
|
||||
{
|
||||
private static readonly Hashtable m_UseTable = new Hashtable();
|
||||
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);
|
||||
}
|
||||
|
||||
public static Mobile GetUser(BaseBook book)
|
||||
{
|
||||
return (Mobile)m_UseTable[book];
|
||||
}
|
||||
|
||||
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 static void SetUser(BaseBook book, Mobile mob)
|
||||
{
|
||||
m_UseTable[book] = mob;
|
||||
}
|
||||
|
||||
private static void CancelUser(BaseBook book)
|
||||
{
|
||||
m_UseTable.Remove(book);
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
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);
|
||||
}
|
||||
}
|
||||
else if (targeted is Server.Engines.Khaldun.MysteriousBook)
|
||||
{
|
||||
((Server.Engines.Khaldun.MysteriousBook)targeted).OnInscribeTarget(from);
|
||||
}
|
||||
else
|
||||
{
|
||||
from.SendLocalizedMessage(1046296); // That is not a 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.
|
||||
}
|
||||
}
|
||||
|
||||
private class InternalTargetDst : Target
|
||||
{
|
||||
private readonly BaseBook m_BookSrc;
|
||||
public InternalTargetDst(BaseBook bookSrc)
|
||||
: base(3, false, TargetFlags.None)
|
||||
{
|
||||
this.m_BookSrc = bookSrc;
|
||||
}
|
||||
|
||||
protected override void OnTarget(Mobile from, object targeted)
|
||||
{
|
||||
if (this.m_BookSrc.Deleted)
|
||||
return;
|
||||
|
||||
BaseBook bookDst = targeted as BaseBook;
|
||||
|
||||
if (bookDst == null)
|
||||
from.SendLocalizedMessage(1046296); // That is not a book
|
||||
else if (Inscribe.IsEmpty(this.m_BookSrc))
|
||||
from.SendLocalizedMessage(501611); // Can't copy an empty book.
|
||||
else if (bookDst == this.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(this.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(this.m_BookSrc);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user