- 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
{
GLCharacter.h
Declare this
GLCharacter.cpp
Add This
GLGaeaServerMsg.cpp
Add This
GLCharMsg.cpp
Add This
GLChar.h
Declare this
GLCharInvenMsg.cpp ( NOW HERE's THE ALGORITHM STARTS )
Add This
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;
}