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 ( 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 ( 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 ( 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 ) ) { // Resource 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 ( 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 ( 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 ) 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 BaseWeapon ) ((BaseWeapon)item).Identified = true; if ( item is BaseArmor ) ((BaseArmor)item).Identified = true; if ( item is BaseClothing ) ((BaseClothing)item).Identified = true; if ( item is BaseJewel ) ((BaseJewel)item).Identified = true; //For new boards system if ( item is Board ) { Type resourceType = typeRes; if ( resourceType == null ) resourceType = Ressources.GetAt( 0 ).ItemType; CraftResource thisResource = CraftResources.GetFromType( resourceType ); switch ( thisResource ) { case CraftResource.Pine: item = new PineBoard(); break; case CraftResource.Cedar: item = new CedarBoard(); break; case CraftResource.Cherry: item = new CherryBoard(); break; case CraftResource.Mahogany: item = new MahoganyBoard(); break; case CraftResource.Oak: item = new OakBoard(); break; case CraftResource.Ash: item = new AshBoard(); break; case CraftResource.Yew: item = new YewBoard(); break; case CraftResource.Heartwood: item = new HeartwoodBoard(); break; case CraftResource.Bloodwood: item = new BloodwoodBoard(); break; case CraftResource.Frostwood: item = new FrostwoodBoard(); break; default: item = new Board(); break; } } //end for new boards system //For new marble system if ( item is Marble ) { Type resourceType = typeRes; if ( resourceType == null ) resourceType = Ressources.GetAt( 0 ).ItemType; CraftResource thisResource = CraftResources.GetFromType( resourceType ); switch ( thisResource ) { case CraftResource.DullCopper: item = new DullCopperMarble(); break; case CraftResource.ShadowIron: item = new ShadowIronMarble(); break; case CraftResource.Copper: item = new CopperMarble(); break; case CraftResource.Bronze: item = new BronzeMarble(); break; case CraftResource.Gold: item = new GoldMarble(); break; case CraftResource.Agapite: item = new AgapiteMarble(); break; case CraftResource.Verite: item = new VeriteMarble(); break; case CraftResource.Valorite: item = new ValoriteMarble(); break; case CraftResource.Silver: item = new SilverMarble(); break; case CraftResource.Platinum: item = new PlatinumMarble(); break; case CraftResource.Mythril: item = new MythrilMarble(); break; case CraftResource.Obsidian: item = new ObsidianMarble(); break; case CraftResource.Jade: item = new JadeMarble(); break; case CraftResource.Moonstone: item = new MoonstoneMarble(); break; case CraftResource.Sunstone: item = new SunstoneMarble(); break; case CraftResource.Bloodstone: item = new BloodstoneMarble(); break; default: item = new Marble(); break; } } //end for new marble system 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 ); //from.PlaySound( 0x57 ); } 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 ); } } } } } // TODO: Scroll imbuing if ( queryFactionImbue ) from.SendGump( new FactionImbueGump( quality, item, from, craftSystem, tool, num, availableSilver, faction, def ) ); else 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 ( 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; // Not enough resource to craft it if ( !ConsumeRes( from, typeRes, craftSystem, ref resHue, ref maxAmount, consumeType, ref message, true ) ) { 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 ) toolBroken = true; if ( toolBroken ) tool.Delete(); // SkillCheck failed. int num = craftSystem.PlayEndingEffect( from, true, true, toolBroken, endquality, false, this ); if ( tool != null && !tool.Deleted && tool.UsesRemaining > 0 ) from.SendGump( new CraftGump( from, craftSystem, tool, num ) ); 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 (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 (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 (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)) { // Resource 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 (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 (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) { #region Mondain's Legacy if (hammer is HammerOfHephaestus) { if (hammer.UsesRemaining > 0) hammer.UsesRemaining--; if (hammer.UsesRemaining < 1) from.PlaceInBackpack(hammer); } else { hammer.UsesRemaining--; if (hammer.UsesRemaining < 1) hammer.Delete(); } #endregion } } #region Mondain's Legacy if (tool is HammerOfHephaestus) { if (tool.UsesRemaining < 1) tool.UsesRemaining = 0; } else { if (tool.UsesRemaining < 1) toolBroken = true; if (toolBroken) tool.Delete(); } #endregion 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) { #region Mondain's Legacy if (item is Board) { Type resourceType = typeRes; if (resourceType == null) resourceType = Ressources.GetAt(0).ItemType; CraftResource thisResource = CraftResources.GetFromType(resourceType); switch (thisResource) { case CraftResource.Oak: item = new OakBoard(); break; case CraftResource.Ash: item = new AshBoard(); break; case CraftResource.Yew: item = new YewBoard(); break; case CraftResource.Heartwood: item = new HeartwoodBoard(); break; case CraftResource.Bloodwood: item = new BloodwoodBoard(); break; case CraftResource.Frostwood: item = new FrostwoodBoard(); break; case CraftResource.Pine: item = new PineBoard(); break; case CraftResource.Cedar: item = new CedarBoard(); break; case CraftResource.Cherry: item = new CherryBoard(); break; case CraftResource.Mahogany: item = new MahoganyBoard(); break; default: item = new Board(); break; } } #endregion 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; } #region Plant Pigments if( item is PlantPigment && ( craftSystem is DefAlchemy || craftSystem is DefCooking ) ) { ((PlantPigment)item).PigmentHue = PlantPigmentHueInfo.HueFromPlantHue(m_PlantHue); } if( item is NaturalDye && ( craftSystem is DefAlchemy || craftSystem is DefCooking ) ) { ((NaturalDye)item).PigmentHue = PlantPigmentHueInfo.GetInfo(m_PlantPigmentHue).PlantPigmentHue; } if (item is SoftenedReeds && (craftSystem is DefAlchemy || craftSystem is DefCooking)) { ((SoftenedReeds)item).PlantHue = PlantHueInfo.GetInfo(this.m_PlantHue).PlantHue; } if (item is BaseContainer && (craftSystem is DefBasketweaving)) { ((BaseContainer)item).Hue = PlantHueInfo.GetInfo(this.m_PlantHue).Hue; } #endregion from.AddToBackpack(item); //typeres amount quality Type resourceType = typeRes; if (!m_UseAllRes) { int m_TokensAmount = 1; if (typeRes != null) { CraftResource thisResource = CraftResources.GetFromType(typeRes); switch (thisResource) { default: m_TokensAmount *= 1; break; case CraftResource.SpinedLeather: m_TokensAmount *= 2; break; case CraftResource.HornedLeather: m_TokensAmount *= 3; break; case CraftResource.BarbedLeather: m_TokensAmount *= 4; break; case CraftResource.DaemonLeather: m_TokensAmount *= 5; break; case CraftResource.DragonLeather: m_TokensAmount *= 6; break; //case CraftResource.BlazeLeather: i_TokensAmount *= 7; break; //case CraftResource.DaemonicLeather: i_TokensAmount *= 8; break; //case CraftResource.ShadowLeather: i_TokensAmount *= 9; break; //case CraftResource.FrostLeather: i_TokensAmount *= 10; break; //case CraftResource.EtherealLeather: i_TokensAmount *= 11; break; case CraftResource.DullCopper: m_TokensAmount *= 2; break; case CraftResource.ShadowIron: m_TokensAmount *= 3; break; case CraftResource.Copper: m_TokensAmount *= 4; break; case CraftResource.Bronze: m_TokensAmount *= 5; break; case CraftResource.Gold: m_TokensAmount *= 6; break; case CraftResource.Agapite: m_TokensAmount *= 7; break; case CraftResource.Verite: m_TokensAmount *= 8; break; case CraftResource.Valorite: m_TokensAmount *= 9; break; case CraftResource.Silver: m_TokensAmount *= 10; break; case CraftResource.Jade: m_TokensAmount *= 11; break; case CraftResource.Moonstone: m_TokensAmount *= 12; break; case CraftResource.Sunstone: m_TokensAmount *= 13; break; //case CraftResource.Platinum: i_TokensAmount *= 14; break; case CraftResource.RedScales: m_TokensAmount *= 2; break; case CraftResource.YellowScales: m_TokensAmount *= 3; break; case CraftResource.BlackScales: m_TokensAmount *= 4; break; case CraftResource.GreenScales: m_TokensAmount *= 5; break; case CraftResource.WhiteScales: m_TokensAmount *= 6; break; case CraftResource.BlueScales: m_TokensAmount *= 7; break; //case CraftResource.CopperScales: i_TokensAmount *= 8; break; //case CraftResource.SilverScales: i_TokensAmount *= 9; break; //case CraftResource.GoldScales: i_TokensAmount *= 10; break; case CraftResource.Pine: m_TokensAmount *= 2; break; case CraftResource.Oak: m_TokensAmount *= 3; break; case CraftResource.Ash: m_TokensAmount *= 4; break; case CraftResource.Yew: m_TokensAmount *= 5; break; //case CraftResource.Oak: m_TokensAmount *= 6; break; case CraftResource.Cherry: m_TokensAmount *= 7; break; case CraftResource.Cedar: m_TokensAmount *= 8; break; case CraftResource.Mahogany: m_TokensAmount *= 9; break; // case CraftResource.PurpleHeart: i_TokensAmount *= 10; break; // case CraftResource.Redwood: i_TokensAmount *= 11; break; // case CraftResource.Petrified: i_TokensAmount *= 12; break; case CraftResource.Heartwood: m_TokensAmount *= 10; break; case CraftResource.Bloodwood: m_TokensAmount *= 11; break; case CraftResource.Frostwood: m_TokensAmount *= 12; break; } } m_TokensAmount *= Ressources.GetAt(0).Amount; double tok = m_TokensAmount; if (quality == 2) tok *= 1.35; tok /= 8; if (tok >= 1) m_TokensAmount = (int)tok; else m_TokensAmount = 1; TokenValidate.RewardTokens(from, m_TokensAmount); } if (from.AccessLevel > AccessLevel.Player) CommandLogging.WriteLine(from, "Crafting {0} with craft system {1}", CommandLogging.Format(item), craftSystem.GetType().Name); //from.PlaySound( 0x57 ); } 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); } } } } } // TODO: Scroll imbuing if (queryFactionImbue) from.SendGump(new FactionImbueGump(quality, item, from, craftSystem, tool, num, availableSilver, faction, def)); else 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 (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; // Not enough resource to craft it if (!ConsumeRes(from, typeRes, craftSystem, ref resHue, ref maxAmount, consumeType, ref message, true)) { 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) toolBroken = true; if (toolBroken) tool.Delete(); // SkillCheck failed. int num = craftSystem.PlayEndingEffect(from, true, true, toolBroken, endquality, false, this); if (tool != null && !tool.Deleted && tool.UsesRemaining > 0) from.SendGump(new CraftGump(from, craftSystem, tool, num)); else if (num > 0) from.SendLocalizedMessage(num); } }