Solo usuarios registrados pueden comentar y agradecer, Logueate o Registrate

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

0 Miembros and 1 Guest are viewing this topic.

Offline caron22 Posteado: May 07, 2018, 03:51:06 PM | Modificado: July 23, 2018, 04:46:03 PM by caron22

  • C++ Coder
  • 0 puntos por ventas
  • *
  • Rank: Puto amo
  • Posts: 622
  • Gracias recibida: 5791
  • ar
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

El halago en exceso, debilita y, en su justa medida, motiva
https://www.youtube.com/channel/UCN14tZ3cPSFaseVo8V6SL2g?view_as=subscriber

Offline SbaGomez #1 Posteado: May 13, 2018, 03:08:19 PM

  • Diseñador
  • +6 puntos por ventas
  • *
  • Rank: Puto amo
  • Posts: 325
  • Gracias recibida: 770
  • ar
que bug es el del zen el de cuando tradeas o cual???

Gracias:


Offline caron22 #2 Posteado: May 14, 2018, 12:01:22 PM

  • C++ Coder
  • 0 puntos por ventas
  • *
  • Rank: Puto amo
  • Posts: 622
  • Gracias recibida: 5791
  • ar
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 Posteado: May 14, 2018, 02:17:35 PM

  • 0 puntos por ventas
  • *
  • Rank: Avanzado
  • Posts: 138
  • Gracias recibida: 12015
  • ar
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?


Offline caron22 #4 Posteado: May 14, 2018, 02:23:39 PM

  • C++ Coder
  • 0 puntos por ventas
  • *
  • Rank: Puto amo
  • Posts: 622
  • Gracias recibida: 5791
  • ar
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 Posteado: May 14, 2018, 05:51:35 PM | Modificado: May 14, 2018, 07:15:41 PM by ZabiinoOo

  • C++ Coder
  • 0 puntos por ventas
  • *
  • Rank: Sup. destacado
  • Posts: 111
  • Gracias recibida: 556
  • jp
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)

Gracias:


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

  • C++ Coder
  • 0 puntos por ventas
  • *
  • Rank: Puto amo
  • Posts: 540
  • Gracias recibida: 8050
  • ar
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 Posteado: May 14, 2018, 07:41:52 PM

  • C++ Coder
  • 0 puntos por ventas
  • *
  • Rank: Sup. destacado
  • Posts: 111
  • Gracias recibida: 556
  • jp
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 Posteado: May 14, 2018, 07:45:12 PM

  • C++ Coder
  • 0 puntos por ventas
  • *
  • Rank: Puto amo
  • Posts: 540
  • Gracias recibida: 8050
  • ar
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 :)


Offline caron22 #9 Posteado: May 14, 2018, 08:24:55 PM | Modificado: May 14, 2018, 08:27:09 PM by caron22

  • C++ Coder
  • 0 puntos por ventas
  • *
  • Rank: Puto amo
  • Posts: 622
  • Gracias recibida: 5791
  • ar
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
 

El halago en exceso, debilita y, en su justa medida, motiva
https://www.youtube.com/channel/UCN14tZ3cPSFaseVo8V6SL2g?view_as=subscriber

Offline webmonkey #10 Posteado: May 15, 2018, 07:17:54 PM | Modificado: May 15, 2018, 07:22:33 PM by webmonkey

  • 0 puntos por ventas
  • *
  • Rank: Dedicado
  • Posts: 43
  • Gracias recibida: 47
  • ar
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.


Offline YolaxD #11 Posteado: May 15, 2018, 08:07:53 PM

  • C++ Coder
  • 0 puntos por ventas
  • *
  • Rank: Puto amo
  • Posts: 540
  • Gracias recibida: 8050
  • ar
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 Posteado: May 15, 2018, 08:12:16 PM

  • C++ Coder
  • 0 puntos por ventas
  • *
  • Rank: Puto amo
  • Posts: 540
  • Gracias recibida: 8050
  • ar
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


Offline caron22 #13 Posteado: May 21, 2018, 12:00:45 PM

  • C++ Coder
  • 0 puntos por ventas
  • *
  • Rank: Puto amo
  • Posts: 622
  • Gracias recibida: 5791
  • ar
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:


Offline caron22 #14 Posteado: May 21, 2018, 12:04:18 PM

  • C++ Coder
  • 0 puntos por ventas
  • *
  • Rank: Puto amo
  • Posts: 622
  • Gracias recibida: 5791
  • ar
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 Posteado: May 22, 2018, 02:30:17 AM | Modificado: May 22, 2018, 02:41:45 AM by webmonkey

  • 0 puntos por ventas
  • *
  • Rank: Dedicado
  • Posts: 43
  • Gracias recibida: 47
  • ar
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.


Offline caron22 #16 Posteado: May 22, 2018, 10:11:16 AM

  • C++ Coder
  • 0 puntos por ventas
  • *
  • Rank: Puto amo
  • Posts: 622
  • Gracias recibida: 5791
  • ar
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 Posteado: May 22, 2018, 10:53:29 AM

  • 0 puntos por ventas
  • *
  • Rank: Dedicado
  • Posts: 43
  • Gracias recibida: 47
  • ar

Offline caron22 #18 Posteado: May 22, 2018, 11:33:54 AM | Modificado: May 22, 2018, 11:38:56 AM by caron22

  • C++ Coder
  • 0 puntos por ventas
  • *
  • Rank: Puto amo
  • Posts: 622
  • Gracias recibida: 5791
  • ar
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

El halago en exceso, debilita y, en su justa medida, motiva
https://www.youtube.com/channel/UCN14tZ3cPSFaseVo8V6SL2g?view_as=subscriber

Offline stopk #19 Posteado: April 20, 2020, 08:08:58 AM

  • 0 puntos por ventas
  • *
  • Rank: Destacado
  • Posts: 94
  • Gracias recibida: 89
  • bh
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


Solo usuarios registrados pueden comentar y agradecer, Logueate o Registrate


 

Related Topics

  Subject / Started by Replies Last post
41 Replies
24024 Views
Last post April 12, 2021, 06:42:56 PM
by pingm
1 Replies
1493 Views
Last post February 16, 2018, 02:18:46 AM
by Freddyy
0 Replies
139 Views
Last post April 21, 2023, 05:48:18 AM
by wenleiady
0 Replies
434 Views
Last post November 08, 2023, 11:14:24 PM
by Feche
0 Replies
742 Views
Last post December 09, 2023, 09:35:12 AM
by onlinezajzaj