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 yesterday at 06:53 AM Posted yesterday 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 yesterday at 07:03 AM by Paradox typo fixes Quote
kennylovecode Posted 18 hours ago Posted 18 hours ago 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 18 hours ago Posted 18 hours ago 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
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.