avatar_Matias-

Corregir Precio Custom Wings

Iniciado por Matias-, Abr 21, 2023, 10:25 AM

Tema anterior - Siguiente tema

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

Matias-

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



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);
      }
   }
}

CODIGO FUENTE

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.

Requisitos:
  • Debes dar las gracias a este tema para ver su contenido.


CREDITOS

zedia93

EvanMaster

IntelliSense: el identificador "IsMaxIndex" no está definido
  •  

EvanMaster

  •