Cómo Solucionar Loading al Agregar Alas Custom en MuOnline

Cómo Solucionar Loading al Agregar Alas Custom en MuOnline

Introducción

Si eres un desarrollador o un entusiasta de MuOnline, seguramente te has encontrado con el desafío de agregar alas personalizadas a tu servidor. Sin embargo, es posible que te hayas topado con un problema frustrante: la palabra «Loading» se queda atascada en el juego y no se muestra el precio de los ítems. En esta publicación, te explicaré cómo solucionar este inconveniente en el código fuente de MuOnline Base Louis y Muemu, específicamente en la versión Season 6.

El Problema

Al agregar alas personalizadas, el código por defecto en ItemShopValue.cpp puede causar que el cliente del juego no procese correctamente los precios de los ítems, resultando en el mensaje «Loading». Esto se debe a que el sistema no está reconociendo adecuadamente las nuevas opciones de ítem que se requieren para las alas.

Código Original

Aquí tienes el fragmento del código original que causa el problema:

ItemShopValue.cpp

int ItemPrice::SetPriceRecv(int a1,int a2)

int ItemPrice::SetPriceRecv(int a1,int a2)
{
    int ItemId		= *(WORD*)a1;
    int ItemLvl		= *(int*)(a1+2);
    int ItemDur		= *(char*)(a1+22);
    int ItemNewOpt	= *(char*)(a1+23);

    if(a2 == 1)
    {
        if(gItemPrice.sellprice != 0)
            return (gItemPrice.GetPrice(ItemId,ItemLvl,ItemNewOpt,ItemDur,1));
        else
            return (gItemPrice.GetPrice(ItemId,ItemLvl,ItemNewOpt,ItemDur,1)/3);
    }
    else
    {
        return gItemPrice.GetPrice(ItemId,ItemLvl,ItemNewOpt,ItemDur,0);
    }
}

La Solución

Cómo Solucionar Loading al Agregar Alas CustomCómo Solucionar Loading al Agregar Alas Custom

Para resolver este problema, debes modificar el código de la siguiente manera:

ItemShopValue.cpp

int ItemPrice::SetPriceRecv(int a1,int a2)

int ItemPrice::SetPriceRecv(int a1,int a2)
{
    int ItemId = *(WORD*)a1;
    int ItemLvl = *(int*)(a1 + 2);
    int ItemDur = *(char*)(a1 + 22);
    int ItemNewOpt = *(char*)(a1 + 23);

    int maxindex = ItemId % 512;

    if (maxindex > 255)
    {
        ItemNewOpt = (ItemNewOpt + 128);
    }

    if (a2 == 1)
    {
        if (gItemPrice.sellprice != 0)
            return (gItemPrice.GetPrice(ItemId, ItemLvl, ItemNewOpt, ItemDur, 1));
        else
            return (gItemPrice.GetPrice(ItemId, ItemLvl, ItemNewOpt, ItemDur, 1) / 3);
    }
    else
    {
        return gItemPrice.GetPrice(ItemId, ItemLvl, ItemNewOpt, ItemDur, 0);
    }
}

Explicación del Código Modificado

  1. Cálculo del maxindex: Se calcula el índice máximo usando ItemId % 512. Esto permite determinar si el ítem es un ala personalizada.
  2. Ajuste de ItemNewOpt: Si el maxindex es mayor que 255, se ajusta ItemNewOpt sumando 128. Esto es crucial para que el sistema reconozca las nuevas propiedades del ítem.
  3. Lógica de Precio: La lógica para calcular el precio se mantiene igual, asegurando que los precios se obtengan correctamente tanto para la venta como para la compra.

Tambien puedes ver

Tutorial Source WideScreen 2024 By Dakosmu
Añadir Sockets Manualmente a Armas y Escudos en MuOnline

Conclusión

Implementando esta solución, podrás agregar alas personalizadas a tu servidor MuOnline sin problemas de carga. Asegúrate de probar el código y verificar que los precios se muestren correctamente en el juego. Si tienes alguna duda o necesitas más ayuda, no dudes en dejar un comentario.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *