Bueno para el que pueda interesar ya pude solventar este inconveniente que venia presentando. Como intuí la problemática radica en el main, el servidor funciona perfectamente explico un poco la solución o al menos la que le pude encontrar.
Nota: cabe acotar que para solventar dicha problemática necesariamente debemos trabajar el
source del Main de otra manera es imposible.
el origen del error radica en este archivo
ItemShopValue.cpp específicamente en la función SetPriceRecv la cual es la encargada de recibir los datos del cliente.
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);
}
}
Al recibir el dato de las opciones exe del cliente en la varibale
ItemNewOpt si el indice que declaramos en el archivo ítem del server y cliente sobre pasa los 255 automáticamente el valor que devuelve ( *(char*)(a1+23) ) es negativo ( si el item no tiene opciones quedaría en -128) esto posteriormente genera el error al obtener el precio del item en la función
ItemPrice::GetPrice al comprar el listado de items y precios que envió el servior con el item que envia el cliente no encuentra coincidencias entre el
this->m_ItemPrice[n].Newopt(SE CARGO DEL SERVIDOR) y el
newopt(que envía el cliente).
int ItemPrice::GetPrice(int index,int level,int newopt,int dur,int buysell)
{
...
if (this->m_ItemPrice[n].ItemIndex == index && this->m_ItemPrice[n].Level == level && this->m_ItemPrice[n].Newopt == newopt && this->m_ItemPrice[n].BuySell == buysell)
}
De aquí que se crea un Bucle infinito en la funcion
ItemPrice::ShowSellPrice buscando una coincidencia con el item con la opcion en negativo.
void ItemPrice::ShowSellPrice(DWORD a1, const char *a2, char *Price)
{
if(strcmp("0",Price) == 0)
{
if (gItemPrice.load == 1)
{
pSetItemTextLine(a1,"Loading ..");
gItemPrice.load = 2;
}
else if(gItemPrice.load == 2)
{
pSetItemTextLine(a1,"Loading ...");
gItemPrice.load = 3;
}
else if(gItemPrice.load == 3)
{
pSetItemTextLine(a1,"Loading ....");
gItemPrice.load = 4;
}
else if(gItemPrice.load == 4)
{
pSetItemTextLine(a1,"Loading .....");
gItemPrice.load = 0;
}
else
{
pSetItemTextLine(a1,"Loading .");
gItemPrice.load = 1;
}
}
else
{
if (gItemPrice.type == 1 && gItemPrice.sellprice > 0)
{
pSetItemTextLine(a1,gCustomMessage.GetMessage(55),Price);
}
else if (gItemPrice.type == 2 && gItemPrice.sellprice > 0)
{
pSetItemTextLine(a1,gCustomMessage.GetMessage(56),Price);
}
else if (gItemPrice.type == 3 && gItemPrice.sellprice > 0)
{
pSetItemTextLine(a1,gCustomMessage.GetMessage(57),Price);
}
else
{
pSetItemTextLine(a1,gCustomMessage.GetMessage(49),Price);
}
}
}
EN CONCLUSIÓN pude encontrar 2 soluciones la primera y más sencilla sería eliminar la comparación
this->m_ItemPrice[n].Newopt == newopt en la función
ItemPrice::GetPrice y eso automáticamente elimina el problema.
Sin embargo no tengo idea que problema pueda ocasionar el remover esa comparaciónPor tanto ese me lleva a la segunda opción que es la que yo tome y fue generar una función que detecte si el indice del ítem es mayor a 255 y si es así en la función
ItemPrice::SetPriceRecv sumarle 128 a la varibale
ItemNewOpt y eso compensaría el desbalance que se genera si el index es mayor a 255
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(IsMaxIndex(ItemId)){
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);
}
}
Hasta ahora me ha funcionado... si alguien conoce alguna otra manera le rogaría me la hiciera saber... estoy aprendiendo a trabajar sources cualquier comentario positivo sera bien recibido.