• There is NO official Otland's Discord server and NO official Otland's server list. The Otland's Staff does not manage any Discord server or server list. Moderators or administrator of any Discord server or server lists have NO connection to the Otland's Staff. Do not get scammed!

Programmer Edit skills menu (add stamina) in Tibianic DLL client - 50$

I think it should work
but there is a way to get the current dialog pointer
LUA:
    DialogPtr = 0x67B9F4,
    DialogLeft = 0x14,
    DialogTop = 0x18,
    DialogWidth = 0x1C,
    DialogHeight = 0x20,
    DialogCaption = 0x50,
void Render(int nSurface){
    int* DialogPointer = (int*)DialogPtr;

    if ((int)*DialogPointer != 0)

    {

        int dialog = *DialogPointer;

        char* DialogCaptionStr = (char*)(dialog + DialogCaption);

        int DialogLeftInt   = *(int*)(dialog + DialogLeft);
        int DialogTopInt    = *(int*)(dialog + DialogTop);
        int DialogWidthInt  = *(int*)(dialog + DialogWidth);
        int DialogHeightInt = *(int*)(dialog + DialogHeight);

        if (DialogCaptionStr && std::string(DialogCaptionStr) == "Enter Game")
        {

            //add your stuff here, can add buttons or anything

            Painter::drawSkin(nSurface, DialogLeftInt + 20, DialogTopInt + DialogHeightInt - 20, DialogWidthInt - 20, 2, 142, 0, 3);

            g_dll.m_newButtons->setPosition(DialogLeftInt + 20, DialogTopInt + DialogHeightInt - 20);

        }

    }
}
DialogPtr is the pointer used in HasDialog()
Hi SpiderOT,

Thanks for the tips and information.

I studied what you explained and finally understood the logic: getting the original CipSoft colors, dialog pointer, and other client data.

After that, I managed to create my own DLL and implement these features:

  • Mounts
  • Frame groups
  • Idle animations
  • Mount window

For other features, using my own DLL seems to be the right path.

At first I thought it would be much harder and more complex, but after studying it, I understood the logic. The process was simpler than I expected.

Thanks again for the help.

 
Hello SpiderOT, Mateus

It is really great to see your results

Would you maybe be willing to share a bit more about how you got started with reverse engineering the Tibia client?

For example, it would be really useful to know:
  • which tools you use - your stack
  • what your general workflow looks like
  • whether you recommend any tutorials, YouTube channels or other learning materials
  • and maybe some of the discoveries or notes you made along the way
It does not have to be a complete tutorial. Even a few pointers, screenshots, example addresses or explanations of how you approach finding functions, pointers, colors, dialogs etc could help a lot.

I do not think that sharing some general knowledge or workflow would suddenly make everyone able to reproduce everything you have already done or plan to. It is still a fairly complex topic that most people would probably never attempt. However, for the small percentage of people genuinely interested in learning it such information could be an extremely valuable starting point.

Maybe over time this could become a small knowledge base or reverse engineering compendium here on OTLand. That way, every new person interested in the topic would not have to start and learn the same things again completely from the scratch.

I think many people would really appreciate even a small intro to the process.

Cheers and keep up the great work!
 
Back
Top