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:
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
Para resolver este problema, debes modificar el código de la siguiente manera:
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
- Cálculo del
maxindex
: Se calcula el índice máximo usandoItemId % 512
. Esto permite determinar si el ítem es un ala personalizada. - Ajuste de
ItemNewOpt
: Si elmaxindex
es mayor que 255, se ajustaItemNewOpt
sumando 128. Esto es crucial para que el sistema reconozca las nuevas propiedades del ítem. - 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.