Source Implementación de Interfaces Botones en MuEmu y SSeMu

Publicado por Dakosmu, Mar 25, 2025, 07:02 PM

Tema anterior - Siguiente tema

Dakosmu

Source Implementación de Interfaces Botones en MuEmu y SSeMu


stdafx.h

#define BOTOES_FUNCOES    1

Protocol.h

Busca Client -> GameServer o buscas esto struct PMSG_HELPER_START_SEND

#if(BOTOES_FUNCOES)
struct PMSG_TICKET_SEND
{
    PSBMSG_HEAD header; // C1:F3:00
};
#endif

Interface.h

Dentro de class Interface

#if(BOTOES_FUNCOES)
    void        DRAW_TINHNANG_INTERFACE();
    bool        EVENT_TINHNANG_INTERFACE(DWORD Event);
    bool        EVENT_AUTORESET_INTERFACE(DWORD Event);
    bool        EVENT_LAMNHIEMVU_INTERFACE(DWORD Event);
    bool        EVENT_OFFATTACK_INTERFACE(DWORD Event);
    bool        EVENT_UYTHAC_INTERFACE(DWORD Event);
    bool        EVENT_TAYDIEM_INTERFACE(DWORD Event);
    bool        EVENT_TAYDIEM_MASTER_INTERFACE(DWORD Event);
#endif

Dentro de enum ObjectID

#if(BOTOES_FUNCOES)
        EXBEXO_AUTORESET_INTERFACE,
        EXBEXO_QUESTCLASS_INTERFACE,
        EXBEXO_OFFATTACK_INTERFACE,
        EXBEXO_UYTHAC_INTERFACE,
        EXBEXO_TAYDIEM_INTERFACE,
        EXBEXO_TAYDIEMMASTER_INTERFACE,
#endif


Interface.cpp

Dentro de void Interface::Load()

#if(BOTOES_FUNCOES)
    this->BindObject(EXBEXO_AUTORESET_INTERFACE, 0x313A, 78, 22, -1, -1);
    this->BindObject(EXBEXO_QUESTCLASS_INTERFACE, 0x313A, 78, 22, -1, -1);
    this->BindObject(EXBEXO_OFFATTACK_INTERFACE, 0x313A, 78, 22, -1, -1);
    this->BindObject(EXBEXO_UYTHAC_INTERFACE, 0x313A, 78, 22, -1, -1);
    this->BindObject(EXBEXO_TAYDIEM_INTERFACE, 0x313A, 78, 22, -1, -1);
    this->BindObject(EXBEXO_TAYDIEMMASTER_INTERFACE, 0x313A, 78, 22, -1, -1);
#endif

Dentro de void Interface::LoadImages()
#if(BOTOES_FUNCOES)
    pLoadImage("Custom\\Botone_Funtion\\Nut_80_25.tga", 0x313A, 0x2601, 0x2900, 1, 0); // NÚT BUTTON
#endif

Dentro de void Interface::Work()

#if(BOTOES_FUNCOES)
    gInterface.DRAW_TINHNANG_INTERFACE();
#endif

Al final
#if(BOTOES_FUNCOES)
void Interface::DRAW_TINHNANG_INTERFACE()
{



    float MainWidth = 30.0;
    float MainHeight = 20.0;
    float StartY = 20.0;
    float StartX = (MAX_WIN_WIDTH / 2) - (MainWidth / 2);
    if (this->CheckWindow(ObjWindow::Character))
    {
        // AutoReset
        this->DrawGUI(EXBEXO_AUTORESET_INTERFACE, StartX + 160, StartY + 52);
        //--------------------------------------------------------------------------------------------
        HFONT TextFontBold_Autoreset = CreateFontA(15, 0, 0, 0, 700, 0, 0, 0, 0x1, 0, 0, 3, 0, "Tahoma");
        pSetTextFont(pTextThis(), TextFontBold_Autoreset); //set font
        pSetTextColor(pTextThis(), 255, 255, 0, 255); // MÀU
        pSetBackgroundTextColor(pTextThis(), 0, 0, 0, 0);
        pDrawText(pTextThis(), 473, 77, "AutoReset", 150, 0, (LPINT)0, 0); // "Master reset"
        //Giải phóng
        DeleteObject(TextFontBold_Autoreset);
        //--------------------------------------------------------------------------------------------
        // QuestClass
        this->DrawGUI(EXBEXO_QUESTCLASS_INTERFACE, StartX + 239, StartY + 52);
        //--------------------------------------------------------------------------------------------
        HFONT TextFontBold_NhiemVu = CreateFontA(15, 0, 0, 0, 700, 0, 0, 0, 0x1, 0, 0, 3, 0, "Tahoma");
        pSetTextFont(pTextThis(), TextFontBold_NhiemVu); //set font
        pSetTextColor(pTextThis(), 0, 255, 255, 255); // MÀU
        pSetBackgroundTextColor(pTextThis(), 0, 0, 0, 0);
        pDrawText(pTextThis(), 558, 77, "QuestClass", 150, 0, (LPINT)0, 0); // "Làm Nhiệm Vụ"

        //Giải phóng
        DeleteObject(TextFontBold_NhiemVu);
        //--------------------------------------------------------------------------------------------
        // OffAttack
        this->DrawGUI(EXBEXO_OFFATTACK_INTERFACE, StartX + 160, StartY + 74);
        //--------------------------------------------------------------------------------------------
        HFONT TextFontBold_OffAttack = CreateFontA(15, 0, 0, 0, 700, 0, 0, 0, 0x1, 0, 0, 3, 0, "Tahoma");
        pSetTextFont(pTextThis(), TextFontBold_OffAttack); //set font
        pSetTextColor(pTextThis(), 255, 0, 0, 255); // MÀU
        pSetBackgroundTextColor(pTextThis(), 0, 0, 0, 0);
        pDrawText(pTextThis(), 473, 100, "ATTACK", 150, 0, (LPINT)0, 0); // "ATTACK"

        //Giải phóng
        DeleteObject(TextFontBold_OffAttack);
        //--------------------------------------------------------------------------------------------
        // UyThac
        this->DrawGUI(EXBEXO_UYTHAC_INTERFACE, StartX + 239, StartY + 74);
        //--------------------------------------------------------------------------------------------
        HFONT TextFontBold_UyThac = CreateFontA(15, 0, 0, 0, 700, 0, 0, 0, 0x1, 0, 0, 3, 0, "Tahoma");
        pSetTextFont(pTextThis(), TextFontBold_UyThac); //set font
        pSetTextColor(pTextThis(), 0, 255, 0, 255); // MÀU
        pSetBackgroundTextColor(pTextThis(), 0, 0, 0, 0);
        pDrawText(pTextThis(), 558, 100, "OFF ATTACK", 150, 0, (LPINT)0, 0); // "OFF ATTACK"

        //Giải phóng
        DeleteObject(TextFontBold_UyThac);
        //--------------------------------------------------------------------------------------------
        // TayDiem
        this->DrawGUI(EXBEXO_TAYDIEM_INTERFACE, StartX + 159, StartY + 351);
        //--------------------------------------------------------------------------------------------
        HFONT TextFontBold_TayDiem = CreateFontA(15, 0, 0, 0, 700, 0, 0, 0, 0x1, 0, 0, 3, 0, "Tahoma");
        pSetTextFont(pTextThis(), TextFontBold_TayDiem); //set font
        pSetTextColor(pTextThis(), 0, 255, 255, 255); // MÀU
        pSetBackgroundTextColor(pTextThis(), 0, 0, 0, 0);
        pDrawText(pTextThis(), 480, 377, "Del Points", 150, 0, (LPINT)0, 0); // "Tẩy Điểm"

        //Giải phóng
        DeleteObject(TextFontBold_TayDiem);
        //--------------------------------------------------------------------------------------------
        // TayDiemMaster
        this->DrawGUI(EXBEXO_TAYDIEMMASTER_INTERFACE, StartX + 239, StartY + 351);
        //--------------------------------------------------------------------------------------------
        HFONT TextFontBold_TayDiemMaster = CreateFontA(15, 0, 0, 0, 700, 0, 0, 0, 0x1, 0, 0, 3, 0, "Tahoma");
        pSetTextFont(pTextThis(), TextFontBold_TayDiemMaster); //set font
        pSetTextColor(pTextThis(), 0, 255, 255, 255); // MÀU
        pSetBackgroundTextColor(pTextThis(), 0, 0, 0, 0);
        pDrawText(pTextThis(), 560, 377, "Del Master", 150, 0, (LPINT)0, 0); // "Tẩy Điểm Master"

        //Giải phóng
        DeleteObject(TextFontBold_TayDiemMaster);
        //--------------------------------------------------------------------------------------------
    }
    //----------------------------------------------------------------------------------------------------------------------
    if (this->CheckWindow(ObjWindow::Character))
        if (gInterface.IsWorkZone(EXBEXO_AUTORESET_INTERFACE))
        {
            DWORD Color = eGray150;
            gInterface.DrawColoredGUI(EXBEXO_AUTORESET_INTERFACE, gInterface.Data[EXBEXO_AUTORESET_INTERFACE].X, gInterface.Data[EXBEXO_AUTORESET_INTERFACE].Y, Color);
        }
    //----------------------------------------------------------------------------------------------------------------------
    if (this->CheckWindow(ObjWindow::Character))
        if (gInterface.IsWorkZone(EXBEXO_QUESTCLASS_INTERFACE))
        {
            DWORD Color = eGray150;
            gInterface.DrawColoredGUI(EXBEXO_QUESTCLASS_INTERFACE, gInterface.Data[EXBEXO_QUESTCLASS_INTERFACE].X, gInterface.Data[EXBEXO_QUESTCLASS_INTERFACE].Y, Color);
        }
    //----------------------------------------------------------------------------------------------------------------------
    if (this->CheckWindow(ObjWindow::Character))
        if (gInterface.IsWorkZone(EXBEXO_OFFATTACK_INTERFACE))
        {
            DWORD Color = eGray150;
            gInterface.DrawColoredGUI(EXBEXO_OFFATTACK_INTERFACE, gInterface.Data[EXBEXO_OFFATTACK_INTERFACE].X, gInterface.Data[EXBEXO_OFFATTACK_INTERFACE].Y, Color);
        }
    //----------------------------------------------------------------------------------------------------------------------
    if (this->CheckWindow(ObjWindow::Character))
        if (gInterface.IsWorkZone(EXBEXO_UYTHAC_INTERFACE))
        {
            DWORD Color = eGray150;
            gInterface.DrawColoredGUI(EXBEXO_UYTHAC_INTERFACE, gInterface.Data[EXBEXO_UYTHAC_INTERFACE].X, gInterface.Data[EXBEXO_UYTHAC_INTERFACE].Y, Color);
        }
    //----------------------------------------------------------------------------------------------------------------------
    if (this->CheckWindow(ObjWindow::Character))
        if (gInterface.IsWorkZone(EXBEXO_TAYDIEM_INTERFACE))
        {
            DWORD Color = eGray150;
            gInterface.DrawColoredGUI(EXBEXO_TAYDIEM_INTERFACE, gInterface.Data[EXBEXO_TAYDIEM_INTERFACE].X, gInterface.Data[EXBEXO_TAYDIEM_INTERFACE].Y, Color);
        }
    //----------------------------------------------------------------------------------------------------------------------
    if (this->CheckWindow(ObjWindow::Character))
        if (gInterface.IsWorkZone(EXBEXO_TAYDIEMMASTER_INTERFACE))
        {
            DWORD Color = eGray150;
            gInterface.DrawColoredGUI(EXBEXO_TAYDIEMMASTER_INTERFACE, gInterface.Data[EXBEXO_TAYDIEMMASTER_INTERFACE].X, gInterface.Data[EXBEXO_TAYDIEMMASTER_INTERFACE].Y, Color);
        }

}

bool Interface::EVENT_TINHNANG_INTERFACE(DWORD Event)
{
    this->EVENT_AUTORESET_INTERFACE(Event);
    this->EVENT_LAMNHIEMVU_INTERFACE(Event);
    this->EVENT_OFFATTACK_INTERFACE(Event);
    this->EVENT_UYTHAC_INTERFACE(Event);
    this->EVENT_TAYDIEM_INTERFACE(Event);
    this->EVENT_TAYDIEM_MASTER_INTERFACE(Event);
    return true;
}
bool Interface::EVENT_AUTORESET_INTERFACE(DWORD Event)
{
    DWORD CurrentTick = GetTickCount();
    DWORD Delay = (CurrentTick - this->Data[EXBEXO_AUTORESET_INTERFACE].EventTick);
    if (!this->CheckWindow(ObjWindow::Character) || !IsWorkZone(EXBEXO_AUTORESET_INTERFACE))
    {
        return false;
    }
    if (Event == WM_LBUTTONDOWN)
    {
        this->Data[EXBEXO_AUTORESET_INTERFACE].OnClick = true;
        pSetCursorFocus = true;
        return true;
    }
    this->Data[EXBEXO_AUTORESET_INTERFACE].OnClick = false;
    pSetCursorFocus = false;
    // ----
    if (Delay < 500)
    {
        return false;
    }
    this->Data[EXBEXO_AUTORESET_INTERFACE].EventTick = GetTickCount();
    PMSG_TICKET_SEND pMsg;
    pMsg.header.set(0xFC, 0x23, sizeof(pMsg));
    DataSend((BYTE*)&pMsg, pMsg.header.size);
    //gInterface.CloseWindow(Character);

    return true;

}
// ----------------------------------------------------------------------------------------------
bool Interface::EVENT_LAMNHIEMVU_INTERFACE(DWORD Event)
{
    DWORD CurrentTick = GetTickCount();
    DWORD Delay = (CurrentTick - this->Data[EXBEXO_QUESTCLASS_INTERFACE].EventTick);
    if (!this->CheckWindow(ObjWindow::Character) || !IsWorkZone(EXBEXO_QUESTCLASS_INTERFACE))
    {
        return false;
    }
    if (Event == WM_LBUTTONDOWN)
    {
        this->Data[EXBEXO_QUESTCLASS_INTERFACE].OnClick = true;
        pSetCursorFocus = true;
        return true;
    }
    this->Data[EXBEXO_QUESTCLASS_INTERFACE].OnClick = false;
    pSetCursorFocus = false;
    // ----
    if (Delay < 500)
    {
        return false;
    }
    this->Data[EXBEXO_QUESTCLASS_INTERFACE].EventTick = GetTickCount();
    PMSG_TICKET_SEND pMsg;
    pMsg.header.set(0xFC, 0x24, sizeof(pMsg));
    DataSend((BYTE*)&pMsg, pMsg.header.size);
    //gInterface.CloseWindow(Character);
    return true;
}
// ----------------------------------------------------------------------------------------------
bool Interface::EVENT_OFFATTACK_INTERFACE(DWORD Event)
{
    DWORD CurrentTick = GetTickCount();
    DWORD Delay = (CurrentTick - this->Data[EXBEXO_OFFATTACK_INTERFACE].EventTick);
    if (!this->CheckWindow(ObjWindow::Character) || !IsWorkZone(EXBEXO_OFFATTACK_INTERFACE))
    {
        return false;
    }
    if (Event == WM_LBUTTONDOWN)
    {
        this->Data[EXBEXO_OFFATTACK_INTERFACE].OnClick = true;
        pSetCursorFocus = true;
        return true;
    }
    this->Data[EXBEXO_OFFATTACK_INTERFACE].OnClick = false;
    pSetCursorFocus = false;
    // ----
    if (Delay < 500)
    {
        return false;
    }
    this->Data[EXBEXO_OFFATTACK_INTERFACE].EventTick = GetTickCount();
    PMSG_TICKET_SEND pMsg;
    pMsg.header.set(0xFC, 0x25, sizeof(pMsg));
    DataSend((BYTE*)&pMsg, pMsg.header.size);
    //gInterface.CloseWindow(Character);
    return true;
}
// ----------------------------------------------------------------------------------------------
bool Interface::EVENT_UYTHAC_INTERFACE(DWORD Event)
{
    DWORD CurrentTick = GetTickCount();
    DWORD Delay = (CurrentTick - this->Data[EXBEXO_UYTHAC_INTERFACE].EventTick);
    if (!this->CheckWindow(ObjWindow::Character) || !IsWorkZone(EXBEXO_UYTHAC_INTERFACE))
    {
        return false;
    }
    if (Event == WM_LBUTTONDOWN)
    {
        this->Data[EXBEXO_UYTHAC_INTERFACE].OnClick = true;
        pSetCursorFocus = true;
        return true;
    }
    this->Data[EXBEXO_UYTHAC_INTERFACE].OnClick = false;
    pSetCursorFocus = false;
    // ----
    if (Delay < 500)
    {
        return false;
    }
    this->Data[EXBEXO_UYTHAC_INTERFACE].EventTick = GetTickCount();
    PMSG_TICKET_SEND pMsg;
    pMsg.header.set(0xFC, 0x26, sizeof(pMsg));
    DataSend((BYTE*)&pMsg, pMsg.header.size);
    //gInterface.CloseWindow(Character);
    return true;
}
// ----------------------------------------------------------------------------------------------
bool Interface::EVENT_TAYDIEM_INTERFACE(DWORD Event)
{
    DWORD CurrentTick = GetTickCount();
    DWORD Delay = (CurrentTick - this->Data[EXBEXO_TAYDIEM_INTERFACE].EventTick);
    if (!this->CheckWindow(ObjWindow::Character) || !IsWorkZone(EXBEXO_TAYDIEM_INTERFACE))
    {
        return false;
    }
    if (Event == WM_LBUTTONDOWN)
    {
        this->Data[EXBEXO_TAYDIEM_INTERFACE].OnClick = true;
        pSetCursorFocus = true;
        return true;
    }
    this->Data[EXBEXO_TAYDIEM_INTERFACE].OnClick = false;
    pSetCursorFocus = false;
    // ----
    if (Delay < 500)
    {
        return false;
    }
    this->Data[EXBEXO_TAYDIEM_INTERFACE].EventTick = GetTickCount();
    PMSG_TICKET_SEND pMsg;
    pMsg.header.set(0xFC, 0x27, sizeof(pMsg));
    DataSend((BYTE*)&pMsg, pMsg.header.size);
    //gInterface.CloseWindow(Character);
    return true;
}
// ----------------------------------------------------------------------------------------------
bool Interface::EVENT_TAYDIEM_MASTER_INTERFACE(DWORD Event)
{
    DWORD CurrentTick = GetTickCount();
    DWORD Delay = (CurrentTick - this->Data[EXBEXO_TAYDIEMMASTER_INTERFACE].EventTick);
    if (!this->CheckWindow(ObjWindow::Character) || !IsWorkZone(EXBEXO_TAYDIEMMASTER_INTERFACE))
    {
        return false;
    }
    if (Event == WM_LBUTTONDOWN)
    {
        this->Data[EXBEXO_TAYDIEMMASTER_INTERFACE].OnClick = true;
        pSetCursorFocus = true;
        return true;
    }
    this->Data[EXBEXO_TAYDIEMMASTER_INTERFACE].OnClick = false;
    pSetCursorFocus = false;
    // ----
    if (Delay < 500)
    {
        return false;
    }
    this->Data[EXBEXO_TAYDIEMMASTER_INTERFACE].EventTick = GetTickCount();
    PMSG_TICKET_SEND pMsg;
    pMsg.header.set(0xFC, 0x28, sizeof(pMsg));
    DataSend((BYTE*)&pMsg, pMsg.header.size);
    //gInterface.CloseWindow(Character);
    return true;
}

// ----------------------------------------------------------------------------------------------
#endif


import.h

//#if(BOTOES_FUNCOES)
#define pSetTextFont              ((int(__thiscall*)(LPVOID This, HFONT a2)) 0x00420120)
//


Controller.cpp

Dentro de case WM_LBUTTONDOWN:

#if(BOTOES_FUNCOES)
            gInterface.EVENT_TINHNANG_INTERFACE(wParam);
#endif


Descargar
https://mega.nz/file/KUYBBLJB#2Sd8XW1ukEdPEjF9DMH7_D3OegiGCLVPPgIeZsTO7xA

Creditos
al creador del codigo
Dakosmu por la mini guia



Bon Dia

🡱 🡳