Welcome!

Join our community of MMO enthusiasts and game developers! By registering, you'll gain access to discussions on the latest developments in MMO server files and collaborate with like-minded individuals. Join us today and unlock the potential of MMO server development!

Join Today!

Fixed and Working Inventory Item Sort + Pile Items.

Joined
May 2, 2012
Messages
475
Reaction score
244
First of all Credits for the RAW or should i say idea of this Code ( NaJDev AKA Jan Maru Pamplona )
and to me (@ejsayaaa) as i completely recoded it to proper and safest way as possible.

NOTE: DON'T ADD THIS SOURCE CODE IF YOU DO NOT KNOW HOW TO OPERATE YOUR "OWN SOURCE"

Add this to s_NetGlobal.h ( you know how to do this. :w00t: )
under:
enum EMNET_MSG
{
PHP:
	NET_MSG_GCTRL_REQ_HOLD_ARRAY					= (NET_MSG_GCTRL + 1677),


GLCharacter.h
Declare this
PHP:
HRESULT			ReqSortItem ();

GLCharacter.cpp
Add This
PHP:
HRESULT GLCharacter::ReqSortItem ()
{
	if ( !IsValidBody() )															return E_FAIL;	
	if ( ValidWindowOpen() )														return E_FAIL;	
	if ( IsACTION(GLAT_ATTACK) || IsACTION(GLAT_SKILL) ||  m_sPMarket.IsOpen() )	return E_FAIL;

	GLMSG::SNETPC_REQ_HOLD_ARRAY NetMsg;
	NETSENDTOFIELD ( &NetMsg );
	return S_OK;
}

GLGaeaServerMsg.cpp
Add This
PHP:
	case NET_MSG_GCTRL_REQ_HOLD_ARRAY:

GLCharMsg.cpp
Add This
PHP:
	case NET_MSG_GCTRL_REQ_HOLD_ARRAY:		MsgReqHoldArray(nmg);			break;

GLChar.h
Declare this
PHP:
	HRESULT MsgReqHoldArray ( NET_MSG_GENERIC* nmg );

GLCharInvenMsg.cpp ( NOW HERE's THE ALGORITHM STARTS )
Add This
PHP:
HRESULT GLChar::MsgReqHoldArray ( NET_MSG_GENERIC* nmg )
{
	if ( !IsValidBody() )	return E_FAIL;

	std::vector<SITEMCUSTOM>	vecPILE;
	std::vector<SNATIVEID>	vecPILEDEL;
	std::vector<SITEMCUSTOM>	vecDEL;
	std::vector<SNATIVEID>	vecDEL2;
	GLInventory::CELL_MAP &ItemMap = *m_cInventory.GetItemList();
	GLInventory::CELL_MAP_ITER iter = ItemMap.begin();
	for ( ; iter!=ItemMap.end(); ++iter )
	{
		if (!(*iter).second ) continue;
		SINVENITEM &sINVENITEM = *(*iter).second;
		SITEMCUSTOM &sITEMCUSTOM = sINVENITEM.sItemCustom;
		SITEM* pHoldData = GLItemMan::GetInstance().GetItem ( sITEMCUSTOM.sNativeID );
		if ( !pHoldData ) continue;
		if( pHoldData && pHoldData->ISPILE() )  
		{
			vecPILE.push_back ( sITEMCUSTOM ); 
			vecPILEDEL.push_back ( SNATIVEID(sINVENITEM.wPosX,sINVENITEM.wPosY) );
		}
		else
		{
			vecDEL.push_back ( sITEMCUSTOM );
			vecDEL2.push_back ( SNATIVEID(sINVENITEM.wPosX,sINVENITEM.wPosY) );
		}
		
	}

	if ( !vecDEL2.empty() )
	for ( DWORD i=0; i<vecDEL2.size(); ++i )
	{
		m_cInventory.DeleteItem ( vecDEL2[i].wMainID, vecDEL2[i].wSubID );
		GLMSG::SNETPC_INVEN_DELETE NetMsgDelete;
		NetMsgDelete.wPosX = vecDEL2[i].wMainID;
		NetMsgDelete.wPosY = vecDEL2[i].wSubID;
		GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgDelete);
	}

	if ( !vecPILEDEL.empty() )
	for ( DWORD i=0; i<vecPILEDEL.size(); ++i )
	{
		m_cInventory.DeleteItem ( vecPILEDEL[i].wMainID, vecPILEDEL[i].wSubID );
		GLMSG::SNETPC_INVEN_DELETE NetMsgDelete;
		NetMsgDelete.wPosX = vecPILEDEL[i].wMainID;
		NetMsgDelete.wPosY = vecPILEDEL[i].wSubID;
		GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgDelete);
	}

	if ( !vecDEL.empty() )
	{
		for ( DWORD b=0; b<vecDEL.size(); ++b )
		for ( DWORD c=0; c<vecDEL.size()-1; ++c )
		{
			SITEM* pHoldData = GLItemMan::GetInstance().GetItem ( vecDEL[c].sNativeID );
			if ( !pHoldData )
			{
				//MessageBox(NULL,"if ( !pHoldData )","vecDEL",NULL);
				continue;
			}
			SITEM* pHoldData2 = GLItemMan::GetInstance().GetItem ( vecDEL[c+1].sNativeID );
			if ( !pHoldData2 )
			{
			//	MessageBox(NULL,"if ( !pHoldData2 )","vecDEL",NULL);
				continue;
			}
			BOOL bCOMPARE = FALSE;
			if ( pHoldData->sBasicOp.emItemType > pHoldData2->sBasicOp.emItemType ) bCOMPARE = TRUE;
			else if ( pHoldData->sBasicOp.emItemType == pHoldData2->sBasicOp.emItemType )
			{
				if ( pHoldData->sBasicOp.emItemType == ITEM_SUIT )
				{
					if ( pHoldData->sSuitOp.emSuit == pHoldData2->sSuitOp.emSuit )
					{
						if ( pHoldData->sSuitOp.emSuit == SUIT_HANDHELD )
						{
							if ( pHoldData->sSuitOp.emAttack > pHoldData2->sSuitOp.emAttack ) bCOMPARE = TRUE;
						}
						else bCOMPARE = TRUE;
					}
					else if ( pHoldData->sSuitOp.emSuit > pHoldData2->sSuitOp.emSuit ) bCOMPARE = TRUE;
				}
				else bCOMPARE = TRUE;
			}

			if ( bCOMPARE ) 
			{
				SITEMCUSTOM sCUSTOM = vecDEL[c+1];
				vecDEL[c+1] = vecDEL[c];
				vecDEL[c] = sCUSTOM;
			}
		}

		WORD _X = 0, _Y = 0;
		for( int i = 0; i < vecDEL.size(); i++ )
		{		
			SITEM* pHoldData = GLItemMan::GetInstance().GetItem ( vecDEL[i].sNativeID );
			if ( !pHoldData )
			{
				//MessageBox(NULL,"if ( !pHoldData )","",NULL);
				continue;
			}
			BOOL bOk = m_cInventory.IsInsertable ( pHoldData->sBasicOp.wInvenSizeX, pHoldData->sBasicOp.wInvenSizeY, _X, _Y );
			if ( !bOk )
			{
				bOk = m_cInventory.FindInsrtable ( pHoldData->sBasicOp.wInvenSizeX, pHoldData->sBasicOp.wInvenSizeY, _X, _Y );
				if ( !bOk )
				{
					//MessageBox(NULL,"bOk = m_cInventory.FindInsrtable ( pHoldData->sBasicOp.wInvenSizeX, pHoldData->sBasicOp.wInvenSizeY, _X, _Y );","",NULL);
					continue;
				}
			}
			bOk = m_cInventory.InsertItem ( vecDEL[i], _X, _Y );
			if ( !bOk )	
			{
				//MessageBox(NULL,"!bOk = m_cInventory.InsertItem ( vecDEL[i], _X, _Y );","",NULL);
				continue;
			}
			
					
			SINVENITEM sINVENITEM = *m_cInventory.FindPosItem ( _X, _Y );
					
			GLMSG::SNETPC_INVEN_INSERT NetMsg_Inven_Insert;
			NetMsg_Inven_Insert.Data = sINVENITEM;
			GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg_Inven_Insert);

			SITEM *pITEM = GLItemMan::GetInstance().GetItem ( sINVENITEM.sItemCustom.sNativeID );
			if ( pITEM && pITEM->IsTIMELMT() )
			{
				if ( pITEM->sDrugOp.tTIME_LMT != 0 )
				{
					const CTime cTIME_CUR = CTime::GetCurrentTime();

					CTimeSpan cSPAN(pITEM->sDrugOp.tTIME_LMT);
					CTime cTIME_LMT(sINVENITEM.sItemCustom.tBORNTIME);
					cTIME_LMT += cSPAN;

					if ( cTIME_CUR > cTIME_LMT )
					{
						if ( pITEM->sBasicOp.emItemType == ITEM_VEHICLE && sINVENITEM.sItemCustom.dwVehicleID != 0 )
						{
							GLVEHICLE* pNewVehicle = new GLVEHICLE();
							CGetVehicle* pGetVehicle = new CGetVehicle ( pNewVehicle, 
														sINVENITEM.sItemCustom.dwVehicleID, 
														m_dwClientID, 
														m_dwCharID, 
														true );
							GLDBMan* pDBMan = GLGaeaServer::GetInstance().GetDBMan ();
							if ( pDBMan ) pDBMan->AddJob ( pGetVehicle );
						}

						if ( pITEM->sBasicOp.emItemType == ITEM_PET_CARD && sINVENITEM.sItemCustom.dwPetID != 0 )
						{
							CDeletePet* pDbAction = new CDeletePet ( m_dwCharID, sINVENITEM.sItemCustom.dwPetID );
							GLDBMan* pDBMan = GLGaeaServer::GetInstance().GetDBMan ();
							if ( pDBMan ) pDBMan->AddJob ( pDbAction );

							PGLPETFIELD pMyPet = GLGaeaServer::GetInstance().GetPET ( m_dwPetGUID );
							if ( pMyPet && sINVENITEM.sItemCustom.dwPetID == pMyPet->m_dwPetID )
							{
								pMyPet->UpdateTimeLmtItem ( this );

								for ( WORD i = 0; i < PET_ACCETYPE_SIZE; ++i )
								{
									CItemDrop cDropItem;
									cDropItem.sItemCustom = pMyPet->m_PutOnItems[i];
									if ( IsInsertToInven ( &cDropItem ) ) InsertToInven ( &cDropItem );
									else
									{
										if ( m_pLandMan )
										{
											m_pLandMan->DropItem ( m_vPos, 
																&(cDropItem.sItemCustom), 
																EMGROUP_ONE, 
																m_dwGaeaID );
										}
									}
								}

								GLGaeaServer::GetInstance().ReserveDropOutPet ( SDROPOUTPETINFO(pMyPet->m_dwGUID,true,false) );

								CGetRestorePetList *pDbAction = new CGetRestorePetList ( m_dwCharID, m_dwClientID );
								if ( pDBMan ) pDBMan->AddJob ( pDbAction );
							}
							else
							{
								GLPET* pNewPet = new GLPET ();
								CGetPet* pGetPet = new CGetPet ( pNewPet, 
																sINVENITEM.sItemCustom.dwPetID, 
																m_dwClientID, 
																m_dwCharID,
																sINVENITEM.wPosX,
																sINVENITEM.wPosY,
																true );
								GLDBMan* pDBMan = GLGaeaServer::GetInstance().GetDBMan ();
								if ( pDBMan ) pDBMan->AddJob ( pGetPet );
							}
						}

						GLMSG::SNETPC_INVEN_DELETE NetMsgInvenDel;
						NetMsgInvenDel.wPosX = sINVENITEM.wPosX;
						NetMsgInvenDel.wPosY = sINVENITEM.wPosY;
						GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgInvenDel);

						GLMSG::SNET_INVEN_DEL_ITEM_TIMELMT NetMsgInvenDelTimeLmt;
						NetMsgInvenDelTimeLmt.nidITEM = sINVENITEM.sItemCustom.sNativeID;
						GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgInvenDelTimeLmt);

						m_cInventory.DeleteItem ( sINVENITEM.wPosX, sINVENITEM.wPosY );
					
						if ( sINVENITEM.sItemCustom.nidDISGUISE!=SNATIVEID(false) )
						{
							SITEM *pONE = GLItemMan::GetInstance().GetItem ( sINVENITEM.sItemCustom.nidDISGUISE );
							if ( !pONE )		continue;

							SITEMCUSTOM sITEM_NEW;
							sITEM_NEW.sNativeID = sINVENITEM.sItemCustom.nidDISGUISE;
							CTime cTIME = CTime::GetCurrentTime();
							if ( sINVENITEM.sItemCustom.tDISGUISE!=0 && pONE->sDrugOp.tTIME_LMT!= 0 )
							{
								cTIME = CTime(sINVENITEM.sItemCustom.tDISGUISE);

								CTimeSpan tLMT(pONE->sDrugOp.tTIME_LMT);
								cTIME -= tLMT;
							}

							sITEM_NEW.tBORNTIME = cTIME.GetTime();
							sITEM_NEW.wTurnNum = 1;
							sITEM_NEW.cGenType = EMGEN_BILLING;
							sITEM_NEW.cChnID = (BYTE)GLGaeaServer::GetInstance().GetServerChannel();
							sITEM_NEW.cFieldID = (BYTE)GLGaeaServer::GetInstance().GetFieldSvrID();
							sITEM_NEW.lnGenNum = GLITEMLMT::GetInstance().RegItemGen ( sITEM_NEW.sNativeID, (EMITEMGEN)sITEM_NEW.cGenType );

							BOOL bOk = m_cInventory.IsInsertable ( pONE->sBasicOp.wInvenSizeX, pONE->sBasicOp.wInvenSizeY, _X, _Y );
							if ( !bOk )			continue;

							m_cInventory.InsertItem ( sITEM_NEW, _X, _Y );
							SINVENITEM *pINSERT_ITEM = m_cInventory.GetItem ( _X, _Y );

							GLMSG::SNETPC_INVEN_INSERT NetItemInsert;
							NetItemInsert.Data = *pINSERT_ITEM;
							GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetItemInsert);

							GLITEMLMT::GetInstance().ReqItemRoute ( pINSERT_ITEM->sItemCustom, ID_CHAR, 0, ID_CHAR, m_dwCharID, EMITEM_ROUTE_CHAR, pINSERT_ITEM->sItemCustom.wTurnNum );
						}
					}
				}
			}
			
			if ( _X < 5 ) _X++;
			else
			{
				_X = 0;
				_Y++;
			}
		}
	}

	if ( !vecPILE.empty() )
	{
		for ( DWORD b=0; b<vecPILE.size(); ++b )
		for ( DWORD c=0; c<vecPILE.size()-1; ++c )
		{
			SITEM* pHoldData = GLItemMan::GetInstance().GetItem ( vecPILE[c].sNativeID );
			if ( !pHoldData )	continue;
			
			SITEM* pHoldData2 = GLItemMan::GetInstance().GetItem ( vecPILE[c+1].sNativeID );
			if ( !pHoldData2 )	continue;
			
			BOOL bCOMPARE = FALSE;
			
			if ( pHoldData->sBasicOp.sNativeID.dwID > pHoldData2->sBasicOp.sNativeID.dwID ) bCOMPARE = TRUE;
			else if ( pHoldData->sBasicOp.sNativeID == pHoldData2->sBasicOp.sNativeID && vecPILE[c].wTurnNum != vecPILE[c+1].wTurnNum ) bCOMPARE = TRUE;
			
			if ( bCOMPARE ) 
			{
				SITEMCUSTOM sCUSTOM = vecPILE[c+1];
				vecPILE[c+1] = vecPILE[c];
				vecPILE[c] = sCUSTOM;
			}
		}

		WORD _X = 0, _Y = 0;
		for( int i = 0; i < vecPILE.size(); i++ )
		{		
			SITEM* pHoldData = GLItemMan::GetInstance().GetItem ( vecPILE[i].sNativeID );
			if ( !pHoldData )
			{
				//MessageBox(NULL,"if ( !pHoldData )",NULL,NULL);
				continue;
			}
			BOOL bOk = m_cInventory.IsInsertable ( pHoldData->sBasicOp.wInvenSizeX, pHoldData->sBasicOp.wInvenSizeY, _X, _Y );
			if ( !bOk )
			{
				bOk = m_cInventory.FindInsrtable ( pHoldData->sBasicOp.wInvenSizeX, pHoldData->sBasicOp.wInvenSizeY, _X, _Y );
				if ( !bOk )
				{
					//MessageBox(NULL,"bOk = m_cInventory.FindInsrtable ( pHoldData->sBasicOp.wInvenSizeX, pHoldData->sBasicOp.wInvenSizeY, _X, _Y );","",NULL);
					continue;
				}
			}
			bOk = m_cInventory.InsertItem ( vecPILE[i], _X, _Y );
			if ( !bOk )	
			{
				//MessageBox(NULL,"!bOk = m_cInventory.InsertItem ( vecPILE[i], _X, _Y );","",NULL);
				continue;
			}
			
			SINVENITEM sINVENITEM = *m_cInventory.FindPosItem ( _X, _Y );
			
			GLMSG::SNETPC_INVEN_INSERT NetMsg_Inven_Insert;
			NetMsg_Inven_Insert.Data = sINVENITEM;
			GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg_Inven_Insert);

			SITEM *pITEM = GLItemMan::GetInstance().GetItem ( sINVENITEM.sItemCustom.sNativeID );
			if ( pITEM && pITEM->IsTIMELMT() )
			{
				if ( pITEM->sDrugOp.tTIME_LMT != 0 )
				{
					const CTime cTIME_CUR = CTime::GetCurrentTime();

					CTimeSpan cSPAN(pITEM->sDrugOp.tTIME_LMT);
					CTime cTIME_LMT(sINVENITEM.sItemCustom.tBORNTIME);
					cTIME_LMT += cSPAN;

					if ( cTIME_CUR > cTIME_LMT )
					{
						GLMSG::SNETPC_INVEN_DELETE NetMsgInvenDel;
						NetMsgInvenDel.wPosX = sINVENITEM.wPosX;
						NetMsgInvenDel.wPosY = sINVENITEM.wPosY;
						GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgInvenDel);

						GLMSG::SNET_INVEN_DEL_ITEM_TIMELMT NetMsgInvenDelTimeLmt;
						NetMsgInvenDelTimeLmt.nidITEM = sINVENITEM.sItemCustom.sNativeID;
						GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgInvenDelTimeLmt);

						m_cInventory.DeleteItem ( sINVENITEM.wPosX, sINVENITEM.wPosY );
					
					}
				}
			}

			if ( _X < 5 ) _X++;
			else
			{
				_X = 0;
				_Y++;
			}
		}
				GLInventory::CELL_MAP &ItemMapLoop = *m_cInventory.GetItemList();
				GLInventory::CELL_MAP_ITER iter_Loop = ItemMapLoop.begin();
				for ( ; iter_Loop!=ItemMapLoop.end(); ++iter_Loop )
				{
					if (!(*iter_Loop).second ) continue;
					GLInventory::CELL_MAP &ItemMapComp = *m_cInventory.GetItemList();
					GLInventory::CELL_MAP_ITER iter_comp = ItemMapComp.begin();
					for ( ; iter_comp!=ItemMapComp.end(); ++iter_comp )
					{
						if (!(*iter_comp).second ) continue;
						SINVENITEM* sINVENITEM = (*iter_comp).second;
						if ( sINVENITEM )
						{
						SITEMCUSTOM& sItemCustom = sINVENITEM->sItemCustom;
						SITEM *pITEMc = GLItemMan::GetInstance().GetItem ( sItemCustom.sNativeID );
						if ( pITEMc && pITEMc->ISPILE() )
						{
							GLInventory::CELL_MAP &ItemMap = *m_cInventory.GetItemList();
							GLInventory::CELL_MAP_ITER iter = ItemMap.begin();
							for ( ; iter!=ItemMap.end(); ++iter )
							{
								if (!(*iter).second ) continue;
								SINVENITEM* pInvenItem = (*iter).second;
								if ( pInvenItem )
								{
								SITEMCUSTOM& sItemCustoms = pInvenItem->sItemCustom;
								SITEM *pITEM = GLItemMan::GetInstance().GetItem ( pInvenItem->sItemCustom.sNativeID );

								if ( pITEM && pITEM->ISPILE() )
								{
									if ( pITEM->sBasicOp.sNativeID == pITEMc->sBasicOp.sNativeID )
									{
										if( sINVENITEM != pInvenItem ) // compare two
										{
											WORD wINVENX = pITEMc->sBasicOp.wInvenSizeX;
											WORD wINVENY = pITEMc->sBasicOp.wInvenSizeY;

											WORD wPILENUM = pITEMc->sDrugOp.wPileNum;
											SNATIVEID sNID = pITEMc->sBasicOp.sNativeID;

											WORD wREQINSRTNUM = ( sItemCustom.wTurnNum );
											
											if ( sItemCustoms.sNativeID != sItemCustom.sNativeID )	continue;
											if ( sItemCustoms.wTurnNum>=wPILENUM )		continue;
											if ( sItemCustom.wTurnNum>=wPILENUM )		continue;
											WORD wSURPLUSNUM = wPILENUM - sItemCustoms.wTurnNum;

											if ( wREQINSRTNUM > wSURPLUSNUM )
											{
												//MessageBox(NULL,"if ( wREQINSRTNUM > wSURPLUSNUM )",NULL,NULL);
											
												sItemCustoms.wTurnNum = wPILENUM;

												GLMSG::SNETPC_INVEN_DRUG_UPDATE NetMsg;
												NetMsg.wPosX = pInvenItem->wPosX;
												NetMsg.wPosY = pInvenItem->wPosY;
												NetMsg.wTurnNum = sItemCustoms.wTurnNum;
												GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg);

												wREQINSRTNUM -= wSURPLUSNUM;
											}
											else
											{
												sItemCustoms.wTurnNum += wREQINSRTNUM;

												GLMSG::SNETPC_INVEN_DRUG_UPDATE NetMsg;
												NetMsg.wPosX = pInvenItem->wPosX;
												NetMsg.wPosY = pInvenItem->wPosY;
												NetMsg.wTurnNum = sItemCustoms.wTurnNum;
												GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg);

												GLMSG::SNETPC_UPDATE_MONEY NetMsgMoney;
												NetMsgMoney.lnMoney = m_lnMoney;
												GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgMoney);

												m_cInventory.DeleteItem ( sINVENITEM->wPosX, sINVENITEM->wPosY );
												GLMSG::SNETPC_INVEN_DELETE NetMsgInvenDel;
												NetMsgInvenDel.wPosX = sINVENITEM->wPosX;
												NetMsgInvenDel.wPosY = sINVENITEM->wPosY;
												GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgInvenDel);
												
												break;
											}
											
											WORD wONENUM = wREQINSRTNUM / wPILENUM;
											WORD wITEMNUM = wONENUM;

											//	¿©ºÐ°ãħ¾ÆÀÌÅÛÀÇ °ãħ¼ö.
											WORD wSPLITNUM = wREQINSRTNUM % wPILENUM;
											if ( wSPLITNUM > 0 )				wITEMNUM += 1;
											if ( wSPLITNUM==0 && wITEMNUM>=1 )	wSPLITNUM = wPILENUM;

											for ( WORD i=0; i<wITEMNUM; ++i )
											{
												WORD wInsertPosX(0), wInsertPosY(0);
												BOOL bITEM_SPACE = m_cInventory.FindInsrtable ( wINVENX, wINVENY, wInsertPosX, wInsertPosY );
												GASSERT(bITEM_SPACE&&"³ÖÀ» °ø°£À» ¹Ì¸® üũ¸¦ ÇÏ°í ¾ÆÀÌÅÛÀ» ³Ö¾úÀ¸³ª °ø°£ÀÌ ºÎÁ·ÇÔ.");

												//	Note : »õ·Î¿î ¾ÆÀÌÅÛÀ» ³Ö¾îÁÜ.
												//
												SITEMCUSTOM sITEMCUSTOM(sItemCustom.sNativeID);
												sITEMCUSTOM.tBORNTIME = sItemCustom.tBORNTIME;

												sITEMCUSTOM.cGenType = sItemCustom.cGenType;
												sITEMCUSTOM.cChnID = sItemCustom.cChnID;
												sITEMCUSTOM.cFieldID = sItemCustom.cFieldID;

												if ( wITEMNUM==(i+1) )	sITEMCUSTOM.wTurnNum = wSPLITNUM;	//	¸¶Áö¸· ¾ÆÀÌÅÛÀº ÀÜ¿©·®.
												else					sITEMCUSTOM.wTurnNum = wPILENUM;	//	¾Æ´Ò °æ¿ì´Â ²ËÂù·®.

												m_cInventory.InsertItem ( sITEMCUSTOM, wInsertPosX, wInsertPosY );	//	ÀιêÅ丮¿¡ ³Ö½À´Ï´Ù.

												//	Àι꿡 ¾ÆÀÌÅÆ ³Ö¾îÁÖ´Â ¸Þ½ÃÁö.
												GLMSG::SNETPC_INVEN_INSERT NetMsgInven;
												NetMsgInven.Data = *m_cInventory.GetItem ( wInsertPosX, wInsertPosY );
												GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgInven);
												
												m_cInventory.DeleteItem ( sINVENITEM->wPosX, sINVENITEM->wPosY );
												GLMSG::SNETPC_INVEN_DELETE NetMsgInvenDel;
												NetMsgInvenDel.wPosX = sINVENITEM->wPosX;
												NetMsgInvenDel.wPosY = sINVENITEM->wPosY;
												GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgInvenDel);
											}
											break;
										}
									}
								}
							}
						}
					}
				}
			}
		}
	}
	{
		vecPILEDEL.clear();
		vecPILE.clear();
		
		GLInventory::CELL_MAP &ItemMap = *m_cInventory.GetItemList();
		GLInventory::CELL_MAP_ITER iter = ItemMap.begin();
		for ( ; iter!=ItemMap.end(); ++iter )
		{
			if (!(*iter).second ) continue;
			SINVENITEM &sINVENITEM = *(*iter).second;
			SITEMCUSTOM &sITEMCUSTOM = sINVENITEM.sItemCustom;
			SITEM* pHoldData = GLItemMan::GetInstance().GetItem ( sITEMCUSTOM.sNativeID );
			if ( !pHoldData ) continue;
			if( pHoldData && pHoldData->ISPILE() )  
			{
				vecPILE.push_back ( sITEMCUSTOM ); 
				vecPILEDEL.push_back ( SNATIVEID(sINVENITEM.wPosX,sINVENITEM.wPosY) );
			}
		}

		if ( !vecPILEDEL.empty() )
		for ( DWORD i=0; i<vecPILEDEL.size(); ++i )
		{
			m_cInventory.DeleteItem ( vecPILEDEL[i].wMainID, vecPILEDEL[i].wSubID );
			GLMSG::SNETPC_INVEN_DELETE NetMsgDelete;
			NetMsgDelete.wPosX = vecPILEDEL[i].wMainID;
			NetMsgDelete.wPosY = vecPILEDEL[i].wSubID;
			GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgDelete);
		}

		for ( DWORD b=0; b<vecPILE.size(); ++b )
		for ( DWORD c=0; c<vecPILE.size()-1; ++c )
		{
			SITEM* pHoldData = GLItemMan::GetInstance().GetItem ( vecPILE[c].sNativeID );
			if ( !pHoldData )	continue;
			
			SITEM* pHoldData2 = GLItemMan::GetInstance().GetItem ( vecPILE[c+1].sNativeID );
			if ( !pHoldData2 )	continue;
			
			BOOL bCOMPARE = FALSE;
			
			if ( pHoldData->sBasicOp.sNativeID.dwID > pHoldData2->sBasicOp.sNativeID.dwID ) bCOMPARE = TRUE;
			else if ( pHoldData->sBasicOp.sNativeID == pHoldData2->sBasicOp.sNativeID && vecPILE[c].wTurnNum != vecPILE[c+1].wTurnNum ) bCOMPARE = TRUE;
			
			if ( bCOMPARE ) 
			{
				SITEMCUSTOM sCUSTOM = vecPILE[c+1];
				vecPILE[c+1] = vecPILE[c];
				vecPILE[c] = sCUSTOM;
			}
		}

		WORD _X = 0, _Y = 0;
		for( int i = 0; i < vecPILE.size(); i++ )
		{		
			SITEM* pHoldData = GLItemMan::GetInstance().GetItem ( vecPILE[i].sNativeID );
			if ( !pHoldData )
			{
				//MessageBox(NULL,"if ( !pHoldData )",NULL,NULL);
				continue;
			}
			BOOL bOk = m_cInventory.IsInsertable ( pHoldData->sBasicOp.wInvenSizeX, pHoldData->sBasicOp.wInvenSizeY, _X, _Y );
			if ( !bOk )
			{
				bOk = m_cInventory.FindInsrtable ( pHoldData->sBasicOp.wInvenSizeX, pHoldData->sBasicOp.wInvenSizeY, _X, _Y );
				if ( !bOk )
				{
					//MessageBox(NULL,"bOk = m_cInventory.FindInsrtable ( pHoldData->sBasicOp.wInvenSizeX, pHoldData->sBasicOp.wInvenSizeY, _X, _Y );","",NULL);
					continue;
				}
			}
			bOk = m_cInventory.InsertItem ( vecPILE[i], _X, _Y );
			if ( !bOk )	
			{
				//MessageBox(NULL,"!bOk = m_cInventory.InsertItem ( vecPILE[i], _X, _Y );","",NULL);
				continue;
			}
			
			SINVENITEM sINVENITEM = *m_cInventory.FindPosItem ( _X, _Y );
			
			GLMSG::SNETPC_INVEN_INSERT NetMsg_Inven_Insert;
			NetMsg_Inven_Insert.Data = sINVENITEM;
			GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg_Inven_Insert);

			SITEM *pITEM = GLItemMan::GetInstance().GetItem ( sINVENITEM.sItemCustom.sNativeID );
			if ( pITEM && pITEM->IsTIMELMT() )
			{
				if ( pITEM->sDrugOp.tTIME_LMT != 0 )
				{
					const CTime cTIME_CUR = CTime::GetCurrentTime();

					CTimeSpan cSPAN(pITEM->sDrugOp.tTIME_LMT);
					CTime cTIME_LMT(sINVENITEM.sItemCustom.tBORNTIME);
					cTIME_LMT += cSPAN;

					if ( cTIME_CUR > cTIME_LMT )
					{
						GLMSG::SNETPC_INVEN_DELETE NetMsgInvenDel;
						NetMsgInvenDel.wPosX = sINVENITEM.wPosX;
						NetMsgInvenDel.wPosY = sINVENITEM.wPosY;
						GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgInvenDel);

						GLMSG::SNET_INVEN_DEL_ITEM_TIMELMT NetMsgInvenDelTimeLmt;
						NetMsgInvenDelTimeLmt.nidITEM = sINVENITEM.sItemCustom.sNativeID;
						GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgInvenDelTimeLmt);

						m_cInventory.DeleteItem ( sINVENITEM.wPosX, sINVENITEM.wPosY );
					
					}
				}
			}

			if ( _X < 5 ) _X++;
			else
			{
				_X = 0;
				_Y++;
			}
		}
	}

	vecPILEDEL.clear();
	vecPILE.clear();
	vecDEL.clear();
	vecDEL2.clear();
	return S_OK;
}
 
Joined
Feb 19, 2013
Messages
527
Reaction score
101
It can pile items but i think somethings are missing like struc of " SNETPC_REQ_HOLD_ARRAY "
I use struc of old code array item .... it can pile items now, but it doesn't delete image of other part
Ex: i have two fine burr in two slots . After pile it will only have 1 slot with two fine burr but this code error... now it have 2 slot with two fine burr ( one of them can't move cuz it is image only<- code forgot delete this image )
Hope someone can help me .thanks
( i think struc of SNETPC_REQ_HOLD_ARRAY when i compile source , it said that doen't have...)
Sry my bad english...
 
Junior Spellweaver
Joined
May 10, 2014
Messages
140
Reaction score
9
It can pile items but i think somethings are missing like struc of " SNETPC_REQ_HOLD_ARRAY "
I use struc of old code array item .... it can pile items now, but it doesn't delete image of other part
Ex: i have two fine burr in two slots . After pile it will only have 1 slot with two fine burr but this code error... now it have 2 slot with two fine burr ( one of them can't move cuz it is image only<- code forgot delete this image )
Hope someone can help me .thanks
( i think struc of SNETPC_REQ_HOLD_ARRAY when i compile source , it said that doen't have...)
Sry my bad english...

hey bruh base it here http:// forum .ragezone . com/f528/ep7-classic-gameplay-source-gui-1152641/
 
Last edited:
Joined
Jan 17, 2013
Messages
90
Reaction score
17
How do you add a button on the invetory?

my bad, i've start working on this ran development yesterday so i'm learning. thanks.
 
Custom Title Activated
Member
Joined
Jul 16, 2012
Messages
1,310
Reaction score
116
where to declare
error C2065: 'PET_ACCETYPE_SIZE' : undeclared identifier

thanks
Screenshot_82 - Fixed and Working Inventory Item Sort + Pile Items. - RaGEZONE Forums
 

Attachments

You must be registered for see attachments list
Junior Spellweaver
Joined
Nov 18, 2017
Messages
125
Reaction score
64
Sir Rebel92, how about the sort buttong for ep7 ?

well, yesterday I read someone post some twitter button without the function, which is useless(button without function really?)
well guess what?? its not useless,
you can use that,
just change the twitter image to your own sort button image,
and fill the function with this,

GLCharacter* pFuckingChar = GLGaeaClient::GetInstance().GetCharacter();
if(pFuckingChar)
{
pFuckingChar->ReqSortItem ();
}
 
Skilled Illusionist
Joined
Sep 22, 2014
Messages
374
Reaction score
16
Its work does you must remake a code

I hate used in gui
 
Junior Spellweaver
Joined
Jul 17, 2011
Messages
152
Reaction score
3
public: long __thiscall GLCharacter::ReqSortItem(void)" (?ReqSortItem@GLCharacter@@QAEJXZ) already defined in GLCharactorReq.obj; second definition ignored
 
Junior Spellweaver
Joined
Oct 6, 2014
Messages
100
Reaction score
1
c:\Users\Greco\Desktop\Ep7\RanClientLib\G-Logic\GLCharacter.cpp(4161): warning C4244: 'initializing' : conversion from 'SIZE_T' to 'int', possible loss of datac:\Users\Greco\Desktop\Ep7\RanClientLib\G-Logic\GLCharacter.cpp(4187): warning C4800: 'BOOL' : forcing value to bool 'true' or 'false' (performance warning)c:\Users\Greco\Desktop\Ep7\RanClientLib\G-Logic\GLCharacter.cpp(5274): warning C4244: '=' : conversion from 'const WORD' to 'BYTE', possible loss of datac:\Users\Greco\Desktop\Ep7\RanClientLib\G-Logic\GLCharacter.cpp(5302): error C2039: 'SNETPC_REQ_HOLD_ARRAY' : is not a member of 'GLMSG'c:\Users\Greco\Desktop\Ep7\RanClientLib\G-Logic\GLCharacter.cpp(5302): error C2065: 'SNETPC_REQ_HOLD_ARRAY' : undeclared identifierc:\Users\Greco\Desktop\Ep7\RanClientLib\G-Logic\GLCharacter.cpp(5302): error C2146: syntax error : missing ';' before identifier 'NetMsg'c:\Users\Greco\Desktop\Ep7\RanClientLib\G-Logic\GLCharacter.cpp(5302): error C2065: 'NetMsg' : undeclared identifierc:\Users\Greco\Desktop\Ep7\RanClientLib\G-Logic\GLCharacter.cpp(5303): error C3861: 'NetMsg': identifier not found, even with argument-dependent lookup



ANYONE CAN HELP ME WITH MY PROBLEM NEWBIE HERE THANKS AND GOD BLESS
 
Junior Spellweaver
Joined
Jul 17, 2011
Messages
152
Reaction score
3
c:\Users\Greco\Desktop\Ep7\RanClientLib\G-Logic\GLCharacter.cpp(4161): warning C4244: 'initializing' : conversion from 'SIZE_T' to 'int', possible loss of datac:\Users\Greco\Desktop\Ep7\RanClientLib\G-Logic\GLCharacter.cpp(4187): warning C4800: 'BOOL' : forcing value to bool 'true' or 'false' (performance warning)c:\Users\Greco\Desktop\Ep7\RanClientLib\G-Logic\GLCharacter.cpp(5274): warning C4244: '=' : conversion from 'const WORD' to 'BYTE', possible loss of datac:\Users\Greco\Desktop\Ep7\RanClientLib\G-Logic\GLCharacter.cpp(5302): error C2039: 'SNETPC_REQ_HOLD_ARRAY' : is not a member of 'GLMSG'c:\Users\Greco\Desktop\Ep7\RanClientLib\G-Logic\GLCharacter.cpp(5302): error C2065: 'SNETPC_REQ_HOLD_ARRAY' : undeclared identifierc:\Users\Greco\Desktop\Ep7\RanClientLib\G-Logic\GLCharacter.cpp(5302): error C2146: syntax error : missing ';' before identifier 'NetMsg'c:\Users\Greco\Desktop\Ep7\RanClientLib\G-Logic\GLCharacter.cpp(5302): error C2065: 'NetMsg' : undeclared identifierc:\Users\Greco\Desktop\Ep7\RanClientLib\G-Logic\GLCharacter.cpp(5303): error C3861: 'NetMsg': identifier not found, even with argument-dependent lookup






ANYONE CAN HELP ME WITH MY PROBLEM NEWBIE HERE THANKS AND GOD BLESS



check your symbol
 
Back
Top