NourSoliman Posted May 1 Posted May 1 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! Quote
Konichu Posted May 1 Posted May 1 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 Quote
Shang Posted May 2 Posted May 2 There is should be indeed a memory patch I have seen servers forcing it to compose window instead. Quote
NourSoliman Posted May 2 Author Posted May 2 (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! [Conquer] King-Dragon-Warrior 2026-05-02 11-17-30.mp4 Edited May 2 by NourSoliman Quote
kennylovecode Posted May 12 Posted May 12 To be honest, I'm thinking about how to open this forging window through NPC. Quote
Paradox Posted Thursday at 06:53 AM Posted Thursday at 06:53 AM (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; } Edited Thursday at 07:03 AM by Paradox typo fixes Quote
kennylovecode Posted Friday at 02:21 AM Posted Friday at 02:21 AM 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; } 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. Quote
kennylovecode Posted Friday at 02:23 AM Posted Friday at 02:23 AM 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; } 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 Quote
Paradox Posted yesterday at 09:46 PM Posted yesterday at 09:46 PM (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. Edited yesterday at 09:53 PM by Paradox Quote
kennylovecode Posted 16 hours ago Posted 16 hours ago 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. It's very strange that I didn't find any files about lua in my 6609 version. Quote
Paradox Posted 7 hours ago Posted 7 hours ago 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 Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.