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
Apr 22, 2010
Messages
816
Reaction score
83
How to fix this one :(?

Already declared everything in the corresponding cpp and h files -_-

View attachment 165605 error - Fixed and Working Inventory Item Sort + Pile Items. - RaGEZONE Forums
 

Attachments

You must be registered for see attachments list
Joined
Sep 11, 2008
Messages
719
Reaction score
122
How to fix this one :(?

Already declared everything in the corresponding cpp and h files -_-

View attachment 165605View attachment 165606


Hello ! ,
You must declare the functions that has been call in the class.. cause basically the error shows that Msgholdarray s not a Member of GLchar class..
goto GLchar hit Crtl+F: find HRESULT

once you get there declare the variable name....

E.G HRESULT Msgholdarray ( NET_MSG_GENERIC* nmg );


EDIT : and as i read the tutorial , MsgReqHoldArray this is the name of your variable ? or MsgHoldsArray ?



A TIP : firstly dont mess with the code if you are not familiar just follow the tutorial first then if it works then you can start something doing different :)
 
Last edited:
Newbie Spellweaver
Joined
Feb 19, 2014
Messages
32
Reaction score
0
Thanks for the source, algorithm is perfect just need to declare functions and symbols :)
 
Joined
Feb 4, 2014
Messages
962
Reaction score
36
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.
 
Newbie Spellweaver
Joined
Aug 1, 2017
Messages
88
Reaction score
3
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.

Yes it has.., thus anyone find fix for this one ?



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>
<br>Yes it has.., thus anyone find fix for this one ?
 
Newbie Spellweaver
Joined
May 24, 2020
Messages
71
Reaction score
4
i've managed to compile this without error, but when i try to click the buttons, it says disabled or not available. where can i edit the function of buttons ??
 
Newbie Spellweaver
Joined
May 13, 2020
Messages
29
Reaction score
1
ha ha false 21





help me plz
 
Newbie Spellweaver
Joined
Sep 30, 2018
Messages
71
Reaction score
3
Hi all,
Has anyone worked?

I have followed the steps, but still an error...

need more help.
Thanks
 
Newbie Spellweaver
Joined
Aug 9, 2020
Messages
40
Reaction score
1
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;
}


Please Help. I successfully compile it, but when I click the item sort in inventory using emulator. It said, "Disable".
 
Back
Top