#W# Added Crafting Queue and Crafting skill list.
This commit is contained in:
parent
7ba1dd7245
commit
791f82b4d0
7 changed files with 911 additions and 5 deletions
|
|
@ -1064,7 +1064,7 @@ namespace Server.Engines.Craft
|
|||
}
|
||||
}
|
||||
|
||||
public void CompleteCraft( int quality, bool makersMark, Mobile from, CraftSystem craftSystem, Type typeRes, BaseTool tool, CustomCraft customCraft )
|
||||
/*public void CompleteCraft( int quality, bool makersMark, Mobile from, CraftSystem craftSystem, Type typeRes, BaseTool tool, CustomCraft customCraft )
|
||||
{
|
||||
int badCraft = craftSystem.CanCraft( from, tool, m_Type );
|
||||
|
||||
|
|
@ -1292,6 +1292,260 @@ namespace Server.Engines.Craft
|
|||
else if ( num > 0 )
|
||||
from.SendLocalizedMessage( num );
|
||||
}
|
||||
}*/
|
||||
|
||||
public void CompleteCraft( int quality, bool makersMark, Mobile from, CraftSystem craftSystem, Type typeRes, BaseTool tool, CustomCraft customCraft )
|
||||
{
|
||||
int badCraft = craftSystem.CanCraft( from, tool, m_Type );
|
||||
|
||||
if ( badCraft > 0 )
|
||||
{
|
||||
if ( !CraftQueueManager.CheckQueue( from, craftSystem, tool, 1, false, badCraft ) )
|
||||
{
|
||||
if ( tool != null && !tool.Deleted && tool.UsesRemaining > 0 )
|
||||
from.SendGump( new CraftGump( from, craftSystem, tool, badCraft ) );
|
||||
else
|
||||
from.SendLocalizedMessage( badCraft );
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
int checkResHue = 0, checkMaxAmount = 0;
|
||||
object checkMessage = null;
|
||||
|
||||
// Not enough resource to craft it
|
||||
if ( !ConsumeRes( from, typeRes, craftSystem, ref checkResHue, ref checkMaxAmount, ConsumeType.None, ref checkMessage ) )
|
||||
{
|
||||
if ( !CraftQueueManager.CheckQueue( from, craftSystem, tool, 1, false, checkMessage ) )
|
||||
{
|
||||
if ( tool != null && !tool.Deleted && tool.UsesRemaining > 0 )
|
||||
from.SendGump( new CraftGump( from, craftSystem, tool, checkMessage ) );
|
||||
else if ( checkMessage is int && (int)checkMessage > 0 )
|
||||
from.SendLocalizedMessage( (int)checkMessage );
|
||||
else if ( checkMessage is string )
|
||||
from.SendMessage( (string)checkMessage );
|
||||
}
|
||||
return;
|
||||
}
|
||||
else if ( !ConsumeAttributes( from, ref checkMessage, false ) )
|
||||
{
|
||||
if ( !CraftQueueManager.CheckQueue( from, craftSystem, tool, 1, false, checkMessage ) )
|
||||
{
|
||||
if ( tool != null && !tool.Deleted && tool.UsesRemaining > 0 )
|
||||
from.SendGump( new CraftGump( from, craftSystem, tool, checkMessage ) );
|
||||
else if ( checkMessage is int && (int)checkMessage > 0 )
|
||||
from.SendLocalizedMessage( (int)checkMessage );
|
||||
else if ( checkMessage is string )
|
||||
from.SendMessage( (string)checkMessage );
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
bool toolBroken = false;
|
||||
int ignored = 1;
|
||||
int endquality = 1;
|
||||
bool allRequiredSkills = true;
|
||||
|
||||
if ( CheckSkills( from, typeRes, craftSystem, ref ignored, ref allRequiredSkills ) )
|
||||
{
|
||||
int resHue = 0;
|
||||
int maxAmount = 0;
|
||||
object message = null;
|
||||
|
||||
// Not enough resource to craft it
|
||||
if ( !ConsumeRes( from, typeRes, craftSystem, ref resHue, ref maxAmount, ConsumeType.All, ref message ) )
|
||||
{
|
||||
if ( !CraftQueueManager.CheckQueue( from, craftSystem, tool, 1, false, message ) )
|
||||
{
|
||||
if ( tool != null && !tool.Deleted && tool.UsesRemaining > 0 )
|
||||
from.SendGump( new CraftGump( from, craftSystem, tool, message ) );
|
||||
else if ( message is int && (int)message > 0 )
|
||||
from.SendLocalizedMessage( (int)message );
|
||||
else if ( message is string )
|
||||
from.SendMessage( (string)message );
|
||||
}
|
||||
return;
|
||||
}
|
||||
else if ( !ConsumeAttributes( from, ref message, true ) )
|
||||
{
|
||||
if ( !CraftQueueManager.CheckQueue( from, craftSystem, tool, 1, false, message ) )
|
||||
{
|
||||
if ( tool != null && !tool.Deleted && tool.UsesRemaining > 0 )
|
||||
from.SendGump( new CraftGump( from, craftSystem, tool, message ) );
|
||||
else if ( message is int && (int)message > 0 )
|
||||
from.SendLocalizedMessage( (int)message );
|
||||
else if ( message is string )
|
||||
from.SendMessage( (string)message );
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
tool.UsesRemaining--;
|
||||
|
||||
if ( craftSystem is DefBlacksmithy )
|
||||
{
|
||||
AncientSmithyHammer hammer = from.FindItemOnLayer( Layer.OneHanded ) as AncientSmithyHammer;
|
||||
if ( hammer != null && hammer != tool )
|
||||
{
|
||||
hammer.UsesRemaining--;
|
||||
if ( hammer.UsesRemaining < 1 )
|
||||
hammer.Delete();
|
||||
}
|
||||
}
|
||||
|
||||
if ( tool.UsesRemaining < 1 && tool.BreakOnDepletion )
|
||||
toolBroken = true;
|
||||
|
||||
if ( toolBroken )
|
||||
tool.Delete();
|
||||
|
||||
int num = 0;
|
||||
Item item;
|
||||
|
||||
if ( customCraft != null )
|
||||
{
|
||||
item = customCraft.CompleteCraft( out num );
|
||||
}
|
||||
else if ( typeof( MapItem ).IsAssignableFrom( ItemType ) && from.Map != Map.Trammel && from.Map != Map.Felucca )
|
||||
{
|
||||
item = new IndecipherableMap();
|
||||
from.SendLocalizedMessage( 1070800 ); // The map you create becomes mysteriously indecipherable.
|
||||
}
|
||||
else
|
||||
{
|
||||
item = Activator.CreateInstance( ItemType ) as Item;
|
||||
}
|
||||
|
||||
if ( item != null )
|
||||
{
|
||||
if( item is ICraftable )
|
||||
endquality = ((ICraftable)item).OnCraft( quality, makersMark, from, craftSystem, typeRes, tool, this, resHue );
|
||||
else if ( item.Hue == 0 )
|
||||
item.Hue = resHue;
|
||||
|
||||
if ( maxAmount > 0 )
|
||||
{
|
||||
if ( !item.Stackable && item is IUsesRemaining )
|
||||
((IUsesRemaining)item).UsesRemaining *= maxAmount;
|
||||
else
|
||||
item.Amount = maxAmount;
|
||||
}
|
||||
|
||||
//from.AddToBackpack( item );
|
||||
Container pack = from.Backpack;
|
||||
SalvageBag craftBag = pack != null ? pack.FindItemByType( typeof( SalvageBag ) ) as SalvageBag : null;
|
||||
|
||||
if ( craftBag != null && craftBag.TryDropItem( from, item, false ) )
|
||||
{
|
||||
}
|
||||
else
|
||||
{
|
||||
from.AddToBackpack( item );
|
||||
}
|
||||
|
||||
if( from.AccessLevel > AccessLevel.Player )
|
||||
CommandLogging.WriteLine( from, "Crafting {0} with craft system {1}", CommandLogging.Format( item ), craftSystem.GetType().Name );
|
||||
}
|
||||
|
||||
if ( num == 0 )
|
||||
num = craftSystem.PlayEndingEffect( from, false, true, toolBroken, endquality, makersMark, this );
|
||||
|
||||
bool queryFactionImbue = false;
|
||||
int availableSilver = 0;
|
||||
FactionItemDefinition def = null;
|
||||
Faction faction = null;
|
||||
|
||||
if ( item is IFactionItem )
|
||||
{
|
||||
def = FactionItemDefinition.Identify( item );
|
||||
|
||||
if ( def != null )
|
||||
{
|
||||
faction = Faction.Find( from );
|
||||
|
||||
if ( faction != null )
|
||||
{
|
||||
Town town = Town.FromRegion( from.Region );
|
||||
|
||||
if ( town != null && town.Owner == faction )
|
||||
{
|
||||
Container pack = from.Backpack;
|
||||
|
||||
if ( pack != null )
|
||||
{
|
||||
availableSilver = pack.GetAmount( typeof( Silver ) );
|
||||
|
||||
if ( availableSilver >= def.SilverCost )
|
||||
queryFactionImbue = Faction.IsNearType( from, def.VendorType, 12 );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ( queryFactionImbue )
|
||||
{
|
||||
// Halt queue for Faction Imbuing decisions
|
||||
CraftQueueManager.CheckQueue( from, craftSystem, tool, endquality, true, "Faction Imbue" );
|
||||
from.SendGump( new FactionImbueGump( quality, item, from, craftSystem, tool, num, availableSilver, faction, def ) );
|
||||
}
|
||||
else if ( !CraftQueueManager.CheckQueue( from, craftSystem, tool, endquality, true, toolBroken ? (object) 1044038 : (object)null ) )
|
||||
{
|
||||
if ( tool != null && !tool.Deleted && tool.UsesRemaining > 0 )
|
||||
from.SendGump( new CraftGump( from, craftSystem, tool, num ) );
|
||||
else if ( num > 0 )
|
||||
from.SendLocalizedMessage( num );
|
||||
}
|
||||
}
|
||||
else if ( !allRequiredSkills )
|
||||
{
|
||||
if ( !CraftQueueManager.CheckQueue( from, craftSystem, tool, 1, false, 1044153 ) )
|
||||
{
|
||||
if ( tool != null && !tool.Deleted && tool.UsesRemaining > 0 )
|
||||
from.SendGump( new CraftGump( from, craftSystem, tool, 1044153 ) );
|
||||
else
|
||||
from.SendLocalizedMessage( 1044153 ); // You don't have the required skills to attempt this item.
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
ConsumeType consumeType = ( UseAllRes ? ConsumeType.Half : ConsumeType.All );
|
||||
int resHue = 0;
|
||||
int maxAmount = 0;
|
||||
object message = null;
|
||||
|
||||
if ( !ConsumeRes( from, typeRes, craftSystem, ref resHue, ref maxAmount, consumeType, ref message, true ) )
|
||||
{
|
||||
if ( !CraftQueueManager.CheckQueue( from, craftSystem, tool, 1, false, message ) )
|
||||
{
|
||||
if ( tool != null && !tool.Deleted && tool.UsesRemaining > 0 )
|
||||
from.SendGump( new CraftGump( from, craftSystem, tool, message ) );
|
||||
else if ( message is int && (int)message > 0 )
|
||||
from.SendLocalizedMessage( (int)message );
|
||||
else if ( message is string )
|
||||
from.SendMessage( (string)message );
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
tool.UsesRemaining--;
|
||||
|
||||
if ( tool.UsesRemaining < 1 && tool.BreakOnDepletion )
|
||||
toolBroken = true;
|
||||
|
||||
if ( toolBroken )
|
||||
tool.Delete();
|
||||
|
||||
int num = craftSystem.PlayEndingEffect( from, true, true, toolBroken, endquality, false, this );
|
||||
|
||||
if ( !CraftQueueManager.CheckQueue( from, craftSystem, tool, endquality, false, toolBroken ? (object)1044038 : (object)null ) )
|
||||
{
|
||||
if ( tool != null && !tool.Deleted && tool.UsesRemaining > 0 )
|
||||
from.SendGump( new CraftGump( from, craftSystem, tool, num ) );
|
||||
else if ( num > 0 )
|
||||
from.SendLocalizedMessage( num );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private class InternalTimer : Timer
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue