Bueno voy a empezar a postear los arreglos para algunos bugs que estuve haciendo... voy a tratar de explicarlo lo más preciso que me sea posible para que todos puedan aplicar los mismos arreglos a los archivos originales y usarlos, de todas maneras pienso actualizar los archivos fuente y binarios del primer post así que sí ya descargaste anteriormente los archivos y no tenés ganas de prestar atención a los arreglos acá mensionados. simplemente volvé a descargar todos los archivos y reemplazá el contenido de tu rar anterior con el nuevo.
Bugs:
1. Custom Pets no se refrescan al cambiar de personaje o warpear. ARREGLADO
Este bug solo fué un producto de algunas equivocaciones mías en el código del GameServer, pero también del lado del cliente errores lógicos, paso a explicarlo mas detalladamente. primero del lado del servidor ustedes tienen algo como esto:
en el archivo: DSProtocol.cpp, en la función: //0042C8D0 - identical
void JGPGetCharList(BYTE *lpRecv) (LA QUE NO ESTÁ COMENTADA OSEA LA SEGUNDA).
tienen esto:
// Custom Wings
if( IS_NEWWINGS(TempInventory[EQUIPMENT_WING]+ITEMGET(12,0)) )
{
pCList.CharSet[5] |= eTYPE_WING;
pCList.CharSet[16] |= (BYTE)(TempInventory[EQUIPMENT_WING] - 236 + 1) << 5;
//pCList.CharSet[17] |= (BYTE)(TempInventory[EQUIPMENT_WING] - 236 + 1) << 1;
}
tienen que cambiarlo por esto:
// Custom Wings
if( IS_NEWWINGS(TempInventory[EQUIPMENT_WING]+ITEMGET(12,0)) )
{
pCList.CharSet[5] |= eTYPE_WING;
pCList.CharSet[17] |= (BYTE)(TempInventory[EQUIPMENT_WING] - 236 + 1) << 5;
}
luego para los pets ustedes tienen esto:
// Custom Pets
if( IS_NEWPETS(TempInventory[EQUIPMENT_HELPER]+ITEMGET(13,0)) )
{
pCList.CharSet[5] |= eTYPE_PETS;
pCList.CharSet[17] |= (BYTE)(TempInventory[EQUIPMENT_HELPER] - 150 + 1) << 1;
//pCList.CharSet[18] |= (BYTE)(TempInventory[EQUIPMENT_HELPER] - 150 + 1) << 1;
}
y tienen que cambiarlo por esto:
// Custom Pets
if( IS_NEWPETS(TempInventory[EQUIPMENT_HELPER]+ITEMGET(13,0)) )
{
pCList.CharSet[5] |= eTYPE_PETS;
pCList.CharSet[17] |= (BYTE)(TempInventory[EQUIPMENT_HELPER] - 150 + 1) << 1;
}
ahora bien esto solo sirve para arreglar el preview de pets y alas en el select character, para arreglarlos en el juego hay que cambiar la función: "void gObjMakePreviewCharSet" que se encuentra en: "User.cpp" también, dejandola de está manera (RECORDANDO CAMBIAR LA QUE NO ESTÁ COMENTADA OSEA LA SEGUNDA):
ustedes tienen esto:
if((lpObj->pInventory[EQUIPMENT_WING].m_Type >= ITEMGET(12,236)
&& lpObj->pInventory[EQUIPMENT_WING].m_Type <= ITEMGET(12,MAX_CUSTOM_ITEMS)))
{
lpObj->CharSet[5] |= eTYPE_WING;
lpObj->CharSet[16] |= ((lpObj->pInventory[EQUIPMENT_WING].m_Type - 236) + 1 << 5);
//lpObj->CharSet[17] |= ((lpObj->pInventory[EQUIPMENT_WING].m_Type - 236) + 1 << 1);
}
if((lpObj->pInventory[EQUIPMENT_HELPER].m_Type >= ITEMGET(13,150)
&& lpObj->pInventory[EQUIPMENT_HELPER].m_Type <= ITEMGET(13,MAX_CUSTOM_ITEMS)))
{
lpObj->CharSet[5] |= eTYPE_PETS;
lpObj->CharSet[17] |= ((lpObj->pInventory[EQUIPMENT_WING].m_Type - 236) + 1 << 1);
//lpObj->CharSet[18] |= ((lpObj->pInventory[EQUIPMENT_HELPER].m_Type - 150) + 1 << 1);
}
y tienen que tenerlo así:
if((lpObj->pInventory[EQUIPMENT_WING].m_Type >= ITEMGET(12,236)
&& lpObj->pInventory[EQUIPMENT_WING].m_Type <= ITEMGET(12,MAX_CUSTOM_ITEMS)))
{
lpObj->CharSet[5] |= eTYPE_WING;
lpObj->CharSet[17] |= ((lpObj->pInventory[EQUIPMENT_WING].m_Type - 236) + 1 << 5);
}
if((lpObj->pInventory[EQUIPMENT_HELPER].m_Type >= ITEMGET(13,150)
&& lpObj->pInventory[EQUIPMENT_HELPER].m_Type <= ITEMGET(13,MAX_CUSTOM_ITEMS)))
{
lpObj->CharSet[5] |= eTYPE_PETS;
lpObj->CharSet[17] |= ((lpObj->pInventory[EQUIPMENT_HELPER].m_Type - 150) + 1 << 1);
}
Bien! eso es todo del lado del servidor, pero aún nos falta corregir el lado del cliente! así que vamos a la: Engine.dll!
una vez en la fuente de la Engine.dll ustedes tienen que ir al archivo llamado: Preview.cpp
y buscar esta función: "void cPreview::ChangeCharacterExt(int Index,BYTE*CharSet,int UseStruct,int Mode)"
una vez que la encuentren dentro verán algo como esto:
BYTE CustomPets = CharSet[16]>>1;
BYTE CustomWings = CharSet[15]>>5;
tienen que cambiarlo por esto:
BYTE CustomWings = CharSet[16]>>5;
BYTE CustomPets = CharSet[16]>>1;
todo listo! con esas modificaciones tanto en el GameServer como en la Engine.dll tienen arreglados el bug 1 y tambien el bug 6.
"1. Custom Pets no se refrescan al cambiar de personaje o warpear." -> ARREGLADO
"6. Al equipar un pet rudolf y cambiar de personaje el personaje aparece volando sin alas." -> ARREGLADO
Créditos por los Fixes:
XV-TEAM