Elite Diviner
- Joined
- Jul 8, 2015
- Messages
- 489
- Reaction score
- 27
how fix
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!How to fix this one ?
Already declared everything in the corresponding cpp and h files -_-
View attachment 165605View attachment 165606
Sort has bug in item that has Quantity, if item separately then you use sort to restore all quantity, that item quantity combine but separated quantity dont disappear, it only gone if you do relogin.
<br>Sort has bug in item that has Quantity, if item separately then you use sort to restore all quantity, that item quantity combine but separated quantity dont disappear, it only gone if you do relogin.
public: long __thiscall GLCharacter::ReqSortItem(void)" (?ReqSortItem@GLCharacter@@QAEJXZ) already defined in GLCharactorReq.obj; second definition ignored
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; }