Join Helbreath
Would you like to react to this message? Create an account in a few clicks or log in to continue.


An essential info site for anyone learning the game. Great community and often very insightful posts.
 
HomeUseful information for Helbreath beginnersPlay, discover, and broadcast your Helbreath moments for free.Statistics overviewSearchMemberlistRulesRegisterLog in
 

 Show the name of the items on the ground CODE

Go down 
AuthorMessage
SabbaT[GM]
‏‏‎ ‎‏‏‎ ‎
‏‏‎ ‎‏‏‎ ‎
SabbaT[GM]

Posts : 31

Show the name of the items on the ground CODE Empty
PostSubject: Show the name of the items on the ground CODE   Show the name of the items on the ground CODE 999107/28/2020, 3:46 am

bueno, el código lo hice a ojo.
no garantizo que este bug free.

vamos al HG SRC
vamos a client.h
busquen
Code:
#define DEF_MSGBUFFERSIZE 30000

reemplacen por:
Code:
#define DEF_MSGBUFFERSIZE 42*1024 //42kilobytes

las funciones RequestInitDataHandler y RequestTeleportHandler
usan este macro para construir un buffer de datos dinamico
con el operador "new". estas llaman a iComposeInitMapData
esta se encarga de construir la pantalla inicial cuando logeamos al mapa.
toda la info necesaria.

buscamos iComposeInitMapData
declaramos en el header
Code:
DWORD *dwp;

mas abajo, casi al final buscamos:
Code:
if (pTile->m_pItem[0] != NULL)
{ sp  = (short *)cp;
*sp = pTile->m_pItem[0]->m_sSprite;
cp += 2;
iSize += 2;

sp  = (short *)cp;
*sp = pTile->m_pItem[0]->m_sSpriteFrame;
cp += 2;
iSize += 2;

*cp = pTile->m_pItem[0]->m_cItemColor;
cp++;
iSize++;
}



antes del cierre de llaves agregamos
Code:
memcpy(cp, pTile->CItem[0]->m_cName, 20);
cp += 20;
iSize += 20;

dwp = (DWORD *)cp;
*dwp = pTile->CItem[0]->m_dwAttribute;
cp += 4;
iSize += 4;

vamos al CLIENT SRC
vamos a _ReadMapData
declaramos:

Code:
DWORD *dwp, dwAttr;
char cItemNAme[32];

vamos mas abajo, busquen:
Code:
if (ucHeader & 0x04)
{
sp  = (short *)cp;
sItemSpr = *sp;
cp += 2;
sp  = (short *)cp;
sItemSprFrame = *sp;
cp += 2;
cItemColor = *cp;
cp++;
m_pMapData->bSetItem(sPivotX + sX, sPivotY + sY, sItemSpr, sItemSprFrame, cItemColor, FALSE);
}

reemplazamos ese if entero por:
Code:
if (ucHeader & 0x04) //item on grown
{
sp = (short *)cp;
sItemSpr = *sp;
cp += 2;

sp = (short *)cp;
sItemSprFrame = *sp;
cp += 2;

cItemColor = *cp;
cp++;

ZeroMemory(cItemName, sizeof(cItemName));
memcpy(cItemName, cp, 20);
cp += 20;

dwp = (DWORD *)cp;
dwAttr = *dwp;
cp += 4;

m_pMapData->bSetItem(sPivotX + sX, sPivotY + sY, cItemName, sItemSpr, sItemSprFrame, cItemColor, FALSE, dwAttr);
}



vamos a mapdata.cpp
BUSQUEN ESTA LINEA, Y SOLO ESTA LINEA.
Code:
BOOL CMapData::bSetItem(short sX, short sY, short sItemSpr, short sItemSprFrame, char cItemColor, BOOL bDropEffect)

REEMPLACEN ESA LINEA, Y SOLO ESA LINEA, POR ESTA.
Code:
BOOL CMapData::bSetItem(short sX, short sY, char *pName, short sItemSpr, short sItemSprFrame, char cItemColor, BOOL bDropEffect, DWORD dwAttr)

mas abajo en el desarrollo de la funcion, tienen esto
Code:
m_pData[dX][dY].m_sItemSprite      = sItemSpr;
m_pData[dX][dY].m_sItemSpriteFrame = sItemSprFrame;
m_pData[dX][dY].m_cItemColor       = cItemColor;

arriba de la primera linea
(m_pData[dX][dY].m_sItemSprite      = sItemSpr;)
agreguen:
Code:
ZeroMemory(m_pData[dX][dY].m_cItemName, sizeof(m_pData[dX][dY].m_cItemName));
if (pName != nullptr)
 memcpy(m_pData[dX][dY].m_cItemName, pName, 20);
m_pData[dX][dY].m_dwAttr = dwAttr;

si les tira error en nullptr, usen NULL.
es casi lo mismo.

vamos a mapdata.h
busquen:

Code:
BOOL bSetItem(short sX, short sY, short sItemSpr, short sItemSprFrame, char cItemColor, BOOL bDropEffect = TRUE);

reemplacen esa declaracion por:
Code:
BOOL bSetItem(short sX, short sY, char *pName, short sItemSpr, short sItemSprFrame, char cItemColor, BOOL bDropEffect = TRUE, DWORD dwAttr);

vamos a tile.h
busquen estas 3, y agrupen las por el simple hecho de
que estan relacionadas, ya que corresponden al item.
Code:
short m_sItemSprite;
short m_sItemSpriteFrame;
int   m_cItemColor;

arriba de m_sItemSprite, declaren:
Code:
char  m_cItemName[32];
DWORD m_dwAttr;

que les queden las 5 juntas, por cuestiones de prolijidad.

vamos a tile.cpp
en CTile::CTile()
agreguen:
Code:
ZeroMemory(m_cItemName, sizeof(m_cItemName));
m_dwAttr = 0;

de nuevo, agrupen las 5 variables asi les quedan juntas.

en void CTile::Clear()
agreguen:
Code:
ZeroMemory(m_cItemName, sizeof(m_cItemName));
m_dwAttr = 0;

agrupen las 5 variables
ahora.
vamos a buscar las llamadas a la funcion "bSetItem"

1 llamada esta en _ReadMapData
y las 2 restantes estan en CommonEventHandler, en los case:
Code:
case DEF_COMMONTYPE_ITEMDROP: ......
case DEF_COMMONTYPE_SETITEM: ......

aca les tengo que forzar los parametros.
por que sino el hg requiere demaciados cambios.
y van a morir en el intento mas de uno.
por el momento dejenlos asi.

reemplacen esos 2 cases entero por estos:
Code:
case DEF_COMMONTYPE_ITEMDROP:
if ((sV1 == 6) && (sV2 == 0))
bAddNewEffect(4, sX, sY, NULL, NULL, 0);
m_pMapData->bSetItem(sX, sY, nullptr, sV1, sV2, sV3, TRUE, 0);
break;
case DEF_COMMONTYPE_SETITEM:
m_pMapData->bSetItem(sX, sY, nullptr, sV1, sV2, sV3, FALSE, 0);
break;

de nuevo, si les tira error con nullptr usen NULL.

volvamos al HG SRC
vamos a iClientMotion_Move_Handler
busquen, la declaracion de cData.
tiene que decir,

Code:
char cData[3000];

reemplacen 3000, por 8*1024.
serian 8kilobytes.

vamor a iRequestPanningMapDataRequest
de nuevo, busquen algo como

Code:
char cData[3000];

reemplacen por 8*1024

es importante que a los buffers de datos les sobre y no les falte.
sino estaran probocando overflow.

las funciones iClientMotion_Move_Handler y iRequestPanningMapDataRequest
llaman a iComposeMoveMapData. esta se encarga de enviar info a medida q nos movemos.
actualisando los bordes de la pantalla.

vamos a iComposeMoveMapData.
declaramos en el header:

Code:
DWORD *dwp;

vamos bien abajo, casi al final.
busquen:

Code:
if (pTile->m_pItem[0] != NULL)
{ sp  = (short *)cp;
*sp = pTile->m_pItem[0]->m_sSprite;
cp += 2;
iSize += 2;

sp  = (short *)cp;
*sp = pTile->m_pItem[0]->m_sSpriteFrame;
cp += 2;
iSize += 2;

*cp = pTile->m_pItem[0]->m_cItemColor;
cp++;
iSize++;
}

antes del cierre de llaves agreguen

Code:
memcpy(cp, pTile->CItem[0]->m_cName, 20);
cp += 20;
iSize += 20;

dwp = (DWORD *)cp;
*dwp = pTile->CItem[0]->m_dwAttribute;
cp += 4;
iSize += 4;



de esta forma. podemos enviar mas info de un item, en el piso.
el nombre y el atributo.
solamente cuando entramos a un mapa. o cuando nos estamos moviendo por el mismo.

para solucionar el tema de mas arriba de que forzamos los parámetros
simplemente nos alejamos del pits de monstruos. bien lejos.
y volvemos para que la info se envíe con iComposeMoveMapData
y listo. es medio tedioso si pero bueno. es lo que hay.
o sino pueden deslogear, y relogear de nuevo.

vamos de nuevo al CLIENT SRC
en game.h declaren:

Code:
bool m_bIsDrawingItemName;

en game.cpp, en CGame::CGame()
agreguen:
Code:
m_bIsDrawingItemName = false;

vamos a OnKeyUp
busquen el case 73.

segun vi en sources default,
aparece asi:

Code:
case 73://'I'
break;



reemplasen ese case, por este:

Code:
case 73://'I'
if (m_bCtrlPressed == TRUE &&
(m_cGameMode == DEF_GAMEMODE_ONMAINGAME) &&
m_bInputStatus == FALSE)
{ m_bIsDrawingItemName = !m_bIsDrawingItemName;
 if (m_bIsDrawingItemName)
 AddEventList("Drawing Item Name, press shift key and set the mouse coords over an item.", 10);
else AddEventList("Not Drawing Item Name.", 10);
}
break;


el comando CONTROL + i va a habilitar q podamos ver el nombre de los items.

pero tbm vamos a necesitar q presionen shift.

vamos a DrawObjects

declaren en el header

Code:
char cItemName[32];
DWORD dwAttr;



busquen un poquito mas abajo este IF

Code:
if ((indexX < m_pMapData->m_sPivotX) ||
(indexX > m_pMapData->m_sPivotX + MAPDATASIZEX) ||
(indexY < m_pMapData->m_sPivotY) ||
(indexY > m_pMapData->m_sPivotY + MAPDATASIZEY))



adentro de ese IF esta esto:

Code:
sItemSprite = NULL;
sItemSpriteFrame = NULL;
bRet = FALSE;
cItemColor = NULL;



agreguen tambien:

Code:
ZeroMemory(cItemName, sizeof(cItemName)); 
dwAttr = 0;



vamos mas abajo, en el ELSE de ese if hay muchas inicialisaciones.
estas 3, estan ahi.

Code:
sItemSprite      = m_pMapData->m_pData[dX][dY].m_sItemSprite;
sItemSpriteFrame = m_pMapData->m_pData[dX][dY].m_sItemSpriteFrame;
cItemColor       = m_pMapData->m_pData[dX][dY].m_cItemColor;



arriba de sItemSprite agreguen:

Code:
ZeroMemory(cItemName, sizeof(cItemName));
memcpy(cItemName, m_pMapData->m_pData[dX][dY].m_cItemName, 20);
dwAttr = m_pMapData->m_pData[dX][dY].m_dwAttr;



vamos un poco mas abajo.
busquen este if:

Code:
if ((bRet == TRUE) && (sItemSprite != 0))



adentro de ese if, justo arriba de este if:

Code:
if ((ix - 13 < msX) && (ix + 13 > msX) && (iy - 13 < msY) && (iy + 13 > msY))



agreguen:

Code:
if ((strlen(cItemName) != 0) &&
m_bShiftPressed == TRUE &&
m_bIsDrawingItemName &&
((msX >= ix) && (msX <= (ix+32))) &&
((msY >= iy) && (msY <= (iy+32))))
{ char cStr[64], cStr2[64], cStr3[64];
 ZeroMemory(cStr, sizeof(cStr));
 ZeroMemory(cStr2, sizeof(cStr2));
 ZeroMemory(cStr3, sizeof(cStr3));
 GetItemName(cItemName, dwAttr, cStr, cStr2, cStr3);
 PutString(ix, iy+10, cStr, RGB(10,10,10));
}



para que PutString muestre el nombre del item, tiene q tener el mouse encima del item,
y tienen que presionar shift.

vamos una cuantas lineas mas para abajo.
busquen este if:

Code:
if ((bContact == TRUE) && (msY <= 431))



al cierre de ese if, mas abajo, busquen:

Code:
if ((indexX < m_pMapData->m_sPivotX) ||
(indexX > m_pMapData->m_sPivotX + MAPDATASIZEX) ||
(indexY < m_pMapData->m_sPivotY) ||
(indexY > m_pMapData->m_sPivotY + MAPDATASIZEY))



adentro de ese if, esta esto:

Code:
sItemSprite = NULL;
bRet = FALSE;



por cuestiones de las buenas practicas.
agreguen esto por abajo de bRet:

Code:
ZeroMemory(cItemName, sizeof(cItemName));
dwAttr = 0;
sItemSpriteFrame = 0;
cItemColor = 0;


/////////
UPDATE
vamos a fixear la parte del forzamiento de los parámetros.

me puse a investigar un poco. y segun vi, en el CLIENT SRC, la funcion
bSetItem la cual tubo q ser reestructurada, es llamada por _ReadMapData
CommonEventHandler


vamos al CLIENT SRC
reestructuraremos a CommonEventHandler de la siguiente forma.
en game.cpp, busquen CommonEventHandler
declaren en el header:
Code:
DWORD *dwp, dwAttr;
char cItemName[32];

mas abajo busquen esta linea:
Code:
switch (wEventType)

POR ARRIBA DEL SWITCH
despues de sV4 agreguen:
Code:
if ((wEventType == DEF_COMMONTYPE_ITEMDROP) ||
(wEventType == DEF_COMMONTYPE_SETITEM))
{ ZeroMemory(cItemName, sizeof(cItemName));
memcpy(cItemName, cp, 20);
cp += 20;
dwp = (DWORD *)cp;
dwAttr = *dwp;
cp += 4;
}

ahora reemplacen los case de DEF_COMMONTYPE_ITEMDROP y DEF_COMMONTYPE_SETITEM
por estos.

Code:
case DEF_COMMONTYPE_ITEMDROP:
 if ((sV1 == 6) && (sV2 == 0))
  bAddNewEffect(4, sX, sY, NULL, NULL, 0);
 m_pMapData->bSetItem(sX, sY, cItemName, sV1, sV2, sV3, TRUE, dwAttr);
break;
case DEF_COMMONTYPE_SETITEM:
 m_pMapData->bSetItem(sX, sY, cItemName, sV1, sV2, sV3, FALSE, dwAttr);
break;

de esta forma dejamos fixeado el tema de forzamiento de los parámetros.
esto, si tengo q razonarlo sin testearlo, iva a generar que cuando matemos un bicho
y nos dropee un item, si queríamos ver su nombre en el piso no íbamos a poder.

ahora vamos al HG SRC
DEF_COMMONTYPE_SETITEM y DEF_COMMONTYPE_ITEMDROP
son mensajes q manda el hg .

en game.cpp, busquen SendEventToNearClient_TypeB
esta función se usa solo para mandar 3 tipos de mensaje.

Code:
DEF_COMMONTYPE_SETITEM
DEF_COMMONTYPE_ITEMDROP
DEF_COMMONTYPE_MAGIC
esos 3.

tenemos q reestructurar la definición de los parámetros.
por defecto tienen:
Code:
void CGame::SendEventToNearClient_TypeB(DWORD dwMsgID, WORD wMsgType, char cMapIndex, short sX, short sY, short sV1, short sV2, short sV3, short sV4)

vamos a reemplazar esa linea, por esta:
Code:
void CGame::SendEventToNearClient_TypeB(DWORD dwMsgID, WORD wMsgType, char cMapIndex, short sX, short sY, short sV1, short sV2, short sV3, short sV4, char *pName, DWORD dwAttr)

como podrán ver es la misma pero con 2 parámetros adicionales después de sV4.
uno corresponde a un parametro de entrada para el nombre del item, y otro para el atributo(RECUERDEN BIEN ESTA PARTE)

vamos al header de esa función, declaren:
Code:
DWORD *dwp;

vamos mas abajo, antes del bucle while.
abajo de esto:

Code:
sp  = (short *)cp;
*sp = sV4;
cp += 2;

agreguen esto:
Code:
short sAdd = 0;
if ((wMsgType == DEF_COMMONTYPE_ITEMDROP) ||
(wMsgType == DEF_COMMONTYPE_SETITEM))
{ memcpy(cp, pName, 20);
cp += 20;

dwp = (DWORD *)cp;
*dwp = dwAttr;
cp += 4;
sAdd = 24;
}

vamos un poquito mas abajo
y donde dice:
Code:
iRet = m_pClientList[i]->m_pXSock->iSendMsg(cData, 18);

al numero 18 lo reemplazan por "18 + sAdd"

vamos a game.h
busquen la declaración de SendEventToNearClient_TypeB
es esta:

Code:
void SendEventToNearClient_TypeB(DWORD dwMsgID, WORD wMsgType, char cMapIndex, short sX, short sY, short sV1, short sV2, short sV3, short sV4 = NULL);


la reemplazamos por esta:

Code:
void SendEventToNearClient_TypeB(DWORD dwMsgID, WORD wMsgType, char cMapIndex, short sX, short sY, short sV1, short sV2, short sV3, short sV4, char *pName = nullptr, DWORD dwAttr = 0);

si les tira error nullptr, usen NULL.
ahora traten de compilar, si agregaron todo bien lo del hg, y antes de este paso les compilaba. ahora van a tener un medio centenar de errores.

vamos a buscar todas las llamadas a la funcion SendEventToNearClient_TypeB

van a ver que se envia el mensaje MSGID_EVENT_COMMON
y como tipo del mensaje, aparecen los 3 citados anteriormente.
el unico tipo de mensaje q no va a tirar error es el de DEF_COMMONTYPE_MAGIC.


ahora vamos a tener q rellenar los 2 ultimos parametros a cada llamada de 
SendEventToNearClient_TypeB que tiene por tipo de mensaje a DEF_COMMONTYPE_ITEMDROP y a DEF_COMMONTYPE_SETITEM.


DEF_COMMONTYPE_SETITEM solo tiene 3 llamadas. es el mas facil.
empesemos por este.
empesemos con este ejemplo.
en PlayerMagicHandler
en el case de la magia possesion.
Code:
case DEF_MAGICTYPE_POSSESSION:

vamos mas abajo, van a escontrar esta linea.
Code:
_bItemLog(DEF_ITEMLOG_GET, iClientH, (int) -1, pItem);

por debajo de eso, agreguen esto:
Code:
char cItemName[32];
DWORD dwAttr;
ZeroMemory(cItemName, sizeof(cItemName));
memcpy(cItemName, pItem->m_cName, 20);
dwAttr = pItem->m_dwAttribute;

ahora vamos un poco mas abajo. encontraran esto:
se los dejo expresado de esta forma para q se vea mejor.
Code:
SendEventToNearClient_TypeB(
MSGID_EVENT_COMMON, DEF_COMMONTYPE_SETITEM,
m_pClientList[iClientH]->m_cMapIndex,
dX,
dY,
sRemainItemSprite,
sRemainItemSpriteFrame,
cRemainItemColor);

recordemos que los parametros de SendEventToNearClient_TypeB son:
dwMsgID, wMsgType, cMapIndex, sX, sY, sV1, sV2, sV3, sV4, pName, dwAttr

en el ejemplo citado, cRemainItemColor corresponde a el parametro sV3.
tenemos q completar los 3 parametros restantes:
sV4, pName, dwAttr

para que se den una idea de como queda
les deveria qdar asi.
Code:
SendEventToNearClient_TypeB(
MSGID_EVENT_COMMON, DEF_COMMONTYPE_SETITEM,
m_pClientList[iClientH]->m_cMapIndex,
dX,
dY,
sRemainItemSprite,
sRemainItemSpriteFrame,
cRemainItemColor,
0,
cItemName,
dwAttr);

las restantes 2 llamadas de SendEventToNearClient_TypeB
para enviar el tipo DEF_COMMONTYPE_SETITEM
es hacer exactamente lo mismo.
deberan completar parametros en iClientMotion_GetItem_Handler CheckFireBluring


deberan declarar

Code:
char cItemName[32];
DWORD dwAttr;


deberan asignar.
Code:
ZeroMemory(cItemName, sizeof(cItemName));
memcpy(cItemName, pItem->m_cName, 20);
dwAttr = pItem->m_dwAttribute;

para evitar ERRORES, ASIGNEN antes de un
Code:
if (pItem != NULL) delete pItem;

o bien, antes de un
Code:
if (iEraseReq == 1) delete pItem;

SIEMPRE.


deberan completar los parametros.
por defecto, sV4 para DEF_COMMONTYPE_SETITEM DEF_COMMONTYPE_ITEMDROP es CERO SIEMPRE
como se especifica en el ejemplo anterior.
porque? por que si y punto. no insistan.

ahora lo mas tedioso.
busquen las llamadas de SendEventToNearClient_TypeB
con el tipo de mensaje DEF_COMMONTYPE_ITEMDROP 
como podran ver, son muchas.
en esencia es solamente completar el parametro sV4 con 0
y el pName y dwAttr de la siguiente manera.
les hago un solo ejemplo y listo.
por ejemplo, en DropItemHandler hay 2 llamadas a SendEventToNearClient_TypeB
hago una sola y el resto las hacen uds.
aca tienen al puntero "pItem", y a los propios datos de pItem
los usan para rellenar los parametros.
no hace falta nada de lo que hicimos en el ejemplo anterior.
basta con rellenar los faltantes.
Code:
SendEventToNearClient_TypeB(
MSGID_EVENT_COMMON, DEF_COMMONTYPE_ITEMDROP,
m_pClientList[iClientH]->m_cMapIndex,
m_pClientList[iClientH]->m_sX,
m_pClientList[iClientH]->m_sY,  
pItem->m_sSprite,
pItem->m_sSpriteFrame,
pItem->m_cItemColor);

recuerden que m_cItemColor es sV3.
completando los parametros faltantes quedaria:
Code:
SendEventToNearClient_TypeB(
MSGID_EVENT_COMMON, DEF_COMMONTYPE_ITEMDROP,
m_pClientList[iClientH]->m_cMapIndex,
m_pClientList[iClientH]->m_sX,
m_pClientList[iClientH]->m_sY,  
pItem->m_sSprite,
pItem->m_sSpriteFrame,
pItem->m_cItemColor,
0,
pItem->m_cName,
pItem->m_dwAttribute);

en posteriores llamadas es posible q vean algo asi:

Code:
m_pClientList[iClientH]->m_pItemList[sItemIndex]->m_cItemColor

es exactamente lo mismo. agreguen sV4 como 0, y usen estos
Code:
m_pClientList[iClientH]->m_pItemList[sItemIndex]->m_cName
m_pClientList[iClientH]->m_pItemList[sItemIndex]->m_dwAttribute

o bien, capas q les aparece un pItem2.
varia el nombre del puntero al item.

esto seria todo.
SIN MAS QUE AGREGAR ME DESPIDO.
si tienen problemas dejen sus facebooks y los ayudo si puedo con teamveawer.

salu2


Last edited by SabbaT[GM] on 7/29/2020, 4:34 am; edited 3 times in total
Back to top Go down
luquitomas

avatar

Posts : 20

Show the name of the items on the ground CODE Empty
PostSubject: Re: Show the name of the items on the ground CODE   Show the name of the items on the ground CODE 999107/28/2020, 7:54 pm

Genio, gracias por tomarte el laburo y compartir!!

SabbaT[GM] likes this post

Back to top Go down
SabbaT[GM]
‏‏‎ ‎‏‏‎ ‎
‏‏‎ ‎‏‏‎ ‎
SabbaT[GM]

Posts : 31

Show the name of the items on the ground CODE Empty
PostSubject: Re: Show the name of the items on the ground CODE   Show the name of the items on the ground CODE 999107/29/2020, 4:24 am

ya subi el update. si tenes problemas chifla.

salu2
Back to top Go down
darmart123

avatar

Posts : 11

Show the name of the items on the ground CODE Empty
PostSubject: Re: Show the name of the items on the ground CODE   Show the name of the items on the ground CODE 999108/8/2020, 5:05 am

Tremendo code! Aún nadie lo había subido así que es muy bueno el aporte.  Wink

SabbaT[GM] likes this post

Back to top Go down
KenZoB
‏‏‎ ‎‏‏‎ ‎
‏‏‎ ‎‏‏‎ ‎
KenZoB

Posts : 48

Show the name of the items on the ground CODE Empty
PostSubject: Re: Show the name of the items on the ground CODE   Show the name of the items on the ground CODE 99910Today at 12:03 am

alguien ha probado el code a ver si funciona correctamente?


Show the name of the items on the ground CODE QADsl
Back to top Go down
SabbaT[GM]
‏‏‎ ‎‏‏‎ ‎
‏‏‎ ‎‏‏‎ ‎
SabbaT[GM]

Posts : 31

Show the name of the items on the ground CODE Empty
PostSubject: Re: Show the name of the items on the ground CODE   Show the name of the items on the ground CODE 99910Today at 12:37 am

deberia funcionar.
igual si lees los dos primeros renglones vas a ver que no lo testie. mi client va estar fuera de servicio por un tiempo(LARGO) jaja

pasame tu face si queres agregarlo y lo vemos con teamveawer
Back to top Go down
 
Show the name of the items on the ground CODE
Back to top 
Page 1 of 1

Permissions in this forum:You cannot reply to topics in this forum
Join Helbreath :: Open Source / Development Corner :: C++-
Jump to: