[SOURCE 5.2 BASE] Sistema de Carga MoveReq.xml (Ventana de Teletransporte M - Source Mu - Mu Server Files
 

[SOURCE 5.2 BASE] Sistema de Carga MoveReq.xml (Ventana de Teletransporte M

Publicado por Dakosmu, Mar 15, 2026, 04:45 PM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Dakosmu

[SOURCE 5.2 BASE] Sistema de Carga MoveReq.xml (Ventana de Teletransporte M)


Si estás buscando modernizar tu Source 5.2 BASE, uno de los pasos esenciales es migrar los archivos de configuración a formatos más legibles. Este fix permite que tu servidor y cliente utilicen el archivo MoveReq.xml, facilitando la edición de los requisitos de teletransporte.



Ventajas de la carga mediante XML
El uso de archivos XML en lugar de los antiguos archivos de texto o binarios sin formato ofrece:
  • Facilidad de edición: No necesitas editores hexadecimales ni herramientas complejas para cambiar un nivel o costo de viaje.
  • Soporte VIP: Incluye de forma nativa la verificación de ReqVipLevel para mapas exclusivos.
  • Organización: Permite definir el orden alfabético y por dificultad de los mapas directamente en el archivo.
  • Multi-idioma: Sincronización total con las carpetas de localización del cliente.

Este sistema está diseñado para ser compatible con la estructura de archivos que utiliza IGC-Network, lo que te permite intercambiar configuraciones fácilmente.



Implementación del Código (CMoveCommandData.cpp)
A continuación, el código necesario para procesar el archivo MoveReq.xml. Asegúrate de tener integrada la librería pugixml en tu proyecto de Visual Studio.

bool CMoveCommandData::Create(const std::string& filename)
{
char filepatm[256];
// Ruta dinámica adaptada para Source 5.2 BASE
sprintf_s(filepatm, ".\Data\Local\%s\MoveReq.xml", g_strSelectedML.c_str());

pugi::xml_document file;
pugi::xml_parse_result res = file.load_file(filepatm);

if (res.status != pugi::status_ok)
{
return false;
}

pugi::xml_node WarpSettings = file.child("WarpSettings");

// Limpieza de lista para recarga de datos
m_listMoveInfoData.clear();

for (pugi::xml_node Warp = WarpSettings.child("Warp"); Warp; Warp = Warp.next_sibling())
{
MOVEINFODATA* pMoveInfoData = new MOVEINFODATA;

  // Nombres de mapas para sincronización Cliente/Servidor
  std::string ServerName = Warp.attribute("ServerName").as_string();
  strcpy_s(pMoveInfoData->_ReqInfo.szSubMapName, ServerName.c_str());

  std::string ClientName = Warp.attribute("ClientName").as_string();
  strcpy_s(pMoveInfoData->_ReqInfo.szMainMapName, ClientName.c_str());

  // Atributos de requisitos y Gate
  pMoveInfoData->_ReqInfo.index = Warp.attribute("Index").as_int();
  pMoveInfoData->_ReqInfo.iReqLevel = Warp.attribute("MinLevel").as_int();
  pMoveInfoData->_ReqInfo.m_iReqMaxLevel = Warp.attribute("MaxLevel").as_int();
  pMoveInfoData->_ReqInfo.iReqZen = Warp.attribute("ReqMoney").as_int();
  pMoveInfoData->_ReqInfo.iGateNum = Warp.attribute("GateNumber").as_int();
 
  // Atributos extendidos (VIP y Orden)
  pMoveInfoData->_ReqInfo.ReqVipLevel = Warp.attribute("ReqVipLevel").as_int();
  pMoveInfoData->_ReqInfo.DifficultyOrder = Warp.attribute("DifficultyOrder").as_int();
  pMoveInfoData->_ReqInfo.AlphabetOrder = Warp.attribute("AlphabetOrder").as_int();
  pMoveInfoData->_ReqInfo.MonsterClassification = Warp.attribute("MonsterClassification").as_int();
 
  m_listMoveInfoData.push_back(pMoveInfoData);
}
return true;
}

Este código es una preparación para el packaging final. Una vez que tus pruebas en XML sean exitosas, el archivo deberá ser convertido a MoveReq.bmd para la distribución pública del cliente.

¡Sistema configurado correctamente! Ahora la ventana de movimiento (tecla M) cargará toda la información directamente desde tu archivo XML.



¿Problemas con el teletransporte?
Si al hacer clic en un mapa el personaje no se mueve, verifica que el GateNumber en el XML coincida exactamente con los índices en tu Gate.txt del lado del servidor.

Regístrate para ver el enlace
Bon Dia

🡱 🡳
Real Time Web Analytics