Autor Topic: Fix bug zen version 97d  (Visto 710 veces)

0 Miembros and 1 Guest are viewing this topic.

Online caron22 on: May 07, 2018, 04:51:06 PM

  • C++ Coder
  • *
  • Rank: Puto amo
  • Posts: 504
  • Gracias recibida: 839
Bueno les traigo otro fix que realmente jode un poco, puede que tengan alguna otra forma algunos pero yo trato de armar mi propias funcionesm no porque sea groso sino mas bien que me entiendo mejor y creo que es la manera mas facil de hacerlo.




Declaraciones:


Creditos: Caron22 <- (Para el copy/paste)
Gracias a @日メリーのRu por prestar pc para esta config
« Ultima edicion: July 23, 2018, 05:46:03 PM by caron22 »
El halago en exceso, debilita y, en su justa medida, motiva
https://www.youtube.com/channel/UCN14tZ3cPSFaseVo8V6SL2g?view_as=subscriber

Gracias:


Offline SbaGomez #1 on: May 13, 2018, 04:08:19 PM

  • Diseñador
  • *
  • Rank: Dedicado
  • Posts: 35
  • Gracias recibida: 80
que bug es el del zen el de cuando tradeas o cual???

Online caron22 #2 on: May 14, 2018, 01:01:22 PM

  • C++ Coder
  • *
  • Rank: Puto amo
  • Posts: 504
  • Gracias recibida: 839
que bug es el del zen el de cuando tradeas o cual???
Este es el fix al vender articulos en el shop.
Falta:
Zen drop.
Zen eventos blood etc.
Zen Trade.
Zen Baul.
El halago en exceso, debilita y, en su justa medida, motiva
https://www.youtube.com/channel/UCN14tZ3cPSFaseVo8V6SL2g?view_as=subscriber

Offline Cloud #3 on: May 14, 2018, 03:17:35 PM

  • Moderador
  • *
  • *
  • Rank: Puto amo
  • Posts: 1491
  • Gracias recibida: 7754
que bug es el del zen el de cuando tradeas o cual???
Este es el fix al vender articulos en el shop.
Falta:
Zen drop.
Zen eventos blood etc.
Zen Trade.
Zen Baul.
se aplica a los 97+99 caron?

Online caron22 #4 on: May 14, 2018, 03:23:39 PM

  • C++ Coder
  • *
  • Rank: Puto amo
  • Posts: 504
  • Gracias recibida: 839
que bug es el del zen el de cuando tradeas o cual???
Este es el fix al vender articulos en el shop.
Falta:
Zen drop.
Zen eventos blood etc.
Zen Trade.
Zen Baul.
se aplica a los 97+99 caron?
Mmm en realidad es el mismo gs, podria decirse que funciona para el gameserver version  96.40
El halago en exceso, debilita y, en su justa medida, motiva
https://www.youtube.com/channel/UCN14tZ3cPSFaseVo8V6SL2g?view_as=subscriber

Gracias:


Offline 日メリーのRu #5 on: May 14, 2018, 06:51:35 PM

  • C++ Coder
  • *
  • Rank: Usuario activo
  • Posts: 64
  • Gracias recibida: 168
El del trade aun se me hace complicado, solo detecta el zen del inventario de la persona, es decir: tengo 1 pj tiene 2 billones que es la maxima cantidad de zen, y otro solo tiene ponte tu 1000 de zen, entonces si el 1 pj de 2 billones le envia zen al otro, este no lo recibe, ya que dice que tu, osea el 1 pj tiene maximo de zen, lo que deberia ser de la siguiente manera, si al personaje que se le esta enviado zen tiene mas de 2 billones este no lo puede recibir, y es lo contrario solo chequea el zen del inventario del personaje que esta enviando mas no el que recibe, por lo que si el 2 pj te envia x cantidad zen del el que recibe, lo sigue recibiendo por lo que sobrepasa los 2 billones, en fin... algo complicado de hacer...

De todas maneras aqui dejare el codigo limpio, solo para la venta de items:

Hook:
Library.MakeHook((DWORD)&CGRequestRecv.CGItemSellRequest,0x00401C35);

Funcion:
Code: [Select]
BOOL CRequestRecv::gObjCheckMaxZen(int aIndex, int nAddZen)
{
LPOBJ lpObj = &gObj[aIndex];

if (!OBJMAX_RANGE(aIndex))
{
return FALSE;
}

__int64 _Money = 0;
_Money = (__int64)lpObj->Money + (__int64)nAddZen;

if ( _Money > (__int64)MAX_ZEN )
{
//GCServerMsgStringSend("Haz alcanzado el limite de zen", aIndex, 1);
GCServerMsgStringSend(lMsg.Get(MSGGET(4, 226)), aIndex, 1);
return FALSE;
}

return TRUE;
}

void CRequestRecv::CGItemSellRequest(PMSG_SELLREQUEST * lpMsg, int aIndex)
{
PMSG_SELLRESULT pResult;
LPOBJ lpObj = &gObj[aIndex];

Packets.PHeadSetB((LPBYTE)&pResult, 0x33, sizeof(pResult));
pResult.Result = false;
pResult.Money = 0;

int iAddZen = 0;

iAddZen = lpObj->pInventory[lpMsg->Pos].m_SellMoney;

if (CGRequestRecv.gObjCheckMaxZen(aIndex, iAddZen) == FALSE)
{
DataSend(aIndex, (LPBYTE)&pResult, pResult.h.size);
return;
}
// --
CGItemSellRequestRecv(lpMsg,aIndex);
}

Offset:
#define CGItemSellRequestRecv ((void(*)(PMSG_SELLREQUEST * lpMsg, int aIndex)) 0x0041C610)
« Ultima edicion: May 14, 2018, 08:15:41 PM by ZabiinoOo »

Gracias:


Offline YolaxD #6 on: May 14, 2018, 08:08:58 PM

  • C++ Coder
  • *
  • *
  • Rank: Liga mayor
  • Posts: 189
  • Gracias recibida: 1208
El del trade aun se me hace complicado, solo detecta el zen del inventario de la persona, es decir: tengo 1 pj tiene 2 billones que es la maxima cantidad de zen, y otro solo tiene ponte tu 1000 de zen, entonces si el 1 pj de 2 billones le envia zen al otro, este no lo recibe, ya que dice que tu, osea el 1 pj tiene maximo de zen, lo que deberia ser de la siguiente manera, si al personaje que se le esta enviado zen tiene mas de 2 billones este no lo puede recibir, y es lo contrario solo chequea el zen del inventario del personaje que esta enviando mas no el que recibe, por lo que si el 2 pj te envia x cantidad zen del el que recibe, lo sigue recibiendo por lo que sobrepasa los 2 billones, en fin... algo complicado de hacer...

De todas maneras aqui dejare el codigo limpio, solo para la venta de items:

Hook:
Library.MakeHook((DWORD)&CGRequestRecv.CGItemSellRequest,0x00401C35);

Funcion:
BOOL CRequestRecv::gObjCheckMaxZen(int aIndex, int nAddZen)
{
   LPOBJ lpObj = &gObj[aIndex];

   if (!OBJMAX_RANGE(aIndex))
   {
      return FALSE;
   }
   
   __int64 _Money = 0;
   _Money = (__int64)lpObj->Money + (__int64)nAddZen;

   if ( _Money > (__int64)MAX_ZEN )
   {
      //GCServerMsgStringSend("Haz alcanzado el limite de zen", aIndex, 1);
      GCServerMsgStringSend(lMsg.Get(MSGGET(4, 226)), aIndex, 1);
      return FALSE;
   }

   return TRUE;
}

void CRequestRecv::CGItemSellRequest(PMSG_SELLREQUEST * lpMsg, int aIndex)
{
   PMSG_SELLRESULT pResult;
   LPOBJ lpObj = &gObj[aIndex];
   
   Packets.PHeadSetB((LPBYTE)&pResult, 0x33, sizeof(pResult));
   pResult.Result = false;
   pResult.Money = 0;

   int iAddZen = 0;

   iAddZen = lpObj->pInventory[lpMsg->Pos].m_SellMoney;

   if (CGRequestRecv.gObjCheckMaxZen(aIndex, iAddZen) == FALSE)
   {
      DataSend(aIndex, (LPBYTE)&pResult, pResult.h.size);
      return;
   }
   // --
   CGItemSellRequestRecv(lpMsg,aIndex);
}

Offset:
#define CGItemSellRequestRecv          ((void(*)(PMSG_SELLREQUEST * lpMsg, int aIndex))                        0x0041C610)

hola te dejo algunas recomendaciones respecto a tu codigo

Code: [Select]

BOOL CRequestRecv::gObjCheckMaxZen(int aIndex, int nAddZen) // no es nesesario utilizar BOOL que su typedef es un int, por lo que deberias siempre si tu funcion va a retornar true o false utilizar bool
{
LPOBJ lpObj = &gObj[aIndex]; // no es muy recomendable pasar la informacion del obj sin antes no haber verificado el rango del index por lo que te recomiendo siempre meterlo debajo de la comprobacion

if (!OBJMAX_RANGE(aIndex))
{
return FALSE;
}

__int64 _Money = 0; // aqui inicializas con 0 sin un objetivo haces mas largo el codigo de lo que deberia ser si la variable money siempre va a utilizar la suma de esos dos valores deberias pasarle directo el valor y ya, ya que cuando el codigo se  este ejecutado este va a tener que hacer mas operaciones y va a tardar mas en terminar :)
_Money = (__int64)lpObj->Money + (__int64)nAddZen;

if (_Money > (__int64)MAX_ZEN)
{
//GCServerMsgStringSend("Haz alcanzado el limite de zen", aIndex, 1);
GCServerMsgStringSend(lMsg.Get(MSGGET(4, 226)), aIndex, 1);
return FALSE;
}

return TRUE;
}

void CRequestRecv::CGItemSellRequest(PMSG_SELLREQUEST * lpMsg, int aIndex)
{
PMSG_SELLRESULT pResult;
LPOBJ lpObj = &gObj[aIndex]; // nunca se verifica el rango del aindex?? si por alguna casualidad e la vida la memoria falla por algun motivo y justo se esta ejecutando esto te va a volar todo por los cielos :D

Packets.PHeadSetB((LPBYTE)&pResult, 0x33, sizeof(pResult));
pResult.Result = false;
pResult.Money = 0;

int iAddZen = 0; // mismo que lo de arriba al dope inicar la variable en 0 y mas al dope esta la variable si solo se utiliza para pasar como argumento, deberias pasar el valor directo desde el lpObj

iAddZen = lpObj->pInventory[lpMsg->Pos].m_SellMoney; // importantisimo!!!! hacer un chequeo del slot resivido, cualquier navo te hace crashear el gs si te manda un value que exeda los rangos del puntero,

if (CGRequestRecv.gObjCheckMaxZen(aIndex, iAddZen) == FALSE)
{
DataSend(aIndex, (LPBYTE)&pResult, pResult.h.size);
return;
}
// --
CGItemSellRequestRecv(lpMsg, aIndex);
}

Gracias:


Offline 日メリーのRu #7 on: May 14, 2018, 08:41:52 PM

  • C++ Coder
  • *
  • Rank: Usuario activo
  • Posts: 64
  • Gracias recibida: 168
El del trade aun se me hace complicado, solo detecta el zen del inventario de la persona, es decir: tengo 1 pj tiene 2 billones que es la maxima cantidad de zen, y otro solo tiene ponte tu 1000 de zen, entonces si el 1 pj de 2 billones le envia zen al otro, este no lo recibe, ya que dice que tu, osea el 1 pj tiene maximo de zen, lo que deberia ser de la siguiente manera, si al personaje que se le esta enviado zen tiene mas de 2 billones este no lo puede recibir, y es lo contrario solo chequea el zen del inventario del personaje que esta enviando mas no el que recibe, por lo que si el 2 pj te envia x cantidad zen del el que recibe, lo sigue recibiendo por lo que sobrepasa los 2 billones, en fin... algo complicado de hacer...

De todas maneras aqui dejare el codigo limpio, solo para la venta de items:

Hook:
Library.MakeHook((DWORD)&CGRequestRecv.CGItemSellRequest,0x00401C35);

Funcion:
BOOL CRequestRecv::gObjCheckMaxZen(int aIndex, int nAddZen)
{
   LPOBJ lpObj = &gObj[aIndex];

   if (!OBJMAX_RANGE(aIndex))
   {
      return FALSE;
   }
   
   __int64 _Money = 0;
   _Money = (__int64)lpObj->Money + (__int64)nAddZen;

   if ( _Money > (__int64)MAX_ZEN )
   {
      //GCServerMsgStringSend("Haz alcanzado el limite de zen", aIndex, 1);
      GCServerMsgStringSend(lMsg.Get(MSGGET(4, 226)), aIndex, 1);
      return FALSE;
   }

   return TRUE;
}

void CRequestRecv::CGItemSellRequest(PMSG_SELLREQUEST * lpMsg, int aIndex)
{
   PMSG_SELLRESULT pResult;
   LPOBJ lpObj = &gObj[aIndex];
   
   Packets.PHeadSetB((LPBYTE)&pResult, 0x33, sizeof(pResult));
   pResult.Result = false;
   pResult.Money = 0;

   int iAddZen = 0;

   iAddZen = lpObj->pInventory[lpMsg->Pos].m_SellMoney;

   if (CGRequestRecv.gObjCheckMaxZen(aIndex, iAddZen) == FALSE)
   {
      DataSend(aIndex, (LPBYTE)&pResult, pResult.h.size);
      return;
   }
   // --
   CGItemSellRequestRecv(lpMsg,aIndex);
}

Offset:
#define CGItemSellRequestRecv          ((void(*)(PMSG_SELLREQUEST * lpMsg, int aIndex))                        0x0041C610)

hola te dejo algunas recomendaciones respecto a tu codigo

Code: [Select]

BOOL CRequestRecv::gObjCheckMaxZen(int aIndex, int nAddZen) // no es nesesario utilizar BOOL que su typedef es un int, por lo que deberias siempre si tu funcion va a retornar true o false utilizar bool
{
LPOBJ lpObj = &gObj[aIndex]; // no es muy recomendable pasar la informacion del obj sin antes no haber verificado el rango del index por lo que te recomiendo siempre meterlo debajo de la comprobacion

if (!OBJMAX_RANGE(aIndex))
{
return FALSE;
}

__int64 _Money = 0; // aqui inicializas con 0 sin un objetivo haces mas largo el codigo de lo que deberia ser si la variable money siempre va a utilizar la suma de esos dos valores deberias pasarle directo el valor y ya, ya que cuando el codigo se  este ejecutado este va a tener que hacer mas operaciones y va a tardar mas en terminar :)
_Money = (__int64)lpObj->Money + (__int64)nAddZen;

if (_Money > (__int64)MAX_ZEN)
{
//GCServerMsgStringSend("Haz alcanzado el limite de zen", aIndex, 1);
GCServerMsgStringSend(lMsg.Get(MSGGET(4, 226)), aIndex, 1);
return FALSE;
}

return TRUE;
}

void CRequestRecv::CGItemSellRequest(PMSG_SELLREQUEST * lpMsg, int aIndex)
{
PMSG_SELLRESULT pResult;
LPOBJ lpObj = &gObj[aIndex]; // nunca se verifica el rango del aindex?? si por alguna casualidad e la vida la memoria falla por algun motivo y justo se esta ejecutando esto te va a volar todo por los cielos :D

Packets.PHeadSetB((LPBYTE)&pResult, 0x33, sizeof(pResult));
pResult.Result = false;
pResult.Money = 0;

int iAddZen = 0; // mismo que lo de arriba al dope inicar la variable en 0 y mas al dope esta la variable si solo se utiliza para pasar como argumento, deberias pasar el valor directo desde el lpObj

iAddZen = lpObj->pInventory[lpMsg->Pos].m_SellMoney; // importantisimo!!!! hacer un chequeo del slot resivido, cualquier navo te hace crashear el gs si te manda un value que exeda los rangos del puntero,

if (CGRequestRecv.gObjCheckMaxZen(aIndex, iAddZen) == FALSE)
{
DataSend(aIndex, (LPBYTE)&pResult, pResult.h.size);
return;
}
// --
CGItemSellRequestRecv(lpMsg, aIndex);
}


Gracias por tu consejo lo tomare en cuenta, soy un novato en esto de lenguaje en C++ incluso en esto del tema de MU Online, aun no se para que me sirven algunas cosas porque me toca aprender por mi poropia cuenta ya que no hay guias para profundizar en el tema.

Gracias:


Offline YolaxD #8 on: May 14, 2018, 08:45:12 PM

  • C++ Coder
  • *
  • *
  • Rank: Liga mayor
  • Posts: 189
  • Gracias recibida: 1208
El del trade aun se me hace complicado, solo detecta el zen del inventario de la persona, es decir: tengo 1 pj tiene 2 billones que es la maxima cantidad de zen, y otro solo tiene ponte tu 1000 de zen, entonces si el 1 pj de 2 billones le envia zen al otro, este no lo recibe, ya que dice que tu, osea el 1 pj tiene maximo de zen, lo que deberia ser de la siguiente manera, si al personaje que se le esta enviado zen tiene mas de 2 billones este no lo puede recibir, y es lo contrario solo chequea el zen del inventario del personaje que esta enviando mas no el que recibe, por lo que si el 2 pj te envia x cantidad zen del el que recibe, lo sigue recibiendo por lo que sobrepasa los 2 billones, en fin... algo complicado de hacer...

De todas maneras aqui dejare el codigo limpio, solo para la venta de items:

Hook:
Library.MakeHook((DWORD)&CGRequestRecv.CGItemSellRequest,0x00401C35);

Funcion:
BOOL CRequestRecv::gObjCheckMaxZen(int aIndex, int nAddZen)
{
   LPOBJ lpObj = &gObj[aIndex];

   if (!OBJMAX_RANGE(aIndex))
   {
      return FALSE;
   }
   
   __int64 _Money = 0;
   _Money = (__int64)lpObj->Money + (__int64)nAddZen;

   if ( _Money > (__int64)MAX_ZEN )
   {
      //GCServerMsgStringSend("Haz alcanzado el limite de zen", aIndex, 1);
      GCServerMsgStringSend(lMsg.Get(MSGGET(4, 226)), aIndex, 1);
      return FALSE;
   }

   return TRUE;
}

void CRequestRecv::CGItemSellRequest(PMSG_SELLREQUEST * lpMsg, int aIndex)
{
   PMSG_SELLRESULT pResult;
   LPOBJ lpObj = &gObj[aIndex];
   
   Packets.PHeadSetB((LPBYTE)&pResult, 0x33, sizeof(pResult));
   pResult.Result = false;
   pResult.Money = 0;

   int iAddZen = 0;

   iAddZen = lpObj->pInventory[lpMsg->Pos].m_SellMoney;

   if (CGRequestRecv.gObjCheckMaxZen(aIndex, iAddZen) == FALSE)
   {
      DataSend(aIndex, (LPBYTE)&pResult, pResult.h.size);
      return;
   }
   // --
   CGItemSellRequestRecv(lpMsg,aIndex);
}

Offset:
#define CGItemSellRequestRecv          ((void(*)(PMSG_SELLREQUEST * lpMsg, int aIndex))                        0x0041C610)

hola te dejo algunas recomendaciones respecto a tu codigo

Code: [Select]

BOOL CRequestRecv::gObjCheckMaxZen(int aIndex, int nAddZen) // no es nesesario utilizar BOOL que su typedef es un int, por lo que deberias siempre si tu funcion va a retornar true o false utilizar bool
{
LPOBJ lpObj = &gObj[aIndex]; // no es muy recomendable pasar la informacion del obj sin antes no haber verificado el rango del index por lo que te recomiendo siempre meterlo debajo de la comprobacion

if (!OBJMAX_RANGE(aIndex))
{
return FALSE;
}

__int64 _Money = 0; // aqui inicializas con 0 sin un objetivo haces mas largo el codigo de lo que deberia ser si la variable money siempre va a utilizar la suma de esos dos valores deberias pasarle directo el valor y ya, ya que cuando el codigo se  este ejecutado este va a tener que hacer mas operaciones y va a tardar mas en terminar :)
_Money = (__int64)lpObj->Money + (__int64)nAddZen;

if (_Money > (__int64)MAX_ZEN)
{
//GCServerMsgStringSend("Haz alcanzado el limite de zen", aIndex, 1);
GCServerMsgStringSend(lMsg.Get(MSGGET(4, 226)), aIndex, 1);
return FALSE;
}

return TRUE;
}

void CRequestRecv::CGItemSellRequest(PMSG_SELLREQUEST * lpMsg, int aIndex)
{
PMSG_SELLRESULT pResult;
LPOBJ lpObj = &gObj[aIndex]; // nunca se verifica el rango del aindex?? si por alguna casualidad e la vida la memoria falla por algun motivo y justo se esta ejecutando esto te va a volar todo por los cielos :D

Packets.PHeadSetB((LPBYTE)&pResult, 0x33, sizeof(pResult));
pResult.Result = false;
pResult.Money = 0;

int iAddZen = 0; // mismo que lo de arriba al dope inicar la variable en 0 y mas al dope esta la variable si solo se utiliza para pasar como argumento, deberias pasar el valor directo desde el lpObj

iAddZen = lpObj->pInventory[lpMsg->Pos].m_SellMoney; // importantisimo!!!! hacer un chequeo del slot resivido, cualquier navo te hace crashear el gs si te manda un value que exeda los rangos del puntero,

if (CGRequestRecv.gObjCheckMaxZen(aIndex, iAddZen) == FALSE)
{
DataSend(aIndex, (LPBYTE)&pResult, pResult.h.size);
return;
}
// --
CGItemSellRequestRecv(lpMsg, aIndex);
}


Gracias por tu consejo lo tomare en cuenta, soy un novato en esto de lenguaje en C++ incluso en esto del tema de MU Online, aun no se para que me sirven algunas cosas porque me toca aprender por mi poropia cuenta ya que no hay guias para profundizar en el tema.

no ay de que, si le echas ganas sientete libre de pregutarme cualquier duda que tengas :)

Online caron22 #9 on: May 14, 2018, 09:24:55 PM

  • C++ Coder
  • *
  • Rank: Puto amo
  • Posts: 504
  • Gracias recibida: 839
Creo que estoy de acuerdo en un 99%, siempre hay que ir mejorando el codigo, las variables se tendrian que crear una clase pra volver a utilizar el codigo y sacar esos return que son una mala cosumbre.
 if (!OBJMAX_RANGE(aIndex))
       {
          return FALSE;
       }
Ese false en el int que le recomendas me hace ruido xD
 
« Ultima edicion: May 14, 2018, 09:27:09 PM by caron22 »
El halago en exceso, debilita y, en su justa medida, motiva
https://www.youtube.com/channel/UCN14tZ3cPSFaseVo8V6SL2g?view_as=subscriber

Offline webmonkey #10 on: May 15, 2018, 08:17:54 PM

  • *
  • Rank: Principiante
  • Posts: 16
  • Gracias recibida: 14
Creo que estoy de acuerdo en un 99%, siempre hay que ir mejorando el codigo, las variables se tendrian que crear una clase pra volver a utilizar el codigo y sacar esos return que son una mala cosumbre.
 if (!OBJMAX_RANGE(aIndex))
       {
          return FALSE;
       }
Ese false en el int que le recomendas me hace ruido xD

ese FALSE, no false, ya vi varios casos donde hacen

Code: [Select]
#ifndef FALSE
#define FALSE               0
#endif

ahora si es buena práctica o no ya es otro cantar. También tiene razón YolaxD que BOOL = int.
« Ultima edicion: May 15, 2018, 08:22:33 PM by webmonkey »

Offline YolaxD #11 on: May 15, 2018, 09:07:53 PM

  • C++ Coder
  • *
  • *
  • Rank: Liga mayor
  • Posts: 189
  • Gracias recibida: 1208
Creo que estoy de acuerdo en un 99%, siempre hay que ir mejorando el codigo, las variables se tendrian que crear una clase pra volver a utilizar el codigo y sacar esos return que son una mala cosumbre.
 if (!OBJMAX_RANGE(aIndex))
       {
          return FALSE;
       }
Ese false en el int que le recomendas me hace ruido xD

No entendí, en ningún lugar le recomiendo eso haha

Offline YolaxD #12 on: May 15, 2018, 09:12:16 PM

  • C++ Coder
  • *
  • *
  • Rank: Liga mayor
  • Posts: 189
  • Gracias recibida: 1208
Creo que estoy de acuerdo en un 99%, siempre hay que ir mejorando el codigo, las variables se tendrian que crear una clase pra volver a utilizar el codigo y sacar esos return que son una mala cosumbre.
 if (!OBJMAX_RANGE(aIndex))
       {
          return FALSE;
       }
Ese false en el int que le recomendas me hace ruido xD

ese FALSE, no false, ya vi varios casos donde hacen

Code: [Select]
#ifndef FALSE
#define FALSE               0
#endif

ahora si es buena práctica o no ya es otro cantar. También tiene razón YolaxD que BOOL = int.

No sé cómo ven utilizar esos typedef realmente nunca le vin ni le encontré una utilidad es cosa de Mandinga eso jajja

Online caron22 #13 on: May 21, 2018, 01:00:45 PM

  • C++ Coder
  • *
  • Rank: Puto amo
  • Posts: 504
  • Gracias recibida: 839
Creo que estoy de acuerdo en un 99%, siempre hay que ir mejorando el codigo, las variables se tendrian que crear una clase pra volver a utilizar el codigo y sacar esos return que son una mala cosumbre.
 if (!OBJMAX_RANGE(aIndex))
       {
          return FALSE;
       }
Ese false en el int que le recomendas me hace ruido xD

ese FALSE, no false, ya vi varios casos donde hacen

Code: [Select]
#ifndef FALSE
#define FALSE               0
#endif

ahora si es buena práctica o no ya es otro cantar. También tiene razón YolaxD que BOOL = int.

No sé cómo ven utilizar esos typedef realmente nunca le vin ni le encontré una utilidad es cosa de Mandinga eso jajja
Tengo entendido que eso es para declarar variables no globales que inicien y terminen en esa porsion de codigo.
Yo personalmente no lo uso pero vi muchos que lo usan.
El halago en exceso, debilita y, en su justa medida, motiva
https://www.youtube.com/channel/UCN14tZ3cPSFaseVo8V6SL2g?view_as=subscriber

Gracias:


Online caron22 #14 on: May 21, 2018, 01:04:18 PM

  • C++ Coder
  • *
  • Rank: Puto amo
  • Posts: 504
  • Gracias recibida: 839
Creo que estoy de acuerdo en un 99%, siempre hay que ir mejorando el codigo, las variables se tendrian que crear una clase pra volver a utilizar el codigo y sacar esos return que son una mala cosumbre.
 if (!OBJMAX_RANGE(aIndex))
       {
          return FALSE;
       }
Ese false en el int que le recomendas me hace ruido xD

ese FALSE, no false, ya vi varios casos donde hacen

Code: [Select]
#ifndef FALSE
#define FALSE               0
#endif

ahora si es buena práctica o no ya es otro cantar. También tiene razón YolaxD que BOOL = int.
Perdon pero BOOL no es lo mismo que un int.
Creo que Yola habla de otra cosa che, igual comento esto para que te quede claro un concepto y luego no te den los numeros al programar. Abrazo
El halago en exceso, debilita y, en su justa medida, motiva
https://www.youtube.com/channel/UCN14tZ3cPSFaseVo8V6SL2g?view_as=subscriber

Offline webmonkey #15 on: May 22, 2018, 03:30:17 AM

  • *
  • Rank: Principiante
  • Posts: 16
  • Gracias recibida: 14
Creo que estoy de acuerdo en un 99%, siempre hay que ir mejorando el codigo, las variables se tendrian que crear una clase pra volver a utilizar el codigo y sacar esos return que son una mala cosumbre.
 if (!OBJMAX_RANGE(aIndex))
       {
          return FALSE;
       }
Ese false en el int que le recomendas me hace ruido xD

ese FALSE, no false, ya vi varios casos donde hacen

Code: [Select]
#ifndef FALSE
#define FALSE               0
#endif

ahora si es buena práctica o no ya es otro cantar. También tiene razón YolaxD que BOOL = int.
Perdon pero BOOL no es lo mismo que un int.
Creo que Yola habla de otra cosa che, igual comento esto para que te quede claro un concepto y luego no te den los numeros al programar. Abrazo

typedef int BOOL; windef.h

bool != BOOL. uno es un tipo de datos de c++ y el otro un typedef de windows. al igual que false != FALSE. las mayúsculas importan.


Tengo entendido que eso es para declarar variables no globales que inicien y terminen en esa porsion de codigo.
Yo personalmente no lo uso pero vi muchos que lo usan.

Qué? es una directiva de compilador.  le dice que donde vea FALSE ponga 0.
« Ultima edicion: May 22, 2018, 03:41:45 AM by webmonkey »

Online caron22 #16 on: May 22, 2018, 11:11:16 AM

  • C++ Coder
  • *
  • Rank: Puto amo
  • Posts: 504
  • Gracias recibida: 839
Creo que estoy de acuerdo en un 99%, siempre hay que ir mejorando el codigo, las variables se tendrian que crear una clase pra volver a utilizar el codigo y sacar esos return que son una mala cosumbre.
 if (!OBJMAX_RANGE(aIndex))
       {
          return FALSE;
       }
Ese false en el int que le recomendas me hace ruido xD

ese FALSE, no false, ya vi varios casos donde hacen

Code: [Select]
#ifndef FALSE
#define FALSE               0
#endif

ahora si es buena práctica o no ya es otro cantar. También tiene razón YolaxD que BOOL = int.
Perdon pero BOOL no es lo mismo que un int.
Creo que Yola habla de otra cosa che, igual comento esto para que te quede claro un concepto y luego no te den los numeros al programar. Abrazo

typedef int BOOL; windef.h

bool != BOOL. uno es un tipo de datos de c++ y el otro un typedef de windows. al igual que false != FALSE. las mayúsculas importan.


Tengo entendido que eso es para declarar variables no globales que inicien y terminen en esa porsion de codigo.
Yo personalmente no lo uso pero vi muchos que lo usan.

Qué? es una directiva de compilador.  le dice que donde vea FALSE ponga 0.
Como estas? Como comente no estoy seguro del uso que se le da, pero excluye codigo a nivel compilador por lo que veo, yo generalmente uso #if defined(_Gameserver) o solo el #if.
Con respecto al BOOL estamos de acuerdo. Mi error fue escribierlo en mayuscula cosas que pasan.
El halago en exceso, debilita y, en su justa medida, motiva
https://www.youtube.com/channel/UCN14tZ3cPSFaseVo8V6SL2g?view_as=subscriber

Offline webmonkey #17 on: May 22, 2018, 11:53:29 AM

  • *
  • Rank: Principiante
  • Posts: 16
  • Gracias recibida: 14

Online caron22 #18 on: May 22, 2018, 12:33:54 PM

  • C++ Coder
  • *
  • Rank: Puto amo
  • Posts: 504
  • Gracias recibida: 839
te estás confundiendo una directiva con otra.
https://docs.microsoft.com/es-es/cpp/preprocessor/preprocessor-directives
La verdad que no me las confundo, las conosco bien a las que uso. Seria bueno que inicies un tema en otra seccion para hablar de las diferencias de estas directivas, sinceramente no le veo mucha mas tela, pero si tenes tiempo y ganas. Abrazo
« Ultima edicion: May 22, 2018, 12:38:56 PM by caron22 »
El halago en exceso, debilita y, en su justa medida, motiva
https://www.youtube.com/channel/UCN14tZ3cPSFaseVo8V6SL2g?view_as=subscriber

 

Related Topics

  Subject / Started by Replies Last post
7 Replies
2078 Views
Last post June 21, 2018, 06:27:31 PM
by Cloud
33 Replies
8093 Views
Last post November 07, 2018, 04:12:47 AM
by Jutes
1 Replies
235 Views
Last post February 16, 2018, 03:18:46 AM
by Freddyy
18 Replies
1209 Views
Last post November 10, 2018, 09:25:05 PM
by hammerpe
39 Replies
1242 Views
Last post November 11, 2018, 06:00:01 PM
by Natzugen