D4rkh0bb1T

Member
no matter what tool I use, I can't see the text where it is possible to choose a different resource. By clicking on the button, I also cannot see the list of these said resources. I have read the CraftGump scripts and most of the scripts in my Engine / Craft folder, but it seems the codes are good. The Clilocs are present in my Client, I checked under UOFiddler. I don't understand why it happens ...

I am using RunUO with an old 4.0.4t client. My expansion is set at AOS. Here are some screenshots to better explain my problem, but where to start?

Bug1.pngBug2.pngBug2.pngBug1.png
 
The crafting gump (/engines/craft/core/CraftGump.cs) is designed to display the cliloc names or the name string if the number is not present. That means you should be getting something and instead you're getting no resources at all. To me this means it is not being provided a cliloc number or a string for the resources.

In RunUO (at least 2.0 that I have locally), the craft resources are listed near the bottom of each crafting definition file -- DefTailoring.cs for example.

Here's an example that includes Daat's custom materials to show how cliloc numbers and strings both work:
Code:
            // Set the overridable material
            SetSubRes( typeof( Leather ), 1049150 );

            // Add every material you want the player to be able to choose from
            // This will override the overridable material
            AddSubRes( typeof( Leather ),        1049150, 00.0, 1044462, 1049311 );
            AddSubRes( typeof( SpinedLeather ),    1049151, 65.0, 1044462, 1049311 );
            AddSubRes( typeof( HornedLeather ),    1049152, 80.0, 1044462, 1049311 );
            AddSubRes( typeof( BarbedLeather ),    1049153, 99.0, 1044462, 1049311 );
//Daat99's Custom Leather
            AddSubRes( typeof( PolarLeather ),        "Polar",        80.0, 1044462 );
            AddSubRes( typeof( SyntheticLeather ),    "Synthetic",    85.0, 1044462 );
            AddSubRes( typeof( BlazeLeather ),        "Blaze",        90.0, 1044462 );
            AddSubRes( typeof( DaemonicLeather ),    "Daemonic",        95.0, 1044462 );
            AddSubRes( typeof( ShadowLeather ),        "Shadow",        100.0, 1044462 );
            AddSubRes( typeof( FrostLeather ),        "Frost",        105.0, 1044462 );
            AddSubRes( typeof( EtherealLeather ),    "Ethereal",        110.0, 1044462 );
//Daat99's Custom Leather

            MarkOption = true;
            Repair = Core.AOS;
            CanEnhance = Core.AOS;
 
This is from my DefTailoring.cs bottom file (same as your except for the custom part) :

C#:
// Set the overridable material
            SetSubRes( typeof( Leather ), 1049150 );

            // Add every material you want the player to be able to choose from
            // This will override the overridable material
            AddSubRes( typeof( Leather ),        1049150, 00.0, 1044462, 1049311 );
            AddSubRes( typeof( SpinedLeather ),    1049151, 65.0, 1044462, 1049311 );
            AddSubRes( typeof( HornedLeather ),    1049152, 80.0, 1044462, 1049311 );
            AddSubRes( typeof( BarbedLeather ),    1049153, 99.0, 1044462, 1049311 );

            MarkOption = true;
            Repair = Core.AOS;
            CanEnhance = Core.AOS;

I can't find any of the Cliloc numbers in the CraftGump.cs (Ie: 1049151 = SPINED LEATHER / HIDES). Where does it get the cliloc number or a string for the resources? This happens for every crafting gumps. Here is the code from my CraftGump :
C#:
using System;
using System.Collections;
using System.Collections.Generic;
using Server.Gumps;
using Server.Network;
using Server.Items;

namespace Server.Engines.Craft
{
    public class CraftGump : Gump
    {
        private Mobile m_From;
        private CraftSystem m_CraftSystem;
        private BaseTool m_Tool;

        private CraftPage m_Page;

        private const int LabelHue = 0x480;
        private const int LabelColor = 0x7FFF;
        private const int FontColor = 0xFFFFFF;

        private enum CraftPage
        {
            None,
            PickResource,
            PickResource2
        }

        /*public CraftGump( Mobile from, CraftSystem craftSystem, BaseTool tool ): this( from, craftSystem, -1, -1, tool, null )
        {
        }*/

        public CraftGump( Mobile from, CraftSystem craftSystem, BaseTool tool, object notice ) : this( from, craftSystem, tool, notice, CraftPage.None )
        {
        }

        private CraftGump( Mobile from, CraftSystem craftSystem, BaseTool tool, object notice, CraftPage page ) : base( 40, 40 )
        {
            m_From = from;
            m_CraftSystem = craftSystem;
            m_Tool = tool;
            m_Page = page;

            CraftContext context = craftSystem.GetContext( from );

            from.CloseGump( typeof( CraftGump ) );
            from.CloseGump( typeof( CraftGumpItem ) );

            AddPage( 0 );

            AddBackground( 0, 0, 530, 437, 5054 );
            AddImageTiled( 10, 10, 510, 22, 2624 );
            AddImageTiled( 10, 292, 150, 45, 2624 );
            AddImageTiled( 165, 292, 355, 45, 2624 );
            AddImageTiled( 10, 342, 510, 85, 2624 );
            AddImageTiled( 10, 37, 200, 250, 2624 );
            AddImageTiled( 215, 37, 305, 250, 2624 );
            AddAlphaRegion( 10, 10, 510, 417 );

            if ( craftSystem.GumpTitleNumber > 0 )
                AddHtmlLocalized( 10, 12, 510, 20, craftSystem.GumpTitleNumber, LabelColor, false, false );
            else
                AddHtml( 10, 12, 510, 20, craftSystem.GumpTitleString, false, false );

            AddHtmlLocalized( 10, 37, 200, 22, 1044010, LabelColor, false, false ); // <CENTER>CATEGORIES</CENTER>
            AddHtmlLocalized( 215, 37, 305, 22, 1044011, LabelColor, false, false ); // <CENTER>SELECTIONS</CENTER>
            AddHtmlLocalized( 10, 302, 150, 25, 1044012, LabelColor, false, false ); // <CENTER>NOTICES</CENTER>

            AddButton( 15, 402, 4017, 4019, 0, GumpButtonType.Reply, 0 );
            AddHtmlLocalized( 50, 405, 150, 18, 1011441, LabelColor, false, false ); // EXIT

            AddButton( 270, 402, 4005, 4007, GetButtonID( 6, 2 ), GumpButtonType.Reply, 0 );
            AddHtmlLocalized( 305, 405, 150, 18, 1044013, LabelColor, false, false ); // MAKE LAST

            // Mark option
            if ( craftSystem.MarkOption )
            {
                AddButton( 270, 362, 4005, 4007, GetButtonID( 6, 6 ), GumpButtonType.Reply, 0 );
                AddHtmlLocalized( 305, 365, 150, 18, 1044017 + (context == null ? 0 : (int)context.MarkOption), LabelColor, false, false ); // MARK ITEM
            }
            // ****************************************

            // Resmelt option
            if ( craftSystem.Resmelt )
            {
                AddButton( 15, 342, 4005, 4007, GetButtonID( 6, 1 ), GumpButtonType.Reply, 0 );
                AddHtmlLocalized( 50, 345, 150, 18, 1044259, LabelColor, false, false ); // SMELT ITEM
            }
            // ****************************************

            // Repair option
            if ( craftSystem.Repair )
            {
                AddButton( 270, 342, 4005, 4007, GetButtonID( 6, 5 ), GumpButtonType.Reply, 0 );
                AddHtmlLocalized( 305, 345, 150, 18, 1044260, LabelColor, false, false ); // REPAIR ITEM
            }
            // ****************************************

            // Enhance option
            if ( craftSystem.CanEnhance )
            {
                AddButton( 270, 382, 4005, 4007, GetButtonID( 6, 8 ), GumpButtonType.Reply, 0 );
                AddHtmlLocalized( 305, 385, 150, 18, 1061001, LabelColor, false, false ); // ENHANCE ITEM
            }
            // ****************************************

            if ( notice is int && (int)notice > 0 )
                AddHtmlLocalized( 170, 295, 350, 40, (int)notice, LabelColor, false, false );
            else if ( notice is string )
                AddHtml( 170, 295, 350, 40, String.Format( "<BASEFONT COLOR=#{0:X6}>{1}</BASEFONT>", FontColor, notice ), false, false );

            // If the system has more than one resource
            if ( craftSystem.CraftSubRes.Init )
            {
                string nameString = craftSystem.CraftSubRes.NameString;
                int nameNumber = craftSystem.CraftSubRes.NameNumber;

                int resIndex = ( context == null ? -1 : context.LastResourceIndex );

                Type resourceType = craftSystem.CraftSubRes.ResType;

                if ( resIndex > -1 )
                {
                    CraftSubRes subResource = craftSystem.CraftSubRes.GetAt( resIndex );

                    nameString = subResource.NameString;
                    nameNumber = subResource.NameNumber;
                    resourceType = subResource.ItemType;
                }

                int resourceCount = 0;

                if ( from.Backpack != null )
                {
                    Item[] items = from.Backpack.FindItemsByType( resourceType, true );

                    for ( int i = 0; i < items.Length; ++i )
                        resourceCount += items[i].Amount;
                }

                AddButton( 15, 362, 4005, 4007, GetButtonID( 6, 0 ), GumpButtonType.Reply, 0 );

                if ( nameNumber > 0 )
                    AddHtmlLocalized( 50, 365, 250, 18, nameNumber, resourceCount.ToString(), LabelColor, false, false );
                else
                    AddLabel( 50, 362, LabelHue, String.Format( "{0} ({1} Available)", nameString, resourceCount ) );
            }
            // ****************************************

            // For dragon scales
            if ( craftSystem.CraftSubRes2.Init )
            {
                string nameString = craftSystem.CraftSubRes2.NameString;
                int nameNumber = craftSystem.CraftSubRes2.NameNumber;

                int resIndex = ( context == null ? -1 : context.LastResourceIndex2 );

                Type resourceType = craftSystem.CraftSubRes2.ResType;

                if ( resIndex > -1 )
                {
                    CraftSubRes subResource = craftSystem.CraftSubRes2.GetAt( resIndex );

                    nameString = subResource.NameString;
                    nameNumber = subResource.NameNumber;
                    resourceType = subResource.ItemType;
                }

                int resourceCount = 0;

                if ( from.Backpack != null )
                {
                    Item[] items = from.Backpack.FindItemsByType( resourceType, true );

                    for ( int i = 0; i < items.Length; ++i )
                        resourceCount += items[i].Amount;
                }

                AddButton( 15, 382, 4005, 4007, GetButtonID( 6, 7 ), GumpButtonType.Reply, 0 );

                if ( nameNumber > 0 )
                    AddHtmlLocalized( 50, 385, 250, 18, nameNumber, resourceCount.ToString(), LabelColor, false, false );
                else
                    AddLabel( 50, 385, LabelHue, String.Format( "{0} ({1} Available)", nameString, resourceCount ) );
            }
            // ****************************************

            CreateGroupList();

            if ( page == CraftPage.PickResource )
                CreateResList( false, from );
            else if ( page == CraftPage.PickResource2 )
                CreateResList( true, from );
            else if ( context != null && context.LastGroupIndex > -1 )
                CreateItemList( context.LastGroupIndex );
        }

        public void CreateResList( bool opt, Mobile from )
        {
            CraftSubResCol res = ( opt ? m_CraftSystem.CraftSubRes2 : m_CraftSystem.CraftSubRes );

            for ( int i = 0; i < res.Count; ++i )
            {
                int index = i % 10;

                CraftSubRes subResource = res.GetAt( i );

                if ( index == 0 )
                {
                    if ( i > 0 )
                        AddButton( 485, 260, 4005, 4007, 0, GumpButtonType.Page, (i / 10) + 1 );

                    AddPage( (i / 10) + 1 );

                    if ( i > 0 )
                        AddButton( 455, 260, 4014, 4015, 0, GumpButtonType.Page, i / 10 );

                    CraftContext context = m_CraftSystem.GetContext( m_From );

                    AddButton( 220, 260, 4005, 4007, GetButtonID( 6, 4 ), GumpButtonType.Reply, 0 );
                    AddHtmlLocalized( 255, 263, 200, 18, (context == null || !context.DoNotColor) ? 1061591 : 1061590, LabelColor, false, false );
                }

                int resourceCount = 0;

                if ( from.Backpack != null )
                {
                    Item[] items = from.Backpack.FindItemsByType( subResource.ItemType, true );

                    for ( int j = 0; j < items.Length; ++j )
                        resourceCount += items[j].Amount;
                }

                AddButton( 220, 60 + (index * 20), 4005, 4007, GetButtonID( 5, i ), GumpButtonType.Reply, 0 );

                if ( subResource.NameNumber > 0 )
                    AddHtmlLocalized( 255, 63 + (index * 20), 250, 18, subResource.NameNumber, resourceCount.ToString(), LabelColor, false, false );
                else
                    AddLabel( 255, 60 + ( index * 20 ), LabelHue, String.Format( "{0} ({1})", subResource.NameString, resourceCount ) );
            }
        }

        public void CreateMakeLastList()
        {
            CraftContext context = m_CraftSystem.GetContext( m_From );

            if ( context == null )
                return;

            List<CraftItem> items = context.Items;

            if ( items.Count > 0 )
            {
                for ( int i = 0; i < items.Count; ++i )
                {
                    int index = i % 10;

                    CraftItem craftItem = items[i];

                    if ( index == 0 )
                    {
                        if ( i > 0 )
                        {
                            AddButton( 370, 260, 4005, 4007, 0, GumpButtonType.Page, (i / 10) + 1 );
                            AddHtmlLocalized( 405, 263, 100, 18, 1044045, LabelColor, false, false ); // NEXT PAGE
                        }

                        AddPage( (i / 10) + 1 );

                        if ( i > 0 )
                        {
                            AddButton( 220, 260, 4014, 4015, 0, GumpButtonType.Page, i / 10 );
                            AddHtmlLocalized( 255, 263, 100, 18, 1044044, LabelColor, false, false ); // PREV PAGE
                        }
                    }

                    AddButton( 220, 60 + (index * 20), 4005, 4007, GetButtonID( 3, i ), GumpButtonType.Reply, 0 );

                    if ( craftItem.NameNumber > 0 )
                        AddHtmlLocalized( 255, 63 + (index * 20), 220, 18, craftItem.NameNumber, LabelColor, false, false );
                    else
                        AddLabel( 255, 60 + (index * 20), LabelHue, craftItem.NameString );

                    AddButton( 480, 60 + (index * 20), 4011, 4012, GetButtonID( 4, i ), GumpButtonType.Reply, 0 );
                }
            }
            else
            {
                // NOTE: This is not as OSI; it is an intentional difference

                AddHtmlLocalized( 230, 62, 200, 22, 1044165, LabelColor, false, false ); // You haven't made anything yet.
            }
        }

        public void CreateItemList( int selectedGroup )
        {
            if ( selectedGroup == 501 ) // 501 : Last 10
            {
                CreateMakeLastList();
                return;
            }

            CraftGroupCol craftGroupCol = m_CraftSystem.CraftGroups;
            CraftGroup craftGroup = craftGroupCol.GetAt( selectedGroup );
            CraftItemCol craftItemCol = craftGroup.CraftItems;

            for ( int i = 0; i < craftItemCol.Count; ++i )
            {
                int index = i % 10;

                CraftItem craftItem = craftItemCol.GetAt( i );

                if ( index == 0 )
                {
                    if ( i > 0 )
                    {
                        AddButton( 370, 260, 4005, 4007, 0, GumpButtonType.Page, (i / 10) + 1 );
                        AddHtmlLocalized( 405, 263, 100, 18, 1044045, LabelColor, false, false ); // NEXT PAGE
                    }

                    AddPage( (i / 10) + 1 );

                    if ( i > 0 )
                    {
                        AddButton( 220, 260, 4014, 4015, 0, GumpButtonType.Page, i / 10 );
                        AddHtmlLocalized( 255, 263, 100, 18, 1044044, LabelColor, false, false ); // PREV PAGE
                    }
                }

                AddButton( 220, 60 + (index * 20), 4005, 4007, GetButtonID( 1, i ), GumpButtonType.Reply, 0 );

                if ( craftItem.NameNumber > 0 )
                    AddHtmlLocalized( 255, 63 + (index * 20), 220, 18, craftItem.NameNumber, LabelColor, false, false );
                else
                    AddLabel( 255, 60 + (index * 20), LabelHue, craftItem.NameString );

                AddButton( 480, 60 + (index * 20), 4011, 4012, GetButtonID( 2, i ), GumpButtonType.Reply, 0 );
            }
        }

        public int CreateGroupList()
        {
            CraftGroupCol craftGroupCol = m_CraftSystem.CraftGroups;

            AddButton( 15, 60, 4005, 4007, GetButtonID( 6, 3 ), GumpButtonType.Reply, 0 );
            AddHtmlLocalized( 50, 63, 150, 18, 1044014, LabelColor, false, false ); // LAST TEN

            for ( int i = 0; i < craftGroupCol.Count; i++ )
            {
                CraftGroup craftGroup = craftGroupCol.GetAt( i );

                AddButton( 15, 80 + (i * 20), 4005, 4007, GetButtonID( 0, i ), GumpButtonType.Reply, 0 );

                if ( craftGroup.NameNumber > 0 )
                    AddHtmlLocalized( 50, 83 + (i * 20), 150, 18, craftGroup.NameNumber, LabelColor, false, false );
                else
                    AddLabel( 50, 80 + (i * 20), LabelHue, craftGroup.NameString );
            }

            return craftGroupCol.Count;
        }

        public static int GetButtonID( int type, int index )
        {
            return 1 + type + (index * 7);
        }

        public void CraftItem( CraftItem item )
        {
            int num = m_CraftSystem.CanCraft( m_From, m_Tool, item.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 = ( item.UseSubRes2 ? m_CraftSystem.CraftSubRes2 : m_CraftSystem.CraftSubRes );
                    int resIndex = ( item.UseSubRes2 ? context.LastResourceIndex2 : context.LastResourceIndex );

                    if ( resIndex >= 0 && resIndex < res.Count )
                        type = res.GetAt( resIndex ).ItemType;
                }

                m_CraftSystem.CreateItem( m_From, item.ItemType, type, m_Tool, item );
            }
        }

        public override void OnResponse( NetState sender, RelayInfo info )
        {
            if ( info.ButtonID <= 0 )
                return; // Canceled

            int buttonID = info.ButtonID - 1;
            int type = buttonID % 7;
            int index = buttonID / 7;

            CraftSystem system = m_CraftSystem;
            CraftGroupCol groups = system.CraftGroups;
            CraftContext context = system.GetContext( m_From );

            switch ( type )
            {
                case 0: // Show group
                {
                    if ( context == null )
                        break;

                    if ( index >= 0 && index < groups.Count )
                    {
                        context.LastGroupIndex = index;
                        m_From.SendGump( new CraftGump( m_From, system, m_Tool, null ) );
                    }

                    break;
                }
                case 1: // Create item
                {
                    if ( context == null )
                        break;

                    int groupIndex = context.LastGroupIndex;

                    if ( groupIndex >= 0 && groupIndex < groups.Count )
                    {
                        CraftGroup group = groups.GetAt( groupIndex );

                        if ( index >= 0 && index < group.CraftItems.Count )
                            CraftItem( group.CraftItems.GetAt( index ) );
                    }

                    break;
                }
                case 2: // Item details
                {
                    if ( context == null )
                        break;

                    int groupIndex = context.LastGroupIndex;

                    if ( groupIndex >= 0 && groupIndex < groups.Count )
                    {
                        CraftGroup group = groups.GetAt( groupIndex );

                        if ( index >= 0 && index < group.CraftItems.Count )
                            m_From.SendGump( new CraftGumpItem( m_From, system, group.CraftItems.GetAt( index ), m_Tool ) );
                    }

                    break;
                }
                case 3: // Create item (last 10)
                {
                    if ( context == null )
                        break;

                    List<CraftItem> lastTen = context.Items;

                    if ( index >= 0 && index < lastTen.Count )
                        CraftItem( lastTen[index] );

                    break;
                }
                case 4: // Item details (last 10)
                {
                    if ( context == null )
                        break;

                    List<CraftItem> lastTen = context.Items;

                    if ( index >= 0 && index < lastTen.Count )
                        m_From.SendGump( new CraftGumpItem( m_From, system, lastTen[index], m_Tool ) );

                    break;
                }
                case 5: // Resource selected
                {
                    if ( m_Page == CraftPage.PickResource && index >= 0 && index < system.CraftSubRes.Count )
                    {
                        int groupIndex = ( context == null ? -1 : context.LastGroupIndex );

                        CraftSubRes res = system.CraftSubRes.GetAt( index );

                        if ( m_From.Skills[system.MainSkill].Base < res.RequiredSkill )
                        {
                            m_From.SendGump( new CraftGump( m_From, system, m_Tool, res.Message ) );
                        }
                        else
                        {
                            if ( context != null )
                                context.LastResourceIndex = index;

                            m_From.SendGump( new CraftGump( m_From, system, m_Tool, null ) );
                        }
                    }
                    else if ( m_Page == CraftPage.PickResource2 && index >= 0 && index < system.CraftSubRes2.Count )
                    {
                        int groupIndex = ( context == null ? -1 : context.LastGroupIndex );

                        CraftSubRes res = system.CraftSubRes2.GetAt( index );

                        if ( m_From.Skills[system.MainSkill].Base < res.RequiredSkill )
                        {
                            m_From.SendGump( new CraftGump( m_From, system, m_Tool, res.Message ) );
                        }
                        else
                        {
                            if ( context != null )
                                context.LastResourceIndex2 = index;

                            m_From.SendGump( new CraftGump( m_From, system, m_Tool, null ) );
                        }
                    }

                    break;
                }
                case 6: // Misc. buttons
                {
                    switch ( index )
                    {
                        case 0: // Resource selection
                        {
                            if ( system.CraftSubRes.Init )
                                m_From.SendGump( new CraftGump( m_From, system, m_Tool, null, CraftPage.PickResource ) );

                            break;
                        }
                        case 1: // Smelt item
                        {
                            if ( system.Resmelt )
                                Resmelt.Do( m_From, system, m_Tool );

                            break;
                        }
                        case 2: // Make last
                        {
                            if ( context == null )
                                break;

                            CraftItem item = context.LastMade;

                            if ( item != null )
                                CraftItem( item );
                            else
                                m_From.SendGump( new CraftGump( m_From, m_CraftSystem, m_Tool, 1044165, m_Page ) ); // You haven't made anything yet.

                            break;
                        }
                        case 3: // Last 10
                        {
                            if ( context == null )
                                break;

                            context.LastGroupIndex = 501;
                            m_From.SendGump( new CraftGump( m_From, system, m_Tool, null ) );

                            break;
                        }
                        case 4: // Toggle use resource hue
                        {
                            if ( context == null )
                                break;

                            context.DoNotColor = !context.DoNotColor;

                            m_From.SendGump( new CraftGump( m_From, m_CraftSystem, m_Tool, null, m_Page ) );

                            break;
                        }
                        case 5: // Repair item
                        {
                            if ( system.Repair )
                                Repair.Do( m_From, system, m_Tool );

                            break;
                        }
                        case 6: // Toggle mark option
                        {
                            if ( context == null || !system.MarkOption )
                                break;

                            switch ( context.MarkOption )
                            {
                                case CraftMarkOption.MarkItem: context.MarkOption = CraftMarkOption.DoNotMark; break;
                                case CraftMarkOption.DoNotMark: context.MarkOption = CraftMarkOption.PromptForMark; break;
                                case CraftMarkOption.PromptForMark: context.MarkOption = CraftMarkOption.MarkItem; break;
                            }

                            m_From.SendGump( new CraftGump( m_From, m_CraftSystem, m_Tool, null, m_Page ) );

                            break;
                        }
                        case 7: // Resource selection 2
                        {
                            if ( system.CraftSubRes2.Init )
                                m_From.SendGump( new CraftGump( m_From, system, m_Tool, null, CraftPage.PickResource2 ) );

                            break;
                        }
                        case 8: // Enhance item
                        {
                            if ( system.CanEnhance )
                                Enhance.BeginTarget( m_From, system, m_Tool );

                            break;
                        }
                    }

                    break;
                }
            }
        }
    }
}

Thanks for helping me out with that, it is annoying when it comes to craft.
 
In your CraftGump.cs, the resources are added at line 236:

Code:
                if ( subResource.NameNumber > 0 )
                    AddHtmlLocalized( 255, 63 + (index * 20), 250, 18, subResource.NameNumber, resourceCount.ToString(), LabelColor, false, false );
                else
                    AddLabel( 255, 60 + ( index * 20 ), LabelHue, String.Format( "{0} ({1})", subResource.NameString, resourceCount ) );

If NameNumber > 0 that means there's a cliloc entry for the resource. If it isn't, that means the value is text so it passes the string instead.

I'm not sure how you could end up with a blank list. Your DefXXXX files are listing the default material and the optional material choices. I can't think of a cause that would leave you with no resources that wouldn't also throw an error during startup, or at least when opening a crafting gump.
 
RunUO came with these files when I downloaded it... that's sad its not working properly on my machine but it seems to work on your side. I wonder why...

As I mentionned, could this be a Patch issue? Cause my client is missing some artworks, I can't see the solen hives either for exemple.
 
I don't have any experience with the 4.x client versions. We ran 5.0.6.c with RunUO 2.0

You could try downloading a 5.x client and see if the menus show on your shard.
 
By using a 5.x client, will I have to change a lot of stuff in the scripts to reflect the AOS era?
What will be the consequences on my shard?
 
You don't have to change anything to test.

If it works and you use the 5.x client, you shouldn't have to change anything that you don't want to. If your era doesn't have different resistance types for example, they'll just show up as zero on the gump. The gump won't be era-accurate but the play will be.
 
Do i need to create a Copy of the game folder for the server and point Datapath to it or I can share the same folder?
I tried both using same and separate folders to run my shard and client, it does not seem to change anything in the end but...

This 4.x client I use was uploaded by Grimoric here. I patched using one folder at a time. At the end, i'm not even sure what I missed. I'll try that 5.x client and see if the overall is better. So much mysteries behind 4.x clients... oh jeez...
 
Yes you'll want to make a separate copy of the client to point the datapath to. Sometimes you can get away with using the same folder and then at random times it will cause trouble with file access errors.

Felladrin, another poster here on ServUO, has made client 5.0.9.1 available for download on his server:


This would be the quickest way to see if a newer client solves your issue, and let you see how it interacts with your existing server code.
 
I just tested with the 5.0.9.1 Client and it works, ressources are not blank anymore! Thats cool, but still, i wonder why it works, and on top of it, why does it not work with Client 4.x? I have some tweak to do in scripts such as not showing spell weaving / bushido / ninjitsu in skills list, trying to keep aos era here. Now that this has been fixed with a newer client, I still do not have Solens caves artwork, this patched client might be corrupted?

But that's another topic! I have some much questions... one bite at a time hehe.

Thanks for the help Falkor, so far so good :)
 
Try: [go 5921 1799 1 in Tram and see where it takes you. If the artwork is present in the client, you'll be in the Solen Hives.

The teleporters from the world into the dungeon are scripted as SHTeleporter and they're placed during the CreateWorld command.
 
Yes, Solen Teleporters and mobs were created correclty during the CreateWorld command. Like the holes are there, and solens are wandering around.
But, as always, I'm surrounded by the Green Acres, no cave artworks, both on Fel and Tram. The only time I got the cave artwork is when I used the last client 7.x.

Now using the client 5.0.9.1, I can see SE items like quivers, talismans.
My brother just downloaded the same client from Felladrin, but he sees them as Unused tiles.
Weird uh? (Separate copy of the client folder was made for the server Datapath.cs)
 
I checked the files in the 5.0.9.1 download and the hives are present when the map is viewed in UOFiddler.

solen5091.jpg

Are you using Razor to launch the game, and if so, is it pointed at the correct client install folder?
 
RunUO - [www.runuo.com] Version 2.2, Build 4782.3756

Yes, running this with client 7.x gets the caves artwork back.
But aren't they supposed to be in the felladrin patched ML client already?
What about the Grimoric's repos of the UO-AOS patches?
Solen caves artwork are missing in all these patched packs?
Is there a way to pick the artwork from newer client and patch it into an older one?

I'm using razor to launch the client, both pointing to client.exe and data directory pointing to the ML client folder.
private static string CustomPath = @"C:\Ultima Online Mondain's Legacy Server";
This is my client map from UO Fiddler :
To view this content we will need your consent to set third party cookies.
For more detailed information, see our cookies page.
To view this content we will need your consent to set third party cookies.
For more detailed information, see our cookies page.
 
Last edited:
are you using the runuo 2.0 final repack? if so you need UOML 1.46

Im currently using runuo 2.2 with 7.0.15.1 that works well, havnt found anything missing yet.
 
That's very strange. The downloaded 5091 does have the art, as evidenced by your Razor map screenshot and my UOFiddler screenshot. I don't know how it's not in-game.

In fact, I don't know of any way to make the client not display art that is in the mul files!
 
My point is that he has to be using the correct client files or the Razor radar map wouldn't show the Solen Hives.

Here I am with our old server (RunUO 2.0 RC1) and the downloaded client 5.0.9.1
5091 solen.jpg
 
Last edited:
The second screenshot i posted was from auto map, the first screenshot was from uofiddler, razor map shows me green acres.
Is this because im running a 2.2 runuo server? not fully supporting ML, SE or AOS? (the main goal here is to keep most of aos)
I do see the hives using the 7.0.15 (SA) client with my 2.2 runuo server even tho monsters walk through floors and walls, just like in trammel or tokuno.

This is the file i got for my runuo server: RunUO2.3r987_Full
It says 2.3, but upon runinng the server it says :
RunUO - [www.runuo.com] Version 2.2, Build 4782.3756
Core: Running on .NET Framework Version 2.0.50727
 
Last edited:
If Razor's map shows green acres it means Razor's "UO Data Directory" isn't pointed at the 5091 client.

razorsettings.jpg

Nothing on the server end can change the topography of the client's static map. If the hives are in the client they'll be on the screen. RunUO 2.2 should easily do AOS, especially with the pre 6.0 clients.

Going into the 7.x client range with RunUO adds other variables to the mix like the tilematrixpatch. In short, don't confuse things by attempting 7.x because it's another set of compatibility settings that must be set -- and I'm not sure when those got added into RunUO.
 
I agree, and all of what you guys said make sense to me. On my machine, both game and copy for server are installed on C:

Server side, so in datapath :
private static string CustomPath = @"C:\Ultima Online Mondain's Legacy Server";

Client side, so on Razor welcome screen :
Load client : C:\Ultima Online Mondain's Legacy\client.exe
UO Data Directory goes into : C:\Ultima Online Mondain's Legacy

This is a real mystery...
 
I had this problem when first starting a server 8 years ago, I found that with runuo 2.0 final I had to use uoml 1.46 ( I have a copy if you need, I have about 6 different client's) if you find the file runuo 2.2 it will say that its 2.1 onloading which works awesome with 7.0.15.1. The way I fixed it years ago was trying different clients. Sometimes the mul's are in a different order, so even though they are there the server isn't calling the correct number for the item in the mul file. I have told you how to fix it, I have told you what the problem is. You need client 1.46 which you can find here https://mirror.ashkantra.de/joinuo/Clients/
Post automatically merged:

Tass23 is the man to ask he helped me when I first got started, (I think Tass23 is the same person from runuo with the name tass23)
 
Last edited:
Not sur how to merge my runuo 2.2 shard into a new runuo 2.0 final just to use the uoml 1.46 client, and not losing everything done so far.
Like i said, i just ran the 7.0.15 client on my 2.2 shard and it worked, although monsters walk pass the ground and walls just like in tram or tokuno (I already closed access to these areas...)
What would be the main difference between using runuo 2.2 + 7.0.15 client, or runuo 2.0 + uoml 1.46?

Thanks for the link by the way! I'll use it for sure :)
Tass23, i'll be sure to remember that name also
 
Im not sure what the differences are but it would be to do with the framework used, the commands used in the script ect.


You could try the 7.0.23.1 client for runuo 2.2, i thought you was using 2.0
 
Old clients are depending on the registry. You have probably installed a client without the support of "Solen Hives". Then copy another client to a new location by unzipped it or moved the files then run it throw razor. Razor only fixes the encryption, not the registry pathfinding. So your client is running from the copied directory but uses the data files from the other that was installed by a installer. This has nothing to do with the server itself.

And for the labels not showing up. You need the language translation files (Cliloc) from a newer client sins the labels are not yet been added in older clients, it might even be that your client was using other numbers back then. SevUO/RunUO is not out of the box compatible with old expansions.

-Grim
 
Last edited:
yes he could patch it with newer Cliloc files, but man that is a lot of work (I know it) he would be better off finding a client to suit his runuo 2.2.

No need to confuse him!
 
I have told you how to fix it, I have told you what the problem is. You need client 1.46

That's interesting because my screenshot at the top of this page is plain old RunUO 2.0 RC1 and the client downloaded from my link on the first page of this thread. No other special tricks, edits, or 1.x client downloads required.

D4rkh0bb1T -
Check your /scripts/misc/MapDefinitions.cs

If you have this line:
Code:
            TileMatrixPatch.Enabled = false;    //OSI client patch < 6.0.0.0

Make sure it = true for clients below 6.0
 
D4rkh0bb1T -
Check your /scripts/misc/MapDefinitions.cs

If you have this line:
Code:
            TileMatrixPatch.Enabled = false;    //OSI client patch < 6.0.0.0

Make sure it = true for clients below 6.0

Yes! This is it! I can't believe it.
Monsters walking pass the walls and some floor tiles, but the caves artwork are now existent...!
The UO God bless you my friend.
 
If your still using client 4. xxx and have allowed lower clients in runuo 2.2, do you have the correct things in your buy gumps? you might have to update your cliloc file then as Grim says, I was just giving you the easy way around it. As I said at first I thought you was using runuo 2.0 to use client 1.46, just so you know your still gonna find things missing if your using 2.2 on a old client unless you patch the cliloc files. You will see black squares with stars in them all over the place roads ect until you patch the cliloc file.

Good luck :)
 
No, the crafting blank strings remains an issue if using client 4 under runuo 2.2. Using client 5 solved this issue.
TileMatrixPatch.Enabled set to true fixed the solen hives overall for any older client with runuo 2.2.

Patching Cliloc of client 4 with newer files? Where to find such files?
As I see it, everything is tweakable from UOFiddler, but yeah it seems a lot of work, even more cause i'm not sure what number goes where hehe

This has been a great experience for me to learn, thank to all of you guys.

''SevUO/RunUO is not out of the box compatible with old expansions.'' - True. So True.
 
You can just copy the file cliloc.enu from a newer client into the older client's folder. I would rename the old file first so you don't lose it if it doesn't work as you need it.

The cliloc file has nothing to do with LandTiles or item tiles. It is just a big list of numbers and the word or phrase it corresponds to.

You said before that the crafting material strings were already in your 4.x client so I'm not sure what copying the newer one will do, but anything is worth trying.
 
If you just copy the cliloc from a new version you risk causing more and different issue's, youd need to open the cliloc file from the old client and also the one from the new client, before that you would need to find out which tiles are missing and then copy the corresponding tiles from the new client into the old one. So first youd need to work out what is missing and you need to know the item numbers, tile number ect for the item your missing then find that item in the new client and extract it and copy into the old client. Have you checked your sb list's for the items missing? youd get numbers from there too. The cliloc file is what places all the tiles in the world (very important).
Post automatically merged:

the mul file holds the pictures, cliloc says where to place them
Post automatically merged:

You might be able to edit your sb for that buy list, work out what is suppose to be there (get the numbers, name ect) then look to see if its already in your server under a different number and then change then item code to items that are on your server already, if that doesn't work then its your cliloc you'l need to edit.
 
Last edited:
the mul file holds the pictures, cliloc says where to place them

That's not how any of this works. Seriously. Cliloc means Client Localization and it is used for quick translation into various languages. It's a list of numbers that corresponds to words or phrases. People translate them in that file so that scripts don't have to be edited directly. It has nothing to do with artwork or graphics of any kind. TileData.mul holds the extended information for artwork.

Cliloc numbers don't change once they are present. There are a lot of "legacy" entries in that file that have never changed -- they just keep adding new ones as needed. It's perfectly safe to swap in a newer cliloc file -- give it a shot.
 
It has been a few years since iv done this, might have been the tiledata I had to edit (which sounds more like it) Im prity sure I had to do something with the cliloc file though.
 

Active Shards

Donations

Total amount
$0.00
Goal
$1,000.00
Back