120 lines
2.9 KiB
C#
120 lines
2.9 KiB
C#
using Server;
|
|
using System;
|
|
using Server.Engines.Quests;
|
|
using Server.Mobiles;
|
|
using Server.Targeting;
|
|
|
|
namespace Server.Items
|
|
{
|
|
public class BindingRope : Item
|
|
{
|
|
private Mobile m_BoundMobile;
|
|
private ProfessionalBountyQuest m_Quest;
|
|
|
|
[CommandProperty(AccessLevel.GameMaster)]
|
|
public Mobile BoundMobile
|
|
{
|
|
get { return m_BoundMobile; }
|
|
set { m_BoundMobile = value; }
|
|
}
|
|
|
|
public ProfessionalBountyQuest Quest
|
|
{
|
|
get { return m_Quest; }
|
|
set { m_Quest = value; }
|
|
}
|
|
|
|
public override int LabelNumber { get { return 1116717; } }
|
|
|
|
public BindingRope(ProfessionalBountyQuest quest) : base(5368)
|
|
{
|
|
m_Quest = quest;
|
|
}
|
|
|
|
public override void OnDoubleClick(Mobile from)
|
|
{
|
|
if (IsChildOf(from.Backpack) && m_BoundMobile == null)
|
|
{
|
|
from.Target = new InternalTarget(this);
|
|
from.SendLocalizedMessage(1116720); //Who do you want to tie up?
|
|
}
|
|
}
|
|
|
|
public void DoDelayedDelete(Mobile from)
|
|
{
|
|
Timer.DelayCall(TimeSpan.FromSeconds(2.5), new TimerStateCallback(DoDelete), from);
|
|
}
|
|
|
|
public void DoDelete(object o)
|
|
{
|
|
Mobile from = (Mobile)o;
|
|
|
|
if (from != null)
|
|
from.SendMessage("Your crew uses the rope to bind the captain to the front of your galleon.");
|
|
|
|
Delete();
|
|
}
|
|
|
|
private class InternalTarget : Target
|
|
{
|
|
private BindingRope m_Rope;
|
|
|
|
public InternalTarget(BindingRope rope) : base(2, false, TargetFlags.None)
|
|
{
|
|
m_Rope = rope;
|
|
}
|
|
|
|
protected override void OnTarget(Mobile from, object targeted)
|
|
{
|
|
if(targeted is Mobile)
|
|
{
|
|
if (targeted is PirateCaptain)
|
|
{
|
|
PirateCaptain cap = (PirateCaptain)targeted;
|
|
|
|
if(cap.Hits > cap.HitsMax / 10)
|
|
{
|
|
from.SendLocalizedMessage(1116756); //The pirate seems to have too much fight left to be bound.
|
|
}
|
|
else if(cap.TryBound(from, m_Rope.Quest))
|
|
{
|
|
m_Rope.BoundMobile = cap;
|
|
m_Rope.Quest.OnBound(cap);
|
|
cap.OnBound(m_Rope.Quest);
|
|
|
|
from.SendLocalizedMessage(1116721); //You begin binding the pirate.
|
|
|
|
m_Rope.DoDelayedDelete(from);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
from.SendMessage("They cannot by bound by that!");
|
|
}
|
|
}
|
|
else
|
|
{
|
|
from.SendMessage("They cannot by bound by that!");
|
|
}
|
|
}
|
|
}
|
|
|
|
public BindingRope(Serial serial) : base(serial)
|
|
{
|
|
}
|
|
|
|
public override void Serialize(GenericWriter writer)
|
|
{
|
|
base.Serialize(writer);
|
|
writer.Write((int)0);
|
|
writer.Write(m_BoundMobile);
|
|
}
|
|
|
|
public override void Deserialize(GenericReader reader)
|
|
{
|
|
base.Deserialize(reader);
|
|
int version = reader.ReadInt();
|
|
m_BoundMobile = reader.ReadMobile();
|
|
}
|
|
}
|
|
} |