121 lines
No EOL
3.4 KiB
C#
121 lines
No EOL
3.4 KiB
C#
using System;
|
|
using Server;
|
|
using Server.Targeting;
|
|
using Server.Items;
|
|
|
|
namespace Server.Engines.Craft
|
|
{
|
|
public class Resmelt
|
|
{
|
|
public Resmelt()
|
|
{
|
|
}
|
|
|
|
public static void Do( Mobile from, CraftSystem craftSystem, BaseTool tool )
|
|
{
|
|
int num = craftSystem.CanCraft( from, tool, null );
|
|
|
|
if ( num > 0 )
|
|
{
|
|
from.SendGump( new CraftGump( from, craftSystem, tool, num ) );
|
|
}
|
|
else
|
|
{
|
|
from.Target = new InternalTarget( craftSystem, tool );
|
|
from.SendLocalizedMessage( 1044273 ); // Target an item to recycle.
|
|
}
|
|
}
|
|
|
|
private class InternalTarget : Target
|
|
{
|
|
private CraftSystem m_CraftSystem;
|
|
private BaseTool m_Tool;
|
|
|
|
public InternalTarget( CraftSystem craftSystem, BaseTool tool ) : base ( 2, false, TargetFlags.None )
|
|
{
|
|
m_CraftSystem = craftSystem;
|
|
m_Tool = tool;
|
|
}
|
|
|
|
private bool Resmelt( Mobile from, Item item, CraftResource resource )
|
|
{
|
|
try
|
|
{
|
|
if ( CraftResources.GetType( resource ) != CraftResourceType.Metal )
|
|
return false;
|
|
|
|
CraftResourceInfo info = CraftResources.GetInfo( resource );
|
|
|
|
if ( info == null || info.ResourceTypes.Length == 0 )
|
|
return false;
|
|
|
|
CraftItem craftItem = m_CraftSystem.CraftItems.SearchFor( item.GetType() );
|
|
|
|
if ( craftItem == null || craftItem.Ressources.Count == 0 )
|
|
return false;
|
|
|
|
CraftRes craftResource = craftItem.Ressources.GetAt( 0 );
|
|
|
|
if ( craftResource.Amount < 2 )
|
|
return false; // Not enough metal to resmelt
|
|
|
|
Type resourceType = info.ResourceTypes[0];
|
|
Item ingot = (Item)Activator.CreateInstance( resourceType );
|
|
|
|
if ( item is DragonBardingDeed || (item is BaseArmor && ((BaseArmor)item).PlayerConstructed) || (item is BaseWeapon && ((BaseWeapon)item).PlayerConstructed) || (item is BaseClothing && ((BaseClothing)item).PlayerConstructed) )
|
|
ingot.Amount = craftResource.Amount / 2;
|
|
else
|
|
ingot.Amount = 1;
|
|
|
|
item.Delete();
|
|
from.AddToBackpack( ingot );
|
|
|
|
from.PlaySound( 0x2A );
|
|
from.PlaySound( 0x240 );
|
|
return true;
|
|
}
|
|
catch
|
|
{
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
protected override void OnTarget( Mobile from, object targeted )
|
|
{
|
|
int num = m_CraftSystem.CanCraft( from, m_Tool, null );
|
|
|
|
if ( num > 0 )
|
|
{
|
|
from.SendGump( new CraftGump( from, m_CraftSystem, m_Tool, num ) );
|
|
}
|
|
else
|
|
{
|
|
bool success = false;
|
|
bool isStoreBought = false;
|
|
|
|
if ( targeted is BaseArmor )
|
|
{
|
|
success = Resmelt( from, (BaseArmor)targeted, ((BaseArmor)targeted).Resource );
|
|
isStoreBought = !((BaseArmor)targeted).PlayerConstructed;
|
|
}
|
|
else if ( targeted is BaseWeapon )
|
|
{
|
|
success = Resmelt( from, (BaseWeapon)targeted, ((BaseWeapon)targeted).Resource );
|
|
isStoreBought = !((BaseWeapon)targeted).PlayerConstructed;
|
|
}
|
|
else if ( targeted is DragonBardingDeed )
|
|
{
|
|
success = Resmelt( from, (DragonBardingDeed)targeted, ((DragonBardingDeed)targeted).Resource );
|
|
isStoreBought = false;
|
|
}
|
|
|
|
if ( success )
|
|
from.SendGump( new CraftGump( from, m_CraftSystem, m_Tool, isStoreBought ? 500418 : 1044270 ) ); // You melt the item down into ingots.
|
|
else
|
|
from.SendGump( new CraftGump( from, m_CraftSystem, m_Tool, 1044272 ) ); // You can't melt that down into ingots.
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} |