130 lines
4.9 KiB
C#
130 lines
4.9 KiB
C#
using System;
|
|
using Server.Engines.Quests;
|
|
using Server.Engines.Quests.Hag;
|
|
using Server.Items;
|
|
using Server.Mobiles;
|
|
using Server.Targeting;
|
|
|
|
namespace Server.Engines.Harvest
|
|
{
|
|
public class HarvestTarget : Target
|
|
{
|
|
private readonly Item m_Tool;
|
|
private readonly HarvestSystem m_System;
|
|
|
|
public HarvestTarget(Item tool, HarvestSystem system)
|
|
: base(-1, true, TargetFlags.None)
|
|
{
|
|
m_Tool = tool;
|
|
m_System = system;
|
|
|
|
DisallowMultis = true;
|
|
}
|
|
|
|
protected override void OnTarget(Mobile from, object targeted)
|
|
{
|
|
if (m_System is Mining)
|
|
{
|
|
if (targeted is StaticTarget)
|
|
{
|
|
int itemID = ((StaticTarget)targeted).ItemID;
|
|
|
|
// grave
|
|
if (itemID == 0xED3 || itemID == 0xEDF || itemID == 0xEE0 || itemID == 0xEE1 || itemID == 0xEE2 || itemID == 0xEE8)
|
|
{
|
|
PlayerMobile player = from as PlayerMobile;
|
|
|
|
if (player != null)
|
|
{
|
|
QuestSystem qs = player.Quest;
|
|
|
|
if (qs is WitchApprenticeQuest)
|
|
{
|
|
FindIngredientObjective obj = qs.FindObjective(typeof(FindIngredientObjective)) as FindIngredientObjective;
|
|
|
|
if (obj != null && !obj.Completed && obj.Ingredient == Ingredient.Bones)
|
|
{
|
|
player.SendLocalizedMessage(1055037); // You finish your grim work, finding some of the specific bones listed in the Hag's recipe.
|
|
obj.Complete();
|
|
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else if (targeted is LandTarget && ((LandTarget)targeted).TileID >= 113 && ((LandTarget)targeted).TileID <= 120)
|
|
{
|
|
if (Server.Engines.Quests.TheGreatVolcanoQuest.OnHarvest(from, m_Tool))
|
|
return;
|
|
}
|
|
}
|
|
|
|
if (m_System is Lumberjacking && targeted is IChopable)
|
|
((IChopable)targeted).OnChop(from);
|
|
else if (m_System is Lumberjacking && targeted is IAxe && m_Tool is BaseAxe)
|
|
{
|
|
IAxe obj = (IAxe)targeted;
|
|
Item item = (Item)targeted;
|
|
|
|
if (!item.IsChildOf(from.Backpack))
|
|
from.SendLocalizedMessage(1062334); // This item must be in your backpack to be used.
|
|
else if (obj.Axe(from, (BaseAxe)m_Tool))
|
|
from.PlaySound(0x13E);
|
|
}
|
|
else if (m_System is Lumberjacking && targeted is ICarvable)
|
|
((ICarvable)targeted).Carve(from, (Item)m_Tool);
|
|
else if (m_System is Lumberjacking && FurnitureAttribute.Check(targeted as Item))
|
|
DestroyFurniture(from, (Item)targeted);
|
|
else if (m_System is Mining && targeted is TreasureMap)
|
|
((TreasureMap)targeted).OnBeginDig(from);
|
|
#region High Seas
|
|
else if (m_System is Mining && targeted is NiterDeposit)
|
|
((NiterDeposit)targeted).OnMine(from, m_Tool);
|
|
else if (m_System is Lumberjacking && targeted is CrackedLavaRockEast)
|
|
((CrackedLavaRockEast)targeted).OnCrack(from);
|
|
else if (m_System is Lumberjacking && targeted is CrackedLavaRockSouth)
|
|
((CrackedLavaRockSouth)targeted).OnCrack(from);
|
|
#endregion
|
|
else
|
|
{
|
|
// If we got here and we're lumberjacking then we didn't target something that can be done from the pack
|
|
if (m_System is Lumberjacking && m_Tool.Parent != from)
|
|
{
|
|
from.SendLocalizedMessage(500487); // The axe must be equipped for any serious wood chopping.
|
|
return;
|
|
}
|
|
m_System.StartHarvesting(from, m_Tool, targeted);
|
|
}
|
|
}
|
|
|
|
private void DestroyFurniture(Mobile from, Item item)
|
|
{
|
|
if (!from.InRange(item.GetWorldLocation(), 3))
|
|
{
|
|
from.SendLocalizedMessage(500446); // That is too far away.
|
|
return;
|
|
}
|
|
else if (!item.IsChildOf(from.Backpack) && !item.Movable)
|
|
{
|
|
from.SendLocalizedMessage(500462); // You can't destroy that while it is here.
|
|
return;
|
|
}
|
|
|
|
from.SendLocalizedMessage(500461); // You destroy the item.
|
|
Effects.PlaySound(item.GetWorldLocation(), item.Map, 0x3B3);
|
|
|
|
if (item is Container)
|
|
{
|
|
if (item is TrapableContainer)
|
|
(item as TrapableContainer).ExecuteTrap(from);
|
|
|
|
((Container)item).Destroy();
|
|
}
|
|
else
|
|
{
|
|
item.Delete();
|
|
}
|
|
}
|
|
}
|
|
} |