Jump to content
Returning Members: Password Reset Required ×

Recommended Posts

Posted

Hi everyone,

I'm working on a Conquer Online 6609 source and I'm trying to customize the Forging UI I have already removed the Perfection button from the UI but the window still defaults to the Perfection tab

I've been digging through the client binary and found some logic in dlgequappend.cpp and sub_4879D8, but I'm looking for the specific part that sets the default tabIndex or ActionID when the window initializes

Does anyone have a hint on where the client hardcodes the default tab for the Forge window? Or is there a way to force it to the Compose tab via memory patch/hook?

Any hints would be greatly appreciated!

Screenshot 2026-05-01 185800.png

Posted

If you know the MsgAction::ACTION_OPEN_DIALOG Window ID, you can open it and switch tabs.

I just don't know if it will work perfectly, but it will work

Posted

There is should be indeed a memory patch I have seen servers forcing it to compose window instead. 

Posted (edited)
14 hours ago, xFranko said:

 

Hey everyone,

Thanks for the answers and for trying to help I really like the community here and I'm glad to be part of it.

Alhamdulilah i figured this out through reverse engineering the client binary.

The key function is sub_48A2B2 which is the tab switcher It takes a tab ID and maps it through sub_48932E

2017 ==> Upgrade
2018 ==> Compose
2026 ==> Perfection (the default)

The fix is a simple MinHook on sub_48A2B2 that intercepts when the window opens with Perfection (2026) and redirects it to Compose (2018) leaving all other tab clicks unaffected.

Hope this helps!

 

Edited by NourSoliman
  • 2 weeks later...
  • 2 weeks later...
Posted (edited)
On 5/12/2026 at 9:47 AM, kennylovecode said:

To be honest, I'm thinking about how to open this forging window through NPC.

I did exactly that in my process of making a 3.0 setup "classic".

this is what I did for my WuxingOven npc to make it so players had to talk to that npc to open the forge menu, its also removed from the main UI and was edited in gui.ini so only classic like features were there. All they do is click on the npc like normal and then choose that they want to compose or bless there gear through the npc dialog and when they choose that option this forge menu opens. I had an issue with opening specific pages so it was a bit easier to just have the oven npc control/advertise those 4 forging areas instead of having an npc for each upgrade type like a blessing npc, enchantment npc and gem npc, which is what I wanted to originally do. if you can figure out how to make it open an exact page then maybe you can bless me with some info back but I did try a ton of different things to open specific pages, just couldn't get it to work. IIRC it defaults to the compose page when first opened.

case 1:
    {
        ActionQuery action = new ActionQuery()
        {
            Type = ActionType.ClientCommand,
            ObjId = client.Player.UID,
            dwParam = 0,
            PositionX = client.Player.X,
            PositionY = client.Player.Y,
            Timestamp = (uint)Time32.timeGetTime().GetHashCode(),
            Strings = new string[] { "LuaUIMgr_OpenWindow|335" },
        };

        client.Send(stream.ActionCreate(action));
        break;
    }

image.thumb.png.cae24bd31eb6c7719a80faa299f803c8.png

Edited by Paradox
typo fixes
Posted
19 hours ago, Paradox said:

I did exactly that in my process of making a 3.0 setup "classic".

this is what I did for my WuxingOven npc to make it so players had to talk to that npc to open the forge menu, its also removed from the main UI and was edited in gui.ini so only classic like features were there. All they do is click on the npc like normal and then choose that they want to compose or bless there gear through the npc dialog and when they choose that option this forge menu opens. I had an issue with opening specific pages so it was a bit easier to just have the oven npc control/advertise those 4 forging areas instead of having an npc for each upgrade type like a blessing npc, enchantment npc and gem npc, which is what I wanted to originally do. if you can figure out how to make it open an exact page then maybe you can bless me with some info back but I did try a ton of different things to open specific pages, just couldn't get it to work. IIRC it defaults to the compose page when first opened.

case 1:
    {
        ActionQuery action = new ActionQuery()
        {
            Type = ActionType.ClientCommand,
            ObjId = client.Player.UID,
            dwParam = 0,
            PositionX = client.Player.X,
            PositionY = client.Player.Y,
            Timestamp = (uint)Time32.timeGetTime().GetHashCode(),
            Strings = new string[] { "LuaUIMgr_OpenWindow|335" },
        };

        client.Send(stream.ActionCreate(action));
        break;
    }

image.thumb.png.cae24bd31eb6c7719a80faa299f803c8.png

This is quite cool. In fact, I spent a considerable amount of time rebuilding some old UIs and customizing MFC for packet management. However, I believe I should allow both to coexist.

Posted
19 hours ago, Paradox said:

I did exactly that in my process of making a 3.0 setup "classic".

this is what I did for my WuxingOven npc to make it so players had to talk to that npc to open the forge menu, its also removed from the main UI and was edited in gui.ini so only classic like features were there. All they do is click on the npc like normal and then choose that they want to compose or bless there gear through the npc dialog and when they choose that option this forge menu opens. I had an issue with opening specific pages so it was a bit easier to just have the oven npc control/advertise those 4 forging areas instead of having an npc for each upgrade type like a blessing npc, enchantment npc and gem npc, which is what I wanted to originally do. if you can figure out how to make it open an exact page then maybe you can bless me with some info back but I did try a ton of different things to open specific pages, just couldn't get it to work. IIRC it defaults to the compose page when first opened.

case 1:
    {
        ActionQuery action = new ActionQuery()
        {
            Type = ActionType.ClientCommand,
            ObjId = client.Player.UID,
            dwParam = 0,
            PositionX = client.Player.X,
            PositionY = client.Player.Y,
            Timestamp = (uint)Time32.timeGetTime().GetHashCode(),
            Strings = new string[] { "LuaUIMgr_OpenWindow|335" },
        };

        client.Send(stream.ActionCreate(action));
        break;
    }

image.thumb.png.cae24bd31eb6c7719a80faa299f803c8.png

Regarding the action button, it used to appear directly in the button group in the old version. Later, it was officially included in the Emoji tag component. I haven't found a way to move it out. Do you have any experience to share

Posted (edited)
On 5/21/2026 at 9:23 PM, kennylovecode said:

Regarding the action button, it used to appear directly in the button group in the old version. Later, it was officially included in the Emoji tag component. I haven't found a way to move it out. Do you have any experience to share

im not entirely sure what "action button" you are talking about but there is a possibility I know what you are talking about and have already worked on it or messed with it. i ended up moving up to the latest patch retail CO is on to make sure future proofing is at its fullest capacity. are you talking about this action button? I have not gotten into removing buttons and moving them to different IDs or anything quite like that yet but from my understanding with how different the 3.0 clients are and how much LUA is used in it now you should be able to do just about anything with the gui. you could find where the emoji icon is and replace it with the older "action" button image and then adjust how the child IDs are laid out so they are in a line and change the background as well. it all can be done through gui.ini, control.ani and inside of the data folder. you really wouldnt even have to edit it control.ani unless you want to add new buttons/image IDs for gui.ini to grab from. it can all be done fairly easily since you can just null out the interact, dance and emotion tabs or set it up in a way to add a button on the action tab that will then open the emojis. hopefully thats what you were talking about and sorry for the mess of writing 😅

**edit**
just looked through the ini folder on a 3.0 client and from my understanding you can literally add your own GUI buttons/IDs and then edit a file like "MainSimple.lua" to make that button you just made show up on screen and then from there you would need to link it to something either through a custom made lua file or through the lua file that originally controlled that feature. 

 image.png.3d660d0a35c8bf6982a594992fe039c3.pngimage.thumb.png.2d89747e60769ca5447f2332ad868555.png

Edited by Paradox
Posted
7 hours ago, Paradox said:

im not entirely sure what "action button" you are talking about but there is a possibility I know what you are talking about and have already worked on it or messed with it. i ended up moving up to the latest patch retail CO is on to make sure future proofing is at its fullest capacity. are you talking about this action button? I have not gotten into removing buttons and moving them to different IDs or anything quite like that yet but from my understanding with how different the 3.0 clients are and how much LUA is used in it now you should be able to do just about anything with the gui. you could find where the emoji icon is and replace it with the older "action" button image and then adjust how the child IDs are laid out so they are in a line and change the background as well. it all can be done through gui.ini, control.ani and inside of the data folder. you really wouldnt even have to edit it control.ani unless you want to add new buttons/image IDs for gui.ini to grab from. it can all be done fairly easily since you can just null out the interact, dance and emotion tabs or set it up in a way to add a button on the action tab that will then open the emojis. hopefully thats what you were talking about and sorry for the mess of writing 😅

**edit**
just looked through the ini folder on a 3.0 client and from my understanding you can literally add your own GUI buttons/IDs and then edit a file like "MainSimple.lua" to make that button you just made show up on screen and then from there you would need to link it to something either through a custom made lua file or through the lua file that originally controlled that feature. 

 image.png.3d660d0a35c8bf6982a594992fe039c3.pngimage.thumb.png.2d89747e60769ca5447f2332ad868555.png

It's very strange that I didn't find any files about lua in my 6609 version.

Posted
8 hours ago, kennylovecode said:

It's very strange that I didn't find any files about lua in my 6609 version.

ah i did not notice this OP was focused only on 6609 at the time. my main work as of lately while trying to learn all of this stuff is 7762-7772 and 7901-7918, the most recent photo i sent was from a 7901 client. "3.0" didn't officially happen until 6610 according to the official website. i dont think lua being used is recent at all but might not be as major in the 6609 client so not sure if my post was useful at all. I do know that there is some .lua files inside the 6609 client patch and they might be of use to you in your journey

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...