using System; using Server.Gumps; using Server.Network; using Server.Items; using Server.Misc; using Server.Mobiles; namespace Server.Engines.Craft { public class CraftGumpItem : Gump { private Mobile m_From; private CraftSystem m_CraftSystem; private CraftItem m_CraftItem; private BaseTool m_Tool; private const int LabelHue = 0x480; // 0x384 private const int RedLabelHue = 0x20; private const int LabelColor = 0x7FFF; private const int RedLabelColor = 0x6400; private const int GreyLabelColor = 0x3DEF; private int m_OtherCount; public CraftGumpItem( Mobile from, CraftSystem craftSystem, CraftItem craftItem, BaseTool tool ) : base( 40, 40 ) { m_From = from; m_CraftSystem = craftSystem; m_CraftItem = craftItem; m_Tool = tool; from.CloseGump( typeof( CraftGump ) ); from.CloseGump( typeof( CraftGumpItem ) ); AddPage( 0 ); AddBackground( 0, 0, 530, 417, 5054 ); AddImageTiled( 10, 10, 510, 22, 2624 ); AddImageTiled( 10, 37, 150, 148, 2624 ); AddImageTiled( 165, 37, 355, 90, 2624 ); AddImageTiled( 10, 190, 155, 22, 2624 ); AddImageTiled( 10, 217, 150, 53, 2624 ); AddImageTiled( 165, 132, 355, 80, 2624 ); AddImageTiled( 10, 275, 155, 22, 2624 ); AddImageTiled( 10, 302, 150, 53, 2624 ); AddImageTiled( 165, 217, 355, 80, 2624 ); AddImageTiled( 10, 360, 155, 22, 2624 ); AddImageTiled( 165, 302, 355, 80, 2624 ); AddImageTiled( 10, 387, 510, 22, 2624 ); AddAlphaRegion( 10, 10, 510, 399 ); AddHtmlLocalized( 170, 40, 150, 20, 1044053, LabelColor, false, false ); // ITEM AddHtmlLocalized( 10, 192, 150, 22, 1044054, LabelColor, false, false ); //
SKILLS
AddHtmlLocalized( 10, 277, 150, 22, 1044055, LabelColor, false, false ); //
MATERIALS
AddHtmlLocalized( 10, 362, 150, 22, 1044056, LabelColor, false, false ); //
OTHER
if ( craftSystem.GumpTitleNumber > 0 ) AddHtmlLocalized( 10, 12, 510, 20, craftSystem.GumpTitleNumber, LabelColor, false, false ); else AddHtml( 10, 12, 510, 20, craftSystem.GumpTitleString, false, false ); AddButton( 15, 387, 4014, 4016, 0, GumpButtonType.Reply, 0 ); AddHtmlLocalized( 50, 390, 150, 18, 1044150, LabelColor, false, false ); // BACK AddButton( 270, 387, 4005, 4007, 1, GumpButtonType.Reply, 0 ); AddHtmlLocalized( 305, 390, 150, 18, 1044151, LabelColor, false, false ); // MAKE NOW if ( craftItem.NameNumber > 0 ) AddHtmlLocalized( 330, 40, 180, 18, craftItem.NameNumber, LabelColor, false, false ); else AddLabel( 330, 40, LabelHue, craftItem.NameString ); if ( craftItem.UseAllRes ) AddHtmlLocalized( 170, 302 + (m_OtherCount++ * 20), 310, 18, 1048176, LabelColor, false, false ); // Makes as many as possible at once DrawItem(); DrawSkill(); DrawResource(); } private bool m_ShowExceptionalChance; public void DrawItem() { Type type = m_CraftItem.ItemType; AddItem( 20, 50, CraftItem.ItemIDOf( type ) ); if ( m_CraftItem.IsMarkable( type ) ) { AddHtmlLocalized( 170, 302 + (m_OtherCount++ * 20), 310, 18, 1044059, LabelColor, false, false ); // This item may hold its maker's mark m_ShowExceptionalChance = true; } } public void DrawSkill() { for ( int i = 0; i < m_CraftItem.Skills.Count; i++ ) { CraftSkill skill = m_CraftItem.Skills.GetAt( i ); double minSkill = skill.MinSkill, maxSkill = skill.MaxSkill; if ( minSkill < 0 ) minSkill = 0; AddLabel( 170, 132 + (i * 20), LabelHue, SkillCheck.TradeName( skill.SkillToMake ) ); AddLabel( 430, 132 + (i * 20), LabelHue, String.Format( "{0:F1}", minSkill ) ); } CraftSubResCol res = ( m_CraftSystem.CraftSubRes ); int resIndex = -1; CraftContext context = m_CraftSystem.GetContext( m_From ); if ( context != null ) resIndex = ( context.LastResourceIndex ); bool allRequiredSkills = true; double chance = m_CraftItem.GetSuccessChance( m_From, resIndex > -1 ? res.GetAt( resIndex ).ItemType : null, m_CraftSystem, ref allRequiredSkills ); double excepChance = m_CraftItem.GetExceptionalChance( m_CraftSystem, chance, m_From ); if ( chance < 0.0 ) chance = 0.0; else if ( chance > 1.0 ) chance = 1.0; AddHtmlLocalized( 170, 80, 250, 18, 1044057, LabelColor, false, false ); // Success Chance: AddLabel( 430, 80, LabelHue, String.Format( "{0:F1}%", chance * 100 ) ); if ( m_ShowExceptionalChance ) { if( excepChance < 0.0 ) excepChance = 0.0; else if( excepChance > 1.0 ) excepChance = 1.0; AddHtmlLocalized( 170, 100, 250, 18, 1044058, 32767, false, false ); // Exceptional Chance: AddLabel( 430, 100, LabelHue, String.Format( "{0:F1}%", excepChance * 100 ) ); } } private static Type typeofBlankScroll = typeof( BlankScroll ); private static Type typeofSpellScroll = typeof( SpellScroll ); public void DrawResource() { bool retainedColor = false; CraftContext context = m_CraftSystem.GetContext( m_From ); CraftSubResCol res = ( m_CraftSystem.CraftSubRes ); int resIndex = -1; if ( context != null ) resIndex = ( context.LastResourceIndex ); bool cropScroll = ( m_CraftItem.Resources.Count > 1 ) && m_CraftItem.Resources.GetAt( m_CraftItem.Resources.Count - 1 ).ItemType == typeofBlankScroll && typeofSpellScroll.IsAssignableFrom( m_CraftItem.ItemType ); for ( int i = 0; i < m_CraftItem.Resources.Count - (cropScroll ? 1 : 0) && i < 4; i++ ) { Type type; string nameString; int nameNumber; CraftRes craftResource = m_CraftItem.Resources.GetAt( i ); type = craftResource.ItemType; nameString = craftResource.NameString; nameNumber = craftResource.NameNumber; // Resource Mutation if ( type == res.ResType && resIndex > -1 ) { CraftSubRes subResource = res.GetAt( resIndex ); type = subResource.ItemType; nameString = subResource.NameString; nameNumber = subResource.GenericNameNumber; if ( nameNumber <= 0 ) nameNumber = subResource.NameNumber; } // ****************** if ( !retainedColor && m_CraftItem.RetainsColorFrom( m_CraftSystem, type ) ) { retainedColor = true; AddHtmlLocalized( 170, 302 + (m_OtherCount++ * 20), 310, 18, 1044152, LabelColor, false, false ); // * The item retains the color of this material AddLabel( 500, 219 + (i * 20), LabelHue, "*" ); } if ( nameNumber > 0 ) AddHtmlLocalized( 170, 219 + (i * 20), 310, 18, nameNumber, LabelColor, false, false ); else AddLabel( 170, 219 + (i * 20), LabelHue, nameString ); AddLabel( 430, 219 + (i * 20), LabelHue, craftResource.Amount.ToString() ); } if ( cropScroll ) AddHtmlLocalized( 170, 302 + (m_OtherCount++ * 20), 360, 18, 1044379, LabelColor, false, false ); // Inscribing scrolls also requires a blank scroll and mana. } public override void OnResponse( NetState sender, RelayInfo info ) { // Back Button if ( info.ButtonID == 0 ) { CraftGump craftGump = new CraftGump( m_From, m_CraftSystem, m_Tool, null ); m_From.SendGump( craftGump ); } else // Make Button { int num = m_CraftSystem.CanCraft( m_From, m_Tool, m_CraftItem.ItemType ); if ( num > 0 ) { m_From.SendGump( new CraftGump( m_From, m_CraftSystem, m_Tool, num ) ); } else { Type type = null; CraftContext context = m_CraftSystem.GetContext( m_From ); if ( context != null ) { CraftSubResCol res = ( m_CraftSystem.CraftSubRes ); int resIndex = ( context.LastResourceIndex ); if ( resIndex > -1 ) type = res.GetAt( resIndex ).ItemType; } m_CraftSystem.CreateItem( m_From, m_CraftItem.ItemType, type, m_Tool, m_CraftItem ); } } } } }