INFORMACION
Citado @zedia93:
Estimados estoy intentando trabajar los Source de Louis up 13 estoy agregando Wings pero he notado que a partir del index 255 aunque las Wings se agregar puesto que el maximo de custom esta en 100 no hay problema.
El inconveniente surge a la hora de querer vender el item se vende normal pero por alguna razón el main no logra obtener el precio queda en loading...
Nota: todas las wings desde 1 - 255 se puede ver el precio normal de la 256 para arriba nada.
IMAGENES/VIDEOS
(https://i.ibb.co/Sw7504V/Screen-03-24-14-49-0002.jpg) (https://ibb.co/GQ3nk4C)
CODIGO CON EL ERROR
ItemShopValue.cpp:
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ón
Por 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.
//////////// SOLUCION////////////You require the following to view this post content:
- You need to log in to view this content, please
or
. - You require a post count of at least 5, you need another 5 posts.
COMO COLOCAR LOS CODIGOSPrimero Busca el Codigo "int ItemPrice::SetPriceRecv(int a1,int a2)" en ItemShopValue.cpp
(https://i.ibb.co/DKt81SM/0634d8f2-56ff-4af9-9321-ca99eacc529e.jpg)
Seleccionas todo el codigo
(https://i.ibb.co/3dbtLmD/d61171c7-87a9-412e-8205-eadd9551653d.jpg)
y Lo remplazas completo
(https://i.ibb.co/3frfvvL/e9686e26-0a92-42ec-8dac-8d7f8dfec7a3.jpg)
Codigo takumi
SetCompleteHook(0xE8, 0x00847713, &this->SetPriceRecv); //-- agregar este nuevo]
Otros temas que no tiene nada que ver con la guiaint ItemNewOpt = * (BYTE*)(a1 + 23);
cambair eso
y eliminar ese maxiindex>255
]
int ItemNewOpt = (* (BYTE*)(a1 + 23))&63;]
antes del renderizado:
EnableAlphaTest(TRUE);
glColor4f(1.0, 1.0, 1.0, 1.0);]
[spoiler](https://i.ibb.co/5cm9Y39/5bf1942a-acbf-4fa9-8a7e-747cf83967d4.jpg) (https://ibb.co/5cm9Y39)[/spoiler]
CREDITOS
takumi
zedia93