Noticias:

SMF - Just Installed!

Menú principal

Mensajes recientes

#81
Source Mu / Re:Window movable - Tela flutu...
Último mensaje por Dakosmu - Mar 23, 2025, 11:20 PM
v0.6 - with various text, and font size one per one , and button close


Los visitantes no pueden visualizar imágenes en los mensajes, por favor Regístrate o Inicia Sesión

#include "stdafx.h"
#include "layout.h"
#include "Interface.h"
#include "Central.h"
#include "Defines.h"
#include "Import.h"
#include "CustomFont.h"
#include "Defines2.h"
#include <vector>
#include <string>
#include <fstream>
#include <windows.h> // Para DWORD, GetTickCount(), VK_F4, etc.

// Inicializa o gLayout e as variáveis de drag dentro da classe
CLayout::CLayout()
{
    // Construtor vazio. Caso necessite, adicione inicializações aqui.
}

CLayout gLayout;

void CLayout::UpdateLayoutPanelWindow()
{
    // Variável estática para controlar o estado da tecla F4
    static bool isF4Pressed = false;
    bool currentF4State = (GetAsyncKeyState(VK_F4) & 0x8000) != 0;

    if (currentF4State && !isF4Pressed)
    {
        // Alterna a flag de exibição do painel
        gInterface.Data[eLayout_MAIN].OnShow = !gInterface.Data[eLayout_MAIN].OnShow;
        isF4Pressed = true;
    }
    else if (!currentF4State)
    {
        isF4Pressed = false;
    }
}

int CLayout::DrawToolTip(int X, int Y, LPCSTR Text, ...)
{
    char Buff[2048];
    int BuffLen = sizeof(Buff);
    ZeroMemory(Buff, BuffLen);

    va_list args;
    va_start(args, Text);
    int Len = vsprintf_s(Buff, BuffLen, Text, args);
    va_end(args);

    return pDrawToolTip(X, Y, Buff);
}

// Variáveis globais para controle do drag e da posição do painel
bool   m_isDragging = false;
POINT  m_dragStartPoint;
float m_windowPosX = (MAX_WIN_WIDTH - 230.0f) / 2;
float m_windowPosY = (MAX_WIN_HEIGHT - 240.0f) / 2;

void CLayout::DrawLayoutPanelWindow()
{
    // Se o painel não estiver para ser exibido, sai da função
    if (!gInterface.Data[eLayout_MAIN].OnShow)
        return;

    // Garante o foco do cursor
    pSetCursorFocus = true;

    // Dimensões fixas do painel
    const float MainWidth = 230.0f;
    const float MainHeight = 240.0f;

    // Lógica para drag and drop
    if (pCheckMouseOver(m_windowPosX, m_windowPosY, MainWidth, MainHeight) || m_isDragging)
    {
        if (GetAsyncKeyState(VK_LBUTTON) & 0x8000)
        {
            if (!m_isDragging)
            {
                m_isDragging = true;
                m_dragStartPoint.x = pCursorX;
                m_dragStartPoint.y = pCursorY;
            }
            else
            {
                float deltaX = pCursorX - m_dragStartPoint.x;
                float deltaY = pCursorY - m_dragStartPoint.y;

                m_windowPosX += deltaX;
                m_windowPosY += deltaY;

                if (m_windowPosX < 0)
                    m_windowPosX = 0;
                else if (m_windowPosX > MAX_WIN_WIDTH - MainWidth)
                    m_windowPosX = MAX_WIN_WIDTH - MainWidth;

                if (m_windowPosY < 0)
                    m_windowPosY = 0;
                else if (m_windowPosY > MAX_WIN_HEIGHT - MainHeight)
                    m_windowPosY = MAX_WIN_HEIGHT - MainHeight;

                m_dragStartPoint.x = pCursorX;
                m_dragStartPoint.y = pCursorY;
            }
        }
        else
        {
            m_isDragging = false;
        }
    }
    else
    {
        m_isDragging = false;
    }

    // Desenha o painel flutuante na posição atual
    gCentral.PrintDropBox(m_windowPosX, m_windowPosY, MainWidth, MainHeight, 0, 0);

    // Define a posição base para o texto
    float StartX = m_windowPosX;
    float StartY = m_windowPosY;

    // Cria um vetor de linhas de texto
    std::vector<std::string> textos;
    textos.push_back("SEJA BEM VINDO AO MUONLINE");
    textos.push_back("O continente de MU era glorioso e vasto,");
    textos.push_back("Quando Kundun surgiu, trazendo o caos mortal.");
    textos.push_back("Heróis lutaram com força e magia.");
    textos.push_back("Criaturas sombrias espalharam terror.");

    // Vetor com os tamanhos (em pontos) para cada linha
    std::vector<int> fontSizes;
    fontSizes.push_back(20);
    fontSizes.push_back(16);
    fontSizes.push_back(16);
    fontSizes.push_back(16);
    fontSizes.push_back(16);

    // Define o espaçamento vertical entre as linhas
    float linhaAltura = 30.0f;

    // Para cada linha, cria e aplica uma fonte personalizada com o tamanho correspondente e desenha o texto
    for (size_t i = 0; i < textos.size(); i++)
    {
        HFONT hCustomFont = CreateFontA(
            -fontSizes[i],   // Tamanho da fonte (em pontos)
            0,               // Largura: ajuste automático
            0,               // Escapamento
            0,               // Orientação
            FW_BOLD,         // Peso: negrito
            FALSE,           // Não itálico
            FALSE,           // Sem sublinhado
            FALSE,           // Sem tachado
            DEFAULT_CHARSET,
            OUT_TT_PRECIS,
            CLIP_DEFAULT_PRECIS,
            CLEARTYPE_QUALITY,
            DEFAULT_PITCH | FF_DONTCARE,
            "Segoe UI"       // Nome da fonte (deve estar instalada)
        );

        if (hCustomFont)
        {
            pSetFont(pTextThis(), (int)hCustomFont);
            pDrawText(pTextThis(), StartX - 16, StartY + 10 + i * linhaAltura,
                textos[i].c_str(), 260, 0, (LPINT)3, 0);
            DeleteObject(hCustomFont);
        }
    }

    // --- Botão de fechar ---
    // Altere a posição do botão close para que fique mais para cima e à direita.
   
    // Aqui muda a posição X do botão close (mais à direita)
    float closeButtonX = m_windowPosX + MainWidth - 20;
    // Aqui muda a posição Y do botão close (mais para cima)
    float closeButtonY = m_windowPosY - 10;

    // Desenha o botão de fechar
    gInterface.DrawGUI(eMenu_CLOSE, closeButtonX, closeButtonY);

    // Se o cursor estiver sobre o botão, exibe o tooltip "Close"
    if (pCheckMouseOver(closeButtonX, closeButtonY, 36, 29))
    {
        this->DrawToolTip(closeButtonX + 5, closeButtonY + 25, "Close");
    }

    // Verifica se o botão de fechar foi clicado
    if (pCheckMouseOver(closeButtonX, closeButtonY, 36, 29) && (GetAsyncKeyState(VK_LBUTTON) & 0x8000))
    {
        gInterface.Data[eLayout_MAIN].OnShow = false;
    }
}

Creditos
T-LEGENDARY
#82
Source Mu / Re:Window movable - Tela flutu...
Último mensaje por Dakosmu - Mar 22, 2025, 05:23 PM
v0.5 - with various text, and font size one per one

Los visitantes no pueden visualizar imágenes en los mensajes, por favor Regístrate o Inicia Sesión

Los visitantes no pueden visualizar imágenes en los mensajes, por favor Regístrate o Inicia Sesión


#include "stdafx.h"
#include "layout.h"
#include "Interface.h"
#include "Central.h"
#include "Defines.h"
#include "Import.h"
#include "CustomFont.h"
#include "Defines2.h"
#include <vector>
#include <string>
#include <fstream>
#include <windows.h> // Para DWORD, GetTickCount(), VK_F4, etc.

// Inicializa o gLayout e as variáveis de drag dentro da classe
CLayout::CLayout()
{
    // Construtor vazio. Caso necessite, adicione inicializações aqui.
}

CLayout gLayout;

void CLayout::UpdateLayoutPanelWindow()
{
    // Variável estática para controlar o estado da tecla F4
    static bool isF4Pressed = false;
    bool currentF4State = (GetAsyncKeyState(VK_F4) & 0x8000) != 0;

    if (currentF4State && !isF4Pressed)
    {
        // Alterna a flag de exibição do painel
        gInterface.Data[eLayout_MAIN].OnShow = !gInterface.Data[eLayout_MAIN].OnShow;
        isF4Pressed = true;
    }
    else if (!currentF4State)
    {
        isF4Pressed = false;
    }
}

// Variáveis globais para controle do drag e da posição do painel
bool   m_isDragging = false;
POINT  m_dragStartPoint;
float m_windowPosX = (MAX_WIN_WIDTH - 230.0f) / 2;
float m_windowPosY = (MAX_WIN_HEIGHT - 240.0f) / 2;

void CLayout::DrawLayoutPanelWindow()
{
    // Se o painel não estiver para ser exibido, sai da função
    if (!gInterface.Data[eLayout_MAIN].OnShow)
        return;

    // Garante o foco do cursor (certifique-se de que pSetCursorFocus está implementado corretamente)
    pSetCursorFocus = true;

    // Dimensões fixas do painel
    const float MainWidth = 230.0f;
    const float MainHeight = 240.0f;

    // Lógica para drag and drop: se o mouse estiver sobre o painel ou se já estiver sendo arrastado
    if (pCheckMouseOver(m_windowPosX, m_windowPosY, MainWidth, MainHeight) || m_isDragging)
    {
        if (GetAsyncKeyState(VK_LBUTTON) & 0x8000)
        {
            if (!m_isDragging)
            {
                // Inicia o arraste: registra a posição corrente do cursor
                m_isDragging = true;
                m_dragStartPoint.x = pCursorX;
                m_dragStartPoint.y = pCursorY;
            }
            else
            {
                // Atualiza a posição com base na variação do cursor
                float deltaX = pCursorX - m_dragStartPoint.x;
                float deltaY = pCursorY - m_dragStartPoint.y;

                m_windowPosX += deltaX;
                m_windowPosY += deltaY;

                // Limita a posição horizontal
                if (m_windowPosX < 0)
                    m_windowPosX = 0;
                else if (m_windowPosX > MAX_WIN_WIDTH - MainWidth)
                    m_windowPosX = MAX_WIN_WIDTH - MainWidth;

                // Limita a posição vertical
                if (m_windowPosY < 0)
                    m_windowPosY = 0;
                else if (m_windowPosY > MAX_WIN_HEIGHT - MainHeight)
                    m_windowPosY = MAX_WIN_HEIGHT - MainHeight;

                // Atualiza o ponto de referência para o próximo cálculo
                m_dragStartPoint.x = pCursorX;
                m_dragStartPoint.y = pCursorY;
            }
        }
        else
        {
            // Se o botão esquerdo não está pressionado, encerra o arraste
            m_isDragging = false;
        }
    }
    else
    {
        m_isDragging = false;
    }

    // Desenha o painel flutuante na posição atual
    gCentral.PrintDropBox(m_windowPosX, m_windowPosY, MainWidth, MainHeight, 0, 0);

    // Define a posição base para o texto (origem: canto superior esquerdo do painel)
    float StartX = m_windowPosX;
    float StartY = m_windowPosY;

    // Cria um vetor de linhas de texto e um vetor correspondente com os tamanhos de fonte desejados
    std::vector<std::string> textos;
    textos.push_back("SEJA BEM VINDO AO MUONLINE");
    textos.push_back("O continente de MU era glorioso e vasto,");
    textos.push_back("Quando Kundun surgiu, trazendo o caos mortal.");
    textos.push_back("Heróis lutaram com força e magia.");
    textos.push_back("Criaturas sombrias espalharam terror.");

    // Vetor com os tamanhos (em pontos) para cada linha
    std::vector<int> fontSizes;
    fontSizes.push_back(20); // Por exemplo, a primeira linha um pouco maior
    fontSizes.push_back(16);
    fontSizes.push_back(16);
    fontSizes.push_back(16);
    fontSizes.push_back(16);

    // Define o espaçamento vertical entre as linhas
    float linhaAltura = 30.0f;

    // Para cada linha, cria e aplica uma fonte personalizada com o tamanho correspondente e desenha o texto
    for (size_t i = 0; i < textos.size(); i++)
    {
        // Cria a fonte: o valor negativo indica o tamanho em pontos desejado
        HFONT hCustomFont = CreateFontA(
            -fontSizes[i],   // Altura da fonte (em pontos)
            0,               // Largura: 0 para ajuste automático
            0,               // Escapamento
            0,               // Orientação
            FW_BOLD,         // Peso da fonte: Bold (negrito)
            FALSE,           // Não itálico
            FALSE,           // Sem sublinhado
            FALSE,           // Sem tachado
            DEFAULT_CHARSET,
            OUT_TT_PRECIS,
            CLIP_DEFAULT_PRECIS,
            CLEARTYPE_QUALITY,
            DEFAULT_PITCH | FF_DONTCARE,
            "Segoe UI"       // Nome da fonte (use uma fonte TrueType instalada)
        );

        if (hCustomFont)
        {
            // Aplica a fonte personalizada
            pSetFont(pTextThis(), (int)hCustomFont);
            // Desenha a linha de texto na posição calculada
            pDrawText(pTextThis(), StartX - 16, StartY + 10 + i * linhaAltura,
                textos[i].c_str(), 260, 0, (LPINT)3, 0);
            // Libera o objeto de fonte após o uso para evitar vazamentos
            DeleteObject(hCustomFont);
        }
    }

    // Variável para eventuais usos gráficos (por exemplo, definição de cores)
    DWORD Color = eGray100;
}


#83
Source Mu / Re:Source Completa 5.2 rOX gAM...
Último mensaje por bin9xhn2 - Mar 22, 2025, 03:52 AM
Los visitantes no pueden visualizar imágenes en los mensajes, por favor Regístrate o Inicia Sesión

Los visitantes no pueden visualizar imágenes en los mensajes, por favor Regístrate o Inicia Sesión
#84
Source Mu / Re:Source Completa 5.2 rOX gAM...
Último mensaje por bin9xhn2 - Mar 22, 2025, 03:50 AM
Los visitantes no pueden visualizar imágenes en los mensajes, por favor Regístrate o Inicia Sesión

Los visitantes no pueden visualizar imágenes en los mensajes, por favor Regístrate o Inicia Sesión

Can someone do this SRC with me ???
#85
Server Files / Files Mu Server S8 Ep 19 Updat...
Último mensaje por Dakosmu - Mar 22, 2025, 02:46 AM
Files Mu Server S8 Ep 19 Update 37 Louis Nueva Update

Los visitantes no pueden visualizar imágenes en los mensajes, por favor Regístrate o Inicia Sesión

Los visitantes no pueden visualizar imágenes en los mensajes, por favor Regístrate o Inicia Sesión

Los visitantes no pueden visualizar imágenes en los mensajes, por favor Regístrate o Inicia Sesión

Los visitantes no pueden visualizar imágenes en los mensajes, por favor Regístrate o Inicia Sesión

Los visitantes no pueden visualizar imágenes en los mensajes, por favor Regístrate o Inicia Sesión

Los visitantes no pueden visualizar imágenes en los mensajes, por favor Regístrate o Inicia Sesión

Los visitantes no pueden visualizar imágenes en los mensajes, por favor Regístrate o Inicia Sesión

Los visitantes no pueden visualizar imágenes en los mensajes, por favor Regístrate o Inicia Sesión

Los visitantes no pueden visualizar imágenes en los mensajes, por favor Regístrate o Inicia Sesión

Los visitantes no pueden visualizar imágenes en los mensajes, por favor Regístrate o Inicia Sesión

Los visitantes no pueden visualizar imágenes en los mensajes, por favor Regístrate o Inicia Sesión

Los visitantes no pueden visualizar imágenes en los mensajes, por favor Regístrate o Inicia Sesión

Los visitantes no pueden visualizar imágenes en los mensajes, por favor Regístrate o Inicia Sesión

Los visitantes no pueden visualizar imágenes en los mensajes, por favor Regístrate o Inicia Sesión

Los visitantes no pueden visualizar imágenes en los mensajes, por favor Regístrate o Inicia Sesión

Los visitantes no pueden visualizar imágenes en los mensajes, por favor Regístrate o Inicia Sesión

Los visitantes no pueden visualizar imágenes en los mensajes, por favor Regístrate o Inicia Sesión

Los visitantes no pueden visualizar imágenes en los mensajes, por favor Regístrate o Inicia Sesión

Los visitantes no pueden visualizar imágenes en los mensajes, por favor Regístrate o Inicia Sesión

Los visitantes no pueden visualizar imágenes en los mensajes, por favor Regístrate o Inicia Sesión

Los visitantes no pueden visualizar imágenes en los mensajes, por favor Regístrate o Inicia Sesión

Los visitantes no pueden visualizar imágenes en los mensajes, por favor Regístrate o Inicia Sesión

Los visitantes no pueden visualizar imágenes en los mensajes, por favor Regístrate o Inicia Sesión

Los visitantes no pueden visualizar imágenes en los mensajes, por favor Regístrate o Inicia Sesión

Los visitantes no pueden visualizar imágenes en los mensajes, por favor Regístrate o Inicia Sesión

Los visitantes no pueden visualizar imágenes en los mensajes, por favor Regístrate o Inicia Sesión

Los visitantes no pueden visualizar imágenes en los mensajes, por favor Regístrate o Inicia Sesión

Los visitantes no pueden visualizar imágenes en los mensajes, por favor Regístrate o Inicia Sesión

Los visitantes no pueden visualizar imágenes en los mensajes, por favor Regístrate o Inicia Sesión

Los visitantes no pueden visualizar imágenes en los mensajes, por favor Regístrate o Inicia Sesión

Los visitantes no pueden visualizar imágenes en los mensajes, por favor Regístrate o Inicia Sesión

Los visitantes no pueden visualizar imágenes en los mensajes, por favor Regístrate o Inicia Sesión

Los visitantes no pueden visualizar imágenes en los mensajes, por favor Regístrate o Inicia Sesión

Los visitantes no pueden visualizar imágenes en los mensajes, por favor Regístrate o Inicia Sesión

Los visitantes no pueden visualizar imágenes en los mensajes, por favor Regístrate o Inicia Sesión

Los visitantes no pueden visualizar imágenes en los mensajes, por favor Regístrate o Inicia Sesión

Los visitantes no pueden visualizar imágenes en los mensajes, por favor Regístrate o Inicia Sesión

Los visitantes no pueden visualizar imágenes en los mensajes, por favor Regístrate o Inicia Sesión

Los visitantes no pueden visualizar imágenes en los mensajes, por favor Regístrate o Inicia Sesión

Los visitantes no pueden visualizar imágenes en los mensajes, por favor Regístrate o Inicia Sesión

Los visitantes no pueden visualizar imágenes en los mensajes, por favor Regístrate o Inicia Sesión

Los visitantes no pueden visualizar imágenes en los mensajes, por favor Regístrate o Inicia Sesión

Los visitantes no pueden visualizar imágenes en los mensajes, por favor Regístrate o Inicia Sesión

Los visitantes no pueden visualizar imágenes en los mensajes, por favor Regístrate o Inicia Sesión

Los visitantes no pueden visualizar imágenes en los mensajes, por favor Regístrate o Inicia Sesión

Los visitantes no pueden visualizar imágenes en los mensajes, por favor Regístrate o Inicia Sesión

Los visitantes no pueden visualizar imágenes en los mensajes, por favor Regístrate o Inicia Sesión

Los visitantes no pueden visualizar imágenes en los mensajes, por favor Regístrate o Inicia Sesión

Los visitantes no pueden visualizar imágenes en los mensajes, por favor Regístrate o Inicia Sesión

Los visitantes no pueden visualizar imágenes en los mensajes, por favor Regístrate o Inicia Sesión

Los visitantes no pueden visualizar imágenes en los mensajes, por favor Regístrate o Inicia Sesión

Los visitantes no pueden visualizar imágenes en los mensajes, por favor Regístrate o Inicia Sesión

Los visitantes no pueden visualizar imágenes en los mensajes, por favor Regístrate o Inicia Sesión


DESCARGAR LOS ARCHIVOS AQUI

Creditos
Valen1531
#86
Source Mu / Re:Window movable - Tela flutu...
Último mensaje por Dakosmu - Mar 22, 2025, 02:31 AM
v0.4 - with various text


Los visitantes no pueden visualizar imágenes en los mensajes, por favor Regístrate o Inicia Sesión

Los visitantes no pueden visualizar imágenes en los mensajes, por favor Regístrate o Inicia Sesión







#include "stdafx.h"
#include "layout.h"
#include "Interface.h"
#include "Central.h"
#include "Defines.h"
#include "Import.h"
#include "CustomFont.h"
#include "Defines2.h"
#include <vector>
#include <string>
#include <fstream>
#include <windows.h> // Para DWORD, GetTickCount(), VK_F4, etc.

// Inicializa o gLayout e as variáveis de drag dentro da classe
CLayout::CLayout()
{
    // Construtor vazio. Caso necessite, adicione inicializações aqui.
}

CLayout gLayout;

void CLayout::UpdateLayoutPanelWindow()
{
    // Variável estática para controlar o estado da tecla F4
    static bool isF4Pressed = false;
    bool currentF4State = (GetAsyncKeyState(VK_F4) & 0x8000) != 0;

    if (currentF4State && !isF4Pressed)
    {
        // Alterna a flag de exibição do painel
        gInterface.Data[eLayout_MAIN].OnShow = !gInterface.Data[eLayout_MAIN].OnShow;
        isF4Pressed = true;
    }
    else if (!currentF4State)
    {
        isF4Pressed = false;
    }
}

// Variáveis globais para controle do drag e da posição do painel
bool   m_isDragging = false;
POINT  m_dragStartPoint;
float m_windowPosX = (MAX_WIN_WIDTH - 230.0f) / 2;
float m_windowPosY = (MAX_WIN_HEIGHT - 240.0f) / 2;

void CLayout::DrawLayoutPanelWindow()
{
    // Se o painel não estiver para ser exibido, sai da função
    if (!gInterface.Data[eLayout_MAIN].OnShow)
        return;

    // Garante o foco do cursor – certifique-se de que pSetCursorFocus esteja implementado corretamente
    pSetCursorFocus = true;

    // Dimensões fixas do painel
    const float MainWidth = 230.0f;
    const float MainHeight = 240.0f;

    // Lógica para drag and drop: se o mouse estiver sobre o painel ou se já estiver sendo arrastado
    if (pCheckMouseOver(m_windowPosX, m_windowPosY, MainWidth, MainHeight) || m_isDragging)
    {
        if (GetAsyncKeyState(VK_LBUTTON) & 0x8000)
        {
            if (!m_isDragging)
            {
                // Inicia o arraste: registra a posição corrente do cursor
                m_isDragging = true;
                m_dragStartPoint.x = pCursorX;
                m_dragStartPoint.y = pCursorY;
            }
            else
            {
                // Atualiza a posição com base na variação do cursor
                float deltaX = pCursorX - m_dragStartPoint.x;
                float deltaY = pCursorY - m_dragStartPoint.y;

                m_windowPosX += deltaX;
                m_windowPosY += deltaY;

                // Limita para não ultrapassar as bordas da tela (horizontal)
                if (m_windowPosX < 0)
                    m_windowPosX = 0;
                else if (m_windowPosX > MAX_WIN_WIDTH - MainWidth)
                    m_windowPosX = MAX_WIN_WIDTH - MainWidth;

                // Limita para não ultrapassar as bordas da tela (vertical)
                if (m_windowPosY < 0)
                    m_windowPosY = 0;
                else if (m_windowPosY > MAX_WIN_HEIGHT - MainHeight)
                    m_windowPosY = MAX_WIN_HEIGHT - MainHeight;

                // Atualiza o ponto de referência para o próximo cálculo
                m_dragStartPoint.x = pCursorX;
                m_dragStartPoint.y = pCursorY;
            }
        }
        else
        {
            // Se o botão esquerdo não está pressionado, encerra o arraste
            m_isDragging = false;
        }
    }
    else
    {
        m_isDragging = false;
    }

    // Desenha o painel flutuante na posição atual
    gCentral.PrintDropBox(m_windowPosX, m_windowPosY, MainWidth, MainHeight, 0, 0);

    // Define a posição base para o texto (origem: canto superior esquerdo do painel)
    float StartX = m_windowPosX;
    float StartY = m_windowPosY;

    // Cria uma fonte personalizada para exibir o texto em Bold, tamanho 24
    HFONT hCustomFont = CreateFontA(
        -20,         // Altura da fonte: -24 indica 24 pontos
        0,           // Largura: 0 para ajuste automático
        0,           // Escapamento
        0,           // Orientação
        FW_BOLD,     // Peso da fonte: Bold
        FALSE,       // Não itálico
        FALSE,       // Sem sublinhado
        FALSE,       // Sem tachado
        DEFAULT_CHARSET,
        OUT_TT_PRECIS,
        CLIP_DEFAULT_PRECIS,
        CLEARTYPE_QUALITY,
        DEFAULT_PITCH | FF_DONTCARE,
        "Segoe UI"   // Nome da fonte
    );

    if (hCustomFont)
    {
        // Aplica a fonte personalizada
        pSetFont(pTextThis(), (int)hCustomFont);

        // Cria um vetor para armazenar as linhas de texto usando push_back
        std::vector<std::string> textos;
        textos.push_back("SEJA BEM VINDO AO MUONLINE");
        textos.push_back("MU era glorioso e vasto,");
        textos.push_back("Quando Kundun surgiu, trazendo o caos.");
        textos.push_back("Heróis lutaram com força e magia.");
        textos.push_back("Criaturas sombrias espalharam terror.");

        // Define o espaçamento vertical entre as linhas
        float linhaAltura = 30.0f;

        // Exibe cada linha de texto, uma abaixo da outra
        for (size_t i = 0; i < textos.size(); i++)
        {
            pDrawText(pTextThis(), StartX - 16, StartY + 10 + i * linhaAltura,
                textos[i].c_str(), 260, 0, (LPINT)3, 0);
        }

        // Libera o objeto de fonte após o uso para evitar vazamentos de recursos
        DeleteObject(hCustomFont);
    }

    // Variável para eventuais usos gráficos (por exemplo, definição de cores)
    DWORD Color = eGray100;
}

Creditos
T-LEGENDARY
#87
Source Mu / Web Post by pquintal Web Inter...
Último mensaje por Dakosmu - Mar 22, 2025, 01:23 AM
Web Post by pquintal Web Interna y External - Guia Cora21

ESTE METODO ES PARA TENER EL "SCRIP" INDEX.PHP FUERA DEL VPS O DEDICADO Y SIN NECESIDAD DE ABILITAR EN TU HOSTWEB EL MSSL PHP.ini o My.ini o PostgreSQL o SQL - ya que estamos usando metodo iframe y lee desde tu servidor local mediante un php

yo diria que para entender esta guia hay que solo leer un poco o leerla 3 veces y luego ver las imagenes

1) PRIMERO CREAMOS UN IFRAME EN EL ARCHIVO index.php O COLOCAMOS ESTE IFRAME

Código PHP:
<iframe src="http://TU-NOIP+PUERTO-O-IP+PUERTO-O-IP/web_post_pvp_host.php" id="web" name="ramegm" height="200" frameborder="0" width="420" scrolling="Auto"></iframe>REMPLAZAMOS
http://TU-NOIP+PUERTO-O-IP+PUERTO-O-I
por tu direccion ip o tu no-ip recuerden que si van a colocar no ip coloquen el puerto también o si tienen sub carpeta también modificar el link con su nombre de carpeta

ejemplo
http://xxxxxxx.sytes.net:8080/web_post_pvp_host.php
http://123.131.313.131.11/web_post_pvp_host.php

si tienen carpeta intro o sub carpeta quedaria asi
http://xxxxxxx.sytes.net:8080/subcarpeta/web_post_pvp_host.php

alli colocan el nombre de la carpeta o posición donde se encuentre el archivo
/subcarpeta/

REMPLAZAMOS
height="200" frameborder="0" width="420"
por el tamaño que deseamos
height="200" la altura del cuadro (iframe)
width="420" la anchura del cuadro (iframe)

asi quedaria el index.php con el iframe

Bajamos este ya Editado "web_post_pvp_host.php"

Free File Hosting & Video Downloads, Free File Sharing, Online Friends Network - Ziddu

lo guardamos en nuestro dedicado vps o web host "www" o "htdocs" o en su IIS
Todo esto va en tu carpeta local del dedicado web o vps web
web_post_pvp_host.php
web_post_pvp_.php
index.php

///NOTA SI YA BAJASTE EL ARCHIVO YA NO TIENES QUE SEGUIR ESTE PASO SOLO CREATE EL IFRAME EN TU INDEX COMO INDICA ARRIBA OK,, SI YA BAJASTE EL ARCHIVO web_post_pvp_host.php" EL TEMA DE ABAJO NO INCLUYE OK..//

2) SEGUNDO CREAMOS UN ARCHIVO .PHP LLAMADO web_post_pvp_host.php o cualquier nombre yo le puse ese nombre para que los que no saben mucho se les haga más entendible y fácil. le explico de nuevo esto es un .PHP nuevo ok

//////////////////////////////////////////////////////////////////////////////
dentro de este archivo "web_post_pvp_host.php" van a colocar este script....
este paso es para las personas que no quieran bajar el archivo que subi "web_post_pvp_host.php" y desean hacerlo manual ok..

Código PHP:
<?
$rootname = 'E:\MuServer\GameServer\POST_LOG'; //REEMPLAZA POR TU DIRECCION DE CARPETA
$servername = 'Server1';  // REMPLAZA POR TU NOMBRE DE SERVER
$limit=50; // Limite de mensajes que se mostraran en la web
echo '<iframe width="400" height="180" scrolling="no" src="web_post_pvp.php?root='.$rootname.'&amp;name='.$servername.'&amp;='.$limit.'" frameborder="1" style="background-color:#1A1917"></iframe>'; //COLOR DE FONDO
?>
<?php
$rootname 
$_GET['root']; // Disco y Carpeta donde esta el servidor
$servername $_GET['name'];  // Nombre del Server en GameServer\Data\serverinfo.dat
$postlimit=isset($_GET['limit']) ? $_GET['limit'] : 50;
$fecha date('Y-m-d');
echo 
"<strong style='padding-left:100px'>.:: P o s t s&nbsp;&nbsp;&nbsp;d e l&nbsp;&nbsp;&nbsp;S e r v i d o r&nbsp;&nbsp;&nbsp;".$servername." ::.</strong><br>";
if(
file_exists($rootname."\POST_LOG ".$fecha."_".$servername.".txt")){
    
$ordeninverso array_reverse(file($rootname."\POST_LOG ".$fecha."_".$servername.".txt"));
    
$count=1;
    foreach(
$ordeninverso as $archivo){
        echo 
preg_replace("#(.*?) \[Post\] <(.*?)> (.*)#i","<br /><div style='display:inline;'><div style='color:gray;float:left;'><em>$count) \\1</em></div>&nbsp; &nbsp;<div style='color:orange; width:76px; float:left;padding-left:10px'><strong>[\\2]</strong></div><div style='color:#00CC00; display:inline;'>&nbsp;&nbsp;&nbsp;  [".htmlentities('\\3')."] </div></div>",$archivo);
        if(
$count==$postlimit){
            break;
        }
        
$count++;
    }
}
?>
este script va dentro de tu archivo "web_post_pvp_host.php" o .PHP nuevo que creaste ok

a la final tendran su "index.php con el código iframe
y el archivo "web_post_pvp_host.php" con el script que coloque aquí o el archivo que coloque aquí ya editado

METODO PARA TENERLO EN MODO LOCAL

Primero tienes que tener el archivo "web_post_pvp" y el Archivo "index" en la misma carpeta para que funcione

PRIMER CODIGO A PEGAR EN TU INDEX.PHP
Código PHP:
<?
$rootname = 'E:\MuServer\GameServer\POST_LOG'; // Disco y Carpeta donde esta el servidor y los archivos de Post Log
$servername = 'Server1';  // Nombre del Server en GameServer\Data\serverinfo.dat
$limit=50; // Limite de mensajes que se mostraran en la web
echo '<iframe width="400" height="180" scrolling="no" src="web_post_pvp.php?root='.$rootname.'&amp;name='.$servername.'&amp;='.$limit.'" frameborder="1" style="background-color:#1A1917"></iframe>';
?>
SEGUNDO CÓDIGO A PEGAR EN TU INDEX.PHP
Código PHP:
<?php
$rootname 
$_GET['root']; // Disco y Carpeta donde esta el servidor
$servername $_GET['name'];  // Nombre del Server en GameServer\Data\serverinfo.dat
$postlimit=isset($_GET['limit']) ? $_GET['limit'] : 50;
$fecha date('Y-m-d');
echo 
"<strong style='padding-left:100px'>.:: P o s t s&nbsp;&nbsp;&nbsp;d e l&nbsp;&nbsp;&nbsp;S e r v i d o r&nbsp;&nbsp;&nbsp;".$servername." ::.</strong><br>";
if(
file_exists($rootname."\POST_LOG ".$fecha."_".$servername.".txt")){
    
$ordeninverso array_reverse(file($rootname."\POST_LOG ".$fecha."_".$servername.".txt"));
    
$count=1;
    foreach(
$ordeninverso as $archivo){
        echo 
preg_replace("#(.*?) \[Post\] <(.*?)> (.*)#i","<br /><div style='display:inline;'><div style='color:gray;float:left;'><em>$count) \\1</em></div>&nbsp; &nbsp;<div style='color:orange; width:76px; float:left;padding-left:10px'><strong>[\\2]</strong></div><div style='color:#00CC00; display:inline;'>&nbsp;&nbsp;&nbsp;  [".htmlentities('\\3')."] </div></div>",$archivo);
        if(
$count==$postlimit){
            break;
        }
        
$count++;
    }
}
?>
ASI DEBERIA DE QUEDAR TU INDEX.PHP CON LOS DOS CODIGOS

AQUI UNAS IMAGENES USADAS EN LA GUIA

para externo deberías de tener los 3 archivos dentro de tu carpeta del servidor web

el iframe ya colocado en tu index.php modo externo

los 2 códigos o script dentro de tu index.php modo interno

script usado en el index.php modo interno

proceso del script trabajando correctamente modo interno

CREDITOS =
Dakosmu = Postear la Guía
Cora21 = Por Hacerme la Guía *Bastante le jale
pquintal = Genial y Gracias
Luis_N = Genial y Gracias
CP Team Development = Genial y Gracias
#88
Source Mu / Muserver Season 4 Premium (Upd...
Último mensaje por Dakosmu - Mar 21, 2025, 07:48 PM
Muserver Season 4 Premium (Update 31) by louis

Hola a todos

Ha pasado mucho tiempo desde que lancé algo para la comunidad, así que aquí tienen un regalo de Navidad atrasado.

Actualización completa y premium 31 para ustedes.

Los visitantes no pueden visualizar imágenes en los mensajes, por favor Regístrate o Inicia Sesión


Los visitantes no pueden visualizar imágenes en los mensajes, por favor Regístrate o Inicia Sesión


Los visitantes no pueden visualizar imágenes en los mensajes, por favor Regístrate o Inicia Sesión


Los visitantes no pueden visualizar imágenes en los mensajes, por favor Regístrate o Inicia Sesión


Los visitantes no pueden visualizar imágenes en los mensajes, por favor Regístrate o Inicia Sesión


Mira videos sobre todas las actualizaciones en mi canal de YouTube:
https://www.youtube.com/@louisemulator

CHANGELOG:

UPDATE 12:
- Custom NPC move
- CustomCommandInfo (v2)
- Custom RankUser OverHead
- Custom Party Icon(s4/s6)
- Trade Value
- Party Disable PK
- New Anti SpeedHack Skill System

  • UPDATE 13: GS y GSCS nueva interfaz
  • UPDATE 14: Guantes RF personalizados (S6)
  • UPDATE 15: Opción de puntuación máxima en el duelo

Descargas:
Servidor:
DESCARGAR AQUI

Cliente:
DESCARGAR AQUI (limpio)

Mu editor actualización 31+:
DESCARGAR AQUI

Créditos:
X-team, MuEmu, louis, Haziel, Smiley, Mentor, Hugo, Hinetworks, Emershow, MyHeart
#89
Source Mu / Re:Source Completa 5.2 rOX gAM...
Último mensaje por Dakosmu - Mar 21, 2025, 02:02 PM
Cita de: dexign en Mar 21, 2025, 05:05 AMcomo hiciste para que funcionara el lua?

aun yo no e instalado los files


esto es un copy paste
#90
Source Mu / Re:Source Completa 5.2 rOX gAM...
Último mensaje por dexign - Mar 21, 2025, 05:05 AM
como hiciste para que funcionara el lua?
🡱 🡳