Urban Gaming Client/Database/Source Code Only

Page 18 of 57 FirstFirst ... 8101112131415161718192021222324252628 ... LastLast
Results 256 to 270 of 846
  1. #256
    Enthusiast akoikaw2323 is offline
    MemberRank
    Feb 2019 Join Date
    41Posts

    Re: Urban Gaming Client/Database/Source Code Only

    Quote Originally Posted by thewinner3 View Post
    use ip form hamachi ipv4 with CFG+Param and off firewall
    Still not working

    - - - Updated - - -

    Quote Originally Posted by caspian0 View Post
    yeah...
    Still not working sir.

    - - - Updated - - -

    a.png
    Please help
    How to remove the folder after closing the game.
    How to change the name?
    ab.png

  2. #257
    Member captainboy95 is offline
    MemberRank
    Feb 2018 Join Date
    78Posts

    Re: Urban Gaming Client/Database/Source Code Only

    Quote Originally Posted by akoikaw2323 View Post
    Still not working

    - - - Updated - - -



    Still not working sir.

    - - - Updated - - -

    a.png
    Please help
    How to remove the folder after closing the game.
    How to change the name?
    ab.png
    cfg login port change to 7545 n param.ini nPort change into 7545 .
    --------------
    i got problem that "You Are Unable To Enter This Area" i cant enter SG school .. please help thanks

  3. #258
    Account Upgraded | Title Enabled! LUPIN III is offline
    MemberRank
    Dec 2012 Join Date
    Ran PlanetLocation
    1,127Posts

    Re: Urban Gaming Client/Database/Source Code Only

    Quote Originally Posted by akoikaw2323 View Post
    Still not working

    - - - Updated - - -



    Still not working sir.

    - - - Updated - - -

    a.png
    Please help
    How to remove the folder after closing the game.
    How to change the name?
    ab.png


    main problem is your cfg use another cfg then configure carefully and correctly all cfg files.. specially a port

  4. #259
    Member captainboy95 is offline
    MemberRank
    Feb 2018 Join Date
    78Posts

    Re: Urban Gaming Client/Database/Source Code Only

    Quote Originally Posted by LUPIN III View Post
    main problem is your cfg use another cfg then configure carefully and correctly all cfg files.. specially a port
    hi i got problem that "You Are Unable To Enter This Area" i cant enter SG school .. please help thanks

  5. #260
    -sad- sadlove92 is offline
    MemberRank
    Feb 2013 Join Date
    Earth 615 - VNLocation
    449Posts

    Re: Urban Gaming Client/Database/Source Code Only

    you need tyranny cfg at glogicserver.rcc
    if you don't have it tyranny will defaul id 0,0 is id map for tyranny. use cmd to enter that map .you will see tyranny info same with tyranny at normal map

  6. #261
    Account Upgraded | Title Enabled! caspian0 is offline
    MemberRank
    Jul 2012 Join Date
    1,321Posts

    Re: Urban Gaming Client/Database/Source Code Only

    i have some problem with implementing rv on items ...there are items with rv 100+ cannot be equipped.. and other too like in the picture.. cannot be put on weapon slot... have you tried this guys? same with armors.

    where to set maximum rv on source code that supports 100+ rv?



  7. #262
    Account Upgraded | Title Enabled! aizen00 is offline
    MemberRank
    Feb 2019 Join Date
    511Posts

    Re: Urban Gaming Client/Database/Source Code Only

    Quote Originally Posted by caspian0 View Post
    i have some problem with implementing rv on items ...there are items with rv 100+ cannot be equipped.. and other too like in the picture.. cannot be put on weapon slot... have you tried this guys? same with armors.

    where to set maximum rv on source code that supports 100+ rv?


    check the glcharinvenmsg or glcharactorreq. there is a line of code in there that restrict any item with 100+ rv or 50% rv in any item . just comment it or make the value higher .

    ps:sorry for the bad english :)

  8. #263
    Account Upgraded | Title Enabled! caspian0 is offline
    MemberRank
    Jul 2012 Join Date
    1,321Posts

    Re: Urban Gaming Client/Database/Source Code Only

    Quote Originally Posted by aizen00 View Post
    check the glcharinvenmsg or glcharactorreq. there is a line of code in there that restrict any item with 100+ rv or 50% rv in any item . just comment it or make the value higher .

    ps:sorry for the bad english :)
    nothing on both sir...

    glcharinvenmsg
    PHP Code:
    #include "stdafx.h"
    #include "./GLChar.h"
    #include "./GLogicEx.h"
    #include "./GLGaeaServer.h"
    #include "./GLItemLMT.h"
    #include "./GLItemMan.h"
    #include "../enginelib/Common/StringUtils.h"
    #include "RanFilter.h"
    #include "./GLItemMixMan.h"
    //crashfix
    //#include "../../RanClientUILib/Interface/GameTextControl.h"
    //#include "../../RanClientUILib/Interface/InnerInterface.h"
    //#include "../../RanClientUILib/Interface/UITextControl.h"

    #ifdef _DEBUG
    #define new DEBUG_NEW
    #endif

    //    Note : Àκ¥¾ÆÀÌÅÛÀ» ¼Ò¸ð½ÃÅ´.
    //        2. ¼Ò¸ð¸¦ Å¬¶óÀÌ¾ðÆ®¿¡ ¾Ë¸².
    //        3. b2AGENT º¯¼ö´Â Å¬¶óÀÌ¾ðÆ®¿¡ ¾Ë¸±¶§ Çʵå¿ÍÀÇ ¿¬°á¼ºÀÌ ºÒÈ®½Ç ÇÒ °æ¿ì¸¦ ´ëºñÇÏ¿©
    //            ¿¡ÀÌÁ¯Æ®¸¦ ÅëÇØ¼­ ¾Ë¸±¼ö ÀÖµµ·Ï ÇÔ.
    bool GLChar::DoDrugInvenItem WORD wPosXWORD wPosYbool b2AGENT )
    {
        
    //    Àκ¥ÀÇ ¾ÆÀÌÅÛ È®ÀÎ.
        
    SINVENITEM *pINVENITEM m_cInventory.FindPosItem wPosXwPosY );
        if ( !
    pINVENITEM )        return false;

        
    //    ¾ÆÀÌÅÛ Á¤º¸ °¡Á®¿È.
        
    SITEMpItem GLItemMan::GetInstance().GetItem pINVENITEM->sItemCustom.sNativeID );
        if ( !
    pItem )            return false;

        if ( 
    pItem->sDrugOp.bInstance )
        {
            if ( 
    pINVENITEM->sItemCustom.wTurnNum )        pINVENITEM->sItemCustom.wTurnNum--;
        
            
    //    Note :¾ÆÀÌÅÛÀÇ ¼ÒÀ¯ ÀÌÀü °æ·Î ±â·Ï.
            //
            
    GLITEMLMT::GetInstance().ReqItemRoute pINVENITEM->sItemCustomID_CHARm_dwCharIDID_CHAR0EMITEM_ROUTE_DELETE);

            if ( 
    pINVENITEM->sItemCustom.wTurnNum==)
            {
                
    //    ¾ÆÀÌÅÆ Á¦°Å.
                
    m_cInventory.DeleteItem wPosXwPosY );

                
    //    [Àڽſ¡°Ô] Àι꿡 ¾ÆÀÌÅÆ Á¦°Å.
                
    GLMSG::SNETPC_INVEN_DELETE NetMsg_Inven_Delete;
                
    NetMsg_Inven_Delete.wPosX wPosX;
                
    NetMsg_Inven_Delete.wPosY wPosY;
                if ( 
    b2AGENT )    GLGaeaServer::GetInstance().SENDTOAGENT(m_dwClientID,&NetMsg_Inven_Delete);
                else            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg_Inven_Delete);
            }
            else
            {
                
    //    [Àڽſ¡°Ô] Àι꠾ÆÀÌÅÆ ¼Ò¸ðµÊ.
                
    GLMSG::SNETPC_INVEN_DRUG_UPDATE NetMsg_Inven_Update;
                
    NetMsg_Inven_Update.wPosX wPosX;
                
    NetMsg_Inven_Update.wPosY wPosY;
                
    NetMsg_Inven_Update.wTurnNum pINVENITEM->sItemCustom.wTurnNum;

                if ( 
    b2AGENT )    GLGaeaServer::GetInstance().SENDTOAGENT(m_dwClientID,&NetMsg_Inven_Update);
                else            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg_Inven_Update);
            }
        }


        
    // ÄðŸÀÓ Àû¿ë
        
    if ( pItem->sBasicOp.IsCoolTime() ) 
        {
            
    SetCoolTimepINVENITEM->sItemCustom.sNativeID pItem->sBasicOp.emCoolType );
        }

        return 
    true;
    }

    bool GLChar::DoDrugSlotItem EMSLOT emSLOT,  WORD wNum )
    {
        if ( 
    emSLOT >= SLOT_TSIZE )        return false;

        
    SITEMCUSTOMsSLOTITEM m_PutOnItems[emSLOT];
        
    SITEMpItem GLItemMan::GetInstance().GetItem sSLOTITEM.sNativeID );
        if ( !
    pItem )                    return false;

        
    // ¼Ò¸ð¼º ¾ÆÀÌÅÛÀÏ °æ¿ì
        
    if ( pItem->ISINSTANCE() )
        {
            if ( 
    sSLOTITEM.wTurnNum >= wNum )        sSLOTITEM.wTurnNum -= wNum;

            
    //    Note :¾ÆÀÌÅÛÀÇ ¼ÒÀ¯ ÀÌÀü °æ·Î ±â·Ï.
            //
            
    GLITEMLMT::GetInstance().ReqItemRoute sSLOTITEMID_CHARm_dwCharIDID_CHAR0EMITEM_ROUTE_DELETEsSLOTITEM.wTurnNum );

            if ( 
    sSLOTITEM.wTurnNum==)
            {
                
    //    HOLD ¾ÆÀÌÅÆ Á¦°Å.
                
    RELEASE_SLOT_ITEM emSLOT );

                
    //    [Àڽſ¡°Ô] ½½·Ô¿¡ ÀÖ¾ú´ø ¾ÆÀÌÅÆ Á¦°Å.
                
    GLMSG::SNETPC_PUTON_RELEASE NetMsg_Release(emSLOT);
                
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg_Release);
            }
            else
            {
                
    //    [Àڽſ¡°Ô] ¿¬¸¶Á¦ÀÇ ¿¬¸¶°¡´É È½¼ö °¨¼Ò.
                
    GLMSG::SNETPC_PUTON_DRUG_UPDATE NetMsg_Update;
                
    NetMsg_Update.emSlot emSLOT;
                
    NetMsg_Update.wTurnNum sSLOTITEM.wTurnNum;
                
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg_Update);
            }
        }
        else
        {
            
    //    ±âÇÑ ¾ÆÀÌÅÛÀÏ °æ¿ì
            
    GLITEMLMT::GetInstance().ReqItemRoute sSLOTITEMID_CHARm_dwCharIDID_CHAR0EMITEM_ROUTE_DELETE);
        }

        
    // ÄðŸÀÓ Àû¿ë
        
    if ( pItem->sBasicOp.IsCoolTime() ) 
        {
            
    SetCoolTimesSLOTITEM.sNativeID pItem->sBasicOp.emCoolType );
        }

        return 
    true;
    }

    bool GLChar::IsInsertToInven PITEMDROP pItemDropbool bVietnamInven )
    {
        
    GASSERT(pItemDrop&&"GLChar::IsItemToInven()");
        if ( !
    pItemDrop )    return false;

        
    SITEM *pItem GLItemMan::GetInstance().GetItem(pItemDrop->sItemCustom.sNativeID);
        if ( !
    pItem )        return false;

        if ( 
    pItem->ISPILE() )
        {
            
    WORD wINVENX pItem->sBasicOp.wInvenSizeX;
            
    WORD wINVENY pItem->sBasicOp.wInvenSizeY;

            
    //    °ãħ ¾ÆÀÌÅÛÀÏ °æ¿ì.
            
    WORD wPILENUM pItem->sDrugOp.wPileNum;
            
    SNATIVEID sNID pItem->sBasicOp.sNativeID;

            
    //    ³Ö±â ¿äûµÈ ¾ÆÀÌÅÛ¼ö. ( ÀÜ¿©·®. )
            
    WORD wREQINSRTNUM = ( pItemDrop->sItemCustom.wTurnNum );

            
    BOOL bITEM_SPACE TRUE;
            if( 
    bVietnamInven )
                
    bITEM_SPACE m_cVietnamInventory.ValidPileInsrt wREQINSRTNUMsNIDwPILENUMwINVENXwINVENY );
            else
                
    bITEM_SPACE m_cInventory.ValidPileInsrt wREQINSRTNUMsNIDwPILENUMwINVENXwINVENY );

            if ( !
    bITEM_SPACE )        return false;
        }
        else
        {
            
    WORD wPosXwPosY;
            
    BOOL bOk TRUE;
            if( 
    bVietnamInven )
                
    bOk m_cVietnamInventory.FindInsrtable pItem->sBasicOp.wInvenSizeXpItem->sBasicOp.wInvenSizeYwPosXwPosY );
            else
                
    bOk m_cInventory.FindInsrtable pItem->sBasicOp.wInvenSizeXpItem->sBasicOp.wInvenSizeYwPosXwPosY );

            if ( !
    bOk )                return false;
        }

        return 
    true;
    }

    /* ºñȰ¼ºÈ­ Àκ¥Å丮¿¡µµ ¹«¾ð°¡ ³ÖÀ»¼ö ÀÖ´Ù.*/
    bool GLChar::IsInsertToInvenEx PITEMDROP pItemDrop )
    {
        
    GASSERT(pItemDrop&&"GLChar::IsItemToInven()");
        if ( !
    pItemDrop )    return false;

        
    SITEM *pItem GLItemMan::GetInstance().GetItem(pItemDrop->sItemCustom.sNativeID);
        if ( !
    pItem )        return false;

        if ( 
    pItem->ISPILE() )
        {
            
    WORD wINVENX pItem->sBasicOp.wInvenSizeX;
            
    WORD wINVENY pItem->sBasicOp.wInvenSizeY;

            
    //    °ãħ ¾ÆÀÌÅÛÀÏ °æ¿ì.
            
    WORD wPILENUM pItem->sDrugOp.wPileNum;
            
    SNATIVEID sNID pItem->sBasicOp.sNativeID;

            
    //    ³Ö±â ¿äûµÈ ¾ÆÀÌÅÛ¼ö. ( ÀÜ¿©·®. )
            
    WORD wREQINSRTNUM = ( pItemDrop->sItemCustom.wTurnNum );

            
    BOOL bITEM_SPACE m_cInventory.ValidPileInsrt wREQINSRTNUMsNIDwPILENUMwINVENXwINVENYtrue );
            if ( !
    bITEM_SPACE )        return false;
        }
        else
        {
            
    WORD wPosXwPosY;
            
    BOOL bOk m_cInventory.FindInsrtable pItem->sBasicOp.wInvenSizeXpItem->sBasicOp.wInvenSizeYwPosXwPosYtrue );
            if ( !
    bOk )                return false;
        }

        return 
    true;
    }

    HRESULT GLChar::InsertToVNGainInvenPITEMDROP pItemDrop )
    {

        
    GASSERT(pItemDrop&&"GLChar::InsertToInven()");
        if ( !
    pItemDrop )    return E_FAIL;

        
    SITEM *pItem GLItemMan::GetInstance().GetItem(pItemDrop->sItemCustom.sNativeID);
        if ( !
    pItem )        return E_FAIL;

         
    bool bITEM_SPACE IsInsertToInven pItemDropTRUE );
        if ( !
    bITEM_SPACE )
        {
            
    //    ÀιêÀÌ °¡µæÂ÷¼­ ¾ÆÀÌÅÆÀ» ³ÖÀ»¼ö ¾ø½À´Ï´Ù.
            
    GLMSG::SNETPC_REQ_TAKE_FB NetMsg;
            
    NetMsg.emCrow CROW_ITEM;
            
    NetMsg.emTakeFB EMTAKE_FB_INVEN_ERROR;

            
    GLGaeaServer::GetInstance().SENDTOCLIENT m_dwClientID, &NetMsg );
            return 
    E_FAIL;
        }


        if ( 
    pItem->ISPILE() )
        {
            
    WORD wINVENX pItem->sBasicOp.wInvenSizeX;
            
    WORD wINVENY pItem->sBasicOp.wInvenSizeY;

            
    //    °ãħ ¾ÆÀÌÅÛÀÏ °æ¿ì.
            
    WORD wPILENUM pItem->sDrugOp.wPileNum;
            
    SNATIVEID sNID pItem->sBasicOp.sNativeID;

            
    //    ³Ö±â ¿äûµÈ ¾ÆÀÌÅÛ¼ö. ( ÀÜ¿©·®. )
            
    WORD wREQINSRTNUM = ( pItemDrop->sItemCustom.wTurnNum );



            
    //    Note : ´õ °ãÃÄÁú¼ö Àִ ¾ÆÀÌÅÛÀÌ ÀÖ´ÂÁö °Ë»çÇÏ¿© Àκ¥¿¡ µé¾î°¡¾ßÇÏ´Â
            //        ¾ÆÀÌÅÛ Á¡°Ë ¼ýÀÚ¸¦ °¨¼Ò½ÃÅ´.
            
    GLInventory::CELL_MAP &ItemMap = *m_cVietnamInventory.GetItemList();
            
    GLInventory::CELL_MAP_ITER iter ItemMap.begin();
            for ( ; 
    iter!=ItemMap.end(); ++iter )
            {
                
    SINVENITEM &sINVENITEM = *(*iter).second;
                
    SITEMCUSTOM &sITEMCUSTOM sINVENITEM.sItemCustom;
                if ( 
    sITEMCUSTOM.sNativeID != sNID )        continue;
                if ( 
    sITEMCUSTOM.wTurnNum>=wPILENUM )        continue;

                
    //    ±âÁ¸ ¾ÆÀÌÅÛ °ãħ ¿©À¯ºÐ.
                
    WORD wSURPLUSNUM wPILENUM sITEMCUSTOM.wTurnNum;

                if ( 
    wREQINSRTNUM wSURPLUSNUM )
                {
                    
    //    Note : ±âÁ¸ ¾ÆÀÌÅÛÀÇ °ãħÀ» º¯°æ. ( ²ËÂü )
                    
    sITEMCUSTOM.wTurnNum wPILENUM;

                    
    //    Note : Å¬¶óÀÌ¾ðÆ®¿¡ °¹¼ö º¯°æÀ» ¾Ë¸².
                    
    GLMSG::SNETPC_INVEN_DRUG_UPDATE NetMsg;
                    
    NetMsg.bVietnamInven TRUE;
                    
    NetMsg.wPosX sINVENITEM.wPosX;
                    
    NetMsg.wPosY sINVENITEM.wPosY;
                    
    NetMsg.wTurnNum sITEMCUSTOM.wTurnNum;
                    
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg);

                    
    //    Note : ÀÜ¿© ¼ö·® °¨¼Ò.
                    
    wREQINSRTNUM -= wSURPLUSNUM;
                }
                else
                {
                    
    //    Note : ±âÁ¸ ¾ÆÀÌÅÛ¿¡ °ãÄ¡´Â °Í ¸¸À¸·Îµµ »õ·Î ³ÖÀ» ¾ÆÀÌÅÛÀÌ ÃæºÐÈ÷ µé¾î°¨.
                    
    sITEMCUSTOM.wTurnNum += wREQINSRTNUM;

                    
    //    Note : Å¬¶óÀÌ¾ðÆ®¿¡ °¹¼ö º¯°æÀ» ¾Ë¸².
                    
    GLMSG::SNETPC_INVEN_DRUG_UPDATE NetMsg;
                    
    NetMsg.bVietnamInven TRUE;
                    
    NetMsg.wPosX sINVENITEM.wPosX;
                    
    NetMsg.wPosY sINVENITEM.wPosY;
                    
    NetMsg.wTurnNum sITEMCUSTOM.wTurnNum;
                    
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg);

                    
    //    Note : ÆÄƼ¿øÀÏ °æ¿ì ´Ù¸¥ ÆÄƼ¿ø¿¡°Ô ¾ÆÀÌÅÛ ½Àµæ ¾Ë¸².
                    //
                    
    GLPARTY_FIELD *pParty GLGaeaServer::GetInstance().GetParty m_dwPartyID );
                    if ( 
    pParty )
                    {
                        
    GLMSG::SNETPC_PARTY_MBR_PICKUP_BRD NetMsg;
                        
    NetMsg.dwGaeaID m_dwGaeaID;
                        
    NetMsg.sNID_ITEM pItemDrop->sItemCustom.sNativeID;
                        
    pParty->SENDMSG2NEAR this, &NetMsg );
                    }

                    
    //    Note : ¾ÆÀÌÅÆ Land¿¡¼­ »èÁ¦.
                    
    m_pLandMan->DropOutItem pItemDrop->dwGlobID );

                    return 
    S_OK;
                }
            }

            
    //    Note : »õ·ÎÀÌ Àκ¥¿¡ µé¾î°¡¾ßÇÒ ¾ÆÀÌÅÛÀÇ °¹¼ö ÆÄ¾ÇÈÄ Àκ¥¿¡ µé¾î°¥ °ø°£ÀÌ ÀÖ´ÂÁö °Ë»ç.

            //    ÃÖ´ë°ãħ¾ÆÀÌÅÛ ¼ö·®.
            
    WORD wONENUM wREQINSRTNUM wPILENUM;
            
    WORD wITEMNUM wONENUM;

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

            for ( 
    WORD i=0i<wITEMNUM; ++)
            {
                
    WORD wInsertPosX(0), wInsertPosY(0);
                
    BOOL bSPACE m_cVietnamInventory.FindInsrtable wINVENXwINVENYwInsertPosXwInsertPosY );
                
    GASSERT(bSPACE&&"³ÖÀ» °ø°£À» ¹Ì¸® Ã¼Å©¸¦ ÇÏ°í ¾ÆÀÌÅÛÀ» ³Ö¾úÀ¸³ª °ø°£ÀÌ ºÎÁ·ÇÔ.");
                if ( !
    bSPACE )            return E_FAIL;    //    ½ÇÁ¦·Î´Â Á¡°ËÀÌ ³¡³´±â ¶§¹®¿¡ ¿À·ù¹ß»ý °¡´É¼ºÀÌ ¾øÀ½.

                //    Note : »õ·Î¿î ¾ÆÀÌÅÛÀ» ³Ö¾îÁÜ.
                //
                
    SITEMCUSTOM sITEMCUSTOM pItemDrop->sItemCustom;
                if ( 
    wITEMNUM==(i+1) )    sITEMCUSTOM.wTurnNum wSPLITNUM;    //    ¸¶Áö¸· ¾ÆÀÌÅÛÀº ÀÜ¿©·®.
                
    else                    sITEMCUSTOM.wTurnNum wPILENUM;    //    ¾Æ´Ò °æ¿ì´Â ²ËÂù·®.

                //    ÀιêÅ丮¿¡ ³Ö½À´Ï´Ù.
                
    sITEMCUSTOM.bVietnamGainItem true;
                
    m_cVietnamInventory.InsertItem sITEMCUSTOMwInsertPosXwInsertPosY );
                
    SINVENITEM *pInvenItem m_cVietnamInventory.GetItem wInsertPosXwInsertPosY );
                if ( !
    pInvenItem )        return E_FAIL;    //    ½ÇÁ¦·Î´Â Á¡°ËÀÌ ³¡³´±â ¶§¹®¿¡ ¿À·ù¹ß»ý °¡´É¼ºÀÌ ¾øÀ½.

                //    Àι꿡 ¾ÆÀÌÅÆ ³Ö¾îÁִ ¸Þ½ÃÁö.
                
    GLMSG::SNETPC_INVEN_INSERT NetMsgInven;
                
    NetMsgInven.bVietnamInven TRUE;
                
    NetMsgInven.Data = *pInvenItem;
                
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgInven);
            }

            
    //    Note : ÆÄƼ¿øÀÏ °æ¿ì ´Ù¸¥ ÆÄƼ¿ø¿¡°Ô ¾ÆÀÌÅÛ ½Àµæ ¾Ë¸².
            //
            
    GLPARTY_FIELD *pParty GLGaeaServer::GetInstance().GetParty m_dwPartyID );
            if ( 
    pParty )
            {
                
    GLMSG::SNETPC_PARTY_MBR_PICKUP_BRD NetMsg;
                
    NetMsg.dwGaeaID m_dwGaeaID;
                
    NetMsg.sNID_ITEM pItemDrop->sItemCustom.sNativeID;
                
    pParty->SENDMSG2NEAR this, &NetMsg );
            }

            
    //    Note : ¾ÆÀÌÅÛ ½Àµæ½Ã ÀÚµ¿ Äù½ºÆ® ½ÃÀÛ Á¡°Ë.
            //  ³ªÁß¿¡ »ìÆìºÁ¾ß ÇÒ°÷ 
            //QuestStartFromGetITEM ( pItemDrop->sItemCustom.sNativeID );

            //    Note : PILE °ãħ ¾ÆÀÌÅÛÀ̹ǷΠ·Î±× ÀÛ¼º ºÒ°¡´É.
            //

            //    Note : ¾ÆÀÌÅÆ Land¿¡¼­ »èÁ¦.
            
    m_pLandMan->DropOutItem pItemDrop->dwGlobID );
        }
        else
        {
            
    WORD wPosXwPosY;
            
    BOOL bOk m_cVietnamInventory.FindInsrtable pItem->sBasicOp.wInvenSizeXpItem->sBasicOp.wInvenSizeYwPosXwPosY );
            if ( !
    bOk )            return E_FAIL;    //    ½ÇÁ¦·Î´Â Á¡°ËÀÌ ³¡³´±â ¶§¹®¿¡ ¿À·ù¹ß»ý °¡´É¼ºÀÌ ¾øÀ½.

            //    Note : ¾ÆÀÌÅÆ Áݱ⠼º°ø.
            
    pItemDrop->sItemCustom.bVietnamGainItem true;
            
    m_cVietnamInventory.InsertItem pItemDrop->sItemCustomwPosXwPosY );
            
    SINVENITEM *pInvenItem m_cVietnamInventory.GetItem wPosXwPosY );
            if ( !
    pInvenItem )    return E_FAIL;    //    ½ÇÁ¦·Î´Â Á¡°ËÀÌ ³¡³´±â ¶§¹®¿¡ ¿À·ù¹ß»ý °¡´É¼ºÀÌ ¾øÀ½.

            //    Note : ÆÄƼ¿øÀÏ °æ¿ì ´Ù¸¥ ÆÄƼ¿ø¿¡°Ô ¾ÆÀÌÅÛ ½Àµæ ¾Ë¸².
            //
            
    GLPARTY_FIELD *pParty GLGaeaServer::GetInstance().GetParty m_dwPartyID );
            if ( 
    pParty )
            {
                
    GLMSG::SNETPC_PARTY_MBR_PICKUP_BRD NetMsg;
                
    NetMsg.dwGaeaID m_dwGaeaID;
                
    NetMsg.sNID_ITEM pItemDrop->sItemCustom.sNativeID;
                
    pParty->SENDMSG2NEAR this, &NetMsg );
            }



            
    //    [Àڽſ¡°Ô] ¸Þ½ÃÁö ¹ß»ý.
            
    GLMSG::SNETPC_INVEN_INSERT NetMsg_Inven;
            
    NetMsg_Inven.bVietnamInven TRUE;
            
    NetMsg_Inven.Data = *pInvenItem;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg_Inven);

            
    //    Note : ¾ÆÀÌÅÛ ½Àµæ½Ã ÀÚµ¿ Äù½ºÆ® ½ÃÀÛ Á¡°Ë.
            //  ³ªÁß¿¡ »ìÆìºÁ¾ß ÇÒ°÷ 
            //QuestStartFromGetITEM ( pItemDrop->sItemCustom.sNativeID );

            //    Note : ¾ÆÀÌÅÆ Land¿¡¼­ »èÁ¦.
            
    m_pLandMan->DropOutItem pItemDrop->dwGlobID );
        }


        return 
    S_OK;
    }

    HRESULT GLChar::InsertToInven PITEMDROP pItemDrop )
    {
        
    //NeedToSaveValue _C

        
    GASSERT(pItemDrop&&"GLChar::InsertToInven()");
        if ( !
    pItemDrop )    return E_FAIL;

        
    SITEM *pItem GLItemMan::GetInstance().GetItem(pItemDrop->sItemCustom.sNativeID);
        if ( !
    pItem )        return E_FAIL;

        
    bool bITEM_SPACE IsInsertToInven pItemDrop );
        if ( !
    bITEM_SPACE )
        {
            
    //    ÀιêÀÌ °¡µæÂ÷¼­ ¾ÆÀÌÅÆÀ» ³ÖÀ»¼ö ¾ø½À´Ï´Ù.
            
    GLMSG::SNETPC_REQ_TAKE_FB NetMsg;
            
    NetMsg.emCrow CROW_ITEM;
            
    NetMsg.emTakeFB EMTAKE_FB_INVEN_ERROR;

            
    GLGaeaServer::GetInstance().SENDTOCLIENT m_dwClientID, &NetMsg );
            return 
    E_FAIL;
        }

        if ( 
    pItem->ISPILE() )
        {
            
    WORD wINVENX pItem->sBasicOp.wInvenSizeX;
            
    WORD wINVENY pItem->sBasicOp.wInvenSizeY;

            
    //    °ãħ ¾ÆÀÌÅÛÀÏ °æ¿ì.
            
    WORD wPILENUM pItem->sDrugOp.wPileNum;
            
    SNATIVEID sNID pItem->sBasicOp.sNativeID;

            
    //    ³Ö±â ¿äûµÈ ¾ÆÀÌÅÛ¼ö. ( ÀÜ¿©·®. )
            
    WORD wREQINSRTNUM = ( pItemDrop->sItemCustom.wTurnNum );

            
    //    Note :¾ÆÀÌÅÛÀÇ ¼ÒÀ¯ ÀÌÀü °æ·Î ±â·Ï.
            //
            
    GLITEMLMT::GetInstance().ReqItemRoute pItemDrop->sItemCustomID_CHAR0ID_CHARm_dwCharIDEMITEM_ROUTE_CHARpItemDrop->sItemCustom.wTurnNum );

            
    //    Note : ´õ °ãÃÄÁú¼ö Àִ ¾ÆÀÌÅÛÀÌ ÀÖ´ÂÁö °Ë»çÇÏ¿© Àκ¥¿¡ µé¾î°¡¾ßÇÏ´Â
            //        ¾ÆÀÌÅÛ Á¡°Ë ¼ýÀÚ¸¦ °¨¼Ò½ÃÅ´.
            
    GLInventory::CELL_MAP &ItemMap = *m_cInventory.GetItemList();
            
    GLInventory::CELL_MAP_ITER iter ItemMap.begin();
            for ( ; 
    iter!=ItemMap.end(); ++iter )
            {
                
    SINVENITEM &sINVENITEM = *(*iter).second;
                
    SITEMCUSTOM &sITEMCUSTOM sINVENITEM.sItemCustom;
                if ( 
    sITEMCUSTOM.sNativeID != sNID )        continue;
                if ( 
    sITEMCUSTOM.wTurnNum>=wPILENUM )        continue;
            
                
    //    ±âÁ¸ ¾ÆÀÌÅÛ °ãħ ¿©À¯ºÐ.
                
    WORD wSURPLUSNUM wPILENUM sITEMCUSTOM.wTurnNum;

                if ( 
    wREQINSRTNUM wSURPLUSNUM )
                {
                    
    //    Note : ±âÁ¸ ¾ÆÀÌÅÛÀÇ °ãħÀ» º¯°æ. ( ²ËÂü )
                    
    sITEMCUSTOM.wTurnNum wPILENUM;

                    
    //    Note : Å¬¶óÀÌ¾ðÆ®¿¡ °¹¼ö º¯°æÀ» ¾Ë¸².
                    
    GLMSG::SNETPC_INVEN_DRUG_UPDATE NetMsg;
                    
    NetMsg.wPosX sINVENITEM.wPosX;
                    
    NetMsg.wPosY sINVENITEM.wPosY;
                    
    NetMsg.wTurnNum sITEMCUSTOM.wTurnNum;
                    
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg);

                    
    //    Note : ÀÜ¿© ¼ö·® °¨¼Ò.
                    
    wREQINSRTNUM -= wSURPLUSNUM;
                }
                else
                {
                    
    //    Note : ±âÁ¸ ¾ÆÀÌÅÛ¿¡ °ãÄ¡´Â °Í ¸¸À¸·Îµµ »õ·Î ³ÖÀ» ¾ÆÀÌÅÛÀÌ ÃæºÐÈ÷ µé¾î°¨.
                    
    sITEMCUSTOM.wTurnNum += wREQINSRTNUM;

                    
    //    Note : Å¬¶óÀÌ¾ðÆ®¿¡ °¹¼ö º¯°æÀ» ¾Ë¸².
                    
    GLMSG::SNETPC_INVEN_DRUG_UPDATE NetMsg;
                    
    NetMsg.wPosX sINVENITEM.wPosX;
                    
    NetMsg.wPosY sINVENITEM.wPosY;
                    
    NetMsg.wTurnNum sITEMCUSTOM.wTurnNum;
                    
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg);

                    
    //    Note : ÆÄƼ¿øÀÏ °æ¿ì ´Ù¸¥ ÆÄƼ¿ø¿¡°Ô ¾ÆÀÌÅÛ ½Àµæ ¾Ë¸².
                    //
                    
    GLPARTY_FIELD *pParty GLGaeaServer::GetInstance().GetParty m_dwPartyID );
                    if ( 
    pParty )
                    {
                        
    GLMSG::SNETPC_PARTY_MBR_PICKUP_BRD NetMsg;
                        
    NetMsg.dwGaeaID m_dwGaeaID;
                        
    NetMsg.sNID_ITEM pItemDrop->sItemCustom.sNativeID;
                        
    pParty->SENDMSG2NEAR this, &NetMsg );
                    }

                    
    GLMSG::SNETPC_PICKUP_ITEM NetMsgPickUp;
                    
    NetMsgPickUp.sNID_ITEM pItemDrop->sItemCustom.sNativeID;
                    
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgPickUp);

                    
    //    Note : ¾ÆÀÌÅÆ Land¿¡¼­ »èÁ¦.
                    
    m_pLandMan->DropOutItem pItemDrop->dwGlobID );

                    return 
    S_OK;
                }
            }

            
    //    Note : »õ·ÎÀÌ Àκ¥¿¡ µé¾î°¡¾ßÇÒ ¾ÆÀÌÅÛÀÇ °¹¼ö ÆÄ¾ÇÈÄ Àκ¥¿¡ µé¾î°¥ °ø°£ÀÌ ÀÖ´ÂÁö °Ë»ç.

            //    ÃÖ´ë°ãħ¾ÆÀÌÅÛ ¼ö·®.
            
    WORD wONENUM wREQINSRTNUM wPILENUM;
            
    WORD wITEMNUM wONENUM;

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

            for ( 
    WORD i=0i<wITEMNUM; ++)
            {
                
    WORD wInsertPosX(0), wInsertPosY(0);
                
    BOOL bSPACE m_cInventory.FindInsrtable wINVENXwINVENYwInsertPosXwInsertPosY );
                
    GASSERT(bSPACE&&"³ÖÀ» °ø°£À» ¹Ì¸® Ã¼Å©¸¦ ÇÏ°í ¾ÆÀÌÅÛÀ» ³Ö¾úÀ¸³ª °ø°£ÀÌ ºÎÁ·ÇÔ.");
                if ( !
    bSPACE )            return E_FAIL;    //    ½ÇÁ¦·Î´Â Á¡°ËÀÌ ³¡³´±â ¶§¹®¿¡ ¿À·ù¹ß»ý °¡´É¼ºÀÌ ¾øÀ½.

                //    Note : »õ·Î¿î ¾ÆÀÌÅÛÀ» ³Ö¾îÁÜ.
                //
                
    SITEMCUSTOM sITEMCUSTOM pItemDrop->sItemCustom;
                if ( 
    wITEMNUM==(i+1) )    sITEMCUSTOM.wTurnNum wSPLITNUM;    //    ¸¶Áö¸· ¾ÆÀÌÅÛÀº ÀÜ¿©·®.
                
    else                    sITEMCUSTOM.wTurnNum wPILENUM;    //    ¾Æ´Ò °æ¿ì´Â ²ËÂù·®.

                //    ÀιêÅ丮¿¡ ³Ö½À´Ï´Ù.
                
    m_cInventory.InsertItem sITEMCUSTOMwInsertPosXwInsertPosY );
                
    SINVENITEM *pInvenItem m_cInventory.GetItem wInsertPosXwInsertPosY );
                if ( !
    pInvenItem )        return E_FAIL;    //    ½ÇÁ¦·Î´Â Á¡°ËÀÌ ³¡³´±â ¶§¹®¿¡ ¿À·ù¹ß»ý °¡´É¼ºÀÌ ¾øÀ½.

                //    Àι꿡 ¾ÆÀÌÅÆ ³Ö¾îÁִ ¸Þ½ÃÁö.
                
    GLMSG::SNETPC_INVEN_INSERT NetMsgInven;
                
    NetMsgInven.Data = *pInvenItem;
                
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgInven);
            }

            
    //    Note : ÆÄƼ¿øÀÏ °æ¿ì ´Ù¸¥ ÆÄƼ¿ø¿¡°Ô ¾ÆÀÌÅÛ ½Àµæ ¾Ë¸².
            //
            
    GLPARTY_FIELD *pParty GLGaeaServer::GetInstance().GetParty m_dwPartyID );
            if ( 
    pParty )
            {
                
    GLMSG::SNETPC_PARTY_MBR_PICKUP_BRD NetMsg;
                
    NetMsg.dwGaeaID m_dwGaeaID;
                
    NetMsg.sNID_ITEM pItemDrop->sItemCustom.sNativeID;
                
    pParty->SENDMSG2NEAR this, &NetMsg );
            }

            
    GLMSG::SNETPC_PICKUP_ITEM NetMsgPickUp;
            
    NetMsgPickUp.sNID_ITEM pItemDrop->sItemCustom.sNativeID;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgPickUp);

            
    //    Note : ¾ÆÀÌÅÛ ½Àµæ½Ã ÀÚµ¿ Äù½ºÆ® ½ÃÀÛ Á¡°Ë.
            //
            
    QuestStartFromGetITEM pItemDrop->sItemCustom.sNativeID );

            
    //    Note : PILE °ãħ ¾ÆÀÌÅÛÀ̹ǷΠ·Î±× ÀÛ¼º ºÒ°¡´É.
            //

            //    Note : ¾ÆÀÌÅÆ Land¿¡¼­ »èÁ¦.
            
    m_pLandMan->DropOutItem pItemDrop->dwGlobID );
        }
        else
        {
            
    WORD wPosXwPosY;
            
    BOOL bOk m_cInventory.FindInsrtable pItem->sBasicOp.wInvenSizeXpItem->sBasicOp.wInvenSizeYwPosXwPosY );
            if ( !
    bOk )            return E_FAIL;    //    ½ÇÁ¦·Î´Â Á¡°ËÀÌ ³¡³´±â ¶§¹®¿¡ ¿À·ù¹ß»ý °¡´É¼ºÀÌ ¾øÀ½.

            //    Note : ¾ÆÀÌÅÆ Áݱ⠼º°ø.
            
    m_cInventory.InsertItem pItemDrop->sItemCustomwPosXwPosY );
            
    SINVENITEM *pInvenItem m_cInventory.GetItem wPosXwPosY );
            if ( !
    pInvenItem )    return E_FAIL;    //    ½ÇÁ¦·Î´Â Á¡°ËÀÌ ³¡³´±â ¶§¹®¿¡ ¿À·ù¹ß»ý °¡´É¼ºÀÌ ¾øÀ½.

            //    Note : ÆÄƼ¿øÀÏ °æ¿ì ´Ù¸¥ ÆÄƼ¿ø¿¡°Ô ¾ÆÀÌÅÛ ½Àµæ ¾Ë¸².
            //
            
    GLPARTY_FIELD *pParty GLGaeaServer::GetInstance().GetParty m_dwPartyID );
            if ( 
    pParty )
            {
                
    GLMSG::SNETPC_PARTY_MBR_PICKUP_BRD NetMsg;
                
    NetMsg.dwGaeaID m_dwGaeaID;
                
    NetMsg.sNID_ITEM pItemDrop->sItemCustom.sNativeID;
                
    pParty->SENDMSG2NEAR this, &NetMsg );
            }

            
    GLMSG::SNETPC_PICKUP_ITEM NetMsgPickUp;
            
    NetMsgPickUp.sNID_ITEM pItemDrop->sItemCustom.sNativeID;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgPickUp);

            
    //    Note :¾ÆÀÌÅÛÀÇ ¼ÒÀ¯ ÀÌÀü °æ·Î ±â·Ï.
            //
            
    GLITEMLMT::GetInstance().ReqItemRoute pInvenItem->sItemCustomID_CHAR0ID_CHARm_dwCharIDEMITEM_ROUTE_CHARpInvenItem->sItemCustom.wTurnNum );

            
    //    [Àڽſ¡°Ô] ¸Þ½ÃÁö ¹ß»ý.
            
    GLMSG::SNETPC_INVEN_INSERT NetMsg_Inven;
            
    NetMsg_Inven.Data = *pInvenItem;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg_Inven);

            
    //    Note : ¾ÆÀÌÅÛ ½Àµæ½Ã ÀÚµ¿ Äù½ºÆ® ½ÃÀÛ Á¡°Ë.
            //
            
    QuestStartFromGetITEM pItemDrop->sItemCustom.sNativeID );

            
    //    Note : ¾ÆÀÌÅÆ Land¿¡¼­ »èÁ¦.
            
    m_pLandMan->DropOutItem pItemDrop->dwGlobID );
        }

        return 
    S_OK;
    }


    HRESULT GLChar::InsertToInvenEx PITEMDROP pItemDrop )
    {
        
    GASSERT(pItemDrop&&"GLChar::InsertToInven()");
        if ( !
    pItemDrop )    return E_FAIL;

        
    SITEM *pItem GLItemMan::GetInstance().GetItem(pItemDrop->sItemCustom.sNativeID);
        if ( !
    pItem )        return E_FAIL;

        
    bool bITEM_SPACE IsInsertToInvenEx pItemDrop );
        if ( !
    bITEM_SPACE )
        {
            
    //    ÀιêÀÌ °¡µæÂ÷¼­ ¾ÆÀÌÅÆÀ» ³ÖÀ»¼ö ¾ø½À´Ï´Ù.
            
    GLMSG::SNETPC_REQ_TAKE_FB NetMsg;
            
    NetMsg.emCrow CROW_ITEM;
            
    NetMsg.emTakeFB EMTAKE_FB_INVEN_ERROR;

            
    GLGaeaServer::GetInstance().SENDTOCLIENT m_dwClientID, &NetMsg );
            return 
    E_FAIL;
        }

        if ( 
    pItem->ISPILE() )
        {
            
    WORD wINVENX pItem->sBasicOp.wInvenSizeX;
            
    WORD wINVENY pItem->sBasicOp.wInvenSizeY;

            
    //    °ãħ ¾ÆÀÌÅÛÀÏ °æ¿ì.
            
    WORD wPILENUM pItem->sDrugOp.wPileNum;
            
    SNATIVEID sNID pItem->sBasicOp.sNativeID;

            
    //    ³Ö±â ¿äûµÈ ¾ÆÀÌÅÛ¼ö. ( ÀÜ¿©·®. )
            
    WORD wREQINSRTNUM = ( pItemDrop->sItemCustom.wTurnNum );

            
    //    Note :¾ÆÀÌÅÛÀÇ ¼ÒÀ¯ ÀÌÀü °æ·Î ±â·Ï.
            //
            
    GLITEMLMT::GetInstance().ReqItemRoute pItemDrop->sItemCustomID_CHAR0ID_CHARm_dwCharIDEMITEM_ROUTE_CHARpItemDrop->sItemCustom.wTurnNum );

            
    //    Note : ´õ °ãÃÄÁú¼ö Àִ ¾ÆÀÌÅÛÀÌ ÀÖ´ÂÁö °Ë»çÇÏ¿© Àκ¥¿¡ µé¾î°¡¾ßÇÏ´Â
            //        ¾ÆÀÌÅÛ Á¡°Ë ¼ýÀÚ¸¦ °¨¼Ò½ÃÅ´.
            
    GLInventory::CELL_MAP &ItemMap = *m_cInventory.GetItemList();
            
    GLInventory::CELL_MAP_ITER iter ItemMap.begin();
            for ( ; 
    iter!=ItemMap.end(); ++iter )
            {
                
    SINVENITEM &sINVENITEM = *(*iter).second;
                
    SITEMCUSTOM &sITEMCUSTOM sINVENITEM.sItemCustom;
                if ( 
    sITEMCUSTOM.sNativeID != sNID )        continue;
                if ( 
    sITEMCUSTOM.wTurnNum>=wPILENUM )        continue;
            
                
    //    ±âÁ¸ ¾ÆÀÌÅÛ °ãħ ¿©À¯ºÐ.
                
    WORD wSURPLUSNUM wPILENUM sITEMCUSTOM.wTurnNum;

                if ( 
    wREQINSRTNUM wSURPLUSNUM )
                {
                    
    //    Note : ±âÁ¸ ¾ÆÀÌÅÛÀÇ °ãħÀ» º¯°æ. ( ²ËÂü )
                    
    sITEMCUSTOM.wTurnNum wPILENUM;

                    
    //    Note : Å¬¶óÀÌ¾ðÆ®¿¡ °¹¼ö º¯°æÀ» ¾Ë¸².
                    
    GLMSG::SNETPC_INVEN_DRUG_UPDATE NetMsg;
                    
    NetMsg.wPosX sINVENITEM.wPosX;
                    
    NetMsg.wPosY sINVENITEM.wPosY;
                    
    NetMsg.wTurnNum sITEMCUSTOM.wTurnNum;
                    
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg);

                    
    //    Note : ÀÜ¿© ¼ö·® °¨¼Ò.
                    
    wREQINSRTNUM -= wSURPLUSNUM;
                }
                else
                {
                    
    //    Note : ±âÁ¸ ¾ÆÀÌÅÛ¿¡ °ãÄ¡´Â °Í ¸¸À¸·Îµµ »õ·Î ³ÖÀ» ¾ÆÀÌÅÛÀÌ ÃæºÐÈ÷ µé¾î°¨.
                    
    sITEMCUSTOM.wTurnNum += wREQINSRTNUM;

                    
    //    Note : Å¬¶óÀÌ¾ðÆ®¿¡ °¹¼ö º¯°æÀ» ¾Ë¸².
                    
    GLMSG::SNETPC_INVEN_DRUG_UPDATE NetMsg;
                    
    NetMsg.wPosX sINVENITEM.wPosX;
                    
    NetMsg.wPosY sINVENITEM.wPosY;
                    
    NetMsg.wTurnNum sITEMCUSTOM.wTurnNum;
                    
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg);

                    
    //    Note : ÆÄƼ¿øÀÏ °æ¿ì ´Ù¸¥ ÆÄƼ¿ø¿¡°Ô ¾ÆÀÌÅÛ ½Àµæ ¾Ë¸².
                    //
                    
    GLPARTY_FIELD *pParty GLGaeaServer::GetInstance().GetParty m_dwPartyID );
                    if ( 
    pParty )
                    {
                        
    GLMSG::SNETPC_PARTY_MBR_PICKUP_BRD NetMsg;
                        
    NetMsg.dwGaeaID m_dwGaeaID;
                        
    NetMsg.sNID_ITEM pItemDrop->sItemCustom.sNativeID;
                        
    pParty->SENDMSG2NEAR this, &NetMsg );
                    }

                    
    GLMSG::SNETPC_PICKUP_ITEM NetMsgPickUp;
                    
    NetMsgPickUp.sNID_ITEM pItemDrop->sItemCustom.sNativeID;
                    
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgPickUp);

                    
    //    Note : ¾ÆÀÌÅÆ Land¿¡¼­ »èÁ¦.
                    
    m_pLandMan->DropOutItem pItemDrop->dwGlobID );

                    return 
    S_OK;
                }
            }

            
    //    Note : »õ·ÎÀÌ Àκ¥¿¡ µé¾î°¡¾ßÇÒ ¾ÆÀÌÅÛÀÇ °¹¼ö ÆÄ¾ÇÈÄ Àκ¥¿¡ µé¾î°¥ °ø°£ÀÌ ÀÖ´ÂÁö °Ë»ç.

            //    ÃÖ´ë°ãħ¾ÆÀÌÅÛ ¼ö·®.
            
    WORD wONENUM wREQINSRTNUM wPILENUM;
            
    WORD wITEMNUM wONENUM;

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

            for ( 
    WORD i=0i<wITEMNUM; ++)
            {
                
    WORD wInsertPosX(0), wInsertPosY(0);

                
    // È°¼ºÈ­µÈ Àκ¥¿¡ ¿ì¼±Àû ¹èÄ¡...( ±âÁ¸ °Ë»ö¼ø¼­°¡ ¼¼·Î ¿ì¼±À̶󼭠º¯°æ Çϱ⠾ָÅÇÔ. ) 
                
    BOOL bSPACE m_cInventory.FindInsrtable wINVENXwINVENYwInsertPosXwInsertPosY );
                if ( !
    bSPACE )
                {
                    
    bSPACE m_cInventory.FindInsrtable wINVENXwINVENYwInsertPosXwInsertPosYtrue );
                    
                    
    GASSERT(bSPACE&&"³ÖÀ» °ø°£À» ¹Ì¸® Ã¼Å©¸¦ ÇÏ°í ¾ÆÀÌÅÛÀ» ³Ö¾úÀ¸³ª °ø°£ÀÌ ºÎÁ·ÇÔ.");
                    if ( !
    bSPACE )            return E_FAIL;    //    ½ÇÁ¦·Î´Â Á¡°ËÀÌ ³¡³´±â ¶§¹®¿¡ ¿À·ù¹ß»ý °¡´É¼ºÀÌ ¾øÀ½.
                
    }

                
    //    Note : »õ·Î¿î ¾ÆÀÌÅÛÀ» ³Ö¾îÁÜ.
                //
                
    SITEMCUSTOM sITEMCUSTOM pItemDrop->sItemCustom;
                if ( 
    wITEMNUM==(i+1) )    sITEMCUSTOM.wTurnNum wSPLITNUM;    //    ¸¶Áö¸· ¾ÆÀÌÅÛÀº ÀÜ¿©·®.
                
    else                    sITEMCUSTOM.wTurnNum wPILENUM;    //    ¾Æ´Ò °æ¿ì´Â ²ËÂù·®.

                //    ÀιêÅ丮¿¡ ³Ö½À´Ï´Ù.
                
    m_cInventory.InsertItem sITEMCUSTOMwInsertPosXwInsertPosYtrue );
                
    SINVENITEM *pInvenItem m_cInventory.GetItem wInsertPosXwInsertPosY );
                if ( !
    pInvenItem )        return E_FAIL;    //    ½ÇÁ¦·Î´Â Á¡°ËÀÌ ³¡³´±â ¶§¹®¿¡ ¿À·ù¹ß»ý °¡´É¼ºÀÌ ¾øÀ½.

                //    Àι꿡 ¾ÆÀÌÅÆ ³Ö¾îÁִ ¸Þ½ÃÁö.
                
    GLMSG::SNETPC_INVEN_INSERT NetMsgInven;
                
    NetMsgInven.Data = *pInvenItem;
                
    NetMsgInven.bAllLine true;
                
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgInven);
            }

            
    //    Note : ÆÄƼ¿øÀÏ °æ¿ì ´Ù¸¥ ÆÄƼ¿ø¿¡°Ô ¾ÆÀÌÅÛ ½Àµæ ¾Ë¸².
            //
            
    GLPARTY_FIELD *pParty GLGaeaServer::GetInstance().GetParty m_dwPartyID );
            if ( 
    pParty )
            {
                
    GLMSG::SNETPC_PARTY_MBR_PICKUP_BRD NetMsg;
                
    NetMsg.dwGaeaID m_dwGaeaID;
                
    NetMsg.sNID_ITEM pItemDrop->sItemCustom.sNativeID;
                
    pParty->SENDMSG2NEAR this, &NetMsg );
            }

            
    GLMSG::SNETPC_PICKUP_ITEM NetMsgPickUp;
            
    NetMsgPickUp.sNID_ITEM pItemDrop->sItemCustom.sNativeID;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgPickUp);

            
    //    Note : ¾ÆÀÌÅÛ ½Àµæ½Ã ÀÚµ¿ Äù½ºÆ® ½ÃÀÛ Á¡°Ë.
            //
            
    QuestStartFromGetITEM pItemDrop->sItemCustom.sNativeID );

            
    //    Note : PILE °ãħ ¾ÆÀÌÅÛÀ̹ǷΠ·Î±× ÀÛ¼º ºÒ°¡´É.
            //

            //    Note : ¾ÆÀÌÅÆ Land¿¡¼­ »èÁ¦.
            
    m_pLandMan->DropOutItem pItemDrop->dwGlobID );
        }
        else
        {
            
    WORD wPosX 0wPosY 0;

            
    // È°¼ºÈ­µÈ Àκ¥¿¡ ¿ì¼±Àû ¹èÄ¡...( ±âÁ¸ °Ë»ö¼ø¼­°¡ ¼¼·Î ¿ì¼±À̶󼭠º¯°æ Çϱ⠾ָÅÇÔ. ) 
            
    BOOL bOk m_cInventory.FindInsrtable pItem->sBasicOp.wInvenSizeXpItem->sBasicOp.wInvenSizeYwPosXwPosY );
            if ( !
    bOk )
            {
                    
    bOk m_cInventory.FindInsrtable pItem->sBasicOp.wInvenSizeXpItem->sBasicOp.wInvenSizeYwPosXwPosYtrue );
                    
                    
    GASSERT(bOk&&"³ÖÀ» °ø°£À» ¹Ì¸® Ã¼Å©¸¦ ÇÏ°í ¾ÆÀÌÅÛÀ» ³Ö¾úÀ¸³ª °ø°£ÀÌ ºÎÁ·ÇÔ.");
                    if ( !
    bOk )            return E_FAIL;    //    ½ÇÁ¦·Î´Â Á¡°ËÀÌ ³¡³´±â ¶§¹®¿¡ ¿À·ù¹ß»ý °¡´É¼ºÀÌ ¾øÀ½.
            
    }

            
    //    Note : ¾ÆÀÌÅÆ Áݱ⠼º°ø.
            
    m_cInventory.InsertItem pItemDrop->sItemCustomwPosXwPosYtrue );
            
    SINVENITEM *pInvenItem m_cInventory.GetItem wPosXwPosY );
            if ( !
    pInvenItem )    return E_FAIL;    //    ½ÇÁ¦·Î´Â Á¡°ËÀÌ ³¡³´±â ¶§¹®¿¡ ¿À·ù¹ß»ý °¡´É¼ºÀÌ ¾øÀ½.

            //    Note : ÆÄƼ¿øÀÏ °æ¿ì ´Ù¸¥ ÆÄƼ¿ø¿¡°Ô ¾ÆÀÌÅÛ ½Àµæ ¾Ë¸².
            //
            
    GLPARTY_FIELD *pParty GLGaeaServer::GetInstance().GetParty m_dwPartyID );
            if ( 
    pParty )
            {
                
    GLMSG::SNETPC_PARTY_MBR_PICKUP_BRD NetMsg;
                
    NetMsg.dwGaeaID m_dwGaeaID;
                
    NetMsg.sNID_ITEM pItemDrop->sItemCustom.sNativeID;
                
    pParty->SENDMSG2NEAR this, &NetMsg );
            }

            
    GLMSG::SNETPC_PICKUP_ITEM NetMsgPickUp;
            
    NetMsgPickUp.sNID_ITEM pItemDrop->sItemCustom.sNativeID;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgPickUp);

            
    //    Note :¾ÆÀÌÅÛÀÇ ¼ÒÀ¯ ÀÌÀü °æ·Î ±â·Ï.
            //
            
    GLITEMLMT::GetInstance().ReqItemRoute pInvenItem->sItemCustomID_CHAR0ID_CHARm_dwCharIDEMITEM_ROUTE_CHARpInvenItem->sItemCustom.wTurnNum );

            
    //    [Àڽſ¡°Ô] ¸Þ½ÃÁö ¹ß»ý.
            
    GLMSG::SNETPC_INVEN_INSERT NetMsg_Inven;
            
    NetMsg_Inven.Data = *pInvenItem;
            
    NetMsg_Inven.bAllLine true;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg_Inven);

            
    //    Note : ¾ÆÀÌÅÛ ½Àµæ½Ã ÀÚµ¿ Äù½ºÆ® ½ÃÀÛ Á¡°Ë.
            //
            
    QuestStartFromGetITEM pItemDrop->sItemCustom.sNativeID );

            
    //    Note : ¾ÆÀÌÅÆ Land¿¡¼­ »èÁ¦.
            
    m_pLandMan->DropOutItem pItemDrop->dwGlobID );
        }

        return 
    S_OK;
    }

    void GLChar::DisableSkillFact()
    {
        
    EMSLOT emRHand GetCurRHand();    
        
    SITEMpRightItem GET_SLOT_ITEMDATA(emRHand);        

        for ( 
    int i=0i<SKILLFACT_SIZE; ++)
        {
            if ( 
    m_sSKILLFACT[i].sNATIVEID == NATIVEID_NULL() ) continue;
        
            
    PGLSKILL pSkill GLSkillMan::GetInstance().GetData m_sSKILLFACT[i].sNATIVEID );
            if ( !
    pSkill ) continue;

            
    // ½ºÅ³ ÀڽйöÇÁ
            
    if ( pSkill->m_sBASIC.emIMPACT_TAR != TAR_SELF || pSkill->m_sBASIC.emIMPACT_REALM != REALM_SELF ) continue;
                    
            
    GLITEM_ATT emSKILL_RITEM pSkill->m_sBASIC.emUSE_RITEM;

            
    // ½ºÅ³ µµ±¸ Á¾¼Ó ¾øÀ½
            
    if ( emSKILL_RITEM == ITEMATT_NOCARE )    continue;

            
    // ½ºÅ³ °ú ¹«±â°¡ ºÒÀÏÄ¡
            
    if( !pRightItem || !CHECHSKILL_ITEM(emSKILL_RITEM,pRightItem->sSuitOp.emAttack) )
            {
                
    DISABLESKEFF);
            }
        }
    }

    //************************************
    // Method:    InsertMoney
    // FullName:  GLChar::InsertMoney
    // Access:    public 
    // Returns:   void
    // Qualifier:
    // Parameter: LONGLONG lnAmount
    // Explanation: ÇöÀç´Â ÆÄƼ¿¡¼­ ±Ý¾× ºÐ¹è½Ã »ç¿ëµÇ´Â ÇÔ¼öÀÌ´Ù
    //************************************
    void GLChar::InsertMoney LONGLONG lnAmount )
    {
        
    //    µ· ½Àµæ.

        
    lnAmount CalculateInsertmoneylnAmount );

        
    CheckMoneyUpdatem_lnMoneylnAmountTRUE"Insert Party Money." );
        
    m_bMoneyUpdate TRUE;

        
    m_lnMoney += lnAmount;

        
    //    Note : ±Ý¾× ·Î±×.
        //
        
    if ( lnAmount>EMMONEY_LOG )
        {
            
    GLITEMLMT::GetInstance().ReqMoneyExc ID_CHAR0ID_CHARm_dwCharIDlnAmountEMITEM_ROUTE_GROUND );
            
    GLITEMLMT::GetInstance().ReqMoneyExc ID_CHARm_dwCharIDID_CHAR0m_lnMoneyEMITEM_ROUTE_CHAR );
        }

    #if defined(_RELEASED) || defined(TW_PARAM) || defined(TH_PARAM) || defined(HK_PARAM)// ***Tracing Log print
        
    if ( m_bTracingUser )
        {
            
    NET_LOG_UPDATE_TRACINGCHAR TracingMsg;
            
    TracingMsg.nUserNum  GetUserID();
            
    StringCchCopyTracingMsg.szAccountUSR_ID_LENGTH+1m_szUID );

            
    CString strTemp;
            
    strTemp.Format"Insert Party Money, [%s][%s], Insert Amount:[%I64d], Have Money:[%I64d]",
                     
    m_szUIDm_szName,  lnAmountm_lnMoney );

            
    StringCchCopyTracingMsg.szLogMsgTRACING_LOG_SIZEstrTemp.GetString() );

            
    m_pGLGaeaServer->SENDTOAGENTm_dwClientID, &TracingMsg );
        }
    #endif

    #if defined(VN_PARAM) //vietnamtest%%%
        
    if( lnAmount != )
    #endif
        
    {
            
    //    ±Ý¾× º¯È­ Å¬¶óÀÌ¾ðÆ®¿¡ ¾Ë·ÁÁÜ.
            
    GLMSG::SNETPC_UPDATE_MONEY NetMsg;
            
    NetMsg.lnMoney m_lnMoney;
            
    //add money 2
            
    NetMsg.lnVoteP m_lnVoteP;
            
    //add money 3
            
    NetMsg.lnPremP m_lnPremP;
            
    //add contributionpoints by CNDev
            
    NetMsg.lnContribP m_lnContribP;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT m_dwClientID, &NetMsg );
        }

    #if defined(VN_PARAM) //vietnamtest%%%
        
    GLMSG::SNETPC_VIETNAM_GAIN_MONEY NetMsg2;
        
    NetMsg2.gainMoney m_lVNGainSysMoney;
        
    GLGaeaServer::GetInstance().SENDTOCLIENT m_dwClientID, &NetMsg2 );
    #endif
    }

    LONGLONG GLChar::CalculateInsertmoneyLONGLONG lnAmount )
    {
        
    LONGLONG lnMoney lnAmount;
        
    //    µ· ½Àµæ.    
        
    lnMoney lnMoney * (m_pGLGaeaServer->GetMoneyGainRate(m_CHARINDEX,m_wLevel) + m_pGLGaeaServer->GetMoneyGainRate(m_wSchool) - 1);

    #if defined(TH_PARAM) || defined(MYE_PARAM ) || defined(MY_PARAM) || defined(KR_PARAM)
        
    if( m_dwThaiCCafeClass == || m_nMyCCafeClass == // Aµî±Þ
        
    {
            
    lnMoney *= 2;
        }else if( 
    m_dwThaiCCafeClass == || m_nMyCCafeClass == // Bµî±Þ
        
    {
            
    lnMoney *= 1.75f;
        }else if( 
    m_dwThaiCCafeClass == || m_nMyCCafeClass == // Cµî±Þ
        
    {
            
    lnMoney *= 1.5f;
        }
    #endif

    #ifdef CH_PARAM_USEGAIN //chinaTest%%%
        
    if( m_ChinaGainType == GAINTYPE_HALF )
        {
            
    lnMoney /= 2;
        }else if( 
    m_ChinaGainType == GAINTYPE_EMPTY )
        {
            
    lnMoney 0;
        }
    #endif

        //NeedToSaveValue_B
    #if defined(VN_PARAM) //vietnamtest%%%
        
    if( m_dwVietnamGainType == GAINTYPE_HALF )
        {
            
    lnMoney /= 2;
            
    m_lVNGainSysMoney += lnMoney;
        }else if( 
    m_dwVietnamGainType == GAINTYPE_EMPTY )
        {
            
    m_lVNGainSysMoney += lnMoney;
            
    lnMoney 0;        
        }
    #endif

        
    return lnMoney;
    }

    HRESULT GLChar::InsertToInven PMONEYDROP pMoneyDrop )
    {
        
    //    µ· ½Àµæ.    
        
    if( pMoneyDrop->bDropMonster )
        {
            
    pMoneyDrop->lnAmount CalculateInsertmoneypMoneyDrop->lnAmount );
        }
        

        
    CheckMoneyUpdatem_lnMoneypMoneyDrop->lnAmountTRUE"Insert Money." );
        
    m_bMoneyUpdate TRUE;

        
    m_lnMoney += pMoneyDrop->lnAmount;

        
    //    Note : ±Ý¾× ·Î±×.
        //
        
    if ( pMoneyDrop->lnAmount>EMMONEY_LOG )
        {
            
    GLITEMLMT::GetInstance().ReqMoneyExc ID_CHAR0ID_CHARm_dwCharIDpMoneyDrop->lnAmountEMITEM_ROUTE_GROUND );
            
    GLITEMLMT::GetInstance().ReqMoneyExc ID_CHARm_dwCharIDID_CHAR0m_lnMoneyEMITEM_ROUTE_CHAR );
        }

    #if defined(_RELEASED) || defined(TW_PARAM) || defined(TH_PARAM) || defined(HK_PARAM) // ***Tracing Log print
        
    if ( m_bTracingUser )
        {
            
    NET_LOG_UPDATE_TRACINGCHAR TracingMsg;
            
    TracingMsg.nUserNum  GetUserID();
            
    StringCchCopyTracingMsg.szAccountUSR_ID_LENGTH+1m_szUID );

            
    CString strTemp;
            
    strTemp.Format"Insert Money, [%s][%s], Insert Amount:[%I64d], Have Money:[%I64d]",
                
    m_szUIDm_szNamepMoneyDrop->lnAmountm_lnMoney );

            
    StringCchCopyTracingMsg.szLogMsgTRACING_LOG_SIZEstrTemp.GetString() );

            
    m_pGLGaeaServer->SENDTOAGENTm_dwClientID, &TracingMsg );
        }
    #endif

    #if defined(VN_PARAM) //vietnamtest%%%
        
    if( pMoneyDrop->lnAmount != )
    #endif
        
    {
            
    GLMSG::SNETPC_PICKUP_MONEY NetMsg;
            
    NetMsg.lnMoney m_lnMoney;
            
    NetMsg.lnPickUp pMoneyDrop->lnAmount;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT m_dwClientID, &NetMsg );
        }

    #if defined(VN_PARAM) //vietnamtest%%%
        
    GLMSG::SNETPC_VIETNAM_GAIN_MONEY NetMsg2;
        
    NetMsg2.gainMoney m_lVNGainSysMoney;
        
    GLGaeaServer::GetInstance().SENDTOCLIENT m_dwClientID, &NetMsg2 );
    #endif

        //    µ·À» Land¿¡¼­ »èÁ¦.
        
    m_pLandMan->DropOutMoney pMoneyDrop->dwGlobID );

        return 
    S_OK;
    }

    //    Note : FieldÀÇ ¾ÆÀÌÅÆ,µ·À» Inventory ¿¡ ³Ö±â ½Ãµµ.
    //
    HRESULT GLChar::MsgReqFieldToInven NET_MSG_GENERICnmg )
    {
        if ( !
    m_pLandMan )    return E_FAIL;

        
    GLMSG::SNETPC_REQ_FIELD_TO_INVEN *pNetMsg reinterpret_cast<GLMSG::SNETPC_REQ_FIELD_TO_INVEN*> ( nmg );

        

        if ( 
    pNetMsg->emCrow==CROW_ITEM )
        {
            
    PITEMDROP pItemDrop m_pLandMan->GetItem pNetMsg->dwID );

            if ( !
    pItemDrop )
            {
                
    //    ¾ÆÀÌÅÆÀÌ »ç¶óÁ³½À´Ï´Ù.
                
    GLMSG::SNETPC_REQ_TAKE_FB NetMsg;
                
    NetMsg.emCrow CROW_ITEM;
                
    NetMsg.emTakeFB EMTAKE_FB_OFF;

                
    GLGaeaServer::GetInstance().SENDTOCLIENT m_dwClientID, &NetMsg );
                return 
    E_FAIL;
            }

            
    // »ç¸ÁÈ®ÀÎ
            
    if ( !IsValidBody() )    return E_FAIL;

            
    //    °Å¸® Ã¼Å©
            
    D3DXVECTOR3 vPos;

            if ( 
    pNetMsg->bPet )    
            {
                
    PGLPETFIELD pMyPet GLGaeaServer::GetInstance().GetPET m_dwPetGUID );
                if ( 
    pMyPet )    vPos pMyPet->m_vPos;
            }    
            else 
    vPos m_vPos;

            const 
    D3DXVECTOR3 &vTarPos pItemDrop->vPos;

            
    D3DXVECTOR3 vDistance vPos vTarPos;
            
    float fDistance D3DXVec3Length ( &vDistance );

            
    WORD wTarBodyRadius 4;
            
    WORD wTakeRange wTarBodyRadius GETBODYRADIUS() + 2;
            
    WORD wTakeAbleDis wTakeRange 15;

            if ( 
    fDistance>wTakeAbleDis )
            {
                
    //    °Å¸®°¡ ¸Ù´Ï´Ù.
                
    GLMSG::SNETPC_REQ_TAKE_FB NetMsg;
                
    NetMsg.emCrow CROW_ITEM;
                
    NetMsg.emTakeFB EMTAKE_FB_DISTANCE;

                
    GLGaeaServer::GetInstance().SENDTOCLIENT m_dwClientID, &NetMsg );
                            
                return 
    E_FAIL;
            }

            
    // Çʵ忡¼­ ÁÖ¿î°æ¿ì ½ÃÈ¿¼º Ã¼Å©( Å¬·´¶ôÄ¿ ¹ö±× ´ëó )
            
    {    
                
    GLITEMLMT glItemmt GLITEMLMT::GetInstance();
                
    GLItemMan glItemMan GLItemMan::GetInstance();
                
    SITEMCUSTOM sCUSTOM pItemDrop->sItemCustom;
                const 
    CTime cTIME_CUR CTime::GetCurrentTime();
                
                
    SITEM *pITEM glItemMan.GetItem sCUSTOM.sNativeID );
                if ( !
    pITEM )    return E_FAIL;

                
    bool bDELETE(false);

                if ( 
    pITEM->IsTIMELMT() )
                {            
                    
                    
    CTimeSpan cSPAN(pITEM->sDrugOp.tTIME_LMT);
                    
    CTime cTIME_LMT(sCUSTOM.tBORNTIME);
                    
    cTIME_LMT += cSPAN;

                    if ( 
    cTIME_CUR cTIME_LMT )
                    {
                        
    //    ½Ã°£ Á¦ÇÑÀ¸·Î ¾ÆÀÌÅÛ »èÁ¦ ·Î±× ³²±è.
                        
    glItemmt.ReqItemRoute sCUSTOMID_CHARm_dwCharIDID_CHAR0EMITEM_ROUTE_DELETEsCUSTOM.wTurnNum );

                        
    //    ½Ã°£ Á¦ÇÑÀ¸·Î ¾ÆÀÌÅÛ »èÁ¦ ¾Ë¸².
                        
    GLMSG::SNET_INVEN_DEL_ITEM_TIMELMT NetMsgInvenDelTimeLmt;
                        
    NetMsgInvenDelTimeLmt.nidITEM sCUSTOM.sNativeID;
                        
    m_pGLGaeaServer->SENDTOCLIENT(m_dwClientID,&NetMsgInvenDelTimeLmt);

                        
    bDELETE true;                

                        
    //    Note : ÄÚ½ºÅù º¹±¸.
                        
    if ( sCUSTOM.nidDISGUISE!=SNATIVEID(false) )
                        {
                            
    SITEM *pONE glItemMan.GetItem sCUSTOM.nidDISGUISE );
                            if ( !
    pONE )        return E_FAIL;

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

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

                            
    //    Note : ¾ÆÀÌÅÛ »ý¼º.
                            //
                            
    sITEM_NEW.tBORNTIME cTIME.GetTime();
                            
    sITEM_NEW.wTurnNum 1;
                            
    sITEM_NEW.cGenType EMGEN_BILLING;
                            
    sITEM_NEW.cChnID = (BYTE)m_pGLGaeaServer->GetServerChannel();
                            
    sITEM_NEW.cFieldID = (BYTE)m_pGLGaeaServer->GetFieldSvrID();
                            
    sITEM_NEW.lnGenNum glItemmt.RegItemGen sITEM_NEW.sNativeID, (EMITEMGEN)sITEM_NEW.cGenType );

                            
    // »ý¼ºµÈ ÄÚ½ºÅùÀº ¹Ù´Ú¿¡¼­ ´Ù½Ã ¶³±º´Ù.
                            
    CItemDrop cDropItem;
                            
    cDropItem.sItemCustom sITEM_NEW;
                            
    m_pLandMan->DropItem m_vPos, &(cDropItem.sItemCustom), EMGROUP_ONEm_dwGaeaID );

                            
    //    Note : ºÐ¸®µÈ ÄÚ½ºÅù ·Î±×.
                            
    glItemmt.ReqItemRoute sITEM_NEWID_CHARm_dwCharIDID_CHAR0EMITEM_ROUTE_GROUNDsITEM_NEW.wTurnNum );                                                
                        }
                        
                        
    m_pLandMan->DropOutItem pItemDrop->dwGlobID );

                        return 
    E_FAIL;
                    }
                }
                
                if ( !
    bDELETE && sCUSTOM.nidDISGUISE!=SNATIVEID(false) )
                {
                    if ( 
    sCUSTOM.tDISGUISE != )
                    {
                        
    CTime cTIME_LMT(sCUSTOM.tDISGUISE);
                        if ( 
    cTIME_LMT.GetYear()!=1970 )
                        {
                            if ( 
    cTIME_CUR cTIME_LMT )
                            {
                                
    //    ½Ã°£ Á¦ÇÑÀ¸·Î ¾ÆÀÌÅÛ »èÁ¦ ¾Ë¸².
                                
    GLMSG::SNET_INVEN_DEL_ITEM_TIMELMT NetMsgInvenDelTimeLmt;
                                
    NetMsgInvenDelTimeLmt.nidITEM sCUSTOM.nidDISGUISE;
                                
    m_pGLGaeaServer->SENDTOCLIENT(m_dwClientID,&NetMsgInvenDelTimeLmt);

                                
    //    Note : ÄÚ½ºÅù Á¤º¸ ¸®¼Â.
                                
    pItemDrop->sItemCustom.tDISGUISE 0;
                                
    pItemDrop->sItemCustom.nidDISGUISE SNATIVEID(false);
                            }
                        }
                    }
                }        
            }
            
    // ¾ÆÀÌÅÛÀÌ ÀڽŰú µ¿ÀÏÇÑ ¸Ê¿¡ ÀÖ´ÂÁö ( ¼±µµÀü Á¾·áÈÄ ºñÀÎÁõŬ·´¿øÀÌ ¼±µµ¹«±â È¹µæÇϴ ¹ö±× ´ëó )
            
    if ( pItemDrop->sMapID != m_sMapID )    return E_FAIL;

            if ( !
    pItemDrop->IsTakeItem(m_dwPartyID,m_dwGaeaID) )
            {
                
    //    ¾ÆÀÌÅÆÀÌ ´Ù¸¥ »ç¶÷¿¡°Ô ¿¹¾àµÇ¾î ÀÖ½À´Ï´Ù.
                
    GLMSG::SNETPC_REQ_TAKE_FB NetMsg;
                
    NetMsg.emCrow CROW_ITEM;
                
    NetMsg.emTakeFB EMTAKE_FB_RESERVED;

                
    GLGaeaServer::GetInstance().SENDTOCLIENT m_dwClientID, &NetMsg );
                return 
    E_FAIL;
            }

            
    SITEM *pItem GLItemMan::GetInstance().GetItem(pItemDrop->sItemCustom.sNativeID);
            if ( !
    pItem )        return E_FAIL;

            if ( 
    pItem->sBasicOp.emItemType==ITEM_QITEM )
            {
                
    TourchQItem pNetMsg->dwID );
                return 
    S_OK;
            }

            
    //    Note : ÆÄƼ¿øÀ̰í À̺¥Æ® ¾ÆÀÌÅÛÀÌ ¾Æ´Ò¶§ ÆÄƼ ·çÆÃÀÎÁö °Ë»çÈĠó¸®.
            //
            
    GLPARTY_FIELDpParty GLGaeaServer::GetInstance().GetParty(m_dwPartyID);
            if ( 
    pParty && !pItem->ISEVENTITEM() )
            {
                
    bool ballot pParty->DOITEM_ALLOT thispItemDrop );
                if ( 
    ballot )        return S_OK;
            }

            
    //    Note : À̺¥Æ® ¾ÆÀÌÅÛ Áߺ¹À¸·Î °¡Á®°¡±â ¹æÁö.
            //
            /*if ( pItem->ISEVENTITEM() && m_cInventory.HaveEventItem() )
            {
                //    À̹̠À̺¥Æ® ¾ÆÀÌÅÛÀ» °¡Áö°í ÀÖ½À´Ï´Ù.
                GLMSG::SNETPC_REQ_TAKE_FB NetMsg;
                NetMsg.emCrow = CROW_ITEM;
                NetMsg.emTakeFB = EMTAKE_FB_TOO_EVENT_ITEM;

                GLGaeaServer::GetInstance().SENDTOCLIENT ( m_dwClientID, &NetMsg );

                return E_FAIL;
            }*/

            //    Note : ¾ÆÀÌÅÛ Àκ¥¿¡ ³ÖÀ½ ( Àκ¥ÀÌ °¡µæ Â÷ÀÖÀ» ¶§´Â ½Àµæ ºÒ°¡´É. ) º£Æ®³²ÀÏ °æ¿ì Å½´Ð Àκ¥Å丮¿¡ ³ÖÀ» ¼öµµ ÀÖ´Ù.
            //

    #if defined(VN_PARAM) //vietnamtest%%%
            
    if( m_dwVietnamGainType == GAINTYPE_EMPTY )
            {
                 
    InsertToVNGainInvenpItemDrop );
            }else{
                
    InsertToInven pItemDrop );
            }
    #else
            
    InsertToInven pItemDrop );
    #endif


    /*
            // È¹µæÇÑ ¾ÆÀÌÅÛÀÌ ÆÖÄ«µå && »ý¼ºµÈ ÆÖÀ̶ó¸é ¼ÒÀ¯±ÇÀ» ÀÌÀüÇÑ´Ù.
            // ÆÖ¾ÆÀ̵𰡠0 ÀÌ ¾Æ´Ï¸é ÆÖÄ«µåÀ̸鼭 DB¿¡ ÆÖÀÌ »ý¼ºµÈ °ÍÀÌ´Ù.
            if ( pItem->sBasicOp.emItemType == ITEM_PET_CARD && pItemDrop->sItemCustom.dwPetID != 0 )
            {
                CExchangePet* pDbAction = new CExchangePet ( m_dwCharID, pItemDrop->sItemCustom.dwPetID );
                GLDBMan* pDBMan = GLGaeaServer::GetInstance().GetDBMan ();
                if ( pDBMan ) pDBMan->AddJob ( pDbAction );
            }
    */

        
    }
        else if ( 
    pNetMsg->emCrow==CROW_MONEY )
        {
            
    PMONEYDROP pMoneyDrop m_pLandMan->GetMoney pNetMsg->dwID );

              
            if ( !
    pMoneyDrop )
            {
                
    //    µ·ÀÌ »ç¶óÁ³½À´Ï´Ù.
                
    GLMSG::SNETPC_REQ_TAKE_FB NetMsg;
                
    NetMsg.emCrow CROW_MONEY;
                
    NetMsg.emTakeFB EMTAKE_FB_OFF;

                
    GLGaeaServer::GetInstance().SENDTOCLIENT m_dwClientID, &NetMsg );
                return 
    E_FAIL;
            }

            
    // »ç¸ÁÈ®ÀÎ
            
    if ( !IsValidBody() )    return E_FAIL;

            
    //    °Å¸® Ã¼Å©
            
    D3DXVECTOR3 vPos;

            if ( 
    pNetMsg->bPet )    
            {
                
    PGLPETFIELD pMyPet GLGaeaServer::GetInstance().GetPET m_dwPetGUID );
                if ( 
    pMyPet )    vPos pMyPet->m_vPos;
            }    
            else 
    vPos m_vPos;

            const 
    D3DXVECTOR3 &vTarPos pMoneyDrop->vPos;

            
    D3DXVECTOR3 vDistance vPos vTarPos;
            
    float fDistance D3DXVec3Length ( &vDistance );

            
    WORD wTarBodyRadius 4;
            
    WORD wTakeRange wTarBodyRadius GETBODYRADIUS() + 2;
            
    WORD wTakeAbleDis wTakeRange 15;

            if ( 
    fDistance>wTakeAbleDis )
            {
                
    //    °Å¸®°¡ ¸Ù´Ï´Ù.
                
    GLMSG::SNETPC_REQ_TAKE_FB NetMsg;
                
    NetMsg.emCrow CROW_ITEM;
                
    NetMsg.emTakeFB EMTAKE_FB_DISTANCE;

                
    GLGaeaServer::GetInstance().SENDTOCLIENT m_dwClientID, &NetMsg );
                return 
    E_FAIL;            
                
            }

            if ( !
    pMoneyDrop->IsTakeItem(m_dwPartyID,m_dwGaeaID) )
            {
                
    //    µ·ÀÌ ´Ù¸¥ »ç¶÷¿¡°Ô ¿¹¾àµÇ¾î ÀÖ½À´Ï´Ù.
                
    GLMSG::SNETPC_REQ_TAKE_FB NetMsg;
                
    NetMsg.emCrow CROW_MONEY;
                
    NetMsg.emTakeFB EMTAKE_FB_RESERVED;

                
    GLGaeaServer::GetInstance().SENDTOCLIENT m_dwClientID, &NetMsg );
                return 
    E_FAIL;
            }


            
    //    Note : ÆÄƼ¿øÀ̰í À̺¥Æ® ¾ÆÀÌÅÛÀÌ ¾Æ´Ò¶§ ÆÄƼ ·çÆÃÀÎÁö °Ë»çÈĠó¸®.
            //
            
    GLPARTY_FIELDpParty GLGaeaServer::GetInstance().GetParty(m_dwPartyID);
            if ( 
    pParty )
            {
                
    bool ballot pParty->DOMONEY_ALLOT thispMoneyDropm_pLandMan );
                if ( 
    ballot )
                {
                    return 
    S_OK;
                }
            }

            
    //    µ· Áݱ⠼º°ø.
            
    InsertToInven pMoneyDrop );
        }

        return 
    S_OK;
    }

    //    Note : FieldÀÇ ¾ÆÀÌÅÆ,µ·À» ¼Õ¿¡ µé±â ½Ãµµ.    ( ¼Õ¿¡ µç ¾ÆÀÌÅÆÀÌ ¾ø´Ù°í °¡Á¤ÇÔ. )
    //
    HRESULT GLChar::MsgReqFieldToHold NET_MSG_GENERICnmg )
    {
        
    GLMSG::SNETPC_REQ_FIELD_TO_HOLD *pNetMsg reinterpret_cast<GLMSG::SNETPC_REQ_FIELD_TO_HOLD*> ( nmg );

        
    PITEMDROP pItemDrop m_pLandMan->GetItem pNetMsg->dwGlobID );

        
    // Çʵ忡¼­ ¾ÆÀÌÅÛÀ» ¼Õ¿¡ µå´Â°æ¿ì´Â Àκ¥ÀÌ °¡µæ Ã¡À» °æ¿ì »ÓÀÌ´Ù.
        // º£Æ®³²Å½´ÐÀÏ °æ¿ì ¼Õ¿¡ µå´Â°É ¹æÁöÇØ¾ß ÇÑ´Ù.
    #if defined(VN_PARAM) //vietnamtest%%%
        
    if( m_dwVietnamGainType == GAINTYPE_EMPTY )    return E_FAIL;
    #endif

        
    if ( !pItemDrop )
        {
            
    //    ¾ÆÀÌÅÆÀÌ »ç¶óÁ³½À´Ï´Ù.
            
    GLMSG::SNETPC_REQ_TAKE_FB NetMsg;
            
    NetMsg.emCrow CROW_ITEM;
            
    NetMsg.emTakeFB EMTAKE_FB_OFF;

            
    GLGaeaServer::GetInstance().SENDTOCLIENT m_dwClientID, &NetMsg );
            return 
    S_FALSE;
        }

        
    // ¾ÆÀÌÅÛÀÌ ÀڽŰú µ¿ÀÏÇÑ ¸Ê¿¡ ÀÖ´ÂÁö ( ¼±µµÀü Á¾·áÈÄ ºñÀÎÁõŬ·´¿øÀÌ ¼±µµ¹«±â È¹µæÇϴ ¹ö±× ´ëó )
        
    if ( pItemDrop->sMapID != m_sMapID )    return S_FALSE;

        const 
    SITEM *pItemData GLItemMan::GetInstance().GetItem(pItemDrop->sItemCustom.sNativeID);
        if ( !
    pItemData )    return S_FALSE;

        if ( !
    pItemDrop->IsTakeItem(m_dwPartyID,m_dwGaeaID) )
        {
            
    //    ¾ÆÀÌÅÆÀÌ ´Ù¸¥ »ç¶÷¿¡°Ô ¿¹¾àµÇ¾î ÀÖ½À´Ï´Ù.
            
    GLMSG::SNETPC_REQ_TAKE_FB NetMsg;
            
    NetMsg.emCrow CROW_ITEM;
            
    NetMsg.emTakeFB EMTAKE_FB_RESERVED;

            
    GLGaeaServer::GetInstance().SENDTOCLIENT m_dwClientID, &NetMsg );
            return 
    S_FALSE;
        }

        if ( 
    pItemData->sBasicOp.emItemType==ITEM_QITEM )
        {
            
    TourchQItem pNetMsg->dwGlobID );
            return 
    S_OK;
        }

        
    //    Note : ÆÄƼ¿øÀ̰í À̺¥Æ® ¾ÆÀÌÅÛÀÌ ¾Æ´Ò¶§ ÆÄƼ ·çÆÃÀÎÁö °Ë»çÈĠó¸®.
        //
        
    GLPARTY_FIELDpParty GLGaeaServer::GetInstance().GetParty(m_dwPartyID);
        if ( 
    pParty && !pItemData->ISEVENTITEM() )
        {
            
    bool ballot pParty->DOITEM_ALLOT thispItemDrop );
            if ( 
    ballot )        return S_OK;
        }

        
    //    Note : À̺¥Æ® ¾ÆÀÌÅÛ Áߺ¹À¸·Î °¡Á®°¡±â ¹æÁö.
        //
        /*if ( pItemData->ISEVENTITEM() && m_cInventory.HaveEventItem() )
        {
            //    À̹̠À̺¥Æ® ¾ÆÀÌÅÛÀ» °¡Áö°í ÀÖ½À´Ï´Ù.
            GLMSG::SNETPC_REQ_TAKE_FB NetMsg;
            NetMsg.emCrow = CROW_ITEM;
            NetMsg.emTakeFB = EMTAKE_FB_TOO_EVENT_ITEM;

            GLGaeaServer::GetInstance().SENDTOCLIENT ( m_dwClientID, &NetMsg );

            return S_FALSE;
        }*/

        //    Field¿¡ ÀÖ¾ú´ø ¾ÆÀÌÅÆÀ» ¼Õ¿¡ µë.
        
    HOLD_ITEM pItemDrop->sItemCustom );

        
    //    Note :¾ÆÀÌÅÛÀÇ ¼ÒÀ¯ ÀÌÀü °æ·Î ±â·Ï.
        //
        
    GLITEMLMT::GetInstance().ReqItemRoute pItemDrop->sItemCustomID_CHAR0ID_CHARm_dwCharIDEMITEM_ROUTE_CHARpItemDrop->sItemCustom.wTurnNum );

        
    //    [Àڽſ¡°Ô] ¸Þ½ÃÁö ¹ß»ý.
        
    GLMSG::SNETPC_PUTON_UPDATE NetMsg_PutOn;
        
    NetMsg_PutOn.emSlot SLOT_HOLD;
        
    NetMsg_PutOn.sItemCustom pItemDrop->sItemCustom;
        
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg_PutOn);

        
    //    Note : ¾ÆÀÌÅÆ Land¿¡¼­ »èÁ¦.
        
    m_pLandMan->DropOutItem pItemDrop->dwGlobID );

        return 
    S_OK;
    }

    //    Note : InventoryÀÇ ¾ÆÀÌÅÆÀ» ¼Õ¿¡ µé±â ½Ãµµ.
    //
    HRESULT GLChar::MsgReqInvenToHold NET_MSG_GENERICnmg )
    {
        
    GLMSG::SNETPC_REQ_INVEN_TO_HOLD *pNetMsg reinterpret_cast<GLMSG::SNETPC_REQ_INVEN_TO_HOLD*> ( nmg );
        
        static 
    GLMSG::SNETPC_REQ_HOLD_FB NetMsg_fb(NET_MSG_GCTRL_REQ_INVEN_TO_HOLD,EMHOLD_FB_OFF);

        
    //    ¿äûÇÑ ¾ÆÀÌÅÆ À¯È¿¼º °Ë»ç.
        
    SINVENITEM *pInvenItem m_cInventory.GetItem pNetMsg->wPosXpNetMsg->wPosY );
        if ( !
    pInvenItem )
        {
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg_fb);
            return 
    S_FALSE;
        }

        
    //    ¼Õ¿¡ µç ¾ÆÀÌÅÆÀÌ ÀÖÀ»¶§.
        
    if ( VALID_HOLD_ITEM() )
        {
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg_fb);
            return 
    S_FALSE;
        }

        
    SITEMpITEM GLItemMan::GetInstance().GetItempInvenItem->sItemCustom.sNativeID );
        if ( !
    pITEM ) return S_FALSE;
        if ( 
    pITEM->sBasicOp.emItemType == ITEM_PET_CARD && m_bGetPetFromDB )
        {
            
    GLGaeaServer::GetInstance().GetConsoleMsg()->Write"PetCard Inven to Hold Error, m_bGetPetFromDB : %d",
                                                                 
    m_bGetPetFromDB );
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg_fb);
            return 
    S_FALSE;
        }

        
    //    Àι꿡 ÀÖ´ø ¾ÆÀÌÅÆ ¹é¾÷.
        
    SINVENITEM sInven_BackUp = *pInvenItem;

        
    //    Àι꿡¼­ »©³¾ ¾ÆÀÌÅÆÀ» »èÁ¦.
        
    m_cInventory.DeleteItem sInven_BackUp.wPosXsInven_BackUp.wPosY );

        
    //    Àι꿡 ÀÖ¾ú´ø ¾ÆÀÌÅÆÀ» ¼Õ¿¡ µë.
        
    HOLD_ITEM sInven_BackUp.sItemCustom );

        
    //    [Àڽſ¡°Ô] ¸Þ½ÃÁö ¹ß»ý.    - Àι꿡¼­ ¾ÆÀÌÅÆ »èÁ¦.
        
    GLMSG::SNETPC_INVEN_DELETE NetMsg;
        
    NetMsg.wPosX sInven_BackUp.wPosX;
        
    NetMsg.wPosY sInven_BackUp.wPosY;
        
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg);

        
    //    [Àڽſ¡°Ô] Àι꿡 ÀÖ¾ú´ø ¾ÆÀÌÅÆÀ» ¼Õ¿¡ µë.
        
    GLMSG::SNETPC_PUTON_UPDATE NetMsg_PutOn;
        
    NetMsg_PutOn.emSlot SLOT_HOLD;
        
    NetMsg_PutOn.sItemCustom sInven_BackUp.sItemCustom;
        
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg_PutOn);

        return 
    S_OK;
    }

    HRESULT GLChar::MsgReqInvenExHold NET_MSG_GENERICnmg )
    {
        
    GLMSG::SNETPC_REQ_INVEN_EX_HOLD *pNetMsg reinterpret_cast<GLMSG::SNETPC_REQ_INVEN_EX_HOLD*> ( nmg );

        if ( !
    VALID_HOLD_ITEM() )
        {
            return 
    S_FALSE;
        }

        
    SINVENITEM *pInvenItem m_cInventory.GetItem pNetMsg->wPosXpNetMsg->wPosY );
        if ( !
    pInvenItem )
        {
            return 
    S_FALSE;
        }

        
    SINVENITEM sInven_BackUp = *pInvenItem;        //    Àι꿡 ÀÖ´ø ¾ÆÀÌÅÆ ¹é¾÷.
        
        
    WORD wPosX sInven_BackUp.wPosX;            //    ¾ÆÀÌÅÆ À§Ä¡.
        
    WORD wPosY sInven_BackUp.wPosY;

        
    SITEMCUSTOM sItemHold GET_HOLD_ITEM();    //    ¼Õ¿¡ µç ¾ÆÀÌÅÆ ¹é¾÷.

    #if defined(VN_PARAM) //vietnamtest%%%
            
    if ( sItemHold.bVietnamGainItem )    return S_FALSE;
    #endif

        
    SITEMpInvenData GLItemMan::GetInstance().GetItem sInven_BackUp.sItemCustom.sNativeID );
        
    SITEMpHoldData GLItemMan::GetInstance().GetItem sItemHold.sNativeID );
        if ( !
    pInvenData || !pHoldData )    return S_FALSE;

        
    //    Note : º´ÇÕ ÇÒ¼ö Àִ ¾ÆÀÌÅÛÀÎÁö Á¡°Ë.
        
    bool bMERGE(false);
        
    bMERGE = (pInvenData->sBasicOp.sNativeID==pHoldData->sBasicOp.sNativeID);
        if (
    bMERGE)    bMERGE = ( pInvenData->ISPILE() );
        if (
    bMERGEbMERGE = ( sItemHold.wTurnNum<pInvenData->sDrugOp.wPileNum );
        if (
    bMERGEbMERGE = ( sInven_BackUp.sItemCustom.wTurnNum<pInvenData->sDrugOp.wPileNum );
        if ( 
    bMERGE )
        {
            
    WORD wTurnNum sInven_BackUp.sItemCustom.wTurnNum sItemHold.wTurnNum;
            
            if ( 
    wTurnNum <= pInvenData->sDrugOp.wPileNum )
            {
                
    //    Note : °ãħ ¼ö Á¶Á¤.
                
    pInvenItem->sItemCustom.wTurnNum wTurnNum;

                
    //    ¼Õ ÀÖ¾ú´ø ¾ÆÀÌÅÆ Á¦°Å.
                
    RELEASE_HOLD_ITEM ();

                
    //    Note : Àκ¥ÀÇ ¾ÆÀÌÅÛ ¾÷µ¥ÀÌÆ®.
                
    GLMSG::SNET_INVEN_ITEM_UPDATE NetMsgInvenItem;
                
    NetMsgInvenItem.wPosX pNetMsg->wPosX;
                
    NetMsgInvenItem.wPosY pNetMsg->wPosY;
                
    NetMsgInvenItem.sItemCustom pInvenItem->sItemCustom;
                
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgInvenItem);

                
    //    [Àڽſ¡°Ô] ¼Õ ÀÖ¾ú´ø ¾ÆÀÌÅÆ Á¦°Å.
                
    GLMSG::SNETPC_PUTON_RELEASE NetMsg_ReleaseHold(SLOT_HOLD);
                
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg_ReleaseHold);
            }
            else
            {
                
    WORD wSplit wTurnNum pInvenData->sDrugOp.wPileNum;
                
                
    //    ±âÁ¸ ¾ÆÀÌÅÛ °¹¼ö º¯°æ.
                
    pInvenItem->sItemCustom.wTurnNum pInvenData->sDrugOp.wPileNum;

                
    //    ¼Õ¿¡ µé°í ÀÖ´ø ¾ÆÀÌÅÛ º¯°æ.
                
    sItemHold.wTurnNum wSplit;
                
    HOLD_ITEM sItemHold );

                
    //    Note : ¼Õ¿¡µç ¾ÆÀÌÅÛ º¯°æ.
                
    GLMSG::SNETPC_PUTON_UPDATE NetMsgPutOn;
                
    NetMsgPutOn.emSlot SLOT_HOLD;
                
    NetMsgPutOn.sItemCustom sItemHold;
                
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgPutOn);

                
    //    Note : Àκ¥ÀÇ ¾ÆÀÌÅÛ ¾÷µ¥ÀÌÆ®.
                
    GLMSG::SNET_INVEN_ITEM_UPDATE NetMsgInvenItem;
                
    NetMsgInvenItem.wPosX pNetMsg->wPosX;
                
    NetMsgInvenItem.wPosY pNetMsg->wPosY;
                
    NetMsgInvenItem.sItemCustom pInvenItem->sItemCustom;
                
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgInvenItem);
            }

            return 
    S_OK;
        }

        
    //    Àι꿡 ÀÖ´ø ¾ÆÀÌÅÆ »èÁ¦.
        
    BOOL bOk m_cInventory.DeleteItem sInven_BackUp.wPosXsInven_BackUp.wPosY );

        
    //    Note : Á¾Àü ¼Õ¿¡µç ¾ÆÀÌÅÆ°ú µé·Á´Â ¾ÆÀÌÅÆÀÇ Å©±â°¡ Æ²¸± °æ¿ì.
        //    µé°í Àִ ¾ÆÀÌÅÆÀÌ µé¾î°¥ °ø°£À» Ã£´Â´Ù.
    //    if ( !pInvenData->SAME_INVENSIZE ( *pHoldData ) )
    //    {
            //    µ¿ÀÏÀ§Ä¡¿¡ ³ÖÀ»¼ö ÀÖ´ÂÁö °Ë»ç.
            
    bOk m_cInventory.IsInsertable pHoldData->sBasicOp.wInvenSizeXpHoldData->sBasicOp.wInvenSizeYwPosXwPosY );
            if ( !
    bOk )
            {
                
    //    µé°íÀÖ´ø ¾ÆÀÌÅÆ Àι꿡 ³ÖÀ» °ø°£ÀÌ ÀÖ´ÂÁö °Ë»ö.
                
    bOk m_cInventory.FindInsrtable pHoldData->sBasicOp.wInvenSizeXpHoldData->sBasicOp.wInvenSizeYwPosXwPosY );
                if ( !
    bOk )
                {
                    
    //    roll-back : Àι꿡¼­ »èÁ¦Çß´ø ¾ÆÀÌÅÆÀ» ´Ù½Ã ³ÖÀ½.
                    
    m_cInventory.InsertItem sInven_BackUp.sItemCustomsInven_BackUp.wPosXsInven_BackUp.wPosYtrue );

                    return 
    S_FALSE;
                }
            }
    //}

        //    µé°íÀÖ´ø ¾ÆÀÌÅÆ Àι꿡 ³ÖÀ½.
        
    m_cInventory.InsertItem sItemHoldwPosXwPosY );
        
    SINVENITEM *pINSERT_ITEM m_cInventory.GetItem(wPosX,wPosY);
        if ( !
    pINSERT_ITEM )
        {
            
    GLGaeaServer::GetInstance().GetConsoleMsg()->Write "error MsgReqInvenExHold(), sItemHold, id(%d,%d) to pos(%d,%d)",
                
    sItemHold.sNativeID.wMainIDsItemHold.sNativeID.wSubIDwPosXwPosY );
            return 
    S_FALSE;
        }

        
    //    Àι꿡 ÀÖ¾ú´ø ¾ÆÀÌÅÆÀ» ¼Õ¿¡ µë.
        
    HOLD_ITEM sInven_BackUp.sItemCustom );

        
    //    [Àڽſ¡°Ô] Àι꿡 ÀÖ´ø ¾ÆÀÌÅÆ »èÁ¦, ¹× ¾ÆÀÌÅÆ »ðÀÔ.
        
    GLMSG::SNETPC_INVEN_DEL_AND_INSERT NetMsg_Del_Insert;
        
    NetMsg_Del_Insert.wDelX sInven_BackUp.wPosX;                    //    »èÁ¦µÉ ¾ÆÀÌÅÆ.
        
    NetMsg_Del_Insert.wDelY sInven_BackUp.wPosY;
        if ( 
    pINSERT_ITEM )    NetMsg_Del_Insert.sInsert = *pINSERT_ITEM;    //    »ðÀԵǴ ¾ÆÀÌÅÆ.

        
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg_Del_Insert);

        
    //    [Àڽſ¡°Ô] Àι꿡 ÀÖ¾ú´ø ¾ÆÀÌÅÆÀ» ¼Õ¿¡ µë.
        
    GLMSG::SNETPC_PUTON_UPDATE NetMsg_PutOn;
        
    NetMsg_PutOn.emSlot SLOT_HOLD;
        
    NetMsg_PutOn.sItemCustom sInven_BackUp.sItemCustom;
        
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg_PutOn);


        
    //    À¯È¿±â°£ Ãʰú Á¡°Ë.    
        
    const SINVENITEMsINVENITEM = *pINSERT_ITEM;
        
    SITEM *pITEM GLItemMan::GetInstance().GetItem sINVENITEM.sItemCustom.sNativeID );
        if ( 
    pITEM && pITEM->IsTIMELMT() )
        {

            if ( 
    pITEM->sDrugOp.tTIME_LMT != )
            {
                const 
    CTime cTIME_CUR CTime::GetCurrentTime();

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

                
    WORD wInsertPosX sINVENITEM.wPosXwInsertPosY sINVENITEM.wPosY;


                if ( 
    cTIME_CUR cTIME_LMT )
                {
                    
    // Å»°ÍÀÏ °æ¿ì
                    
    if ( pITEM->sBasicOp.emItemType == ITEM_VEHICLE && sINVENITEM.sItemCustom.dwVehicleID != )
                    {
                        
    GLVEHICLEpNewVehicle = new GLVEHICLE();
                        
    CGetVehiclepGetVehicle = new CGetVehicle pNewVehicle
                                                     
    sINVENITEM.sItemCustom.dwVehicleID
                                                     
    m_dwClientID
                                                     
    m_dwCharID
                                                     
    true );
                        
    GLDBManpDBMan GLGaeaServer::GetInstance().GetDBMan ();
                        if ( 
    pDBMan pDBMan->AddJob pGetVehicle );
                    }

                    
    // ÆÖÄ«µåÀÏ °æ¿ì
                    
    if ( pITEM->sBasicOp.emItemType == ITEM_PET_CARD && sINVENITEM.sItemCustom.dwPetID != )
                    {
                        
    CDeletePetpDbAction = new CDeletePet m_dwCharIDsINVENITEM.sItemCustom.dwPetID );
                        
    GLDBManpDBMan 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 0ACCETYPESIZE; ++)
                            {
                                
    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_dwCharIDm_dwClientID );
                            if ( 
    pDBMan pDBMan->AddJob pDbAction );
                        }
                        else
                        {
                            
    // ¾Ç¼¼»ç¸®¸¦ Ã¼Å©ÈÄ ÆÖÀ» DB¿¡¼­ »èÁ¦ÇØÁØ´Ù.
                            
    GLPETpNewPet = new GLPET ();
                            
    CGetPetpGetPet = new CGetPet pNewPet
                                                             
    sINVENITEM.sItemCustom.dwPetID
                                                             
    m_dwClientID
                                                             
    m_dwCharID,
                                                             
    sINVENITEM.wPosX,
                                                             
    sINVENITEM.wPosY,
                                                             
    true );
                            
    GLDBManpDBMan 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);

                    
    //    Note : ¾ÆÀÌÅÛ »èÁ¦.
                    //
                    
    m_cInventory.DeleteItem sINVENITEM.wPosXsINVENITEM.wPosY );
                
                    
    //    Note : ÄÚ½ºÅù º¹±¸.
                    
    if ( sINVENITEM.sItemCustom.nidDISGUISE!=SNATIVEID(false) )
                    {
                        
    SITEM *pONE GLItemMan::GetInstance().GetItem sINVENITEM.sItemCustom.nidDISGUISE );
                        if ( !
    pONE )        return E_FAIL;

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

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

                        
    //    Note : ¾ÆÀÌÅÛ »ý¼º.
                        //
                        
    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 );

                        
    //    Note : Àκ¥¿¡ µé¾î°¥ °ø°£ °Ë»ç.
                        
    BOOL bOk m_cInventory.IsInsertable pONE->sBasicOp.wInvenSizeXpONE->sBasicOp.wInvenSizeYwInsertPosXwInsertPosY );
                        if ( !
    bOk )            return E_FAIL;

                        
    //    Note : Àκ¥¿¡ ³ÖÀ½.
                        
    m_cInventory.InsertItem sITEM_NEWwInsertPosXwInsertPosY );
                        
    SINVENITEM *pINSERT_ITEM m_cInventory.GetItem wInsertPosXwInsertPosY );

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

                        
    //    Note : ºÐ¸®µÈ ÄÚ½ºÅù ·Î±×.
                        
    GLITEMLMT::GetInstance().ReqItemRoute pINSERT_ITEM->sItemCustomID_CHAR0ID_CHARm_dwCharIDEMITEM_ROUTE_CHARpINSERT_ITEM->sItemCustom.wTurnNum );
                    }
                }
            }
        }

        return 
    S_OK;
    }

    HRESULT GLChar::MsgReqInvenToSlot NET_MSG_GENERICnmg )
    {
        
    GLMSG::SNETPC_REQ_INVEN_TO_SLOT *pNetMsg reinterpret_cast<GLMSG::SNETPC_REQ_INVEN_TO_SLOT*> ( nmg );
        if ( 
    pNetMsg->emToSlot >= SLOT_TSIZE )    return S_FALSE;

        
    SINVENITEM *pInvenItem m_cInventory.GetItem pNetMsg->wPosXpNetMsg->wPosY );
        if ( !
    pInvenItem )    return E_FAIL;

        
    SITEMCUSTOM sItemCustom pInvenItem->sItemCustom;

        
    BOOL bOk(FALSE);

        if( 
    sItemCustom.nidDISGUISE!=SNATIVEID(false) )
        {
            
    //    ÄÚ½ºÆ¬À» ÀÔÈù ¾ÆÀÌÅÛÀÏ °æ¿ì
            
    bOk ACCEPT_ITEM sItemCustom.sNativeIDsItemCustom.nidDISGUISE );
            if ( !
    bOk )    return E_FAIL;
        }
        else
        {
            
    //    ÀÚ°ÝÁ¶°Ç¿¡ ºÎÇÕÇÏ´ÂÁö °Ë»ç.
            
    bOk ACCEPT_ITEM sItemCustom.sNativeID );
            if ( !
    bOk )    return E_FAIL;
        }

        if ( 
    sItemCustom.IsWrap() ) return E_FAIL;

        
    //    ÇØ´ç ½½·Ô¿¡ ÀåÂø °¡´ÉÇÑÁö °Ë»ç.
        
    bOk CHECKSLOT_ITEM sItemCustom.sNativeIDpNetMsg->emToSlot );
        if ( !
    bOk )    return E_FAIL;

        
    //    ÇØ´ç ½½·ÔÀÌ ºñ¿´´ÂÁö Á¡°Ë.
        
    bOk ISEMPTY_SLOT sItemCustom.sNativeIDpNetMsg->emToSlot );
        if ( !
    bOk ) return E_FAIL;

        
    //    ½½·Ô¿¡ ¾ÆÀÌÅÆ »ðÀÔ.
        
    SLOT_ITEM sItemCustompNetMsg->emToSlot );

        
    //    Àι꿡¼­ ¾ÆÀÌÅÆ »èÁ¦.
        
    m_cInventory.DeleteItem pNetMsg->wPosXpNetMsg->wPosY );

        
    //    [Àڽſ¡°Ô] ÇØ´ç ¾ÆÀÌÅÆÀ» Àι꿡¼­ »èÁ¦.
        
    GLMSG::SNETPC_INVEN_DELETE NetMsgInvenDel;
        
    NetMsgInvenDel.wPosX pNetMsg->wPosX;
        
    NetMsgInvenDel.wPosY pNetMsg->wPosY;
        
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgInvenDel);

        
    //    [Àڽſ¡°Ô] ÇØ´ç ¾ÆÀÌÅÆÀ» Àι꿡 ³Ö¾îÁÜ.
        
    GLMSG::SNETPC_PUTON_UPDATE NetMsg_PutOn;
        
    NetMsg_PutOn.emSlot pNetMsg->emToSlot;
        
    NetMsg_PutOn.sItemCustom GET_SLOT_ITEM(pNetMsg->emToSlot);
        
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg_PutOn);

        return 
    S_OK;
    }

    HRESULT GLChar::MsgReqVNGainToHold(NET_MSG_GENERICnmg)
    {
        
    GLMSG::SNETPC_REQ_VNGAIN_TO_HOLD *pNetMsg reinterpret_cast<GLMSG::SNETPC_REQ_VNGAIN_TO_HOLD*> ( nmg );

        static 
    GLMSG::SNETPC_REQ_HOLD_FB NetMsg_fb(NET_MSG_GCTRL_REQ_VNGAIN_TO_HOLD,EMHOLD_FB_OFF);

        
    //    ¿äûÇÑ ¾ÆÀÌÅÆ À¯È¿¼º °Ë»ç.
        
    SINVENITEM *pInvenItem m_cVietnamInventory.GetItem pNetMsg->wPosXpNetMsg->wPosY );
        if ( !
    pInvenItem )
        {
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg_fb);
            return 
    S_FALSE;
        }

        
    //    ¼Õ¿¡ µç ¾ÆÀÌÅÆÀÌ ÀÖÀ»¶§.
        
    if ( VALID_HOLD_ITEM() )
        {
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg_fb);
            return 
    S_FALSE;
        }

        
    //    Àι꿡 ÀÖ´ø ¾ÆÀÌÅÆ ¹é¾÷.
        
    SINVENITEM sInven_BackUp = *pInvenItem;

        
    //    Àι꿡¼­ »©³¾ ¾ÆÀÌÅÆÀ» »èÁ¦.
        
    m_cVietnamInventory.DeleteItem sInven_BackUp.wPosXsInven_BackUp.wPosY );

        
    //    Àι꿡 ÀÖ¾ú´ø ¾ÆÀÌÅÆÀ» ¼Õ¿¡ µë.
        
    HOLD_ITEM sInven_BackUp.sItemCustom );

        
    //    [Àڽſ¡°Ô] ¸Þ½ÃÁö ¹ß»ý.    - Àι꿡¼­ ¾ÆÀÌÅÆ »èÁ¦.
        
    GLMSG::SNETPC_INVEN_DELETE NetMsg;
        
    NetMsg.wPosX sInven_BackUp.wPosX;
        
    NetMsg.wPosY sInven_BackUp.wPosY;
        
    NetMsg.bVietnamInven TRUE;
        
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg);

        
    //    [Àڽſ¡°Ô] Àι꿡 ÀÖ¾ú´ø ¾ÆÀÌÅÆÀ» ¼Õ¿¡ µë.
        
    GLMSG::SNETPC_PUTON_UPDATE NetMsg_PutOn;
        
    NetMsg_PutOn.emSlot SLOT_HOLD;
        
    NetMsg_PutOn.sItemCustom sInven_BackUp.sItemCustom;
        
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg_PutOn);
        return 
    S_OK;
    }

    HRESULT GLChar::MsgReqVNGainExHold(NET_MSG_GENERICnmg)
    {

        
    GLMSG::SNETPC_REQ_VNGAIN_EX_HOLD *pNetMsg reinterpret_cast<GLMSG::SNETPC_REQ_VNGAIN_EX_HOLD*> ( nmg );

        if ( !
    VALID_HOLD_ITEM() )
        {
            return 
    S_FALSE;
        }

        
    SINVENITEM *pInvenItem m_cVietnamInventory.GetItem pNetMsg->wPosXpNetMsg->wPosY );
        if ( !
    pInvenItem )
        {
            return 
    S_FALSE;
        }

        
    SINVENITEM sInven_BackUp = *pInvenItem;        //    Àι꿡 ÀÖ´ø ¾ÆÀÌÅÆ ¹é¾÷.

        
    WORD wPosX sInven_BackUp.wPosX;            //    ¾ÆÀÌÅÆ À§Ä¡.
        
    WORD wPosY sInven_BackUp.wPosY;

        
    SITEMCUSTOM sItemHold GET_HOLD_ITEM();    //    ¼Õ¿¡ µç ¾ÆÀÌÅÆ ¹é¾÷.

        
    SITEMpInvenData GLItemMan::GetInstance().GetItem sInven_BackUp.sItemCustom.sNativeID );
        
    SITEMpHoldData GLItemMan::GetInstance().GetItem sItemHold.sNativeID );
        if ( !
    pInvenData || !pHoldData )    return S_FALSE;

        
    //    Note : º´ÇÕ ÇÒ¼ö Àִ ¾ÆÀÌÅÛÀÎÁö Á¡°Ë.
        
    bool bMERGE(false);
        
    bMERGE = (pInvenData->sBasicOp.sNativeID==pHoldData->sBasicOp.sNativeID);
        if (
    bMERGE)    bMERGE = ( pInvenData->ISPILE() );
        if (
    bMERGEbMERGE = ( sItemHold.wTurnNum<pInvenData->sDrugOp.wPileNum );
        if (
    bMERGEbMERGE = ( sInven_BackUp.sItemCustom.wTurnNum<pInvenData->sDrugOp.wPileNum );
        if ( 
    bMERGE )
        {
            
    WORD wTurnNum sInven_BackUp.sItemCustom.wTurnNum sItemHold.wTurnNum;

            if ( 
    wTurnNum <= pInvenData->sDrugOp.wPileNum )
            {
                
    //    Note : °ãħ ¼ö Á¶Á¤.
                
    pInvenItem->sItemCustom.wTurnNum wTurnNum;

                
    //    ¼Õ ÀÖ¾ú´ø ¾ÆÀÌÅÆ Á¦°Å.
                
    RELEASE_HOLD_ITEM ();

                
    //    Note : Àκ¥ÀÇ ¾ÆÀÌÅÛ ¾÷µ¥ÀÌÆ®.
                
    GLMSG::SNET_INVEN_ITEM_UPDATE NetMsgInvenItem;
                
    NetMsgInvenItem.wPosX pNetMsg->wPosX;
                
    NetMsgInvenItem.wPosY pNetMsg->wPosY;
                
    NetMsgInvenItem.sItemCustom pInvenItem->sItemCustom;
                
    NetMsgInvenItem.bVietnamInven TRUE;
                
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgInvenItem);

                
    //    [Àڽſ¡°Ô] ¼Õ ÀÖ¾ú´ø ¾ÆÀÌÅÆ Á¦°Å.
                
    GLMSG::SNETPC_PUTON_RELEASE NetMsg_ReleaseHold(SLOT_HOLD);
                
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg_ReleaseHold);
            }
            else
            {
                
    WORD wSplit wTurnNum pInvenData->sDrugOp.wPileNum;

                
    //    ±âÁ¸ ¾ÆÀÌÅÛ °¹¼ö º¯°æ.
                
    pInvenItem->sItemCustom.wTurnNum pInvenData->sDrugOp.wPileNum;

                
    //    ¼Õ¿¡ µé°í ÀÖ´ø ¾ÆÀÌÅÛ º¯°æ.
                
    sItemHold.wTurnNum wSplit;
                
    HOLD_ITEM sItemHold );

                
    //    Note : ¼Õ¿¡µç ¾ÆÀÌÅÛ º¯°æ.
                
    GLMSG::SNETPC_PUTON_UPDATE NetMsgPutOn;
                
    NetMsgPutOn.emSlot SLOT_HOLD;
                
    NetMsgPutOn.sItemCustom sItemHold;
                
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgPutOn);

                
    //    Note : Àκ¥ÀÇ ¾ÆÀÌÅÛ ¾÷µ¥ÀÌÆ®.
                
    GLMSG::SNET_INVEN_ITEM_UPDATE NetMsgInvenItem;
                
    NetMsgInvenItem.wPosX pNetMsg->wPosX;
                
    NetMsgInvenItem.wPosY pNetMsg->wPosY;
                
    NetMsgInvenItem.sItemCustom pInvenItem->sItemCustom;
                
    NetMsgInvenItem.bVietnamInven TRUE;
                
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgInvenItem);
            }

            return 
    S_OK;
        }

        
    //    Àι꿡 ÀÖ´ø ¾ÆÀÌÅÆ »èÁ¦.
        
    BOOL bOk m_cVietnamInventory.DeleteItem sInven_BackUp.wPosXsInven_BackUp.wPosY );

        
    //    Note : Á¾Àü ¼Õ¿¡µç ¾ÆÀÌÅÆ°ú µé·Á´Â ¾ÆÀÌÅÆÀÇ Å©±â°¡ Æ²¸± °æ¿ì.
        //    µé°í Àִ ¾ÆÀÌÅÆÀÌ µé¾î°¥ °ø°£À» Ã£´Â´Ù.
    //    if ( !pInvenData->SAME_INVENSIZE ( *pHoldData ) )
        
    {
            
    //    µ¿ÀÏÀ§Ä¡¿¡ ³ÖÀ»¼ö ÀÖ´ÂÁö °Ë»ç.
            
    BOOL bOk m_cVietnamInventory.IsInsertable pHoldData->sBasicOp.wInvenSizeXpHoldData->sBasicOp.wInvenSizeYwPosXwPosY );
            if ( !
    bOk )
            {
                
    //    µé°íÀÖ´ø ¾ÆÀÌÅÆ Àι꿡 ³ÖÀ» °ø°£ÀÌ ÀÖ´ÂÁö °Ë»ö.
                
    bOk m_cVietnamInventory.FindInsrtable pHoldData->sBasicOp.wInvenSizeXpHoldData->sBasicOp.wInvenSizeYwPosXwPosY );
                if ( !
    bOk )
                {
                    
    //    roll-back : Àι꿡¼­ »èÁ¦Çß´ø ¾ÆÀÌÅÆÀ» ´Ù½Ã ³ÖÀ½.
                    
    sInven_BackUp.sItemCustom.bVietnamGainItem true;
                    
    m_cVietnamInventory.InsertItem sInven_BackUp.sItemCustomsInven_BackUp.wPosXsInven_BackUp.wPosYtrue );

                    return 
    S_FALSE;
                }
            }
        }

        
    //    µé°íÀÖ´ø ¾ÆÀÌÅÆ Àι꿡 ³ÖÀ½.
        
    sItemHold.bVietnamGainItem true;
        
    m_cVietnamInventory.InsertItem sItemHoldwPosXwPosY );
        
    SINVENITEM *pINSERT_ITEM m_cVietnamInventory.GetItem(wPosX,wPosY);
        if ( !
    pINSERT_ITEM )
        {
            
    GLGaeaServer::GetInstance().GetConsoleMsg()->Write "error MsgReqInvenExHold(), sItemHold, id(%d,%d) to pos(%d,%d)",
                
    sItemHold.sNativeID.wMainIDsItemHold.sNativeID.wSubIDwPosXwPosY );
            return 
    S_FALSE;
        }

        
    //    Àι꿡 ÀÖ¾ú´ø ¾ÆÀÌÅÆÀ» ¼Õ¿¡ µë.
        
    HOLD_ITEM sInven_BackUp.sItemCustom );

        
    //    [Àڽſ¡°Ô] Àι꿡 ÀÖ´ø ¾ÆÀÌÅÆ »èÁ¦, ¹× ¾ÆÀÌÅÆ »ðÀÔ.
        
    GLMSG::SNETPC_INVEN_DEL_AND_INSERT NetMsg_Del_Insert;
        
    NetMsg_Del_Insert.wDelX sInven_BackUp.wPosX;                    //    »èÁ¦µÉ ¾ÆÀÌÅÆ.
        
    NetMsg_Del_Insert.wDelY sInven_BackUp.wPosY;
        
    NetMsg_Del_Insert.bVietnamInven TRUE;
        if ( 
    pINSERT_ITEM )    NetMsg_Del_Insert.sInsert = *pINSERT_ITEM;    //    »ðÀԵǴ ¾ÆÀÌÅÆ.

        
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg_Del_Insert);

        
    //    [Àڽſ¡°Ô] Àι꿡 ÀÖ¾ú´ø ¾ÆÀÌÅÆÀ» ¼Õ¿¡ µë.
        
    GLMSG::SNETPC_PUTON_UPDATE NetMsg_PutOn;
        
    NetMsg_PutOn.emSlot SLOT_HOLD;
        
    NetMsg_PutOn.sItemCustom sInven_BackUp.sItemCustom;
        
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg_PutOn);

        return 
    S_OK;
    }

    HRESULT GLChar::MsgReqHoldToVNGain(NET_MSG_GENERICnmg)
    {
        
    GLMSG::SNETPC_REQ_HOLD_TO_VNGAIN *pNetMsg reinterpret_cast<GLMSG::SNETPC_REQ_HOLD_TO_VNGAIN*> ( nmg );

        if ( !
    VALID_HOLD_ITEM() )
        {
            return 
    S_FALSE;
        }

        
    SITEMpHoldData GLItemMan::GetInstance().GetItem GET_HOLD_ITEM().sNativeID );
        if ( !
    pHoldData )
        {
            return 
    E_FAIL;
        }

        
    //    Àκ¥ À§Ä¡.
        
    WORD wInsertPosX pNetMsg->wPosXwInsertPosY pNetMsg->wPosY;

        
    // ÇØÅ· ÀçÇö ( ¾ÆÀÌÅÛÀÇ »çÀÌÁî°¡ 0 À϶§ )
        //pHoldData->sBasicOp.wInvenSizeX = 0, pHoldData->sBasicOp.wInvenSizeY = 0;

        
    BOOL bOk m_cVietnamInventory.IsInsertable pHoldData->sBasicOp.wInvenSizeXpHoldData->sBasicOp.wInvenSizeYwInsertPosXwInsertPosY );
        if ( !
    bOk )
        {
            
    //    ÀιêÀÌ °¡µæÂþÀ½.
            
    return E_FAIL;
        }

        
    //    µé°íÀÖ´ø ¾ÆÀÌÅÆ Àι꿡 ³ÖÀ½.
        
    SITEMCUSTOMsITEM_NEW m_PutOnItems[SLOT_HOLD];
        
    sITEM_NEW.bVietnamGainItem true;
        
    bOk m_cVietnamInventory.InsertItem sITEM_NEWwInsertPosXwInsertPosY );
        if ( !
    bOk     ) return E_FAIL;

        
    SINVENITEM sINVENITEM = *m_cVietnamInventory.FindPosItem wInsertPosXwInsertPosY );

        
    //    ¼º°ø½Ã ¾ÆÀÌÅÆ Á¦°Å.
        
    RELEASE_HOLD_ITEM ();

        
    //    [Àڽſ¡°Ô] Àι꿡 ¾ÆÀÌÅÆ »ðÀÔ.
        
    GLMSG::SNETPC_INVEN_INSERT NetMsg_Inven_Insert;
        
    NetMsg_Inven_Insert.bVietnamInven TRUE;
        
    NetMsg_Inven_Insert.Data sINVENITEM;
        
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg_Inven_Insert);

        
    //    [Àڽſ¡°Ô] ¼Õ ÀÖ¾ú´ø ¾ÆÀÌÅÆ Á¦°Å.
        
    GLMSG::SNETPC_PUTON_RELEASE NetMsg_ReleaseHold(SLOT_HOLD);
        
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg_ReleaseHold);    

        return 
    S_OK;
    }

    HRESULT GLChar::MsgReqVNInvenToInvenNET_MSG_GENERICnmg )
    {

        if ( 
    m_dwVietnamInvenCount <= ) return E_FAIL;

        
    GLMSG::SNETPC_REQ_VNINVEN_TO_INVEN *pNetMsg = (GLMSG::SNETPC_REQ_VNINVEN_TO_INVEN *)nmg;

        
    SINVENITEMpInvenItem(NULL);
        
    pInvenItem m_cVietnamInventory.GetItem pNetMsg->wPosXpNetMsg->wPosY );

        
    //    »ì·Á°í Çϴ ¾ÆÀÌÅÆÀÌ ¾ø½À´Ï´Ù.
        
    if ( !pInvenItem )                                            return E_FAIL;
        
    SITEMpItem GLItemMan::GetInstance().GetItem pInvenItem->sItemCustom.sNativeID );
        if ( !
    pItem )                                                return E_FAIL;

        
    WORD wINVENX pItem->sBasicOp.wInvenSizeX;
        
    WORD wINVENY pItem->sBasicOp.wInvenSizeY;

        
    WORD wInsertPosX(0), wInsertPosY(0);
        
    BOOL bITEM_SPACE(false);
        
    bITEM_SPACE m_cInventory.FindInsrtable wINVENXwINVENYwInsertPosXwInsertPosY );

        
    //    Àκ¥¿¡ ¿©À¯°ø°£ÀÌ ¾øÀ» °æ¿ì Ãë¼ÒµÊ.
        
    if ( !bITEM_SPACE )        return E_FAIL;

        
    SITEMCUSTOM sITEM_NEW pInvenItem->sItemCustom;

        
    sITEM_NEW.bVietnamGainItem false;
        
    m_cInventory.InsertItem sITEM_NEWwInsertPosXwInsertPosY );
        
    m_cVietnamInventory.DeleteItempNetMsg->wPosXpNetMsg->wPosY );

        
    SINVENITEM sINVENITEM = *m_cInventory.FindPosItem wInsertPosXwInsertPosY );

        
    m_dwVietnamInvenCount--;
        
    GLMSG::SNETPC_INVEN_VIETNAM_ITEMGETNUM_UPDATE NetMsgFB;
        
    NetMsgFB.dwVietnamInvenCount m_dwVietnamInvenCount;
        
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);

        
    GLMSG::SNETPC_REQ_VNINVEN_TO_INVEN_FB NetMsg;
        
    NetMsg.wPosX    pNetMsg->wPosX;
        
    NetMsg.wPosY    pNetMsg->wPosY;
        
    NetMsg.wNewPosX wInsertPosX;
        
    NetMsg.wNewPosY wInsertPosY;
        
    NetMsg.Data        sINVENITEM;
        
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg);    

        
    SITEM *pITEM GLItemMan::GetInstance().GetItem sINVENITEM.sItemCustom.sNativeID );
        if ( 
    pITEM && pITEM->IsTIMELMT() )
        {

            if ( 
    pITEM->sDrugOp.tTIME_LMT != )
            {
                const 
    CTime cTIME_CUR CTime::GetCurrentTime();

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

                
    WORD wInsertPosX sINVENITEM.wPosXwInsertPosY sINVENITEM.wPosY;


                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);

                    
    //    Note : ¾ÆÀÌÅÛ »èÁ¦.
                    //
                    
    m_cInventory.DeleteItem sINVENITEM.wPosXsINVENITEM.wPosY );
                
                    
    //    Note : ÄÚ½ºÅù º¹±¸.
                    
    if ( sINVENITEM.sItemCustom.nidDISGUISE!=SNATIVEID(false) )
                    {
                        
    SITEM *pONE GLItemMan::GetInstance().GetItem sINVENITEM.sItemCustom.nidDISGUISE );
                        if ( !
    pONE )        return E_FAIL;

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

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

                        
    //    Note : ¾ÆÀÌÅÛ »ý¼º.
                        //
                        
    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 );

                        
    //    Note : Àκ¥¿¡ µé¾î°¥ °ø°£ °Ë»ç.
                        
    BOOL bOk m_cInventory.IsInsertable pONE->sBasicOp.wInvenSizeXpONE->sBasicOp.wInvenSizeYwInsertPosXwInsertPosY );
                        if ( !
    bOk )            return E_FAIL;

                        
    //    Note : Àκ¥¿¡ ³ÖÀ½.
                        
    m_cInventory.InsertItem sITEM_NEWwInsertPosXwInsertPosY );
                        
    SINVENITEM *pINSERT_ITEM m_cInventory.GetItem wInsertPosXwInsertPosY );

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

                        
    //    Note : ºÐ¸®µÈ ÄÚ½ºÅù ·Î±×.
                        
    GLITEMLMT::GetInstance().ReqItemRoute pINSERT_ITEM->sItemCustomID_CHAR0ID_CHARm_dwCharIDEMITEM_ROUTE_CHARpINSERT_ITEM->sItemCustom.wTurnNum );
                    }
                }
            }
        }    

        return 
    S_OK;
    }

    HRESULT GLChar::MsgReqVNGainInvenReset(NET_MSG_GENERICnmg)
    {
        
    m_cVietnamInventory.DeleteItemAll();

        return 
    S_OK;
    }


    HRESULT GLChar::MsgReqInvenSplit NET_MSG_GENERICnmg )
    {
        
    GLMSG::SNETPC_REQ_INVEN_SPLIT *pNetMsg = (GLMSG::SNETPC_REQ_INVEN_SPLIT *)nmg;
        
        
    BOOL bOk(FALSE);

        
    //    Note : ºÐ¸® ¿äû ¾ÆÀÌÅ۠ãÀ½.
        
    SINVENITEMpInvenItem m_cInventory.FindPosItem pNetMsg->wPosXpNetMsg->wPosY );
        if ( !
    pInvenItem )                                    return E_FAIL;

        
    //    Note : ¾ÆÀÌÅÛ Á¤º¸ °¡Á®¿À±â.
        
    SITEMpItem GLItemMan::GetInstance().GetItem pInvenItem->sItemCustom.sNativeID );
        if ( !
    pItem )                                                    return E_FAIL;

        
    //    Note : ºÐ¸® °¡´ÉÇÑ ¾ÆÀÌÅÛÀÎÁö Á¡°Ë.
        
    bool bSPLIT(false);
        
    bSPLIT = ( pItem->ISINSTANCE() );
        if ( !
    bSPLIT )                                                    return E_FAIL;
        if ( 
    pNetMsg->wSplit )                                        return E_FAIL;
        if ( 
    pInvenItem->sItemCustom.wTurnNum <= )                    return E_FAIL;
        if ( 
    pInvenItem->sItemCustom.wTurnNum <= pNetMsg->wSplit  )        return E_FAIL;

        
    //    Note : ¿øº» ¾ÆÀÌÅÛÀÇ º¯È­µÈ °¹¼ö.
        
    WORD wORGIN_SPLIT pInvenItem->sItemCustom.wTurnNum pNetMsg->wSplit;

        
    //    Note : ºÐ¸®µÇ¾î »õ·Î »ý±â´Â ¾ÆÀÌÅÛ.
        
    SITEMCUSTOM sNEW_ITEM pInvenItem->sItemCustom;
        
    sNEW_ITEM.wTurnNum pNetMsg->wSplit;

        
    //    Note : »õ·Î »ý±â´Â ¾ÆÀÌÅÛ À§Ä¡ Ã£±â.
        
    WORD wInvenPosX(0), wInvenPosY(0);
        
    bOk m_cInventory.FindInsrtable pItem->sBasicOp.wInvenSizeXpItem->sBasicOp.wInvenSizeYwInvenPosXwInvenPosY );
        if ( !
    bOk )    return E_FAIL;

        
    //    Note : »õ·Î »ý±ä ¾ÆÀÌÅÛ ³Ö±â.
        
    bOk m_cInventory.InsertItem sNEW_ITEMwInvenPosXwInvenPosY );
        if ( !
    bOk )                                            return E_FAIL;

        
    //    Note : »õ·Î »ý±ä ¾ÆÀÌÅÛ Á¤º¸ °¡Á®¿À±â.
        
    SINVENITEMpNewItem m_cInventory.GetItem wInvenPosXwInvenPosY );
        if ( !
    bOk )                                            return E_FAIL;

        
    //    Note : ¿øº» ¾ÆÀÌÅÛÀÇ °¹¼ö º¯°æ ½ÃÅ´.
        
    pInvenItem->sItemCustom.wTurnNum wORGIN_SPLIT;

        
    //    Note : Àκ¥¿¡ »õ·Î ºÐ¸®µÇ¾î µé¾î °¡´Â ¾ÆÀÌÅÛ.
        
    GLMSG::SNETPC_INVEN_INSERT NetMsgNew;
        
    NetMsgNew.Data = *pNewItem;
        
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgNew);

        
    //    Note : ¿øº» ¾ÆÀÌÅÛ °¹¼ö º¯°æ.
        
    GLMSG::SNETPC_INVEN_DRUG_UPDATE NetMsgInven;
        
    NetMsgInven.wPosX pNetMsg->wPosX;
        
    NetMsgInven.wPosY pNetMsg->wPosY;
        
    NetMsgInven.wTurnNum wORGIN_SPLIT;
        
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgInven);

        return 
    S_OK;
    }

    HRESULT GLChar::MsgReqHoldToInven NET_MSG_GENERICnmg )
    {
        
    GLMSG::SNETPC_REQ_HOLD_TO_INVEN *pNetMsg reinterpret_cast<GLMSG::SNETPC_REQ_HOLD_TO_INVEN*> ( nmg );

    #if defined(VN_PARAM) //vietnamtest%%%
        
    if ( pNetMsg->bUseVietnamInven && m_dwVietnamInvenCount <= ) return E_FAIL;
    #endif

        
    if ( !VALID_HOLD_ITEM() )
        {
            return 
    S_FALSE;
        }

        
    SITEMpHoldData GLItemMan::GetInstance().GetItem GET_HOLD_ITEM().sNativeID );
        if ( !
    pHoldData )
        {
            return 
    E_FAIL;
        }

        
    //    Àκ¥ À§Ä¡.
        
    WORD wInsertPosX pNetMsg->wPosXwInsertPosY pNetMsg->wPosY;

        
    // ÇØÅ· ÀçÇö ( ¾ÆÀÌÅÛÀÇ »çÀÌÁî°¡ 0 À϶§ )
        //pHoldData->sBasicOp.wInvenSizeX = 0, pHoldData->sBasicOp.wInvenSizeY = 0;

        
    BOOL bOk m_cInventory.IsInsertable pHoldData->sBasicOp.wInvenSizeXpHoldData->sBasicOp.wInvenSizeYwInsertPosXwInsertPosY );
        if ( !
    bOk )
        {
            
    //    ÀιêÀÌ °¡µæÂþÀ½.
            
    return E_FAIL;
        }

        
    //    µé°íÀÖ´ø ¾ÆÀÌÅÆ Àι꿡 ³ÖÀ½.    
    #if defined(VN_PARAM) //vietnamtest%%%   
        
    SITEMCUSTOMsCustom m_PutOnItems[SLOT_HOLD];
        if ( 
    sCustom.bVietnamGainItem && m_dwVietnamInvenCount <= ) return E_FAIL;
        
        
    sCustom.bVietnamGainItem false;
    #endif    

        
    bOk m_cInventory.InsertItem GET_HOLD_ITEM(), wInsertPosXwInsertPosY );
        if ( !
    bOk     ) return E_FAIL;

        
    SINVENITEM sINVENITEM = *m_cInventory.FindPosItem wInsertPosXwInsertPosY );

        
    //    ¼º°ø½Ã ¾ÆÀÌÅÆ Á¦°Å.
        
    RELEASE_HOLD_ITEM ();

    #if defined(VN_PARAM) //vietnamtest%%%
        
    if( pNetMsg->bUseVietnamInven )
        {
            
    m_dwVietnamInvenCount--;

            
    GLMSG::SNETPC_INVEN_VIETNAM_ITEMGETNUM_UPDATE NetMsgFB;
            
    NetMsgFB.dwVietnamInvenCount m_dwVietnamInvenCount;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
        }
    #endif

        //    [Àڽſ¡°Ô] Àι꿡 ¾ÆÀÌÅÆ »ðÀÔ.
        
    GLMSG::SNETPC_INVEN_INSERT NetMsg_Inven_Insert;
        
    NetMsg_Inven_Insert.Data sINVENITEM;
        
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg_Inven_Insert);

        
    //    [Àڽſ¡°Ô] ¼Õ ÀÖ¾ú´ø ¾ÆÀÌÅÆ Á¦°Å.
        
    GLMSG::SNETPC_PUTON_RELEASE NetMsg_ReleaseHold(SLOT_HOLD);
        
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg_ReleaseHold);


        
    //    À¯È¿±â°£ Ãʰú Á¡°Ë.
        
    SITEM *pITEM GLItemMan::GetInstance().GetItem sINVENITEM.sItemCustom.sNativeID );
        if ( 
    pITEM && pITEM->IsTIMELMT() )
        {
            if ( 
    pITEM->sDrugOp.tTIME_LMT != )
            {
                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 != )
                    {
                        
    GLVEHICLEpNewVehicle = new GLVEHICLE();
                        
    CGetVehiclepGetVehicle = new CGetVehicle pNewVehicle
                                                     
    sINVENITEM.sItemCustom.dwVehicleID
                                                     
    m_dwClientID
                                                     
    m_dwCharID
                                                     
    true );
                        
    GLDBManpDBMan GLGaeaServer::GetInstance().GetDBMan ();
                        if ( 
    pDBMan pDBMan->AddJob pGetVehicle );
                    }

                    
    // ÆÖÄ«µåÀÏ °æ¿ì
                    
    if ( pITEM->sBasicOp.emItemType == ITEM_PET_CARD && sINVENITEM.sItemCustom.dwPetID != )
                    {
                        
    CDeletePetpDbAction = new CDeletePet m_dwCharIDsINVENITEM.sItemCustom.dwPetID );
                        
    GLDBManpDBMan 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 0ACCETYPESIZE; ++)
                            {
                                
    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_dwCharIDm_dwClientID );
                            if ( 
    pDBMan pDBMan->AddJob pDbAction );
                        }
                        else
                        {
                            
    // ¾Ç¼¼»ç¸®¸¦ Ã¼Å©ÈÄ ÆÖÀ» DB¿¡¼­ »èÁ¦ÇØÁØ´Ù.
                            
    GLPETpNewPet = new GLPET ();
                            
    CGetPetpGetPet = new CGetPet pNewPet
                                                             
    sINVENITEM.sItemCustom.dwPetID
                                                             
    m_dwClientID
                                                             
    m_dwCharID,
                                                             
    sINVENITEM.wPosX,
                                                             
    sINVENITEM.wPosY,
                                                             
    true );
                            
    GLDBManpDBMan 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);

                    
    //    Note : ¾ÆÀÌÅÛ »èÁ¦.
                    //
                    
    m_cInventory.DeleteItem sINVENITEM.wPosXsINVENITEM.wPosY );
                
                    
    //    Note : ÄÚ½ºÅù º¹±¸.
                    
    if ( sINVENITEM.sItemCustom.nidDISGUISE!=SNATIVEID(false) )
                    {
                        
    SITEM *pONE GLItemMan::GetInstance().GetItem sINVENITEM.sItemCustom.nidDISGUISE );
                        if ( !
    pONE )        return E_FAIL;

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

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

                        
    //    Note : ¾ÆÀÌÅÛ »ý¼º.
                        //
                        
    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 );

                        
    //    Note : Àκ¥¿¡ µé¾î°¥ °ø°£ °Ë»ç.
                        
    BOOL bOk m_cInventory.IsInsertable pONE->sBasicOp.wInvenSizeXpONE->sBasicOp.wInvenSizeYwInsertPosXwInsertPosY );
                        if ( !
    bOk )            return E_FAIL;

                        
    //    Note : Àκ¥¿¡ ³ÖÀ½.
                        
    m_cInventory.InsertItem sITEM_NEWwInsertPosXwInsertPosY );
                        
    SINVENITEM *pINSERT_ITEM m_cInventory.GetItem wInsertPosXwInsertPosY );

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

                        
    //    Note : ºÐ¸®µÈ ÄÚ½ºÅù ·Î±×.
                        
    GLITEMLMT::GetInstance().ReqItemRoute pINSERT_ITEM->sItemCustomID_CHAR0ID_CHARm_dwCharIDEMITEM_ROUTE_CHARpINSERT_ITEM->sItemCustom.wTurnNum );
                    }
                }
            }
        }

    /*
        // È¹µæÇÑ ¾ÆÀÌÅÛÀÌ ÆÖÄ«µå && »ý¼ºµÈ ÆÖÀ̶ó¸é ¼ÒÀ¯±ÇÀ» ÀÌÀüÇÑ´Ù.
        // ÆÖ¾ÆÀ̵𰡠0 ÀÌ ¾Æ´Ï¸é ÆÖÄ«µåÀ̸鼭 DB¿¡ ÆÖÀÌ »ý¼ºµÈ °ÍÀÌ´Ù.
        if ( pHoldData->sBasicOp.emItemType == ITEM_PET_CARD && sINVENITEM.sItemCustom.dwPetID != 0 )
        {
            CExchangePet* pDbAction = new CExchangePet ( m_dwCharID, sINVENITEM.sItemCustom.dwPetID );
            GLDBMan* pDBMan = GLGaeaServer::GetInstance().GetDBMan ();
            if ( pDBMan ) pDBMan->AddJob ( pDbAction );
        }
    */


        
    return S_OK;
    }

    HRESULT GLChar::MsgReqHoldToField NET_MSG_GENERICnmg )
    {
        
    GLMSG::SNETPC_REQ_HOLD_TO_FIELD *pNetMsg reinterpret_cast<GLMSG::SNETPC_REQ_HOLD_TO_FIELD*> ( nmg );

        if ( !
    VALID_HOLD_ITEM () )    return S_FALSE;

        
    D3DXVECTOR3 vCollisionPos;
        
    BOOL bCollision m_pLandMan->IsCollisionNavi
            
    (
            
    pNetMsg->vPos D3DXVECTOR3(0,+5,0),
            
    pNetMsg->vPos D3DXVECTOR3(0,-5,0),
            
    vCollisionPos
            
    );

        if ( !
    bCollision )            return S_FALSE;

        const 
    SITEMCUSTOMsITEMCUSTOM GET_HOLD_ITEM();

    #if defined(VN_PARAM) //vietnamtest%%%
        
    if ( sITEMCUSTOM.bVietnamGainItem )
        {
            
    //    ¾ÆÀÌÅÆ Á¦°Å.
            
    RELEASE_HOLD_ITEM ();

            
    //    [Àڽſ¡°Ô] ¼Õ ÀÖ¾ú´ø ¾ÆÀÌÅÆ Á¦°Å.
            
    GLMSG::SNETPC_PUTON_RELEASE NetMsg_ReleaseHold(SLOT_HOLD);
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg_ReleaseHold);

            return 
    S_OK;
        }
    #endif


        
    SITEMCUSTOM sCustom GET_HOLD_ITEM();
        
    SITEM *pITEM GLItemMan::GetInstance().GetItem sITEMCUSTOM.sNativeID );
        if ( !
    pITEM )        return false;

        
    // ¹ö¸®´Â ¾ÆÀÌÅÛÀÌ ÆÖÄ«µå && ÆÖÀ̠Ȱ¼º»óÅÂÀ̸頹ö¸± ¼ö ¾ø´Ù
        
    if ( pITEM->sBasicOp.emItemType == ITEM_PET_CARD )
        {
            
    PGLPETFIELD pMyPet GLGaeaServer::GetInstance().GetPET m_dwPetGUID );
            if ( 
    pMyPet && pMyPet->IsValid () && sITEMCUSTOM.dwPetID == pMyPet->m_dwPetID ) return FALSE;
        }
        
        
    //    °Å·¡¿É¼Ç
        // 
        
    if ( !pITEM->sBasicOp.IsTHROW() && ( pITEM && sCustom.bWrap!=true ) )                        return FALSE;

        
    // GMCharEdit ·Î ³ÖÀº ¾ÆÀÌÅÛÀº ¹ö¸®±â ºÒ°¡´ÉÇÏ´Ù.
        
    if ( sITEMCUSTOM.IsGM_GENITEM() && ( pITEM && sCustom.bWrap!=true ) )                        return FALSE;

        
    //    Item Drop ½Ãµµ.
        
    BOOL bDrop m_pLandMan->DropItem vCollisionPosconst_cast<SITEMCUSTOM*> ( &sITEMCUSTOM ) );
        if ( !
    bDrop )                return S_FALSE;

        
    //    Note :¾ÆÀÌÅÛÀÇ ¼ÒÀ¯ ÀÌÀü °æ·Î ±â·Ï.
        //
        
    GLITEMLMT::GetInstance().ReqItemRoute sITEMCUSTOMID_CHARm_dwCharIDID_CHAR0EMITEM_ROUTE_GROUNDsITEMCUSTOM.wTurnNum );

        
    //    Drop ½Ã ¾ÆÀÌÅÆ Á¦°Å.
        
    RELEASE_HOLD_ITEM ();

        
    //    [Àڽſ¡°Ô] ¼Õ ÀÖ¾ú´ø ¾ÆÀÌÅÆ Á¦°Å.
        
    GLMSG::SNETPC_PUTON_RELEASE NetMsg_ReleaseHold(SLOT_HOLD);
        
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg_ReleaseHold);

        return 
    S_OK;
    }

    BOOL ISBOTH_HANDHELD SITEM *pITEM )
    {
        
    GASSERT pITEM );
        return ( (
    pITEM->sSuitOp.emSuit==SUIT_HANDHELD) && pITEM->sSuitOp.IsBOTHHAND() );
    }

    HRESULT GLChar::MsgReqSlotToHold NET_MSG_GENERICnmg )
    {
        
    GLMSG::SNETPC_REQ_SLOT_TO_HOLD *pNetMsg reinterpret_cast<GLMSG::SNETPC_REQ_SLOT_TO_HOLD*> ( nmg );
        if ( 
    pNetMsg->emSlot >= SLOT_TSIZE )        return S_FALSE;

        if ( 
    VALID_HOLD_ITEM () )                    return S_FALSE;
        if ( !
    VALID_SLOT_ITEM(pNetMsg->emSlot) )    return S_FALSE;
        if ( 
    m_sCONFTING.IsCONFRONTING() )            return S_FALSE;

        
    EMSLOT emRHand GetCurRHand();
        
    EMSLOT emLHand GetCurLHand();

        
    SITEM *pITEM_LEFT=NULL, *pITEM_RIGHT=NULL;
        if ( 
    VALID_SLOT_ITEM(emLHand) )    pITEM_LEFT GLItemMan::GetInstance().GetItem(GET_SLOT_ITEM(emLHand).sNativeID);
        if ( 
    VALID_SLOT_ITEM(emRHand) )    pITEM_RIGHT GLItemMan::GetInstance().GetItem(GET_SLOT_ITEM(emRHand).sNativeID);

        
    //    ¾ç¼Õ ¸ðµÎ Âø¿ë ¹«±â ÀÖÀ» °æ¿ì.    È°+È­»ì, Ã¢+ºÎÀû. ¼¼Æ®·Î µ¿ÀÛÇϴ ¹«±â·ù°¡ ÀÖÀ½ À̶§ ¸ðµÎ »©³»¾ßÇÔ.
        //
        
    if ( pNetMsg->emSlot==emRHand )
        {
            if ( (
    pITEM_RIGHT->sSuitOp.emAttack==ITEMATT_BOW) || (pITEM_RIGHT->sSuitOp.emAttack==ITEMATT_SCYTHE)|| (pITEM_RIGHT->sSuitOp.emAttack==ITEMATT_SPEAR) || (pITEM_RIGHT->sSuitOp.emAttack==ITEMATT_DUAL_GUN || pITEM_RIGHT->sSuitOp.emAttack==ITEMATT_RAIL_GUN || pITEM_RIGHT->sSuitOp.emAttack==ITEMATT_PORTAL_GUN) ) //|| (pITEM_RIGHT->sSuitOp.emAttack==ITEMATT_RIFLE) )
            
    {
                if ( 
    pITEM_LEFT )    //    È­»ì, ºÎÀû »©³»¾ß ÇÔ.
                
    {
                    
    SITEMCUSTOM sITEM_LHAND GET_SLOT_ITEM(emLHand);

                    
    WORD wInvenPosXwInvenPosY;
                    
    BOOL bOk m_cInventory.FindInsrtable pITEM_LEFT->sBasicOp.wInvenSizeXpITEM_LEFT->sBasicOp.wInvenSizeYwInvenPosXwInvenPosY );
                    if ( 
    bOk )
                    {
                        
    //    Á¾Àü ¾ÆÀÌÅÆ Àι꿡 ³ÖÀ½.
                        
    m_cInventory.InsertItem sITEM_LHANDwInvenPosXwInvenPosY );

                        
    //    [Àڽſ¡°Ô] Àι꿡 ¾ÆÀÌÅÆ »ðÀÔ.
                        
    GLMSG::SNETPC_INVEN_INSERT NetMsg_Inven_Insert;
                        
    NetMsg_Inven_Insert.Data = *m_cInventory.GetItem(wInvenPosXwInvenPosY);
                        
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg_Inven_Insert);

                        
    //    [¸ðµÎ¿¡°Ô] µð½ºÇ÷¹ÀÌ ¾ÆÀÌÅÛÀÌ ¾Æ´Ñ°É·Î °¡Á¤ÇÏ¿© ¹«½Ã.
                    
    }
                    
    //    Note : Àκ¥Å丮 ³Ö±â¿¡ ½ÇÆÐÇÏ¿´À» °æ¿ì.
                    
    else
                    {
                        
    //    Item Drop ½Ãµµ.
                        
    BOOL bDrop m_pLandMan->DropItem m_vPos, &sITEM_LHAND );

                        
    //    Note :¾ÆÀÌÅÛÀÇ ¼ÒÀ¯ ÀÌÀü °æ·Î ±â·Ï.
                        //
                        
    GLITEMLMT::GetInstance().ReqItemRoute sITEM_LHANDID_CHARm_dwCharIDID_CHAR0EMITEM_ROUTE_GROUNDsITEM_LHAND.wTurnNum );
                    }

                    
    //    ¿ÞÂÊ ½½·Ô Áö¿öÁÜ.
                    
    RELEASE_SLOT_ITEM(emLHand);

                    
    //    [Àڽſ¡°Ô] SLOT¿¡ ÀÖ¾ú´ø ¾ÆÀÌÅÆ Á¦°Å.
                    
    GLMSG::SNETPC_PUTON_RELEASE NetMsg_PutOn_Release(emLHand);
                    
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg_PutOn_Release);
                }
            }
        }

        if ( 
    pNetMsg->emSlot== SLOT_VEHICLE && m_bGetVehicleFromDB )
        {
            
    GLGaeaServer::GetInstance().GetConsoleMsg()->Write"Vehicle Slot Release Error, m_bGetVehicleFromDB : %d",
                                                                 
    m_bGetVehicleFromDB );
            return 
    S_FALSE;
        }

        
    //    ¼Õ¿¡ µé°Ô ÇÔ.
        
    HOLD_ITEM GET_SLOT_ITEM(pNetMsg->emSlot) );

        
    //    SLOT ¾ÆÀÌÅÆ Á¦°Å.
        
    RELEASE_SLOT_ITEM pNetMsg->emSlot );

        
    //    ¾ÆÀÌÅÆ º¯°æ½Ã °ª Àç È¯»ê ÇÊ¿äÇÔ.
        
    INIT_DATA FALSEFALSE );

        
    //    [Àڽſ¡°Ô] SLOT¿¡ ÀÖ¾ú´ø ¾ÆÀÌÅÆ Á¦°Å.
        
    GLMSG::SNETPC_PUTON_RELEASE NetMsg_PutOn_Release(pNetMsg->emSlot);
        
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg_PutOn_Release);

        
    //    [¸ðµÎ¿¡°Ô] ÀÚ½ÅÀÇ Âø¿ë º¹ÀåÀÌ ¹Ù²ñÀ» ¾Ë¸².
        
    GLMSG::SNETPC_PUTON_RELEASE_BRD NetMsg_PutOn_Release_Brd;
        
    NetMsg_PutOn_Release_Brd.dwGaeaID m_dwGaeaID;
        
    NetMsg_PutOn_Release_Brd.emSlot pNetMsg->emSlot;
        
    SendMsgViewAround reinterpret_cast<NET_MSG_GENERIC*>(&NetMsg_PutOn_Release_Brd) );

        
    //    [Àڽſ¡°Ô] ¼Õ¿¡ ¾ÆÀÌÅÆÀ» µé°Ô.
        
    GLMSG::SNETPC_PUTON_UPDATE NetMsg_PutOn;
        
    NetMsg_PutOn.emSlot SLOT_HOLD;
        
    NetMsg_PutOn.sItemCustom GET_HOLD_ITEM();
        
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg_PutOn);


        if ( 
    pNetMsg->emSlot == SLOT_VEHICLE )
        {
            
    GLGaeaServer::GetInstance().SaveVehiclem_dwClientIDm_dwGaeaIDfalse );
        }

        
    // ¹«±â¿¡ µû¸¥ ¹öÇÁ¸¦ ÃʱâÈ­ ÇÑ´Ù.
        
    DisableSkillFact();
        

        return 
    S_OK;
    }

    HRESULT GLChar::MsgReqSlotExHold NET_MSG_GENERICnmg )
    {
        
    GLMSG::SNETPC_REQ_SLOT_EX_HOLD *pNetMsg reinterpret_cast<GLMSG::SNETPC_REQ_SLOT_EX_HOLD*> ( nmg );
        if ( 
    pNetMsg->emSlot >= SLOT_TSIZE )        return S_FALSE;

        if ( !
    VALID_HOLD_ITEM () )                    return S_FALSE;
        if ( 
    m_sCONFTING.IsCONFRONTING() )            return S_FALSE;

        
    BOOL bOk(FALSE);

    #if defined(VN_PARAM) //vietnamtest%%%
        
    if ( GET_HOLD_ITEM().bVietnamGainItem )    return S_FALSE;
    #endif

        
    if( GET_HOLD_ITEM().nidDISGUISE!=SNATIVEID(false) )
        {
            
    //    ÄÚ½ºÆ¬À» ÀÔÈù ¾ÆÀÌÅÛÀÏ °æ¿ì
            
    bOk ACCEPT_ITEM GET_HOLD_ITEM().sNativeIDGET_HOLD_ITEM().nidDISGUISE );
            if ( !
    bOk )    return E_FAIL;
        }
        else
        {
            
    //    ÀÚ°ÝÁ¶°Ç¿¡ ºÎÇÕÇÏ´ÂÁö °Ë»ç.
            
    bOk ACCEPT_ITEM GET_HOLD_ITEM().sNativeID );
            if ( !
    bOk )    return E_FAIL;
        }

        
    //    ÇØ´ç ½½·Ô¿¡ ÀåÂø °¡´ÉÇÑÁö °Ë»ç.
        
    bOk CHECKSLOT_ITEM GET_HOLD_ITEM().sNativeIDpNetMsg->emSlot );
        if ( !
    bOk )    return E_FAIL;
        
        
    WORD wInvenPosXwInvenPosY;
        
    SITEMCUSTOM sToHoldItem(NATIVEID_NULL());
        
    SITEMCUSTOM sToInvenItem(NATIVEID_NULL());
        
    SITEMCUSTOM sToSlotItem(NATIVEID_NULL());

        
    SITEM *pITEM_TOSLOT GLItemMan::GetInstance().GetItem(GET_HOLD_ITEM().sNativeID);
        if ( !
    pITEM_TOSLOT )    return E_FAIL;

        
    EMSLOT emRHand GetCurRHand();
        
    EMSLOT emLHand GetCurLHand();

        
    //    Note : ÀϹݠ½½·ÔÀÏ °æ¿ì.
        //
        
    if ( pITEM_TOSLOT->sSuitOp.emSuit!=SUIT_HANDHELD )
        {
            if ( !
    VALID_SLOT_ITEM(pNetMsg->emSlot) )    return S_FALSE;

            
    //    Á¾Àü ¾ÆÀÌÅÆ ¼Õ¿¡ µé°í ÀÖ°Ô.    #1 ¹é¾÷
            
    sToHoldItem GET_SLOT_ITEM pNetMsg->emSlot );

            
    //    ÀåÂøÇÒ ¾ÆÀÌÅÛ ÁöÁ¤.
            
    sToSlotItem GET_HOLD_ITEM();
        }
        
    //    ¼Õ¿¡ µå´Â µµ±¸ÀÏ °æ¿ì.
        
    else
        {
            
    SITEM *pITEM_LEFT=NULL, *pITEM_RIGHT=NULL;
            if ( 
    VALID_SLOT_ITEM(emLHand) )    pITEM_LEFT GLItemMan::GetInstance().GetItem(GET_SLOT_ITEM(emLHand).sNativeID);
            if ( 
    VALID_SLOT_ITEM(emRHand) )    pITEM_RIGHT GLItemMan::GetInstance().GetItem(GET_SLOT_ITEM(emRHand).sNativeID);

            
    //    ¾ç¼Õ µµ±¸¸¦ Âø¿ëÇÏ·Á Çϴ °æ¿ì.
            
    if ( ISBOTH_HANDHELD(pITEM_TOSLOT) )
            {
                if ( 
    pITEM_LEFT && pITEM_RIGHT )
                {
                    
    //    Memo :    ³ÖÀ»·Á´Â ¾ÆÀÌÅÛÀ̠ȰÀÌ°í ¿ÞÂÊ¿¡ Âø¿ëÇÑ ¾ÆÀÌÅÛÀÌ È­»ìÀÌ ¾Æ´Ñ °æ¿ì.
                    
    if( ( (pITEM_TOSLOT->sSuitOp.emAttack==ITEMATT_BOW) && (pITEM_LEFT->sBasicOp.emItemType!=ITEM_ARROW) ) ||
                    
    //    Memo :    ³ÖÀ»·Á´Â ¾ÆÀÌÅÛÀÌ ºÀÀÌ°í ¿ÞÂÊ¿¡ Âø¿ëÇÑ ¾ÆÀÌÅÛÀÌ ºÎÀûÀÌ ¾Æ´Ñ °æ¿ì.
                        
    ( (pITEM_TOSLOT->sSuitOp.emAttack==ITEMATT_SPEAR || pITEM_TOSLOT->sSuitOp.emAttack==ITEMATT_SCYTHE) && (pITEM_LEFT->sBasicOp.emItemType!=ITEM_CHARM) ) ||
                    
    //test gun
                        
    ( (pITEM_TOSLOT->sSuitOp.emAttack==ITEMATT_DUAL_GUN || pITEM_TOSLOT->sSuitOp.emAttack==ITEMATT_RAIL_GUN || pITEM_TOSLOT->sSuitOp.emAttack==ITEMATT_PORTAL_GUN) && (pITEM_LEFT->sBasicOp.emItemType!=ITEM_BULLET) ) || //|| pITEM_TOSLOT->sSuitOp.emAttack==ITEMATT_RIFLE) && (pITEM_LEFT->sBasicOp.emItemType!=ITEM_BULLET) ) ||
                    //    Memo :    ³ÖÀ»·Á´Â ¾ÆÀÌÅÆÀ̠ȰÀ̳ª ÁöÆÎÀ̰¡ ¾Æ´Ò °æ¿ì. & test gun
                        

                        (
    pITEM_TOSLOT->sSuitOp.emAttack!=ITEMATT_BOW) && 
                        (
    pITEM_TOSLOT->sSuitOp.emAttack!=ITEMATT_SPEAR) && 
                        (
    pITEM_TOSLOT->sSuitOp.emAttack!=ITEMATT_DUAL_GUN) && 
                        (
    pITEM_TOSLOT->sSuitOp.emAttack!=ITEMATT_RAIL_GUN )&& 
                        (
    pITEM_TOSLOT->sSuitOp.emAttack!=ITEMATT_PORTAL_GUN)  
                        ) 
                        ) 
    //|| pITEM_TOSLOT->sSuitOp.emAttack!=ITEMATT_RIFLE) ) )
                    
    {
                        
    bOk m_cInventory.FindInsrtable pITEM_LEFT->sBasicOp.wInvenSizeXpITEM_LEFT->sBasicOp.wInvenSizeYwInvenPosXwInvenPosY );
                        if ( !
    bOk )    return E_FAIL;

                        
    //    Á¾Àü ¾ÆÀÌÅÆ Àι꿡 ³ÖÀ½.    #1 ¹é¾÷        //    ¿ÞÂÊ ½½·Ô Áö¿öÁÜ.
                        
    sToInvenItem GET_SLOT_ITEM(emLHand);
                    }

                    
    //    Á¾Àü ¾ÆÀÌÅÆ ¼Õ¿¡ µé°í ÀÖ°Ô.    #2 ¹é¾÷
                    
    sToHoldItem GET_SLOT_ITEM(emRHand);

                    
    //    ÀåÂøÇÒ ¾ÆÀÌÅÛ ÁöÁ¤.
                    
    sToSlotItem GET_HOLD_ITEM();
                }
                else
                {
                    if ( !
    VALID_SLOT_ITEM(pNetMsg->emSlot) )    return S_FALSE;

                    
    //    ¼Õ¿¡ µé°Ô.
                    
    sToHoldItem GET_SLOT_ITEM(pNetMsg->emSlot);

                    
    //    ¾ÆÀÌÅÆ ÀåÂøÇÒ ¾ÆÀÌÅÛ ÁöÁ¤.
                    
    sToSlotItem GET_HOLD_ITEM();
                }
            }
            
    //    ÇѼՠµµ±¸¸¦ Âø¿ëÇÏ·Á Çϴ °æ¿ì.
            
    else
            {
                
    //    Note : Âø¿ëÇÒ·ÁÇϴ µµ±¸°¡ È­»ìÀ̳ª ºÎÀûÀÇ °æ¿ì.
                // test gun
                
    if ( (pITEM_TOSLOT->sBasicOp.emItemType==ITEM_ARROW) || (pITEM_TOSLOT->sBasicOp.emItemType==ITEM_CHARM) || (pITEM_TOSLOT->sBasicOp.emItemType==ITEM_BULLET) )
                {
                    
    //    ¿Þ¼Õ¿¡¸¸ ÀåÂø °¡´É.
                    
    if ( pNetMsg->emSlot != emLHand )
                        return 
    E_FAIL;

                    
    //    Note : ¾ç¼Õ¹«±âÀ̰í È°À̳ª È­»ìÀÏ °æ¿ì¸¸ Âø¿ë °¡´É.
                    //
                    
    if ( pITEM_RIGHT && ISBOTH_HANDHELD(pITEM_RIGHT) )
                    {
                        if ( (
    pITEM_RIGHT->sSuitOp.emAttack==ITEMATT_BOW) && (pITEM_TOSLOT->sBasicOp.emItemType!=ITEM_ARROW) )        return E_FAIL;
                        if ( (
    pITEM_RIGHT->sSuitOp.emAttack==ITEMATT_SPEAR || pITEM_RIGHT->sSuitOp.emAttack==ITEMATT_SCYTHE) && (pITEM_TOSLOT->sBasicOp.emItemType!=ITEM_CHARM) )    return E_FAIL;
                        
    //test gun
                        
    if ( (pITEM_RIGHT->sSuitOp.emAttack==ITEMATT_DUAL_GUN || pITEM_RIGHT->sSuitOp.emAttack==ITEMATT_RAIL_GUN || pITEM_RIGHT->sSuitOp.emAttack==ITEMATT_PORTAL_GUN ) && (pITEM_TOSLOT->sBasicOp.emItemType!=ITEM_BULLET) )        return E_FAIL//|| pITEM_RIGHT->sSuitOp.emAttack==ITEMATT_RIFLE) && (pITEM_TOSLOT->sBasicOp.emItemType!=ITEM_BULLET) )        return E_FAIL;
                    
    }
                    else    return 
    E_FAIL;

                    if ( !
    VALID_SLOT_ITEM(pNetMsg->emSlot) )    return S_FALSE;

                    
    //    Á¾Àü ¾ÆÀÌÅÆ ¼Õ¿¡ µé°í ÀÖ°Ô.    #1 ¹é¾÷
                    
    sToHoldItem GET_SLOT_ITEM(pNetMsg->emSlot);

                    
    //    ÀåÂøÇÒ ¾ÆÀÌÅÛ ÁöÁ¤.
                    
    sToSlotItem GET_HOLD_ITEM();
                }
                else 
                {
                    
    //    Á¾Àü ¾ÆÀÌÅÛÀÌ ¾ç¼Õ·ùÀÏ °æ¿ì.
                    
    if ( pITEM_RIGHT && ISBOTH_HANDHELD(pITEM_RIGHT) )
                    {
                        
    //    ¾ç¼Õ ¸ðµÎ Âø¿ë ¹«±â ÀÖÀ» °æ¿ì.    È°+È­»ì, Ã¢+ºÎÀû. ¼¼Æ®·Î µ¿ÀÛÇϴ ¹«±â·ù°¡ ÀÖÀ½ À̶§ ¸ðµÎ »©³»¾ßÇÔ.
                        //
                        
    if ( pITEM_LEFT )
                        {
                            
    bOk m_cInventory.FindInsrtable pITEM_LEFT->sBasicOp.wInvenSizeXpITEM_LEFT->sBasicOp.wInvenSizeYwInvenPosXwInvenPosY );
                            if ( !
    bOk )    return E_FAIL;

                            
    //    Á¾Àü ¾ÆÀÌÅÆ Àι꿡 ³ÖÀ½. #1 ¹é¾÷    //    ¿ÞÂÊ ½½·Ô Áö¿öÁÜ.
                            
    sToInvenItem GET_SLOT_ITEM(emLHand);
                        }

                        
    //    Á¾Àü ¾ÆÀÌÅÆ ¼Õ¿¡ µé°í ÀÖ°Ô.    #2 ¹é¾÷
                        
    sToHoldItem GET_SLOT_ITEM(emRHand);

                        
    //    ÀåÂøÇÒ ¾ÆÀÌÅÛ ÁöÁ¤.
                        
    sToSlotItem GET_HOLD_ITEM();
                    }
                    
    //    ÀϹÝÀûÀÏ °æ¿ì.
                    
    else
                    {
                        if ( !
    VALID_SLOT_ITEM(pNetMsg->emSlot) )    return S_FALSE;

                        
    //    Á¾Àü ¾ÆÀÌÅÆ ¼Õ¿¡ µé°í ÀÖ°Ô.    #1 ¹é¾÷
                        
    sToHoldItem GET_SLOT_ITEM(pNetMsg->emSlot);

                        
    //    ÀåÂøÇÒ ¾ÆÀÌÅÛ ÁöÁ¤.
                        
    sToSlotItem GET_HOLD_ITEM();
                    }
                }
            }
        }

        
    //    Note : ½ÇÁ¦·Î À̵¿ ½ÃÅ´, ¸Þ½ÃÁö ¹ß»ý
        //

        //    Note : Àκ¥¿¡ º¸³»Áú ¾ÆÀÌÅÛ.
        //
        
    if ( sToInvenItem.sNativeID != NATIVEID_NULL() )
        {
            
    m_cInventory.InsertItem sToInvenItemwInvenPosXwInvenPosY );

            
    //    [Àڽſ¡°Ô] Àι꿡 ¾ÆÀÌÅÆ »ðÀÔ.
            
    GLMSG::SNETPC_INVEN_INSERT NetMsg_Inven_Insert;
            
    NetMsg_Inven_Insert.Data = *m_cInventory.GetItem(wInvenPosXwInvenPosY);
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg_Inven_Insert);        
        }

        
    //    Note : ¼Õ¿¡µé±â.
        //

        
    if ( sToHoldItem.sNativeID != NATIVEID_NULL() )
        {
            
    HOLD_ITEM sToHoldItem );

            
    //    [Àڽſ¡°Ô] ¼Õ¿¡ ¾ÆÀÌÅÆÀ» µé°Ô.
            
    GLMSG::SNETPC_PUTON_UPDATE NetMsg_PutOn;
            
    NetMsg_PutOn.emSlot SLOT_HOLD;
            
    NetMsg_PutOn.sItemCustom sToHoldItem;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg_PutOn);

            
    // ¹«±â¿¡ µû¸¥ ¹öÇÁ¸¦ ÃʱâÈ­ ÇÑ´Ù.
            
    DisableSkillFact();
        }

        if ( 
    pNetMsg->emSlot == SLOT_VEHICLE )
        {
            
    GLGaeaServer::GetInstance().SaveVehiclem_dwClientIDm_dwGaeaIDfalse );        
        }

        
    //    Note : ½½·Ô¿¡ ³Ö±â. ½½·Ô¿¡¼­ »©³¾ ¾ÆÀÌÅÛ ÀÖÀ¸¸é Á¦°Å. (Àκ¥¿¡ º¸³»Áú ¾ÆÀÌÅÛ.)
        //
        
    if ( sToSlotItem.sNativeID != NATIVEID_NULL() )
        {
            
    //    Note : ½½·Ô¿¡¼­ Á¦°ÅÇÒ ¾ÆÀÌÅÛÀÌ ÀÖÀ» °æ¿ì.
            //
            
    EMSLOT emSlotRelease(SLOT_TSIZE);
            if ( 
    sToInvenItem.sNativeID!=NATIVEID_NULL() )
            {
                
    emSlotRelease emLHand;
                
    RELEASE_SLOT_ITEM(emLHand);        //    ¿ÞÂÊ ½½·Ô Áö¿öÁÜ.
            
    }

            
    //    ½½·Ô¿¡ ³ÖÀ½.
            
    SLOT_ITEM sToSlotItempNetMsg->emSlot );

            
    //    [Àڽſ¡°Ô] SLOT ¿¡ ¾ÆÀÌÅÆÀ» Âø¿ë.
            //
            
    GLMSG::SNETPC_PUTON_UPDATE NetMsg_PutOn;
            
    NetMsg_PutOn.emSlot pNetMsg->emSlot;
            
    NetMsg_PutOn.sItemCustom sToSlotItem;
            
    NetMsg_PutOn.emSlotRelease emSlotRelease;                    //    ¾ÆÀÌÅÛ »èÁ¦ÇÒ ½½·Ô.
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg_PutOn);

            
    //    [¸ðµÎ¿¡°Ô] ÀÚ½ÅÀÇ Âø¿ë º¹ÀåÀÌ ¹Ù²ñÀ» ¾Ë¸².
            //
            
    GLMSG::SNETPC_PUTON_UPDATE_BRD NetMsg_PutOn_Update_Brd;
            
    NetMsg_PutOn_Update_Brd.dwGaeaID m_dwGaeaID;
            
    NetMsg_PutOn_Update_Brd.emSlot pNetMsg->emSlot;
            
    NetMsg_PutOn_Update_Brd.sItemClient.Assign sToSlotItem );
            
    NetMsg_PutOn_Update_Brd.emSlotRelease emSlotRelease;        //    ¾ÆÀÌÅÛ »èÁ¦ÇÒ ½½·Ô.
            
    SendMsgViewAround reinterpret_cast<NET_MSG_GENERIC*>(&NetMsg_PutOn_Update_Brd) );

            
    // ¹«±â¿¡ µû¸¥ ¹öÇÁ¸¦ ÃʱâÈ­ ÇÑ´Ù.
            
    DisableSkillFact();
        }

        
    //    Note : ¾ÆÀÌÅÆ º¯°æ½Ã °ª Àç È¯»ê ÇÊ¿äÇÔ.
        //
        
    INIT_DATA FALSEFALSE );

        return 
    S_OK;
    }

    HRESULT GLChar::MsgReqHoldToSlot NET_MSG_GENERICnmg )
    {
        
    GLMSG::SNETPC_REQ_HOLD_TO_SLOT *pNetMsg reinterpret_cast<GLMSG::SNETPC_REQ_HOLD_TO_SLOT*> ( nmg );
        if ( 
    pNetMsg->emSlot >= SLOT_TSIZE )    return S_FALSE;

        if ( !
    VALID_HOLD_ITEM () )                return S_FALSE;
        
    SITEMpItem GLItemMan::GetInstance().GetItem GET_HOLD_ITEM().sNativeID );
        if ( !
    pItem )                            return S_FALSE;
        if ( 
    m_sCONFTING.IsCONFRONTING() )        return S_FALSE;

        const 
    SITEMCUSTOM sItemCustom GET_HOLD_ITEM ();

        
    BOOL bOk(FALSE);

    #if defined(VN_PARAM) //vietnamtest%%%
        
    if ( sItemCustom.bVietnamGainItem )    return S_FALSE;
    #endif
        
        
    if( sItemCustom.nidDISGUISE!=SNATIVEID(false) )
        {
            
    //    ÄÚ½ºÆ¬À» ÀÔÈù ¾ÆÀÌÅÛÀÏ °æ¿ì
            
    bOk ACCEPT_ITEM sItemCustom.sNativeIDsItemCustom.nidDISGUISE );
            if ( !
    bOk )    return E_FAIL;
        }
        else
        {
            
    //    ÀÚ°ÝÁ¶°Ç¿¡ ºÎÇÕÇÏ´ÂÁö °Ë»ç.
            
    bOk ACCEPT_ITEM sItemCustom.sNativeID );
            if ( !
    bOk )    return E_FAIL;
        }
        
        
    //    ÇØ´ç ½½·Ô¿¡ ÀåÂø °¡´ÉÇÑÁö °Ë»ç.
        
    bOk CHECKSLOT_ITEM sItemCustom.sNativeIDpNetMsg->emSlot );
        if ( !
    bOk )    return E_FAIL;

        
    //    ÇØ´ç ½½·ÔÀÌ ºñ¿´´ÂÁö Á¡°Ë.
        
    bOk ISEMPTY_SLOT sItemCustom.sNativeIDpNetMsg->emSlot );
        if ( !
    bOk ) return E_FAIL;

        
    //    ¸¸¾à ¾ç¼Õ ¹«±âÀÏ °æ¿ì ½½·ÔÀ» "¿À¸¥¼Õ µé±â" ½½·ÔÀ¸·Î.
        
    if ( ISBOTH_HANDHELD(pItem) )    pNetMsg->emSlot GetCurRHand();

        
    //    ÇØ´ç ½½·Ô¿¡ ¾ÆÀÌÅÆ ÀåÂø.
        
    SLOT_ITEM sItemCustompNetMsg->emSlot );

        
    //    ¼Õ¿¡ µç ¾ÆÀÌÅÛ Á¦°Å
        
    RELEASE_HOLD_ITEM ();

        
    //    ¾ÆÀÌÅÆ º¯°æ½Ã °ª Àç È¯»ê ÇÊ¿äÇÔ.
        
    INIT_DATA FALSEFALSE );

        
    //    [Àڽſ¡°Ô] ¼Õ¿¡ ÀÖ¾ú´ø ¾ÆÀÌÅÆ Á¦°Å.
        
    GLMSG::SNETPC_PUTON_RELEASE NetMsg_PutOn_Release(SLOT_HOLD);
        
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg_PutOn_Release);

        
    //    [Àڽſ¡°Ô] ¼Õ¿¡ ÀÖ¾ú´ø ¾ÆÀÌÅÆÀ» Slot¿¡ Âø¿ë.
        
    GLMSG::SNETPC_PUTON_UPDATE NetMsg_PutOn;
        
    NetMsg_PutOn.emSlot pNetMsg->emSlot;
        
    NetMsg_PutOn.sItemCustom sItemCustom;
        
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg_PutOn);

        
    //    [¸ðµÎ¿¡°Ô] º¹ÀåÀÌ ¹Ù²ñÀ» ¾Ë·ÁÁÜ.
        
    GLMSG::SNETPC_PUTON_UPDATE_BRD NetMsg_PutOn_Brd;
        
    NetMsg_PutOn_Brd.dwGaeaID m_dwGaeaID;
        
    NetMsg_PutOn_Brd.emSlot pNetMsg->emSlot;
        
    NetMsg_PutOn_Brd.sItemClient.Assign sItemCustom );
        
    SendMsgViewAround reinterpret_cast<NET_MSG_GENERIC*>(&NetMsg_PutOn_Brd) );

        
    // ¹«±â¿¡ µû¸¥ ¹öÇÁ¸¦ ÃʱâÈ­ ÇÑ´Ù.
        
    DisableSkillFact();

        return 
    S_OK;
    }


    HRESULT GLChar::MsgReqSlotChange NET_MSG_GENERICnmg )
    {
        
    GLMSG::SNETPC_REQ_SLOT_CHANGE *pNetMsg reinterpret_cast<GLMSG::SNETPC_REQ_SLOT_CHANGE*> ( nmg );

        if( 
    IsUseArmSub() ) SetUseArmSubFALSE ); // ÁÖ¹«±â
        
    else                SetUseArmSubTRUE );  // º¸Á¶¹«±â

        //    ¾ÆÀÌÅÆ º¯°æ½Ã °ª Àç È¯»ê ÇÊ¿äÇÔ.
        
    INIT_DATA FALSEFALSEm_sCONFTING.sOption.fHP_RATE );

        
    //    [Àڽſ¡°Ô] ¹«±â ½º¿Ò
        
    GLMSG::SNETPC_PUTON_CHANGE NetMsg_PutOn;
        
    NetMsg_PutOn.bUseArmSub IsUseArmSub();
        
    NetMsg_PutOn.fCONFT_HP_RATE m_sCONFTING.sOption.fHP_RATE;
        
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg_PutOn);

        
    //    [¸ðµÎ¿¡°Ô] ¹«±â ½º¿ÒÀ» ¾Ë¸².
        
    GLMSG::SNETPC_PUTON_CHANGE_BRD NetMsg_PutOn_Brd;
        
    NetMsg_PutOn_Brd.dwGaeaID m_dwGaeaID;
        
    NetMsg_PutOn_Brd.bUseArmSub IsUseArmSub();
        
    SendMsgViewAround reinterpret_cast<NET_MSG_GENERIC*>(&NetMsg_PutOn_Brd) );

        
    GLMSG::SNETPC_PUTON_CHANGE_AG NetMsg_PutOn_AG;
        
    NetMsg_PutOn_AG.bUseArmSub IsUseArmSub();
        
    GLGaeaServer::GetInstance().SENDTOAGENT m_dwClientID, &NetMsg_PutOn_AG );


        
    // ¹«±â¿¡ µû¸¥ ¹öÇÁ¸¦ ÃʱâÈ­ ÇÑ´Ù.
        
    DisableSkillFact();
        
        return 
    S_OK;
    }

    bool GLChar::InsertPileItem ( const SITEMCUSTOMsItemCustomWORD wREQINSRTNUM )
    {
        
    SITEMpItem GLItemMan::GetInstance().GetItem sItemCustom.sNativeID );
        if ( !
    pItem )                return false;
        if ( !
    pItem->ISPILE() )        return false;

        
    WORD wPILENUM pItem->sDrugOp.wPileNum;
        
    WORD wINVENX pItem->sBasicOp.wInvenSizeX;
        
    WORD wINVENY pItem->sBasicOp.wInvenSizeY;

        
    //    Note : ´õ °ãÃÄÁú¼ö Àִ ¾ÆÀÌÅÛÀÌ ÀÖ´ÂÁö °Ë»çÇÏ¿© Àκ¥¿¡ µé¾î°¡¾ßÇÏ´Â
        //        ¾ÆÀÌÅÛ Á¡°Ë ¼ýÀÚ¸¦ °¨¼Ò½ÃÅ´.
        
    GLInventory::CELL_MAP &ItemMap = *m_cInventory.GetItemList();
        
    GLInventory::CELL_MAP_ITER iter ItemMap.begin();
        for ( ; 
    iter!=ItemMap.end(); ++iter )
        {
            
    SINVENITEM &sINVENITEM = *(*iter).second;
            
    SITEMCUSTOM &sITEMCUSTOM sINVENITEM.sItemCustom;
            if ( 
    sITEMCUSTOM.sNativeID != sItemCustom.sNativeID )    continue;
            if ( 
    sITEMCUSTOM.wTurnNum>=wPILENUM )        continue;
        
            
    //    ±âÁ¸ ¾ÆÀÌÅÛ °ãħ ¿©À¯ºÐ.
            
    WORD wSURPLUSNUM wPILENUM sITEMCUSTOM.wTurnNum;

            if ( 
    wREQINSRTNUM wSURPLUSNUM )
            {
                
    //    Note : ±âÁ¸ ¾ÆÀÌÅÛÀÇ °ãħÀ» º¯°æ. ( ²ËÂü )
                
    sITEMCUSTOM.wTurnNum wPILENUM;

                
    //    Note : Å¬¶óÀÌ¾ðÆ®¿¡ °¹¼ö º¯°æÀ» ¾Ë¸².
                
    GLMSG::SNETPC_INVEN_DRUG_UPDATE NetMsg;
                
    NetMsg.wPosX sINVENITEM.wPosX;
                
    NetMsg.wPosY sINVENITEM.wPosY;
                
    NetMsg.wTurnNum sITEMCUSTOM.wTurnNum;
                
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg);

                
    //    Note : ÀÜ¿© ¼ö·® °¨¼Ò.
                
    wREQINSRTNUM -= wSURPLUSNUM;
            }
            else
            {
                
    //    Note : ±âÁ¸ ¾ÆÀÌÅÛ¿¡ °ãÄ¡´Â °Í ¸¸À¸·Îµµ »õ·Î ³ÖÀ» ¾ÆÀÌÅÛÀÌ ÃæºÐÈ÷ µé¾î°¨.
                
    sITEMCUSTOM.wTurnNum += wREQINSRTNUM;

                
    //    Note : Å¬¶óÀÌ¾ðÆ®¿¡ °¹¼ö º¯°æÀ» ¾Ë¸².
                
    GLMSG::SNETPC_INVEN_DRUG_UPDATE NetMsg;
                
    NetMsg.wPosX sINVENITEM.wPosX;
                
    NetMsg.wPosY sINVENITEM.wPosY;
                
    NetMsg.wTurnNum sITEMCUSTOM.wTurnNum;
                
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg);

                
    //    ±Ý¾× º¯È­ ¸Þ½ÃÁö.
                
    GLMSG::SNETPC_UPDATE_MONEY NetMsgMoney;
                
    NetMsgMoney.lnMoney m_lnMoney;
                
    //add money 2
                
    NetMsgMoney.lnVoteP m_lnVoteP;
                
    //add money 3
                
    NetMsgMoney.lnPremP m_lnPremP;
                
    //add contributionpoints by CNDev
                
    NetMsgMoney.lnContribP m_lnContribP;
                
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgMoney);

                return 
    true;
            }
        }

        
    //    Note : »õ·ÎÀÌ Àκ¥¿¡ µé¾î°¡¾ßÇÒ ¾ÆÀÌÅÛÀÇ °¹¼ö ÆÄ¾ÇÈÄ Àκ¥¿¡ µé¾î°¥ °ø°£ÀÌ ÀÖ´ÂÁö °Ë»ç.

        //    ÃÖ´ë°ãħ¾ÆÀÌÅÛ ¼ö·®.
        
    WORD wONENUM wREQINSRTNUM wPILENUM;
        
    WORD wITEMNUM wONENUM;

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

        for ( 
    WORD i=0i<wITEMNUM; ++)
        {
            
    WORD wInsertPosX(0), wInsertPosY(0);
            
    BOOL bITEM_SPACE m_cInventory.FindInsrtable wINVENXwINVENYwInsertPosXwInsertPosY );
            
    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 sITEMCUSTOMwInsertPosXwInsertPosY );    //    ÀιêÅ丮¿¡ ³Ö½À´Ï´Ù.

            //    Àι꿡 ¾ÆÀÌÅÆ ³Ö¾îÁִ ¸Þ½ÃÁö.
            
    GLMSG::SNETPC_INVEN_INSERT NetMsgInven;
            
    NetMsgInven.Data = *m_cInventory.GetItem wInsertPosXwInsertPosY );
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgInven);
        }

        return 
    true;
    }

    bool GLChar::DeletePileItem SNATIVEID sNIDWORD wREQDELNUM )
    {
        
    SITEMpItem GLItemMan::GetInstance().GetItem sNID );
        if ( !
    pItem )                return false;
        if ( !
    pItem->ISPILE() )        return false;

        
    WORD wINVENX pItem->sBasicOp.wInvenSizeX;
        
    WORD wINVENY pItem->sBasicOp.wInvenSizeY;

        
    std::vector<SNATIVEID>    vecDEL;

        
    //    Note : ´õ °ãÃÄÁú¼ö Àִ ¾ÆÀÌÅÛÀÌ ÀÖ´ÂÁö °Ë»çÇÏ¿© Àκ¥¿¡ µé¾î°¡¾ßÇÏ´Â
        //        ¾ÆÀÌÅÛ Á¡°Ë ¼ýÀÚ¸¦ °¨¼Ò½ÃÅ´.
        
    GLInventory::CELL_MAP &ItemMap = *m_cInventory.GetItemList();
        
    GLInventory::CELL_MAP_ITER iter ItemMap.begin();
        for ( ; 
    iter!=ItemMap.end(); ++iter )
        {
            if ( 
    wREQDELNUM==)                        break;

            
    SINVENITEM &sINVENITEM = *(*iter).second;
            
    SITEMCUSTOM &sITEMCUSTOM sINVENITEM.sItemCustom;
            if ( 
    sITEMCUSTOM.sNativeID != sNID )        continue;

            if ( 
    sITEMCUSTOM.wTurnNum>wREQDELNUM )
            {
                
    sITEMCUSTOM.wTurnNum -= wREQDELNUM;
                
    wREQDELNUM 0;

                
    //    Note : °¹¼öº¯°æ ¸Þ½ÃÁö.
                
    GLMSG::SNETPC_INVEN_DRUG_UPDATE    NetMsgUpdate;
                
    NetMsgUpdate.wPosX sINVENITEM.wPosX;
                
    NetMsgUpdate.wPosY sINVENITEM.wPosY;
                
    NetMsgUpdate.wTurnNum sITEMCUSTOM.wTurnNum;
                
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgUpdate);
            }
            else
            {
                
    wREQDELNUM -= sITEMCUSTOM.wTurnNum;
                
    sITEMCUSTOM.wTurnNum 0;

                
    vecDEL.push_back SNATIVEID(sINVENITEM.wPosX,sINVENITEM.wPosY) );
            }
        }

        if ( !
    vecDEL.size() )    return true;

        for ( 
    DWORD i=0i<vecDEL.size(); ++)
        {
            
    m_cInventory.DeleteItem vecDEL[i].wMainIDvecDEL[i].wSubID );

            
    //    Note : »èÁ¦ ¸Þ½ÃÁö.
            
    GLMSG::SNETPC_INVEN_DELETE NetMsgDelete;
            
    NetMsgDelete.wPosX vecDEL[i].wMainID;
            
    NetMsgDelete.wPosY vecDEL[i].wSubID;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgDelete);
        }

        return 
    true;
    }

    // *****************************************************
    // Desc: NPC ·ÎºÎÅÍ ¾ÆÀÌÅÛ ±¸ÀÔ
    // *****************************************************
    HRESULT GLChar::MsgReqBuyFromNpc NET_MSG_GENERICnmg )
    {
        
    GLMSG::SNETPC_REQ_BUY_FROM_NPC *pNetMsg = (GLMSG::SNETPC_REQ_BUY_FROM_NPC *) nmg;

        
    PCROWDATA pCrowData GLCrowDataMan::GetInstance().GetCrowData pNetMsg->sNID );

        
    DxConsoleMsgpConsoleMsg GLGaeaServer::GetInstance().GetConsoleMsg();

        if ( !
    m_pLandMan )
        {
            return 
    E_FAIL;
        }

        
    // »óÁ¡ NPC À¯È¿¼º Ã¼Å©
        
    PGLCROW pCrow m_pLandMan->GetCrow pNetMsg->dwNPCID );
        if ( !
    pCrow )                    return E_FAIL;

        
    float fDist D3DXVec3Length ( &D3DXVECTOR3(m_vPos-pCrow->GetPosition()) );
        
    float fTalkRange = (float) (pCrow->GetBodyRadius() + GETBODYRADIUS() + 30);
        
    float fTalkableDis fTalkRange 20;

        if ( 
    fDist>fTalkableDis )        return E_FAIL;
        

        if ( !
    pCrowData )
        {
            
    //    »óÀΠNPC°¡ Á¸Á¦ÇÏÁö ¾Ê½À´Ï´Ù.
            
    return E_FAIL;
        }

        if ( !
    pCrowData->m_sNpcTalkDlg.IsMARKET() )
        {
            
    //    »óÀÎÀÌ ¾Æ´Õ´Ï´Ù.
            
    return E_FAIL;
        }

        if ( 
    pCrowData->GetSaleNum() <= pNetMsg->dwChannel )        return E_FAIL;

        
    GLInventory *pInven pCrowData->GetSaleInven(pNetMsg->dwChannel);
        if ( !
    pInven )                                                return E_FAIL;

        
    SINVENITEMpSaleItem(NULL);
        
    pSaleItem pInven->GetItem pNetMsg->wPosXpNetMsg->wPosY );

        
    //    »ì·Á°í Çϴ ¾ÆÀÌÅÆÀÌ ¾ø½À´Ï´Ù.
        
    if ( !pSaleItem )                                            return E_FAIL;

        
    SITEMpItem GLItemMan::GetInstance().GetItem pSaleItem->sItemCustom.sNativeID );
        if ( !
    pItem )                                                return E_FAIL;

        
    volatile float fSHOP_RATE GET_PK_SHOP2BUY();
        if ( 
    fSHOP_RATE==0.0f )                                        return E_FAIL;

        
    volatile float fSHOP_2RATE fSHOP_RATE m_pLandMan->m_fCommissionRate;
        
    volatile float fSHOP_2RATE_C fSHOP_2RATE 0.01f;

        
    LONGLONG dwPrice pCrowData->GetNpcSellPrice(pItem->sBasicOp.sNativeID.dwID);
        
    volatile LONGLONG llPRICE2;

        
    //add money 2
        //no tax for vote item
        
    if ( pItem->sBasicOp.emLevel == LEVEL_VOTE_ITEM )
        {
            
    llPRICE2pItem->sBasicOp.dwBuyPrice;
        }
        
    //add money 3
        //no tax for premium item
        
    else if ( pItem->sBasicOp.emLevel == LEVEL_PREMIUM_ITEM )
        {
            
    llPRICE2pItem->sBasicOp.dwBuyPrice;
        }
        
    //add contributionpoint by CNDev
        //no tax for contribution item
        
    else if ( pItem->sBasicOp.emLevel == LEVEL_CONTRIBUTION_ITEM )
        {
            
    llPRICE2pItem->sBasicOp.dwBuyPrice;
        }
        else
        {
            if( 
    dwPrice == )
            {
                
    dwPrice pItem->sBasicOp.dwBuyPrice;
                
    llPRICE2 = (LONGLONG)(dwPrice fSHOP_2RATE_C);
            }
            else
            {
            
    llPRICE2 dwPrice;
            }
        }

        
    volatile LONGLONG llPRICE3 = (LONGLONG)(llPRICE2*pNetMsg->wBuyNum);

        
    //add money 2
        //compare price to votepoint
        
    if ( pItem->sBasicOp.emLevel == LEVEL_VOTE_ITEM 
        {
            if ( 
    m_lnVoteP llPRICE3 )
            {
            return 
    E_FAIL;
            }
        }
        
    //add money 3
        //compare price to premium point
        
    else if ( pItem->sBasicOp.emLevel == LEVEL_PREMIUM_ITEM 
        {
            if ( 
    m_lnPremP llPRICE3 )
            {
            return 
    E_FAIL;
            }
        }
        
    //add contributionpoint by CNDev
        
    else if ( pItem->sBasicOp.emLevel == LEVEL_CONTRIBUTION_ITEM )
        {
            if ( 
    m_lnContribP llPRICE3 )
            {
                return 
    E_FAIL;
            }
        }
        
    //compare price to gold
        
    else
        {
            if ( 
    m_lnMoney llPRICE3 )
            {
            return 
    E_FAIL;
            }
        }
        

        
    WORD wINVENX pItem->sBasicOp.wInvenSizeX;
        
    WORD wINVENY pItem->sBasicOp.wInvenSizeY;

        
    //    Note : Àκ¥¿¡ ¿©À¯ °ø°£ÀÌ ÀÖ´ÂÁö °Ë»ç.
        //
        
    BOOL bITEM_SPACE(FALSE);
        if ( 
    pItem->ISPILE() )
        {
            
    //    °ãħ ¾ÆÀÌÅÛÀÏ °æ¿ì.
            
    WORD wPILENUM pItem->sDrugOp.wPileNum;
            
    SNATIVEID sNID pItem->sBasicOp.sNativeID;

            
    //    ³Ö±â ¿äûµÈ ¾ÆÀÌÅÛ¼ö. ( ÀÜ¿©·®. )
            
    WORD wREQINSRTNUM = ( pNetMsg->wBuyNum pItem->GETAPPLYNUM() );

            
    bITEM_SPACE m_cInventory.ValidPileInsrt wREQINSRTNUMsNIDwPILENUMwINVENXwINVENY );

            
    //    Àκ¥¿¡ ¿©À¯°ø°£ÀÌ ¾øÀ» °æ¿ì Ãë¼ÒµÊ.
            
    if ( !bITEM_SPACE )        return E_FAIL;

            
    //    Note :¾ÆÀÌÅÛÀÇ ¼ÒÀ¯ ÀÌÀü °æ·Î ±â·Ï.
            //
            
    SITEMCUSTOM sDB_ITEM(sNID);
            
    sDB_ITEM.cGenType EMGEN_SHOP;
            
    sDB_ITEM.cChnID = (BYTE)GLGaeaServer::GetInstance().GetServerChannel();
            
    sDB_ITEM.cFieldID = (BYTE)GLGaeaServer::GetInstance().GetFieldSvrID();
            
    sDB_ITEM.wTurnNum wPILENUM;
            
    sDB_ITEM.tBORNTIME CTime::GetCurrentTime().GetTime();


            
    //add money 2
            //log vote item purchase to db
            
    if ( pItem->sBasicOp.emLevel == LEVEL_VOTE_ITEM 
            {
                
    GLITEMLMT::GetInstance().ReqItemRoute sDB_ITEMID_CHAR0ID_CHARm_dwCharIDEMITEM_ROUTE_CHAR_VOTEsDB_ITEM.wTurnNum );
            }
            
    //add money 3
            //log premium item purchase to db
            
    else if ( pItem->sBasicOp.emLevel == LEVEL_PREMIUM_ITEM 
            {
                
    GLITEMLMT::GetInstance().ReqItemRoute sDB_ITEMID_CHAR0ID_CHARm_dwCharIDEMITEM_ROUTE_CHAR_PREMIUMsDB_ITEM.wTurnNum );
            }
            
    //add cotnributionpoint by CNDev
            
    else if ( pItem->sBasicOp.emLevel == LEVEL_CONTRIBUTION_ITEM )
            {
                
    GLITEMLMT::GetInstance().ReqItemRoute sDB_ITEMID_CHAR0ID_CHARm_dwCharIDEMITEM_ROUTE_CHAR_CONTRIBUTIONsDB_ITEM.wTurnNum );
            }
            else
            {
                
    GLITEMLMT::GetInstance().ReqItemRoute sDB_ITEMID_CHAR0ID_CHARm_dwCharIDEMITEM_ROUTE_CHARsDB_ITEM.wTurnNum );
            }
            
    //add money 3
            //record vote item purchase 
            
    if ( pItem->sBasicOp.emLevel == LEVEL_VOTE_ITEM 
            {
                
    CheckMoneyUpdatem_lnVotePllPRICE3FALSE"Buy From Npc." );
                
    m_bMoneyUpdate TRUE;
                
    m_lnVoteP -= llPRICE3;    

                
    std::string strTIME CDebugSet::GetCurTime ();
                
    CDebugSet::ToFile "ITEM_VOTE_PURCHASE.txt""%s    BUY MILTIPLE VOTE ITEM [CharID: %d][CharName:%s][Point Spent:%I64d][Money Left:%I64d][ITEM MID:%d SID:%d][Number: %d] ",
                
    strTIME.c_str(), m_dwCharIDm_szNamellPRICE3m_lnVotePsDB_ITEM.sNativeID.wMainIDsDB_ITEM.sNativeID.wSubID,pNetMsg->wBuyNum );
            }
            
    //add money 2
            //record premium item purchase
            
    else if ( pItem->sBasicOp.emLevel == LEVEL_PREMIUM_ITEM 
            {
                
    CheckMoneyUpdatem_lnPremPllPRICE3FALSE"Buy From Npc." );
                
    m_bMoneyUpdate TRUE;
                
    m_lnPremP -= llPRICE3;    

                
    std::string strTIME CDebugSet::GetCurTime ();
                
    CDebugSet::ToFile "ITEM_PREMIUM_PURCHASE.txt""%s    BUY MILTIPLE PREMIUM ITEM [CharID: %d][CharName:%s][Point Spent:%I64d][Money Left:%I64d][ITEM MID:%d SID:%d][Number: %d] ",
                
    strTIME.c_str(), m_dwCharIDm_szNamellPRICE3m_lnPremPsDB_ITEM.sNativeID.wMainIDsDB_ITEM.sNativeID.wSubID,pNetMsg->wBuyNum );
            }
            
    //add contributionpoint by CNDev
            
    else if ( pItem->sBasicOp.emLevel == LEVEL_CONTRIBUTION_ITEM )
            {
                
    CheckMoneyUpdatem_lnContribPllPRICE3FALSE"Buy From Npc." );
                
    m_bMoneyUpdate TRUE;
                
    m_lnContribP -= llPRICE3;

                
    std::string strTIME CDebugSet::GetCurTime ();
                
    CDebugSet::ToFile "ITEM_CONTRIBUTION_PURCHASE.txt""%s    BUY MILTIPLE CONTRIBUTION ITEM [CharID: %d][CharName:%s][Point Spent:%I64d][Money Left:%I64d][ITEM MID:%d SID:%d][Number: %d] ",
                
    strTIME.c_str(), m_dwCharIDm_szNamellPRICE3m_lnContribPsDB_ITEM.sNativeID.wMainIDsDB_ITEM.sNativeID.wSubID,pNetMsg->wBuyNum );
            }
            else
            {
                
    CheckMoneyUpdatem_lnMoneyllPRICE3FALSE"Buy From Npc." );
                
    m_bMoneyUpdate TRUE;
                
    m_lnMoney -= llPRICE3;    
            }

            
    //add money 2 modified
            
    if ( llPRICE3>EMMONEY_LOG )
            {
                if ( !(
    pItem->sBasicOp.emLevel == LEVEL_VOTE_ITEM || pItem->sBasicOp.emLevel == LEVEL_PREMIUM_ITEM || pItem->sBasicOp.emLevel == LEVEL_CONTRIBUTION_ITEM)  ) 
                {
                    
    GLITEMLMT::GetInstance().ReqMoneyExc ID_CHARm_dwCharIDID_CHAR0, -LONGLONG(llPRICE3), EMITEM_ROUTE_DELETE );
                    
    GLITEMLMT::GetInstance().ReqMoneyExc ID_CHARm_dwCharIDID_CHAR0m_lnMoneyEMITEM_ROUTE_CHAR );
                }
            }

            if ( 
    llPRICE3>EMMONEY_LOG_PREMIUM )
            {        
                if ( 
    pItem->sBasicOp.emLevel == LEVEL_VOTE_ITEM 
                {
                    
    GLITEMLMT::GetInstance().ReqMoneyExc ID_CHARm_dwCharIDID_CHAR0, -LONGLONG(llPRICE3), EMITEM_ROUTE_DELETE_VOTE );
                    
    GLITEMLMT::GetInstance().ReqMoneyExc ID_CHARm_dwCharIDID_CHAR0m_lnVotePEMITEM_ROUTE_CHAR_VOTE );
                }
                else if ( 
    pItem->sBasicOp.emLevel == LEVEL_PREMIUM_ITEM 
                {
                    
    GLITEMLMT::GetInstance().ReqMoneyExc ID_CHARm_dwCharIDID_CHAR0, -LONGLONG(llPRICE3), EMITEM_ROUTE_DELETE_PREMIUM );
                    
    GLITEMLMT::GetInstance().ReqMoneyExc ID_CHARm_dwCharIDID_CHAR0m_lnPremPEMITEM_ROUTE_CHAR_PREMIUM );
                }
                
    //add contributionpoint by CNDev
                
    else if ( pItem->sBasicOp.emLevel == LEVEL_CONTRIBUTION_ITEM )
                {
                    
    GLITEMLMT::GetInstance().ReqMoneyExc ID_CHARm_dwCharIDID_CHAR0, -LONGLONG(llPRICE3), EMITEM_ROUTE_DELETE_CONTRIBUTION );
                    
    GLITEMLMT::GetInstance().ReqMoneyExc ID_CHARm_dwCharIDID_CHAR0m_lnContribPEMITEM_ROUTE_CHAR_CONTRIBUTION );
                }
            }

    #if defined(_RELEASED) || defined(TW_PARAM) || defined(TH_PARAM) || defined(HK_PARAM) // ***Tracing Log print
            
    if ( m_bTracingUser )
            {
                
    NET_LOG_UPDATE_TRACINGCHAR TracingMsg;
                
    TracingMsg.nUserNum  GetUserID();
                
    StringCchCopyTracingMsg.szAccountUSR_ID_LENGTH+1m_szUID );

                
    CString strTemp;
                
    strTemp.Format"Buy From Npc, [%s][%s], Buy price:[%I64d], Have Money:[%I64d]",
                         
    m_szUIDm_szName,  llPRICE3m_lnMoney );

                
    StringCchCopyTracingMsg.szLogMsgTRACING_LOG_SIZEstrTemp.GetString() );

                
    m_pGLGaeaServer->SENDTOAGENTm_dwClientID, &TracingMsg );
            }
    #endif

            //    Note : ¾ÆÀÌÅÛÀ» Àκ¥¿¡ ³Ö¾îÁØ´Ù.
            //
            
    InsertPileItem sDB_ITEMwREQINSRTNUM );
        }
        else
        {
            
    //    ÀϹݠ¾ÆÀÌÅÛÀÇ °æ¿ì.
            
    WORD wInsertPosX(0), wInsertPosY(0);
            
    bITEM_SPACE m_cInventory.FindInsrtable wINVENXwINVENYwInsertPosXwInsertPosY );

            
    //    Àκ¥¿¡ ¿©À¯°ø°£ÀÌ ¾øÀ» °æ¿ì Ãë¼ÒµÊ.
            
    if ( !bITEM_SPACE )        return E_FAIL;

            
    //    Note : »õ·Î¿î ¾ÆÀÌÅÛÀ» »ý¼ºÇÕ´Ï´Ù.
            //
            
    SNATIVEID sNID pSaleItem->sItemCustom.sNativeID;
            
    SITEMCUSTOM sITEM_NEW pSaleItem->sItemCustom;
            
    CTime cTIME CTime::GetCurrentTime();
            
    sITEM_NEW.tBORNTIME cTIME.GetTime();

            
    sITEM_NEW.wTurnNum 1;
            
    sITEM_NEW.cGenType = (BYTEEMGEN_SHOP;
            
    sITEM_NEW.cChnID = (BYTE)GLGaeaServer::GetInstance().GetServerChannel();
            
    sITEM_NEW.cFieldID = (BYTEGLGaeaServer::GetInstance().GetFieldSvrID();
            
    sITEM_NEW.lnGenNum GLITEMLMT::GetInstance().RegItemGen sNIDEMGEN_SHOP );

            
    //    ·£´ý ¿É¼Ç ¹ß»ý.
            //
            //if( sITEM_NEW.GENERATE_RANDOM_OPT () )
            //{
            //    GLITEMLMT::GetInstance().ReqRandomItem( sITEM_NEW );
            //}

            //    Note : µ·À» ÁöºÒÇÕ´Ï´Ù.
            //
            
            //add money 2
            //record vote item purchase
            
    if ( pItem->sBasicOp.emLevel == LEVEL_VOTE_ITEM 
            {
                
    CheckMoneyUpdatem_lnVotePllPRICE2FALSE"Buy From Npc." );
                
    m_bMoneyUpdate TRUE;
                
    m_lnVoteP -= llPRICE2;    

                
    std::string strTIME CDebugSet::GetCurTime ();
                
    CDebugSet::ToFile "ITEM_VOTE_PURCHASE.txt""%s    BUY SINGLE VOTE ITEM [CharID: %d][CharName:%s][Point Spent:%I64d][Money Left:%I64d][ITEM MID:%d SID:%d] ",
                
    strTIME.c_str(), m_dwCharIDm_szNamellPRICE3m_lnVotePsITEM_NEW.sNativeID.wMainIDsITEM_NEW.sNativeID.wSubID );

                
    //test add regenerate random option
                
    if( sITEM_NEW.GENERATE_RANDOM_OPT () )
                {
                    
    GLITEMLMT::GetInstance().ReqRandomItemsITEM_NEW );
                }
            }
            
    //add money 3
            //record premium item purchase
            
    else if ( pItem->sBasicOp.emLevel == LEVEL_PREMIUM_ITEM 
            {
                
    CheckMoneyUpdatem_lnPremPllPRICE2FALSE"Buy From Npc." );
                
    m_bMoneyUpdate TRUE;
                
    m_lnPremP -= llPRICE2;    

                
    std::string strTIME CDebugSet::GetCurTime ();
                
    CDebugSet::ToFile "ITEM_PREMIUM_PURCHASE.txt""%s    BUY SINGLE PREMIUM ITEM [CharID: %d][CharName:%s][Point Spent:%I64d][Money Left:%I64d][ITEM MID:%d SID:%d] ",
                
    strTIME.c_str(), m_dwCharIDm_szNamellPRICE3m_lnPremPsITEM_NEW.sNativeID.wMainIDsITEM_NEW.sNativeID.wSubID );

                
    //test add regenerate random option
                
    if( sITEM_NEW.GENERATE_RANDOM_OPT () )
                {
                    
    GLITEMLMT::GetInstance().ReqRandomItemsITEM_NEW );
                }
            }
            
    //add contributionpoint by CNDev
            
    else if ( pItem->sBasicOp.emLevel == LEVEL_CONTRIBUTION_ITEM 
            {
                
    CheckMoneyUpdatem_lnContribPllPRICE2FALSE"Buy From Npc." );
                
    m_bMoneyUpdate TRUE;
                
    m_lnContribP -= llPRICE2;    

                
    std::string strTIME CDebugSet::GetCurTime ();
                
    CDebugSet::ToFile "ITEM_PREMIUM_CONTRIBUTION.txt""%s    BUY SINGLE CONTRIBUTION ITEM [CharID: %d][CharName:%s][Point Spent:%I64d][Money Left:%I64d][ITEM MID:%d SID:%d] ",
                
    strTIME.c_str(), m_dwCharIDm_szNamellPRICE3m_lnContribPsITEM_NEW.sNativeID.wMainIDsITEM_NEW.sNativeID.wSubID );

                
    //test add regenerate random option
                
    if( sITEM_NEW.GENERATE_RANDOM_OPT () )
                {
                    
    GLITEMLMT::GetInstance().ReqRandomItemsITEM_NEW );
                }
            }
            else
            {
                
    CheckMoneyUpdatem_lnMoneyllPRICE2FALSE"Buy From Npc." );
                
    m_bMoneyUpdate TRUE;
                
    m_lnMoney -= llPRICE2;    
            }


            
    //add money 2
            //add contributionpoint by CNDev
            
    if ( llPRICE3>EMMONEY_LOG )
            {
                if ( !(
    pItem->sBasicOp.emLevel == LEVEL_VOTE_ITEM || pItem->sBasicOp.emLevel == LEVEL_PREMIUM_ITEM || pItem->sBasicOp.emLevel == LEVEL_CONTRIBUTION_ITEM) ) 
                {
                    
    GLITEMLMT::GetInstance().ReqMoneyExc ID_CHARm_dwCharIDID_CHAR0, -LONGLONG(llPRICE2), EMITEM_ROUTE_DELETE );
                    
    GLITEMLMT::GetInstance().ReqMoneyExc ID_CHARm_dwCharIDID_CHAR0m_lnMoneyEMITEM_ROUTE_CHAR );
                }
            }

            if ( 
    llPRICE3>EMMONEY_LOG_PREMIUM )
            {        
                if ( 
    pItem->sBasicOp.emLevel == LEVEL_VOTE_ITEM 
                {
                    
    GLITEMLMT::GetInstance().ReqMoneyExc ID_CHARm_dwCharIDID_CHAR0, -LONGLONG(llPRICE2), EMITEM_ROUTE_DELETE_VOTE );
                    
    GLITEMLMT::GetInstance().ReqMoneyExc ID_CHARm_dwCharIDID_CHAR0m_lnVotePEMITEM_ROUTE_CHAR_VOTE );
                }
                else if ( 
    pItem->sBasicOp.emLevel == LEVEL_PREMIUM_ITEM 
                {
                    
    GLITEMLMT::GetInstance().ReqMoneyExc ID_CHARm_dwCharIDID_CHAR0, -LONGLONG(llPRICE2), EMITEM_ROUTE_DELETE_PREMIUM );
                    
    GLITEMLMT::GetInstance().ReqMoneyExc ID_CHARm_dwCharIDID_CHAR0m_lnPremPEMITEM_ROUTE_CHAR_PREMIUM );
                }
                
    //add contributionpoint by CNDev
                
    else if ( pItem->sBasicOp.emLevel == LEVEL_CONTRIBUTION_ITEM 
                {
                    
    GLITEMLMT::GetInstance().ReqMoneyExc ID_CHARm_dwCharIDID_CHAR0, -LONGLONG(llPRICE2), EMITEM_ROUTE_DELETE_CONTRIBUTION );
                    
    GLITEMLMT::GetInstance().ReqMoneyExc ID_CHARm_dwCharIDID_CHAR0m_lnContribPEMITEM_ROUTE_CHAR_CONTRIBUTION );
                }
            }

    #if defined(_RELEASED) || defined(TW_PARAM) || defined(TH_PARAM) || defined(HK_PARAM) // ***Tracing Log print
            
    if ( m_bTracingUser )
            {
                
    NET_LOG_UPDATE_TRACINGCHAR TracingMsg;
                
    TracingMsg.nUserNum  GetUserID();
                
    StringCchCopyTracingMsg.szAccountUSR_ID_LENGTH+1m_szUID );

                
    CString strTemp;
                
    strTemp.Format"Buy From Npc, [%s][%s], Buy price:[%I64d], Have Money:[%I64d]",
                         
    m_szUIDm_szName,  llPRICE3m_lnMoney );

                
    StringCchCopyTracingMsg.szLogMsgTRACING_LOG_SIZEstrTemp.GetString() );

                
    m_pGLGaeaServer->SENDTOAGENTm_dwClientID, &TracingMsg );
            }
    #endif

            //    Note : Àκ¥Å丮¿¡ ³Ö¾îÁÝ´Ï´Ù.
            //
            
    BOOL bOK m_cInventory.InsertItem sITEM_NEWwInsertPosXwInsertPosY );
            if ( !
    bOK )        return S_OK;

            
    //    Note :¾ÆÀÌÅÛÀÇ ¼ÒÀ¯ ÀÌÀü °æ·Î ±â·Ï.
            //
            //add money 2
            //item log
            
    if ( pItem->sBasicOp.emLevel == LEVEL_VOTE_ITEM 
            {
                
    GLITEMLMT::GetInstance().ReqItemRoute sITEM_NEWID_CHAR0ID_CHARm_dwCharIDEMITEM_ROUTE_CHAR_VOTEsITEM_NEW.wTurnNum );
            }
            
    //add money 3
            
    else if ( pItem->sBasicOp.emLevel == LEVEL_PREMIUM_ITEM 
            {
                
    GLITEMLMT::GetInstance().ReqItemRoute sITEM_NEWID_CHAR0ID_CHARm_dwCharIDEMITEM_ROUTE_CHAR_PREMIUMsITEM_NEW.wTurnNum );
            }
            
    //add contributionpoint by CNDev
            
    else if ( pItem->sBasicOp.emLevel == LEVEL_CONTRIBUTION_ITEM 
            {
                
    GLITEMLMT::GetInstance().ReqItemRoute sITEM_NEWID_CHAR0ID_CHARm_dwCharIDEMITEM_ROUTE_CHAR_CONTRIBUTIONsITEM_NEW.wTurnNum );
            }
            else
            {
                
    GLITEMLMT::GetInstance().ReqItemRoute sITEM_NEWID_CHAR0ID_CHARm_dwCharIDEMITEM_ROUTE_CHARsITEM_NEW.wTurnNum );
            }

            
    //    Àι꿡 ¾ÆÀÌÅÆ ³Ö¾îÁִ ¸Þ½ÃÁö.
            
    GLMSG::SNETPC_INVEN_INSERT NetMsgInven;
            
    NetMsgInven.Data = *m_cInventory.GetItem wInsertPosXwInsertPosY );
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgInven);
        }

        if ( 
    pCrow->m_bNpcRecall )
        {
            
    volatile float fSHOP_RATE_C fSHOP_RATE 0.01f;
            
    volatile LONGLONG llPRICE1 = (LONGLONG)( dwPrice fSHOP_RATE_C );
            
    volatile LONGLONG llCommission llPRICE2 llPRICE1;

            
    llCommission LONGLONG llCommission GLCONST_CHAR::fEARNING_RATE_NPC 0.1f );

            
    pCrow->m_lnCommission += llCommission;
        }
        else if ( 
    m_pLandMan->m_dwGuidClubID != CLUB_NULL )
        {
            
    GLGuidance *pGuid m_pLandMan->m_pGuidance;
            if ( 
    pGuid && !pGuid->m_bBattle )
            {
                
    //    Note : Å¬·´ÀÇ ¼öÀÍ ¹ß»ý.
                
    volatile float fSHOP_RATE_C fSHOP_RATE 0.01f;
                
    volatile LONGLONG llPRICE1 = (LONGLONG)( dwPrice fSHOP_RATE_C );
                
    volatile LONGLONG llCommission llPRICE2 llPRICE1;

                
    GLClubMan &cClubMan GLGaeaServer::GetInstance().GetClubMan();
                
    GLCLUB *pCLUB cClubMan.GetClub m_pLandMan->m_dwGuidClubID );
                if ( 
    pCLUB )
                {
                    
    pCLUB->m_lnIncomeMoney += llCommission;

                    
    // Å¬·´ ¼öÀÔÀÌ 1¾ï ÀÌ»óÀÏ °æ¿ì ·Î±×¸¦ ³²±ä´Ù.
                    
    if( llCommission >     EMCLUBINCOMEMONEY_LOG )
                        
    GLITEMLMT::GetInstance().ReqMoneyExcID_CHAR0
                                                              
    ID_CLUBpCLUB->m_dwID,
                                                              
    llCommission,
                                                              
    EMITEM_ROUTE_CLUBINCOME );

                    
    CDebugSet::ToFile "club_income_char.txt""{BuyFromNpc}, ClubID[%u], CharID[%u], Commission[%I64d], IncomeMoney[%I64d]",
                                        
    pCLUB->m_dwIDm_dwCharIDllCommissionpCLUB->m_lnIncomeMoney );
                }
            }
        }

        
    //    ±Ý¾× º¯È­ ¸Þ½ÃÁö.
        
    GLMSG::SNETPC_UPDATE_MONEY NetMsgMoney;
        
    NetMsgMoney.lnMoney m_lnMoney;
        
    //add money 2
        
    NetMsgMoney.lnVoteP m_lnVoteP;
        
    //add money 3
        
    NetMsgMoney.lnPremP m_lnPremP;
        
    //add contributionpoints by CNDev
        
    NetMsgMoney.lnContribP m_lnContribP;
        
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgMoney);

        return 
    S_OK;
    }

    // *****************************************************
    // Desc: NPC ¿¡°Ô ¾ÆÀÌÅÛ ÆÇ¸Å
    // *****************************************************
    HRESULT GLChar::MsgReqSaleToNpc NET_MSG_GENERICnmg )
    {
        
    GLMSG::SNETPC_REQ_SALE_TO_NPC *pNetMsg = (GLMSG::SNETPC_REQ_SALE_TO_NPC *) nmg;
        
        
    PCROWDATA pCrowData GLCrowDataMan::GetInstance().GetCrowData pNetMsg->sNID );

        
    DxConsoleMsgpConsoleMsg GLGaeaServer::GetInstance().GetConsoleMsg();

        
    // »óÁ¡ NPC À¯È¿¼º Ã¼Å©
        
    PGLCROW pCrow m_pLandMan->GetCrow pNetMsg->dwNPCID );
        if ( !
    pCrow )                        return E_FAIL;
        

        
    float fDist D3DXVec3Length ( &D3DXVECTOR3(m_vPos-pCrow->GetPosition()) );
        
    float fTalkRange = (float) (pCrow->GetBodyRadius() + GETBODYRADIUS() + 30);
        
    float fTalkableDis fTalkRange 20;

        if ( 
    fDist>fTalkableDis )            return E_FAIL;
        

        if ( !
    pCrowData )
        {
            
    //    »óÀΠNPC°¡ Á¸Á¦ÇÏÁö ¾Ê½À´Ï´Ù.
            
    return E_FAIL;
        }

        if ( !
    pCrowData->m_sNpcTalkDlg.IsMARKET() )
        {
            
    //    »óÀÎÀÌ ¾Æ´Õ´Ï´Ù.
            
    return E_FAIL;
        }

        if ( !
    VALID_HOLD_ITEM() )
        {
            
    //    ÆÈ·Á°í Çϴ ¾ÆÀÌÅÆÀÌ ¾ø½À´Ï´Ù.
            
    return E_FAIL;
        }

        const 
    SITEMCUSTOMsHOLD_ITEM GET_HOLD_ITEM();
        
    SITEMpItem GLItemMan::GetInstance().GetItem sHOLD_ITEM.sNativeID );
        if ( 
    pItem==NULL )                        return E_FAIL;

        
    // ÆÖ¾ÆÀ̵ð(DBÁ¢±Ù¿ë)
        
    DWORD dwPetID sHOLD_ITEM.dwPetID;
        
    DWORD dwVehicleID sHOLD_ITEM.dwVehicleID;

        
    //    °Å·¡¿É¼Ç
        
    if ( !pItem->sBasicOp.IsSALE() )
        {
            
    //    ÆÈ±â °¡´ÉÇÏÁö ¾ÊÀ½.
            
    return E_FAIL;
        }

    //  Å¬¶óÀÌ¾ðÆ®¿Í ¼­¹ö ¾ÆÀÌÅÛ °è»ê °ø½ÄÀ̠Ʋ·Á¼­ ¼öÁ¤ÇÔ 
    /* 
        volatile float fSHOP_SALE_RATE = GET_PK_SHOP2SALE();
        if ( fSHOP_SALE_RATE==0.0f )            return E_FAIL;

        volatile LONGLONG llPRICE = LONGLONG( pItem->GETPRICE(sHOLD_ITEM.wTurnNum) * GLCONST_CHAR::fDISPRICE );

        volatile float fSHOP_SALE_2RATE = fSHOP_SALE_RATE - m_pLandMan->m_fCommissionRate;
        volatile float fSHOP_SALE_2RATE_C = (DOUBLE(fSHOP_SALE_2RATE) * 0.01f );
        volatile LONGLONG llDisPRICE2 = LONGLONG( llPRICE * fSHOP_SALE_2RATE_C );
    */

        
    volatile float fSHOP_SALE_RATE GET_PK_SHOP2SALE();
        if ( 
    fSHOP_SALE_RATE==0.0f )            return E_FAIL;
        
        
    volatile LONGLONG dwPrice pItem->GETSELLPRICE sHOLD_ITEM.wTurnNum );  

        
    volatile float fSHOP_SALE_2RATE fSHOP_SALE_RATE m_pLandMan->m_fCommissionRate;
        
    volatile float fSHOP_SALE_2RATE_C fSHOP_SALE_2RATE 0.01f;

        
    volatile LONGLONG llDisPRICE2 LONGLONGdwPrice fSHOP_SALE_2RATE_C );


        if ( 
    pCrow->m_bNpcRecall )
        {
            
    volatile float fSHOP_RATE_C fSHOP_SALE_RATE 0.01f;
            
    volatile LONGLONG llDisPRICE1 LONGLONG dwPrice fSHOP_RATE_C );
            
    volatile LONGLONG llCommission llDisPRICE1-llDisPRICE2;

            
    llCommission LONGLONG llCommission GLCONST_CHAR::fEARNING_RATE_NPC 0.1f );

            
    pCrow->m_lnCommission += llCommission;
        }
        else if ( 
    m_pLandMan->m_dwGuidClubID != CLUB_NULL )
        {
            
    GLGuidance *pGuid m_pLandMan->m_pGuidance;
            if ( 
    pGuid && !pGuid->m_bBattle )
            {
                
    //    Note : Å¬·´ÀÇ ¼öÀÍ ¹ß»ý.
                
    volatile float fSHOP_RATE_C fSHOP_SALE_RATE 0.01f;
                
    volatile LONGLONG llDisPRICE1 LONGLONG dwPrice fSHOP_RATE_C );
                
    volatile LONGLONG llCommission llDisPRICE1-llDisPRICE2;
            
                
    GLClubMan &cClubMan GLGaeaServer::GetInstance().GetClubMan();
                
    GLCLUB *pCLUB cClubMan.GetClub m_pLandMan->m_dwGuidClubID );
                if ( 
    pCLUB )
                {
                    
    pCLUB->m_lnIncomeMoney += llCommission;

                    
    // Å¬·´ ¼öÀÔÀÌ 1¾ï ÀÌ»óÀÏ °æ¿ì ·Î±×¸¦ ³²±ä´Ù.
                    
    if( llCommission >     EMCLUBINCOMEMONEY_LOG )
                        
    GLITEMLMT::GetInstance().ReqMoneyExc(    ID_CHARm_dwCharID
                                                                
    ID_CLUBpCLUB->m_dwID,
                                                                
    llCommission,
                                                                
    EMITEM_ROUTE_CLUBINCOME );

                    
    CDebugSet::ToFile "club_income_char.txt""{SaleToNpc}, ClubID[%u], CharID[%u], Commission[%I64d], IncomeMoney[%I64d]",
                                        
    pCLUB->m_dwIDm_dwCharIDllCommissionpCLUB->m_lnIncomeMoney );
                }
            }
        }

        
    //    ±Ý¾× º¯È­.
        
    CheckMoneyUpdatem_lnMoneyllDisPRICE2TRUE"Sale To Npc." );
        
    m_bMoneyUpdate TRUE;

        if ( 
    pItem->sBasicOp.IsPointRecover() )
        {
    //add and modified for //add point sell
            
    if ( pItem->sBasicOp.emLevel == LEVEL_VOTE_ITEM )
            {
                
    m_lnVoteP += dwPrice;

                if ( 
    dwPrice>EMMONEY_LOG_PREMIUM )
                {
                    
    GLITEMLMT::GetInstance().ReqMoneyExc ID_CHAR0ID_CHARm_dwCharIDdwPriceEMITEM_ROUTE_CHAR_VOTE );
                    
    GLITEMLMT::GetInstance().ReqMoneyExc ID_CHARm_dwCharIDID_CHAR0m_lnVotePEMITEM_ROUTE_CHAR_VOTE );
                }

                
    GLITEMLMT::GetInstance().ReqItemRoute sHOLD_ITEMID_CHARm_dwCharIDID_CHAR0EMITEM_ROUTE_SHOP_VOTEsHOLD_ITEM.wTurnNum );

                
    std::string strTIME CDebugSet::GetCurTime ();
                
    CDebugSet::ToFile "ITEM_VOTE_SELL.txt""%s    SELL VOTE ITEM [CharID: %d][CharName:%s][Item Price:%I64d][Money After:%I64d][ITEM MID:%d SID:%d][Number: %d] ",
                
    strTIME.c_str(), m_dwCharIDm_szNamedwPricem_lnVotePpItem->sBasicOp.sNativeID.wMainIDpItem->sBasicOp.sNativeID.wSubID,sHOLD_ITEM.wTurnNum );
            }

            else if ( 
    pItem->sBasicOp.emLevel == LEVEL_PREMIUM_ITEM )
            {
                
    m_lnPremP += dwPrice;

                if ( 
    dwPrice>EMMONEY_LOG_PREMIUM )
                {
                    
    GLITEMLMT::GetInstance().ReqMoneyExc ID_CHAR0ID_CHARm_dwCharIDdwPriceEMITEM_ROUTE_CHAR_PREMIUM );
                    
    GLITEMLMT::GetInstance().ReqMoneyExc ID_CHARm_dwCharIDID_CHAR0m_lnPremPEMITEM_ROUTE_CHAR_PREMIUM );
                }

                
    GLITEMLMT::GetInstance().ReqItemRoute sHOLD_ITEMID_CHARm_dwCharIDID_CHAR0EMITEM_ROUTE_SHOP_PREMIUMsHOLD_ITEM.wTurnNum );

                
    std::string strTIME CDebugSet::GetCurTime ();
                
    CDebugSet::ToFile "ITEM_PREMIUM_SELL.txt""%s    SELL PREMIUM ITEM [CharID: %d][CharName:%s][Item Price:%I64d][Money After:%I64d][ITEM MID:%d SID:%d][Number: %d] ",
                
    strTIME.c_str(), m_dwCharIDm_szNamedwPricem_lnPremPpItem->sBasicOp.sNativeID.wMainIDpItem->sBasicOp.sNativeID.wSubID,sHOLD_ITEM.wTurnNum );
            }
            
    //add contributionpoint by CNDev
            
    else if ( pItem->sBasicOp.emLevel == LEVEL_CONTRIBUTION_ITEM )
            {
                
    m_lnContribP += dwPrice;

                if ( 
    dwPrice>EMMONEY_LOG_CONTRIBUTION )
                {
                    
    GLITEMLMT::GetInstance().ReqMoneyExc ID_CHAR0ID_CHARm_dwCharIDdwPriceEMITEM_ROUTE_CHAR_CONTRIBUTION );
                    
    GLITEMLMT::GetInstance().ReqMoneyExc ID_CHARm_dwCharIDID_CHAR0m_lnContribPEMITEM_ROUTE_CHAR_CONTRIBUTION );
                }

                
    GLITEMLMT::GetInstance().ReqItemRoute sHOLD_ITEMID_CHARm_dwCharIDID_CHAR0EMITEM_ROUTE_SHOP_CONTRIBUTIONsHOLD_ITEM.wTurnNum );

                
    std::string strTIME CDebugSet::GetCurTime ();
                
    CDebugSet::ToFile "ITEM_CONTRIBUTION_SELL.txt""%s    SELL CONTRIBUTION ITEM [CharID: %d][CharName:%s][Item Price:%I64d][Money After:%I64d][ITEM MID:%d SID:%d][Number: %d] ",
                
    strTIME.c_str(), m_dwCharIDm_szNamedwPricem_lnContribPpItem->sBasicOp.sNativeID.wMainIDpItem->sBasicOp.sNativeID.wSubID,sHOLD_ITEM.wTurnNum );
            }

        }
        else
        {
            
    m_lnMoney += llDisPRICE2;

            
    //    µ· ·Î±×.
            
    if ( llDisPRICE2>EMMONEY_LOG )
            {
                
    GLITEMLMT::GetInstance().ReqMoneyExc ID_CHAR0ID_CHARm_dwCharIDllDisPRICE2EMITEM_ROUTE_CHAR );
                
    GLITEMLMT::GetInstance().ReqMoneyExc ID_CHARm_dwCharIDID_CHAR0m_lnMoneyEMITEM_ROUTE_CHAR );
            }

            
    //    Note :¾ÆÀÌÅÛÀÇ ¼ÒÀ¯ ÀÌÀü °æ·Î ±â·Ï.
            //
            
    GLITEMLMT::GetInstance().ReqItemRoute sHOLD_ITEMID_CHARm_dwCharIDID_CHAR0EMITEM_ROUTE_SHOPsHOLD_ITEM.wTurnNum );
        }

    //#if defined(_RELEASED) || defined(TW_PARAM) || defined(TH_PARAM) || defined(HK_PARAM) // ***Tracing Log print
        
    if ( m_bTracingUser )
        {
            
    NET_LOG_UPDATE_TRACINGCHAR TracingMsg;
            
    TracingMsg.nUserNum  GetUserID();
            
    StringCchCopyTracingMsg.szAccountUSR_ID_LENGTH+1m_szUID );

            
    CString strTemp;
            
    strTemp.Format"Sale To Npc, [%s][%s], Sale price:[%I64d], Have Money:[%I64d]",
                     
    m_szUIDm_szName,  llDisPRICE2m_lnMoney );

            
    StringCchCopyTracingMsg.szLogMsgTRACING_LOG_SIZEstrTemp.GetString() );

            
    m_pGLGaeaServer->SENDTOAGENTm_dwClientID, &TracingMsg );
        }
    //#endif

        //    ¾ÆÀÌÅÆ »èÁ¦.
        
    RELEASE_HOLD_ITEM();

        
    //    ±Ý¾× º¯È­ ¸Þ½ÃÁö.
        
    GLMSG::SNETPC_UPDATE_MONEY NetMsgMoney;
        
    NetMsgMoney.lnMoney m_lnMoney;
        
    //add money 2
        
    NetMsgMoney.lnVoteP m_lnVoteP;
        
    //add money 3
        
    NetMsgMoney.lnPremP m_lnPremP;
        
    //add contributionpoints by CNDev
        
    NetMsgMoney.lnContribP m_lnContribP;
        
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgMoney);

        
    //    [Àڽſ¡°Ô] ¼Õ¿¡ ÀÖ¾ú´ø ¾ÆÀÌÅÆ Á¦°Å.
        
    GLMSG::SNETPC_PUTON_RELEASE NetMsg_PutOn_Release(SLOT_HOLD);
        
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg_PutOn_Release);

        
    // ÆÖÄ«µåÀÏ °æ¿ì ¾ÆÀÌÅÛÀ» »óÁ¡¿¡ ÆÈ¸é ÆÖDB »èÁ¦
        
    if ( pItem->sBasicOp.emItemType == ITEM_PET_CARD && dwPetID != )
        {
            
    // ÆÖÀ» »ç¶óÁö°Ô ÇØÁØ´Ù.
            
    GLGaeaServer::GetInstance().ReserveDropOutPet SDROPOUTPETINFO(m_dwPetGUID,true,false) );

            
    CDeletePetpDbAction = new CDeletePet m_dwCharIDdwPetID );
            
    GLDBManpDBMan GLGaeaServer::GetInstance().GetDBMan ();
            if ( 
    pDBMan pDBMan->AddJob pDbAction );

            
    // ÆÖÀÌ »èÁ¦µÇ¸é ºÎȰÁ¤º¸¸¦ Å¬¶óÀÌ¾ðÆ®¿¡ ¾Ë·ÁÁÜ.
            
    CGetRestorePetList *pDbAction1 = new CGetRestorePetList m_dwCharIDm_dwClientID );
            if ( 
    pDBMan pDBMan->AddJob pDbAction1 );
        }

        if ( 
    pItem->sBasicOp.emItemType == ITEM_VEHICLE && dwVehicleID != )
        {
            
    CDeleteVehiclepDbAction = new CDeleteVehicle m_dwClientIDm_dwCharIDdwVehicleID );
            
    GLDBManpDBMan GLGaeaServer::GetInstance().GetDBMan ();
            if ( 
    pDBMan pDBMan->AddJob pDbAction );        
        }

        return 
    S_OK;
    }


    HRESULT GLChar::MsgReqFireCracker NET_MSG_GENERICnmg )
    {
        
    GLMSG::SNETPC_REQ_FIRECRACKER_BRD *pNetMsg = (GLMSG::SNETPC_REQ_FIRECRACKER_BRD *) nmg;

        
    GLMSG::SNETPC_REQ_FIRECRACKER_FB NetMsgFB;

        if ( !
    VALID_HOLD_ITEM () )
        {
            
    NetMsgFB.emFB EMREQ_FIRECRACKER_FB_FAIL;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
            return 
    E_FAIL;
        }

        if ( 
    m_sTrade.Valid() )
        {
            
    NetMsgFB.emFB EMREQ_FIRECRACKER_FB_FAIL;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
            return 
    E_FAIL;
        }

        
    SITEMpITEM GET_SLOT_ITEMDATA SLOT_HOLD );
        if ( !
    pITEM )
        {
            
    NetMsgFB.emFB EMREQ_FIRECRACKER_FB_NOITEM;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
            return 
    E_FAIL;
        }

        if ( 
    CheckCoolTimepITEM->sBasicOp.sNativeID ) ) return E_FAIL;

        
    SITEMCUSTOM &sCUSTOM m_PutOnItems[SLOT_HOLD];

        if ( 
    pITEM->sBasicOp.emItemType!=ITEM_FIRECRACKER )
        {
            
    NetMsgFB.emFB EMREQ_FIRECRACKER_FB_NOITEM;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
            return 
    E_FAIL;
        }

        if ( 
    pITEM->sBasicOp.strTargetEffect.empty() )
        {
            
    NetMsgFB.emFB EMREQ_FIRECRACKER_FB_NOITEM;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
            return 
    E_FAIL;
        }

        
    //    Note : ÆøÁ× »ç¿ë.
        //
        
    GLMSG::SNETPC_REQ_FIRECRACKER_BRD NetMsgBrd;
        
    NetMsgBrd.nidITEM sCUSTOM.sNativeID;
        
    NetMsgBrd.vPOS pNetMsg->vPOS;
        
    SNDMSGAROUND ( (NET_MSG_GENERIC*) &NetMsgBrd );

        
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgBrd);

        
    //    Note : ÆøÁ× »ç¿ëÀ» ¾Ë¸².
        //
        
    NetMsgFB.emFB EMREQ_FIRECRACKER_FB_OK;
        
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);

        
    //    Note : ¾ÆÀÌÅÛ ¼Ò¸ð.
        //
        
    DoDrugSlotItem (SLOT_HOLD );

        return 
    S_OK;
    }

    HRESULT GLChar::MsgInvenVietnamGet NET_MSG_GENERICnmg )
    {
        if ( !
    IsValidBody() )    return E_FAIL;
    //    if( m_dwVietnamGainType == GAINTYPE_EMPTY ) return E_FAIL;
    //    if( m_dwVietnamGainType == GAINTYPE_HALF ) return E_FAIL;

        
    GLMSG::SNETPC_INVEN_VIETNAM_INVENGET *pNetMsg = (GLMSG::SNETPC_INVEN_VIETNAM_INVENGET *) nmg;


        
    SINVENITEMpInvenItem m_cInventory.GetItem pNetMsg->wPosXpNetMsg->wPosY );
        if ( !
    pInvenItem )    return E_FAIL;

        if ( 
    CheckCoolTimepInvenItem->sItemCustom.sNativeID ) )    return E_FAIL;

        
    SITEMpItem GLItemMan::GetInstance().GetItem pInvenItem->sItemCustom.sNativeID );
        if ( !
    pItem || pItem->sDrugOp.wCureVolume == )    return E_FAIL;

        if( 
    pNetMsg->bGetExp )
        {
            
    // È®·ü 
            
    if ( pItem->sDrugOp.bRatio 
            {
                
    LONGLONG lAddExp;
                
    LONGLONG lAddMoney;

                
    float fRate = (float)pItem->sDrugOp.wCureVolume 100.0f;

                
    lAddExp m_lVNGainSysExp fRate;
                
    lAddMoney m_lVNGainSysMoney fRate;

                if ( 
    lAddExp m_lVNGainSysExp lAddExp m_lVNGainSysExp;
                if ( 
    lAddMoney m_lVNGainSysMoney lAddMoney m_lVNGainSysMoney;

                
    m_lVNGainSysExp -= lAddExp;
                
    m_lVNGainSysMoney -= lAddMoney;

                
    m_sExperience.lnNow += lAddExp;
                
    m_lnMoney            += lAddMoney;

                
    m_bVietnamLevelUp TRUE
            }
            else 
            {
                
    LONGLONG lAddExp;
                if( 
    m_lVNGainSysExp pItem->sDrugOp.wCureVolume )
                {
                    
    lAddExp m_lVNGainSysExp;
                    
    m_lVNGainSysExp 0;
                }else{
                    
    lAddExp pItem->sDrugOp.wCureVolume;
                    
    m_lVNGainSysExp -= pItem->sDrugOp.wCureVolume;
                }
                
    m_sExperience.lnNow += lAddExp;
                
    m_lnMoney            += m_lVNGainSysMoney;

                
    m_lVNGainSysMoney 0;
                
    m_bVietnamLevelUp TRUE
            }

            
    DoDrugInvenItem pNetMsg->wPosXpNetMsg->wPosY );

            
    GLMSG::SNETPC_INVEN_VIETNAM_EXPGET_FB NetMsgFB;
            
    NetMsgFB.lnVnMoney m_lVNGainSysMoney;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);

            
    //    Note : Å¬¶óÀÌ¾ðÆ®¿¡ µ· ¾×¼ö º¯È­¸¦ ¾Ë·ÁÁÜ.
            
    GLMSG::SNETPC_UPDATE_MONEY NetMsg;
            
    NetMsg.lnMoney m_lnMoney;
            
    //add money 2
            
    NetMsg.lnVoteP m_lnVoteP;
            
    //add money 3
            
    NetMsg.lnPremP m_lnPremP;
            
    //add contributionpoints by CNDev
            
    NetMsg.lnContribP m_lnContribP;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg);

            
    //    Note : ±Ý¾× ·Î±×.
            //
            /*if ( lnAmount>EMMONEY_LOG )
            {
                GLITEMLMT::GetInstance().ReqMoneyExc ( ID_CHAR, 0, ID_CHAR, m_dwCharID, lnAmount, EMITEM_ROUTE_VNINVEN );
                GLITEMLMT::GetInstance().ReqMoneyExc ( ID_CHAR, m_dwCharID, ID_CHAR, 0, m_lnMoney, EMITEM_ROUTE_CHAR );
            }*/
        
    }else{
            
    m_dwVietnamInvenCount += pItem->sDrugOp.wCureVolume;
            
    DoDrugInvenItem pNetMsg->wPosXpNetMsg->wPosY );
            
    GLMSG::SNETPC_INVEN_VIETNAM_ITEMGET_FB NetMsgFB;
            
    NetMsgFB.dwVietnamInvenCount m_dwVietnamInvenCount;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);

        }

        
    //    [Àڽſ¡°Ô] Àι꠾ÆÀÌÅÆ ¼Ò¸ð½ÃÅ´.


        
    return S_OK;
    }

    HRESULT GLChar::MsgReqInvenDrug NET_MSG_GENERICnmg )
    {
        if ( !
    IsValidBody() )    return E_FAIL;

        
    GLMSG::SNETPC_REQ_INVENDRUG *pNetMsg = (GLMSG::SNETPC_REQ_INVENDRUG *) nmg;

        
    SINVENITEMpInvenItem m_cInventory.GetItem pNetMsg->wPosXpNetMsg->wPosY );
        if ( !
    pInvenItem )    return E_FAIL;

        if ( 
    CheckCoolTimepInvenItem->sItemCustom.sNativeID ) )    return E_FAIL;

        
    SITEMpItem GLItemMan::GetInstance().GetItem pInvenItem->sItemCustom.sNativeID );
        if ( !
    pItem || pItem->sDrugOp.emDrug==ITEM_DRUG_NUNE )    return E_FAIL;

        if ( 
    m_bAntiPot )
        {
            
    GLMSG::SNET_ITEM_CANNOT_POT NetMsg;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg);

            return 
    E_FAIL;
        }

        if ( 
    m_sCONFTING.IsFIGHTING() )
        {
            if ( !
    m_sCONFTING.IsRECOVE() )
            {
                
    //    Note : È¸º¹¾à »ç¿ë °¡´É °¹¼ö Å¬¶óÀÌ¾ðÆ®¿¡ ¾Ë¸².
                //
                
    GLMSG::SNETPC_CONFRONT_RECOVE NetMsg;
                
    NetMsg.wRECOVER m_sCONFTING.wRECOVER;
                
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg);

                return 
    E_FAIL;
            }

            if ( 
    m_sCONFTING.sOption.wRECOVER!=USHRT_MAX )
            {
                
    m_sCONFTING.COUNTRECOVE();

                
    //    Note : È¸º¹¾à »ç¿ë °¡´É °¹¼ö Å¬¶óÀÌ¾ðÆ®¿¡ ¾Ë¸².
                //
                
    GLMSG::SNETPC_CONFRONT_RECOVE NetMsg;
                
    NetMsg.wRECOVER m_sCONFTING.wRECOVER;
                
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg);
            }
        }

        
    //    Note : pk µî±ÞÀÌ »ìÀθ¶ µî±Þ ÀÌ»óÀÏ °æ¿ì È¸º¹¾àÀÇ »ç¿ëÀ» ¸·´Â´Ù.
        //
        
    DWORD dwPK_LEVEL GET_PK_LEVEL();
        if ( 
    dwPK_LEVEL != UINT_MAX && dwPK_LEVEL>GLCONST_CHAR::dwPK_DRUG_ENABLE_LEVEL )
        {
            return 
    E_FAIL;
        }

        switch ( 
    pItem->sDrugOp.emDrug )
        {
        case 
    ITEM_DRUG_HP:
            if ( 
    m_sHP.dwNow == m_sHP.dwMax ) return E_FAIL;
            
    m_sHP.INCREASE pItem->sDrugOp.wCureVolumepItem->sDrugOp.bRatio );
            break;

        case 
    ITEM_DRUG_MP:
            if ( 
    m_sMP.dwNow == m_sMP.dwMax ) return E_FAIL;
            
    m_sMP.INCREASE pItem->sDrugOp.wCureVolumepItem->sDrugOp.bRatio );
            break;

        case 
    ITEM_DRUG_SP:
            if ( 
    m_sSP.dwNow == m_sSP.dwMax ) return E_FAIL;
            
    m_sSP.INCREASE pItem->sDrugOp.wCureVolumepItem->sDrugOp.bRatio );
            break;

        case 
    ITEM_DRUG_HP_MP:
            if ( 
    m_sHP.dwNow == m_sHP.dwMax && m_sMP.dwNow == m_sMP.dwMax ) return E_FAIL;
            
    m_sHP.INCREASE pItem->sDrugOp.wCureVolumepItem->sDrugOp.bRatio );
            
    m_sMP.INCREASE pItem->sDrugOp.wCureVolumepItem->sDrugOp.bRatio );
            break;

        case 
    ITEM_DRUG_MP_SP:
            if ( 
    m_sMP.dwNow == m_sMP.dwMax && m_sSP.dwNow == m_sSP.dwMax ) return E_FAIL;
            
    m_sMP.INCREASE pItem->sDrugOp.wCureVolumepItem->sDrugOp.bRatio );
            
    m_sSP.INCREASE pItem->sDrugOp.wCureVolumepItem->sDrugOp.bRatio );
            break;

        case 
    ITEM_DRUG_HP_MP_SP:
            if ( 
    m_sHP.dwNow == m_sHP.dwMax && m_sMP.dwNow == m_sMP.dwMax && m_sSP.dwNow == m_sSP.dwMax ) return E_FAIL;
            
    m_sHP.INCREASE pItem->sDrugOp.wCureVolumepItem->sDrugOp.bRatio );
            
    m_sMP.INCREASE pItem->sDrugOp.wCureVolumepItem->sDrugOp.bRatio );
            
    m_sSP.INCREASE pItem->sDrugOp.wCureVolumepItem->sDrugOp.bRatio );
            break;

        case 
    ITEM_DRUG_CP:
            if ( 
    m_sCP.dwNow == m_sCP.dwMax ) return E_FAIL;
            
    m_sCP.INCREASE pItem->sDrugOp.wCureVolumepItem->sDrugOp.bRatio ); //add cp
            
    break;

        
    //case ITEM_DRUG_HP:
        //case ITEM_DRUG_MP:
        //case ITEM_DRUG_SP:
        //case ITEM_DRUG_HP_MP:
        //case ITEM_DRUG_MP_SP:
        //case ITEM_DRUG_HP_MP_SP:
        //    RECEIVE_DRUGFACT(pItem->sDrugOp.emDrug,pItem->sDrugOp.wCureVolume,pItem->sDrugOp.bRatio);
        //    break;

        
    case ITEM_DRUG_CURE:
        case 
    ITEM_DRUG_HP_CURE:
        case 
    ITEM_DRUG_HP_MP_SP_CURE:
            {
                
    BOOL bSTATEBLOW ISSTATEBLOW();

                if( 
    pItem->sDrugOp.emDrug == ITEM_DRUG_HP_CURE )
                {
                    if ( 
    m_sHP.dwNow == m_sHP.dwMax && !bSTATEBLOW ) return E_FAIL;
                    
    m_sHP.INCREASE pItem->sDrugOp.wCureVolumepItem->sDrugOp.bRatio );
                    
    bSTATEBLOW TRUE;
                }

                if( 
    pItem->sDrugOp.emDrug == ITEM_DRUG_HP_MP_SP_CURE )
                {
                    if ( 
    m_sHP.dwNow == m_sHP.dwMax && m_sMP.dwNow == m_sMP.dwMax 
                        
    && m_sSP.dwNow == m_sSP.dwMax && !bSTATEBLOW ) return E_FAIL;
                    
    m_sHP.INCREASE pItem->sDrugOp.wCureVolumepItem->sDrugOp.bRatio );
                    
    m_sMP.INCREASE pItem->sDrugOp.wCureVolumepItem->sDrugOp.bRatio );
                    
    m_sSP.INCREASE pItem->sDrugOp.wCureVolumepItem->sDrugOp.bRatio );
                    
    bSTATEBLOW TRUE;
                }

                if ( !
    bSTATEBLOW ) return E_FAIL;

                
    GLMSG::SNETPC_CURESTATEBLOW_BRD    NetMsgBrd;
                for ( 
    int i=0i<EMBLOW_MULTI; ++)
                {
                    if ( 
    m_sSTATEBLOWS[i].emBLOW==EMBLOW_NONE )        continue;

                    
    EMDISORDER emDIS STATE_TO_DISORDER(m_sSTATEBLOWS[i].emBLOW);
                    if ( !(
    pItem->sDrugOp.dwCureDISORDER&emDIS) )    continue;

                    
    //    »óÅÂÀÌ»ó Áö¼Ó½Ã°£À» Á¾·á½ÃÅ´.
                    
    m_sSTATEBLOWS[i].fAGE 0.0f;
                }

                
    //    »óÅÂÀÌ»ó Ä¡·áµÊÀ» Àڽſ¡°Ô ¾Ë¸².
                
    NetMsgBrd.emCrow CROW_PC;
                
    NetMsgBrd.dwID m_dwGaeaID;
                
    NetMsgBrd.dwCUREFLAG pItem->sDrugOp.dwCureDISORDER;
                
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgBrd);

                
    //    »óÅÂÀÌ»ó Ä¡·áµÊÀ» ¸ðµÎ¿¡°Ô ¾Ë¸².
                
    SNDMSGAROUND ( (NET_MSG_GENERIC*)&NetMsgBrd );
            }
            break;

        };


        
    //    Note : ¾ÆÀÌÅÛ ¼Ò¸ð.
        //
        
    DoDrugInvenItem pNetMsg->wPosXpNetMsg->wPosY );

        
    //    Note : Ã¼·Â ¼öÄ¡ º¯È­¸¦ [ÀÚ½Å,ÆÄƼ¿ø,ÁÖÀ§]ÀǠŬ¶óÀÌ¾ðÆ®µé¿¡ ¾Ë¸².
        
    MsgSendUpdateState ();

        return 
    S_OK;
    }

    HRESULT GLChar::MsgGetPoints NET_MSG_GENERICnmg )
    {
        if ( !
    IsValidBody() )    return E_FAIL;
        
    GLMSG::SNETPC_RETRIEVE_POINTS_FB *pNetMsg = (GLMSG::SNETPC_RETRIEVE_POINTS_FB *) nmg;
        
        
    GLMSG::SNETPC_RETRIEVE_POINTS_FB pNetMsgFB;
        
    pNetMsgFB.emFB pNetMsg->emFB;
        
    pNetMsgFB.PPoints pNetMsg->PPoints;
        
    pNetMsgFB.VPoints pNetMsg->VPoints;
        
    //CONSOLEMSG_WRITE ( " send MsgGetPoints ");
        
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&pNetMsgFB);
        return 
    S_OK;
    }
    HRESULT GLChar::MsgRetrievePoints NET_MSG_GENERICnmg )
    {
        if ( !
    IsValidBody() )    return E_FAIL;
        
    GLMSG::SNETPC_RETRIEVE_POINTS *pNetMsg = (GLMSG::SNETPC_RETRIEVE_POINTS *) nmg;
        if ( 
    GLGaeaServer::GetInstance().GetDBMan() )
        {
            
    CGetPointspDbAction = new CGetPoints m_dwCharIDm_dwUserID m_dwClientID );
            
    GLGaeaServer::GetInstance().GetDBMan()->AddJob pDbAction );
            
    //if ( pDbAction ) CONSOLEMSG_WRITE ( " send MsgRetrievePoints ");
        
    }

        return 
    S_OK;
    }

    HRESULT GLChar::MsgReqInvenItemShopInfo NET_MSG_GENERICnmg )
    {
        if ( !
    IsValidBody() )    return E_FAIL;
        
    GLMSG::SNET_GET_ITEMSHOP_FROMDBpNetMsg = (GLMSG::SNET_GET_ITEMSHOP_FROMDB*) nmg;

        
    CString strUID m_szUID;
        
    std::vector<ITEMSHOPvItem;

        
    // DB¿¡¼­ ºô¸µ¾ÆÀÌÅÛ Á¤º¸ °¡Á®¿À±â

        
    if ( GLGaeaServer::GetInstance().GetDBMan() )
        {
            
    CGetItemShoppDbAction = new CGetItemShop (m_dwCharID);
            
    GLGaeaServer::GetInstance().GetDBMan()->AddJob pDbAction );
            
    //if ( pDbAction ) CONSOLEMSG_WRITE ( " send MsgReqInvenItemShopInfo ");
        
    }
            
        return 
    S_OK;
    }


    HRESULT GLChar::MsgBuyItemShop NET_MSG_GENERICnmg )
    {
        if ( !
    IsValidBody() )    return E_FAIL;
        
    GLMSG::SNET_ITEMSHOP_ITEM_BUY *pNetMsg = (GLMSG::SNET_ITEMSHOP_ITEM_BUY *) nmg;
        
    GLMSG::SNET_ITEMSHOP_ITEM_BUY NetMsg;
        
    NetMsg.bBuy pNetMsg->bBuy;
        
    NetMsg.dwUserID pNetMsg->dwUserID;
        
    //CONSOLEMSG_WRITE ( " send ");
        
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg);

        return 
    S_OK;
    }

    HRESULT GLChar::MsgReqInvenItemShop NET_MSG_GENERICnmg )
    {
        if ( !
    IsValidBody() )    return E_FAIL;

        
    GLMSG::SNET_ITEMSHOP_BUY *pNetMsg = (GLMSG::SNET_ITEMSHOP_BUY *) nmg;
        if ( 
    GLGaeaServer::GetInstance().GetDBMan() )
        {
            
    CItemShop_Get *pDbAction = new CItemShop_Getm_dwClientIDm_dwUserIDpNetMsg->szPurKey );
            
    GLGaeaServer::GetInstance().GetDBMan()->AddJob pDbAction );
            
    //if ( pDbAction ) CONSOLEMSG_WRITE ( " send MsgReqInvenItemShop ");
        
    }
        
        return 
    S_OK;
    }

    HRESULT GLChar::MsgReqInvenBoxInfo NET_MSG_GENERICnmg )
    {
        
    GLMSG::SNET_GET_CHARGEDITEM_FROMDBpNetMsg = (GLMSG::SNET_GET_CHARGEDITEM_FROMDB*) nmg;

        
    CString strUID m_szUID;
        
    std::vector<SHOPPURCHASEvItem;

        
    // DB¿¡¼­ ºô¸µ¾ÆÀÌÅÛ Á¤º¸ °¡Á®¿À±â

        
    if ( GLGaeaServer::GetInstance().GetDBMan() )
        {
            
    CGetPurchaseItempDbAction = new CGetPurchaseItem strUIDm_dwCharID );
            
    GLGaeaServer::GetInstance().GetDBMan()->AddJob pDbAction );
        }
            
        return 
    S_OK;
    }

    HRESULT GLChar::MsgReqInvenBoxOpen NET_MSG_GENERICnmg )
    {
        if ( !
    IsValidBody() )    return E_FAIL;

        
    GLMSG::SNET_INVEN_BOXOPEN *pNetMsg = (GLMSG::SNET_INVEN_BOXOPEN *) nmg;

        
    GLMSG::SNET_INVEN_BOXOPEN_FB NetMsgFB;

        
    WORD wPosX pNetMsg->wPosX;
        
    WORD wPosY pNetMsg->wPosY;

        
    SINVENITEMpInvenItem m_cInventory.FindPosItem wPosXwPosY );
        if ( !
    pInvenItem )
        {
            
    NetMsgFB.emFB EMREQ_BOXOPEN_FB_NOITEM;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
            return 
    E_FAIL;
        }

        
    wPosX pInvenItem->wPosX;
        
    wPosY pInvenItem->wPosY;

        
    SITEMpItem GLItemMan::GetInstance().GetItem pInvenItem->sItemCustom.sNativeID );
        if ( !
    pItem || pItem->sBasicOp.emItemType!=ITEM_BOX )
        {
            
    NetMsgFB.emFB EMREQ_BOXOPEN_FB_NOBOX;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
            return 
    E_FAIL;
        }

        if ( !
    pItem->sBox.VALID() )
        {
            
    NetMsgFB.emFB EMREQ_BOXOPEN_FB_EMPTY;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
            return 
    E_FAIL;
        }

        
    //    Note : Àκ¥ÀÇ ¿©À¯ °ø°£ ÃøÁ¤.
        //
        
    GLInventory cInvenTemp;
        
    cInvenTemp.Assign m_cInventory );

        for ( 
    int i=0i<ITEM::SBOX::ITEM_SIZE; ++)
        {
            
    SITEMCUSTOM sCUSTOM;
            
    sCUSTOM.sNativeID pItem->sBox.sITEMS[i].nidITEM;
            if ( 
    sCUSTOM.sNativeID==SNATIVEID(false) )                continue;

            
    SITEM *pITEM GLItemMan::GetInstance().GetItem sCUSTOM.sNativeID );
            if ( !
    pITEM )
            {
                
    NetMsgFB.emFB EMREQ_BOXOPEN_FB_INVALIDITEM;
                
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
                return 
    E_FAIL;
            }

            
    BOOL bOK cInvenTemp.InsertItem sCUSTOM );
            if ( !
    bOK )
            {
                
    //    Note : Àκ¥¿¡ °ø°£ÀÌ ¾ø´Â °ÍÀ¸·Î ÆÇ´ÜµÊ.
                //
                
    NetMsgFB.emFB EMREQ_BOXOPEN_FB_NOTINVEN;
                
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
                return 
    E_FAIL;
            }
        }

        
    //    Note : »óÀھȿ¡ Àִ ¾ÆÀÌÅÛÀ» ²¨³»¾î¼­ ³Ö´Â´Ù.
        //
        
    for ( int i=0i<ITEM::SBOX::ITEM_SIZE; ++)
        {
            
    SITEMCUSTOM sITEM_NEW;
            
    sITEM_NEW.sNativeID pItem->sBox.sITEMS[i].nidITEM;
            
    DWORD dwAMOUNT pItem->sBox.sITEMS[i].dwAMOUNT;
            if ( 
    sITEM_NEW.sNativeID==SNATIVEID(false) )                continue;

            
    SITEM *pITEM GLItemMan::GetInstance().GetItem sITEM_NEW.sNativeID );
            if ( !
    pITEM )                                            return E_FAIL;

            
    //    Note : ¾ÆÀÌÅÛ »ý¼º.
            //
            
    CTime cTIME CTime::GetCurrentTime();
            
    sITEM_NEW.tBORNTIME cTIME.GetTime();

            
    sITEM_NEW.wTurnNum = (WORDdwAMOUNT;
            
    sITEM_NEW.cGenType pInvenItem->sItemCustom.cGenType;
            
    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 );

            
    // ¾ÆÀÌÅÛ ¿¡µðÆ®¿¡¼­ ÀÔ·ÂÇÑ °³Á¶ µî±Þ Àû¿ë ( ÁØÇõ )
            
    sITEM_NEW.cDAMAGE = (BYTE)pITEM->sBasicOp.wGradeAttack;
            
    sITEM_NEW.cDEFENSE = (BYTE)pITEM->sBasicOp.wGradeDefense;

            
    //    ·£´ý ¿É¼Ç »ý¼º.
            
    if( sITEM_NEW.GENERATE_RANDOM_OPT() )
            {
                
    GLITEMLMT::GetInstance().ReqRandomItemsITEM_NEW );
            }

            
    //    Note : Àκ¥¿¡ ³ÖÀ» À§Ä¡ Ã£À½.
            
    WORD wInsertPosXwInsertPosY;
            
    BOOL bOk m_cInventory.FindInsrtable pITEM->sBasicOp.wInvenSizeXpITEM->sBasicOp.wInvenSizeYwInsertPosXwInsertPosY );
            if ( !
    bOk )        return S_OK;    //    Àκ¥ °ø°£ ºÎÁ·À¸·Î µÇµ¹¸² ½ÇÆÐ.

            //    »ý¼ºÇÑ ¾ÆÀÌÅÆ Àι꿡 ³ÖÀ½.
            
    m_cInventory.InsertItem sITEM_NEWwInsertPosXwInsertPosY );
            
    SINVENITEM *pInsertItem m_cInventory.GetItem wInsertPosXwInsertPosY );

            
    GLITEMLMT::GetInstance().ReqItemRoute pInsertItem->sItemCustomID_CHAR0ID_CHARm_dwCharIDEMITEM_ROUTE_CHARpInsertItem->sItemCustom.wTurnNum );

            
    //    [Àڽſ¡°Ô] ¸Þ½ÃÁö ¹ß»ý.
            
    GLMSG::SNETPC_INVEN_INSERT NetMsg_Inven;
            
    NetMsg_Inven.Data = *pInsertItem;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg_Inven);
        }

        
    //    »óÀÚ »èÁ¦ ·Î±×.
        
    GLITEMLMT::GetInstance().ReqItemRoute pInvenItem->sItemCustomID_CHARm_dwCharIDID_CHAR0EMITEM_ROUTE_DELETEpInvenItem->sItemCustom.wTurnNum );

        
    //    Note : »óÀÚ ¾ÆÀÌÅÛ »èÁ¦.
        //
        
    m_cInventory.DeleteItem wPosXwPosY );

        
    //    [Àڽſ¡°Ô] Àι꿡 ¾ÆÀÌÅÆ Á¦°Å.
        
    GLMSG::SNETPC_INVEN_DELETE NetMsg_Inven_Delete;
        
    NetMsg_Inven_Delete.wPosX wPosX;
        
    NetMsg_Inven_Delete.wPosY wPosY;
        
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg_Inven_Delete);

        
    //    Note : »óÀÚ¸¦ ¼º°øÀûÀ¸·Î ¿­¾úÀ½.
        //
        
    NetMsgFB.emFB EMREQ_BOXOPEN_FB_OK;
        
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);

        return 
    S_OK;
    }


    HRESULT GLChar::MsgReqInvenGMItem NET_MSG_GENERICnmg //add itemcmd
    {
        if ( !
    IsValidBody() )    return E_FAIL;

        if ( 
    m_dwUserLvl USER_MASTER ) return E_FAIL;

        
    GLMSG::SNET_INVEN_GMITEM *pNetMsg = (GLMSG::SNET_INVEN_GMITEM *) nmg;

        
    GLMSG::SNET_INVEN_GMITEM_FB NetMsgFB;

        if ( 
    pNetMsg->wPass != GLCONST_CHAR::wGMItemPass )
        {
            
    NetMsgFB.emFB EMREQ_GMITEM_FB_PASS;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
            return 
    E_FAIL;
        }

        
    SITEMpItem GLItemMan::GetInstance().GetItem pNetMsg->sItemID );
        if ( !
    pItem  )
        {
            
    NetMsgFB.emFB EMREQ_GMITEM_FB_NOTITEM;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
            return 
    E_FAIL;
        }

        if ( 
    pNetMsg->wNum >= GLCONST_CHAR::wGMItemMax )
        {
            
    NetMsgFB.emFB EMREQ_GMITEM_FB_MAX;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
            return 
    E_FAIL;
        }

        
    GLInventory cInvenTemp;
        
    cInvenTemp.Assign m_cInventory );

        
    WORD    wNum =  pNetMsg->wNum;
        for ( 
    int i=0i<wNum; ++)
        {
            
    SITEMCUSTOM sCUSTOM;
            
    sCUSTOM.sNativeID pItem->sBasicOp.sNativeID;

            if ( 
    sCUSTOM.sNativeID==SNATIVEID(false) )                continue;

            
    SITEM *pITEM GLItemMan::GetInstance().GetItem sCUSTOM.sNativeID );
            if ( !
    pITEM )
            {
                
    NetMsgFB.emFB EMREQ_GMITEM_FB_FAIL;
                
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
                return 
    E_FAIL;
            }

            
    BOOL bOK cInvenTemp.InsertItem sCUSTOM );
            if ( !
    bOK )
            {
                
    NetMsgFB.emFB EMREQ_GMITEM_FB_INFAIL;
                
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
                return 
    E_FAIL;
            }
        }

        for ( 
    int i=0i<wNum; ++)
        {
            
    SITEMCUSTOM sITEM_NEW;
            
    sITEM_NEW.sNativeID pItem->sBasicOp.sNativeID;
            
    //DWORD dwAMOUNT = pItem->sBox.sITEMS[i].dwAMOUNT;
            
    if ( sITEM_NEW.sNativeID==SNATIVEID(false) )                continue;

            
    SITEM *pITEM GLItemMan::GetInstance().GetItem sITEM_NEW.sNativeID );
            if ( !
    pITEM )                                            return E_FAIL;

            
    CTime cTIME CTime::GetCurrentTime();
            
    sITEM_NEW.tBORNTIME cTIME.GetTime();

            
    //sITEM_NEW.wTurnNum = (WORD) 1;
            
    sITEM_NEW.cGenType EMGEN_SYSTEM;
            
    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 );

            
    sITEM_NEW.cDAMAGE = (BYTE)0//item is +9
            
    sITEM_NEW.cDEFENSE = (BYTE)0;//item is +9

            //sITEM_NEW.dwOwnerID = m_dwCharID; //item have owner id of the one who request

            
    if( sITEM_NEW.GENERATE_RANDOM_OPT() )
            {
                
    GLITEMLMT::GetInstance().ReqRandomItemsITEM_NEW );
            }

            
    WORD wInsertPosXwInsertPosY;
            
    BOOL bOk m_cInventory.FindInsrtable pITEM->sBasicOp.wInvenSizeXpITEM->sBasicOp.wInvenSizeYwInsertPosXwInsertPosY );
            if ( !
    bOk )        return S_OK;    

            
    m_cInventory.InsertItem sITEM_NEWwInsertPosXwInsertPosY );
            
    SINVENITEM *pInsertItem m_cInventory.GetItem wInsertPosXwInsertPosY );

            
    GLITEMLMT::GetInstance().ReqItemRoute pInsertItem->sItemCustomID_CHAR0ID_CHARm_dwCharIDEMITEM_ROUTE_CHARpInsertItem->sItemCustom.wTurnNum );

            
    GLMSG::SNETPC_INVEN_INSERT NetMsg_Inven;
            
    NetMsg_Inven.Data = *pInsertItem;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg_Inven);
        }

        
    NetMsgFB.emFB EMREQ_GMITEM_FB_OK;
        
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);

        return 
    S_OK;
    }
    HRESULT GLChar::MsgReqInvenRandomBoxOpen NET_MSG_GENERICnmg )
    {
        if ( !
    IsValidBody() )    return E_FAIL;

        
    GLMSG::SNET_INVEN_RANDOMBOXOPEN *pNetMsg = (GLMSG::SNET_INVEN_RANDOMBOXOPEN *) nmg;

        
    GLMSG::SNET_INVEN_RANDOMBOXOPEN_FB NetMsgFB;

        
    WORD wPosX pNetMsg->wPosX;
        
    WORD wPosY pNetMsg->wPosY;

        
    SINVENITEMpInvenItem m_cInventory.FindPosItem wPosXwPosY );
        if ( !
    pInvenItem )
        {
            
    NetMsgFB.emFB EMINVEN_RANDOMBOXOPEN_FB_FAIL;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
            return 
    E_FAIL;
        }

        
    wPosX pInvenItem->wPosX;
        
    wPosY pInvenItem->wPosY;

        
    SITEMpItem GLItemMan::GetInstance().GetItem pInvenItem->sItemCustom.sNativeID );
        if ( !
    pItem || pItem->sBasicOp.emItemType!=ITEM_RANDOMITEM )
        {
            
    NetMsgFB.emFB EMINVEN_RANDOMBOXOPEN_FB_FAIL;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
            return 
    E_FAIL;
        }

        if ( !
    pItem->sRandomBox.VALID() )
        {
            
    NetMsgFB.emFB EMINVEN_RANDOMBOXOPEN_FB_EMPTY;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
            return 
    E_FAIL;
        }

        
    float fNowRate seqrandom::getpercent();

        
    float fLOW 0;
        
    ITEM::SRANDOMITEM sGENITEM;
        
    sGENITEM.nidITEM SNATIVEID(false);
        for ( 
    DWORD i=0i<pItem->sRandomBox.vecBOX.size(); ++)
        {
            
    ITEM::SRANDOMITEM sITEM pItem->sRandomBox.vecBOX[i];

            if ( 
    fLOW <= fNowRate && fNowRate < (fLOW+sITEM.fRATE) )
            {
                
    sGENITEM sITEM;
                break;
            }

            
    fLOW += sITEM.fRATE;
        }

        if ( 
    sGENITEM.nidITEM == SNATIVEID(false) )
        {
            
    //    »óÀÚ ¾ÆÀÌÅÛ »èÁ¦ ·Î±× ³²±è.
            
    GLITEMLMT::GetInstance().ReqItemRoute pInvenItem->sItemCustomID_CHARm_dwCharIDID_CHAR0EMITEM_ROUTE_DELETEpInvenItem->sItemCustom.wTurnNum );

            
    //    Note : »óÀÚ ¾ÆÀÌÅÛ »èÁ¦.
            //
            
    m_cInventory.DeleteItem wPosXwPosY );

            
    //    [Àڽſ¡°Ô] Àι꿡 ¾ÆÀÌÅÆ Á¦°Å.
            
    GLMSG::SNETPC_INVEN_DELETE NetMsg_Inven_Delete;
            
    NetMsg_Inven_Delete.wPosX wPosX;
            
    NetMsg_Inven_Delete.wPosY wPosY;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg_Inven_Delete);

            
    //    Note : Ã³¸® °á°ú Àü¼Û.
            
    NetMsgFB.emFB EMINVEN_RANDOMBOXOPEN_FB_MISS;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
            return 
    E_FAIL;
        }

        
    SITEM *pITEM_DATA GLItemMan::GetInstance().GetItem sGENITEM.nidITEM );
        if ( !
    pITEM_DATA )
        {
            
    NetMsgFB.emFB EMINVEN_RANDOMBOXOPEN_FB_BADITEM;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
            return 
    E_FAIL;
        }

        
    //    Note : ¾ÆÀÌÅÆ ¹ß»ý.
        //
        
    WORD wINSERTX(0), wINSERTY(0);
        
    BOOL bOK m_cInventory.FindInsrtable pITEM_DATA->sBasicOp.wInvenSizeXpITEM_DATA->sBasicOp.wInvenSizeYwINSERTXwINSERTY );
        if ( !
    bOK )
        {
            
    NetMsgFB.emFB EMINVEN_RANDOMBOXOPEN_FB_NOINVEN;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
            return 
    E_FAIL;
        }

        
    //    Note : ¾ÆÀÌÅÛ »ý¼º.
        //
        
    SITEMCUSTOM sITEM_NEW;
        
    sITEM_NEW.sNativeID sGENITEM.nidITEM;

        
    CTime cTIME CTime::GetCurrentTime();
        
    sITEM_NEW.tBORNTIME cTIME.GetTime();

        
    sITEM_NEW.wTurnNum pITEM_DATA->GETAPPLYNUM();
        
    sITEM_NEW.cGenType pInvenItem->sItemCustom.cGenType;
        
    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 );

        
    // ¾ÆÀÌÅÛ ¿¡µðÆ®¿¡¼­ ÀÔ·ÂÇÑ °³Á¶ µî±Þ Àû¿ë ( ÁØÇõ )
        
    sITEM_NEW.cDAMAGE = (BYTE)pITEM_DATA->sBasicOp.wGradeAttack;
        
    sITEM_NEW.cDEFENSE = (BYTE)pITEM_DATA->sBasicOp.wGradeDefense;

        
    //    ·£´ý ¿É¼Ç »ý¼º.
        
    if( sITEM_NEW.GENERATE_RANDOM_OPT() )
        {
            
    GLITEMLMT::GetInstance().ReqRandomItemsITEM_NEW );
        }

        
    //    »ý¼ºÇÑ ¾ÆÀÌÅÆ Àι꿡 ³ÖÀ½.
        
    m_cInventory.InsertItem sITEM_NEWwINSERTXwINSERTY );
        
    SINVENITEM *pInsertItem m_cInventory.GetItem wINSERTXwINSERTY );

        if (!
    pInsertItem) return E_FAIL;


        
    //    [Àڽſ¡°Ô] ¸Þ½ÃÁö ¹ß»ý.
        
    GLMSG::SNETPC_INVEN_INSERT NetMsg_Inven;
        
    NetMsg_Inven.Data = *pInsertItem;
        
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg_Inven);

        
    //    »óÀÚ ¾ÆÀÌÅÛ »èÁ¦ ·Î±× ³²±è.
        
    GLITEMLMT::GetInstance().ReqItemRoute pInvenItem->sItemCustomID_CHARm_dwCharIDID_CHAR0EMITEM_ROUTE_DELETEpInvenItem->sItemCustom.wTurnNum );

        
    //    ·£´ý ¾ÆÀÌÅÛ »ý¼º ·Î±× ³²±è.
        
    GLITEMLMT::GetInstance().ReqItemRoute pInsertItem->sItemCustomID_CHAR0ID_CHARm_dwCharIDEMITEM_ROUTE_CHARpInvenItem->sItemCustom.wTurnNum );

        
    //    Note : »óÀÚ ¾ÆÀÌÅÛ »èÁ¦.
        //
        
    m_cInventory.DeleteItem wPosXwPosY );

        
    //    [Àڽſ¡°Ô] Àι꿡 ¾ÆÀÌÅÆ Á¦°Å.
        
    GLMSG::SNETPC_INVEN_DELETE NetMsg_Inven_Delete;
        
    NetMsg_Inven_Delete.wPosX wPosX;
        
    NetMsg_Inven_Delete.wPosY wPosY;
        
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg_Inven_Delete);

        
    //    Note : »óÀÚ¸¦ ¼º°øÀûÀ¸·Î ¿­¾úÀ½.
        //
        
    NetMsgFB.emFB EMINVEN_RANDOMBOXOPEN_FB_OK;
        
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);

        return 
    S_OK;
    }

    HRESULT GLChar::MsgReqInvenDisJunction NET_MSG_GENERICnmg )
    {
        if ( !
    IsValidBody() )    return E_FAIL;

        
    GLMSG::SNET_INVEN_DISJUNCTION *pNetMsg = (GLMSG::SNET_INVEN_DISJUNCTION *) nmg;

        
    GLMSG::SNET_INVEN_DISJUNCTION_FB NetMsgFB;

        
    WORD wPosX pNetMsg->wPosX;
        
    WORD wPosY pNetMsg->wPosY;

        
    SINVENITEMpInvenItem m_cInventory.FindPosItem wPosXwPosY );
        if ( !
    pInvenItem )
        {
            
    NetMsgFB.emFB EMINVEN_DISJUNCTION_FB_FAIL;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
            return 
    E_FAIL;
        }

        
    wPosX pInvenItem->wPosX;
        
    wPosY pInvenItem->wPosY;

        
    SITEMpHold GET_SLOT_ITEMDATA SLOT_HOLD );
        if ( !
    pHold )
        {
            
    NetMsgFB.emFB EMINVEN_DISJUNCTION_FB_FAIL;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
            return 
    S_FALSE;
        }

        if ( 
    CheckCoolTimepHold->sBasicOp.sNativeID ) ) return E_FAIL;

        if ( 
    pHold->sBasicOp.emItemType!=ITEM_DISJUNCTION )
        {
            
    NetMsgFB.emFB EMINVEN_DISJUNCTION_FB_FAIL;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
            return 
    S_FALSE;
        }

        if ( 
    pInvenItem->sItemCustom.nidDISGUISE==SNATIVEID(false) )
        {
            
    NetMsgFB.emFB EMINVEN_DISJUNCTION_FB_NONEED;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
            return 
    S_FALSE;
        }

        
    SITEMCUSTOM sITEM_NEW;
        
    sITEM_NEW.sNativeID pInvenItem->sItemCustom.nidDISGUISE;
        if ( 
    sITEM_NEW.sNativeID==SNATIVEID(false) )
        {
            
    NetMsgFB.emFB EMINVEN_DISJUNCTION_FB_BADITEM;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
            return 
    E_FAIL;
        }

        
    SITEM *pONE GLItemMan::GetInstance().GetItem sITEM_NEW.sNativeID );
        if ( !
    pONE )
        {
            
    NetMsgFB.emFB EMINVEN_DISJUNCTION_FB_BADITEM;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
            return 
    E_FAIL;
        }

        
    CTime cTIME CTime::GetCurrentTime();

        if ( 
    pInvenItem->sItemCustom.tDISGUISE!=&& pONE->sDrugOp.tTIME_LMT!= )
        {
            
    cTIME CTime(pInvenItem->sItemCustom.tDISGUISE);

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

        
    //    Note : ¾ÆÀÌÅÛ »ý¼º.
        //
        
    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 );

        
    //    Note : hold ¾ÆÀÌÅÛ Àκ¥¿¡ µÇµ¹¸².
        
    WORD wInsertPosXwInsertPosY;
        
    BOOL bOk m_cInventory.FindInsrtable pONE->sBasicOp.wInvenSizeXpONE->sBasicOp.wInvenSizeYwInsertPosXwInsertPosY );
        if ( !
    bOk )
        {
            
    NetMsgFB.emFB EMINVEN_DISJUNCTION_FB_NOINVEN;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
            return 
    E_FAIL;    //    Àκ¥ °ø°£ ºÎÁ·À¸·Î µÇµ¹¸² ½ÇÆÐ.
        
    }

        
    //    µé°íÀÖ´ø ¾ÆÀÌÅÆ Àι꿡 ³ÖÀ½.
        
    m_cInventory.InsertItem sITEM_NEWwInsertPosXwInsertPosY );
        
    SINVENITEM *pINSERT_ITEM m_cInventory.GetItem wInsertPosXwInsertPosY );

        
    //    [Àڽſ¡°Ô] ¸Þ½ÃÁö ¹ß»ý.
        
    GLMSG::SNETPC_INVEN_INSERT NetMsg_Inven;
        
    NetMsg_Inven.Data = *pINSERT_ITEM;
        
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg_Inven);

        
    //    Note : ¸Á°¢ÀÇ ¼¼Å¹À» ÇÔ.
        //
        
    pInvenItem->sItemCustom.tDISGUISE 0;
        
    pInvenItem->sItemCustom.nidDISGUISE SNATIVEID(false);

        
    GLMSG::SNET_INVEN_ITEM_UPDATE NetItemUpdate;
        
    NetItemUpdate.wPosX pNetMsg->wPosX;
        
    NetItemUpdate.wPosY pNetMsg->wPosY;
        
    NetItemUpdate.sItemCustom pInvenItem->sItemCustom;
        
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetItemUpdate);

        
    //    Note : ºÐ¸®µÈ ÄÚ½ºÅù ·Î±×.
        
    GLITEMLMT::GetInstance().ReqItemRoute pINSERT_ITEM->sItemCustomID_CHAR0ID_CHARm_dwCharIDEMITEM_ROUTE_CHARpINSERT_ITEM->sItemCustom.wTurnNum );

        
    //    Note : ÀϹݠº¹Àå ¾ÆÀÌÅÛÀÌ ¼¼Å¹Çϴ °ÍÀ» ·Î±× ³²±è.
        //
        
    GLITEMLMT::GetInstance().ReqItemConversion pInvenItem->sItemCustomID_CHARm_dwCharID );

        
    //    Note : ¾ÆÀÌÅÛ ¼Ò¸ð.
        //
        
    DoDrugSlotItem SLOT_HOLD );

        
    NetMsgFB.emFB EMINVEN_DISJUNCTION_FB_OK;
        
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);

        return 
    S_OK;
    }


    // *****************************************************
    // Desc: ÄÚ½ºÆ¬ ÀÔÈû
    // *****************************************************
    HRESULT GLChar::MsgReqInvenDisguise NET_MSG_GENERICnmg )
    {
        if ( !
    IsValidBody() )    return E_FAIL;

        
    GLMSG::SNET_INVEN_DISGUISE *pNetMsg = (GLMSG::SNET_INVEN_DISGUISE *) nmg;

        
    GLMSG::SNET_INVEN_DISGUISE_FB NetMsgFB;

        
    WORD wPosX pNetMsg->wPosX;
        
    WORD wPosY pNetMsg->wPosY;

        
    // À¯È¿ÇÑ Àκ¥Å丮 ÀÎÁö °Ë»ç
        
    SINVENITEMpInvenItem m_cInventory.FindPosItem wPosXwPosY );
        if ( !
    pInvenItem )
        {
            
    NetMsgFB.emFB EMREQ_DISGUISE_FB_NOITEM;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
            return 
    E_FAIL;
        }

        
    wPosX pInvenItem->wPosX;
        
    wPosY pInvenItem->wPosY;

        
    // À¯È¿ÇÑ ¾ÆÀÌÅÛÀÎÁö °Ë»ç
        
    SITEMpItem GLItemMan::GetInstance().GetItem pInvenItem->sItemCustom.sNativeID );
        if ( !
    pItem )
        {
            
    NetMsgFB.emFB EMREQ_DISGUISE_FB_NOITEM;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
            return 
    E_FAIL;
        }

        
    // ¼Õ¿¡ µé°í Àִ ¾ÆÀÌÅÛÀÌ À¯È¿ÇÑÁö °Ë»ç
        
    const SITEMCUSTOMsITEM_HOLD GET_SLOT_ITEM(SLOT_HOLD);
        if ( 
    sITEM_HOLD.sNativeID==SNATIVEID(false) )
        {
            
    NetMsgFB.emFB EMREQ_DISGUISE_FB_NOITEM;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
            return 
    S_FALSE;
        }

        
    // ¼Õ¿¡µç ¾ÆÀÌÅÛÀÇ Á¤º¸ °®°í ¿À±â
        
    SITEMpHold GET_SLOT_ITEMDATA SLOT_HOLD );
        if ( !
    pHold )
        {
            
    NetMsgFB.emFB EMREQ_DISGUISE_FB_NOITEM;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
            return 
    S_FALSE;
        }

        
    // ¼Õ¿¡µç ¾ÆÀÌÅÛÀÌ ÄÚ½ºÆ¬ÀÎÁö °Ë»ç
        
    if ( !pHold->sBasicOp.IsDISGUISE() )
        {
            
    NetMsgFB.emFB EMREQ_DISGUISE_FB_NODISGUISE;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
            return 
    S_FALSE;
        }

        
    // Àκ¥Å丮 ¾ÆÀÌÅÛÀÌ ¿¬¸¶°¡´ÉÇÑÁö °Ë»ç
        
    if ( pItem->sBasicOp.IsDISGUISE() )
        {
            
    NetMsgFB.emFB EMREQ_DISGUISE_FB_FAIL;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
            return 
    S_FALSE;
        }

        
    // °°Àº Å¬·¡½º ÀÎÁö °Ë»ç
        
    if ( ( pHold->sBasicOp.dwReqCharClass pItem->sBasicOp.dwReqCharClass ) == NULL )
        {
            
    NetMsgFB.emFB EMREQ_DISGUISE_FB_DEFSUIT;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
            return 
    S_FALSE;
        }

        
    // º¹Àå·ùÀÎÁö °Ë»ç
        
    if ( pHold->sBasicOp.emItemType != ITEM_SUIT )
        {
            
    NetMsgFB.emFB EMREQ_DISGUISE_FB_NOTSUIT;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
            return 
    S_FALSE;
        }

        if ( 
    pItem->sBasicOp.emItemType != ITEM_SUIT )
        {
            
    NetMsgFB.emFB EMREQ_DISGUISE_FB_NOTSUIT;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
            return 
    S_FALSE;
        }

        
    // °°Àº Á¾·ùÀÇ º¹ÀåÀÎÁö °Ë»ç
        
    if ( pHold->sSuitOp.emSuit != pItem->sSuitOp.emSuit )
        {
            
    NetMsgFB.emFB EMREQ_DISGUISE_FB_DEFSUIT;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
            return 
    S_FALSE;
        }

        
    // Àκ¥Å丮ÀÇ º¹ÀåÀÌ ÄÚ½ºÆ¬ÀÌ ÀÔÇôÁ® ÀÖ´ÂÁö °Ë»ç
        
    if ( pInvenItem->sItemCustom.nidDISGUISE!=SNATIVEID(false) )
        {
            
    NetMsgFB.emFB EMREQ_DISGUISE_FB_ALREADY;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
            return 
    S_FALSE;
        }

        
    //    Note : ½ÃÇÑ ÄÚ½ºÅùÀÏ °æ¿ì.
        //
        
    if ( pHold->sDrugOp.tTIME_LMT != )
        {
            
    __time64_t &tTIME pInvenItem->sItemCustom.tDISGUISE;

            
    CTime tCurTime sITEM_HOLD.tBORNTIME;
            
    CTime tSeedTime(tTIME);
            
    CTimeSpan tLMT (pHold->sDrugOp.tTIME_LMT);
            
    tLMT += CTimeSpan(0,0,05,0);

            
    //    Note : ½Ã°£ ÃæÀü.
            
    tSeedTime tCurTime tLMT;

            
    tTIME tSeedTime.GetTime();
        }

        
    //    Note : ÄÚ½ºÅù ½ºÅ² ÁöÁ¤.
        //
        
    pInvenItem->sItemCustom.nidDISGUISE pHold->sBasicOp.sNativeID;

        
    GLMSG::SNET_INVEN_ITEM_UPDATE NetItemUpdate;
        
    NetItemUpdate.wPosX pNetMsg->wPosX;
        
    NetItemUpdate.wPosY pNetMsg->wPosY;
        
    NetItemUpdate.sItemCustom pInvenItem->sItemCustom;
        
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetItemUpdate);

        
    //    Note : ÀϹݠº¹Àå ¾ÆÀÌÅÛÀÌ ÄÚ½ºÅù ½ºÅ²À¸·Î º¯È¯µÇ´Â °ª ·Î±× ³²±è.
        //
        
    GLITEMLMT::GetInstance().ReqItemConversion pInvenItem->sItemCustomID_CHARm_dwCharID );

        
    //    Note :¾ÆÀÌÅÛÀÇ ¼ÒÀ¯ ÀÌÀü °æ·Î ±â·Ï.
        //
        
    GLITEMLMT::GetInstance().ReqItemRoute GET_HOLD_ITEM(), ID_CHARm_dwCharIDID_CHAR0EMITEM_ROUTE_DELETEGET_HOLD_ITEM().wTurnNum );

        
    //    Note : ¼Õ¿¡µç ¾ÆÀÌÅÛ »èÁ¦.
        //
        
    RELEASE_SLOT_ITEM SLOT_HOLD );

        
    //    [Àڽſ¡°Ô] SLOT¿¡ ÀÖ¾ú´ø ¾ÆÀÌÅÆ Á¦°Å.
        
    GLMSG::SNETPC_PUTON_RELEASE NetMsg_PutOn_Release(SLOT_HOLD);
        
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg_PutOn_Release);

        
    //    Note : ÄÚ½ºÅù ½ºÅ²À¸·Î º¯È¯ ¼º°ø ¾Ë¸².
        //
        
    NetMsgFB.emFB EMREQ_DISGUISE_FB_OK;
        
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);

        return 
    S_OK;
    }

    HRESULT GLChar::MsgReqInvenCleanser NET_MSG_GENERICnmg )
    {
        if ( !
    IsValidBody() )    return E_FAIL;

        
    GLMSG::SNET_INVEN_CLEANSER *pNetMsg = (GLMSG::SNET_INVEN_CLEANSER *) nmg;

        
    GLMSG::SNET_INVEN_CLEANSER_FB NetMsgFB;

        
    WORD wPosX pNetMsg->wPosX;
        
    WORD wPosY pNetMsg->wPosY;

        
    SINVENITEMpInvenItem m_cInventory.FindPosItem wPosXwPosY );
        if ( !
    pInvenItem )
        {
            
    NetMsgFB.emFB EMREQ_CLEANSER_FB_NOITEM;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
            return 
    E_FAIL;
        }    

        
    wPosX pInvenItem->wPosX;
        
    wPosY pInvenItem->wPosY;

        
    SITEMpItem GLItemMan::GetInstance().GetItem pInvenItem->sItemCustom.sNativeID );
        if ( !
    pItem )
        {
            
    NetMsgFB.emFB EMREQ_CLEANSER_FB_NOITEM;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
            return 
    E_FAIL;
        }

        
    SITEMpHold GET_SLOT_ITEMDATA SLOT_HOLD );
        if ( !
    pHold )
        {
            
    NetMsgFB.emFB EMREQ_CLEANSER_FB_NOITEM;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
            return 
    S_FALSE;
        }

        if ( 
    CheckCoolTimepHold->sBasicOp.sNativeID ) ) return E_FAIL;

        if ( 
    pInvenItem->sItemCustom.nidDISGUISE==SNATIVEID(false) )
        {
            
    NetMsgFB.emFB EMREQ_CLEANSER_FB_NONEED;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
            return 
    S_FALSE;
        }

        if ( 
    pHold->sBasicOp.emItemType!=ITEM_CLEANSER )
        {
            
    NetMsgFB.emFB EMREQ_CLEANSER_FB_NONEED;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
            return 
    S_FALSE;    
        }

        
    //    Note : ¸Á°¢ÀÇ ¼¼Å¹À» ÇÔ.
        //
        
    pInvenItem->sItemCustom.tDISGUISE 0;
        
    pInvenItem->sItemCustom.nidDISGUISE SNATIVEID(false);

        
    GLMSG::SNET_INVEN_ITEM_UPDATE NetItemUpdate;
        
    NetItemUpdate.wPosX pNetMsg->wPosX;
        
    NetItemUpdate.wPosY pNetMsg->wPosY;
        
    NetItemUpdate.sItemCustom pInvenItem->sItemCustom;
        
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetItemUpdate);

        
    //    Note : ÀϹݠº¹Àå ¾ÆÀÌÅÛÀÌ ¼¼Å¹Çϴ °ÍÀ» ·Î±× ³²±è.
        //
        
    GLITEMLMT::GetInstance().ReqItemConversion pInvenItem->sItemCustomID_CHARm_dwCharID );

        
    //    Note : ¾ÆÀÌÅÛ ¼Ò¸ð.
        //
        
    DoDrugSlotItem SLOT_HOLD );

        
    //    Note : ÄÚ½ºÅù ½ºÅ² ¸®¼Â º¯È¯ ¼º°ø ¾Ë¸².
        //
        
    NetMsgFB.emFB EMREQ_CLEANSER_FB_OK;
        
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);

        return 
    S_OK;
    }

    HRESULT GLChar::MsgReqMoneyToField NET_MSG_GENERICnmg )
    {
        
    GLMSG::SNETPC_REQ_MONEY_TO_FIELD *pNetMsg = (GLMSG::SNETPC_REQ_MONEY_TO_FIELD *)nmg;

        if ( !
    GLCONST_CHAR::bMONEY_DROP2FIELD )    return S_FALSE;
        if ( 
    pNetMsg->lnMoney )                return S_FALSE;
        if ( 
    m_lnMoney pNetMsg->lnMoney )        return S_FALSE;

        
    D3DXVECTOR3 vCollisionPos;
        
    BOOL bCollision m_pLandMan->IsCollisionNavi
        
    (
            
    pNetMsg->vPos D3DXVECTOR3(0,+5,0),
            
    pNetMsg->vPos D3DXVECTOR3(0,-5,0),
            
    vCollisionPos
        
    );

        if ( !
    bCollision )            return S_FALSE;

        
    //    Note : °¡Áö°í Àִ µ·ÀÇ ¾×¼ö¸¦ Á¶Àý.
        
    CheckMoneyUpdatem_lnMoneypNetMsg->lnMoneyFALSE"Drop Money." );
        
    m_bMoneyUpdate TRUE;

        
    m_lnMoney -= pNetMsg->lnMoney;

        
    //    Note : ±Ý¾× ·Î±×.
        //
        
    if ( pNetMsg->lnMoney EMMONEY_LOG )
        {
            
    GLITEMLMT::GetInstance().ReqMoneyExc ID_CHARm_dwCharIDID_CHAR0pNetMsg->lnMoneyEMITEM_ROUTE_GROUND );
            
    GLITEMLMT::GetInstance().ReqMoneyExc ID_CHARm_dwCharIDID_CHAR0m_lnMoneyEMITEM_ROUTE_CHAR );
        }

    #if defined(_RELEASED) || defined(TW_PARAM) || defined(TH_PARAM) || defined(HK_PARAM) // ***Tracing Log print
        
    if ( m_bTracingUser )
        {
            
    NET_LOG_UPDATE_TRACINGCHAR TracingMsg;
            
    TracingMsg.nUserNum  GetUserID();
            
    StringCchCopyTracingMsg.szAccountUSR_ID_LENGTH+1m_szUID );

            
    CString strTemp;
            
    strTemp.Format"DropMoney!!, [%s][%s], Drop Amount:[%I64d], Have Money:[%I64d]",
                
    m_szUIDm_szName,  pNetMsg->lnMoneym_lnMoney );

            
    StringCchCopyTracingMsg.szLogMsgTRACING_LOG_SIZEstrTemp.GetString() );

            
    m_pGLGaeaServer->SENDTOAGENTm_dwClientID, &TracingMsg );
        }
    #endif

        //    Note : ¹Ù´Ú¿¡ ¶³¾îÆ®¸°´Ù.
        
    m_pLandMan->DropMoney vCollisionPospNetMsg->lnMoneyFALSE );

        
    //    Note : Å¬¶óÀÌ¾ðÆ®¿¡ µ· ¾×¼ö º¯È­¸¦ ¾Ë·ÁÁÜ.
        
    GLMSG::SNETPC_UPDATE_MONEY NetMsg;
        
    NetMsg.lnMoney m_lnMoney;
        
    //add money 2
        
    NetMsg.lnVoteP m_lnVoteP;
        
    //add money 3
        
    NetMsg.lnPremP m_lnPremP;
        
    //add contributionpoints by CNDev
        
    NetMsg.lnContribP m_lnContribP;
        
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg);
        
        return 
    S_OK;
    }

    // *****************************************************
    // Desc: ¾ÆÀÌÅÛ ÀÎþƮ ¿äû Ã³¸®
    // *****************************************************
    HRESULT GLChar::MsgReqInvenGrinding NET_MSG_GENERICnmg )
    {
        
    GLMSG::SNET_INVEN_GRINDING *pNetMsg = (GLMSG::SNET_INVEN_GRINDING *)nmg;

        if ( !
    VALID_HOLD_ITEM() )                            return S_FALSE;

        
    SITEMCUSTOMsHOLDITEM m_PutOnItems[SLOT_HOLD];
        
    SITEMpHold GLItemMan::GetInstance().GetItem sHOLDITEM.sNativeID );
        if ( !
    pHold )                                        return E_FAIL;

        if ( 
    pHold->sBasicOp.emItemType != ITEM_GRINDING )            return S_FALSE;

        if ( 
    CheckCoolTimepHold->sBasicOp.sNativeID ) ) return E_FAIL;

        
    SINVENITEMpInvenItem m_cInventory.GetItem pNetMsg->wPosXpNetMsg->wPosY );
        if ( !
    pInvenItem )                                    return E_FAIL;

        
    SITEMpItem GLItemMan::GetInstance().GetItem pInvenItem->sItemCustom.sNativeID );
        if ( !
    pItem )                                        return S_FALSE;

        if ( 
    pItem->sSuitOp.gdDamage == GLPADATA(0,0) )
        {
            if ( 
    pHold->sGrindingOp.emCLASS != EMGRINDING_CLASS_CLOTH )    return S_FALSE;
        }
        else
        {
            if ( 
    pHold->sGrindingOp.emCLASS != EMGRINDING_CLASS_ARM )    return S_FALSE;
        }

        
    BOOL bGrinding pItem->sBasicOp.emItemType==ITEM_SUIT && pItem->sSuitOp.wReModelNum>0;
        if ( !
    bGrinding )                                    return E_FAIL;

        if ( 
    pHold->sGrindingOp.emTYPE == EMGRINDING_DAMAGE || pHold->sGrindingOp.emTYPE == EMGRINDING_DEFENSE )
        {
            if ( 
    pInvenItem->sItemCustom.GETGRADE(pHold->sGrindingOp.emTYPE)>=GLCONST_CHAR::wGRADE_MAX )
            {
                return 
    S_FALSE;
            }
        }
        else
        {
            if ( 
    pInvenItem->sItemCustom.GETGRADE(pHold->sGrindingOp.emTYPE)>=GLCONST_CHAR::wGRADE_MAX_REGI )
            {
                return 
    S_FALSE;
            }
        }
        
        
    //    Note : ¿¬¸¶Á¦ µî±Þ, ³·Àº ¿¬¸¶Á¦·Î ³ôÀº ¿¬¸¶ ºÒ°¡´É
        //
        
        
    BYTE cGrade 0;

        
    cGrade pInvenItem->sItemCustom.GETGRADE(pHold->sGrindingOp.emTYPE);

        if ( 
    cGrade >= GRADE_HIGH && pHold->sGrindingOp.emGRINDER_TYPE != EMGRINDER_TOP )
        {
            return 
    E_FAIL;
        }
        else if ( 
    cGrade >=GRADE_NORMAL && pHold->sGrindingOp.emGRINDER_TYPE EMGRINDER_HIGH )
        {
            return 
    E_FAIL;
        }

        
    // ÃÖ»óÀ§ µî±Þ±îÁö ÀÎæƮ ÇÒ¼ö Àִ ¾ÆÀÌÅÛÀÎÁö Á¡°Ë
        
    if ( cGrade >= GRADE_HIGH && pItem->sGrindingOp.emGRINDER_TYPE != EMGRINDER_TOP )
        {
            return 
    S_FALSE;
        }


        
    //    Note : ¿¬¸¶Á¦ ¼ö·® È®ÀÎ
        
    WORD wGradeNum 1;    
        
        if ( 
    cGrade >= GRADE_HIGH )
        {
            
    wGradeNum GLCONST_CHAR::wUSE_GRADE_NUM[cGrade-GRADE_HIGH];

            if ( 
    wGradeNum sHOLDITEM.wTurnNum )
            {
                return 
    E_FAIL;
            }

        }

        
    //    Note : °í±Þ ¿¬¸¶Á¦ÀÏ °æ¿ì GRADE_NORMAL µî±Þ ¹Ì¸¸ ¿¬¸¶ ºÒ°¡´É.
        //
        //if ( pInvenItem->sItemCustom.GETGRADE(pHold->sGrindingOp.emTYPE)<GRADE_NORMAL && pHold->sGrindingOp.bHIGH )
        //{
        //    return E_FAIL;
        //}

        //    Note : ¿¬¸¶ ¼öÇà.
        //
        
    bool bRESET(false), bTERMINATE(false);
        
    EMANTIDISAPPEAR emANTIDISAPPEAR(EMANTIDISAPPEAR_OFF);

        
    // ¼Ò¹æÁÖ°¡ ÀÖ´Ù¸é bANTIDISAPPEAR¸¦ 1·Î ¼ÂÆÃÇØ¼­ ¾ÆÀÌÅÛÀÌ ¼Ò¸êµÇ´Â°ÍÀ» ¹æÁöÇÑ´Ù.
        
    SITEMpITEM GET_SLOT_ITEMDATA(SLOT_NECK);
        if ( 
    pITEM && pITEM->sBasicOp.emItemType == ITEM_ANTI_DISAPPEAR )
        {
            if ( !
    IsCoolTimepITEM->sBasicOp.sNativeID ) )    emANTIDISAPPEAR EMANTIDISAPPEAR_ON;
        }

        
    bool bNoFail pHold->sBasicOp.IsNoFail();//add nofailups

        
    BOOL bSucceeded DOGRINDING pInvenItem->sItemCustompHoldbRESETbTERMINATEbNoFailemANTIDISAPPEAR ); //add nofailups

        //    Note : ¼Ò¸ðµÈ ¿¬¸¶Á¦ Ã³¸®.
        //
        
    DoDrugSlotItem(SLOT_HOLDwGradeNum);

        
    //    Note :    ¼Ò¸ðµÈ ¼Ò¹æÁ֠ó¸®.
        //            bANTIDISAPPEAR°¡ false¸é ¼Ò¹æÁÖ°¡ »ç¿ëµÇ¾ú´Ù.
        
    if( emANTIDISAPPEAR == EMANTIDISAPPEAR_USE )
        {
            
    DoDrugSlotItem(SLOT_NECK);
        }

        
    //    Note : ·Î±× ±â·Ï.
        //
        
    GLITEMLMT::GetInstance().ReqItemConversion pInvenItem->sItemCustomID_CHARm_dwCharID );

        
    //    Note : ¿¬¸¶ ¼º°ø ¿©ºÎ ¹Ýȯ.
        //
        
    GLMSG::SNET_INVEN_GRINDING_FB NetMsgFB;
        
    NetMsgFB.bRESET bRESET;
        
    NetMsgFB.bTERMINATE bTERMINATE;
        
    NetMsgFB.emANTIDISAPPEAR emANTIDISAPPEAR;
        
    NetMsgFB.emGrindFB bSucceeded EMGRINDING_SUCCEED EMGRINDING_FAIL;
        
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);

        
    //    Note : ¾ÆÀÌÅÛÀÇ ¼Ó¼º°ª Å¬¶óÀÌ¾ðÆ®¿¡ ¾Ë¸².
        //
        
    if ( !bTERMINATE )
        {
            
    GLMSG::SNET_INVEN_ITEM_UPDATE NetItemUpdate;
            
    NetItemUpdate.wPosX pNetMsg->wPosX;
            
    NetItemUpdate.wPosY pNetMsg->wPosY;
            
    NetItemUpdate.sItemCustom pInvenItem->sItemCustom;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetItemUpdate);

            
    //dmk14 | 9-22-16 | upgrade announce
            
    BYTE cUpgrade 0;
            const 
    EMGRINDING_TYPE emGRINDING pHold->sGrindingOp.emTYPE;    
            switch( 
    emGRINDING )
            {
                case 
    EMGRINDING_DAMAGE:            cUpgrade pInvenItem->sItemCustom.cDAMAGE;                break;
                case 
    EMGRINDING_DEFENSE:        cUpgrade pInvenItem->sItemCustom.cDEFENSE;            break;
            }
            
            if( 
    bSucceeded && cUpgrade >= )
            {
                
    //CInnerInterface::GetInstance().PrintConsoleText ( "%s '%s' successfully upgraded into (+%d) %s.", m_szName, pItem->GetName(), cUpgrade, COMMENT::GRINDING_TYPE[ emGRINDING ].c_str());

                
    CString strTEXT;
                
    strTEXT.Format "%s '%s' successfully upgraded into (+%d) %s."m_szNamepItem->GetName(), cUpgradeCOMMENT::GRINDING_TYPEemGRINDING ].c_str() );

                
    GLMSG::SNET_SERVER_GENERALCHAT NetMsgUps;
                
    NetMsgUps.SETTEXT strTEXT.GetString() );
                
    //NetMsgUpsbAnnounce = true;
                
    GLGaeaServer::GetInstance().SENDTOALLCLIENT(&NetMsgUps);
            }
        }
        else
        {
            
    // ¸¸¾à ÄÚ½ºÆ¬ÀÌ ¹ß¶óÁ® ÀÖÀ¸¸é ÄÚ½ºÆ¬À» ºÐ¸®ÇÏ°í »èÁ¦ÇÑ´Ù.
            
    if ( pInvenItem->sItemCustom.nidDISGUISE!=SNATIVEID(false) )
            {
                
    GLITEMLMT glItemmt GLITEMLMT::GetInstance();            
                
    GLItemMan glItemMan GLItemMan::GetInstance();

                
    SITEM *pONE glItemMan.GetItem pInvenItem->sItemCustom.nidDISGUISE );
                if ( !
    pONE )        return E_FAIL;

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

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

                
    //    Note : ¾ÆÀÌÅÛ »ý¼º.
                //
                
    sITEM_NEW.tBORNTIME cTIME.GetTime();
                
    sITEM_NEW.wTurnNum 1;
                
    sITEM_NEW.cGenType EMGEN_BILLING;
                
    sITEM_NEW.cChnID = (BYTE)m_pGLGaeaServer->GetServerChannel();
                
    sITEM_NEW.cFieldID = (BYTE)m_pGLGaeaServer->GetFieldSvrID();
                
    sITEM_NEW.lnGenNum glItemmt.RegItemGen sITEM_NEW.sNativeID, (EMITEMGEN)sITEM_NEW.cGenType );

                
    //    Note : hold ¾ÆÀÌÅÛ Àκ¥¿¡ µÇµ¹¸².
                
    WORD wInsertPosXwInsertPosY;
                
    BOOL bOk m_cInventory.FindInsrtable pONE->sBasicOp.wInvenSizeXpONE->sBasicOp.wInvenSizeYwInsertPosXwInsertPosY );
                if ( !
    bOk )
                {
                    
    // »ý¼ºµÈ ÄÚ½ºÅùÀº ¹Ù´Ú¿¡¼­ ´Ù½Ã ¶³±º´Ù.
                    
    CItemDrop cDropItem;
                    
    cDropItem.sItemCustom sITEM_NEW;
                    
    m_pLandMan->DropItem m_vPos, &(cDropItem.sItemCustom), EMGROUP_ONEm_dwGaeaID );

                    
    //    Note : ºÐ¸®µÈ ÄÚ½ºÅù ·Î±×.
                    
    glItemmt.ReqItemRoute sITEM_NEWID_CHARm_dwCharIDID_CHAR0EMITEM_ROUTE_GROUNDsITEM_NEW.wTurnNum );
                }else{
                    
    //    µé°íÀÖ´ø ¾ÆÀÌÅÆ Àι꿡 ³ÖÀ½.
                    
    m_cInventory.InsertItem sITEM_NEWwInsertPosXwInsertPosY );
                    
    SINVENITEM *pINSERT_ITEM m_cInventory.GetItem wInsertPosXwInsertPosY );

                    
    //    [Àڽſ¡°Ô] ¸Þ½ÃÁö ¹ß»ý.
                    
    GLMSG::SNETPC_INVEN_INSERT NetMsg_Inven;
                    
    NetMsg_Inven.Data = *pINSERT_ITEM;
                    
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg_Inven);
                }            
            }

            
    //    Note :¾ÆÀÌÅÛÀÇ ¼ÒÀ¯ ÀÌÀü °æ·Î ±â·Ï.
            //
            
    GLITEMLMT::GetInstance().ReqItemRoute pInvenItem->sItemCustomID_CHARm_dwCharIDID_CHAR0EMITEM_ROUTE_DELETEpInvenItem->sItemCustom.wTurnNum );

            
    //    [Àڽſ¡°Ô] Àι꿡 ¾ÆÀÌÅÆ Á¦°Å.
            
    GLMSG::SNETPC_INVEN_DELETE NetMsg_Inven_Delete;
            
    NetMsg_Inven_Delete.wPosX pNetMsg->wPosX;
            
    NetMsg_Inven_Delete.wPosY pNetMsg->wPosY;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg_Inven_Delete);

            
    //    ¾ÆÀÌÅÆ Á¦°Å.
            
    m_cInventory.DeleteItem pNetMsg->wPosXpNetMsg->wPosY );
        }

        return 
    S_OK;
    }

    HRESULT GLChar::MsgReqInvenResetSkSt NET_MSG_GENERICnmg )
    {
        
    GLMSG::SNET_INVEN_RESET_SKST *pNetMsg = (GLMSG::SNET_INVEN_RESET_SKST *)nmg;

        
    GLMSG::SNET_INVEN_RESET_SKST_FB    MsgFB;

        
    SINVENITEMpINVENITEM m_cInventory.GetItem pNetMsg->wPosXpNetMsg->wPosY );
        if ( !
    pINVENITEM )
        {
            
    MsgFB.emFB EMREQ_RESET_SKST_FB_NOITEM;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
            return 
    E_FAIL;
        }

        if ( 
    CheckCoolTimepINVENITEM->sItemCustom.sNativeID ) )    return E_FAIL;



        
    SITEM *pITEM GLItemMan::GetInstance().GetItem pINVENITEM->sItemCustom.sNativeID );
        if ( 
    pITEM->sBasicOp.emItemType!=ITEM_SKP_STAT_RESET )
        {
            
    MsgFB.emFB EMREQ_RESET_SKST_FB_NOITEM;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
            return 
    E_FAIL;
        }

        
    // ·¹º§ Á¶°Ç È®ÀÎ
        
    if ( !SIMPLE_CHECK_ITEMpITEM->sBasicOp.sNativeID ) )
        {        
            
    MsgFB.emFB EMREQ_RESET_SKST_FB_FAIL;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);        
            return 
    E_FAIL;
        }

        
    enum
        
    {
            
    EMGRADE                31,
            
    EMMARBLE_MID        104,

            
    EMGRADE_MIN            4,
        };

        
    WORD wNUM(0);
        
    WORD wGRADE[EMGRADE];
        
    memset(wGRADE,0,sizeof(WORD)*EMGRADE);

        
    SKILL_MAP_ITER pos m_ExpSkills.begin();
        
    SKILL_MAP_ITER end m_ExpSkills.end();
        for ( ; 
    pos!=end; ++pos )
        {
            
    SNATIVEID sNID ( (*pos).first );

            
    PGLSKILL pSKILL GLSkillMan::GetInstance().GetData sNID );
            if ( !
    pSKILL )                                    continue;
            if ( 
    EMGRADE_MIN pSKILL->m_sBASIC.dwGRADE )    continue;

            
    wGRADE[pSKILL->m_sBASIC.dwGRADE] += 1;
            ++
    wNUM;
        }

        
    BOOL bINSERT(TRUE);
        
    GLInventory cInven;
        
    cInven.Assign m_cInventory );
        for ( 
    int i=EMGRADE_MINi<EMGRADE; ++)
        for ( 
    int j=0j<wGRADE[i]; ++)
        {
            
    SITEM *pITEM_SKILL GLItemMan::GetInstance().GetItem pINVENITEM->sItemCustom.sNativeID );
            if ( !
    pITEM_SKILL )        continue;

            
    SITEMCUSTOM sITEM_NEW;
            
    sITEM_NEW.sNativeID SNATIVEID(EMMARBLE_MID,i);

            
    //    ¾ÆÀÌÅÛÀÇ »ç¿ë È½¼ö Ç¥½Ã. ( ¼Ò¸ðǰÀÏ °æ¿ì x °ª, ÀϹݠ¹°Ç° 1 )
            
    sITEM_NEW.wTurnNum pITEM_SKILL->GETAPPLYNUM();

            
    BOOL bOK cInven.InsertItem sITEM_NEW );
            if ( !
    bOK )
            {
                
    bINSERT FALSE;
                break;
            }
        }

        if ( !
    bINSERT )
        {
            
    MsgFB.wITEM_NUM wNUM;
            
    MsgFB.emFB EMREQ_RESET_SKST_FB_NOINVEN;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
            return 
    E_FAIL;
        }

        for ( 
    i=EMGRADE_MINi<EMGRADE; ++)
        for ( 
    int j=0j<wGRADE[i]; ++)
        {
            
    SITEM *pITEM_SKILL GLItemMan::GetInstance().GetItem pINVENITEM->sItemCustom.sNativeID );
            if ( !
    pITEM_SKILL )        continue;

            
    SITEMCUSTOM sITEM_NEW;
            
    CTime cTIME CTime::GetCurrentTime();

            
    //    ¾ÆÀÌÅÛ ¹ß»ý.
            
    sITEM_NEW.sNativeID SNATIVEID(EMMARBLE_MID,i);
            
    sITEM_NEW.tBORNTIME cTIME.GetTime();

            
    //    ¾ÆÀÌÅÛÀÇ »ç¿ë È½¼ö Ç¥½Ã. ( ¼Ò¸ðǰÀÏ °æ¿ì x °ª, ÀϹݠ¹°Ç° 1 )
            
    sITEM_NEW.wTurnNum pITEM_SKILL->GETAPPLYNUM();

            
    //    ¹ß»ýµÈ Á¤º¸ µî·Ï.
            
    sITEM_NEW.cGenType EMGEN_INIT;
            
    sITEM_NEW.cChnID = (BYTE)GLGaeaServer::GetInstance().GetServerChannel();
            
    sITEM_NEW.cFieldID = (BYTE)GLGaeaServer::GetInstance().GetFieldSvrID();
            
    sITEM_NEW.lnGenNum GLITEMLMT::GetInstance().RegItemGen sITEM_NEW.sNativeIDEMGEN_INIT );

            
    BOOL bOK;
            
    WORD wPosX(0), wPosY(0);
            
    bOK m_cInventory.FindInsrtable pITEM_SKILL->sBasicOp.wInvenSizeXpITEM_SKILL->sBasicOp.wInvenSizeYwPosXwPosY );
            if ( !
    bOK )        continue;

            
    bOK m_cInventory.InsertItem sITEM_NEWwPosXwPosY );
            if ( !
    bOK )        continue;

            
    SINVENITEM *pInvenItem m_cInventory.GetItem wPosXwPosY );
            if (!
    pInvenItem) continue;

            
    //    ¾ÆÀÌÅ۠ȹµæ ·Î±× ³²±è.
            
    GLITEMLMT::GetInstance().ReqItemRoute sITEM_NEWID_CHAR0ID_CHARm_dwCharIDEMITEM_ROUTE_CHARsITEM_NEW.wTurnNum );

            
    //    [Àڽſ¡°Ô] ¸Þ½ÃÁö ¹ß»ý.
            
    GLMSG::SNETPC_INVEN_INSERT NetMsg_Inven;
            
    NetMsg_Inven.Data = *pInvenItem;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg_Inven);

        }

        
    //    Note : ½ºÅ³, ½ºÅÝ ¸®¼Â.
        //
        
    RESET_STATS_SKILL pITEM->sDrugOp.wCureVolume );

        
    //    [Àڽſ¡°Ô] Àι꠾ÆÀÌÅÆ ¼Ò¸ð½ÃÅ´.
        
    DoDrugInvenItem pNetMsg->wPosXpNetMsg->wPosY );

        
    //    Note : ¸®¼Â ¸Þ½ÃÁö º¸³¿.
        //
        
    MsgFB.emFB EMREQ_RESET_SKST_FB_OK;
        
    MsgFB.wITEM_NUM wNUM;
        
    MsgFB.wSTATS_POINT pITEM->sDrugOp.wCureVolume;
        
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);

        return 
    S_OK;
    }


    HRESULT GLChar::MsgReqCharCard NET_MSG_GENERICnmg )
    {
        
    GLMSG::SNET_INVEN_CHARCARD *pNetMsg = (GLMSG::SNET_INVEN_CHARCARD *)nmg;

        
    GLMSG::SNET_INVEN_CHARCARD_FB    MsgFB;

        
    SINVENITEMpINVENITEM m_cInventory.GetItem pNetMsg->wPosXpNetMsg->wPosY );
        if ( !
    pINVENITEM )
        {
            
    MsgFB.emFB EMREQ_CHARCARD_FB_NOITEM;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
            return 
    E_FAIL;
        }

        if ( 
    CheckCoolTimepINVENITEM->sItemCustom.sNativeID ) )    return E_FAIL;

        
    SITEM *pITEM GLItemMan::GetInstance().GetItem pINVENITEM->sItemCustom.sNativeID );
        if ( 
    pITEM->sBasicOp.emItemType!=ITEM_CHARACTER_CARD )
        {
            
    MsgFB.emFB EMREQ_CHARCARD_FB_NOITEM;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
            return 
    E_FAIL;
        }

        
    //    Note : Äɸ¯ÅÍ »ý¼º ½½·Ô Áõ°¡.
        //
        
    if ( GLGaeaServer::GetInstance().GetDBMan() )
        {
            
    CItemChaCreateNumIncrease *pDbAction = new CItemChaCreateNumIncrease m_dwUserID );
            
    GLGaeaServer::GetInstance().GetDBMan()->AddJob pDbAction );
        }

        
    //    [Àڽſ¡°Ô] Àι꠾ÆÀÌÅÆ ¼Ò¸ð½ÃÅ´.
        
    DoDrugInvenItem pNetMsg->wPosXpNetMsg->wPosY );

        
    //    Note : Ã³¸® ¼º°ø ¾Ë¸².
        
    MsgFB.emFB EMREQ_CHARCARD_FB_OK;
        
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);

        return 
    S_OK;
    }

    HRESULT GLChar::MsgReqStorageCard NET_MSG_GENERICnmg )
    {
        
    GLMSG::SNET_INVEN_STORAGECARD *pNetMsg = (GLMSG::SNET_INVEN_STORAGECARD *)nmg;

        
    GLMSG::SNET_INVEN_STORAGECARD_FB    MsgFB;

        
    SINVENITEMpINVENITEM m_cInventory.GetItem pNetMsg->wPosXpNetMsg->wPosY );
        if ( !
    pINVENITEM )
        {
            
    MsgFB.emFB EMREQ_STORAGECARD_FB_NOITEM;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
            return 
    E_FAIL;
        }

        if ( 
    CheckCoolTimepINVENITEM->sItemCustom.sNativeID ) )    return E_FAIL;

        
    SITEM *pITEM GLItemMan::GetInstance().GetItem pINVENITEM->sItemCustom.sNativeID );
        if ( 
    pITEM->sBasicOp.emItemType!=ITEM_STORAGE_CARD )
        {
            
    MsgFB.emFB EMREQ_STORAGECARD_FB_NOITEM;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
            return 
    E_FAIL;
        }

        if ( 
    pNetMsg->wSTORAGE EMSTORAGE_CHANNEL_SPAN || pNetMsg->wSTORAGE>=(EMSTORAGE_CHANNEL_SPAN+EMSTORAGE_CHANNEL_SPAN_SIZE) )
        {
            
    MsgFB.emFB EMREQ_STORAGECARD_FB_INVNUM;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
            return 
    E_FAIL;
        }

        
    //    Note : Ã¢°í Á¦ÇÑ ½Ã°£ º¯°æ.
        //
        
    int nINDEX pNetMsg->wSTORAGE-EMSTORAGE_CHANNEL_SPAN;
        
    __time64_t &tTIME m_tSTORAGE[nINDEX];

        
    CTime tCurTime CTime::GetCurrentTime();
        
    CTime tSeedTime(tTIME);
        
    CTimeSpan tLMT (pITEM->sDrugOp.tTIME_LMT);
        
    CTimeSpan tADD(0,1,30,0);

        
    //    Note : ¾ÆÁ÷ ÃʱâÈ­ µÇÁö ¾Ê¾Ò°Å³ª, ÃæÀü½Ã°£ ÃʰúµÇ¾úÀ» °æ¿ì.
        
    if ( tTIME == || tSeedTime tCurTime )
        {
            
    tSeedTime tCurTime tLMT tADD;
        }
        
    //    Note : ÃæÀü½Ã°£¿¡ ¾ÆÁ÷ ¿©À¯°¡ ÀÖÀ»¶§.
        
    else
        {
            
    tSeedTime tSeedTime tLMT tADD;
        }

        
    //    Note : »ç¿ë½Ã°£ ÃæÀüµÊ, »ç¿ë °¡´ÉÀ¸·Î º¯°æ.
        
    tTIME tSeedTime.GetTime();    //    m_tSTORAGE[nINDEX] = time;
        
    m_bSTORAGE[nINDEX] = true;

        
    //    Note : DB¿¡ ½ºÅ丮Áö ÃæÀü½Ã°£ ÀúÀå.
        //
        
    if ( GLGaeaServer::GetInstance().GetDBMan() )
        {
            
    CSetChaStorageDate *pDbAction = new CSetChaStorageDate m_dwUserIDnINDEX+EMSTORAGE_CHANNEL_SPANtTIME );
            
    GLGaeaServer::GetInstance().GetDBMan()->AddJob pDbAction );
        }

        
    //    [Àڽſ¡°Ô] Àι꠾ÆÀÌÅÆ ¼Ò¸ð½ÃÅ´.
        
    DoDrugInvenItem pNetMsg->wPosXpNetMsg->wPosY );

        
    //    Note : Ã³¸® °á°ú ¾Ë¸².
        
    CTimeSpan tDX tSeedTime tCurTime;
        
    MsgFB.emFB EMREQ_STORAGECARD_FB_OK;
        
    MsgFB.tSTORAGE_LIMIT tSeedTime.GetTime();
        
    MsgFB.tSPAN tDX.GetTimeSpan();
        
    MsgFB.wSTORAGE pNetMsg->wSTORAGE;
        
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);

        return 
    S_OK;
    }

    HRESULT GLChar::MsgReqInvenLine NET_MSG_GENERICnmg )
    {
        
    GLMSG::SNET_INVEN_INVENLINE *pNetMsg = (GLMSG::SNET_INVEN_INVENLINE *)nmg;

        
    GLMSG::SNET_INVEN_INVENLINE_FB MsgFB;

        
    SINVENITEMpINVENITEM m_cInventory.GetItem pNetMsg->wPosXpNetMsg->wPosY );
        if ( !
    pINVENITEM )
        {
            
    MsgFB.emFB EMREQ_INVENLINE_FB_NOITEM;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
            return 
    E_FAIL;
        }

        if ( 
    CheckCoolTimepINVENITEM->sItemCustom.sNativeID ) )    return E_FAIL;

        
    SITEM *pITEM GLItemMan::GetInstance().GetItem pINVENITEM->sItemCustom.sNativeID );
        if ( 
    pITEM->sBasicOp.emItemType!=ITEM_INVEN_CARD )
        {
            
    MsgFB.emFB EMREQ_INVENLINE_FB_NOITEM;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
            return 
    E_FAIL;
        }

        if ( 
    m_wINVENLINE >= (EM_INVENSIZE_Y EM_INVEN_DEF_SIZE_Y EM_INVEN_PREMIUM_SIZE) )
        {
            
    MsgFB.emFB EMREQ_INVENLINE_FB_MAXLINE;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
            return 
    E_FAIL;
        }

        
    //    Note : Àκ¥ ¶óÀΠÁõ°¡.
        //
        
    m_wINVENLINE += 1;

        
    //    Note : ÇöÁ¦ È°¼ºÈ­µÈ Àκ¥ ¶óÀΠ¼³Á¤.
        //
        
    m_cInventory.SetAddLine GetOnINVENLINE(), true );

        
    //    Note : DB¿¡ ÀúÀå.
        //
        
    if ( GLGaeaServer::GetInstance().GetDBMan() )
        {
            
    CSetChaInvenNum *pDbAction = new CSetChaInvenNum m_dwCharIDm_wINVENLINE );
            
    GLGaeaServer::GetInstance().GetDBMan()->AddJob pDbAction );
        }

        
    //    [Àڽſ¡°Ô] Àι꠾ÆÀÌÅÛ ¼Ò¸ð½ÃÅ´.
        
    DoDrugInvenItem pNetMsg->wPosXpNetMsg->wPosY );

        
    //    Note : Ã³¸® °á°ú ¾Ë¸².
        
    MsgFB.emFB EMREQ_INVENLINE_FB_OK;
        
    MsgFB.wINVENLINE m_wINVENLINE;
        
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);

        return 
    S_OK;
    }

    // *****************************************************
    // Desc: °³Á¶ ±â´É ÀÌ¿ëÄ«µå ¿äû ( Ä«µå¸¸ ¼Ò¸ð½ÃÅ´ )
    // *****************************************************
    HRESULT GLChar::MsgReqInvenRemodelOpen NET_MSG_GENERICnmg )
    {
        
    GLMSG::SNET_INVEN_REMODELOPEN *pNetMsg = (GLMSG::SNET_INVEN_REMODELOPEN *)nmg;

        
    GLMSG::SNET_INVEN_REMODELOPEN_FB MsgFB;

        
    SINVENITEMpINVENITEM m_cInventory.GetItem pNetMsg->wPosXpNetMsg->wPosY );
        if ( !
    pINVENITEM )
        {
            
    MsgFB.emFB EMREQ_REMODELOPEN_FB_NOITEM;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
            return 
    E_FAIL;
        }

        
    SITEM *pITEM GLItemMan::GetInstance().GetItem pINVENITEM->sItemCustom.sNativeID );
        if ( 
    pITEM->sBasicOp.emItemType!=ITEM_REMODEL )
        {
            
    MsgFB.emFB EMREQ_REMODELOPEN_FB_NOITEM;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
            return 
    E_FAIL;
        }

        
    m_ItemRemodelPosX pNetMsg->wPosX;
        
    m_ItemRemodelPosY pNetMsg->wPosY;

        
    MsgFB.emFB EMREQ_REMODELOPEN_FB_OK;
        
    //dmk14 | 12-18-16 | rebuild test fix
        
    m_bUseRebuildCard true;

        
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);

        return 
    S_OK;
    }


    HRESULT GLChar::MsgReqInvenGarbageOpen NET_MSG_GENERICnmg )
    {
        
    GLMSG::SNET_INVEN_GARBAGEOPEN *pNetMsg = (GLMSG::SNET_INVEN_GARBAGEOPEN *)nmg;

        
    GLMSG::SNET_INVEN_GARBAGEOPEN_FB MsgFB;

        
    SINVENITEMpINVENITEM m_cInventory.GetItem pNetMsg->wPosXpNetMsg->wPosY );
        if ( !
    pINVENITEM )
        {
            
    MsgFB.emFB EMREQ_GARBAGEOPEN_FB_NOITEM;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
            return 
    E_FAIL;
        }

        
    SITEM *pITEM GLItemMan::GetInstance().GetItem pINVENITEM->sItemCustom.sNativeID );
        if ( 
    pITEM->sBasicOp.emItemType!=ITEM_GARBAGE_CARD )
        {
            
    MsgFB.emFB EMREQ_GARBAGEOPEN_FB_NOITEM;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
            return 
    E_FAIL;
        }

        
    m_ItemGarbagePosX pNetMsg->wPosX;
        
    m_ItemGarbagePosY pNetMsg->wPosY;

        
    MsgFB.emFB EMREQ_GARBAGEOPEN_FB_OK;

        
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);

        return 
    S_OK;
    }

    // *****************************************************
    // Desc: ±ä±Þ Ã¢°í ÀÌ¿ëÄ«µå ¿äû ( Ä«µå¸¸ ¼Ò¸ð½ÃÅ´ )
    // *****************************************************
    HRESULT GLChar::MsgReqInvenStorageOpen NET_MSG_GENERICnmg )
    {
        
    // Ã¢°í¿¬°áÄ«µå¸¦ »ç¿ëÁßÀ̸é
        
    if ( m_bUsedStorageCard ) return E_FAIL;

        
    GLMSG::SNET_INVEN_STORAGEOPEN *pNetMsg = (GLMSG::SNET_INVEN_STORAGEOPEN *)nmg;

        
    GLMSG::SNET_INVEN_STORAGEOPEN_FB MsgFB;

        
    SINVENITEMpINVENITEM m_cInventory.GetItem pNetMsg->wPosXpNetMsg->wPosY );
        if ( !
    pINVENITEM )
        {
            
    MsgFB.emFB EMREQ_STORAGEOPEN_FB_NOITEM;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
            return 
    E_FAIL;
        }

        if ( 
    CheckCoolTimepINVENITEM->sItemCustom.sNativeID ) )    return E_FAIL;

        
    SITEM *pITEM GLItemMan::GetInstance().GetItem pINVENITEM->sItemCustom.sNativeID );
        if ( 
    pITEM->sBasicOp.emItemType!=ITEM_STORAGE_CONNECT )
        {
            
    MsgFB.emFB EMREQ_STORAGEOPEN_FB_NOITEM;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
            return 
    E_FAIL;
        }

        
    //    [Àڽſ¡°Ô] Àι꠾ÆÀÌÅÛ ¼Ò¸ð½ÃÅ´.
        
    DoDrugInvenItem pNetMsg->wPosXpNetMsg->wPosY );

        
    MsgFB.emFB EMREQ_STORAGEOPEN_FB_OK;
        
    MsgFB.wPosX pNetMsg->wPosX;
        
    MsgFB.wPosY pNetMsg->wPosY;

        
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);

        
    // Ã¢°í¿¬°áÄ«µå »ç¿ë¿©ºÎ
        
    m_bUsedStorageCard true;

        return 
    S_OK;
    }

    // *****************************************************
    // Desc: ±ä±Þ Ã¢°í »ç¿ë ¿Ï·á
    // *****************************************************
    HRESULT GLChar::MsgReqInvenStorageClose NET_MSG_GENERICnmg )
    {
        
    // Ã¢°í¿¬°áÄ«µå »ç¿ë¿©ºÎ
        
    m_bUsedStorageCard false;

        return 
    S_OK;
    }

    HRESULT GLChar::MsgReqInvenPremiumSet NET_MSG_GENERICnmg )
    {
        
    GLMSG::SNET_INVEN_PREMIUMSET *pNetMsg = (GLMSG::SNET_INVEN_PREMIUMSET *)nmg;

        
    GLMSG::SNET_INVEN_PREMIUMSET_FB MsgFB;

        
    SINVENITEMpINVENITEM m_cInventory.GetItem pNetMsg->wPosXpNetMsg->wPosY );
        if ( !
    pINVENITEM )
        {
            
    MsgFB.emFB EMREQ_PREMIUMSET_FB_NOITEM;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
            return 
    E_FAIL;
        }

        if ( 
    CheckCoolTimepINVENITEM->sItemCustom.sNativeID ) )    return E_FAIL;

        
    SITEM *pITEM GLItemMan::GetInstance().GetItem pINVENITEM->sItemCustom.sNativeID );
        if ( 
    pITEM->sBasicOp.emItemType!=ITEM_PREMIUMSET )
        {
            
    MsgFB.emFB EMREQ_PREMIUMSET_FB_NOITEM;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
            return 
    E_FAIL;
        }

        
    //    Note : Àκ¥ÀÇ ¿©À¯ °ø°£ ÃøÁ¤.
        //
        
    GLInventory cInvenTemp;
        
    cInvenTemp.SetAddLine m_cInventory.GETAddLine(), true );
        
    cInvenTemp.Assign m_cInventory );

        for ( 
    int i=0i<ITEM::SBOX::ITEM_SIZE; ++)
        {
            
    SITEMCUSTOM sCUSTOM;
            
    sCUSTOM.sNativeID pITEM->sBox.sITEMS[i].nidITEM;
            if ( 
    sCUSTOM.sNativeID==SNATIVEID(false) )                continue;

            
    SITEM *pONE GLItemMan::GetInstance().GetItem sCUSTOM.sNativeID );
            if ( !
    pONE )
            {
                
    MsgFB.emFB EMREQ_PREMIUMSET_FB_NOITEM;
                
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
                return 
    E_FAIL;
            }

            
    BOOL bOK cInvenTemp.InsertItem sCUSTOM );
            if ( !
    bOK )
            {
                
    //    Note : Àκ¥¿¡ °ø°£ÀÌ ¾ø´Â °ÍÀ¸·Î ÆÇ´ÜµÊ.
                //
                
    MsgFB.emFB EMREQ_PREMIUMSET_FB_NOTINVEN;
                
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
                return 
    E_FAIL;
            }
        }

        
    //    Note : »óÀھȿ¡ Àִ ¾ÆÀÌÅÛÀ» ²¨³»¾î¼­ ³Ö´Â´Ù.
        //
        
    for ( int i=0i<ITEM::SBOX::ITEM_SIZE; ++)
        {
            
    SITEMCUSTOM sITEM_NEW;
            
    sITEM_NEW.sNativeID pITEM->sBox.sITEMS[i].nidITEM;
            
    DWORD dwAMOUNT pITEM->sBox.sITEMS[i].dwAMOUNT;
            if ( 
    sITEM_NEW.sNativeID==SNATIVEID(false) )                continue;

            
    SITEM *pONE GLItemMan::GetInstance().GetItem sITEM_NEW.sNativeID );
            if ( !
    pONE )                                            return E_FAIL;

            
    //    Note : ¾ÆÀÌÅÛ »ý¼º.
            //
            
    CTime cTIME CTime::GetCurrentTime();
            
    sITEM_NEW.tBORNTIME cTIME.GetTime();

            
    sITEM_NEW.wTurnNum = (WORDdwAMOUNT;
            
    sITEM_NEW.cGenType pINVENITEM->sItemCustom.cGenType;
            
    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 );

            
    // ¾ÆÀÌÅÛ ¿¡µðÆ®¿¡¼­ ÀÔ·ÂÇÑ °³Á¶ µî±Þ Àû¿ë ( ÁØÇõ )
            
    sITEM_NEW.cDAMAGE = (BYTE)pONE->sBasicOp.wGradeAttack;
            
    sITEM_NEW.cDEFENSE = (BYTE)pONE->sBasicOp.wGradeDefense;

            
    //    ·£´ý ¿É¼Ç »ý¼º.
            
    if( sITEM_NEW.GENERATE_RANDOM_OPT() )
            {
                
    GLITEMLMT::GetInstance().ReqRandomItemsITEM_NEW );
            }

            
    //    Note :.
            
    WORD wInsertPosXwInsertPosY;
            
    BOOL bOk m_cInventory.FindInsrtable pONE->sBasicOp.wInvenSizeXpONE->sBasicOp.wInvenSizeYwInsertPosXwInsertPosY );
            if ( !
    bOk )        return S_OK;    //    Àκ¥ °ø°£ ºÎÁ·À¸·Î µÇµ¹¸² ½ÇÆÐ.

            //    .
            
    m_cInventory.InsertItem sITEM_NEWwInsertPosXwInsertPosY );
            
    SINVENITEM *pInvenItem m_cInventory.GetItem wInsertPosXwInsertPosY );
            if ( !
    pInvenItem )    return E_FAIL;

            
    //    Note : ·Î±× ³²±è.
            
    GLITEMLMT::GetInstance().ReqItemRoute pInvenItem->sItemCustomID_CHAR0ID_CHARm_dwCharIDEMITEM_ROUTE_CHARpInvenItem->sItemCustom.wTurnNum );

            
    //    [Àڽſ¡°Ô] ¸Þ½ÃÁö ¹ß»ý.
            
    GLMSG::SNETPC_INVEN_INSERT NetMsg_Inven;
            
    NetMsg_Inven.Data = *pInvenItem;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg_Inven);
        }

        
    //    Note : ÇÁ¸®¹Ì¾ö ¼³Á¤.
        //
        
    CTime tPREMIUM(m_tPREMIUM);
        
    CTime tCurTime CTime::GetCurrentTime();
        
    CTimeSpan tLMT(pITEM->sDrugOp.tTIME_LMT);
        
    CTimeSpan tADD(0,1,30,0);

        if ( 
    m_tPREMIUM==|| tPREMIUM tCurTime )
        {
            
    tPREMIUM tCurTime tLMT tADD;
        }
        else
        {
            
    tPREMIUM tPREMIUM tLMT tADD;
        }

        
    //    Note : ÇÁ¸®¹Ì¾ö ¸ðµå ON.
        //
        
    m_tPREMIUM tPREMIUM.GetTime();
        
    m_bPREMIUM true;

        
    //    Note : ÇöÁ¦ È°¼ºÈ­µÈ Àκ¥ ¶óÀΠ¼³Á¤.
        //
        
    m_cInventory.SetAddLine GetOnINVENLINE(), true );

        
    //    Note : DB¿¡ ÀúÀå.
        //
        
    if ( GLGaeaServer::GetInstance().GetDBMan() )
        {
            
    CSetPremiumTime *pDbAction = new CSetPremiumTime m_dwUserIDm_tPREMIUM );
            
    GLGaeaServer::GetInstance().GetDBMan()->AddJob pDbAction );
        }

        
    // Note : CSetPremiumTime Å¬·¡½º¿¡¼­ ¸ðµç °æ¿ì¸¦ Ã³¸®Çϵµ·Ï º¯°æµÊ
        /*
        if ( GLGaeaServer::GetInstance().GetDBMan() )
        {
            CDaumSetPremiumTime *pDbAction = new CDaumSetPremiumTime ( m_dwUserID, m_tPREMIUM );
            GLGaeaServer::GetInstance().GetDBMan()->AddJob ( pDbAction );
        }
        */
        //    [Àڽſ¡°Ô] Àι꠾ÆÀÌÅÆ ¼Ò¸ð½ÃÅ´.
        
    DoDrugInvenItem pNetMsg->wPosXpNetMsg->wPosY );


        
    //    Note : ¿¡ÀÌÁ¯Æ®·Î °ÅÃļ­ ¸Þ½ÃÁö Àü¼Û.
        //        ( ¿¡ÀÌÁ¯Æ®¿¡ ±â·ÏµÇ¾î Àִ ÇÁ¸®¹Ì¾ö ±â°£À» °»½Å ½ÃÄÑÁà¾ß ÇÑ´Ù. )
        //
        
    CTimeSpan tDX tPREMIUM tCurTime;
        
    MsgFB.emFB EMREQ_PREMIUMSET_FB_OK;
        
    MsgFB.tLMT m_tPREMIUM;
        
    MsgFB.tSPAN tDX.GetTimeSpan();
        
    GLGaeaServer::GetInstance().SENDTOAGENT(m_dwClientID,&MsgFB);

        return 
    S_OK;
    }

    HRESULT GLChar::MsgReqInvenHairChange NET_MSG_GENERICnmg )
    {
        
    GLMSG::SNETPC_INVEN_HAIR_CHANGE *pNetMsg = (GLMSG::SNETPC_INVEN_HAIR_CHANGE *)nmg;

        
    GLMSG::SNETPC_INVEN_HAIR_CHANGE_FB MsgFB;

        
    SINVENITEMpINVENITEM m_cInventory.GetItem pNetMsg->wPosXpNetMsg->wPosY );
        if ( !
    pINVENITEM )
        {
            
    MsgFB.emFB EMINVEN_HAIR_CHANGE_FB_NOITEM;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
            return 
    E_FAIL;
        }

        if ( 
    CheckCoolTimepINVENITEM->sItemCustom.sNativeID ) )
        {
            
    MsgFB.emFB EMINVEN_HAIR_CHANGE_FB_COOLTIME;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
            return 
    E_FAIL;
        }

        
    SITEM *pITEM GLItemMan::GetInstance().GetItem pINVENITEM->sItemCustom.sNativeID );
        if ( 
    pITEM->sBasicOp.emItemType!=ITEM_HAIR )
        {
            
    MsgFB.emFB EMINVEN_HAIR_CHANGE_FB_NOITEM;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
            return 
    E_FAIL;
        }

        
    bool bVALIDCLASS = (NULL!=(pITEM->sBasicOp.dwReqCharClass&m_emClass));
        if ( !
    bVALIDCLASS )
        {
            
    MsgFB.emFB EMINVEN_HAIR_CHANGE_FB_BADCLASS;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
            return 
    E_FAIL;
        }

        
    WORD wHAIR pITEM->sSuitOp.wReModelNum;

        
    EMCHARINDEX emIndex CharClassToIndex(m_emClass);
        const 
    GLCONST_CHARCLASSsCHARCONST GLCONST_CHAR::cCONSTCLASS[emIndex];
        if ( 
    sCHARCONST.dwHAIRNUM<=wHAIR || MAX_HAIR<=wHAIR )
        {
            
    MsgFB.emFB EMINVEN_HAIR_CHANGE_FB_BADITEM;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
            return 
    E_FAIL;
        }

        if ( 
    sCHARCONST.strHAIR_CPS[wHAIR].empty() )
        {
            
    MsgFB.emFB EMINVEN_HAIR_CHANGE_FB_BADITEM;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
            return 
    E_FAIL;
        }

        
    //    Note : Çì¾î¸¦ º¯È­ ½ÃÅ´.
        //
        
    m_wHair wHAIR;

        
    //    Note : Å¬¶óÀÌ¾ðÆ®¿¡ Ã³¸® °á°ú Àü¼Û.
        
    MsgFB.dwID m_wHair;
        
    MsgFB.emFB EMINVEN_HAIR_CHANGE_FB_OK;
        
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);

        
    //    Note : Çì¾î º¯°æÀ» ´Ù¸¥ »ç¶÷µé¿¡°Ô ¾Ë¸².
        
    GLMSG::SNETPC_INVEN_HAIR_CHANGE_BRD NetMsgBrd;
        
    NetMsgBrd.dwGaeaID m_dwGaeaID;
        
    NetMsgBrd.dwID m_wHair;
        
    SendMsgViewAround ( (NET_MSG_GENERIC*) &NetMsgBrd );

        
    //    [Àڽſ¡°Ô] Àι꠾ÆÀÌÅÆ ¼Ò¸ð½ÃÅ´.
        
    DoDrugInvenItem pNetMsg->wPosXpNetMsg->wPosY );

        return 
    S_OK;
    }

    HRESULT GLChar::MsgReqInvenHairStyleChange NET_MSG_GENERICnmg )
    {
        
    GLMSG::SNETPC_INVEN_HAIRSTYLE_CHANGE *pNetMsg = (GLMSG::SNETPC_INVEN_HAIRSTYLE_CHANGE *)nmg;

        
    GLMSG::SNETPC_INVEN_HAIR_CHANGE_FB MsgFB;

        
    SINVENITEMpINVENITEM m_cInventory.GetItem pNetMsg->wPosXpNetMsg->wPosY );
        if ( !
    pINVENITEM )
        {
            
    MsgFB.emFB EMINVEN_HAIR_CHANGE_FB_NOITEM;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
            return 
    E_FAIL;
        }

        if ( 
    CheckCoolTimepINVENITEM->sItemCustom.sNativeID ) )
        {
            
    MsgFB.emFB EMINVEN_HAIR_CHANGE_FB_COOLTIME;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
            return 
    E_FAIL;
        }

        
    SITEM *pITEM GLItemMan::GetInstance().GetItem pINVENITEM->sItemCustom.sNativeID );
        
        if ( 
    pITEM->sBasicOp.emItemType!=ITEM_HAIR_STYLE )
        {
            
    MsgFB.emFB EMINVEN_HAIR_CHANGE_FB_NOITEM;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
            return 
    E_FAIL;
        }


        
    bool bVALIDCLASS = (NULL!=(pITEM->sBasicOp.dwReqCharClass&m_emClass));
        if ( !
    bVALIDCLASS )
        {
            
    MsgFB.emFB EMINVEN_HAIR_CHANGE_FB_BADCLASS;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
            return 
    E_FAIL;
        }

        
    //WORD wHAIR = pITEM->sSuitOp.wReModelNum;

        
    EMCHARINDEX emIndex CharClassToIndex(m_emClass);
        const 
    GLCONST_CHARCLASSsCHARCONST GLCONST_CHAR::cCONSTCLASS[emIndex];
        if ( 
    sCHARCONST.dwHAIRNUM<=pNetMsg->wHairStyle || MAX_HAIR<=pNetMsg->wHairStyle )
        {
            
    MsgFB.emFB EMINVEN_HAIR_CHANGE_FB_BADITEM;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
            return 
    E_FAIL;
        }

        
    m_wHair pNetMsg->wHairStyle;

        
    //    Note : Å¬¶óÀÌ¾ðÆ®¿¡ Ã³¸® °á°ú Àü¼Û.
        
    MsgFB.dwID m_wHair;
        
    MsgFB.emFB EMINVEN_HAIR_CHANGE_FB_OK;
        
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);

        
    //    Note : Çì¾î º¯°æÀ» ´Ù¸¥ »ç¶÷µé¿¡°Ô ¾Ë¸².
        
    GLMSG::SNETPC_INVEN_HAIR_CHANGE_BRD NetMsgBrd;
        
    NetMsgBrd.dwGaeaID m_dwGaeaID;
        
    NetMsgBrd.dwID m_wHair;
        
    SendMsgViewAround ( (NET_MSG_GENERIC*) &NetMsgBrd );

        
    //    [Àڽſ¡°Ô] Àι꠾ÆÀÌÅÆ ¼Ò¸ð½ÃÅ´.
        
    DoDrugInvenItem pNetMsg->wPosXpNetMsg->wPosY );

        
    // DB¿¡ ÀúÀå
        
    CSetChaHairStylepDBAction = new CSetChaHairStyle m_dwCharIDm_wHair );

        if ( 
    GLGaeaServer::GetInstance().GetDBMan() )
        {
            
    GLGaeaServer::GetInstance().GetDBMan()->AddJob pDBAction );
        }


        return 
    S_OK;
    }

    HRESULT GLChar::MsgReqInvenHairColorChange NET_MSG_GENERICnmg )
    {
        
    GLMSG::SNETPC_INVEN_HAIRCOLOR_CHANGE *pNetMsg = (GLMSG::SNETPC_INVEN_HAIRCOLOR_CHANGE *)nmg;

        
    GLMSG::SNETPC_INVEN_HAIRCOLOR_CHANGE_FB MsgFB;

        
    SINVENITEMpINVENITEM m_cInventory.GetItem pNetMsg->wPosXpNetMsg->wPosY );
        if ( !
    pINVENITEM )
        {
            
    MsgFB.emFB EMINVEN_HAIR_CHANGE_FB_NOITEM;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
            return 
    E_FAIL;
        }

        if ( 
    CheckCoolTimepINVENITEM->sItemCustom.sNativeID ) )
        {
            
    MsgFB.emFB EMINVEN_HAIR_CHANGE_FB_COOLTIME;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
            return 
    E_FAIL;
        }

        
    SITEM *pITEM GLItemMan::GetInstance().GetItem pINVENITEM->sItemCustom.sNativeID );

        if ( 
    pITEM->sBasicOp.emItemType!=ITEM_HAIR_COLOR )
        {
            
    MsgFB.emFB EMINVEN_HAIR_CHANGE_FB_NOITEM;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
            return 
    E_FAIL;
        }

        
    //    Note : Çì¾î¸¦ º¯È­ ½ÃÅ´.
        //
        
    m_wHairColor pNetMsg->wHairColor;

        
    //    Note : Å¬¶óÀÌ¾ðÆ®¿¡ Ã³¸® °á°ú Àü¼Û.
        
    MsgFB.wHairColor m_wHairColor;
        
    MsgFB.emFB EMINVEN_HAIR_CHANGE_FB_OK;
        
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);

        
    //    Note : Çì¾î º¯°æÀ» ´Ù¸¥ »ç¶÷µé¿¡°Ô ¾Ë¸².
        
    GLMSG::SNETPC_INVEN_HAIRCOLOR_CHANGE_BRD NetMsgBrd;
        
    NetMsgBrd.dwGaeaID m_dwGaeaID;
        
    NetMsgBrd.wHairColor m_wHairColor;
        
    SendMsgViewAround ( (NET_MSG_GENERIC*) &NetMsgBrd );

        
    //    [Àڽſ¡°Ô] Àι꠾ÆÀÌÅÆ ¼Ò¸ð½ÃÅ´.
        
    DoDrugInvenItem pNetMsg->wPosXpNetMsg->wPosY );

        
    // DB¿¡ ÀúÀå
        
    CSetChaHairColorpDBAction = new CSetChaHairColor m_dwCharIDm_wHairColor );

        if ( 
    GLGaeaServer::GetInstance().GetDBMan() )
        {
            
    GLGaeaServer::GetInstance().GetDBMan()->AddJob pDBAction );
        }

        return 
    S_OK;
    }

    HRESULT GLChar::MsgReqInvenBikeColorChange NET_MSG_GENERICnmg //add bike color
    {
        
    GLMSG::SNETPC_INVEN_BIKECOLOR_CHANGE *pNetMsg = (GLMSG::SNETPC_INVEN_BIKECOLOR_CHANGE *)nmg;

        
    GLMSG::SNETPC_INVEN_BIKECOLOR_CHANGE_FB MsgFB;

        
    SINVENITEMpINVENITEM m_cInventory.GetItem pNetMsg->wPosXpNetMsg->wPosY );
        if ( !
    pINVENITEM )
        {
            
    MsgFB.emFB EMINVEN_BIKE_CHANGE_FB_NOITEM;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
            return 
    E_FAIL;
        }

        if ( 
    CheckCoolTimepINVENITEM->sItemCustom.sNativeID ) )
        {
            
    MsgFB.emFB EMINVEN_BIKE_CHANGE_FB_COOLTIME;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
            return 
    E_FAIL;
        }

        
    SITEM *pITEM GLItemMan::GetInstance().GetItem pINVENITEM->sItemCustom.sNativeID );

        if ( 
    pITEM->sBasicOp.emItemType!=ITEM_BIKE_COLOR )
        {
            
    MsgFB.emFB EMINVEN_BIKE_CHANGE_FB_NOITEM;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
            return 
    E_FAIL;
        }

        
    m_sVehicle.m_wColor pNetMsg->wBikeColor;

        
    MsgFB.wBikeColor m_sVehicle.m_wColor;
        
    MsgFB.emFB EMINVEN_BIKE_CHANGE_FB_OK;
        
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);

        
    GLMSG::SNETPC_INVEN_BIKECOLOR_CHANGE_BRD NetMsgBrd;
        
    NetMsgBrd.dwGaeaID m_dwGaeaID;
        
    NetMsgBrd.wBikeColor m_sVehicle.m_wColor;
        
    SendMsgViewAround ( (NET_MSG_GENERIC*) &NetMsgBrd );

        
    DoDrugInvenItem pNetMsg->wPosXpNetMsg->wPosY );

        
    // DB¿¡ ÀúÀå //jdev todo save color after change
        
    CSetVehicleColorpDBAction = new CSetVehicleColor m_dwClientIDm_dwCharIDm_sVehicle.m_dwGUID ,m_sVehicle.m_wColor );

        if ( 
    GLGaeaServer::GetInstance().GetDBMan() )
        {
            
    GLGaeaServer::GetInstance().GetDBMan()->AddJob pDBAction );
        }

        return 
    S_OK;
    }


    HRESULT GLChar::MsgReqInvenFaceChange NET_MSG_GENERICnmg )
    {
        
    GLMSG::SNETPC_INVEN_FACE_CHANGE *pNetMsg = (GLMSG::SNETPC_INVEN_FACE_CHANGE *)nmg;

        
    GLMSG::SNETPC_INVEN_FACE_CHANGE_FB MsgFB;

        
    SINVENITEMpINVENITEM m_cInventory.GetItem pNetMsg->wPosXpNetMsg->wPosY );
        if ( !
    pINVENITEM )
        {
            
    MsgFB.emFB EMINVEN_FACE_CHANGE_FB_NOITEM;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
            return 
    E_FAIL;
        }

        if ( 
    CheckCoolTimepINVENITEM->sItemCustom.sNativeID ) )
        {
            
    MsgFB.emFB EMINVEN_FACE_CHANGE_FB_COOLTIME;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);        
            return 
    E_FAIL;
        }

        
    SITEM *pITEM GLItemMan::GetInstance().GetItem pINVENITEM->sItemCustom.sNativeID );
        if ( 
    pITEM->sBasicOp.emItemType!=ITEM_FACE )
        {
            
    MsgFB.emFB EMINVEN_FACE_CHANGE_FB_NOITEM;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
            return 
    E_FAIL;
        }

        
    bool bVALIDCLASS = (NULL!=(pITEM->sBasicOp.dwReqCharClass&m_emClass));
        if ( !
    bVALIDCLASS )
        {
            
    MsgFB.emFB EMINVEN_FACE_CHANGE_FB_BADCLASS;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
            return 
    E_FAIL;
        }

        
    WORD wFACE pITEM->sSuitOp.wReModelNum;

        
    EMCHARINDEX emIndex CharClassToIndex(m_emClass);
        const 
    GLCONST_CHARCLASSsCHARCONST GLCONST_CHAR::cCONSTCLASS[emIndex];
        if ( 
    sCHARCONST.dwHEADNUM<=wFACE || MAX_HEAD<=wFACE )
        {
            
    MsgFB.emFB EMINVEN_FACE_CHANGE_FB_BADITEM;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
            return 
    E_FAIL;
        }

        if ( 
    sCHARCONST.strHEAD_CPS[wFACE].empty() )
        {
            
    MsgFB.emFB EMINVEN_FACE_CHANGE_FB_BADITEM;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
            return 
    E_FAIL;
        }

        
    //    Note : ¾ó±¼À» º¯È­ ½ÃÅ´.
        //
        
    m_wFace wFACE;

        
    //    Note : Å¬¶óÀÌ¾ðÆ®¿¡ Ã³¸® °á°ú Àü¼Û.
        
    MsgFB.dwID m_wFace;
        
    MsgFB.emFB EMINVEN_FACE_CHANGE_FB_OK;
        
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);

        
    //    Note : ¾ó±¼ º¯°æÀ» ´Ù¸¥ »ç¶÷µé¿¡°Ô ¾Ë¸².
        
    GLMSG::SNETPC_INVEN_FACE_CHANGE_BRD NetMsgBrd;
        
    NetMsgBrd.dwGaeaID m_dwGaeaID;
        
    NetMsgBrd.dwID m_wFace;
        
    SendMsgViewAround ( (NET_MSG_GENERIC*) &NetMsgBrd );

        
    //    [Àڽſ¡°Ô] Àι꠾ÆÀÌÅÆ ¼Ò¸ð½ÃÅ´.
        
    DoDrugInvenItem pNetMsg->wPosXpNetMsg->wPosY );

        return 
    S_OK;
    }

    HRESULT GLChar::MsgReqInvenFaceStyleChange NET_MSG_GENERICnmg )
    {
        
    GLMSG::SNETPC_INVEN_FACESTYLE_CHANGE *pNetMsg = (GLMSG::SNETPC_INVEN_FACESTYLE_CHANGE *)nmg;

        
    GLMSG::SNETPC_INVEN_FACE_CHANGE_FB MsgFB;

        
    SINVENITEMpINVENITEM m_cInventory.GetItem pNetMsg->wPosXpNetMsg->wPosY );
        if ( !
    pINVENITEM )
        {
            
    MsgFB.emFB EMINVEN_FACE_CHANGE_FB_NOITEM;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
            return 
    E_FAIL;
        }

        if ( 
    CheckCoolTimepINVENITEM->sItemCustom.sNativeID ) )
        {        
            
    MsgFB.emFB EMINVEN_FACE_CHANGE_FB_COOLTIME;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
            return 
    E_FAIL;
        }

        
    SITEM *pITEM GLItemMan::GetInstance().GetItem pINVENITEM->sItemCustom.sNativeID );
        
        if ( 
    pITEM->sBasicOp.emItemType!=ITEM_FACE_STYLE )
        {
            
    MsgFB.emFB EMINVEN_FACE_CHANGE_FB_NOITEM;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
            return 
    E_FAIL;
        }


        
    bool bVALIDCLASS = (NULL!=(pITEM->sBasicOp.dwReqCharClass&m_emClass));
        if ( !
    bVALIDCLASS )
        {
            
    MsgFB.emFB EMINVEN_FACE_CHANGE_FB_BADCLASS;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
            return 
    E_FAIL;
        }

        
    //WORD wHAIR = pITEM->sSuitOp.wReModelNum;

        
    EMCHARINDEX emIndex CharClassToIndex(m_emClass);
        const 
    GLCONST_CHARCLASSsCHARCONST GLCONST_CHAR::cCONSTCLASS[emIndex];
        if ( 
    sCHARCONST.dwHEADNUM<=pNetMsg->wFaceStyle || MAX_HEAD<=pNetMsg->wFaceStyle )
        {
            
    MsgFB.emFB EMINVEN_FACE_CHANGE_FB_BADITEM;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
            return 
    E_FAIL;
        }

        
    m_wFace pNetMsg->wFaceStyle;

        
    //    Note : Å¬¶óÀÌ¾ðÆ®¿¡ Ã³¸® °á°ú Àü¼Û.
        
    MsgFB.dwID m_wFace;
        
    MsgFB.emFB EMINVEN_FACE_CHANGE_FB_OK;
        
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);

        
    //    Note : Çì¾î º¯°æÀ» ´Ù¸¥ »ç¶÷µé¿¡°Ô ¾Ë¸².
        
    GLMSG::SNETPC_INVEN_FACE_CHANGE_BRD NetMsgBrd;
        
    NetMsgBrd.dwGaeaID m_dwGaeaID;
        
    NetMsgBrd.dwID m_wFace;
        
    SendMsgViewAround ( (NET_MSG_GENERIC*) &NetMsgBrd );

        
    //    [Àڽſ¡°Ô] Àι꠾ÆÀÌÅÆ ¼Ò¸ð½ÃÅ´.
        
    DoDrugInvenItem pNetMsg->wPosXpNetMsg->wPosY );

        
    // DB¿¡ ÀúÀå
        
    CSetChaFaceStylepDBAction = new CSetChaFaceStyle m_dwCharIDm_wFace );

        if ( 
    GLGaeaServer::GetInstance().GetDBMan() )
        {
            
    GLGaeaServer::GetInstance().GetDBMan()->AddJob pDBAction );
        }


        return 
    S_OK;

    }


    HRESULT GLChar::MsgReqInvenGenderChangeNET_MSG_GENERICnmg )
    {
        
    GLMSG::SNETPC_INVEN_GENDER_CHANGE *pNetMsg = (GLMSG::SNETPC_INVEN_GENDER_CHANGE *)nmg;
        
    GLMSG::SNETPC_INVEN_GENDER_CHANGE_FB MsgFB;


        
    SINVENITEMpINVENITEM m_cInventory.GetItem pNetMsg->wPosXpNetMsg->wPosY );
        if ( !
    pINVENITEM )
        {
            
    MsgFB.emFB EMINVEN_GENDER_CHANGE_FB_NOITEM;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
            return 
    E_FAIL;
        }

        if ( 
    CheckCoolTimepINVENITEM->sItemCustom.sNativeID ) )    return E_FAIL;

        
    SITEM *pITEM GLItemMan::GetInstance().GetItem pINVENITEM->sItemCustom.sNativeID );
        
        if ( 
    pITEM->sBasicOp.emItemType!=ITEM_GENDER_CHANGE )
        {
            
    MsgFB.emFB EMINVEN_GENDER_CHANGE_FB_ITEMTYPE;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
            return 
    E_FAIL;
        }


        
    //added by   | 08-07-2012 | make extreme can use gender card
        /*if ( m_emClass == GLCC_EXTREME_M || m_emClass == GLCC_EXTREME_W )
        {
            MsgFB.emFB = EMINVEN_GENDER_CHANGE_FB_BADCLASS;
            GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
            return E_FAIL;
        }*/

        //fix for proper class reverse
        
    EMCHARCLASS emClass;
            
        
    //if ( m_emClass > GLCC_EXTREME_M &&  m_emClass < GLCC_SCIENCE_M )    emClass = (EMCHARCLASS) (m_emClass / 64 );
        //else if ( m_emClass < GLCC_EXTREME_M ) emClass = (EMCHARCLASS) (m_emClass * 64);

        
    if ( m_emClass == GLCC_FIGHTER_M || m_emClass == GLCC_ARMS_M || m_emClass == GLCC_ARCHER_W || m_emClass == GLCC_SPIRIT_W )  emClass = (EMCHARCLASS) (m_emClass 64);
        else if ( 
    m_emClass == GLCC_FIGHTER_W || m_emClass == GLCC_ARMS_W || m_emClass == GLCC_ARCHER_M || m_emClass == GLCC_SPIRIT_M )  emClass = (EMCHARCLASS) (m_emClass 64);
        else if ( 
    m_emClass == GLCC_EXTREME_M || m_emClass == GLCC_SCIENCE_M || m_emClass == GLCC_ASSASSIN_M )  emClass = (EMCHARCLASS) (m_emClass );
        else if ( 
    m_emClass == GLCC_EXTREME_W || m_emClass == GLCC_SCIENCE_W || m_emClass == GLCC_ASSASSIN_W )  emClass = (EMCHARCLASS) (m_emClass );


        
    EMCHARINDEX emIndex CharClassToIndex(emClass);
        const 
    GLCONST_CHARCLASSsCHARCONST GLCONST_CHAR::cCONSTCLASS[emIndex];

        if ( 
    pNetMsg->wFace >= sCHARCONST.dwHEADNUM || pNetMsg->wHair >= sCHARCONST.dwHAIRNUM_SELECT )
        {
            
    MsgFB.emFB EMINVEN_GENDER_CHANGE_FB_NOTVALUE;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
            return 
    E_FAIL;
        }

        
    m_emClass emClass;
        
    m_wHair pNetMsg->wHair;
        
    m_wFace pNetMsg->wFace;    
        
    m_wHairColor HAIRCOLOR::GetHairColoremIndexm_wHair );

        
    m_wSex m_wSex 1;


        
    //    Note : Å¬¶óÀÌ¾ðÆ®¿¡ Ã³¸® °á°ú Àü¼Û.
        
    MsgFB.emClass    m_emClass;
        
    MsgFB.wSex        m_wSex;
        
    MsgFB.wFace m_wFace;
        
    MsgFB.wHair m_wHair;
        
    MsgFB.wHairColor m_wHairColor;

        
    MsgFB.emFB EMINVEN_GENDER_CHANGE_FB_OK;
        
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);

        
    //    [Àڽſ¡°Ô] Àι꠾ÆÀÌÅÆ ¼Ò¸ð½ÃÅ´.
        
    DoDrugInvenItem pNetMsg->wPosXpNetMsg->wPosY );

        
    // DB¿¡ ÀúÀå
        
    CSetChaGenderChangepDBAction = new CSetChaGenderChange m_dwCharIDm_emClassm_wSexm_wFacem_wHairm_wHairColor );

        if ( 
    GLGaeaServer::GetInstance().GetDBMan() )
        {
            
    GLGaeaServer::GetInstance().GetDBMan()->AddJob pDBAction );
        }

        return 
    S_OK;
    }

    HRESULT GLChar::MsgReqInvenChargedItem NET_MSG_GENERICnmg )
    {
        if ( !
    IsValidBody() )    return E_FAIL;

        
    GLMSG::SNET_CHARGED_ITEM_GET *pNetMsg = (GLMSG::SNET_CHARGED_ITEM_GET *) nmg;

        
    GLMSG::SNET_CHARGED_ITEM_GET_FB NetMsgFB;

        
    MAPSHOP_ITER iter m_mapCharged.find pNetMsg->szPurKey );
        if ( 
    iter==m_mapCharged.end() )
        {
            
    NetMsgFB.emFB EMCHARGED_ITEM_GET_FB_NOITEM;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
            return 
    E_FAIL;
        }

        
    SHOPPURCHASE &sPURCHASE = (*iter).second;
        
        
    SNATIVEID nidITEM(sPURCHASE.wItemMain,sPURCHASE.wItemSub);
        
        
    SITEM *pITEM GLItemMan::GetInstance().GetItem nidITEM );
        if ( !
    pITEM )
        {
            
    NetMsgFB.emFB EMCHARGED_ITEM_GET_FB_NOITEM;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
            return 
    E_FAIL;
        }

        
    WORD wPosXwPosY;
        
    BOOL bOK m_cInventory.FindInsrtable pITEM->sBasicOp.wInvenSizeXpITEM->sBasicOp.wInvenSizeYwPosXwPosY );
        if ( !
    bOK )
        {
            
    NetMsgFB.emFB EMCHARGED_ITEM_GET_FB_NOINVEN;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
            return 
    E_FAIL;
        }

        
    //    Note : ¾ÆÀÌÅÛ °¡Á®¿È. DB Action.
        //
        
    CPurchaseItem_Get *pDbAction = new CPurchaseItem_Get(m_dwClientID,
                                                             
    m_dwUserID,
                                                             
    pNetMsg->szPurKey,
                                                             
    nidITEM,pNetMsg->dwID);
        if ( 
    GLGaeaServer::GetInstance().GetDBMan() )
        {
            
    GLGaeaServer::GetInstance().GetDBMan()->AddJob pDbAction );
        }

        return 
    S_OK;
    }

    // *****************************************************
    // Desc: À̸§º¯°æ¿äû Ã³¸®
    // *****************************************************
    HRESULT GLChar::MsgReqInvenRename NET_MSG_GENERICnmg )
    {
        
    GLMSG::SNETPC_INVEN_RENAME *pNetMsg = (GLMSG::SNETPC_INVEN_RENAME*) nmg;

        
    GLMSG::SNETPC_INVEN_RENAME_FB MsgFB;

        
    SINVENITEMpINVENITEM m_cInventory.GetItem pNetMsg->wPosXpNetMsg->wPosY );
        if ( !
    pINVENITEM )
        {
            
    MsgFB.emFB EMINVEN_RENAME_FB_NOITEM;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
            return 
    E_FAIL;
        }

        if ( 
    CheckCoolTimepINVENITEM->sItemCustom.sNativeID ) )    return E_FAIL;

        
    SITEM *pITEM GLItemMan::GetInstance().GetItem pINVENITEM->sItemCustom.sNativeID );
        if ( 
    pITEM->sBasicOp.emItemType!=ITEM_RENAME )
        {
            
    MsgFB.emFB EMINVEN_RENAME_FB_BADITEM;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
            return 
    E_FAIL;
        }
        
        
    // Ä³¸¯Å͸í
        
    CString strChaName(pNetMsg->szName);
        
    strChaName.Trim(_T(" ")); // ¾ÕµÚ °ø¹éÁ¦°Å

        // ½ºÆäÀ̽º Ã£±â, Ä³¸¯ÅÍÀ̸§ 4±ÛÀÚ ÀÌÇÏ ¿¡·¯, Ä³¸¯ÅÍ ¸¸µé ¼ö ¾øÀ½.
        
    if ((strChaName.FindOneOf(" ") != -1) || (strChaName.GetLength() < 4)) 
        {
            
    MsgFB.emFB EMINVEN_RENAME_FB_LENGTH;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
            return 
    E_FAIL;
        }

        
    BOOL bFILTER0 STRUTIL::CheckStringstrChaName );
        
    BOOL bFILTER1 CRanFilter::GetInstance().NameFilterstrChaName );
        if ( 
    bFILTER0 || bFILTER1 )
        {
            
    MsgFB.emFB EMINVEN_RENAME_FROM_DB_BAD;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT m_dwClientID, &MsgFB );
            return 
    S_FALSE;            
        }

    #ifdef TH_PARAM    
        // Å±¹¾î ¹®ÀÚ Á¶Çՠüũ 
        
    if ( !m_pCheckString ) return E_FAIL;

        if ( !
    m_pCheckString(strChaName) )
        {
            
    MsgFB.emFB EMINVEN_RENAME_FB_THAICHAR_ERROR;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
            return 
    E_FAIL;
        }
    #endif

    #ifdef VN_PARAM
        // º£Æ®³² ¹®ÀÚ Á¶Çՠüũ 
        
    if( STRUTIL::CheckVietnamStringstrChaName ) )
        {
            
    MsgFB.emFB EMINVEN_RENAME_FB_VNCHAR_ERROR;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
            return 
    E_FAIL;
        }

    #endif 

        // DB¿¡ ÀúÀå¿äû
        
    CRenameCharacterpDBAction = new CRenameCharacter(m_dwClientID
                                                           
    m_dwCharID,
                                                           
    pNetMsg->szName,
                                                           
    pNetMsg->wPosX,
                                                           
    pNetMsg->wPosY);
        if ( 
    GLGaeaServer::GetInstance().GetDBMan() )
        {
            
    GLGaeaServer::GetInstance().GetDBMan()->AddJob pDBAction );
        }

        return 
    S_OK;
    }

    // *****************************************************
    // Desc: À̸§º¯°æ °á°ú Ã³¸®
    // *****************************************************
    HRESULT GLChar::MsgInvenRename NET_MSG_GENERICnmg )
    {
        
    GLMSG::SNETPC_INVEN_RENAME_FROM_DB *pNetMsg = (GLMSG::SNETPC_INVEN_RENAME_FROM_DB *)nmg;
        
        
    // Å¬¶óÀÌ¾ðÆ®¿¡ Ã³¸® °á°ú Àü¼Û.
        
    GLMSG::SNETPC_INVEN_RENAME_FB MsgFB;

        if( 
    pNetMsg->emFB == EMINVEN_RENAME_FROM_DB_BAD )
        {
            
    MsgFB.emFB EMINVEN_RENAME_FROM_DB_BAD;
            
    StringCchCopy MsgFB.szNameCHAR_SZNAMEpNetMsg->szName );
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
            return 
    S_FALSE;
        }
        else if ( 
    pNetMsg->emFB == EMINVEN_RENAME_FROM_DB_FAIL )
        {
            
    MsgFB.emFB EMINVEN_RENAME_FROM_DB_FAIL;
            
    StringCchCopy MsgFB.szNameCHAR_SZNAMEpNetMsg->szName );
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
            return 
    S_FALSE;
        }

        
    StringCchCopy MsgFB.szNameCHAR_SZNAMEpNetMsg->szName );
        
    MsgFB.emFB EMINVEN_RENAME_FB_OK;
        
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);

        
    // ÁÖº¯¿¡ À̸§º¯°æÀ» ¾Ë¸².
        
    GLMSG::SNETPC_INVEN_RENAME_BRD NetMsgBrd;
        
    NetMsgBrd.dwGaeaID m_dwGaeaID;
        
    StringCchCopy NetMsgBrd.szNameCHAR_SZNAMEpNetMsg->szName );
        
    SendMsgViewAround ( (NET_MSG_GENERIC*) &NetMsgBrd );

        
    // GLLandMan À̸§¸Ê º¯°æ.
        
    GLMSG::SNETPC_CHANGE_NAMEMAP NetMsgNameMap;
        
    NetMsgNameMap.dwGaeaID m_dwGaeaID;
        
    StringCchCopy NetMsgNameMap.szOldNameCHAR_SZNAMEm_szName );
        
    StringCchCopy NetMsgNameMap.szNewNameCHAR_SZNAMEpNetMsg->szName );
        
    SendMsgViewAround ( (NET_MSG_GENERIC*) &NetMsgNameMap );

        
    // À̸§º¯°æÀ» Ä£±¸¿Í Å¬·´ ¸É¹öµé¿¡°Ô ¾Ë¸²
        
    GLMSG::SNETPC_INVEN_RENAME_AGTBRD NetMsgAgt;
        
    NetMsgAgt.dwID m_dwGaeaID;
        
    StringCchCopy NetMsgAgt.szOldNameCHAR_SZNAMEm_szName );
        
    StringCchCopy NetMsgAgt.szNewNameCHAR_SZNAMEpNetMsg->szName );
        
    GLGaeaServer::GetInstance().SENDTOAGENT m_dwClientID, &NetMsgAgt );

        
    GLGaeaServer::GetInstance().ChangeNameMap thism_szNamepNetMsg->szName );

        
    //    [Àڽſ¡°Ô] Àι꿡 ¾ÆÀÌÅÆ Á¦°Å.
        
    DoDrugInvenItem pNetMsg->wPosXpNetMsg->wPosY );

        return 
    S_OK;
    }

    HRESULT GLChar::MsgReqSendSMSNET_MSG_GENERICnmg )
    {
        
    GLMSG::SNETPC_SEND_SMS *pNetMsg = (GLMSG::SNETPC_SEND_SMS*) nmg;

        
    GLMSG::SNETPC_SEND_SMS_FB MsgFB;

        
    SINVENITEMpINVENITEM m_cInventory.GetItem pNetMsg->wItemPosXpNetMsg->wItemPosY );
        if ( !
    pINVENITEM )
        {
            
    MsgFB.emFB EMSMS_SEND_FB_NOITEM;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
            return 
    E_FAIL;
        }

        if ( 
    CheckCoolTimepINVENITEM->sItemCustom.sNativeID ) )    return E_FAIL;

        
    SITEM *pITEM GLItemMan::GetInstance().GetItem pINVENITEM->sItemCustom.sNativeID );
        if ( 
    pITEM->sBasicOp.emItemType!=ITEM_SMS )
        {
            
    MsgFB.emFB EMSMS_SEND_FB_BADITEM;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
            return 
    E_FAIL;
        }

        
    // DB¿¡ ÀúÀå¿äû
        
    CSendSMSpDBAction = new CSendSMSm_dwClientID,
                                            
    m_dwCharID,
                                            
    pNetMsg->dwReceiveChaNum,
                                            
    pNetMsg->szPhoneNumber,
                                            
    m_szName,
                                            
    pNetMsg->szSmsMsg,
                                            
    pNetMsg->wItemPosX,
                                            
    pNetMsg->wItemPosY );

        if( 
    GLGaeaServer::GetInstance().GetDBMan() )
        {
            
    GLGaeaServer::GetInstance().GetDBMan()->AddJobpDBAction );
        }

        return 
    S_OK;
    }

    // *****************************************************
    // Desc: SMS Àü¼Û °á°ú Ã³¸®
    // *****************************************************
    HRESULT GLChar::MsgSendSMSNET_MSG_GENERICnmg )
    {
        
    GLMSG::SNETPC_SEND_SMS_FROM_DB *pNetMsg = (GLMSG::SNETPC_SEND_SMS_FROM_DB *)nmg;

        
    // Å¬¶óÀÌ¾ðÆ®¿¡ Ã³¸® °á°ú Àü¼Û.
        
    GLMSG::SNETPC_SEND_SMS_FB MsgFB;

        if ( 
    pNetMsg->emFB == EMSMS_SEND_FROM_DB_FAIL )
        {
            
    MsgFB.emFB EMSMS_SEND_FROM_DB_FAIL;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
            return 
    S_FALSE;
        }

        
    MsgFB.emFB EMSMS_SEND_FB_OK;
        
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);

        
    DoDrugInvenItem pNetMsg->wPosXpNetMsg->wPosY );

        return 
    TRUE;
    }

    HRESULT GLChar::MsgLoudSpeaker NET_MSG_GENERICnmg )
    {
        
    GLMSG::SNETPC_CHAT_LOUDSPEAKER *pNetMsg = (GLMSG::SNETPC_CHAT_LOUDSPEAKER *) nmg;

        
    GLMSG::SNETPC_CHAT_LOUDSPEAKER_FB    NetMsgFB;

        
    bool bchannel_all(false);

        if ( 
    m_dwUserLvl USER_GM3 )
        {
            
    SINVENITEM *pINVENITEM m_cInventory.GetItem pNetMsg->wPosXpNetMsg->wPosY );
            if ( !
    pINVENITEM )
            {
                
    NetMsgFB.emFB EMCHAT_LOUDSPEAKER_NOITEM;
                
    GLGaeaServer::GetInstance().SENDTOCLIENT m_dwClientID, &NetMsgFB );
                return 
    S_OK;
            }

            if ( 
    CheckCoolTimepINVENITEM->sItemCustom.sNativeID ) )    return E_FAIL;

            
    SITEM *pITEM GLItemMan::GetInstance().GetItem pINVENITEM->sItemCustom.sNativeID );
            if ( !
    pITEM )
            {
                
    NetMsgFB.emFB EMCHAT_LOUDSPEAKER_NOITEM;
                
    GLGaeaServer::GetInstance().SENDTOCLIENT m_dwClientID, &NetMsgFB );
                return 
    S_OK;
            }

            if ( 
    pITEM->sBasicOp.emItemType!=ITEM_LOUDSPEAKER )
            {
                
    NetMsgFB.emFB EMCHAT_LOUDSPEAKER_NOITEM;
                
    GLGaeaServer::GetInstance().SENDTOCLIENT m_dwClientID, &NetMsgFB );
                return 
    S_OK;
            }

            if ( 
    IsCHATBLOCK() )    return S_FALSE;

            
    bchannel_all pITEM->sBasicOp.IsCHANNEL_ALL();

            if ( 
    m_sPMarket.IsOpen() ) 
            {
                
    DWORD wTurn m_cInventory.CountTurnItempINVENITEM->sItemCustom.sNativeID );
                
    DWORD wMarketTurn m_sPMarket.GetItemTurnNumpINVENITEM->sItemCustom.sNativeID ) ;

                if ( 
    wTurn <= wMarketTurn 
                {
                    
    NetMsgFB.emFB EMCHAT_LOUDSPEAKER_NOITEM;
                    
    GLGaeaServer::GetInstance().SENDTOCLIENT m_dwClientID, &NetMsgFB );
                    return 
    S_OK;
                }
            }

            
    //    [Àڽſ¡°Ô] Àι꠾ÆÀÌÅÆ ¼Ò¸ð½ÃÅ´.
            
    DoDrugInvenItem pNetMsg->wPosXpNetMsg->wPosY );
        }

        
    //    Note : È®¼º±â »ç¿ë.
        //
        
    GLMSG::SNETPC_CHAT_LOUDSPEAKER_AGT NetMsgAgt;
        
    StringCbCopyNetMsgAgt.szMSGCHAT_MSG_SIZE+1pNetMsg->szMSG);
        
    NetMsgAgt.bchannel_all bchannel_all;
        
    NetMsgAgt.sITEMLINK pNetMsg->sITEMLINK;
        
    GLGaeaServer::GetInstance().SENDTOAGENT m_dwClientID, &NetMsgAgt );

        return 
    S_OK;
    }


    HRESULT GLChar::MsgReqRebuildResultNET_MSG_GENERICnmg //sealed card 
    {
        
    GLMSG::SNET_REBUILD_RESULTpNetMsg = (GLMSG::SNET_REBUILD_RESULT*)nmg;

        switch( 
    pNetMsg->emResult )
        {
        case 
    EMREBUILD_RESULT_OPEN:
            {
                
    InitRebuildData();
                
    OpenRebuild();
            }
            break;

        case 
    EMREBUILD_RESULT_SUCCESS:    
            {
                if( 
    m_i64RebuildInput != m_i64RebuildCost || m_lnMoney m_i64RebuildCost )
                {
                    
    pNetMsg->emResult EMREBUILD_RESULT_MONEY;
                    
    GLGaeaServer::GetInstance().SENDTOCLIENTm_dwClientIDpNetMsg );
                    return 
    S_OK;
                }

                
    SITEMCUSTOM sRebuildItem GET_REBUILD_ITEM();
                
    SITEMpItem GLItemMan::GetInstance().GetItemsRebuildItem.sNativeID );
                if( !
    pItem )        return E_FAIL;

                
    SRANDOM_GENpRANDOM_SET GLItemMan::GetInstance().GetItemRandomOptsRebuildItem.sNativeID );
                if( !
    pRANDOM_SET )    return E_FAIL;

                if( 
    m_ItemRemodelPosX EM_INVENSIZE_X && m_ItemRemodelPosY EM_INVENSIZE_Y )
                {
                    
    GLMSG::SNET_INVEN_REMODELOPEN_FB MsgFB;

                    
    SINVENITEMpINVENITEM m_cInventory.GetItem m_ItemRemodelPosXm_ItemRemodelPosY );
                    if ( !
    pINVENITEM )
                    {
                        
    MsgFB.emFB EMREQ_REMODELOPEN_FB_NOITEM;
                        
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
                        return 
    E_FAIL;
                    }

                    if ( 
    CheckCoolTimepINVENITEM->sItemCustom.sNativeID ) )    return E_FAIL;

                    
    SITEM *pITEM GLItemMan::GetInstance().GetItem pINVENITEM->sItemCustom.sNativeID );
                    if ( 
    pITEM->sBasicOp.emItemType!=ITEM_REMODEL )
                    {
                        
    MsgFB.emFB EMREQ_REMODELOPEN_FB_NOITEM;
                        
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
                        return 
    E_FAIL;
                    }

                    
    //fix unli rando
                    
    BOOL bEraseRando DoDrugInvenItem m_ItemRemodelPosXm_ItemRemodelPosY );
                    if ( !
    bEraseRando )
                    {
                        
    SINVENITEMpinvenitemrando m_cInventory.FindItemITEM_REMODEL );
                        if ( 
    pinvenitemrando )
                        {
                            
    bEraseRando DoDrugInvenItem pinvenitemrando->wPosXpinvenitemrando->wPosY );
                        }

                        if ( !
    bEraseRando )
                        {
                            
    SITEMpholditemrando GET_SLOT_ITEMDATA SLOT_HOLD );
                            if ( 
    pholditemrando && pholditemrando->sBasicOp.emItemType==ITEM_REMODEL 
                            {
                                
    bEraseRando DoDrugSlotItem SLOT_HOLD );
                            }
                        }

                        if ( !
    bEraseRando )
                        {
                            
    CDebugSet::ToFileWithTime"randobug.txt""=============================");
                            
    CDebugSet::ToFileWithTime"randobug.txt""rando bug info start char:[%d] %s"m_dwCharIDm_szName );
                            
    CDebugSet::ToFileWithTime"randobug.txt""rando item not found! [%04d~%04d]",  m_ItemRemodelPosXm_ItemRemodelPosY );
                            
    CDebugSet::ToFileWithTime"randobug.txt""=============================");

                            
    GLMSG::SNET_INVEN_REMODELOPEN_FB netmsgerror;
                            
    netmsgerror.emFB EMREQ_REMODELOPEN_FB_NOITEM;
                            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&netmsgerror);
                            return 
    E_FAIL;
                        }
                    }

                    
    //fix unli sealed card
                    
    if ( pNetMsg->Data1.nOption != -|| pNetMsg->Data2.nOption != -)
                    {
                        
    BOOL bEraseSealed DoDrugInvenItemm_sRebuildSeal.wPosXm_sRebuildSeal.wPosY );

                        if ( !
    bEraseSealed )
                        {
                            
    SINVENITEMpinvenitemseal m_cInventory.FindItemITEM_SEALED_CARD);
                            if ( 
    pinvenitemseal )
                            {
                                
    bEraseSealed DoDrugInvenItem pinvenitemseal->wPosXpinvenitemseal->wPosY );
                            }

                            if ( !
    bEraseSealed )
                            {
                                
    SITEMpholditemseal GET_SLOT_ITEMDATA SLOT_HOLD );
                                if ( 
    pholditemseal && pholditemseal->sBasicOp.emItemType==ITEM_SEALED_CARD 
                                {
                                    
    bEraseSealed DoDrugSlotItem SLOT_HOLD );
                                }
                            }

                            if ( !
    bEraseSealed )
                            {
                                
    CDebugSet::ToFileWithTime"randobug.txt""=============================");
                                
    CDebugSet::ToFileWithTime"randobug.txt""rando bug info start char:[%d] %s"m_dwCharIDm_szName );
                                
    CDebugSet::ToFileWithTime"randobug.txt""seal item not found! [%04d~%04d]",  m_sRebuildSeal.wPosXm_sRebuildSeal.wPosY );
                                
    CDebugSet::ToFileWithTime"randobug.txt""=============================");

                                
    GLMSG::SNET_INVEN_REMODELOPEN_FB netmsgerror;
                                
    netmsgerror.emFB EMREQ_REMODELOPEN_FB_NOITEM;
                                
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&netmsgerror);
                                return 
    E_FAIL;
                            }
                        }
                    }

                    
    SINVENITEMpInvenItem m_cInventory.FindPosItem m_sRebuildSeal.wPosXm_sRebuildSeal.wPosY );
                    if ( !
    pInvenItem )
                        
    m_sRebuildSeal.RESET();
                }
                else
                {
                    
    CDebugSet::ToFileWithTime"randobug.txt""=============================");
                    
    CDebugSet::ToFileWithTime"randobug.txt""rando bug info start char:[%d] %s"m_dwCharIDm_szName );
                    
    CDebugSet::ToFileWithTime"randobug.txt""rando item invalid [%04d~%04d]",  m_ItemRemodelPosXm_ItemRemodelPosY );
                    
    CDebugSet::ToFileWithTime"randobug.txt""=============================");

                    
    GLMSG::SNET_INVEN_REMODELOPEN_FB netmsgerror;
                    
    netmsgerror.emFB EMREQ_REMODELOPEN_FB_NOITEM;
                    
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&netmsgerror);
                    return 
    E_FAIL;
                }
                
    /*else
                {
                    PGLCROW pCrow = m_pLandMan->GetCrow ( pNetMsg->dwNPCID );
                    if ( !pCrow )    
                        return E_FAIL;

                    float fDist = D3DXVec3Length ( &D3DXVECTOR3(m_vPos-pCrow->GetPosition()) );
                    float fTalkRange = (float) (pCrow->GetBodyRadius() + GETBODYRADIUS() + 30);
                    float fTalkableDis = fTalkRange + 20;

                    if ( fDist>fTalkableDis )
                        return E_FAIL;
                }*/

                
    {
                    
    CheckMoneyUpdatem_lnMoneym_i64RebuildCostFALSE"Rebuild Cost." );
                    
    m_bMoneyUpdate TRUE;

                    
    m_lnMoney -= m_i64RebuildCost;

                    
    GLMSG::SNETPC_UPDATE_MONEY NetMsgMoney;
                    
    NetMsgMoney.lnMoney m_lnMoney;
                    
    NetMsgMoney.lnVoteP m_lnVoteP;
                    
    NetMsgMoney.lnPremP m_lnPremP;
                    
    //add contributionpoints by CNDev
                    
    NetMsgMoney.lnContribP m_lnContribP;
                    
    GLGaeaServer::GetInstance().SENDTOCLIENTm_dwClientID, &NetMsgMoney );

                    
    GLITEMLMT::GetInstance().ReqMoneyExcID_CHARm_dwCharIDID_CHAR0, -m_i64RebuildCostEMITEM_ROUTE_NPCREMAKE );
                    
    GLITEMLMT::GetInstance().ReqMoneyExcID_CHARm_dwCharIDID_CHAR0m_lnMoneyEMITEM_ROUTE_CHAR );
                }

                
    float fDestroyRate seqrandom::getpercent();
                if( 
    fDestroyRate pRANDOM_SET->fD_point )
                {
                    
    GLITEMLMT::GetInstance().ReqItemRoutesRebuildItemID_CHARm_dwCharIDID_CHARm_dwCharIDEMITEM_ROUTE_DELETEsRebuildItem.wTurnNum );

                    
    m_cInventory.DeleteItemm_sRebuildItem.wPosXm_sRebuildItem.wPosY );

                    
    GLMSG::SNETPC_INVEN_DELETE NetMsg_Inven_Delete;
                    
    NetMsg_Inven_Delete.wPosX m_sRebuildItem.wPosX;
                    
    NetMsg_Inven_Delete.wPosY m_sRebuildItem.wPosY;
                    
    GLGaeaServer::GetInstance().SENDTOCLIENTm_dwClientID, &NetMsg_Inven_Delete );

                    
    pNetMsg->emResult EMREBUILD_RESULT_DESTROY;
                    
    GLGaeaServer::GetInstance().SENDTOCLIENTm_dwClientIDpNetMsg );
                }
                else
                {
                    
    SINVENITEMpInvenItem m_cInventory.GetItemm_sRebuildItem.wPosXm_sRebuildItem.wPosY );
                    if( 
    pInvenItem )
                    {
                        
    SITEMSEALDATA sData1 pNetMsg->Data1;
                        
    SITEMSEALDATA sData2 pNetMsg->Data2;

                        if ( 
    sData1.nOption != -|| sData2.nOption != -)
                        {
                            if ( 
    sData1.nOption != -&& !pInvenItem->sItemCustom.isExistStat( (BYTE)sData1.emOptsData1.cDataValue ) )
                            {
                                
    CDebugSet::ToFileWithTime"sealedbug.txt""=============================");
                                
    CDebugSet::ToFileWithTime"sealedbug.txt""option bug info start char:[%d] %s"m_dwCharIDm_szName );
                                
    CDebugSet::ToFileWithTime"sealedbug.txt""option item [%04d~%04d]"pInvenItem->sItemCustom.sNativeID.wMainIDpInvenItem->sItemCustom.sNativeID.wSubID );
                                
    CDebugSet::ToFileWithTime"sealedbug.txt""option not found on base item! option:%d value:%d"sData1.emOptsData1.cDataValue );
                                
    CDebugSet::ToFileWithTime"sealedbug.txt""option 1 option:%d value:%d"pInvenItem->sItemCustom.cOptTYPE1pInvenItem->sItemCustom.nOptVALUE1 );
                                
    CDebugSet::ToFileWithTime"sealedbug.txt""option 2 option:%d value:%d"pInvenItem->sItemCustom.cOptTYPE2pInvenItem->sItemCustom.nOptVALUE2 );
                                
    CDebugSet::ToFileWithTime"sealedbug.txt""option 3 option:%d value:%d"pInvenItem->sItemCustom.cOptTYPE3pInvenItem->sItemCustom.nOptVALUE3 );
                                
    CDebugSet::ToFileWithTime"sealedbug.txt""option 4 option:%d value:%d"pInvenItem->sItemCustom.cOptTYPE4pInvenItem->sItemCustom.nOptVALUE4 );
                                
    CDebugSet::ToFileWithTime"sealedbug.txt""=============================");

                                
    GLMSG::SNET_INVEN_REMODELOPEN_FB netmsgerror;
                                
    netmsgerror.emFB EMREQ_REMODELOPEN_FB_NOITEM;
                                
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&netmsgerror);
                                return 
    E_FAIL;
                            }

                            if ( 
    sData2.nOption != -&& !pInvenItem->sItemCustom.isExistStat( (BYTE)sData2.emOptsData2.cDataValue ) )
                            {
                                
    CDebugSet::ToFileWithTime"sealedbug.txt""=============================");
                                
    CDebugSet::ToFileWithTime"sealedbug.txt""option bug info start char:[%d] %s"m_dwCharIDm_szName );
                                
    CDebugSet::ToFileWithTime"sealedbug.txt""option item [%04d~%04d]"pInvenItem->sItemCustom.sNativeID.wMainIDpInvenItem->sItemCustom.sNativeID.wSubID );
                                
    CDebugSet::ToFileWithTime"sealedbug.txt""option not found on base item! option:%d value:%d"sData2.emOptsData2.cDataValue );
                                
    CDebugSet::ToFileWithTime"sealedbug.txt""option 1 option:%d value:%d"pInvenItem->sItemCustom.cOptTYPE1pInvenItem->sItemCustom.nOptVALUE1 );
                                
    CDebugSet::ToFileWithTime"sealedbug.txt""option 2 option:%d value:%d"pInvenItem->sItemCustom.cOptTYPE2pInvenItem->sItemCustom.nOptVALUE2 );
                                
    CDebugSet::ToFileWithTime"sealedbug.txt""option 3 option:%d value:%d"pInvenItem->sItemCustom.cOptTYPE3pInvenItem->sItemCustom.nOptVALUE3 );
                                
    CDebugSet::ToFileWithTime"sealedbug.txt""option 4 option:%d value:%d"pInvenItem->sItemCustom.cOptTYPE4pInvenItem->sItemCustom.nOptVALUE4 );
                                
    CDebugSet::ToFileWithTime"sealedbug.txt""=============================");

                                
    GLMSG::SNET_INVEN_REMODELOPEN_FB netmsgerror;
                                
    netmsgerror.emFB EMREQ_REMODELOPEN_FB_NOITEM;
                                
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&netmsgerror);
                                return 
    E_FAIL;
                            }

                            
    SITEMCUSTOM sCustom pInvenItem->sItemCustom;

                            
    SITEMCUSTOM sITEM_NEW;
                            
    sITEM_NEW.sNativeID     sCustom.sNativeID;
                            
    sITEM_NEW.nidDISGUISE    sCustom.nidDISGUISE;
                        
                            
    sITEM_NEW.tBORNTIME     sCustom.tBORNTIME;
                            
    sITEM_NEW.tDISGUISE     sCustom.tDISGUISE;

                            
    sITEM_NEW.cGenType         sCustom.cGenType;
                            
    sITEM_NEW.cChnID         sCustom.cChnID;
                            
    sITEM_NEW.cFieldID         sCustom.cFieldID;
                            
    sITEM_NEW.lnGenNum         sCustom.lnGenNum;

                            
    sITEM_NEW.cDAMAGE         sCustom.cDAMAGE;
                            
    sITEM_NEW.cDEFENSE         sCustom.cDEFENSE;
                            
                            
    sITEM_NEW.cRESIST_FIRE         sCustom.cRESIST_FIRE;
                            
    sITEM_NEW.cRESIST_ICE         sCustom.cRESIST_ICE;
                            
    sITEM_NEW.cRESIST_ELEC         sCustom.cRESIST_ELEC;
                            
    sITEM_NEW.cRESIST_POISON         sCustom.cRESIST_POISON;
                            
    sITEM_NEW.cRESIST_SPIRIT         sCustom.cRESIST_SPIRIT;
                            
                            
    sITEM_NEW.dwPetID             sCustom.dwPetID;
                            
    sITEM_NEW.dwVehicleID         sCustom.dwVehicleID;
                            
    sITEM_NEW.bVietnamGainItem  sCustom.bVietnamGainItem;
                            
    sITEM_NEW.bWrap                sCustom.bWrap;
                            
    sITEM_NEW.bNonDrop            sCustom.bNonDrop;
                            
    //sITEM_NEW.dwOwnerID         = sCustom.dwOwnerID;
                            //sITEM_NEW.wColor             = sCustom.wColor;

                            
    if( sITEM_NEW.GENERATE_RANDOM_OPT() )
                            {
                                if ( 
    sData1.nOption != -&& pInvenItem->sItemCustom.isExistStat( (BYTE)sData1.emOptsData1.cDataValue ) )
                                {
                                    
    sITEM_NEW.cOptTYPE1     sData1.emOpt;
                                    
    //sITEM_NEW.nOptVALUE1     = sData1.fValue;
                                    
    sITEM_NEW.nOptVALUE1     sData1.cDataValue;

                                    
    //if( sITEM_NEW.cOptTYPE1 == EMR_OPT_DAMAGE || sITEM_NEW.cOptTYPE1 == EMR_OPT_DEFENSE || sITEM_NEW.cOptTYPE1 == EMR_OPT_HITRATE || sITEM_NEW.cOptTYPE1 == EMR_OPT_AVOIDRATE )
                                    //    sITEM_NEW.nOptVALUE1 = sData1.fValue * 100.0f;
                                    
                                    
    if( sITEM_NEW.cOptTYPE1 == sITEM_NEW.cOptTYPE2)
                                    {
                                        
    sITEM_NEW.cOptTYPE2 0;
                                        
    sITEM_NEW.nOptVALUE2 0;
                                    }
                                    if( 
    sITEM_NEW.cOptTYPE1 == sITEM_NEW.cOptTYPE3)
                                    {
                                        
    sITEM_NEW.cOptTYPE3 0;
                                        
    sITEM_NEW.nOptVALUE3 0;
                                    }
                                    if( 
    sITEM_NEW.cOptTYPE1 == sITEM_NEW.cOptTYPE4)
                                    {
                                        
    sITEM_NEW.cOptTYPE4 0;
                                        
    sITEM_NEW.nOptVALUE4 0;
                                    }
                                }

                                if ( 
    sData2.nOption != -&& pInvenItem->sItemCustom.isExistStat( (BYTE)sData2.emOptsData2.cDataValue ) )
                                {
                                    
    sITEM_NEW.cOptTYPE2     sData2.emOpt;
                                    
    //sITEM_NEW.nOptVALUE2     = sData2.fValue;
                                    
    sITEM_NEW.nOptVALUE2     sData2.cDataValue;

                                    
    //if( sITEM_NEW.cOptTYPE2 == EMR_OPT_DAMAGE || sITEM_NEW.cOptTYPE2 == EMR_OPT_DEFENSE || sITEM_NEW.cOptTYPE2 == EMR_OPT_HITRATE || sITEM_NEW.cOptTYPE2 == EMR_OPT_AVOIDRATE )
                                    //    sITEM_NEW.nOptVALUE2 = sData2.fValue * 100.0f;
                                    
                                    
    if( sITEM_NEW.cOptTYPE2 == sITEM_NEW.cOptTYPE3)
                                    {
                                        
    sITEM_NEW.cOptTYPE3 0;
                                        
    sITEM_NEW.nOptVALUE3 0;
                                    }
                                    if( 
    sITEM_NEW.cOptTYPE2 == sITEM_NEW.cOptTYPE4)
                                    {
                                        
    sITEM_NEW.cOptTYPE4 0;
                                        
    sITEM_NEW.nOptVALUE4 0;
                                    }
                                }

                                
    GLITEMLMT::GetInstance().ReqRandomItemsITEM_NEW );
                            }

                            
    GLITEMLMT::GetInstance().ReqItemRoutesRebuildItemID_CHARm_dwCharIDID_CHARm_dwCharIDEMITEM_ROUTE_DELETEsRebuildItem.wTurnNum );

                            
    BOOL bDeleteOldItem m_cInventory.DeleteItemm_sRebuildItem.wPosXm_sRebuildItem.wPosY );
                            if ( !
    bDeleteOldItem )
                            {
                                
    CDebugSet::ToFileWithTime"randobug.txt""=============================");
                                
    CDebugSet::ToFileWithTime"randobug.txt""rando bug info start char:[%d] %s"m_dwCharIDm_szName );
                                
    CDebugSet::ToFileWithTime"randobug.txt""failure to delete rebuild item [%04d~%04d]",  m_sRebuildItem.wPosXm_sRebuildItem.wPosY );
                                
    CDebugSet::ToFileWithTime"randobug.txt""=============================");

                                
    GLMSG::SNET_INVEN_REMODELOPEN_FB netmsgerror;
                                
    netmsgerror.emFB EMREQ_REMODELOPEN_FB_NOITEM;
                                
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&netmsgerror);
                                return 
    E_FAIL;
                            }

                            
    GLMSG::SNETPC_INVEN_DELETE NetMsg_Inven_Delete;
                            
    NetMsg_Inven_Delete.wPosX m_sRebuildItem.wPosX;
                            
    NetMsg_Inven_Delete.wPosY m_sRebuildItem.wPosY;
                            
    GLGaeaServer::GetInstance().SENDTOCLIENTm_dwClientID, &NetMsg_Inven_Delete );

                            
    BOOL bInsertNewItem m_cInventory.InsertItem sITEM_NEWm_sRebuildItem.wPosXm_sRebuildItem.wPosY );
                            if ( !
    bInsertNewItem )
                            {
                                
    CDebugSet::ToFileWithTime"randobug.txt""=============================");
                                
    CDebugSet::ToFileWithTime"randobug.txt""rando bug info start char:[%d] %s"m_dwCharIDm_szName );
                                
    CDebugSet::ToFileWithTime"randobug.txt""failure to insert new item [%04d~%04d] [%04d~%04d]",  sITEM_NEW.sNativeID.wMainIDsITEM_NEW.sNativeID.wSubIDm_sRebuildItem.wPosXm_sRebuildItem.wPosY );
                                
    CDebugSet::ToFileWithTime"randobug.txt""=============================");

                                
    GLMSG::SNET_INVEN_REMODELOPEN_FB netmsgerror;
                                
    netmsgerror.emFB EMREQ_REMODELOPEN_FB_NOITEM;
                                
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&netmsgerror);
                                return 
    E_FAIL;
                            }

                            
    SINVENITEM *pInsertItem m_cInventory.GetItem m_sRebuildItem.wPosXm_sRebuildItem.wPosY );
                            if ( !
    pInsertItem )
                            {
                                
    CDebugSet::ToFileWithTime"randobug.txt""=============================");
                                
    CDebugSet::ToFileWithTime"randobug.txt""rando bug info start char:[%d] %s"m_dwCharIDm_szName );
                                
    CDebugSet::ToFileWithTime"randobug.txt""failure to find new item [%04d~%04d]"m_sRebuildItem.wPosXm_sRebuildItem.wPosY );
                                
    CDebugSet::ToFileWithTime"randobug.txt""=============================");

                                
    GLMSG::SNET_INVEN_REMODELOPEN_FB netmsgerror;
                                
    netmsgerror.emFB EMREQ_REMODELOPEN_FB_NOITEM;
                                
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&netmsgerror);
                                return 
    E_FAIL;
                            }

                            
    GLITEMLMT::GetInstance().ReqItemRoute pInsertItem->sItemCustomID_CHARm_dwCharIDID_CHARm_dwCharIDEMITEM_ROUTE_CHARpInsertItem->sItemCustom.wTurnNum );

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

                            
    pNetMsg->emResult EMREBUILD_RESULT_SUCCESS;
                            
    GLGaeaServer::GetInstance().SENDTOCLIENTm_dwClientIDpNetMsg );
                        }
                        else
                        {
                            
    pInvenItem->sItemCustom.GENERATE_RANDOM_OPTfalse );

                            
    GLITEMLMT::GetInstance().ReqRandomItemsRebuildItem );

                            
    GLMSG::SNET_INVEN_ITEM_UPDATE NetItemUpdate;
                            
    NetItemUpdate.wPosX m_sRebuildItem.wPosX;
                            
    NetItemUpdate.wPosY m_sRebuildItem.wPosY;
                            
    NetItemUpdate.sItemCustom pInvenItem->sItemCustom;
                            
    GLGaeaServer::GetInstance().SENDTOCLIENTm_dwClientID, &NetItemUpdate );

                            
    pNetMsg->emResult EMREBUILD_RESULT_SUCCESS;
                            
    GLGaeaServer::GetInstance().SENDTOCLIENTm_dwClientIDpNetMsg );
                        }
                    }
                }
            }
            break;

        case 
    EMREBUILD_RESULT_FAIL:
        case 
    EMREBUILD_RESULT_DESTROY:    
        case 
    EMREBUILD_RESULT_MONEY:    
        case 
    EMREBUILD_RESULT_CLOSE:    
            {
                
    InitRebuildData();
                
    CloseRebuild();

                
    m_ItemRemodelPosX EM_INVENSIZE_X;
                
    m_ItemRemodelPosY EM_INVENSIZE_Y;
            }
            break;
        }

        return 
    S_OK;
    }

    HRESULT GLChar::MsgReqGarbageResultNET_MSG_GENERICnmg )    // ITEMREBUILD_MARK
    {
        
    GLMSG::SNET_GARBAGE_RESULTpNetMsg = (GLMSG::SNET_GARBAGE_RESULT*)nmg;

        
    //if( m_ItemGarbagePosX < EM_INVENSIZE_X && m_ItemGarbagePosY < EM_INVENSIZE_Y )
        
    {
            
    GLMSG::SNET_GARBAGE_RESULT_FB MsgFB;
            
            
    SINVENITEMpINVENITEM_DEL m_cInventory.GetItem pNetMsg->wPosXpNetMsg->wPosY );

            if ( !
    pINVENITEM_DEL )
            {
                
    MsgFB.emResult EMGARBAGE_RESULT_FB_FAIL;
                
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
                return 
    E_FAIL;
            }

            
    SITEMpItem GLItemMan::GetInstance().GetItempINVENITEM_DEL->sItemCustom.sNativeID );
            if( !
    pItem //|| !pItem->sBasicOp.IsGarbage() )        
            
    {
                
    MsgFB.emResult EMGARBAGE_RESULT_FB_ITEMTYPE;
                
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
                return 
    E_FAIL;
            }

            
    // ÆÖÄ«µåÀ̸鼭 ÆÖÀ̠Ȱ¼ºÈ­ µÇ¾î ÀÖÀ¸¸é »èÁ¦ÇÒ¼ö ¾ø´Ù.
            
    if ( pItem->sBasicOp.emItemType == ITEM_PET_CARD )
            {
                
    PGLPETFIELD pMyPet GLGaeaServer::GetInstance().GetPET m_dwPetGUID );
                if ( 
    pMyPet && pMyPet->IsValid () && pINVENITEM_DEL->sItemCustom.dwPetID == pMyPet->m_dwPetID 
                {
                    
    MsgFB.emResult EMGARBAGE_RESULT_FB_FAIL;
                    
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
                    return 
    E_FAIL;
                }
            }
            
            
    /*SINVENITEM* pINVENITEM = m_cInventory.GetItem ( m_ItemGarbagePosX, m_ItemGarbagePosY );
            if ( !pINVENITEM )
            {
                MsgFB.emResult = EMGARBAGE_RESULT_FB_NOITEM;
                GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
                return E_FAIL;
            }

            if ( CheckCoolTime( pINVENITEM->sItemCustom.sNativeID ) )    return E_FAIL;

            SITEM *pITEM = GLItemMan::GetInstance().GetItem ( pINVENITEM->sItemCustom.sNativeID );
            if ( !pITEM || pITEM->sBasicOp.emItemType!=ITEM_GARBAGE_CARD )
            {
                MsgFB.emResult = EMGARBAGE_RESULT_FB_NOITEM;
                GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
                return E_FAIL;
            }*/

            
    DoDrugInvenItem m_ItemGarbagePosXm_ItemGarbagePosY );

            
    GLITEMLMT::GetInstance().ReqItemRoutepINVENITEM_DEL->sItemCustomID_CHARm_dwCharIDID_CHARm_dwCharIDEMITEM_ROUTE_GARBAGEpINVENITEM_DEL->sItemCustom.wTurnNum );

            
            {
                
    // Æê Ä«µå Àϰæ¿ì
                
    if ( pItem->sBasicOp.emItemType == ITEM_PET_CARD && pINVENITEM_DEL->sItemCustom.dwPetID != )
                {
                    
    PGLPETFIELD pMyPet m_pGLGaeaServer->GetPET m_dwPetGUID );

                    if ( 
    pMyPet && pINVENITEM_DEL->sItemCustom.dwPetID == pMyPet->m_dwPetID 
                    {
                        
    m_pGLGaeaServer->ReserveDropOutPet SDROPOUTPETINFO(pMyPet->m_dwGUID,true,false) );

                            
    // ÆÖÀÇ ¾Ç¼¼»ç¸®¸¦ °Ë»çÇÑ´Ù.
                        
    pMyPet->UpdateTimeLmtItem this );

                            
    // ³Ö¾îÁÙ²¨ ³Ö¾îÁØ´Ù.
                        
    for ( WORD i 0ACCETYPESIZE; ++)
                        {
                            
    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 );
                                }
                            }
                        }

                        
    CDeletePetpDeletePet = new CDeletePet m_dwCharIDpINVENITEM_DEL->sItemCustom.dwPetID );
                        
    GLDBManpDBMan m_pGLGaeaServer->GetDBMan ();
                        if ( 
    pDBMan pDBMan->AddJob pDeletePet );
                        
                        
    // ÆÖÀÌ »èÁ¦µÇ¸é ºÎȰÁ¤º¸¸¦ Å¬¶óÀÌ¾ðÆ®¿¡ ¾Ë·ÁÁÜ.
                        
    CGetRestorePetList *pGetRestorePetList = new CGetRestorePetList m_dwCharIDm_dwClientID );
                        if ( 
    pDBMan pDBMan->AddJob pGetRestorePetList );
                    }
                    else
                    {
                        
    // ¾Ç¼¼»ç¸®¸¦ Ã¼Å©ÈÄ ÆÖÀ» DB¿¡¼­ »èÁ¦ÇØÁØ´Ù.
                        
    GLPETpNewPet = new GLPET ();
                        
    CGetPetpGetPet = new CGetPet pNewPet
                                                            
    pINVENITEM_DEL->sItemCustom.dwPetID
                                                            
    m_dwClientID
                                                            
    m_dwCharID,
                                                            
    pINVENITEM_DEL->wPosX,
                                                            
    pINVENITEM_DEL->wPosY,
                                                            
    true );
                        
    GLDBManpDBMan m_pGLGaeaServer->GetDBMan ();
                        if ( 
    pDBMan pDBMan->AddJob pGetPet );
                    }
                }
                
    // Å»°ÍÀÏ °æ¿ì
                
    if ( pItem->sBasicOp.emItemType == ITEM_VEHICLE && pINVENITEM_DEL->sItemCustom.dwVehicleID != )
                {
                    
    // ¾Ç¼¼»ç¸®¸¦ Ã¼Å©ÈÄ Å»°ÍÀ» DB¿¡¼­ »èÁ¦ÇØÁØ´Ù.
                    
    GLVEHICLEpNewVehicle = new GLVEHICLE();
                    
    CGetVehiclepGetVehicle = new CGetVehicle pNewVehicle
                                                    
    pINVENITEM_DEL->sItemCustom.dwVehicleID
                                                    
    m_dwClientID,
                                                    
    m_dwCharID
                                                    
    true );
                    
    GLDBManpDBMan m_pGLGaeaServer->GetDBMan ();
                    if ( 
    pDBMan pDBMan->AddJob pGetVehicle );        
                }
            }

            
    // Àκ¥Å丮¿¡¼­ ¾ÆÀÌÅÛ Á¦°Å
            
    m_cInventory.DeleteItempNetMsg->wPosXpNetMsg->wPosY );

            
    MsgFB.emResult EMGARBAGE_RESULT_FB_OK;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);

            
    // »èÁ¦ÇÑ ¾ÆÀÌÅÛ Á¦°Å
            
    GLMSG::SNETPC_INVEN_DELETE NetMsg_Inven_Delete;
            
    NetMsg_Inven_Delete.wPosX pNetMsg->wPosX;
            
    NetMsg_Inven_Delete.wPosY pNetMsg->wPosY;
            
    GLGaeaServer::GetInstance().SENDTOCLIENTm_dwClientID, &NetMsg_Inven_Delete );    
            
            
    m_ItemGarbagePosX EM_INVENSIZE_X;
            
    m_ItemGarbagePosY EM_INVENSIZE_Y;

        }    

        return 
    S_OK;
    }

    HRESULT GLChar::MsgReqRebuildMoveItemNET_MSG_GENERICnmg )
    {
        
    GLMSG::SNET_REBUILD_MOVE_ITEMpNetMsg = (GLMSG::SNET_REBUILD_MOVE_ITEM*)nmg;
        
    GLMSG::SNET_REBUILD_MOVE_ITEM NetMsg;

        
    m_sRebuildItem.RESET();

        if( 
    pNetMsg->wPosX != USHRT_MAX && pNetMsg->wPosY != USHRT_MAX )
        {
            
    SINVENITEMpResistItem m_cInventory.GetItempNetMsg->wPosXpNetMsg->wPosY );
            if( 
    pResistItem )
            {
                
    // ÀåÂø ¾ÆÀÌÅÛÀ̾î¾ß ¹Ù²Ü ¼ö ÀÖ´Ù
                
    SITEMpItem GLItemMan::GetInstance().GetItempResistItem->sItemCustom.sNativeID );
                if( 
    pItem && pItem->sBasicOp.emItemType == ITEM_SUIT )
                {
                    
    // ·£´ý¿É¼Ç ÆÄÀÏÀÌ ÁöÁ¤µÇ¾î ÀÖ¾î¾ß °¡´ÉÇÏ´Ù
                    
    if( strlenpItem->sRandomOpt.szNAME ) > )
                    {
                        
    NetMsg.wPosX pNetMsg->wPosX;
                        
    NetMsg.wPosY pNetMsg->wPosY;

                        
    m_sRebuildItem.SETNetMsg.wPosXNetMsg.wPosY );
                    }
                }
            }
        }
        
    GLGaeaServer::GetInstance().SENDTOCLIENTm_dwClientID, &NetMsg );

        
    // °³Á¶ ºñ¿ë Àü¼Û
        
    MsgReqRebuildCostMoney();

        return 
    S_OK;
    }

    HRESULT GLChar::MsgReqRebuildMoveSealNET_MSG_GENERICnmg )
    {
        
    GLMSG::SNET_REBUILD_MOVE_SEALpNetMsg = (GLMSG::SNET_REBUILD_MOVE_SEAL*)nmg;
        
    GLMSG::SNET_REBUILD_MOVE_SEAL NetMsg;

        
    m_sRebuildSeal.RESET();
        
    m_wSealType 0;

        if( 
    pNetMsg->wPosX != USHRT_MAX && pNetMsg->wPosY != USHRT_MAX )
        {
            
    SINVENITEMpResistItem m_cInventory.GetItempNetMsg->wPosXpNetMsg->wPosY );
            if( 
    pResistItem )
            {
                
    SITEMpItem GLItemMan::GetInstance().GetItempResistItem->sItemCustom.sNativeID );
                if( 
    pItem && pItem->sBasicOp.emItemType == ITEM_SEALED_CARD )
                {
                    
    NetMsg.wPosX pNetMsg->wPosX;
                    
    NetMsg.wPosY pNetMsg->wPosY;

                    
    m_sRebuildSeal.SETNetMsg.wPosXNetMsg.wPosY );
                    
    m_wSealType pItem->sSuitOp.wReModelNum;
                }
            }
        }

        
    GLGaeaServer::GetInstance().SENDTOCLIENTm_dwClientID, &NetMsg );

        return 
    S_OK;
    }
    HRESULT GLChar::MsgReqRebuildCostMoney()
    {
        
    GLMSG::SNET_REBUILD_COST_MONEY NetMsg;

        
    // °³Á¶ ¾ÆÀÌÅÛÀÌ ¾øÀ¸¹Ç·Î 0À» Àü¼ÛÇÑ´Ù
        
    if( !m_sRebuildItem.VALID() )
        {
            
    GLGaeaServer::GetInstance().SENDTOCLIENTm_dwClientID, &NetMsg );
            return 
    S_OK;
        }

        
    // °³Á¶Ã¢¿¡ ¾ÆÀÌÅÛ ¿Ã¸±¶§ Á¡°ËÇßÀ¸¹Ç·Î ÀÌ·± °æ¿ì´Â ¹ß»ýÇÏÁö ¸»¾Æ¾ßÇÑ´Ù
        
    SITEMCUSTOM sRebuildItem GET_REBUILD_ITEM();
        
    SITEMpItem GLItemMan::GetInstance().GetItemsRebuildItem.sNativeID );
        if( !
    pItem )
        {
            
    GLGaeaServer::GetInstance().SENDTOCLIENTm_dwClientID, &NetMsg );
            return 
    S_OK;
        }

        
    // °³Á¶Ã¢¿¡ ¾ÆÀÌÅÛ ¿Ã¸±¶§ Á¡°ËÇßÀ¸¹Ç·Î ÀÌ·± °æ¿ì´Â ¹ß»ýÇÏÁö ¸»¾Æ¾ßÇÑ´Ù
        
    SRANDOM_GENpRANDOM_SET GLItemMan::GetInstance().GetItemRandomOptsRebuildItem.sNativeID );
        if( !
    pRANDOM_SET )
        {
            
    GLGaeaServer::GetInstance().SENDTOCLIENTm_dwClientID, &NetMsg );
            return 
    S_OK;
        }

        
    m_i64RebuildCost = (LONGLONG)( pItem->sBasicOp.dwBuyPrice pRANDOM_SET->fS_value );

        
    NetMsg.i64CostMoney m_i64RebuildCost;

        
    GLGaeaServer::GetInstance().SENDTOCLIENTm_dwClientID, &NetMsg );

        return 
    S_OK;
    }

    HRESULT GLChar::MsgReqRebuildInputMoneyNET_MSG_GENERICnmg )
    {
        
    GLMSG::SNET_REBUILD_INPUT_MONEYpNetMsg = (GLMSG::SNET_REBUILD_INPUT_MONEY*)nmg;

        
    m_i64RebuildInput = (LONGLONG)max0pNetMsg->i64InputMoney );
        
    m_i64RebuildInput = (LONGLONG)minm_i64RebuildInputm_lnMoney );

        
    pNetMsg->i64InputMoney m_i64RebuildInput;

        
    GLGaeaServer::GetInstance().SENDTOCLIENTm_dwClientIDpNetMsg );

        return 
    S_OK;
    }

    HRESULT    GLChar::MsgGiveFood NET_MSG_GENERICnmg )
    {
        
    GLMSG::SNETPET_REQ_GIVEFOODpNetMsg = ( GLMSG::SNETPET_REQ_GIVEFOOD* ) nmg;
        
        
    GLMSG::SNETPET_REQ_GIVEFOOD_FB NetMsgFB;
        
    SNATIVEID sNativeID;

        
    SINVENITEMpInvenItem m_cInventory.FindPosItem pNetMsg->wPosXpNetMsg->wPosY );
        if ( !
    pInvenItem 
        {
            
    NetMsgFB.emFB EMPET_REQ_GIVEFOOD_FB_INVALIDCARD;
            return 
    E_FAIL;
        }

        
    SITEMpItem GLItemMan::GetInstance().GetItem pInvenItem->sItemCustom.sNativeID );
        if ( !
    pItem 
        {
            
    NetMsgFB.emFB EMPET_REQ_GIVEFOOD_FB_INVALIDCARD;
            return 
    E_FAIL;
        }

        
    // ÆÖÄ«µå ¿©ºÎ Ã¼Å©
        
    if ( pItem->sBasicOp.emItemType != ITEM_PET_CARD )    
        {
            
    NetMsgFB.emFB EMPET_REQ_GIVEFOOD_FB_INVALIDCARD;
            return 
    E_FAIL;
        }

        
    SITEMpHold GET_SLOT_ITEMDATA SLOT_HOLD );
        if ( !
    pHold 
        {
            
    NetMsgFB.emFB EMPET_REQ_GIVEFOOD_FB_INVALIDFOOD;
            return 
    E_FAIL;
        }

        if ( 
    CheckCoolTimepHold->sBasicOp.sNativeID ) ) return E_FAIL;

        
    // »ç·á ¿©ºÎ Ã¼Å©
        
    if ( pHold->sBasicOp.emItemType != ITEM_PET_FOOD )    
        {
            
    NetMsgFB.emFB EMPET_REQ_GIVEFOOD_FB_INVALIDFOOD;
            return 
    E_FAIL;
        }

        
    // ¾ÆÀÌÅÛ Á¤º¸°¡ ¼­·Î Æ²¸®¸é ½ÇÇàÇÏÁö ¾Ê´Â´Ù.
        
    SITEMpPutOnItem GLItemMan::GetInstance().GetItem m_PutOnItems[SLOT_HOLD].sNativeID );
        if( 
    pHold != pPutOnItem )
        {
            
    NetMsgFB.emFB EMPET_REQ_GIVEFOOD_FB_INVALIDFOOD;
            return 
    E_FAIL;
        }

        
    sNativeID pHold->sBasicOp.sNativeID;

        switch ( 
    pHold->sDrugOp.emDrug )
        {
        case 
    ITEM_DRUG_HP:
            {
                
    PGLPETFIELD pMyPet GLGaeaServer::GetInstance().GetPET m_dwPetGUID );

                
    // Logic ¿¡ ÆÖÀÌ ÀÖ´Ù¸é
                
    if ( pMyPet && pMyPet->m_dwPetID == pInvenItem->sItemCustom.dwPetID )
                {
                    
    // Æê »ç·á¸Ô±â ÀÌÀü ·Î±×
                    
    GLITEMLMT::GetInstance().ReqPetAction(    pMyPet->m_dwPetID
                                                            
    pInvenItem->sItemCustom.sNativeID
                                                            
    EMPET_ACTION_FOOD_BEFORE
                                                            
    pMyPet->m_nFull );

                    
    bool bOK pMyPet->IncreaseFull pHold->sDrugOp.wCureVolumepHold->sDrugOp.bRatio );
                    if ( !
    bOK ) return E_FAIL;
                    
                    if ( 
    pMyPet->IsValid () )    pMyPet->m_fTIMER 0.0f;

                    
    DoDrugSlotItem SLOT_HOLD );

                    
    // Æê »ç·á¸Ô±â ÀÌÈÄ ·Î±×
                    
    GLITEMLMT::GetInstance().ReqPetAction(    pMyPet->m_dwPetID
                                                            
    pInvenItem->sItemCustom.sNativeID
                                                            
    EMPET_ACTION_FOOD_AFTER
                                                            
    pMyPet->m_nFull );

                    
    // ÆÖ¿¡°Ô ¸ÔÀ̸¦ ÁØ´Ù.
                    
    NetMsgFB.emFB       EMPET_REQ_GIVEFOOD_FB_OK;
                    
    NetMsgFB.dwPetID   pMyPet->m_dwPetID;
                    
    NetMsgFB.sNativeID sNativeID;
                    
    NetMsgFB.nFull       pMyPet->m_nFull;
                    
    GLGaeaServer::GetInstance().SENDTOCLIENT m_dwClientID, &NetMsgFB );
                }
                
    // ¾ÆÁ÷ Logic ¿¡ ÆÖÀÌ ¾ø´Ù¸é
                
    else
                {
                    
    // ÆÖ »ý¼º¿©ºÎ È®ÀÎ
                    
    if (pInvenItem->sItemCustom.dwPetID <= )
                    {
                        
    GLGaeaServer::GetInstance().GetConsoleMsg()->Write LOG_TEXT_CONSOLE"Invalid ID, PetID %d dwClientID %d"
                            
    pInvenItem->sItemCustom.dwPetIDm_dwClientID );
                        return 
    E_FAIL;
                    }

                    
    // ÆÖÀÇ Æ÷¸¸°¨À» °¡Á®¿Í¼­ °»½ÅÇÏ°í ´Ù½Ã DB¿¡ ÀúÀåÇϴ ÄÚµå
                    
    CGetPetFullpDbAction = new CGetPetFull m_dwCharID
                                                               
    pInvenItem->sItemCustom.dwPetID
                                                               
    m_dwClientID,
                                                               
    pHold->sDrugOp.wCureVolume
                                                               
    pHold->sDrugOp.bRatio,
                                                               
    sNativeID,
                                                               
    pNetMsg->emPetTYPE );

                    
    GLDBManpDBMan GLGaeaServer::GetInstance().GetDBMan ();
                    if ( 
    pDBMan pDBMan->AddJob pDbAction );
                }
            }
            break;

        default:
            break;
        }

        return 
    S_OK;
    }

    HRESULT GLChar::MsgGetPetFullFromDB NET_MSG_GENERICnmg )
    {
        
    GLMSG::SNETPET_REQ_GETFULL_FROMDB_FBpIntMsg = ( GLMSG::SNETPET_REQ_GETFULL_FROMDB_FB* ) nmg;
        switch ( 
    pIntMsg->emFB )
        {
        case 
    EMPET_REQ_GETFULL_FROMDB_FAIL:
            {
                
    GLMSG::SNETPET_REQ_GIVEFOOD_FB NetMsgFB;
                
    NetMsgFB.emFB EMPET_REQ_GETFULL_FROMDB_FAIL;
                
    GLGaeaServer::GetInstance().SENDTOCLIENT m_dwClientID, &NetMsgFB );
            }
            break;

        case 
    EMPET_REQ_GETFULL_FROMDB_OK:
            {
                
    //    ¼Õ¿¡ µç ¾ÆÀÌÅÛ È®ÀÎÇÑ´Ù.
                //    ¾ÆÀÌÅÛÀÌ ¹Ù²î´Â °æ¿ì°¡ ÀÖ´Ù.
                
    SITEMpHold GET_SLOT_ITEMDATA SLOT_HOLD );
                if ( !
    pHold 
                {
                    
    GLGaeaServer::GetInstance().GetConsoleMsg()->Write LOG_TEXT_CONSOLE
                        
    "Pet Give Full Error CharID : %d"m_dwCharID );
                        
                    return 
    E_FAIL;
                }

                if (  
    pHold->sBasicOp.emItemType != ITEM_PET_FOOD || pHold->sBasicOp.sNativeID != pIntMsg->sNativeID 
                {
                    
    GLGaeaServer::GetInstance().GetConsoleMsg()->Write LOG_TEXT_CONSOLE
                        
    "Pet Give Full Error CharID : %d, Item %d/%d"m_dwCharID,
                        
    pHold->sBasicOp.sNativeID.wMainIDpHold->sBasicOp.sNativeID.wSubID  );
                        
                    return 
    E_FAIL;

                }

                
    // Æê Æ÷¸¸°¨ ÀÌÀü ·Î±×
                
    GLITEMLMT::GetInstance().ReqPetAction(    pIntMsg->dwPetID
                                                        
    pIntMsg->sNativeID,
                                                        
    EMPET_ACTION_FOOD_BEFORE
                                                        
    pIntMsg->nFull );

                
    int nFull pIntMsg->nFull;
                
    int nMaxFull GLCONST_PET::pGLPET[pIntMsg->emType]->m_nFull;
                if ( 
    nFull >= nMaxFull ) break;

                if ( 
    pIntMsg->bRatio )
                {
                    
    nFull += ( nMaxFull*pIntMsg->wCureVolume )/100;
                    if ( 
    nFull nMaxFull nFull nMaxFull;
                }
                else
                {
                    
    nFull += pIntMsg->wCureVolume;
                    if ( 
    nFull nMaxFull nFull nMaxFull;
                }

                
    CSetPetFullpDbAction = new CSetPetFullm_dwCharIDpIntMsg->dwPetIDnFull );
                
    GLDBManpDbMan GLGaeaServer::GetInstance().GetDBMan ();
                if ( 
    pDbMan pDbMan->AddJob pDbAction );
                
    DoDrugSlotItem SLOT_HOLD );

                
    // Æê Æ÷¸¸°¨ ÀÌÀü ·Î±×
                
    GLITEMLMT::GetInstance().ReqPetAction(    pIntMsg->dwPetID,
                                                        
    pIntMsg->sNativeID,
                                                        
    EMPET_ACTION_FOOD_AFTER,
                                                        
    nFull );

                
    GLMSG::SNETPET_REQ_GIVEFOOD_FB NetMsgFB;
                
    NetMsgFB.emFB       EMPET_REQ_GIVEFOOD_FB_OK;
                
    NetMsgFB.dwPetID   pIntMsg->dwPetID;
                
    NetMsgFB.sNativeID pIntMsg->sNativeID;
                
    NetMsgFB.nFull       nFull;
                
    GLGaeaServer::GetInstance().SENDTOCLIENT m_dwClientID, &NetMsgFB );
            }
        }

        return 
    S_OK;
    }

    HRESULT GLChar::MsgReqMGameOddEvenEventNET_MSG_GENERICnmg )
    {
        
    GLMSG::SNETPC_MGAME_ODDEVENpNetMsg = ( GLMSG::SNETPC_MGAME_ODDEVEN* )nmg;
        
    GLMSG::SNETPC_MGAME_ODDEVEN_FB NetMsgFB;

        
    // È¦Â¦°ÔÀÓNPC À¯È¿¼º Ã¼Å©
        
    PGLCROW pCrow m_pLandMan->GetCrow pNetMsg->dwNPCID );
        if ( !
    pCrow )
        {
            
    NetMsgFB.emResult EMMGAME_ODDEVEN_FB_FAIL;
            
    GLGaeaServer::GetInstance().SENDTOCLIENTm_dwClientID, &NetMsgFB );

            return 
    E_FAIL;
        }

        
    float fDist D3DXVec3Length ( &D3DXVECTOR3(m_vPos-pCrow->GetPosition()) );
        
    float fTalkRange = (float) (pCrow->GetBodyRadius() + GETBODYRADIUS() + 30);
        
    float fTalkableDis fTalkRange 20;

        
    // È¦Â¦°ÔÀÓNPC °Å¸® Ã¼Å©
        
    if ( fDist>fTalkableDis )
        {
            
    NetMsgFB.emResult EMMGAME_ODDEVEN_FB_FAIL;
            
    GLGaeaServer::GetInstance().SENDTOCLIENTm_dwClientID, &NetMsgFB );

            return 
    E_FAIL;
        }

        switch( 
    pNetMsg->emEvent )
        {
        case 
    EMMGAME_ODDEVEN_OK:        return MGOddEvenOK(pNetMsg);
        case 
    EMMGAME_ODDEVEN_CANCEL:    return MGOddEvenCANCEL(pNetMsg);
        case 
    EMMGAME_ODDEVEN_SELECT:    return MGOddEvenSelect(pNetMsg);
        case 
    EMMGAME_ODDEVEN_AGAIN_OK:    return MGOddEvenAGAIN(pNetMsg);
        case 
    EMMGAME_ODDEVEN_SHUFFLE:    return MGOddEvenShuffle(pNetMsg);
        case 
    EMMGAME_ODDEVEN_FINISH:    return MGOddEvenFinish(pNetMsg);
        default:
            {
                
    // ÀûÀýÇÑ À̺¥Æ®°¡ ¾Æ´Ï¶ó¼­ °ÔÀÓ Ãë¼Ò
                
    NetMsgFB.emResult EMMGAME_ODDEVEN_FB_FAIL;
                
    GLGaeaServer::GetInstance().SENDTOCLIENTm_dwClientID, &NetMsgFB );

                return 
    S_FALSE;
            }
            break;
        }

        return 
    S_OK;
    }


    HRESULT GLChar::MsgReqItemMixNET_MSG_GENERICnmg )
    {
        
    GLMSG::SNET_INVEN_ITEM_MIXpNetMsg = (GLMSG::SNET_INVEN_ITEM_MIX*)nmg;
        
    GLMSG::SNET_INVEN_ITEM_MIX_FB    NetMsgFB;


        
    SINVENITEMpInvenItem[ITEMMIX_ITEMNUM];

        
    //    NPCÈ®ÀÎ
            // NPC Ã¼Å© 
        
        
        //    Á¶ÇÕ È®ÀÎ
        
    const ITEM_MIXpItemMix GLItemMixMan::GetInstance().GetItemMixpNetMsg->dwKey );
        if ( !
    pItemMix 
        {
            
    NetMsgFB.emFB EMITEM_MIX_FB_NOMIX;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
            return 
    E_FAIL;
        }

        
    //    ±Ý¾× È®ÀΠ
        
    if( m_lnMoney pItemMix->dwPrice )
        {
            
    NetMsgFB.emFB EMITEM_MIX_FB_NOMONEY;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
            return 
    E_FAIL;
        }

        
    //    Àκ¥ ¾ÆÀÌÅÛ È®ÀÎ
        
    for ( int i =0ITEMMIX_ITEMNUM; ++
        {
            if( !
    pNetMsg->sInvenPos[i].VALID() ) continue;
            
            
    pInvenItem[i] = m_cInventory.GetItem pNetMsg->sInvenPos[i].wPosXpNetMsg->sInvenPos[i].wPosY );
            if ( !
    pInvenItem[i] ) 
            {
                
    NetMsgFB.emFB EMITEM_MIX_FB_NOITEM;
                
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
                return 
    E_FAIL;
            }

            
    SITEMpItem GLItemMan::GetInstance().GetItempInvenItem[i]->sItemCustom.sNativeID );

            if ( !
    pItem 
            {
                
    NetMsgFB.emFB EMITEM_MIX_FB_NOITEM;
                
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
                return 
    E_FAIL;
            }
        }


        for ( 
    int i =0ITEMMIX_ITEMNUM; ++
        {
            if ( 
    pItemMix->sMeterialItem[i].sNID == NATIVEID_NULL() ) continue;

            if ( 
    pItemMix->sMeterialItem[i].nNum != pInvenItem[i]->sItemCustom.wTurnNum )
            {
                
    NetMsgFB.emFB EMITEM_MIX_FB_NOMIXNUM;
                
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
                return 
    E_FAIL;
            }
        }


        
    //    °á°ú ¾ÆÀÌÅ۠üũ
        
    SITEMpItemResult GLItemMan::GetInstance().GetItempItemMix->sResultItem.sNID );
        if ( !
    pItemResult 
        {
            
    NetMsgFB.emFB EMITEM_MIX_FB_NOITEM;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
            return 
    E_FAIL;
        }


        
    WORD wInsertPosXwInsertPosY;
        
    BOOL bOk m_cInventory.FindInsrtable pItemResult->sBasicOp.wInvenSizeXpItemResult->sBasicOp.wInvenSizeYwInsertPosXwInsertPosY );
        if ( !
    bOk )
        {
            
    //    ºÒ°¡´ÉÇÑ °æ¿ì ÀÔ´Ï´Ù.
            
    NetMsgFB.emFB EMITEM_MIX_FB_NOINVEN;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
            return 
    E_FAIL;    //    Àκ¥ °ø°£ ºÎÁ·À¸·Î µÇµ¹¸² ½ÇÆÐ.
        
    }

        
    GLMSG::SNETPC_INVEN_DELETE NetMsg_Inven_Delete;

        
    //    Á¶ÇÕ ¾ÆÀÌÅÛ »èÁ¦
        
    for ( int i =0ITEMMIX_ITEMNUM; ++)
        {
            if( !
    pNetMsg->sInvenPos[i].VALID() ) continue;

            
    GLITEMLMT::GetInstance().ReqItemRoutepInvenItem[i]->sItemCustomID_CHARm_dwCharIDID_CHAR0
                
    EMITEM_ROUTE_ITEMMIXpInvenItem[i]->sItemCustom.wTurnNum );
            
            
    m_cInventory.DeleteItempInvenItem[i]->wPosXpInvenItem[i]->wPosY );
            
            
    NetMsg_Inven_Delete.wPosX pNetMsg->sInvenPos[i].wPosX;
            
    NetMsg_Inven_Delete.wPosY pNetMsg->sInvenPos[i].wPosY;
            
    GLGaeaServer::GetInstance().SENDTOCLIENTm_dwClientID, &NetMsg_Inven_Delete );    
        }

        
    //    ¼ÒÁö±Ý 
        
    if ( pItemMix->dwPrice )
        {
            
    CheckMoneyUpdatem_lnMoneypItemMix->dwPriceFALSE"ITEM_MIX" );
            
    m_bMoneyUpdate TRUE;

            
    m_lnMoney -= pItemMix->dwPrice;

            
    GLMSG::SNETPC_UPDATE_MONEY NetMsgMoney;
            
    NetMsgMoney.lnMoney m_lnMoney;
            
    //add money 2
            
    NetMsgMoney.lnVoteP m_lnVoteP;
            
    //add money 3
            
    NetMsgMoney.lnPremP m_lnPremP;
            
    //add contributionpoints by CNDev
            
    NetMsgMoney.lnContribP m_lnContribP;
            
    GLGaeaServer::GetInstance().SENDTOCLIENTm_dwClientID, &NetMsgMoney );
        }

        
    //    ½ÇÆÐÇßÀ» °æ¿ì
        
    float fRate = (float)pItemMix->dwRate;
        if ( !
    RANDOM_GENfRate ) )
        {
            
    NetMsgFB.emFB EMITEM_MIX_FB_FAIL;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
            return 
    S_OK;    
        }

        
    //    °á°ú ¾ÆÀÌÅÛ »ý¼º
        
    SITEMCUSTOM sITEM_NEW;
        
    sITEM_NEW.sNativeID pItemMix->sResultItem.sNID;
        
    sITEM_NEW.tBORNTIME CTime::GetCurrentTime().GetTime();
        
    sITEM_NEW.wTurnNum pItemMix->sResultItem.nNum;
        
    sITEM_NEW.cGenType EMGEN_ITEMMIX;
        
    sITEM_NEW.cChnID = (BYTE)m_pGLGaeaServer->GetServerChannel();
        
    sITEM_NEW.cFieldID = (BYTE)m_pGLGaeaServer->GetFieldSvrID();
        
    sITEM_NEW.lnGenNum GLITEMLMT::GetInstance().RegItemGen sITEM_NEW.sNativeID, (EMITEMGEN)sITEM_NEW.cGenType );

        
    //    ·£´ý ¿É¼Ç »ý¼º.
        
    if( sITEM_NEW.GENERATE_RANDOM_OPT() )
        {
            
    GLITEMLMT::GetInstance().ReqRandomItemsITEM_NEW );
        }

        
    //    µé°íÀÖ´ø ¾ÆÀÌÅÆ Àι꿡 ³ÖÀ½.
        
    m_cInventory.InsertItem sITEM_NEWwInsertPosXwInsertPosY );
        
    SINVENITEM *pINSERT_ITEM m_cInventory.GetItem wInsertPosXwInsertPosY );

        if ( !
    pINSERT_ITEM )
        {
            
    NetMsgFB.emFB EMITEM_MIX_FB_FAIL;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
            return 
    E_FAIL;
        }

        
    GLITEMLMT::GetInstance().ReqItemRoute pINSERT_ITEM->sItemCustomID_CHAR0ID_CHARm_dwCharID
            
    EMITEM_ROUTE_ITEMMIXpINSERT_ITEM->sItemCustom.wTurnNum );

        
    //    [Àڽſ¡°Ô] ¸Þ½ÃÁö ¹ß»ý.
        
    GLMSG::SNETPC_INVEN_INSERT NetMsg_Inven;
        
    NetMsg_Inven.Data = *pINSERT_ITEM;
        
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg_Inven);


        
    NetMsgFB.emFB EMITEM_MIX_FB_OK;
        
    NetMsgFB.sNativeID    pINSERT_ITEM->sItemCustom.sNativeID;
        
    NetMsgFB.wTurnNum pINSERT_ITEM->sItemCustom.wTurnNum;
        
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
        
        return 
    S_OK;
    }

    //dmk14 | 12-9-16 | item compound
    HRESULT GLChar::MsgReqItemCompoundNET_MSG_GENERICnmg )
    {
        
    GLMSG::SNET_INVEN_ITEM_MIXpNetMsg = (GLMSG::SNET_INVEN_ITEM_MIX*)nmg;
        
    GLMSG::SNET_INVEN_ITEM_MIX_FB    NetMsgFB;



        
    //    Á¶ÇÕ È®ÀÎ
        
    const ITEM_MIXpItemMix GLItemMixMan::GetInstance().GetItemMixpNetMsg->dwKey );
        if ( !
    pItemMix 
        {
            
    NetMsgFB.emFB EMITEM_MIX_FB_NOMIX;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
            return 
    E_FAIL;
        }

        
    //    ±Ý¾× È®ÀΠ
        
    if( m_lnMoney pItemMix->dwPrice )
        {
            
    NetMsgFB.emFB EMITEM_MIX_FB_NOMONEY;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
            return 
    E_FAIL;
        }

        
    //    Àκ¥ ¾ÆÀÌÅÛ È®ÀÎ
        
    for ( int i =0ITEMMIX_ITEMNUM; ++
        {
            if(    
    pItemMix->sMeterialItem[i].sNID == NATIVEID_NULL() )    continue;

            
    GLInventory::CELL_MAP_ITER iter m_cInventory.GetItemList()->begin();
            
    GLInventory::CELL_MAP_ITER iter_end m_cInventory.GetItemList()->end();

            
    bool bFind false;
            
    bool bCount false;
            
    DWORD wCount 0;
            for ( ; 
    iter!=iter_end; ++iter )
            {
                
    SINVENITEMpInvenItem = (*iter).second;
                if( 
    pInvenItem->sItemCustom.sNativeID == pItemMix->sMeterialItem[i].sNID )
                {
                    
    bFind true;
                    
    wCount += pInvenItem->sItemCustom.wTurnNum;

                    
    SITEMpItem GLItemMan::GetInstance().GetItempInvenItem->sItemCustom.sNativeID );
                    if ( !
    pItem 
                    {
                        
    NetMsgFB.emFB EMITEM_MIX_FB_NOITEM;
                        
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
                        return 
    E_FAIL;
                    }
                }
            }

            
    bCount = ( wCount >= pItemMix->sMeterialItem[i].nNum )    ?    true false;

            if ( !
    bFind 
            {
                
    NetMsgFB.emFB EMITEM_MIX_FB_NOITEM;
                
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
                return 
    E_FAIL;
            }

            if ( !
    bCount )
            {
                
    NetMsgFB.emFB EMITEM_MIX_FB_NOMIXNUM;
                
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
                return 
    E_FAIL;
            }    
        }

        
    SITEMpItemResult GLItemMan::GetInstance().GetItempItemMix->sResultItem.sNID );
        if ( !
    pItemResult 
        {
            
    NetMsgFB.emFB EMITEM_MIX_FB_NOITEM;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
            return 
    E_FAIL;
        }

            
    WORD wInsertPosXwInsertPosY;

            
    BOOL bOk m_cInventory.FindInsrtable pItemResult->sBasicOp.wInvenSizeXpItemResult->sBasicOp.wInvenSizeYwInsertPosXwInsertPosY );

            if ( !
    bOk )
            {
                
    //    ºÒ°¡´ÉÇÑ °æ¿ì ÀÔ´Ï´Ù.
                
    NetMsgFB.emFB EMITEM_MIX_FB_NOINVEN;
                
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
                return 
    E_FAIL;    //    Àκ¥ °ø°£ ºÎÁ·À¸·Î µÇµ¹¸² ½ÇÆÐ.
            
    }

            for ( 
    int i =0ITEMMIX_ITEMNUM; ++)
            {
                if(    
    pItemMix->sMeterialItem[i].sNID == NATIVEID_NULL() )    continue;

                
    GLInventory::CELL_MAP_ITER iter m_cInventory.GetItemList()->begin();
                
    GLInventory::CELL_MAP_ITER iter_end m_cInventory.GetItemList()->end();

                
                
    BYTE wCount pItemMix->sMeterialItem[i].nNum;
                for ( ; 
    iter!=iter_end; ++iter )
                {
                    
    SINVENITEMpInvenItem = (*iter).second;
                    
    SITEMpItem GLItemMan::GetInstance().GetItempItemMix->sMeterialItem[i].sNID );
                    
                    if( 
    pInvenItem->sItemCustom.sNativeID == pItemMix->sMeterialItem[i].sNID CheckMixMaterialTRUE );
                    else continue;

                       if ( 
    bCheckMixMaterial )
                       {
                          if( 
    pItem->ISPILE() )  
                          {
                              try{
                              
    DeletePileItempInvenItem->sItemCustom.sNativeIDwCount );    
                              break;
                              }
                              catch( 
    std::exception const &DebugFile )
                              {
                                  
    CDebugSet::ToLogFile "DebugSet Itemix Material" );
                              }
                          }
                          else
                          {
                              
    DeleteItempInvenItem->sItemCustom.sNativeID );    
                              break;
                          }
                       }
                 }
            }

            
    //    ¼ÒÁö±Ý 
            
    if ( pItemMix->dwPrice )
            {
                
    CheckMoneyUpdatem_lnMoneypItemMix->dwPriceFALSE"ITEM_MIX" );
                
    m_bMoneyUpdate TRUE;

                
    m_lnMoney -= pItemMix->dwPrice;

                
    GLMSG::SNETPC_UPDATE_MONEY NetMsgMoney;
                
    NetMsgMoney.lnMoney m_lnMoney;
                
    GLGaeaServer::GetInstance().SENDTOCLIENTm_dwClientID, &NetMsgMoney );
            }

            
    //    ½ÇÆÐÇßÀ» °æ¿ì
            
    float fRate = (float)pItemMix->dwRate;
            if ( !
    RANDOM_GENfRate ) )
            {
                
    NetMsgFB.emFB EMITEM_MIX_FB_FAIL;
                
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
                return 
    S_OK;    
            }

            
    //    °á°ú ¾ÆÀÌÅÛ »ý¼º
            
    SITEMCUSTOM sITEM_NEW;
            
    sITEM_NEW.sNativeID pItemMix->sResultItem.sNID;
            
    sITEM_NEW.tBORNTIME CTime::GetCurrentTime().GetTime();
            
    sITEM_NEW.wTurnNum pItemMix->sResultItem.nNum;
            
    sITEM_NEW.cGenType EMGEN_ITEMMIX;
            
    sITEM_NEW.cChnID = (BYTE)m_pGLGaeaServer->GetServerChannel();
            
    sITEM_NEW.cFieldID = (BYTE)m_pGLGaeaServer->GetFieldSvrID();
            
    sITEM_NEW.lnGenNum GLITEMLMT::GetInstance().RegItemGen sITEM_NEW.sNativeID, (EMITEMGEN)sITEM_NEW.cGenType );

            
    //    ·£´ý ¿É¼Ç »ý¼º.
            
    if( sITEM_NEW.GENERATE_RANDOM_OPT() )
            {
                
    GLITEMLMT::GetInstance().ReqRandomItemsITEM_NEW );
            }

            
    //    µé°íÀÖ´ø ¾ÆÀÌÅÆ Àι꿡 ³ÖÀ½.
            
    m_cInventory.InsertItem sITEM_NEWwInsertPosXwInsertPosY );
            
    SINVENITEM *pINSERT_ITEM m_cInventory.GetItem wInsertPosXwInsertPosY );

            if ( !
    pINSERT_ITEM )
            {
                
    NetMsgFB.emFB EMITEM_MIX_FB_FAIL;
                
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);
                return 
    E_FAIL;
            }

            
    GLITEMLMT::GetInstance().ReqItemRoute pINSERT_ITEM->sItemCustomID_CHAR0ID_CHARm_dwCharID
                
    EMITEM_ROUTE_ITEMMIXpINSERT_ITEM->sItemCustom.wTurnNum );

            
    //    [Àڽſ¡°Ô] ¸Þ½ÃÁö ¹ß»ý.
            
    GLMSG::SNETPC_INVEN_INSERT NetMsg_Inven;
            
    NetMsg_Inven.Data = *pINSERT_ITEM;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg_Inven);


            
    NetMsgFB.emFB EMITEM_MIX_FB_OK;
            
    NetMsgFB.sNativeID    pINSERT_ITEM->sItemCustom.sNativeID;
            
    NetMsgFB.wTurnNum pINSERT_ITEM->sItemCustom.wTurnNum;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgFB);

            
    CheckMixMaterialFALSE );
            
            return 
    S_OK;
    }


    bool GLChar::DeleteItem SNATIVEID sNID )
    {
        
    SITEMpItem GLItemMan::GetInstance().GetItem sNID );
        if ( !
    pItem )                return false;
        if ( 
    pItem->ISPILE() )        return false;

        
    WORD wINVENX pItem->sBasicOp.wInvenSizeX;
        
    WORD wINVENY pItem->sBasicOp.wInvenSizeY;

        
    std::vector<SNATIVEID>    vecDEL;

        
    //    Note : ´õ °ãÃÄÁú¼ö Àִ ¾ÆÀÌÅÛÀÌ ÀÖ´ÂÁö °Ë»çÇÏ¿© Àκ¥¿¡ µé¾î°¡¾ßÇÏ´Â
        //        ¾ÆÀÌÅÛ Á¡°Ë ¼ýÀÚ¸¦ °¨¼Ò½ÃÅ´.
        
    GLInventory::CELL_MAP &ItemMap = *m_cInventory.GetItemList();
        
    GLInventory::CELL_MAP_ITER iter ItemMap.begin();
        for ( ; 
    iter!=ItemMap.end(); ++iter )
        {
            
    SINVENITEM &sINVENITEM = *(*iter).second;
            
    SITEMCUSTOM &sITEMCUSTOM sINVENITEM.sItemCustom;
            if ( 
    sITEMCUSTOM.sNativeID != sNID )        continue;

            
    sITEMCUSTOM.wTurnNum 0;
            
    vecDEL.push_back SNATIVEID(sINVENITEM.wPosX,sINVENITEM.wPosY) );
            break;
        }

        if ( !
    vecDEL.size() )    return true;

        for ( 
    DWORD i=0i<vecDEL.size(); ++)
        {
            
    m_cInventory.DeleteItem vecDEL[i].wMainIDvecDEL[i].wSubID );

            
    //    Note : »èÁ¦ ¸Þ½ÃÁö.
            
    GLMSG::SNETPC_INVEN_DELETE NetMsgDelete;
            
    NetMsgDelete.wPosX vecDEL[i].wMainID;
            
    NetMsgDelete.wPosY vecDEL[i].wSubID;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsgDelete);
        }

        return 
    true;
    }
    HRESULT GLChar::MsgReqInvenWrap NET_MSG_GENERICnmg )
    {
        
    GLMSG::SNET_INVEN_WRAP *pNetMsg = (GLMSG::SNET_INVEN_WRAP *)nmg;

        if ( !
    VALID_HOLD_ITEM() )                            
            return 
    S_FALSE;

        
    SITEMCUSTOMsHOLDITEM m_PutOnItems[SLOT_HOLD];
        
        
    SITEMpHold GLItemMan::GetInstance().GetItem sHOLDITEM.sNativeID );
        if ( !
    pHold )                                        
            return 
    E_FAIL;

        if ( 
    pHold->sBasicOp.emItemType != ITEM_WRAPPER  )            
            return 
    S_FALSE;

        if ( 
    CheckCoolTimepHold->sBasicOp.sNativeID ) ) 
            return 
    E_FAIL;

        
    SINVENITEMpInvenItem m_cInventory.GetItem pNetMsg->wPosXpNetMsg->wPosY );
        if ( !
    pInvenItem )                                    
            return 
    E_FAIL;

        
    SITEMpItem GLItemMan::GetInstance().GetItem pInvenItem->sItemCustom.sNativeID );
        if ( !
    pItem )                                        
            return 
    S_FALSE;

        if ( 
    pItem->sBasicOp.emItemType != ITEM_SUIT )
            return 
    S_FALSE;

        if ( 
    pItem->sBasicOp.emItemType == ITEM_SUIT )
        {
            if ( 
    pItem->sSuitOp.emSuit SUIT_HANDHELD )
                return 
    S_FALSE;
        }

        if ( 
    pInvenItem->sItemCustom.IsWrap() )
            return 
    S_FALSE;

        
    DoDrugSlotItemSLOT_HOLD );

        
    pInvenItem->sItemCustom.bWrap true;

        
    GLITEMLMT::GetInstance().ReqItemConversion pInvenItem->sItemCustomID_CHARm_dwCharID );

        
    GLMSG::SNET_INVEN_ITEM_UPDATE NetItemUpdate;
        
    NetItemUpdate.wPosX pNetMsg->wPosX;
        
    NetItemUpdate.wPosY pNetMsg->wPosY;
        
    NetItemUpdate.sItemCustom pInvenItem->sItemCustom;
        
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetItemUpdate);

        return 
    S_OK;
    }
    HRESULT GLChar::MsgReqInvenRemoveWrap NET_MSG_GENERICnmg )
    {
        
    GLMSG::SNET_INVEN_REMOVE_WRAP *pNetMsg = (GLMSG::SNET_INVEN_REMOVE_WRAP *)nmg;

        
    SINVENITEMpInvenItem m_cInventory.GetItem pNetMsg->wPosXpNetMsg->wPosY );
        if ( !
    pInvenItem )                                    
            return 
    E_FAIL;

        
    SITEMpItem GLItemMan::GetInstance().GetItem pInvenItem->sItemCustom.sNativeID );
        if ( !
    pItem )                                        
            return 
    S_FALSE;

        if ( !
    pInvenItem->sItemCustom.IsWrap() )
            return 
    S_FALSE;

        
    pInvenItem->sItemCustom.bWrap false;

        
    GLITEMLMT::GetInstance().ReqItemConversion pInvenItem->sItemCustomID_CHARm_dwCharID );

        
    GLMSG::SNET_INVEN_ITEM_UPDATE NetItemUpdate;
        
    NetItemUpdate.wPosX pNetMsg->wPosX;
        
    NetItemUpdate.wPosY pNetMsg->wPosY;
        
    NetItemUpdate.sItemCustom pInvenItem->sItemCustom;
        
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetItemUpdate);


        return 
    S_OK;
    }
    //nondrop card Eduj
    HRESULT GLChar::MsgReqNonDrop NET_MSG_GENERICnmg )
    {
        
    GLMSG::SNET_INVEN_NONDROP *pNetMsg = (GLMSG::SNET_INVEN_NONDROP *)nmg;

        if ( !
    VALID_HOLD_ITEM() )                            
            return 
    S_FALSE;

        
    SITEMCUSTOMsHOLDITEM m_PutOnItems[SLOT_HOLD];
        
        
    SITEMpHold GLItemMan::GetInstance().GetItem sHOLDITEM.sNativeID );
        if ( !
    pHold )                                        
            return 
    E_FAIL;

        if ( 
    CheckCoolTimepHold->sBasicOp.sNativeID ) ) 
            return 
    E_FAIL;

        
    SINVENITEMpInvenItem m_cInventory.GetItem pNetMsg->wPosXpNetMsg->wPosY );
        if ( !
    pInvenItem )                                    
            return 
    E_FAIL;

        
    SITEMpItem GLItemMan::GetInstance().GetItem pInvenItem->sItemCustom.sNativeID );
        if ( !
    pItem )                                        
            return 
    S_FALSE;

        if ( 
    pItem->sBasicOp.emItemType != ITEM_SUIT )
            return 
    S_FALSE;


        if ( 
    pInvenItem->sItemCustom.IsNonDrop() )
            return 
    S_FALSE;

        
    DoDrugSlotItemSLOT_HOLD );

        
    pInvenItem->sItemCustom.bNonDrop true;

        
    GLITEMLMT::GetInstance().ReqItemConversion pInvenItem->sItemCustomID_CHARm_dwCharID );

        
    GLMSG::SNET_INVEN_ITEM_UPDATE NetItemUpdate;
        
    NetItemUpdate.wPosX pNetMsg->wPosX;
        
    NetItemUpdate.wPosY pNetMsg->wPosY;
        
    NetItemUpdate.sItemCustom pInvenItem->sItemCustom;
        
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetItemUpdate);

        
    GLMSG::SNET_INVEN_NONDROP_FB NetMsgBrd;
        
    NetMsgBrd.bNonDrop TRUE;
        
    SITEMpItemData GLItemMan::GetInstance().GetItem pInvenItem->sItemCustom.sNativeID );
        
    std::string strItemName pItemData->GetName();
        
    StringCchCopy NetMsgBrd.szItemNameGLMSG::SNET_INVEN_NONDROP_FB::MAX_ITEM_NAMEstrItemName.c_str() ); 
        
    StringCchCopy NetMsgBrd.szNameCHAR_SZNAMEm_szName );    
        
    GLGaeaServer::GetInstance().SENDTOAGENT ( &NetMsgBrd );


        return 
    S_OK;
    }

    HRESULT GLChar::MsgReqRemoveNonDrop NET_MSG_GENERICnmg )
    {
        
    GLMSG::SNET_INVEN_REMOVE_NONDROP *pNetMsg = (GLMSG::SNET_INVEN_REMOVE_NONDROP *)nmg;

        if ( !
    VALID_HOLD_ITEM() )                            
            return 
    S_FALSE;

        
    SITEMCUSTOMsHOLDITEM m_PutOnItems[SLOT_HOLD];
        
        
    SITEMpHold GLItemMan::GetInstance().GetItem sHOLDITEM.sNativeID );
        if ( !
    pHold )                                        
            return 
    E_FAIL;

        if ( 
    CheckCoolTimepHold->sBasicOp.sNativeID ) ) 
            return 
    E_FAIL;

        
    SINVENITEMpInvenItem m_cInventory.GetItem pNetMsg->wPosXpNetMsg->wPosY );
        if ( !
    pInvenItem )                                    
            return 
    E_FAIL;

        
    SITEMpItem GLItemMan::GetInstance().GetItem pInvenItem->sItemCustom.sNativeID );
        if ( !
    pItem )                                        
            return 
    S_FALSE;

        if ( 
    pItem->sBasicOp.emItemType != ITEM_SUIT )
            return 
    S_FALSE;

        if ( !
    pInvenItem->sItemCustom.IsNonDrop() )
            return 
    S_FALSE;

        
    DoDrugSlotItemSLOT_HOLD );

        
    pInvenItem->sItemCustom.bNonDrop false;

        
    GLITEMLMT::GetInstance().ReqItemConversion pInvenItem->sItemCustomID_CHARm_dwCharID );

        
    GLMSG::SNET_INVEN_ITEM_UPDATE NetItemUpdate;
        
    NetItemUpdate.wPosX pNetMsg->wPosX;
        
    NetItemUpdate.wPosY pNetMsg->wPosY;
        
    NetItemUpdate.sItemCustom pInvenItem->sItemCustom;
        
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetItemUpdate);

        
    GLMSG::SNET_INVEN_REMOVE_NONDROP_FB NetMsgBrd;
        
    NetMsgBrd.bNonDrop FALSE;
        
    SITEMpItemData GLItemMan::GetInstance().GetItem pInvenItem->sItemCustom.sNativeID );
        
    std::string strItemName pItemData->GetName();
        
    StringCchCopy NetMsgBrd.szItemNameGLMSG::SNET_INVEN_REMOVE_NONDROP_FB::MAX_ITEM_NAMEstrItemName.c_str() ); 
        
    StringCchCopy NetMsgBrd.szNameCHAR_SZNAMEm_szName );    
        
    GLGaeaServer::GetInstance().SENDTOAGENT ( &NetMsgBrd );


        return 
    S_OK;
    }
    //Change School
    HRESULT GLChar::MsgReqInvenSchoolChange NET_MSG_GENERICnmg //Added by Mharlon
    {
        
    GLMSG::SNETPC_INVEN_SCHOOL_CHANGE *pNetMsg = (GLMSG::SNETPC_INVEN_SCHOOL_CHANGE *)nmg;

        
    GLMSG::SNETPC_INVEN_SCHOOL_CHANGE_FB MsgFB;

        
    SINVENITEMpINVENITEM m_cInventory.GetItem pNetMsg->wPosXpNetMsg->wPosY );
        if ( !
    pINVENITEM )
        {
            
    MsgFB.emFB EMINVEN_SCHOOL_CHANGE_FB_NOITEM;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
            return 
    E_FAIL;
        }

        if ( 
    CheckCoolTimepINVENITEM->sItemCustom.sNativeID ) )
        {
            
    MsgFB.emFB EMINVEN_SCHOOL_CHANGE_FB_COOLTIME;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
            return 
    E_FAIL;
        }

        
    SITEM *pITEM GLItemMan::GetInstance().GetItem pINVENITEM->sItemCustom.sNativeID );
        
        
    /*if ( pITEM->sBasicOp.emItemType!=ITEM_SCHOOL_CHANGE_SG)
        {
            MsgFB.emFB = EMINVEN_SCHOOL_CHANGE_FB_NOITEM;
            GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
            return E_FAIL;
        }

        if ( pITEM->sBasicOp.emItemType!=ITEM_SCHOOL_CHANGE_MP)
        {
            MsgFB.emFB = EMINVEN_SCHOOL_CHANGE_FB_NOITEM;
            GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
            return E_FAIL;
        }
        if ( pITEM->sBasicOp.emItemType!=ITEM_SCHOOL_CHANGE_PH)
        {
            MsgFB.emFB = EMINVEN_SCHOOL_CHANGE_FB_NOITEM;
            GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
            return E_FAIL;
        }*/

        
    GLPARTY_FIELD *pParty GLGaeaServer::GetInstance().GetParty m_dwPartyID );
        if ( 
    pParty )
        {
            
    MsgFB.emFB EMINVEN_SCHOOL_CHANGE_FB_BADITEM;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
            return 
    E_FAIL;

        }
        
    GLClubMan &cClubMan m_pGLGaeaServer->GetClubMan();
        
    GLCLUB *pCLUB cClubMan.GetClub m_dwGuild );

        if ( 
    pCLUB )
        {
            
    MsgFB.emFB EMINVEN_SCHOOL_CHANGE_FB_BADITEM;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
            return 
    E_FAIL;

        }

        
    bool bVALIDCLASS = (NULL!=(pITEM->sBasicOp.dwReqCharClass&m_emClass));
        if ( !
    bVALIDCLASS )
        {
            
    MsgFB.emFB EMINVEN_SCHOOL_CHANGE_FB_BADCLASS;
            
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
            return 
    E_FAIL;
        }
    /*
        const GLCHARLOGIC& sCharData = GLGaeaClient::GetInstance().GetCharacterLogic ();
        const WORD mySchool  = sCharData.m_wSchool;
        if ( mySchool == pNetMsg->wSchool )
        {
            MsgFB.emFB = EMINVEN_SCHOOL_CHANGE_FB_BADITEM;
            GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);
            return E_FAIL;
        }
        */

        
    m_wSchool pNetMsg->wSchool;

        
    //    Note : ?????? ?? ?? ??.
        
    MsgFB.dwID m_wSchool;
        
    MsgFB.emFB EMINVEN_SCHOOL_CHANGE_FB_OK;
        
    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&MsgFB);

        
    //    Note : ?? ??? ?? ????? ??.
        
    GLMSG::SNETPC_INVEN_SCHOOL_CHANGE_BRD NetMsgBrd;
        
    NetMsgBrd.dwGaeaID m_dwGaeaID;
        
    NetMsgBrd.dwID m_wSchool;
        
    SendMsgViewAround ( (NET_MSG_GENERIC*) &NetMsgBrd );

        
    //    [????] ?? ??? ????.
        

        // DB? ??
        
    CSetChaSchoolpDBAction = new CSetChaSchool m_dwCharIDm_wSchool );

        if ( 
    GLGaeaServer::GetInstance().GetDBMan() )
        {
            
    GLGaeaServer::GetInstance().GetDBMan()->AddJob pDBAction );
        }


        
    DoDrugInvenItem pNetMsg->wPosXpNetMsg->wPosY );

        return 
    S_OK;

    glcharactorreq.cpp
    PHP Code:
    #include "stdafx.h"

    #include "DxInputDevice.h"
    #include "editmeshs.h"
    #include "DxMethods.h"
    #include "DxViewPort.h"
    #include "DxEffectMan.h"
    #include "DxShadowMap.h"
    #include "EditMeshs.h"
    #include "GLogicData.h"
    #include "GLItemMan.h"
    #include "DxGlobalStage.h"
    #include "GLGaeaClient.h"
    #include "stl_Func.h"
    #include "DxEffGroupPlayer.h"
    #include "GLPartyClient.h"
    #include "GLBusStation.h"
    #include "GLBusData.h"
    #include "GLTaxiStation.h"
    #include "RANPARAM.h"
    #include "GLMaplist.h"
    #include "GLFriendClient.h"
    #include "RanFilter.h"
    #include "DxClubMan.h"
    #include "GLFactEffect.h"
    #include "GLQUEST.h"
    #include "GLQUESTMAN.h"
    #include "GLCharacter.h"
    #include "GLItemMixMan.h"
    #include "GLItem.h"

    #include "../RanClientUILib/Interface/OuterInterface.h"
    #include "../RanClientUILib/Interface/UITextControl.h"
    #include "../RanClientUILib/Interface/GameTextControl.h"
    #include "../RanClientUILib/Interface/InnerInterface.h"
    #include "../RanClientUILib/Interface/InventoryPage.h"
    #include "../RanClientUILib/Interface/InventoryWindow.h"
    #include "../RanClientUILib/Interface/BasicGameMenu.h"
    #include "../RanClientUILib/Interface/QBoxButton.h"
    #include "../RanClientUILib/Interface/ModalWindow.h"
    #include "../RanClientUILib/Interface/ModalCallerID.h"
    #include "../RanClientUILib/Interface/ItemShopIconMan.h"
    #include "../RanClientUILib/Interface/PetskinMixImage.h"
    #include "../RanClientUILib/Interface/MapWindow/LargeMapWindow.h" //Request Crow List NaJDeV

    #include "../enginelib/Common/StringUtils.h"

    //#include "./ObserverNotifyID.h"

    #ifdef _DEBUG
    #define new DEBUG_NEW
    #endif

    void GLCharacter::ReqToggleRun ()
    {
        if ( 
    IsSTATE(EM_ACT_RUN) )
        {
            
    ReSetSTATE(EM_ACT_RUN);
            
    CBasicGameMenu pGameMenu CInnerInterface::GetInstance().GetGameMenu();
            if( 
    pGameMenu pGameMenu->SetFlipRunButtonFALSE );
        }
        else
        {
            
    SetSTATE(EM_ACT_RUN);
            
    CBasicGameMenu pGameMenu CInnerInterface::GetInstance().GetGameMenu();
            if( 
    pGameMenu pGameMenu->SetFlipRunButtonTRUE );
        }

        
    m_actorMove.SetMaxSpeed GetMoveVelo() );

        
    PGLPETCLIENT pMyPet GLGaeaClient::GetInstance().GetPetClient ();
        if ( 
    pMyPet->IsVALID () )
        {
            
    pMyPet->SetMoveState IsSTATE(EM_ACT_RUN) );
        }

        
    //    Note : ¸Þ¼¼Áö ¹ß»ý.
        //
        
    GLMSG::SNETPC_MOVESTATE NetMsg;
        
    NetMsg.dwActState m_dwActState;

        
    NETSENDTOFIELD ( (NET_MSG_GENERIC*) &NetMsg );
    }

    void GLCharacter::ReqTogglePeaceMode ()
    {
        if ( 
    IsSTATE(EM_ACT_PEACEMODE) && !m_bVehicle )    ReSetSTATE(EM_ACT_PEACEMODE);
        else                                            
    SetSTATE(EM_ACT_PEACEMODE);

        
    //GLGaeaClient::GetInstance().GetActiveMapID();

        
    if ( IsSafeZone() && GLGaeaClient::GetInstance().GetActiveMap()->GetMapID().wMainID == 22 SetSTATE(EM_ACT_PEACEMODE);

        
    m_fIdleTime 0.0f;

        
    //    Note : ¸Þ¼¼Áö ¹ß»ý.
        //
        
    GLMSG::SNETPC_ACTSTATE NetMsg;
        
    NetMsg.dwActState m_dwActState;
        
    NETSEND ( (NET_MSG_GENERIC*) &NetMsg );
    }

    void GLCharacter::ReqToggleBooster () //add bike booster
    {
        if ( 
    IsSTATE(EM_ACT_BOOSTER/*&& m_bVehicle */)    ReSetSTATE(EM_ACT_BOOSTER);
        else  if ( 
    m_bVehicle )    SetSTATEEM_ACT_BOOSTER );

        
    GLMSG::SNETPC_ACTSTATE NetMsg;
        
    NetMsg.dwActState m_dwActState;
        
    NETSEND ( (NET_MSG_GENERIC*) &NetMsg );
    }

    void GLCharacter::ReqVisibleNone ()
    {
        
    SetSTATE(EM_REQ_VISIBLENONE);

        
    //    Note : (¿¡ÀÌÁ¯Æ®¼­¹ö) ¸Þ¼¼Áö ¹ß»ý.
        //
        
    GLMSG::SNETPC_ACTSTATE NetMsg;
        
    NetMsg.dwActState m_dwActState;
        
    NETSEND ( (NET_MSG_GENERIC*) &NetMsg );
    }

    void GLCharacter::ReqVisibleOff ()
    {
        
    SetSTATE(EM_REQ_VISIBLEOFF);

        
    //    Note : (¿¡ÀÌÁ¯Æ®¼­¹ö) ¸Þ¼¼Áö ¹ß»ý.
        //
        
    GLMSG::SNETPC_ACTSTATE NetMsg;
        
    NetMsg.dwActState m_dwActState;
        
    NETSEND ( (NET_MSG_GENERIC*) &NetMsg );
    }

    void GLCharacter::ReqVisibleOn ()
    {
        
    ReSetSTATE(EM_REQ_VISIBLENONE);
        
    ReSetSTATE(EM_REQ_VISIBLEOFF);

        
    //    Note : (¿¡ÀÌÁ¯Æ®¼­¹ö) ¸Þ¼¼Áö ¹ß»ý.
        //
        
    GLMSG::SNETPC_ACTSTATE NetMsg;
        
    NetMsg.dwActState m_dwActState;
        
    NETSEND ( (NET_MSG_GENERIC*) &NetMsg );
    }

    // *****************************************************
    // Desc: Ãⱸ ³ª°¡±â ¿äû
    // *****************************************************
    void GLCharacter::ReqGateOut ()
    {
        if ( 
    IsSTATE(EM_REQ_GATEOUT) )                            return;
        if ( 
    IsSTATE(EM_ACT_WAITING) )                            return;

        
    DWORD dwGateID DetectGate ();
        if ( 
    dwGateID==UINT_MAX )                                return;

        
    PLANDMANCLIENT pLandMClient GLGaeaClient::GetInstance().GetActiveMap();
        if ( !
    pLandMClient )                                return;

        
    DxLandGateMan *pLandGateMan = &pLandMClient->GetLandGateMan();
        if ( !
    pLandGateMan )                                return;

        
    PDXLANDGATE pLandGate pLandGateMan->FindLandGate dwGateID );
        if ( !
    pLandGate )                                    return;

        
    SNATIVEID sMapID pLandGate->GetToMapID();

        
    SMAPNODE *pMapNode GLGaeaClient::GetInstance().FindMapNode sMapID );
        if ( !
    pMapNode )                                    return;


        
    //    TODO :  +, quest, ÆÄƼ¿ø Ã¼Å©´Â ÇâÈÄ ±¸Çö, Å¬¶óÀÌ¾ðÆ®¿¡¼­¸¸ Ã³¸®Çϰí ÀÖÀ½. ¼­¹ö¿¡¼­ Á¡°ËÀº ³ªÁß¿¡.
        //
        //    TODO : Ãⱸ »ç¿ë Á¶°ÇÀ» °Ë»çÇÏ¿©¾ß ÇÏÁö¸¸ ÇöÀç ¿¡ÀÌÁ¯Æ® ¼­¹ö¿¡¼­ È®ÀÎÇÒ ¼ö ÀÖ´Â
        //        Äɸ¯ÅÍ Á¤º¸ÀÇ ÇѰ谡 ÀÖÀ¸¹Ç·Î Å¬¶óÀÌ¾ðÆ®¿¡¼­¸¸ È®Àεǰí ÀÖÀ½.
        //

        
    EMREQFAIL emReqFail(EMREQUIRE_COMPLETE);
        
        
    GLLevelFile cLevelFile;
        
    BOOL bOk cLevelFile.LoadFile pMapNode->strFile.c_str(), TRUENULL );
        if ( !
    bOk )                                            return;

         if ( 
    GLGaeaClient::GetInstance().GetPetClient()->IsVALID() ) 
            {
                
    CInnerInterface &cINTERFACE1 CInnerInterface::GetInstance();
                
    cINTERFACE1.PrintMsgTextDlgNS_UITEXTCOLOR::DISABLE"Please disable your pet first.");
                return;
            }

        
    SLEVEL_REQUIREpRequire cLevelFile.GetLevelRequire ();
        
    emReqFail pRequire->ISCOMPLETE this );
        if ( 
    emReqFail != EMREQUIRE_COMPLETE )
        {
            
    CInnerInterface &cINTERFACE CInnerInterface::GetInstance();
            switch ( 
    emReqFail )
            {
            case 
    EMREQUIRE_LEVEL:
                {
                    if( 
    pRequire->m_signLevel == EMSIGN_FROMTO )
                    {
                        
    cINTERFACE.PrintMsgTextDlgNS_UITEXTCOLOR::DISABLE
                            
    ID2GAMEINTEXT("EMREQUIRE_LEVEL2"),
                            
    pRequire->m_wLevel,
                            
    pRequire->m_wLevel2 );
                    }else{
                        
    std::string strSIGN ID2GAMEINTEXT(COMMENT::CDT_SIGN_ID[pRequire->m_signLevel].c_str());
                        
                        if( 
    RANPARAM::emSERVICE_TYPE == EMSERVICE_THAILAND )
                        {
                            
    cINTERFACE.PrintMsgTextDlgNS_UITEXTCOLOR::DISABLE
                                                        
    ID2GAMEINTEXT("EMREQUIRE_LEVEL"),
                                                        
    strSIGN.c_str(),
                                                        
    pRequire->m_wLevel );
                        }
                        else
                        {
                            
    cINTERFACE.PrintMsgTextDlgNS_UITEXTCOLOR::DISABLE
                                                        
    ID2GAMEINTEXT("EMREQUIRE_LEVEL"),
                                                        
    pRequire->m_wLevel,
                                                        
    strSIGN.c_str() );
                        }
                    }
                }
                break;

            case 
    EMREQUIRE_ITEM:
                {
                    
    SITEM *pItem GLItemMan::GetInstance().GetItem pRequire->m_sItemID );
                    if ( 
    pItem )
                    {
                        
    cINTERFACE.PrintMsgTextDlg
                        
    (
                            
    NS_UITEXTCOLOR::DISABLE,
                            
    ID2GAMEINTEXT("EMREQUIRE_ITEM"),
                            
    pItem->GetName()
                        );
                    }
                }
                break;

            case 
    EMREQUIRE_SKILL:
                {
                    
    PGLSKILL pSkill GLSkillMan::GetInstance().GetData pRequire->m_sSkillID );
                    if ( 
    pSkill )
                    {
                        
    cINTERFACE.PrintMsgTextDlg
                        
    (
                            
    NS_UITEXTCOLOR::DISABLE,
                            
    ID2GAMEINTEXT("EMREQUIRE_SKILL"),
                            
    pSkill->GetName()
                        );
                    }
                }
                break;

            case 
    EMREQUIRE_LIVING:
                {
                    
    std::string strSIGN ID2GAMEINTEXT(COMMENT::CDT_SIGN_ID[pRequire->m_signLiving].c_str());
                    
    cINTERFACE.PrintMsgTextDlg
                    
    (
                        
    NS_UITEXTCOLOR::DISABLE,
                        
    ID2GAMEINTEXT("EMREQUIRE_PREMIUM"),
                        
    pRequire->m_nLiving,
                        
    strSIGN.c_str() // 1
                    
    );
                }
                break;

            case 
    EMREQUIRE_BRIGHT:
                {
                    
    std::string strSIGN ID2GAMEINTEXT(COMMENT::CDT_SIGN_ID[pRequire->m_signBright].c_str());
                    
    cINTERFACE.PrintMsgTextDlg
                    
    (
                        
    NS_UITEXTCOLOR::DISABLE,
                        
    ID2GAMEINTEXT("EMREQUIRE_REBORN"),
                        
    pRequire->m_nBright,
                        
    strSIGN.c_str()
                    );
                }
                break;

            case 
    EMREQUIRE_QUEST_COM:
                {
                    
    CString strQUEST "quest";
                    
    GLQUEST *pQUEST GLQuestMan::GetInstance().Find pRequire->m_sComQuestID.dwID );
                    if ( 
    pQUEST )        strQUEST pQUEST->GetTITLE();

                    
    cINTERFACE.PrintMsgTextDlg NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("EMREQUIRE_QUEST_COM"), strQUEST.GetString() );
                }
                break;

            case 
    EMREQUIRE_QUEST_ACT:
                {
                    
    CString strQUEST "quest";
                    
    GLQUEST *pQUEST GLQuestMan::GetInstance().Find pRequire->m_sActQuestID.dwID );
                    if ( 
    pQUEST )        strQUEST pQUEST->GetTITLE();

                    
    cINTERFACE.PrintMsgTextDlg NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("EMREQUIRE_QUEST_ACT"), strQUEST.GetString() );
                }
                break;

            default:
                
    cINTERFACE.PrintMsgTextDlg NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("MAP_REQUIRE_FAIL") );
                break;
            };

            
    //    Note : Ãⱸ »ç¿ë ±ÇÇÑÀÌ ¾ÈµÉ °æ¿ì. GM level ÀÌ»óÀÏ °æ¿ì Á¶°Ç ¹«½Ã.
            //
            
    if ( m_dwUserLvl USER_GM3 )    return;
        }


        if( 
    pMapNode->bInstantMap )
        {
            
    //    Note : ÀνºÅϽº ¸Ê »ý¼º ¿äû
            //
            
    GLMSG::SNETREQ_CREATE_INSTANT_MAP_REQ NetMsg;
            
    NetMsg.dwGateID dwGateID;
            
    NETSENDTOFIELD ( &NetMsg );
            
    SetSTATE(EM_REQ_GATEOUT);
            return;
        }
        
    DISABLEALLLANDEFF();
        
    //    Note : Ãⱸ ³ª°¡±â ¿äû ¸Þ½ÃÁö ¹ß»ý.
        //
        
    GLMSG::SNETREQ_GATEOUT_REQ NetMsg;
        
    NetMsg.dwGateID dwGateID;
        
    NETSENDTOFIELD ( &NetMsg );

        
    SetSTATE(EM_REQ_GATEOUT);

    }

    bool GLCharacter::ReqGESTURE int nMOTIONbool bCOMMAND )
    {
        
    //    Note : ¸ð¼Ç Á¾·ù°¡ ÆòÈ­ ¸ðµåÀÏ °æ¿ì¸¸ Á¦½ºÃĸ¦ ÇÒ ¼ö ÀÖ´Ù.
        
    PLANDMANCLIENT pLand GLGaeaClient::GetInstance().GetActiveMap();
        
    BOOL bPeaceZone pLand pLand->IsPeaceZone() : FALSE;

        
    //    Note : ¸í·É¾î·Î ±¸µ¿µÇ´Â Á¦½ºÃÄÀÏ °æ¿ì. ÆòÈ­¸ðµå·Î Á¯È¯.
        
    if ( bCOMMAND )
        {
            if ( !
    bPeaceZone && !IsSTATE(EM_ACT_PEACEMODE) )
            {
                if ( 
    IsACTION(GLAT_IDLE) )        ReqTogglePeaceMode();
            }
        }

        if ( !
    bPeaceZone && IsSTATE(EM_ACT_PEACEMODE) )
        {
            
    bPeaceZone TRUE;
        }

        if ( !
    bPeaceZone )    return false;

        
    // Å»°Í Å¾½ÂÁßÀ϶§ Á¦½ºÃÄ ±ÝÁö
        
    if ( m_bVehicle ) return true;

        
    //    Note : ÇØ´ç Á¦½ºÃÄ ¿¡´Ï¸ÞÀ̼ÇÀÌ Á¸Á¦½Ã ±¸µ¿.
        
    PANIMCONTNODE pNODE m_pSkinChar->GETANI AN_GESTUREEMANI_SUBTYPE(nMOTION) );
        if ( !
    pNODE )            return false;

        
    //    Note : ½Åü°¡ Á¤»óÀûÀ϶§ ±¸µ¿.
        
    if ( !IsValidBody() )    return false;

        
    //    Note : Á¦½ºÃĸ¦ ÇàÇÔ.
        
    m_dwANISUBGESTURE = (DWORDnMOTION;
        
    TurnAction(GLAT_TALK);

        
    //    Note : ¼­¹ö·Î ¸Þ½ÃÁö Àü¼Û.
        
    GLMSG::SNETPC_REQ_GESTURE NetMsg;
        
    NetMsg.dwID m_dwANISUBGESTURE;
        
    NETSENDTOFIELD ( &NetMsg );

        return 
    true;
    }

    inline bool GLCharacter::IsInsertToInven PITEMCLIENTDROP pItemDrop )
    {
        
    GASSERT(pItemDrop&&"GLChar::IsItemToInven()");
        if ( !
    pItemDrop )    return false;

        
    SITEM *pItem GLItemMan::GetInstance().GetItem(pItemDrop->sItemClient.sNativeID);
        if ( !
    pItem )        return false;

        if ( 
    pItem->ISPILE() )
        {
            
    WORD wINVENX pItem->sBasicOp.wInvenSizeX;
            
    WORD wINVENY pItem->sBasicOp.wInvenSizeY;

            
    //    °ãħ ¾ÆÀÌÅÛÀÏ °æ¿ì.
            
    WORD wPILENUM pItem->sDrugOp.wPileNum;
            
    SNATIVEID sNID pItem->sBasicOp.sNativeID;

            
    //    Note : ³Ö±â ¿äûµÈ ¾ÆÀÌÅÛ¼ö. ( ÀÜ¿©·®. )
            //
            
    WORD wREQINSRTNUM = ( pItemDrop->sItemClient.wTurnNum );

            
    BOOL bITEM_SPACE TRUE;
    #if defined(VN_PARAM) //vietnamtest%%%
            
    if( m_dwVietnamGainType == GAINTYPE_EMPTY )
            {
                
    bITEM_SPACE m_cVietnamInventory.ValidPileInsrt wREQINSRTNUMsNIDwPILENUMwINVENXwINVENY );
            }else{
                
    bITEM_SPACE m_cInventory.ValidPileInsrt wREQINSRTNUMsNIDwPILENUMwINVENXwINVENY );
            }        
    #else
            
    bITEM_SPACE m_cInventory.ValidPileInsrt wREQINSRTNUMsNIDwPILENUMwINVENXwINVENY );
    #endif
            
    if ( !bITEM_SPACE )        return false;
        }
        else
        {
            
    WORD wPosXwPosY;
            
    BOOL bOk TRUE;
    #if defined(VN_PARAM) //vietnamtest%%%
            
    if( m_dwVietnamGainType == GAINTYPE_EMPTY )
            {
                
    bOk m_cVietnamInventory.FindInsrtable pItem->sBasicOp.wInvenSizeXpItem->sBasicOp.wInvenSizeYwPosXwPosY );
            }else{
                
    bOk m_cInventory.FindInsrtable pItem->sBasicOp.wInvenSizeXpItem->sBasicOp.wInvenSizeYwPosXwPosY );
            }
    #else
            
    bOk m_cInventory.FindInsrtable pItem->sBasicOp.wInvenSizeXpItem->sBasicOp.wInvenSizeYwPosXwPosY );
    #endif
            
    if ( !bOk )                return false;
        }

        return 
    true;
    }

    //    Note : Çʵ堾ÆÀÌÅÛ(µ·) ÁÖÀ»¶§.
    HRESULT GLCharacter::ReqFieldTo ( const STARGETID &sTargetIDbool bPet )
    {
        if ( 
    VALID_HOLD_ITEM () )                    return E_FAIL;
        if ( 
    ValidWindowOpen() )                    return E_FAIL;    

        
    PLANDMANCLIENT pLAND GLGaeaClient::GetInstance().GetActiveMap();
        if ( !
    pLAND )    return E_FAIL;

        
    //if ( sTargetID.emCrow==CROW_ITEM )
        //{
        //    if ( pLAND->ISITEM_PICKDELAY ( sTargetID.dwID ) )    return E_FAIL;
        //}
        //else if ( sTargetID.emCrow==CROW_MONEY )
        //{
        //    if ( pLAND->ISMONEY_PICKDELAY ( sTargetID.dwID ) )    return E_FAIL;
        //}

        //BOOL bInventoryOpen = FALSE;
        //bInventoryOpen = CInnerInterface::GetInstance().IsInventoryWindowOpen ();
        //if ( sTargetID.emCrow==CROW_ITEM && bInventoryOpen )
        //{
        //    //    ¸Þ½ÃÁö ¹ß»ý.
        //    GLMSG::SNETPC_REQ_FIELD_TO_HOLD NetMsg;
        //    NetMsg.dwGlobID = sTargetID.dwID;
        //    NETSENDTOFIELD ( &NetMsg );

        //    //    ´ÙÀ½ ¸Þ½ÃÁö Áö¿¬ ÁöÁ¤.
        //    pLAND->SETITEM_PICKDELAY ( sTargetID.dwID );
        //}
        //else
        
    {
            
    //    Note : ¸Þ½ÃÁö ¼Û½ÅÀü¿¡ À¯È¿ÇÒÁö¸¦ ¹Ì¸® °Ë»çÇÔ.
            //
            // »ç¸ÁÈ®ÀÎ
            
    if ( !IsValidBody() )    return E_FAIL;

            
    //    °Å¸® Ã¼Å©
            
    const D3DXVECTOR3 &vTarPos sTargetID.vPos;

            
    //    °Å¸® Ã¼Å©
            
    D3DXVECTOR3 vPos;

            if ( 
    bPet )    
            {
                
    GLPetClientpMyPet GLGaeaClient::GetInstance().GetPetClient ();
                if ( 
    pMyPet->IsVALID() )    vPos pMyPet->GetPosition();
            }    
            else 
    vPos m_vPos;

            
    D3DXVECTOR3 vDistance vPos vTarPos;
            
    float fDistance D3DXVec3Length ( &vDistance );

            
    WORD wTarBodyRadius 4;
            
    WORD wTakeRange wTarBodyRadius GETBODYRADIUS() + 2;
            
    WORD wTakeAbleDis wTakeRange 15;

            if ( 
    fDistance>wTakeAbleDis )
            {
                
    CInnerInterface::GetInstance().PrintMsgTextNS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("EMTAKE_FB_DISTANCE") );            
                return 
    E_FAIL;
            }

            if ( 
    sTargetID.emCrow==CROW_ITEM )
            {
                
    PITEMCLIENTDROP pItemDrop pLAND->GetItem sTargetID.dwID );
                if ( !
    pItemDrop )        return E_FAIL;

                if( 
    CInnerInterface::GetInstance().GetQBoxButton()->GetQBoxEnable() == FALSE )
                {
                    
    SITEM *pItem GLItemMan::GetInstance().GetItem(pItemDrop->sItemClient.sNativeID);
                    if( 
    pItem != NULL && pItem->sBasicOp.emItemType==ITEM_QITEM )
                    {
                        
    CInnerInterface::GetInstance().PrintMsgTextNS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("QBOX_OPTION_DISABLE_MSG") );
                        return 
    E_FAIL;
                    }
                }

                
    //    Note : Àκ¥¿¡ ³ÖÀ»¼ö ÀÖ´ÂÁö °Ë»ç.
                //
                
    BOOL bOk IsInsertToInven pItemDrop );
                if ( !
    bOk )
                {
    #if defined(VN_PARAM) //vietnamtest%%%
                    
    if( m_dwVietnamGainType == GAINTYPE_EMPTY )    return E_FAIL;
    #endif
                    //    ÀιêÀÌ °¡µæÂþÀ½.
                    //    ¸Þ½ÃÁö ¹ß»ý.
                    
    GLMSG::SNETPC_REQ_FIELD_TO_HOLD NetMsg;
                    
    NetMsg.dwGlobID sTargetID.dwID;
                    
    NETSENDTOFIELD ( &NetMsg );
                    return 
    S_OK;
                }

                
    //    ´ÙÀ½ ¸Þ½ÃÁö Áö¿¬ ÁöÁ¤.
                // pLAND->SETITEM_PICKDELAY ( sTargetID.dwID );
            
    }
            else if ( 
    sTargetID.emCrow==CROW_MONEY )
            {
                
    PMONEYCLIENTDROP pMoney GLGaeaClient::GetInstance().GetActiveMap()->GetMoney sTargetID.dwID );
                if ( !
    pMoney )        return E_FAIL;

                
    //    ´ÙÀ½ ¸Þ½ÃÁö Áö¿¬ ÁöÁ¤.
                // pLAND->SETMONEY_PICKDELAY ( sTargetID.dwID );
            
    }

            
    //    ¸Þ½ÃÁö ¹ß»ý.
            
    GLMSG::SNETPC_REQ_FIELD_TO_INVEN NetMsg;
            
    NetMsg.emCrow sTargetID.emCrow;
            
    NetMsg.dwID sTargetID.dwID;
            
    NetMsg.bPet    bPet;
            
    NETSENDTOFIELD ( &NetMsg );
        }

        return 
    S_OK;
    }

    //    Note : Àκ¥Å丮 ¾ÆÀÌÅÛ µé¶§, ³õÀ»¶§, ±³È¯ÇÒ¶§, ÇÕÄ¥¶§.
    HRESULT GLCharacter::ReqInvenTo WORD wPosXWORD wPosY )
    {
        
    SINVENITEMpInvenItem m_cInventory.FindPosItem wPosXwPosY );

        
    //    Note : Æ®·¡À̵å È°¼ºÈ­½Ã¿¡.
        //
        
    if ( GLTradeClient::GetInstance().Valid() )
        {
            if ( 
    pInvenItem )    GLTradeClient::GetInstance().SetPreItem SINVEN_POSpInvenItem->wPosXpInvenItem->wPosY ) );
            else                
    GLTradeClient::GetInstance().ReSetPreItem ();
            return 
    S_OK;
        }

        if( 
    ValidRebuildOpen() || ValidGarbageOpen() || ValidItemMixOpen() )    // ITEMREBUILD_MARK
        
    {
            if( 
    m_sPreInventoryItem.wPosX == wPosX && m_sPreInventoryItem.wPosY == wPosY )
            {
                
    m_sPreInventoryItem.RESET();
            }
            else
            {
                if( 
    pInvenItem )
                    
    m_sPreInventoryItem.SETwPosXwPosY );
                else
                    
    m_sPreInventoryItem.RESET();
            }
            return 
    S_OK;
        }

        if ( !
    VALID_HOLD_ITEM () && !pInvenItem )    return E_FAIL;

        if ( 
    VALID_HOLD_ITEM () && pInvenItem )
        {
    #if defined(VN_PARAM) //vietnamtest%%%
            
    const SITEMCUSTOMsCustom GET_HOLD_ITEM();
            
            if ( !
    sCustom.bVietnamGainItem )
    #endif
            
    {
                
    GLMSG::SNETPC_REQ_INVEN_EX_HOLD NetMsg;
                
    NetMsg.wPosX pInvenItem->wPosX;
                
    NetMsg.wPosY pInvenItem->wPosY;
                
    NETSENDTOFIELD ( &NetMsg );
            }
        }
        else if ( 
    pInvenItem )
        {
            
    GLMSG::SNETPC_REQ_INVEN_TO_HOLD NetMsg;
            
    NetMsg.wPosX pInvenItem->wPosX;
            
    NetMsg.wPosY pInvenItem->wPosY;
            
    NETSENDTOFIELD ( &NetMsg );
        }
        else if ( 
    VALID_HOLD_ITEM () )
        {
    #if defined(VN_PARAM) //vietnamtest%%%
            
    const SITEMCUSTOMsCustom GET_HOLD_ITEM();
            
            if ( !
    sCustom.bVietnamGainItem || ( sCustom.bVietnamGainItem && m_dwVietnamInvenCount ) )
    #endif
            
    {
                
    //    Note : ¸Þ½ÃÁö ¼Û½ÅÀü¿¡ À¯È¿ÇÒÁö¸¦ ¹Ì¸® °Ë»çÇÔ.
                //
                
    SITEMpItem GLItemMan::GetInstance().GetItem GET_HOLD_ITEM().sNativeID );
                
    GASSERT(pItem&&"¾ÆÀÌÅÆ ´ëÀÌÅͰ¡ Á¸Á¦ÇÏÁö ¾ÊÀ½");

                
    BOOL bOk m_cInventory.IsInsertable pItem->sBasicOp.wInvenSizeXpItem->sBasicOp.wInvenSizeYwPosXwPosY );
                if ( !
    bOk )
                {
                    
    //    ÀιêÀÌ °¡µæÂþÀ½.
                    
    return E_FAIL;
                }

                
    GLMSG::SNETPC_REQ_HOLD_TO_INVEN NetMsg;
                
    NetMsg.wPosX wPosX;
                
    NetMsg.wPosY wPosY;
    #if defined(VN_PARAM) //vietnamtest%%%
                
    NetMsg.bUseVietnamInven sCustom.bVietnamGainItem;
    #else
                
    NetMsg.bUseVietnamInven FALSE;
    #endif
                
    NETSENDTOFIELD ( &NetMsg );

            }
    #if defined(VN_PARAM) //vietnamtest%%%
            
    else
            {
                
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("EMINVEN_VIETNAM_ITEMGET_FAILED") );
                return 
    E_FAIL;        
            }
    #endif
        
    }

        return 
    S_OK;
    }

    //    Note : º£Æ®³² Å½´Ð ¹æÁö Àκ¥Å丮 ¾ÆÀÌÅÛ µé¶§, ³õÀ»¶§, ±³È¯ÇÒ¶§, ÇÕÄ¥¶§.
    HRESULT GLCharacter::ReqVNInvenTo WORD wPosXWORD wPosY )
    {
        if ( !
    IsValidBody() )                            return E_FAIL;
        if ( 
    ValidWindowOpen() )                        return E_FAIL;    

        
    SINVENITEMpInvenItem m_cVietnamInventory.FindPosItem wPosXwPosY );
        if ( !
    VALID_HOLD_ITEM () && !pInvenItem )        return E_FAIL;


        const 
    SITEMCUSTOMsCustom GET_HOLD_ITEM();


        if ( 
    VALID_HOLD_ITEM () && pInvenItem )
        {
            if ( 
    sCustom.bVietnamGainItem )
            {
                
    GLMSG::SNETPC_REQ_VNGAIN_EX_HOLD NetMsg;
                
    NetMsg.wPosX pInvenItem->wPosX;
                
    NetMsg.wPosY pInvenItem->wPosY;
                
    NETSENDTOFIELD ( &NetMsg );
            }
        }
        else if ( 
    pInvenItem )
        {
            
    GLMSG::SNETPC_REQ_VNGAIN_TO_HOLD NetMsg;
            
    NetMsg.wPosX pInvenItem->wPosX;
            
    NetMsg.wPosY pInvenItem->wPosY;
            
    NETSENDTOFIELD ( &NetMsg );
        }
        else if ( 
    VALID_HOLD_ITEM () && sCustom.bVietnamGainItem )
        {
            
    //    Note : ¸Þ½ÃÁö ¼Û½ÅÀü¿¡ À¯È¿ÇÒÁö¸¦ ¹Ì¸® °Ë»çÇÔ.
            //
            
    SITEMpItem GLItemMan::GetInstance().GetItem GET_HOLD_ITEM().sNativeID );
            
    GASSERT(pItem&&"¾ÆÀÌÅÆ ´ëÀÌÅͰ¡ Á¸Á¦ÇÏÁö ¾ÊÀ½");

            
    BOOL bOk m_cVietnamInventory.IsInsertable pItem->sBasicOp.wInvenSizeXpItem->sBasicOp.wInvenSizeYwPosXwPosY );
            if ( !
    bOk )
            {
                
    //    ÀιêÀÌ °¡µæÂþÀ½.
                
    return E_FAIL;
            }

            
    GLMSG::SNETPC_REQ_HOLD_TO_VNGAIN NetMsg;
            
    NetMsg.wPosX wPosX;
            
    NetMsg.wPosY wPosY;

            
    NETSENDTOFIELD ( &NetMsg );
        }
        return 
    S_OK;
    }

    //    Note : º£Æ®³² Àκ¥Å丮¿¡¼­ ¿À¸¥ÂÊ ¹öưÀ¸·Î ¾ÆÀÌÅÛÀ» ¿Å±æ °æ¿ì
    HRESULT GLCharacter::ReqVietemInvenTo (WORD wPosXWORD wPosY )
    {

        if( 
    m_dwVietnamInvenCount <= )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("EMINVEN_VIETNAM_ITEMGET_FAILED") );
            return 
    E_FAIL;
        }

        
    SINVENITEMpInvenItem m_cVietnamInventory.FindPosItem wPosXwPosY );

        if ( !
    pInvenItem )    return E_FAIL;

        
    SITEMpItem GLItemMan::GetInstance().GetItem pInvenItem->sItemCustom.sNativeID );
        if ( !
    pItem )            return E_FAIL;

        
    WORD wINVENX pItem->sBasicOp.wInvenSizeX;
        
    WORD wINVENY pItem->sBasicOp.wInvenSizeY;

        
    //    Note : Àκ¥¿¡ ¿©À¯ °ø°£ÀÌ ÀÖ´ÂÁö °Ë»ç.
        //
        //BOOL bITEM_SPACE(FALSE);
        //if ( pItem->ISPILE() )
        //{
        //    //    °ãħ ¾ÆÀÌÅÛÀÏ °æ¿ì.
        //    WORD wPILENUM = pItem->sDrugOp.wPileNum;
        //    WORD wREQINSRTNUM = ( wBuyNum * pItem->GETAPPLYNUM() );
        //    bITEM_SPACE = m_cInventory.ValidPileInsrt ( wREQINSRTNUM, sBUYNID, wPILENUM, wINVENX, wINVENY );
        //}
        //else
        //{
        //    GASSERT(wBuyNum==1&&"°ãħÀÌ ºÒ°¡´ÉÇÑ ¾ÆÀÌÅÛÀº 1°³¾¿¸¸ ±¸ÀÔ °¡´ÉÇÕ´Ï´Ù.");

        //    //    ÀϹݠ¾ÆÀÌÅÛÀÇ °æ¿ì.
        //    WORD wInsertPosX(0), wInsertPosY(0);
        //    bITEM_SPACE = m_cInventory.FindInsrtable ( wINVENX, wINVENY, wInsertPosX, wInsertPosY );
        //}

        
    WORD wInsertPosX(0), wInsertPosY(0);
        
    BOOL bITEM_SPACE(FALSE);
        
    bITEM_SPACE m_cInventory.FindInsrtable wINVENXwINVENYwInsertPosXwInsertPosY );

        if ( !
    bITEM_SPACE )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("EMCHARGED_ITEM_GET_FB_NOINVEN") );
            return 
    E_FAIL;
        }

        
    //    ±¸ÀÔ ¿äû ¸Þ½ÃÁö.
        
    GLMSG::SNETPC_REQ_VNINVEN_TO_INVEN NetMsg;
        
    NetMsg.wPosX wPosX;
        
    NetMsg.wPosY wPosY;

        
    NETSENDTOFIELD ( &NetMsg );

        return 
    S_OK;
    }

    //    Note : º£Æ®³² Àκ¥Å丮ÀÇ ¾ÆÀÌÅÛ Àüü »èÁ¦
    HRESULT GLCharacter::ReqVNInveReset ()
    {
        
    m_cVietnamInventory.DeleteItemAll();

        
    GLMSG::SNETPC_REQ_VNGAIN_INVEN_RESET NetMsg;

        
    NETSENDTOFIELD ( &NetMsg );

        return 
    S_OK;
    }

    HRESULT GLCharacter::ReqRetrievePoints ()
    {
        
    GLMSG::SNETPC_RETRIEVE_POINTS NetMsg;
        
    NETSENDTOFIELD ( &NetMsg );
        return 
    S_OK;
    }
    // *****************************************************
    // Desc: ¾ÆÀÌÅÛ ÀÎþƮ ½Ãµµ
    // *****************************************************
    HRESULT GLCharacter::ReqGrinding WORD wPosXWORD wPosY )
    {
        if ( !
    IsValidBody() )                        return E_FAIL;
        if ( 
    GLTradeClient::GetInstance().Valid() )    return E_FAIL;

        
    SINVENITEMpInvenItem m_cInventory.FindPosItem wPosXwPosY );
        if ( !
    pInvenItem )    return E_FAIL;

        
    wPosX pInvenItem->wPosX;
        
    wPosY pInvenItem->wPosY;

        
    SITEMpItem GLItemMan::GetInstance().GetItem pInvenItem->sItemCustom.sNativeID );
        if ( !
    pItem )            return E_FAIL;

        
    SITEMpHold GET_SLOT_ITEMDATA SLOT_HOLD );
        if ( !
    pHold )    return S_FALSE;

        if ( 
    pHold->sBasicOp.emItemType != ITEM_GRINDING )    return S_FALSE;

        
    BOOL bGrinding pItem->sBasicOp.emItemType==ITEM_SUIT && pItem->sSuitOp.wReModelNum>0;
        if ( !
    bGrinding )
        {
            
    CInnerInterface::GetInstance().PrintMsgText NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("GRINDING_NOITEM") );
            return 
    S_FALSE;
        }

        if ( 
    pHold->sGrindingOp.emTYPE == EMGRINDING_DAMAGE || pHold->sGrindingOp.emTYPE == EMGRINDING_DEFENSE )
        {
            if ( 
    pInvenItem->sItemCustom.GETGRADE(pHold->sGrindingOp.emTYPE)>=GLCONST_CHAR::wGRADE_MAX )
            {
                
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("GRINDING_MAX") );
                return 
    S_FALSE;
            }
        }
        else
        {
            if ( 
    pInvenItem->sItemCustom.GETGRADE(pHold->sGrindingOp.emTYPE)>=GLCONST_CHAR::wGRADE_MAX_REGI )
            {
                
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("GRINDING_MAX") );
                return 
    S_FALSE;
            }
        }



        
    //    Note : ¿¬¸¶Á¦ µî±Þ, ³·Àº ¿¬¸¶Á¦·Î ³ôÀº ¿¬¸¶ ºÒ°¡´É
        //
        
        
    BYTE cGrade 0;

        
    cGrade pInvenItem->sItemCustom.GETGRADE(pHold->sGrindingOp.emTYPE);

        if ( 
    cGrade >= GRADE_HIGH && pHold->sGrindingOp.emGRINDER_TYPE != EMGRINDER_TOP )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("GRINDING_NOT_BEST") );
            return 
    S_FALSE;
        }
        else if ( 
    cGrade >=GRADE_NORMAL && pHold->sGrindingOp.emGRINDER_TYPE EMGRINDER_HIGH )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("GRINDING_NOT_HIGH") );
            return 
    S_FALSE;
        }


        
    // ¹æ¾î±¸ ¹× ¹«±â°¡ ÃÖ»óÀ§ µî±Þ±îÁö ÀÎæƮ°¡ µÇ´ÂÁö È®ÀÎ
        
    if ( cGrade >= GRADE_HIGH && pItem->sGrindingOp.emGRINDER_TYPE != EMGRINDER_TOP )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("GRINDING_NOT_BESTITEM") );
            return 
    S_FALSE;
        }

        
    //    Note : ¿¬¸¶Á¦ ¼ö·® È®ÀÎ
        
    if ( cGrade >= GRADE_HIGH )
        {
            if ( 
    GLCONST_CHAR::wUSE_GRADE_NUM[cGrade-GRADE_HIGH] > GET_SLOT_ITEM(SLOT_HOLD).wTurnNum )
            {
                
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("GRINDING_NOT_NUM"), GLCONST_CHAR::wUSE_GRADE_NUM[cGrade-GRADE_HIGH]  );
                return 
    S_FALSE;
            }

        }

        
    //Note : °í±Þ ¿¬¸¶Á¦ÀÏ °æ¿ìµî GRADE_NORMAL ±Þ ¹Ì¸¸ ¿¬¸¶ ºÒ°¡´É.
        //
        //if ( pInvenItem->sItemCustom.GETGRADE(pHold->sGrindingOp.emTYPE)<GRADE_NORMAL && pHold->sGrindingOp.bHIGH )
        //{
        //    CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("GRINDING_NOT_LOW") );
        //    return S_FALSE;
        //}

        
    if ( pItem->sSuitOp.gdDamage == GLPADATA(0,0) )
        {
            if ( 
    pHold->sGrindingOp.emCLASS != EMGRINDING_CLASS_CLOTH )
            {
                
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("GRINDING_DEFCLASS") );
                return 
    S_FALSE;
            }
        }
        else
        {
            if ( 
    pHold->sGrindingOp.emCLASS != EMGRINDING_CLASS_ARM )
            {
                
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("GRINDING_DEFCLASS") );
                return 
    S_FALSE;
            }
        }

        
    //    Note : ¼­¹ö¿¡ ¿¬¸¶ ½Ãµµ ¿äû.
        //
        
    GLMSG::SNET_INVEN_GRINDING NetMsg;
        
    NetMsg.wPosX wPosX;
        
    NetMsg.wPosY wPosY;

        
    NETSENDTOFIELD ( &NetMsg );

        return 
    S_OK;
    }

    HRESULT GLCharacter::ReqDisguise WORD wPosXWORD wPosY )
    {
        if ( !
    IsValidBody() )                        return E_FAIL;
        if ( 
    GLTradeClient::GetInstance().Valid() )    return E_FAIL;
        
    //if( ValidRebuildOpen() )    return E_FAIL;    // ITEMREBUILD_MARK

        
    SINVENITEMpInvenItem m_cInventory.FindPosItem wPosXwPosY );
        if ( !
    pInvenItem )    return E_FAIL;

        
    wPosX pInvenItem->wPosX;
        
    wPosY pInvenItem->wPosY;

        
    SITEMpItem GLItemMan::GetInstance().GetItem pInvenItem->sItemCustom.sNativeID );
        if ( !
    pItem )            return E_FAIL;

        
    SITEMpHold GET_SLOT_ITEMDATA SLOT_HOLD );
        if ( !
    pHold )    return S_FALSE;

        if ( !
    pHold->sBasicOp.IsDISGUISE() )    return S_FALSE;

        if ( 
    pItem->sBasicOp.IsDISGUISE() )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("EMREQ_DISGUISE_FB_FAIL") );
            return 
    S_FALSE;
        }

        if ( ( 
    pHold->sBasicOp.dwReqCharClass pItem->sBasicOp.dwReqCharClass ) == NULL )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("EMREQ_DISGUISE_FB_DEFSUIT") );
            return 
    S_FALSE;
        }
        
        if ( 
    pHold->sBasicOp.emItemType != ITEM_SUIT )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("EMREQ_DISGUISE_FB_NOTSUIT") );
            return 
    S_FALSE;
        }

        if ( 
    pItem->sBasicOp.emItemType != ITEM_SUIT )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("EMREQ_DISGUISE_FB_NOTSUIT") );
            return 
    S_FALSE;
        }

        if ( 
    pHold->sSuitOp.emSuit != pItem->sSuitOp.emSuit )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("EMREQ_DISGUISE_FB_DEFSUIT") );
            return 
    S_FALSE;
        }

        if ( 
    pInvenItem->sItemCustom.nidDISGUISE!=SNATIVEID(false) )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("EMREQ_DISGUISE_FB_ALREADY") );
            return 
    S_FALSE;
        }

        
    GLMSG::SNET_INVEN_DISGUISE    NetMsg;
        
    NetMsg.wPosX wPosX;
        
    NetMsg.wPosY wPosY;
        
    NETSENDTOFIELD ( &NetMsg );

        return 
    S_OK;
    }

    HRESULT GLCharacter::ReqCleanser WORD wPosXWORD wPosY )
    {
        if ( !
    IsValidBody() )                        return E_FAIL;
        if ( 
    GLTradeClient::GetInstance().Valid() )    return E_FAIL;
        
    //if( ValidRebuildOpen() )    return E_FAIL;    // ITEMREBUILD_MARK

        
    SINVENITEMpInvenItem m_cInventory.FindPosItem wPosXwPosY );
        if ( !
    pInvenItem )    return E_FAIL;

        
    wPosX pInvenItem->wPosX;
        
    wPosY pInvenItem->wPosY;

        
    SITEMpItem GLItemMan::GetInstance().GetItem pInvenItem->sItemCustom.sNativeID );
        if ( !
    pItem )            return E_FAIL;

        
    SITEMpHold GET_SLOT_ITEMDATA SLOT_HOLD );
        if ( !
    pHold )    return S_FALSE;

        
    //if ( pHold->sBasicOp.emItemType!=ITEM_CLEANSER )
        //{
        //    CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMREQ_CLEANSER_FB_NOCLEANSER") );
        //    return S_FALSE;
        //}

        
    if ( pInvenItem->sItemCustom.nidDISGUISE==SNATIVEID(false) )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("EMREQ_CLEANSER_FB_NONEED") );
            return 
    S_FALSE;
        }

        
    GLMSG::SNET_INVEN_CLEANSER    NetMsg;
        
    NetMsg.wPosX wPosX;
        
    NetMsg.wPosY wPosY;
        
    NETSENDTOFIELD ( &NetMsg );

        return 
    S_OK;
    }

    HRESULT GLCharacter::ReqCharCard WORD wPosXWORD wPosY )
    {
        
    //if ( !IsValidBody() )                        return E_FAIL;
        //if ( GLTradeClient::GetInstance().Valid() )    return E_FAIL;
        //if( ValidRebuildOpen() )    return E_FAIL;    // ITEMREBUILD_MARK

        
    SINVENITEMpInvenItem m_cInventory.FindPosItem wPosXwPosY );
        if ( !
    pInvenItem )    return E_FAIL;

        
    wPosX pInvenItem->wPosX;
        
    wPosY pInvenItem->wPosY;

        
    SITEMpItem GLItemMan::GetInstance().GetItem pInvenItem->sItemCustom.sNativeID );
        if ( !
    pItem )            return E_FAIL;

        
    //if ( pItem->sBasicOp.emItemType!=ITEM_CHARACTER_CARD )    return E_FAIL;

        
    GLMSG::SNET_INVEN_CHARCARD NetMsg;
        
    NetMsg.wPosX wPosX;
        
    NetMsg.wPosY wPosY;
        
    NETSENDTOFIELD ( &NetMsg );

        return 
    S_OK;
    }

    //    Note : Ã¢°í Ä«µå »ç¿ë.
    HRESULT GLCharacter::ReqStorageCard WORD wPosXWORD wPosYWORD wSTORAGE )
    {
        
    //if ( !IsValidBody() )                        return E_FAIL;
        //if ( GLTradeClient::GetInstance().Valid() )    return E_FAIL;
        //if( ValidRebuildOpen() )                    return E_FAIL;    // ITEMREBUILD_MARK

        
    SINVENITEMpInvenItem m_cInventory.FindPosItem wPosXwPosY );
        if ( !
    pInvenItem )    return E_FAIL;

        
    wPosX pInvenItem->wPosX;
        
    wPosY pInvenItem->wPosY;

        
    SITEMpItem GLItemMan::GetInstance().GetItem pInvenItem->sItemCustom.sNativeID );
        if ( !
    pItem )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("EMREQ_STORAGECARD_FB_NOITEM") );
            return 
    E_FAIL;
        }

        
    //if ( pItem->sBasicOp.emItemType!=ITEM_STORAGE_CARD )
        //{
        //    CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMREQ_STORAGECARD_FB_NOITEM") );
        //    return E_FAIL;
        //}

        
    if ( wSTORAGE || wSTORAGE>=(EMSTORAGE_CHANNEL-1) )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("EMREQ_STORAGECARD_FB_INVNUM") );
            return 
    E_FAIL;
        }

        
    GLMSG::SNET_INVEN_STORAGECARD NetMsg;
        
    NetMsg.wPosX wPosX;
        
    NetMsg.wPosY wPosY;
        
    NetMsg.wSTORAGE wSTORAGE;
        
    NETSENDTOFIELD ( &NetMsg );

        return 
    S_OK;
    }

    HRESULT GLCharacter::ReqInvenLineCard WORD wPosXWORD wPosY )
    {
        
    //if ( !IsValidBody() )                        return E_FAIL;
        //if ( GLTradeClient::GetInstance().Valid() )    return E_FAIL;
        //if( ValidRebuildOpen() )    return E_FAIL;    // ITEMREBUILD_MARK

        
    SINVENITEMpInvenItem m_cInventory.FindPosItem wPosXwPosY );
        if ( !
    pInvenItem )    return E_FAIL;

        
    wPosX pInvenItem->wPosX;
        
    wPosY pInvenItem->wPosY;

        
    SITEMpItem GLItemMan::GetInstance().GetItem pInvenItem->sItemCustom.sNativeID );
        if ( !
    pItem )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("EMREQ_INVENLINE_FB_NOITEM") );
            return 
    E_FAIL;
        }

        
    //if ( pItem->sBasicOp.emItemType!=ITEM_INVEN_CARD )
        //{
        //    CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMREQ_INVENLINE_FB_NOITEM") );
        //    return E_FAIL;
        //}

        
    if ( m_wINVENLINE >= (EM_INVENSIZE_Y-EM_INVEN_DEF_SIZE_Y-1) )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("EMREQ_INVENLINE_FB_MAXLINE") );
            return 
    E_FAIL;
        }

        
    GLMSG::SNET_INVEN_INVENLINE NetMsg;
        
    NetMsg.wPosX wPosX;
        
    NetMsg.wPosY wPosY;
        
    NETSENDTOFIELD ( &NetMsg );

        return 
    S_OK;
    }

    HRESULT GLCharacter::ReqRemodelOpenCard WORD wPosXWORD wPosY )
    {
        
    //if ( !IsValidBody() )                        return E_FAIL;
        //if ( GLTradeClient::GetInstance().Valid() )    return E_FAIL;
        //if ( ValidRebuildOpen() )                    return E_FAIL;    // ITEMREBUILD_MARK

        
    SINVENITEMpInvenItem m_cInventory.FindPosItem wPosXwPosY );
        if ( !
    pInvenItem )    return E_FAIL;

        
    wPosX pInvenItem->wPosX;
        
    wPosY pInvenItem->wPosY;

        
    SITEMpItem GLItemMan::GetInstance().GetItem pInvenItem->sItemCustom.sNativeID );
        if ( !
    pItem )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("EMREQ_REMODELOPEN_FB_NOITEM") );
            return 
    E_FAIL;
        }

        
    GLMSG::SNET_INVEN_REMODELOPEN NetMsg;
        
    NetMsg.wPosX wPosX;
        
    NetMsg.wPosY wPosY;
        
    NETSENDTOFIELD ( &NetMsg );

        return 
    S_OK;
    }

    HRESULT GLCharacter::ReqGabargeOpenCard WORD wPosXWORD wPosY )
    {
        
    SINVENITEMpInvenItem m_cInventory.FindPosItem wPosXwPosY );
        if ( !
    pInvenItem )    return E_FAIL;

        
    wPosX pInvenItem->wPosX;
        
    wPosY pInvenItem->wPosY;

        
    SITEMpItem GLItemMan::GetInstance().GetItem pInvenItem->sItemCustom.sNativeID );
        if ( !
    pItem )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("EMREQ_REMODELOPEN_FB_NOITEM") );
            return 
    E_FAIL;
        }

        
    GLMSG::SNET_INVEN_GARBAGEOPEN NetMsg;
        
    NetMsg.wPosX wPosX;
        
    NetMsg.wPosY wPosY;
        
    NETSENDTOFIELD ( &NetMsg );

        return 
    S_OK;
    }


    HRESULT GLCharacter::ReqStorageOpenCard WORD wPosXWORD wPosY )
    {
        
    //if ( !IsValidBody() )                        return E_FAIL;
        //if ( GLTradeClient::GetInstance().Valid() )    return E_FAIL;
        //if( ValidRebuildOpen() )    return E_FAIL;    // ITEMREBUILD_MARK

        // Ã¢°í°¡ ¿­·ÁÀÖÀ¸¸é Ã¢°í ¿¬°áÄ«µå¸¦ »ç¿ëÇÒ ¼ö ¾ø´Ù.
        
    if ( CInnerInterface::GetInstance().IsStorageWindowOpen () ) return E_FAIL;

        
    SINVENITEMpInvenItem m_cInventory.FindPosItem wPosXwPosY );
        if ( !
    pInvenItem )    return E_FAIL;

        
    wPosX pInvenItem->wPosX;
        
    wPosY pInvenItem->wPosY;

        
    SITEMpItem GLItemMan::GetInstance().GetItem pInvenItem->sItemCustom.sNativeID );
        if ( !
    pItem )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("EMREQ_STORAGEOPEN_FB_NOITEM") );
            return 
    E_FAIL;
        }

        
    //if ( pItem->sBasicOp.emItemType!=ITEM_STORAGE_CONNECT )
        //{
        //    CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMREQ_STORAGEOPEN_FB_NOITEM") );
        //    return E_FAIL;
        //}

        
    GLMSG::SNET_INVEN_STORAGEOPEN NetMsg;
        
    NetMsg.wPosX wPosX;
        
    NetMsg.wPosY wPosY;
        
    NETSENDTOFIELD ( &NetMsg );

        return 
    S_OK;
    }

    HRESULT GLCharacter::ReqStorageCloseCard()
    {
        
    //if ( !IsValidBody() )                        return E_FAIL;
        //if ( GLTradeClient::GetInstance().Valid() )    return E_FAIL;

        
    GLMSG::SNET_INVEN_STORAGECLOSE NetMsg;
        
    NETSENDTOFIELD ( &NetMsg );

        return 
    S_OK;
    }

    HRESULT GLCharacter::ReqPremiumSet WORD wPosXWORD wPosY )
    {
        
    //if ( !IsValidBody() )                        return E_FAIL;
        //if ( GLTradeClient::GetInstance().Valid() )    return E_FAIL;
        //if( ValidRebuildOpen() )    return E_FAIL;    // ITEMREBUILD_MARK

        
    SINVENITEMpInvenItem m_cInventory.FindPosItem wPosXwPosY );
        if ( !
    pInvenItem )    return E_FAIL;

        
    wPosX pInvenItem->wPosX;
        
    wPosY pInvenItem->wPosY;

        
    SITEMpItem GLItemMan::GetInstance().GetItem pInvenItem->sItemCustom.sNativeID );
        if ( !
    pItem )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("EMREQ_PREMIUMSET_FB_NOITEM") );
            return 
    E_FAIL;
        }

        
    //if ( pItem->sBasicOp.emItemType!=ITEM_PREMIUMSET )
        //{
        //    CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMREQ_PREMIUMSET_FB_NOITEM") );
        //    return E_FAIL;
        //}

        
    GLMSG::SNET_INVEN_PREMIUMSET NetMsg;
        
    NetMsg.wPosX wPosX;
        
    NetMsg.wPosY wPosY;
        
    NETSENDTOFIELD ( &NetMsg );

        return 
    S_OK;
    }

    HRESULT GLCharacter::ReqInvenHairChange WORD wPosXWORD wPosY )
    {
        
    //if ( !IsValidBody() )                        return E_FAIL;
        //if ( GLTradeClient::GetInstance().Valid() )    return E_FAIL;
        //if( ValidRebuildOpen() )    return E_FAIL;    // ITEMREBUILD_MARK

        
    SINVENITEMpInvenItem m_cInventory.FindPosItem wPosXwPosY );
        if ( !
    pInvenItem )    return E_FAIL;

        
    wPosX pInvenItem->wPosX;
        
    wPosY pInvenItem->wPosY;

        
    SITEMpItem GLItemMan::GetInstance().GetItem pInvenItem->sItemCustom.sNativeID );
        if ( !
    pItem )
        {
            
    CInnerInterface::GetInstance().PrintMsgText NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("EMINVEN_HAIR_CHANGE_FB_NOITEM") );
            return 
    E_FAIL;
        }

        
    //if ( pItem->sBasicOp.emItemType!=ITEM_HAIR )
        //{
        //    CInnerInterface::GetInstance().PrintMsgText ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMINVEN_HAIR_CHANGE_FB_NOITEM") );
        //    return E_FAIL;
        //}

        
    GLMSG::SNETPC_INVEN_HAIR_CHANGE NetMsg;
        
    NetMsg.wPosX wPosX;
        
    NetMsg.wPosY wPosY;
        
    NETSENDTOFIELD ( &NetMsg );

        return 
    S_OK;
    }

    // *****************************************************
    // Desc: ¸Ó¸® ½ºÅ¸ÀÏ º¯°æ
    // *****************************************************
    HRESULT GLCharacter::ReqInvenHairStyleChange WORD wHairStyle )
    {
        
    GLMSG::SNETPC_INVEN_HAIRSTYLE_CHANGE NetMsg;
        
    NetMsg.wPosX      m_wInvenPosX1;
        
    NetMsg.wPosY      m_wInvenPosY1;
        
    NetMsg.wHairStyle wHairStyle;
        
    NETSENDTOFIELD ( &NetMsg );

        
    m_wInvenPosX1 0;
        
    m_wInvenPosY1 0;

        return 
    S_OK;
    }

    // *****************************************************
    // Desc: ¸Ó¸® ½ºÅ¸ÀÏ º¯°æ
    // *****************************************************
    HRESULT GLCharacter::InvenHairStyleChange WORD wPosXWORD wPosY )
    {
        
    //if ( !IsValidBody() )                        return E_FAIL;
        //if ( GLTradeClient::GetInstance().Valid() )    return E_FAIL;
        //if( ValidRebuildOpen() )    return E_FAIL;    // ITEMREBUILD_MARK

        
    SINVENITEMpInvenItem m_cInventory.FindPosItem wPosXwPosY );
        if ( !
    pInvenItem )    return E_FAIL;

        
    SITEMpItem GLItemMan::GetInstance().GetItem pInvenItem->sItemCustom.sNativeID );
        if ( !
    pItem )
        {
            
    CInnerInterface::GetInstance().PrintMsgText NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("EMINVEN_HAIR_CHANGE_FB_NOITEM") );
            return 
    E_FAIL;
        }

        
    //if ( pItem->sBasicOp.emItemType!=ITEM_HAIR_STYLE )
        //{
        //    CInnerInterface::GetInstance().PrintMsgText ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMINVEN_HAIR_CHANGE_FB_NOITEM") );
        //    return E_FAIL;
        //}

        
    CInnerInterface::GetInstance().ShowGroupFocusHAIRSTYLECARD_WINDOW );

        
    m_wInvenPosX1 wPosX;
        
    m_wInvenPosY1 wPosY;

        return 
    S_OK;
    }

    // *****************************************************
    // Desc: ¸Ó¸® »ö±ò º¯°æ
    // *****************************************************
    HRESULT GLCharacter::ReqInvenHairColorChange WORD wHairColor )
    {
        
    GLMSG::SNETPC_INVEN_HAIRCOLOR_CHANGE NetMsg;
        
    NetMsg.wPosX      m_wInvenPosX2;
        
    NetMsg.wPosY      m_wInvenPosY2;
        
    NetMsg.wHairColor wHairColor;
        
    NETSENDTOFIELD ( &NetMsg );

        
    m_wInvenPosX2 0;
        
    m_wInvenPosY2 0;

        return 
    S_OK;
    }

    // *****************************************************
    // Desc: ¸Ó¸® »ö±ò º¯°æ
    // *****************************************************
    HRESULT GLCharacter::InvenHairColorChange WORD wPosXWORD wPosY )
    {
        
    //if ( !IsValidBody() )                        return E_FAIL;
        //if ( GLTradeClient::GetInstance().Valid() )    return E_FAIL;
        //if( ValidRebuildOpen() )    return E_FAIL;    // ITEMREBUILD_MARK

        
    SINVENITEMpInvenItem m_cInventory.FindPosItem wPosXwPosY );
        if ( !
    pInvenItem )    return E_FAIL;

        
    SITEMpItem GLItemMan::GetInstance().GetItem pInvenItem->sItemCustom.sNativeID );
        if ( !
    pItem )
        {
            
    CInnerInterface::GetInstance().PrintMsgText NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("EMINVEN_HAIR_CHANGE_FB_NOITEM") );
            return 
    E_FAIL;
        }

        
    //if ( pItem->sBasicOp.emItemType!=ITEM_HAIR_COLOR )
        //{
        //    CInnerInterface::GetInstance().PrintMsgText ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMINVEN_HAIR_CHANGE_FB_NOITEM") );
        //    return E_FAIL;
        //}

        
    DoModalID2GAMEINTEXT("MODAL_HAIRCOLOR_INFO"), MODAL_INFOMATIONOKMODAL_HAIRCOLOR_INFO );

        
    m_wInvenPosX2 wPosX;
        
    m_wInvenPosY2 wPosY;

        return 
    S_OK;
    }

    HRESULT GLCharacter::InvenBikeColorChange WORD wPosXWORD wPosY //add bike color
    {
        
    SINVENITEMpInvenItem m_cInventory.FindPosItem wPosXwPosY );
        if ( !
    pInvenItem )    return E_FAIL;

        
    SITEMpItem GLItemMan::GetInstance().GetItem pInvenItem->sItemCustom.sNativeID );
        if ( !
    pItem )
        {
            
    CInnerInterface::GetInstance().PrintMsgText NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("EMINVEN_VEHICLE_CHANGE_FB_NOITEM") );
            return 
    E_FAIL;
        }

        if ( !
    m_bVehicle )    
        {
            
    CInnerInterface::GetInstance().PrintMsgText NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("EMINVEN_VEHICLE_CHANGE_FB_NOVEHICLE") );
            return 
    E_FAIL;
        }

        
    DoModalID2GAMEINTEXT("MODAL_BIKECOLOR_INFO"), MODAL_INFOMATIONOKMODAL_BIKECOLOR_INFO );

        
    m_wInvenPosX2 wPosX;
        
    m_wInvenPosY2 wPosY;

        return 
    S_OK;
    }

    HRESULT GLCharacter::ReqInvenBikeColorChange WORD wBikeColor //add bike color
    {
        
    GLMSG::SNETPC_INVEN_BIKECOLOR_CHANGE NetMsg;
        
    NetMsg.wPosX      m_wInvenPosX2;
        
    NetMsg.wPosY      m_wInvenPosY2;
        
    NetMsg.wBikeColor wBikeColor;
        
    NETSENDTOFIELD ( &NetMsg );

        
    m_wInvenPosX3 0;
        
    m_wInvenPosY3 0;

        return 
    S_OK;
    }

    //    Note : ¾ó±¼½ºÅ¸ÀÏ º¯°æ.
    HRESULT GLCharacter::ReqInvenFaceChange WORD wPosXWORD wPosY )
    {
        
    //if ( !IsValidBody() )                        return E_FAIL;
        //if ( GLTradeClient::GetInstance().Valid() )    return E_FAIL;
        //if( ValidRebuildOpen() )    return E_FAIL;    // ITEMREBUILD_MARK

        
    SINVENITEMpInvenItem m_cInventory.FindPosItem wPosXwPosY );
        if ( !
    pInvenItem )    return E_FAIL;

        
    wPosX pInvenItem->wPosX;
        
    wPosY pInvenItem->wPosY;

        
    SITEMpItem GLItemMan::GetInstance().GetItem pInvenItem->sItemCustom.sNativeID );
        if ( !
    pItem )
        {
            
    CInnerInterface::GetInstance().PrintMsgText NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("EMINVEN_FACE_CHANGE_FB_NOITEM") );
            return 
    E_FAIL;
        }

        
    //if ( pItem->sBasicOp.emItemType!=ITEM_FACE )
        //{
        //    CInnerInterface::GetInstance().PrintMsgText ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMINVEN_FACE_CHANGE_FB_NOITEM") );
        //    return E_FAIL;
        //}

        
    GLMSG::SNETPC_INVEN_FACE_CHANGE NetMsg;
        
    NetMsg.wPosX wPosX;
        
    NetMsg.wPosY wPosY;
        
    NETSENDTOFIELD ( &NetMsg );

        return 
    S_OK;
    }

    // *****************************************************
    // Desc: ¾ó±¼ ½ºÅ¸ÀÏ º¯°æ
    // *****************************************************
    HRESULT GLCharacter::ReqInvenFaceStyleChange WORD wFaceStyle )
    {
        
    GLMSG::SNETPC_INVEN_FACESTYLE_CHANGE NetMsg;
        
    NetMsg.wPosX      m_wInvenPosX1;
        
    NetMsg.wPosY      m_wInvenPosY1;
        
    NetMsg.wFaceStyle wFaceStyle;
        
    NETSENDTOFIELD ( &NetMsg );

        
    m_wInvenPosX1 0;
        
    m_wInvenPosY1 0;

        return 
    S_OK;
    }

    // *****************************************************
    // Desc: ¾ó±¼ ½ºÅ¸ÀÏ º¯°æ
    // *****************************************************
    HRESULT GLCharacter::InvenFaceStyleChange WORD wPosXWORD wPosY )
    {
        
    SINVENITEMpInvenItem m_cInventory.FindPosItem wPosXwPosY );
        if ( !
    pInvenItem )    return E_FAIL;

        
    SITEMpItem GLItemMan::GetInstance().GetItem pInvenItem->sItemCustom.sNativeID );
        if ( !
    pItem )
        {
            
    CInnerInterface::GetInstance().PrintMsgText NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("EMINVEN_FACE_CHANGE_FB_NOITEM") );
            return 
    E_FAIL;
        }

        
    CInnerInterface::GetInstance().ShowGroupFocusFACE_CHANGE_WINDOW );

        
    m_wInvenPosX1 wPosX;
        
    m_wInvenPosY1 wPosY;    

        return 
    S_OK;
    }

    HRESULT GLCharacter::InvenGenderChange WORD wPosXWORD wPosY )
    {
        
    SINVENITEMpInvenItem m_cInventory.FindPosItem wPosXwPosY );
        if ( !
    pInvenItem )    return E_FAIL;

        
    SITEMpItem GLItemMan::GetInstance().GetItem pInvenItem->sItemCustom.sNativeID );
        if ( !
    pItem )
        {
            
    CInnerInterface::GetInstance().PrintMsgText NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("EMINVEN_GENDER_CHANGE_FB_NOITEM") );
            return 
    E_FAIL;
        }

        if ( 
    pItem->sBasicOp.emItemType != ITEM_GENDER_CHANGE )
        {
            
    CInnerInterface::GetInstance().PrintMsgText NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("EMINVEN_GENDER_CHANGE_FB_ITEMTYPE") );
            return 
    E_FAIL;
        }

        
    //added by   | 08-07-2012 | make extreme can use gender card
        /*if ( m_emClass == GLCC_EXTREME_M || m_emClass == GLCC_EXTREME_W )
        {
            CInnerInterface::GetInstance().PrintMsgText ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMINVEN_GENDER_CHANGE_FB_BADCLASS") );
            return E_FAIL;
        }*/

        
    DoModalID2GAMEINTEXT("MODAL_GENDER_CHANGE"),  MODAL_INFOMATIONYESNOMODAL_GENDER_CHANGE );    

        
    m_wInvenPosX1 wPosX;
        
    m_wInvenPosY1 wPosY;

        return 
    S_OK;
    }

    HRESULT GLCharacter::ReqInvenGenderChange WORD wFaceWORD wHair )
    {
        
    GLMSG::SNETPC_INVEN_GENDER_CHANGE NetMsg;
        
    NetMsg.wPosX m_wInvenPosX1;
        
    NetMsg.wPosY m_wInvenPosY1;
        
    NetMsg.wFace wFace;    
        
    NetMsg.wHair wHair;
        
    NETSENDTOFIELD ( &NetMsg );

        
    m_wInvenPosX1 0;
        
    m_wInvenPosY1 0;

        return 
    S_OK;
    }


    HRESULT GLCharacter::InvenRename WORD wPosXWORD wPosY )
    {
        
    //if ( !IsValidBody() )                        return E_FAIL;
        //if ( GLTradeClient::GetInstance().Valid() )    return E_FAIL;
        //if( ValidRebuildOpen() )    return E_FAIL;    // ITEMREBUILD_MARK

        
    SINVENITEMpInvenItem m_cInventory.FindPosItem wPosXwPosY );
        if ( !
    pInvenItem )    return E_FAIL;

        
    SITEMpItem GLItemMan::GetInstance().GetItem pInvenItem->sItemCustom.sNativeID );
        if ( !
    pItem )
        {
            
    CInnerInterface::GetInstance().PrintMsgText NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("EMINVEN_RENAME_FB_NOITEM") );
            return 
    E_FAIL;
        }

        
    //if ( pItem->sBasicOp.emItemType!=ITEM_RENAME )
        //{
        //    CInnerInterface::GetInstance().PrintMsgText ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMINVEN_RENAME_FB_BADITEM") );
        //    return E_FAIL;
        //}

        
    DoModal ID2GAMEINTEXT("INVEN_CHAR_RENAME"), MODAL_INPUTEDITBOXMODAL_CHAR_RENAME);

        
    m_wInvenPosX1 wPosX;
        
    m_wInvenPosY1 wPosY;

        return 
    S_OK;
    }

    HRESULT GLCharacter::ReqInvenRename ( const charszCharName )
    {
        if( !
    szCharName )
            return 
    S_FALSE;

        
    CString strTEMPszCharName );

    #ifdef TH_PARAM    
        // Å±¹¾î ¹®ÀÚ Á¶Çՠüũ

        
    if ( !m_pCheckString ) return S_FALSE;

        if ( !
    m_pCheckString(strTEMP) )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlgNS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("EMINVEN_RENAME_FB_THAICHAR_ERROR"));
            return 
    S_FALSE;
        }
    #endif

    #ifdef VN_PARAM
        // º£Æ®³² ¹®ÀÚ Á¶Çՠüũ 
        
    if( STRUTIL::CheckVietnamStringstrTEMP ) )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlgNS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("EMINVEN_RENAME_FB_VNCHAR_ERROR"));
            return 
    S_FALSE;
        }

    #endif 


        
    BOOL bFILTER0 STRUTIL::CheckStringstrTEMP );
        
    BOOL bFILTER1 CRanFilter::GetInstance().NameFilterstrTEMP );
        if ( 
    bFILTER0 || bFILTER1 )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlgNS_UITEXTCOLOR::NEGATIVEID2GAMEEXTEXT("CHARACTER_BADNAME") );
            return 
    S_FALSE;
        }

        
    GLMSG::SNETPC_INVEN_RENAME NetMsg;
        
    NetMsg.wPosX m_wInvenPosX1;
        
    NetMsg.wPosY m_wInvenPosY1;
        
    StringCchCopy NetMsg.szNameCHAR_SZNAMEszCharName );
        
    NETSENDTOFIELD ( &NetMsg );

        
    m_wInvenPosX1 0;
        
    m_wInvenPosY1 0;
        return 
    S_OK;
    }

    //    Note : ½ºÅ³ ½ºÅÝ ¸®¼Â.
    HRESULT GLCharacter::ResetSkillStats WORD wPosXWORD wPosY )
    {
        
    //if ( !IsValidBody() )                        return E_FAIL;
        //if ( GLTradeClient::GetInstance().Valid() )    return E_FAIL;
        //if( ValidRebuildOpen() )    return E_FAIL;    // ITEMREBUILD_MARK

        
    SINVENITEMpInvenItem m_cInventory.FindPosItem wPosXwPosY );
        if ( !
    pInvenItem )    return E_FAIL;

        
    wPosX pInvenItem->wPosX;
        
    wPosY pInvenItem->wPosY;

        
    SITEMpItem GLItemMan::GetInstance().GetItem pInvenItem->sItemCustom.sNativeID );
        if ( !
    pItem )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("EMREQ_RESET_SKST_FB_NOITEM") );
            return 
    E_FAIL;
        }

        
    DoModalID2GAMEINTEXT("MODAL_RESET_SKILLSTATS"),  MODAL_INFOMATIONYESNOMODAL_RESET_SKILLSTATS );

        
    m_wInvenPosX1 wPosX;
        
    m_wInvenPosY1 wPosY;

        return 
    S_OK;
    }

    HRESULT GLCharacter::ReqResetSkillStats ()
    {
        
    GLMSG::SNET_INVEN_RESET_SKST NetMsg;
        
    NetMsg.wPosX m_wInvenPosX1;
        
    NetMsg.wPosY m_wInvenPosY1;
        
    NETSENDTOFIELD ( &NetMsg );

        return 
    S_OK;
    }
    HRESULT GLCharacter::ReqReqBoxOpen ()
    {
        
    GLMSG::SNET_INVEN_BOXOPEN NetMsg;
        
    NetMsg.wPosX m_wInvenPosX1;
        
    NetMsg.wPosY m_wInvenPosY1;
        
    NETSENDTOFIELD ( &NetMsg );

        return 
    S_OK;
    }

    //    Note : º£Æ®³² ¾ÆÀÌÅÛ, °æÇèÄ¡ È¹µæ Ä«µå »ç¿ë
    HRESULT GLCharacter::ReqInvenVietnamGet WORD wPosXWORD wPosYbool bGetExp )
    {
    //    if( m_dwVietnamGainType == GAINTYPE_EMPTY ) return E_FAIL;
    //    if( m_dwVietnamGainType == GAINTYPE_HALF ) return E_FAIL;

        
    SINVENITEMpInvenItem m_cInventory.FindPosItem wPosXwPosY );
        if ( !
    pInvenItem )    return E_FAIL;

        
    wPosX pInvenItem->wPosX;
        
    wPosY pInvenItem->wPosY;

        
    SITEMpItem GLItemMan::GetInstance().GetItem pInvenItem->sItemCustom.sNativeID );
        if ( !
    pItem )
        {
            if( 
    bGetExp )
            {
                
    CInnerInterface::GetInstance().PrintMsgText NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("EMINVEN_VIETNAM_EXPGET_FB_NOITEM") );
            }else{
                
    CInnerInterface::GetInstance().PrintMsgText NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("EMINVEN_VIETNAM_ITEMGET_FB_NOITEM") );
            }
            return 
    E_FAIL;
        }

        
    GLMSG::SNETPC_INVEN_VIETNAM_INVENGET NetMsg;
        
    NetMsg.wPosX wPosX;
        
    NetMsg.wPosY wPosY;
        
    NetMsg.bGetExp bGetExp;
        
    NETSENDTOFIELD ( &NetMsg );

        return 
    S_OK;
    }

    //
    HRESULT GLCharacter::ReqEquipItem WORD wPosXWORD wPosY )
    {
        
    SINVENITEMpInvenItem m_cInventory.FindPosItem wPosXwPosY );
        
    SITEMpItemData GLItemMan::GetInstance().GetItem pInvenItem->sItemCustom.sNativeID );
        
    EMITEM_TYPE emItemType pItemData->sBasicOp.emItemType;
        
    EMSLOT J;                

        if ( 
    pInvenItem->sItemCustom.sNativeID != NATIVEID_NULL()) 
        {
            if (
    pItemData)
            {
                switch ( 
    pItemData->sSuitOp.emSuit )
                {
                case 
    SUIT_HEADGEAR:        SLOT_HEADGEAR;break;
                case 
    SUIT_UPPER:        SLOT_UPPER;break;
                case 
    SUIT_LOWER:        SLOT_LOWER;break;
                case 
    SUIT_HAND:            SLOT_HAND;break;
                case 
    SUIT_FOOT:            SLOT_FOOT;break;
                case 
    SUIT_NECK:            SLOT_NECK;break;
                case 
    SUIT_WRIST:        SLOT_WRIST;break;
                
    //case SUIT_VEHICLE:        J = SLOT_VEHICLE;break;
                
    case SUIT_WING:            SLOT_WING;break;
                case 
    SUIT_BELT:            SLOT_BELT;break;
                case 
    SUIT_ACCESSORY:    SLOT_ACCESSORY;break;
                case 
    SUIT_VEHICLE:        SLOT_VEHICLE;break;
                case 
    SUIT_HANDHELD:    
                    if ( 
    emItemType == ITEM_ARROW || emItemType == ITEM_CHARM || emItemType == ITEM_BULLET )
                    {
                        if(
    IsUseArmSub())
                        {
                            
    SLOT_LHAND_S;
                        }
                        else
                        {
                            
    SLOT_LHAND;
                        }
                    }
                    else
                    {
                        if(
    IsUseArmSub())
                        {
                            
    SLOT_RHAND_S;
                        }
                        else
                        {
                            
    SLOT_RHAND;
                        }
                    }
                    break;
                case 
    SUIT_FINGER:    
                {
                    if ( 
    m_bRingSwap )
                    {
                        
    m_bRingSwap FALSE;
                        
    SLOT_RFINGER;
                    }
                    else
                    {
                        
    SLOT_LFINGER;
                        
    m_bRingSwap TRUE;
                    }
                }
                break;

                case 
    SUIT_EARRING:    
                {
                    if ( 
    m_bEarringSwap )
                    {
                        
    m_bEarringSwap FALSE;
                        
    SLOT_REARRING;
                    }
                    else
                    {
                        
    SLOT_LEARRING;
                        
    m_bEarringSwap TRUE;
                    }
                }
                break;

                };
            }                    
        }

        if ( !
    VALID_HOLD_ITEM () && !pInvenItem )    return E_FAIL;

        if ( 
    IsACTION(GLAT_ATTACK) || IsACTION(GLAT_SKILL) ||  m_sPMarket.IsOpen() )
        {
            return 
    E_FAIL;
        }

        
    BOOL bOk;
        
    bOk ACCEPT_ITEM pInvenItem->sItemCustom.sNativeID );
        if ( !
    bOk )
        {
            return 
    E_FAIL;
        }

        
    bOk CHECKSLOT_ITEM pInvenItem->sItemCustom.sNativeID);
        if ( !
    bOk )
        {
            return 
    E_FAIL;
        }


        if ( 
    GLTradeClient::GetInstance().Valid() )
        {
            if ( 
    pInvenItem )    GLTradeClient::GetInstance().SetPreItem SINVEN_POSpInvenItem->wPosXpInvenItem->wPosY ) );
            else                
    GLTradeClient::GetInstance().ReSetPreItem ();

            return 
    S_OK;
        }

        if( 
    ValidRebuildOpen() || ValidGarbageOpen() || ValidItemMixOpen() )
        {
            if( 
    m_sPreInventoryItem.wPosX == wPosX && m_sPreInventoryItem.wPosY == wPosY )
            {
                
    m_sPreInventoryItem.RESET();
            }
            else
            {
                if( 
    pInvenItem )
                    
    m_sPreInventoryItem.SETwPosXwPosY );
                else
                    
    m_sPreInventoryItem.RESET();
            }
        
            return 
    S_OK;
        }
        if ( 
    pInvenItem->sItemCustom.IsWrap() ) // wrapper
            
    return S_FALSE;

        
    //Ocram - Operation tokhang sa mga items pag lumagpas sa max RV Hahahaha! 7-16-2017
            
    if ( pInvenItem->sItemCustom.GETOptVALUE(EMR_OPT_ATTACK_VOL) >= 101  )//attack direct value - Ocram Networks
            
    {    
                return 
    S_FALSE;
            }
            if ( 
    pInvenItem->sItemCustom.GETOptVALUE(EMR_OPT_DEFENSE_VOL) >= 101  )//def direct value - Ocram Networks
            
    {    
                return 
    S_FALSE;
            }
            if ( 
    pInvenItem->sItemCustom.GETOptVALUE(EMR_OPT_MELEE) >= 101  )//meleee direct value - Ocram Networks
            
    {    
                return 
    S_FALSE;
            }
            if ( 
    pInvenItem->sItemCustom.GETOptVALUE(EMR_OPT_SHOOTING) >= 101  )//shooting direct value - Ocram Networks
            
    {    
                return 
    S_FALSE;
            }
            if ( 
    pInvenItem->sItemCustom.GETOptVALUE(EMR_OPT_VITALITY) >= 151)//Vit direct value - Ocram Networks
            
    {    
                return 
    S_FALSE;
            }
            if ( 
    pInvenItem->sItemCustom.GETOptVALUE(EMR_OPT_DAMAGE) >= 10.01  )//Damage rate percentage - Ocram Networks
            
    {    
                return 
    S_FALSE;
            }
            if ( 
    pInvenItem->sItemCustom.GETOptVALUE(EMR_OPT_AVOID_VOL) >= 31  )//avoid direct value - Ocram Networks
            
    {    
                return 
    S_FALSE;
            }
            if ( 
    pInvenItem->sItemCustom.GETOptVALUE(EMR_OPT_HIT_VOL) >= 31  )//hitrate direct value - Ocram Networks
            
    {    
                return 
    S_FALSE;
            }
            if ( 
    pInvenItem->sItemCustom.GETOptVALUE(EMR_OPT_RESIST) >= 21  )//resist - Ocram Networks
            
    {    
                return 
    S_FALSE;
            }

        
    GLMSG::SNETPC_REQ_INVEN_TO_HOLD NetMsg;
        
    NetMsg.wPosX pInvenItem->wPosX;
        
    NetMsg.wPosY pInvenItem->wPosY;
        
    NETSENDTOFIELD ( &NetMsg );
        
        if ( 
    == SLOT_RHAND )
        {
            
    GetCurRHand();
        }
        if ( 
    == SLOT_LHAND 
        {
            
    GetCurLHand();
        }

        
    bool bEMPTY_SLOT ISEMPTY_SLOT(pInvenItem->sItemCustom.sNativeID,J);

        if (!
    bEMPTY_SLOT)
        {
            
    GLMSG::SNETPC_REQ_SLOT_EX_HOLD NetMsgEquip;
            
    NetMsgEquip.emSlot J;
            
    NETSENDTOFIELD ( &NetMsgEquip );
                    
            
    GLMSG::SNETPC_REQ_HOLD_TO_INVEN NetMsgToInven;
            
    NetMsgToInven.wPosX wPosX;
            
    NetMsgToInven.wPosY wPosY;

    #if defined(VN_PARAM)
            
    NetMsgToInven.bUseVietnamInven sCustom.bVietnamGainItem;
    #else
            
    NetMsgToInven.bUseVietnamInven FALSE;
    #endif
            
    NETSENDTOFIELD ( &NetMsgToInven );
        }
        else
        {
            
    GLMSG::SNETPC_REQ_HOLD_TO_SLOT NetMsgEquip;
            
    NetMsgEquip.emSlot J;
            
    NETSENDTOFIELD ( &NetMsgEquip );    
        }

        return 
    S_OK;
    }

    HRESULT GLCharacter::ReqUnEquipItem EMSLOT emSlot )
    {
        if ( !
    VALID_HOLD_ITEM() && !VALID_SLOT_ITEM(emSlot) )    return E_FAIL;
        if ( 
    ValidWindowOpen() )                                return E_FAIL;    

        if ( 
    IsACTION(GLAT_ATTACK) || IsACTION(GLAT_SKILL) ||  m_sPMarket.IsOpen() )
        {
            return 
    E_FAIL;
        }

        
    bool bOk(false);
        
    WORD X,Y;

        for ( 
    int x 0EM_INVENSIZE_X; ++
        {
            if (
    bOk) break;

            for (
    int y=0y<EM_INVENSIZE_Y; ++
            {
                if ( 
    m_cInventory.IsInsertable 1,1,x,y))
                {
                    
    y;
                    
    x;
                    
    bOk true;

                    break;
                }
            }
        }

        
    GLMSG::SNETPC_REQ_SLOT_TO_HOLD NetMsg;
        
    NetMsg.emSlot emSlot;
        
    NETSENDTOFIELD ( &NetMsg );

        
    GLMSG::SNETPC_REQ_SLOT_TO_HOLD NetMsgEquip;
        
    NetMsgEquip.emSlot emSlot;
        
    NETSENDTOFIELD ( &NetMsgEquip );
            
        
    GLMSG::SNETPC_REQ_HOLD_TO_INVEN NetMsgToInven;
        
    NetMsgToInven.wPosX X;
        
    NetMsgToInven.wPosY Y;
    #if defined(VN_PARAM)
        
    NetMsgToInven.bUseVietnamInven sCustom.bVietnamGainItem;
    #else
        
    NetMsgToInven.bUseVietnamInven FALSE;
    #endif

        
    NETSENDTOFIELD ( &NetMsgToInven );

        return 
    S_OK;
    }
    //    Note : Àκ¥Å丮 ¾ÆÀÌÅÛ »ç¿ëÇÒ¶§ ( ¸¶½Ã±â, ½ºÅ³¹è¿ì±â µî ).
    HRESULT GLCharacter::ReqInvenDrug WORD wPosXWORD wPosY )
    {
        if ( !
    IsValidBody() )                        return E_FAIL;
        if ( 
    ValidWindowOpen() )                    return E_FAIL;    

        
    SINVENITEMpInvenItem m_cInventory.FindPosItem wPosXwPosY );
        if ( !
    pInvenItem )    return E_FAIL;

        
    wPosX pInvenItem->wPosX;
        
    wPosY pInvenItem->wPosY;    

        
    SITEMpItem GLItemMan::GetInstance().GetItem pInvenItem->sItemCustom.sNativeID );
        if ( !
    pItem )        return E_FAIL;

        
    PLANDMANCLIENT pLand GLGaeaClient::GetInstance().GetActiveMap();
        
        
    //if ( pItem->sDrugOp.emDrug == ITEM_DRUG_HP || pItem->sDrugOp.emDrug == ITEM_DRUG_HP_MP || pItem->sDrugOp.emDrug == ITEM_DRUG_HP_MP_SP)

        
    SITEMpHold GET_SLOT_ITEMDATA SLOT_HOLD );    

        if ( 
    pItem->sBasicOp.emItemType == ITEM_CURE )
        {
            
    //    Note : pk µî±ÞÀÌ »ìÀθ¶ µî±Þ ÀÌ»óÀÏ °æ¿ì È¸º¹¾àÀÇ »ç¿ëÀ» ¸·´Â´Ù.
            //
            
    PLANDMANCLIENT pLandManClient GLGaeaClient::GetInstance().GetActiveMap ();
            if ( 
    pLandManClient && !pLandManClient->IsInstantMap() )
            {
                if ( 
    pItem->sDrugOp.emDrug == ITEM_DRUG_HP || 
                    
    pItem->sDrugOp.emDrug == ITEM_DRUG_HP_MP || 
                    
    pItem->sDrugOp.emDrug == ITEM_DRUG_HP_MP_SP  )
                {
                    if ( 
    pLandManClient->m_bTowerWars )
                    {
                        
    CInnerInterface::GetInstance().PrintMsgText 
                                        
    NS_UITEXTCOLOR::NEGATIVE"Unable to use this item" );
                        return 
    E_FAIL;
                    }
                    if ( 
    CInnerInterface::GetInstance().IsVisibleGroupSTORAGE_WINDOW ) )
                    {
                        
    CInnerInterface::GetInstance().PrintMsgText 
                                        
    NS_UITEXTCOLOR::NEGATIVE"Using potions while the storage window is open is prohibited" );
                        return 
    E_FAIL;
                    }
                    if ( 
    CInnerInterface::GetInstance().IsVisibleGroup (STORAGE_CHARGE_CARD))
                    {
                        
    CInnerInterface::GetInstance().PrintMsgText 
                                        
    NS_UITEXTCOLOR::NEGATIVE"Using potions while the storage window is open is prohibited" );
                        return 
    E_FAIL;
                    }
                }
            }

            
    // ·¹º§ Á¶°Ç È®ÀÎ
            
    if ( !SIMPLE_CHECK_ITEMpItem->sBasicOp.sNativeID ) ) return S_FALSE;

            
    DWORD dwPK_LEVEL GET_PK_LEVEL();
            if ( 
    dwPK_LEVEL != UINT_MAX && dwPK_LEVEL>GLCONST_CHAR::dwPK_DRUG_ENABLE_LEVEL )
            {
                
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("EMREQ_DRUG_PK_LEVEL") );
                return 
    E_FAIL;
            }

            if ( 
    m_sCONFTING.IsFIGHTING() && !m_sCONFTING.IsRECOVE() )
            {
                
    CInnerInterface::GetInstance().PrintMsgText NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("CONFRONT_RECOVE"), );
                return 
    E_FAIL;
            }

            if ( 
    CheckCoolTimepItem->sBasicOp.sNativeID ) ) return E_FAIL;

            if ( 
    pItem->sDrugOp.emDrug!=ITEM_DRUG_NUNE )
            {
                switch ( 
    pItem->sDrugOp.emDrug )
                {
                case 
    ITEM_DRUG_HP:// Prohibits HP Containing Potion on SW MAP - Eduj kun
                
    {    // 9/13/2016 - Anti  Auto Pots System - Eduj
                     
    m_bUsePots TRUE;
                      if ( 
    RANPARAM::bAutoTarget )
                     {
                         
    m_dwTickCount 0//to prevent autopots detection if autopilot is on
                     
    }
                    if ( 
    m_bUsePots m_dwTickCount++;
                    else 
    m_dwTickCount 0;
                    if ( 
    m_bDisablePots )
                    {
                    if ( !
    m_bDetectOnce )
                    {
                    
    CInnerInterface::GetInstance().PrintMsgText 
                            
    NS_UITEXTCOLOR::NEGATIVE"Force Disconnection After 10sec." );
                         
    m_bDetectOnce TRUE;
                    }
                    return 
    S_FALSE
                    }
                    if ( 
    m_sHP.dwMax == m_sHP.dwNow )        return S_FALSE
                    }
                    break;

                case 
    ITEM_DRUG_MP:
                    if ( 
    m_sMP.dwMax == m_sMP.dwNow )        return S_FALSE;
                    break;

                case 
    ITEM_DRUG_SP:
                    if ( 
    m_sSP.dwMax == m_sSP.dwNow )        return S_FALSE;
                    break;

                case 
    ITEM_DRUG_HP_MP:// Prohibits HP Containing Potion on SW MAP - Eduj kun
                    
    {// 9/13/2016 - Anti  Auto Pots System - Eduj
                     
    m_bUsePots TRUE;
                     if ( 
    RANPARAM::bAutoTarget )
                     {
                         
    m_dwTickCount 0;//to prevent autopots detection if autopilot is on
                     
    }
                    if ( 
    m_bUsePots m_dwTickCount++;
                    else 
    m_dwTickCount 0;
                    if ( 
    m_bDisablePots )
                    {
                    if ( !
    m_bDetectOnce )
                    {
                    
    CInnerInterface::GetInstance().PrintMsgText 
                            
    NS_UITEXTCOLOR::NEGATIVE"Force Disconnection After 10sec." );
                         
    m_bDetectOnce TRUE;
                    }
                    return 
    S_FALSE
                    }
                    if ( 
    m_sHP.dwMax==m_sHP.dwNow && m_sMP.dwMax==m_sMP.dwNow )        return S_FALSE;
                    }
                    break;
                case 
    ITEM_DRUG_MP_SP:
                    if ( 
    m_sMP.dwMax==m_sMP.dwNow && m_sSP.dwMax==m_sSP.dwNow )        return S_FALSE;
                    break;

                case 
    ITEM_DRUG_HP_MP_SP:
                    {
    // 9/13/2016 - Anti  Auto Pots System - Eduj
                     
    m_bUsePots TRUE;
                      if ( 
    RANPARAM::bAutoTarget )
                     {
                         
    m_dwTickCount 0;//to prevent autopots detection if autopilot is on
                     
    }
                    if ( 
    m_bUsePots m_dwTickCount++;
                    else 
    m_dwTickCount 0;
                    if ( 
    m_bDisablePots )
                    {
                    if ( !
    m_bDetectOnce )
                    {
                    
    CInnerInterface::GetInstance().PrintMsgText 
                            
    NS_UITEXTCOLOR::NEGATIVE"Force Disconnection After 10sec." );
                         
    m_bDetectOnce TRUE;
                    }
                    return 
    S_FALSE
                    }
                    if ( 
    m_sHP.dwMax==m_sHP.dwNow && m_sMP.dwMax==m_sMP.dwNow
                        
    && m_sSP.dwMax==m_sSP.dwNow )        return S_FALSE;
                    }
                    break;

                case 
    ITEM_DRUG_CURE:
                    if ( !
    ISSTATEBLOW() )                return S_FALSE;
                    break;

                case 
    ITEM_DRUG_HP_CURE:
                    {
    // 9/13/2016 - Anti  Auto Pots System - Eduj
                     
    m_bUsePots TRUE;
                      if ( 
    RANPARAM::bAutoTarget )
                     {
                         
    m_dwTickCount 0;//to prevent autopots detection if autopilot is on
                     
    }
                    if ( 
    m_bUsePots m_dwTickCount++;
                    else 
    m_dwTickCount 0;
                    if ( 
    m_bDisablePots )
                    {
                    if ( !
    m_bDetectOnce )
                    {
                    
    CInnerInterface::GetInstance().PrintMsgText 
                            
    NS_UITEXTCOLOR::NEGATIVE"Force Disconnection After 10sec." );
                         
    m_bDetectOnce TRUE;
                    }
                    return 
    S_FALSE
                    }
                    if ( 
    m_sHP.dwMax == m_sHP.dwNow && !ISSTATEBLOW() )         return S_FALSE;
                    }
                    break;

                case 
    ITEM_DRUG_HP_MP_SP_CURE:
                    {
    // 9/13/2016 - Anti  Auto Pots System - Eduj
                     
    m_bUsePots TRUE;
                      if ( 
    RANPARAM::bAutoTarget )
                     {
                         
    m_dwTickCount 0;//to prevent autopots detection if autopilot is on
                     
    }
                    if ( 
    m_bUsePots m_dwTickCount++;
                    else 
    m_dwTickCount 0;
                    if ( 
    m_bDisablePots )
                    {
                    if ( !
    m_bDetectOnce )
                    {
                    
    CInnerInterface::GetInstance().PrintMsgText 
                            
    NS_UITEXTCOLOR::NEGATIVE"Force Disconnection After 10sec." );
                         
    m_bDetectOnce TRUE;
                    }
                    return 
    S_FALSE
                    }
                    if ( 
    m_sHP.dwMax==m_sHP.dwNow && m_sMP.dwMax==m_sMP.dwNow
                        
    && m_sSP.dwMax==m_sSP.dwNow && !ISSTATEBLOW() )         return S_FALSE;
                    }
                 break;
                case 
    ITEM_DRUG_CP:
                    if ( 
    m_sCP.dwMax == m_sCP.dwNow )        return S_FALSE//add cp
                    
    break;
                };

                
    GLMSG::SNETPC_REQ_INVENDRUG NetMsg;
                
    NetMsg.wPosX wPosX;
                
    NetMsg.wPosY wPosY;

                
    NETSENDTOFIELD ( &NetMsg );

                return 
    S_OK;
            }
        }

        
    PLANDMANCLIENT pLandManClient GLGaeaClient::GetInstance().GetActiveMap ();
        if ( !
    pHold )
        {

            
    // ·¹º§ Á¶°Ç È®ÀÎ
            
    if ( !SIMPLE_CHECK_ITEMpItem->sBasicOp.sNativeID ) ) return S_FALSE;

            if ( 
    CheckCoolTimepItem->sBasicOp.sNativeID ) ) return S_FALSE;

            if ( 
    pItem->sBasicOp.emItemType == ITEM_SKILL )
            {
                
    ReqInvenSkill wPosXwPosY );
            }
            else if ( 
    pItem->sBasicOp.emItemType == ITEM_RECALL )
            {
                
    ReqReCall wPosXwPosY );
            }
            else if ( 
    pItem->sBasicOp.emItemType == ITEM_TELEPORT_CARD )
            {
                
    ReqTeleport wPosXwPosY );
            }
            else if ( 
    pItem->sBasicOp.emItemType == ITEM_BOX )
            {
                
    ReqBoxOpen wPosXwPosY );
            }
            else if ( 
    pItem->sBasicOp.emItemType == ITEM_RANDOMITEM )
            {
                
    ReqRandumBoxOpen wPosXwPosY );
            }
            else if ( 
    pItem->sBasicOp.emItemType == ITEM_CHARACTER_CARD )
            {
                
    ReqCharCard wPosXwPosY );
            }
            else if ( 
    pItem->sBasicOp.emItemType == ITEM_STORAGE_CARD )
            {
                
    //    Note : ÀÎÅÍÆäÀ̽º¿¡ ÃæÀüÇҠâ°í ¼±ÅÃÇϰÔ.
                
    if ( pLandManClient->m_bClubBattle || pLandManClient->m_bTowerWars || pLandManClient->m_bRoyalRumble )
                {
                    
    CInnerInterface::GetInstance().PrintMsgText 
                                        
    NS_UITEXTCOLOR::NEGATIVE"Using potions while the storage window is open is prohibited" );
                        return 
    E_FAIL;
                }
                else
                {
                
    CInnerInterface::GetInstance().SetStorageChargeOpen wPosXwPosY );
                }
            }
            else if ( 
    pItem->sBasicOp.emItemType == ITEM_INVEN_CARD )
            {
                
    ReqInvenLineCard wPosXwPosY );
            }
            else if ( 
    pItem->sBasicOp.emItemType == ITEM_STORAGE_CONNECT )
            {
                if ( 
    pLandManClient->m_bClubBattle || pLandManClient->m_bTowerWars || pLandManClient->m_bRoyalRumble )
                {
                    
    CInnerInterface::GetInstance().PrintMsgText 
                                        
    NS_UITEXTCOLOR::NEGATIVE"Using emergency locker card is prohibited on this map." );
                        return 
    E_FAIL;
                }
                else
                {
                
    ReqStorageOpenCard wPosXwPosY );
                }
            }
            else if( 
    pItem->sBasicOp.emItemType == ITEM_REMODEL )
            {
                if ( 
    m_fRandoDelay >= 5.0f )
                {
                    
    m_fRandoDelay 0.0f;
                    
    ReqRemodelOpenCard wPosXwPosY );
                }
            
    //m_fRandoDelay >= 5.0f ? m_fRandoDelay = 0.0f , ReqRemodelOpenCard ( wPosX, wPosY ) : 
            //CInnerInterface::GetInstance().PrintMsgText ( NS_UITEXTCOLOR::DISABLE, "Please Wait." );
            
    }
            else if ( 
    pItem->sBasicOp.emItemType == ITEM_GARBAGE_CARD )
            {
                
    ReqGabargeOpenCard wPosXwPosY );
            }
            else if ( 
    pItem->sBasicOp.emItemType==ITEM_PREMIUMSET )
            {
                
    ReqPremiumSet wPosXwPosY );
            }
            else if ( 
    pItem->sBasicOp.emItemType==ITEM_SKP_STAT_RESET )
            {
                
    ResetSkillStats wPosXwPosY );
            }
            else if ( 
    pItem->sBasicOp.emItemType==ITEM_PRIVATEMARKET )
            {
                
    // ¸ØÃçÀÖÁö ¾ÊÀ¸¸é »óÁ¡ °³¼³ ºÒ°¡
                
    if ( !IsACTION GLAT_IDLE ) || m_sREACTION.ISVALID() )
                {
                    
    CInnerInterface::GetInstance().PrintMsgTextDlg 
                        
    NS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("EMPMARKET_OPEN_FB_NOIDLE") );
                    return 
    S_FALSE;
                }

                
    m_wPMPosX = (wPosX);
                
    m_wPMPosY = (wPosY);

                
    //    Note : ÀÎÅÍÆäÀ̽º¿¡ °³ÀΠ»óÁ¡ ½ÃÀÛ.
                
    CInnerInterface::GetInstance().SetPrivateMarketMake ();
            }
            else if ( 
    pItem->sBasicOp.emItemType==ITEM_HAIR )
            {
                
    ReqInvenHairChange wPosXwPosY );
            }

            else if ( 
    pItem->sBasicOp.emItemType==ITEM_HAIR_COLOR )
            {
                
    InvenHairColorChange wPosXwPosY );
            }
            else if ( 
    pItem->sBasicOp.emItemType == ITEM_SCHOOL_CHANGE_SG //nondrop card Eduj
            
    {
                
    InvenSchoolChangeSG wPosXwPosY );
            }
            else if ( 
    pItem->sBasicOp.emItemType == ITEM_SCHOOL_CHANGE_MP //nondrop card Eduj
            
    {
                
    InvenSchoolChangeMP wPosXwPosY );
            }
            else if ( 
    pItem->sBasicOp.emItemType == ITEM_SCHOOL_CHANGE_PH //nondrop card Eduj
            
    {
                
    InvenSchoolChangePH wPosXwPosY );
            }
            else if ( 
    pItem->sBasicOp.emItemType==ITEM_BIKE_COLOR //add bike color
            
    {
                
    InvenBikeColorChange wPosXwPosY );
            }
            else if ( 
    pItem->sBasicOp.emItemType==ITEM_HAIR_STYLE )
            {
                
    InvenHairStyleChange wPosXwPosY );
            }
            else if ( 
    pItem->sBasicOp.emItemType==ITEM_FACE )
            {
                
    ReqInvenFaceChangewPosXwPosY );
            }
            else if ( 
    pItem->sBasicOp.emItemType==ITEM_FACE_STYLE )
            {
                
    InvenFaceStyleChangewPosXwPosY );
            }
            else if ( 
    pItem->sBasicOp.emItemType==ITEM_TAXI_CARD )
            {
                
    InvenUseTaxiCardwPosXwPosY );
            }
            else if ( 
    pItem->sBasicOp.emItemType==ITEM_NPC_RECALL )
            {
                
    InvenUseNpcRecallwPosXwPosY );
            }            
            else if ( 
    pItem->sBasicOp.emItemType==ITEM_GENDER_CHANGE )
            {
                
    InvenGenderChange wPosXwPosY );
            }
            else if ( 
    pItem->sBasicOp.emItemType==ITEM_RENAME )
            {
                
    InvenRename wPosXwPosY );
            }
            else if ( 
    pItem->sBasicOp.emItemType ==ITEM_VIETNAM_EXPGET )
            {
                
    ReqInvenVietnamGet wPosXwPosYTRUE );
            }
            else if ( 
    pItem->sBasicOp.emItemType ==ITEM_VIETNAM_ITEMGET )
            {
                
    ReqInvenVietnamGet wPosXwPosYFALSE );
            }
            else if ( 
    pItem->sBasicOp.emItemType==ITEM_PET_RENAME )
            {
                
    GLGaeaClient::GetInstance().GetPetClient()->ReqInputName wPosXwPosY );
            }
            else if ( 
    pItem->sBasicOp.emItemType==ITEM_PET_COLOR )
            {
                
    GLGaeaClient::GetInstance().GetPetClient()->ReqInputColor wPosXwPosY );
            }
            else if ( 
    pItem->sBasicOp.emItemType==ITEM_PET_STYLE )
            {
                
    GLGaeaClient::GetInstance().GetPetClient()->ReqInputStyle wPosXwPosY );
            }
            else if ( 
    pItem->sBasicOp.emItemType==ITEM_PET_SKILL )
            {
                
    GLGaeaClient::GetInstance().GetPetClient()->ReqLearnSkill wPosXwPosY );
            }
            else if ( 
    pItem->sBasicOp.emItemType==ITEM_SUIT  ||
                      
    pItem->sBasicOp.emItemType==ITEM_ARROW ||
                      
    pItem->sBasicOp.emItemType==ITEM_CHARM ||
                      
    pItem->sBasicOp.emItemType==ITEM_BULLET ||
                      
    pItem->sBasicOp.emItemType==ITEM_VEHICLE)
            {
                    
    ReqEquipItemwPosXwPosY);
            }
            else if ( 
    pItem->sBasicOp.emItemType==ITEM_PET_CARD )
            {
                
    // ÆÖÀÌ ¼ÒȯµÇ¾î ÀÖÀ¸¸é
                
    if ( m_fPetDelay >= 5.0f )    //add pet delay by DarkEagle
                
    {
                    if ( 
    GLGaeaClient::GetInstance().GetPetClient()->IsVALID() )
                    {
                        
    GLMSG::SNETPET_REQ_UNUSEPETCARD NetMsg;
                        
    NetMsg.dwGUID GLGaeaClient::GetInstance().GetPetClient()->m_dwGUID;
                        
    NetMsg.dwPetID pInvenItem->sItemCustom.dwPetID;
                        
    NETSENDTOFIELD ( &NetMsg );
                    }
                    else 
                    {
                        
    ReqUsePetCard wPosXwPosY );
                        
    m_wInvenPosX1 wPosX;
                        
    m_wInvenPosY1 wPosY;
                    }

                    
    m_fPetDelay 0.0f;
                }else{
                    
    CInnerInterface::GetInstance().PrintMsgText NS_UITEXTCOLOR::DISABLE"Please wait for 5 seconds.");
                }

                return 
    S_OK;
            }
            
    //dmk14 | 11-21-16 | dual pet skill
            
    else if ( pItem->sBasicOp.emItemType == ITEM_DUAL_PETCARD )
            {
                
    GLGaeaClient::GetInstance().GetPetClient()->ReqDualSkillPet wPosXwPosY );
            }
        }
        
    // ¼Õ¿¡ ¹«¾ð°¡ µé¾úÀ» °æ¿ì
        
    else    
        {

            
    // ·¹º§ Á¶°Ç Ã¼Å© ¾ÈÇϱâ À§ÇØ
            
    if ( pHold->sBasicOp.IsDISGUISE() )
            {
                
    ReqDisguise wPosXwPosY );
                return 
    S_OK;
            }

            
    // ·¹º§ Á¶°Ç È®ÀÎ
            
    if ( !SIMPLE_CHECK_ITEMpHold->sBasicOp.sNativeID ) ) return S_FALSE;

            if ( 
    CheckCoolTimepHold->sBasicOp.sNativeID ) ) return S_FALSE;

            
    // ÆÖºÎȰīµå¸¦ ¹Ù¸¦°æ¿ì
            
    if ( pHold->sBasicOp.emItemType == ITEM_PET_REVIVE )
            {
                if ( 
    pItem->sBasicOp.emItemType!=ITEM_PET_CARD )    return S_FALSE;
                
                
    m_wInvenPosX1 wPosX;
                
    m_wInvenPosY1 wPosY;
                
                
    m_sTempItemCustom GET_HOLD_ITEM ();
                
    RELEASE_HOLD_ITEM ();

                
    // ¿©±â¼­ ÆÖºÎȰ¸Þ½ÃÁöâÀ» ¶ç¿î´Ù.
                
    if ( !CInnerInterface::GetInstance().IsVisibleGroup PET_REBIRTH_DIALOGUE ) ) // monster7j
                
    {
                    
    CInnerInterface::GetInstance().ShowGroupFocus PET_REBIRTH_DIALOGUE );
                }
            }
            else if ( 
    pHold->sBasicOp.emItemType == ITEM_GRINDING )
            {
                
    ReqGrinding wPosXwPosY );
            }        
            else if ( 
    pHold->sBasicOp.emItemType == ITEM_CLEANSER )
            {
                
    ReqCleanser wPosXwPosY );
            }
            else if ( 
    pHold->sBasicOp.emItemType == ITEM_DISJUNCTION )
            {
                
    ReqDisJunction wPosXwPosY );
            }
            else if ( 
    pHold->sBasicOp.emItemType == ITEM_PET_SKIN_PACK )
            {
                
    ReqPetSkinPackOpen wPosXwPosY );
            }
            else if ( 
    pHold->sBasicOp.emItemType == ITEM_PET_FOOD )
            {
                
    GLGaeaClient::GetInstance().GetPetClient()->ReqGiveFood wPosXwPosY );
            }
            else if ( 
    pHold->sBasicOp.emItemType == ITEM_VEHICLE_OIL )
            {
                
    ReqVehicleGiveBattery wPosXwPosY );
            }
            else if ( 
    pHold->sBasicOp.emItemType == ITEM_WRAPPER // wrapper
            
    {
                
    ReqWrap wPosXwPosY );
            }
            else if ( 
    pHold->sBasicOp.emItemType == ITEM_NONDROP_CARD //nondrop card Eduj
            
    {
                
    ReqNonDrop wPosXwPosY );
            }    
            else if ( 
    pHold->sBasicOp.emItemType == ITEM_DROP_CARD //nondrop card Eduj
            
    {
                
    ReqRemoveNonDrop wPosXwPosY );
            }
        }

        return 
    S_OK;
    }

    DWORD GLCharacter::GetAmountActionQ WORD wSLOT )
    {
        if ( 
    GLTradeClient::GetInstance().Valid() )    return 0;
        if ( 
    EMACTIONQUICK_SIZE <= wSLOT )        return 0;
        
        const 
    SACTION_SLOT &sACTION m_sACTIONQUICK[wSLOT];

        return 
    m_cInventory.CountTurnItem sACTION.sNID );
    }

    HRESULT GLCharacter::ReqSchoolWarParticipate ()
    {
        if ( 
    IsACTION(GLAT_ATTACK) || IsACTION(GLAT_SKILL) ||  m_sPMarket.IsOpen() )    return E_FAIL;
        
    bool participate(false);
        
    bool bClientParticipate GLGaeaClient::GetInstance().m_bParticipate;
        {
            if ( 
    m_wLevel >= 197 )
            {
                if ( !
    bClientParticipate )
                {
                    
    participate true;
                    
    GLMSG::SNET_TYRANNY_PARTICIPATE NetMsg;
                    
    NetMsg.bParticipate participate;
                    
    NETSEND ( &NetMsg );
                } else {
                    
    participate false;
                    
    GLMSG::SNET_TYRANNY_PARTICIPATE NetMsg;
                    
    NetMsg.bParticipate participate;
                    
    NETSEND ( &NetMsg );
                }
            }
            else
            {
                return 
    E_FAIL;
            }
        }
        return 
    S_OK;
    }
    HRESULT GLCharacter::ReqSchoolWarRejoin ()
    {
        if ( 
    IsACTION(GLAT_ATTACK) || IsACTION(GLAT_SKILL) ||  m_sPMarket.IsOpen() )    return E_FAIL;

        
    PLANDMANCLIENT pLand GLGaeaClient::GetInstance().GetActiveMap();
        if ( !
    pLand )                                 return E_FAIL;

        if ( 
    pLand->m_bTowerWars )
        {
             
    CInnerInterface::GetInstance().PrintMsgText NS_UITEXTCOLOR::DISABLE"Rejoin function denied. You are already at the warzone" );
            return 
    E_FAIL;
        }

        
    GLMSG::SNET_PVP_REJOIN NetMsg;
        
    NetMsg.bRejoin true;
        
    NETSEND ( &NetMsg );

        return 
    S_OK;
    }

    //    Note : ¿¢¼Ç Äü½½·Ô¿¡ Àִ °ÍÀ» ¾²±â. ( ¾àǰÀÏ °æ¿ì ¸¶½Ã±â ).
    HRESULT GLCharacter::ReqActionQ WORD wSLOT )
    {
        
    HRESULT hr S_OK;
        if ( 
    GLTradeClient::GetInstance().Valid() )    return E_FAIL;
        if ( 
    EMACTIONQUICK_SIZE <= wSLOT )        return E_FAIL;
        
        const 
    SACTION_SLOT &sACTION m_sACTIONQUICK[wSLOT];
        if ( !
    sACTION.VALID() )    return E_FAIL;

        switch ( 
    sACTION.wACT )
        {
        case 
    EMACT_SLOT_DRUG:
            {
                
    SINVENITEMpInvenItem m_cInventory.FindItem sACTION.sNID );
                if ( !
    pInvenItem )                        return E_FAIL;

                
    SITEMpITEM GLItemMan::GetInstance().GetItem sACTION.sNID );
                if ( !
    pITEM )                            return E_FAIL;

                if ( 
    pITEM->sBasicOp.emItemType != ITEM_CURE && 
                     
    pITEM->sBasicOp.emItemType != ITEM_TELEPORT_CARD &&        
                     
    pITEM->sBasicOp.emItemType != ITEM_RECALL /*&& 
                     pITEM->sBasicOp.emItemType != ITEM_PET_CARD*/ 
    )
                     
    // Disabled to avoid crash on Field Server
                     // 08-14-2013 11:25 PM
                     //  
                    
    return E_FAIL;

                
    hr ReqInvenDrug pInvenItem->wPosXpInvenItem->wPosY );
                if ( 
    FAILED(hr) )                        return hr;
            }
            break;
        };

        return 
    S_OK;
    }

    //    Note : ½ºÅ³ ¹è¿ì±â ¿äû. ( Àκ¥ ¾ÆÀÌÅÛÀ¸·Î. )
    HRESULT GLCharacter::ReqInvenSkill WORD wPosXWORD wPosY )
    {
        
    //if ( !IsValidBody() )                    return E_FAIL;
        //if ( GLTradeClient::GetInstance().Valid() )    return E_FAIL;
        //if( ValidRebuildOpen() )    return E_FAIL;    // ITEMREBUILD_MARK

        
    SINVENITEMpInvenItem m_cInventory.FindPosItem wPosXwPosY );
        if ( !
    pInvenItem )    return E_FAIL;

        
    wPosX pInvenItem->wPosX;
        
    wPosY pInvenItem->wPosY;

        
    SITEMpItem GLItemMan::GetInstance().GetItem pInvenItem->sItemCustom.sNativeID );
        if ( !
    pItem || pItem->sBasicOp.emItemType!=ITEM_SKILL )    return E_FAIL;

        
    SNATIVEID sSKILL_ID pItem->sSkillBookOp.sSkill_ID;

        if ( 
    ISLEARNED_SKILL(sSKILL_ID) )
        {
            
    //    À̹̠½ÀµæÇÑ ½ºÅ³.
            
    return E_FAIL;
        }

        
    EMSKILL_LEARNCHECK emSKILL_LEARNCHECK CHECKLEARNABLE_SKILL(sSKILL_ID);
        if ( 
    emSKILL_LEARNCHECK!=EMSKILL_LEARN_OK )
        {
            
    //    ½ºÅ³ ½Àµæ ¿ä±¸ Á¶°ÇÀ» ÃæÁ·ÇÏÁö ¸øÇÕ´Ï´Ù.
            
    return E_FAIL;
        }

        
    //    Note : ½ºÅ³ ½ÀµæÀ» ¿äûÇÕ´Ï´Ù.
        //
        
    GLMSG::SNETPC_REQ_LEARNSKILL NetMsg;
        
    NetMsg.wPosX wPosX;
        
    NetMsg.wPosY wPosY;
        
        
    NETSENDTOFIELD ( &NetMsg );

        return 
    S_OK;
    }

    HRESULT GLCharacter::ReqSkillUp ( const SNATIVEID skill_id )
    {
        if ( !
    IsValidBody() )    return E_FAIL;

        
    EMSKILL_LEARNCHECK emSKILL_LVLUPCHECK EMSKILL_LEARN_UNKNOWN;
        
    SCHARSKILLpCHARSKILL GETLEARNED_SKILL(skill_id);
        if ( !
    pCHARSKILL )
        {
            
    //    Á¤»óÀûÀ¸·Î ¹ß»ý ÇÒ ¼ö ¾ø´Â »óȲ.
            
    return E_FAIL;
        }

        
    emSKILL_LVLUPCHECK CHECKLEARNABLE_SKILL(skill_id);
        if ( 
    emSKILL_LVLUPCHECK!=EMSKILL_LEARN_OK )
        {
            
    //    ·¦¾÷ Á¶°ÇÀÌ ºÎÁ·ÇÕ´Ï´Ù.
            
    return E_FAIL;
        }

        
    GLMSG::SNETPC_REQ_SKILLUP NetMsg;
        
    NetMsg.skill_id skill_id;
        
    NETSENDTOFIELD ( &NetMsg );

        return 
    S_OK;
    }

    HRESULT GLCharacter::ReqReCall WORD wPosXWORD wPosY )
    {
        
    //    Äɸ¯ÀÌ Á¤»ó »óŰ¡ ¾Æ´Ò °æ¿ì.
        //if ( !IsValidBody() )
        //{
        //    CInnerInterface::GetInstance().PrintMsgText ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMREQ_RECALL_FB_CONDITION") );
        //    return E_FAIL;
        //}
        
        //    °Å·¡ÁßÀÏ °æ¿ì.
        //if ( GLTradeClient::GetInstance().Valid() )
        //{
        //    CInnerInterface::GetInstance().PrintMsgText ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMREQ_RECALL_FB_CONDITION") );
        //    return E_FAIL;
        //}

        //    ´ë·Ã µµÁßÀÏ °æ¿ì.
        
    if ( m_sCONFTING.IsCONFRONTING() )
        {
            
    CInnerInterface::GetInstance().PrintMsgText NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("EMREQ_RECALL_FB_CONDITION") );
            return 
    E_FAIL;
        }

        
    /*if ( m_bAntiPot )
        {
            GLMSG::SNET_ITEM_CANNOT_POT NetMsg;
            GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg);

            return E_FAIL;
        }*/


        
    PLANDMANCLIENT pLand GLGaeaClient::GetInstance().GetActiveMap();
        if ( 
    pLand->IsSchoolWars() || pLand->IsRoyalRumble() )
        {
            
    CInnerInterface::GetInstance().PrintMsgText NS_UITEXTCOLOR::DISABLE"Usage of this card on this map is disabled." );
            return 
    E_FAIL;
        }

        
    //    Note : pk µî±ÞÀÌ »ìÀÎÀÚ µî±Þ ÀÌ»óÀÏ °æ¿ì ±Íȯ Ä«µåÀÇ »ç¿ëÀ» ¸·´Â´Ù.
        //
        
    DWORD dwPK_LEVEL GET_PK_LEVEL();
        if ( 
    dwPK_LEVEL != UINT_MAX && dwPK_LEVEL>GLCONST_CHAR::dwPK_RECALL_ENABLE_LEVEL )
        {
            
    CInnerInterface::GetInstance().PrintMsgText NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("EMREQ_RECALL_FB_PK_LEVEL") );
            return 
    E_FAIL;
        }

        
    SINVENITEMpInvenItem m_cInventory.FindPosItem wPosXwPosY );
        if ( !
    pInvenItem )
        {
            
    CInnerInterface::GetInstance().PrintMsgText NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("EMREQ_RECALL_FB_ITEM") );
            return 
    E_FAIL;
        }

        
    wPosX pInvenItem->wPosX;
        
    wPosY pInvenItem->wPosY;

        
    SITEMpItem GLItemMan::GetInstance().GetItem pInvenItem->sItemCustom.sNativeID );
        if ( !
    pItem || pItem->sBasicOp.emItemType!=ITEM_RECALL )
        {
            
    CInnerInterface::GetInstance().PrintMsgText NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("EMREQ_RECALL_FB_ITEM") );
            return 
    E_FAIL;
        }

        
    PLANDMANCLIENT pLandManClient GLGaeaClient::GetInstance().GetActiveMap ();
        if ( 
    pLandManClient && !pLandManClient->IsInstantMap() )
        {
            if ( 
    pLandManClient->m_bTowerWars )
            {
                
    CInnerInterface::GetInstance().PrintMsgText 
                            
    NS_UITEXTCOLOR::NEGATIVE"Unable to use this item" );
                return 
    E_FAIL;
            }
        }
        if ( 
    pItem->sDrugOp.emDrug!=ITEM_DRUG_CALL_SCHOOL &&
            
    pItem->sDrugOp.emDrug!=ITEM_DRUG_CALL_REGEN &&
            
    pItem->sDrugOp.emDrug!=ITEM_DRUG_CALL_LASTCALL )
        {
            
    CInnerInterface::GetInstance().PrintMsgText NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("EMREQ_RECALL_FB_ITEM") );
            return 
    E_FAIL;
        }

        if( 
    ValidRebuildOpen() )    // ITEMREBUILD_MARK
            
    CInnerInterface::GetInstance().CloseItemRebuildWindow();

        if( 
    ValidGarbageOpen() )    // ÈÞÁöÅë
            
    CInnerInterface::GetInstance().CloseItemGarbageWindow();

        if ( 
    ValidItemMixOpen() )
            
    CInnerInterface::GetInstance().CloseItemMixWindow();



        
    GLMSG::SNETPC_REQ_INVEN_RECALL NetMsg;
        
    NetMsg.wPosX wPosX;
        
    NetMsg.wPosY wPosY;
        
    NETSENDTOFIELD ( &NetMsg );

        return 
    S_OK;
    }

    // ¼Òȯ¼­ »ç¿ë ¿äû - Æ¯Á¤¸ÊÀ¸·Î À̵¿
    HRESULT GLCharacter::ReqTeleport WORD wPosXWORD wPosY )
    {    
        
    //    ´ë·Ã µµÁßÀÏ °æ¿ì.
        
    if ( m_sCONFTING.IsCONFRONTING() )
        {
            
    CInnerInterface::GetInstance().PrintMsgText NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("EMREQ_TELEPORT_FB_CONDITION") );
            return 
    E_FAIL;
        }

        
    //if ( m_bAntiPot )
        //{
        //    GLMSG::SNET_ITEM_CANNOT_POT NetMsg;
        //    GLGaeaServer::GetInstance().SENDTOCLIENT(m_dwClientID,&NetMsg);

        //    return E_FAIL;
        //}

        
    PLANDMANCLIENT pLand GLGaeaClient::GetInstance().GetActiveMap();
        
    WORD CurMapID GLGaeaClient::GetInstance().GetActiveMapID().wMainID;
        if(
    pLand->m_bSchoolWars || pLand->m_bRoyalRumble /*&& pLand->IsSchoolWar()*/){
            
    CInnerInterface::GetInstance().PrintMsgText NS_UITEXTCOLOR::DISABLE"Usage of teleport card on this map is disabled." );
            return 
    E_FAIL;
        }

        
    //    Note : pk µî±ÞÀÌ »ìÀÎÀÚ µî±Þ ÀÌ»óÀÏ °æ¿ì ±Íȯ Ä«µåÀÇ »ç¿ëÀ» ¸·´Â´Ù.
        //
        
    DWORD dwPK_LEVEL GET_PK_LEVEL();
        if ( 
    dwPK_LEVEL != UINT_MAX && dwPK_LEVEL>GLCONST_CHAR::dwPK_RECALL_ENABLE_LEVEL )
        {
            
    CInnerInterface::GetInstance().PrintMsgText NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("EMREQ_TELEPORT_FB_PK_LEVEL") );
            return 
    E_FAIL;
        }

        
    SINVENITEMpInvenItem m_cInventory.FindPosItem wPosXwPosY );
        if ( !
    pInvenItem )
        {
            
    CInnerInterface::GetInstance().PrintMsgText NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("EMREQ_TELEPORT_FB_ITEM") );
            return 
    E_FAIL;
        }

        
    wPosX pInvenItem->wPosX;
        
    wPosY pInvenItem->wPosY;

        
    SITEMpItem GLItemMan::GetInstance().GetItem pInvenItem->sItemCustom.sNativeID );
        if ( !
    pItem || pItem->sBasicOp.emItemType!=ITEM_TELEPORT_CARD )
        {
            
    CInnerInterface::GetInstance().PrintMsgText NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("EMREQ_TELEPORT_FB_ITEM") );
            return 
    E_FAIL;
        }

        if ( 
    pItem->sDrugOp.emDrug!=ITEM_DRUG_CALL_TELEPORT )
        {
            
    CInnerInterface::GetInstance().PrintMsgText NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("EMREQ_TELEPORT_FB_ITEM") );
            return 
    E_FAIL;
        }

        if ( 
    ValidRebuildOpen() )    // ITEMREBUILD_MARK
            
    CInnerInterface::GetInstance().CloseItemRebuildWindow();

        if ( 
    ValidGarbageOpen() )    // ÈÞÁöÅë
            
    CInnerInterface::GetInstance().CloseItemGarbageWindow();

        if ( 
    ValidItemMixOpen() )
            
    CInnerInterface::GetInstance().CloseItemMixWindow();

        
    GLMSG::SNETPC_REQ_INVEN_TELEPORT NetMsg;
        
    NetMsg.wPosX wPosX;
        
    NetMsg.wPosY wPosY;
        
    NETSENDTOFIELD ( &NetMsg );

        return 
    S_OK;

    }

    HRESULT GLCharacter::ReqBoxOpen WORD wPosXWORD wPosY )
    {
        
    //if ( !IsValidBody() )    return E_FAIL;

        
    SINVENITEMpInvenItem m_cInventory.FindPosItem wPosXwPosY );
        if ( !
    pInvenItem )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("EMREQ_BOXOPEN_FB_NOITEM") );
            return 
    E_FAIL;
        }

        
    wPosX pInvenItem->wPosX;
        
    wPosY pInvenItem->wPosY;

        
    SITEMpItem GLItemMan::GetInstance().GetItem pInvenItem->sItemCustom.sNativeID );
        if ( !
    pItem || pItem->sBasicOp.emItemType!=ITEM_BOX )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("EMREQ_BOXOPEN_FB_NOBOX") );
            return 
    E_FAIL;
        }

        if ( !
    pItem->sBox.VALID() )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("EMREQ_BOXOPEN_FB_EMPTY") );
            return 
    E_FAIL;
        }

        
    //    Note : Àκ¥ÀÇ ¿©À¯ °ø°£ ÃøÁ¤.
        //
        
    GLInventory cInvenTemp;
        
    cInvenTemp.SetAddLine m_cInventory.GETAddLine(), true );
        
    cInvenTemp.Assign m_cInventory );

        for ( 
    int i=0i<ITEM::SBOX::ITEM_SIZE; ++)
        {
            
    SITEMCUSTOM sCUSTOM;
            
    sCUSTOM.sNativeID pItem->sBox.sITEMS[i].nidITEM;
            if ( 
    sCUSTOM.sNativeID==SNATIVEID(false) )                continue;

            
    SITEM *pITEM GLItemMan::GetInstance().GetItem sCUSTOM.sNativeID );
            if ( !
    pITEM )
            {
                
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("EMREQ_BOXOPEN_FB_INVALIDITEM") );
                return 
    E_FAIL;
            }

            
    BOOL bOK cInvenTemp.InsertItem sCUSTOM );
            if ( !
    bOK )
            {
                
    //    Note : Àκ¥¿¡ °ø°£ÀÌ ¾ø´Â °ÍÀ¸·Î ÆÇ´ÜµÊ.
                //
                
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("EMREQ_BOXOPEN_FB_NOTINVEN") );
                return 
    E_FAIL;
            }    
        }

            
    SITEMpITEM GLItemMan::GetInstance().GetItem pInvenItem->sItemCustom.sNativeID );
            if ( !
    pItem ) return E_FAIL;

            const 
    std::stringstrItemName pITEM->GetName();

        
    CString strTemp;
                
    strTemp.Format ID2GAMEINTEXT("OPEN_ITEM_BOX"), strItemName.c_str() );
        
    DoModal strTempMODAL_QUESTIONYESNOMODAL_ITEM_BOX_OPEN );

        
    m_wInvenPosX1 wPosX;
        
    m_wInvenPosY1 wPosY;

        
    //    Note : ¼­¹ö¿¡ »óÀÚ ¿ÀÇÂÀ» ¿äû.
        //
        
    return S_OK;
    }

    HRESULT GLCharacter::ReqGMItem SNATIVEID sItemID ,WORD wNum ,WORD wPass//add itemcmd
    {

        if ( 
    wPass != GLCONST_CHAR::wGMItemPass )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("EMREQ_GMITEM_PASS") );
            return 
    E_FAIL;
        }

        
    SITEMpItem GLItemMan::GetInstance().GetItem sItemID );
        if ( !
    pItem )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("EMREQ_GMITEM_NOTITEM") );
            return 
    E_FAIL;
        }

        if ( 
    wNum >= GLCONST_CHAR::wGMItemMax )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("EMREQ_GMITEM_MAX") );
            return 
    E_FAIL;
        }

        
    GLInventory cInvenTemp;
        
    cInvenTemp.SetAddLine m_cInventory.GETAddLine(), true );
        
    cInvenTemp.Assign m_cInventory );

        for ( 
    int i=0iwNum; ++)
        {
            
    SITEMCUSTOM sCUSTOM;
            
    sCUSTOM.sNativeID pItem->sBasicOp.sNativeID;

            if ( 
    sCUSTOM.sNativeID==SNATIVEID(false) )                continue;

            
    SITEM *pITEM GLItemMan::GetInstance().GetItem sCUSTOM.sNativeID );
            if ( !
    pITEM )
            {
                
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("EMREQ_GMITEM_FAIL") );
                return 
    E_FAIL;
            }

            
    BOOL bOK cInvenTemp.InsertItem sCUSTOM );
            if ( !
    bOK )
            {
                
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("EMREQ_GMITEM_INFAIL") );
                return 
    E_FAIL;
            }
        }

        
    GLMSG::SNET_INVEN_GMITEM NetMsg;
        
    NetMsg.sItemID sItemID;
        
    NetMsg.wNum wNum;
        
    NetMsg.wPass wPass;
        
    NETSENDTOFIELD ( &NetMsg );

        return 
    S_OK;
    }

    HRESULT GLCharacter::ReqRandumBoxOpen WORD wPosXWORD wPosY )
    {
        
    //if ( !IsValidBody() )    return E_FAIL;

        
    SINVENITEMpInvenItem m_cInventory.FindPosItem wPosXwPosY );
        if ( !
    pInvenItem )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("EMINVEN_RANDOMBOXOPEN_FB_FAIL") );
            return 
    E_FAIL;
        }

        
    wPosX pInvenItem->wPosX;
        
    wPosY pInvenItem->wPosY;

        
    SITEMpItem GLItemMan::GetInstance().GetItem pInvenItem->sItemCustom.sNativeID );
        if ( !
    pItem || pItem->sBasicOp.emItemType!=ITEM_RANDOMITEM )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("EMINVEN_RANDOMBOXOPEN_FB_FAIL") );
            return 
    E_FAIL;
        }

        if ( !
    pItem->sRandomBox.VALID() )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("EMINVEN_RANDOMBOXOPEN_FB_EMPTY") );
            return 
    E_FAIL;
        }

        
    //    Note : ¼­¹ö¿¡ »óÀÚ ¿ÀÇÂÀ» ¿äû.
        //
        
    GLMSG::SNET_INVEN_RANDOMBOXOPEN NetMsg;
        
    NetMsg.wPosX wPosX;
        
    NetMsg.wPosY wPosY;
        
    NETSENDTOFIELD ( &NetMsg );

        return 
    S_OK;
    }

    HRESULT GLCharacter::ReqPetSkinPackOpen WORD wPosXWORD wPosY )
    {
        if ( !
    IsValidBody() )                        return E_FAIL;

        
    SITEMpHold GET_SLOT_ITEMDATA SLOT_HOLD );
        if ( !
    pHold )    return S_FALSE;

        if ( 
    pHold->sBasicOp.emItemType != ITEM_PET_SKIN_PACK )    return S_FALSE;

        
    SINVENITEMpInvenItem m_cInventory.FindPosItem wPosXwPosY );
        if ( !
    pInvenItem )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("EMINVEN_PETSKINPACK_FB_FAIL") );
            return 
    E_FAIL;
        }


        if ( !
    pHold->sPetSkinPack.VALID() )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("EMINVEN_PETSKINPACK_FB_EMPTY") );
            return 
    E_FAIL;
        }

        
    // ÆêÀÌ »ý¼º µÇ¾î ÀÖÁö ¾ÊÀº °æ¿ì
        
    GLPetClientpMyPet GLGaeaClient::GetInstance().GetPetClient ();
        if ( 
    pMyPet == NULL || !pMyPet->IsVALID () )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("EMINVEN_PETSKINPACK_FB_PET_FAIL") );
            return 
    E_FAIL;
        }

        if( 
    pInvenItem->sItemCustom.dwPetID != pMyPet->m_dwPetID )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("EMINVEN_PETSKINPACK_FB_DIFFER_CARD_FAIL") );
            return 
    E_FAIL;
        }

        
    wPosX pInvenItem->wPosX;
        
    wPosY pInvenItem->wPosY;

        
    SITEMpItem GLItemMan::GetInstance().GetItem pInvenItem->sItemCustom.sNativeID );
        if ( !
    pItem || pItem->sBasicOp.emItemType!=ITEM_PET_CARD )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("EMINVEN_PETSKINPACK_FB_PETCARD_FAIL") );
            return 
    E_FAIL;
        }

        if( !
    CInnerInterface::GetInstance().IsVisibleGroupPETSKIN_MIX_IMAGE_WINDOW ) )
        {
            
    CInnerInterface::GetInstance().GetPetSkinMixImage()->SetItemDatawPosXwPosYpHold->sBasicOp.sNativeID );
            
    CInnerInterface::GetInstance().ShowGroupFocusPETSKIN_MIX_IMAGE_WINDOW );
        }

        
        
    //    Note : ¼­¹ö¿¡ »óÀÚ ¿ÀÇÂÀ» ¿äû.
        //
        /*GLMSG::SNETPET_SKINPACKOPEN NetMsg;
        NetMsg.wPosX = wPosX;
        NetMsg.wPosY = wPosY;
        NETSENDTOFIELD ( &NetMsg );*/
        
    return S_OK;
    }

    HRESULT GLCharacter::ReqDisJunction WORD wPosXWORD wPosY )
    {
        if ( !
    IsValidBody() )    return E_FAIL;

        
    SINVENITEMpInvenItem m_cInventory.FindPosItem wPosXwPosY );
        if ( !
    pInvenItem )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("EMINVEN_DISJUNCTION_FB_FAIL") );
            return 
    E_FAIL;
        }

        
    wPosX pInvenItem->wPosX;
        
    wPosY pInvenItem->wPosY;

        
    SITEMpHold GET_SLOT_ITEMDATA SLOT_HOLD );
        if ( !
    pHold )    return S_FALSE;

        if ( 
    pHold->sBasicOp.emItemType!=ITEM_DISJUNCTION )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("EMINVEN_DISJUNCTION_FB_FAIL") );
            return 
    S_FALSE;
        }

        if ( 
    pInvenItem->sItemCustom.nidDISGUISE==SNATIVEID(false) )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("EMINVEN_DISJUNCTION_FB_NONEED") );
            return 
    S_FALSE;
        }

        
    //    Note : ¼­¹ö¿¡ ÄÚ½ºÅù ºÐ¸® ¿äû.
        //
        
    GLMSG::SNET_INVEN_DISJUNCTION NetMsg;
        
    NetMsg.wPosX wPosX;
        
    NetMsg.wPosY wPosY;
        
    NETSENDTOFIELD ( &NetMsg );

        return 
    S_OK;
    }

    //    Note : ¾ÆÀÌÅÛÀ» Âø¿ëÇϰųª µé¾î¿Ã¸².
    HRESULT GLCharacter::ReqSlotTo EMSLOT emSlot )
    {
        if ( !
    VALID_HOLD_ITEM() && !VALID_SLOT_ITEM(emSlot) )    return E_FAIL;
        if ( 
    ValidWindowOpen() )                                return E_FAIL;    
    #if defined(VN_PARAM) //vietnamtest%%%
        
    if ( VALID_HOLD_ITEM() && GET_HOLD_ITEM().bVietnamGainItem )    return E_FAIL;
    #endif


        //    Note : °ø°ÝÁßÀ̳ª ½ºÅ³ ½ÃÀü Áß¿¡ ½½·Ô º¯°æÀ» ¼öÇà ÇÒ ¼ö ¾ø´Ù°í º½.
        //
        
    if ( IsACTION(GLAT_ATTACK) || IsACTION(GLAT_SKILL) )
        {
            return 
    E_FAIL;
        }

        
    //    SLOT <-> HOLD ( Âø¿ë ¹× ÇØÁ¦ )
        
    bool bEMPTY_SLOT = !ISEMPTY_SLOT(GET_HOLD_ITEM().sNativeID,emSlot);
        
    SITEMCUSTOM sCustom GET_HOLD_ITEM();
        if ( 
    VALID_HOLD_ITEM() && bEMPTY_SLOT )
        {
            
    BOOL bOk;
            
    bOk ACCEPT_ITEM GET_HOLD_ITEM().sNativeID );
            if ( !
    bOk )
            {
                
    //    Âø¿ëÁ¶°Ç °Ë»ç.
                
    return E_FAIL;
            }

            
    bOk CHECKSLOT_ITEM GET_HOLD_ITEM().sNativeIDemSlot );
            if ( 
    bOk && sCustom.IsWrap())
            {
                
    //    ÇØ´ç½½·Ô°ú ¸ÂÁö ¾Ê½À´Ï´Ù.
                
    return E_FAIL;
            }

            
    bOk CHECKSLOT_ITEM GET_HOLD_ITEM().sNativeIDemSlot );
            if ( !
    bOk )
            {
                
    //    ÇØ´ç½½·Ô°ú ¸ÂÁö ¾Ê½À´Ï´Ù.
                
    return E_FAIL;
            }

            
    SITEM *pItem GLItemMan::GetInstance().GetItem(GET_HOLD_ITEM().sNativeID);

            if ( 
    pItem && pItem->sSuitOp.emSuit==SUIT_HANDHELD && pItem->sSuitOp.IsBOTHHAND() )
            {
                
    EMSLOT emRHand GetCurRHand();
                
    EMSLOT emLHand GetCurLHand();

                
    SITEM *pItem1=NULL, *pItem2=NULL;
                if ( 
    VALID_SLOT_ITEM(emLHand) && VALID_SLOT_ITEM(emRHand) )
                {
                    
    pItem1 GLItemMan::GetInstance().GetItem(GET_SLOT_ITEM(emLHand).sNativeID);
                    
    pItem2 GLItemMan::GetInstance().GetItem(GET_SLOT_ITEM(emRHand).sNativeID);

                    
    WORD wInvenPosXwInvenPosY;
                    
    bOk m_cInventory.FindInsrtable pItem1->sBasicOp.wInvenSizeXpItem1->sBasicOp.wInvenSizeYwInvenPosXwInvenPosY );
                    if ( !
    bOk )
                    {
                        
    //    ÀιêÅ丮¿¡ ¿©À¯ °ø°£ÀÌ ºÎÁ·.
                        
    return E_FAIL;
                    }
                }
            }
            
    //add ownership
            
    const SITEMCUSTOMsHoldItem GET_HOLD_ITEM();

            
    //if ( sHoldItem.IsWrap() ) // wrapper
            //    return S_FALSE;
            
            //Ocram Dev - Operation tokhang sa mga items pag lumagpas sa max RV Hahahaha! 7-16-2017
            
    if ( sHoldItem.GETOptVALUE(EMR_OPT_ATTACK_VOL) >= 101  )//attack direct value - Ocram Networks
            
    {    
                return 
    E_FAIL;
            }
            if ( 
    sHoldItem.GETOptVALUE(EMR_OPT_DEFENSE_VOL) >= 101  )//def direct value - Ocram Networks
            
    {    
                return 
    E_FAIL;
            }
            if ( 
    sHoldItem.GETOptVALUE(EMR_OPT_MELEE) >= 101  )//meleee direct value - Ocram Networks
            
    {    
                return 
    E_FAIL;
            }
            if ( 
    sHoldItem.GETOptVALUE(EMR_OPT_SHOOTING) >= 101  )//shooting direct value - Ocram Networks
            
    {    
                return 
    E_FAIL;
            }
            if ( 
    sHoldItem.GETOptVALUE(EMR_OPT_VITALITY) >= 151  )//Vit direct value - Ocram Networks
            
    {    
                return 
    E_FAIL;
            }
            if ( 
    sHoldItem.GETOptVALUE(EMR_OPT_DAMAGE) >= 10.01  )//Damage rate percentage - Ocram Networks
            
    {    
                return 
    E_FAIL;
            }
            if ( 
    sHoldItem.GETOptVALUE(EMR_OPT_AVOID_VOL) >= 31  )//avoid direct value - Ocram Networks
            
    {    
                return 
    E_FAIL;
            }
            if ( 
    sHoldItem.GETOptVALUE(EMR_OPT_HIT_VOL) >= 31  )//hitrate direct value - Ocram Networks
            
    {    
                return 
    E_FAIL;
            }
            if ( 
    sHoldItem.GETOptVALUE(EMR_OPT_RESIST) >= 21  )//resist - Ocram Networks
            
    {    
                return 
    E_FAIL;
            }
            
    //

            
    GLMSG::SNETPC_REQ_SLOT_EX_HOLD NetMsg;
            
    NetMsg.emSlot emSlot;
            
    NETSENDTOFIELD ( &NetMsg );
        }
        
    //    SLOT -> HOLD ( ÇØÁ¦ )
        
    else if ( VALID_SLOT_ITEM(emSlot) )
        {
            
    GLMSG::SNETPC_REQ_SLOT_TO_HOLD NetMsg;
            
    NetMsg.emSlot emSlot;
            
    NETSENDTOFIELD ( &NetMsg );
        }
        
    //    SLOT <- HOLD ( Âø¿ë )
        
    else if ( VALID_HOLD_ITEM() )
        {
            
    BOOL bOk;
            
    bOk ACCEPT_ITEM GET_HOLD_ITEM().sNativeID );
            if ( !
    bOk )
            {
                
    //    Âø¿ëÁ¶°Ç °Ë»ç.
                
    return E_FAIL;
            }

            
    bOk CHECKSLOT_ITEM GET_HOLD_ITEM().sNativeIDemSlot );
            if ( !
    bOk )
            {
                
    //    ÇØ´ç½½·Ô°ú ¸ÂÁö ¾Ê½À´Ï´Ù.
                
    return E_FAIL;
            }

            
    SITEMCUSTOM sCustom GET_HOLD_ITEM();
            if ( 
    bOk && sCustom.IsWrap())
            {
                
    //    ÇØ´ç½½·Ô°ú ¸ÂÁö ¾Ê½À´Ï´Ù.
                
    return E_FAIL;
            }

            if ( 
    sCustom.IsWrap() ) // wrapper
                
    return S_FALSE;

            
    GLMSG::SNETPC_REQ_HOLD_TO_SLOT NetMsg;
            
    NetMsg.emSlot emSlot;
            
    NETSENDTOFIELD ( &NetMsg );        

        }

        return 
    S_OK;
    }

    HRESULT GLCharacter::ReqSlotChange()
    {
        
    //    Note : ½ºÅ³ ½ÃÀü Áß¿¡ ½½·Ô º¯°æÀ» ¼öÇà ÇÒ ¼ö ¾ø´Ù°í º½.
        //
        
    if ( RANPARAM::bAutoTarget )
        {
            return 
    E_FAIL//to prevent swap weapon when pressing tab (for extreme class) - auto pilot purpose kasi mahilig mag alt+tab yung iba haha
        
    }
        if( 
    IsACTION(GLAT_SKILL) )
        {
            return 
    E_FAIL;
        }


        
    GLMSG::SNETPC_REQ_SLOT_CHANGE NetMsg;
        
    NETSENDTOFIELD ( &NetMsg );

        return 
    S_OK;
    }

    //    Note : ¾ÆÀÌÅÛ ¹Ù´Ú¿¡ ¹ö¸².
    HRESULT GLCharacter::ReqHoldToField ( const D3DXVECTOR3 &vPos )
    {
        if ( !
    VALID_HOLD_ITEM () )                    return E_FAIL;
        if ( 
    ValidWindowOpen() )                    return E_FAIL;    

        const 
    SITEMCUSTOMsHoldItem GET_HOLD_ITEM();
        
    SITEMCUSTOM sCustom GET_HOLD_ITEM();
        
    SITEMpItem GLItemMan::GetInstance().GetItem sHoldItem.sNativeID );
        if ( !
    pItem )                return E_FAIL;
        
        
    PLANDMANCLIENT pLand GLGaeaClient::GetInstance().GetActiveMap();
        if ( !
    pLand )                                 return E_FAIL;
        if ( 
    pLand->m_bTowerWars )
        {
             
    CInnerInterface::GetInstance().PrintMsgText NS_UITEXTCOLOR::DISABLE"You are inside the War Zone Action Disabled." );
            return 
    E_FAIL;
        }
        
    //    °Å·¡¿É¼Ç
        
    if ( !pItem->sBasicOp.IsTHROW() )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("CANNOT_DROP") );
            return 
    E_FAIL;
        }

        
    /*if ( pItem->sBasicOp.IsTHROW() )
        {
            CString strTemp;
            strTemp.Format ( ID2GAMEINTEXT("DROP_ITEM"));
            DoModal ( strTemp, MODAL_QUESTION, YESNO, MODAL_DROP_ITEM );
            //CInnerInterface::GetInstance().PrintMsgTextDlg ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("CANNOT_DROP") );
            //return S_OK;
        }*/

        
    if (  !pItem->sBasicOp.IsTHROW()  &&  ( pItem && sCustom.bWrap!=true )   )
        {
        
    CInnerInterface::GetInstance().PrintMsgText NS_UITEXTCOLOR::DISABLE"The item you wish to drop is Undropable." );
        return 
    E_FAIL;
        }
        if (  ( 
    pItem && sCustom.bNonDrop !=false )   &&  ( pItem && sCustom.bWrap!=true )   )
        {
        
    CInnerInterface::GetInstance().PrintMsgText NS_UITEXTCOLOR::DISABLE"The item you wish to drop is Undropable." );
        return 
    E_FAIL;
        }
        
    // ÆÖÄ«µåÀϰæ¿ì
        
    if ( pItem->sBasicOp.emItemType == ITEM_PET_CARD )
        {
            
    GLPetClientpMyPet GLGaeaClient::GetInstance().GetPetClient ();
            if ( 
    pMyPet->IsVALID () && sHoldItem.dwPetID == pMyPet->m_dwPetID )
            {
                return 
    E_FAIL;
            }
        }    

        
    GLMSG::SNETPC_REQ_HOLD_TO_FIELD NetMsg;
        
    NetMsg.vPos vPos;
    #if defined(VN_PARAM) //vietnamtest%%%
        
    if ( sHoldItem.bVietnamGainItem )
        {
            
    NetMsg.bVietnamItem sHoldItem.bVietnamGainItem;
        }
    #endif

        
    NETSENDTOFIELD ( &NetMsg );

        return 
    S_OK;
    }

    HRESULT GLCharacter::ReqHoldToFieldFireCracker ( const D3DXVECTOR3 &vPos )
    {
        if ( !
    VALID_HOLD_ITEM () )                    return E_FAIL;
        if ( 
    ValidWindowOpen() )                    return E_FAIL;    

        
    SITEMpITEM GET_SLOT_ITEMDATA SLOT_HOLD );
        if ( !
    pITEM )                            return E_FAIL;

        if ( 
    pITEM->sBasicOp.emItemType!=ITEM_FIRECRACKER )        return E_FAIL;
        if ( 
    pITEM->sBasicOp.strTargetEffect.empty() )            return E_FAIL;

        
    GLMSG::SNETPC_REQ_FIRECRACKER NetMsg;
        
    NetMsg.vPOS vPos;

        
    NETSENDTOFIELD ( &NetMsg );

        return 
    S_OK;
    }

    bool GLCharacter::IsNpcPileItem SNATIVEID sNID_NPCDWORD dwChannelWORD wPosXWORD wPosY )
    {
        if ( 
    ValidWindowOpen() )                    return false;    

        
    PCROWDATA pCrowData GLCrowDataMan::GetInstance().GetCrowData sNID_NPC );

        
    //    »óÀΠNPC°¡ Á¸Á¦ÇÏÁö ¾Ê½À´Ï´Ù.
        
    if ( !pCrowData )                                return false;

        if ( 
    pCrowData->GetSaleNum() <= dwChannel )        return false;

        
    GLInventory *pInven pCrowData->GetSaleInven dwChannel );
        if ( !
    pInven )                                    return false;

        
    SINVENITEMpSaleItem pInven->FindPosItem wPosXwPosY );
        if ( !
    pSaleItem )                                return false;
            
        
    SNATIVEID sBUYNID pSaleItem->sItemCustom.sNativeID;

        
    SITEMpItem GLItemMan::GetInstance().GetItem sBUYNID );

        return ( 
    pItem->ISPILE() != FALSE );
    }

    bool GLCharacter::IsRestartPossible()
    {
        
    GLMapList::FIELDMAP MapsList GLGaeaClient::GetInstance().GetMapList ();
        
    GLMapList::FIELDMAP_ITER iter MapsList.find GLGaeaClient::GetInstance().GetActiveMap ()->GetMapID ().dwID );
        if ( 
    iter==MapsList.end() )                    return FALSE;

        const 
    SMAPNODE *pMapNode = &(*iter).second;

        return !
    pMapNode->bRestart;
    }

    /*void GLCharacter::SendHackingMSG ()
    {
        GLMSG::SNET_REQ_SERVERTEST NetMsg;
        NETSENDTOFIELD ( &NetMsg );
    }

    void GLCharacter::SendHackingMSG1 ()
    {
    }
    */
    // *****************************************************
    // Desc: ¾ÆÀÌÅÛÀ» ±¸ÀÔÇϰųª/ÆÈ¾Æ¹ö¸²
    // *****************************************************
    HRESULT GLCharacter::ReqNpcTo SNATIVEID sNID_NPCDWORD dwChannelWORD wPosXWORD wPosYWORD wBuyNum )
    {
        if ( 
    ValidWindowOpen() )                        return E_FAIL;    

        
    PCROWDATA pCrowData GLCrowDataMan::GetInstance().GetCrowData sNID_NPC );

        if ( !
    pCrowData )
        {
            
    //    »óÀΠNPC°¡ Á¸ÀçÇÏÁö ¾Ê½À´Ï´Ù.
            
    return E_FAIL;
        }

        
    //    ¾ÆÀÌÅÆÀ» ÆÈ±â ¼öÇà.
        
    if ( VALID_HOLD_ITEM() )
        {
            
    SITEMpItem GLItemMan::GetInstance().GetItem GET_HOLD_ITEM().sNativeID );

            
    //    °Å·¡¿É¼Ç
            
    if ( !pItem->sBasicOp.IsSALE() )
            {
                
    //    ÆÈ±â °¡´ÉÇÏÁö ¾ÊÀ½.
                
    return E_FAIL;
            }

            if ( 
    GET_HOLD_ITEM().IsGM_GENITEM() )
            {
                
    //    ÆÈ±â °¡´ÉÇÏÁö ¾ÊÀ½.
                
    return E_FAIL;
            }

            
    // ÆÖÄ«µåÀϰæ¿ì
            
    if ( pItem->sBasicOp.emItemType == ITEM_PET_CARD )
            {
                const 
    SITEMCUSTOMsHoldItem GET_HOLD_ITEM();
                
    GLPetClientpMyPet GLGaeaClient::GetInstance().GetPetClient ();
                if ( 
    pMyPet->IsVALID () && sHoldItem.dwPetID == pMyPet->m_dwPetID )
                {
                    return 
    E_FAIL;
                }
            }

            
    //    ÆÈ±â ¸Þ½ÃÁö.
            
    GLMSG::SNETPC_REQ_SALE_TO_NPC NetMsg;
            
    NetMsg.sNID sNID_NPC;
            
    NetMsg.dwNPCID m_dwNPCID;
            
    NETSENDTOFIELD ( &NetMsg );
        }
        
    //    ¾ÆÀÌÅÆ »ç±â ¼öÇà.
        
    else
        {
            
    GASSERT(wBuyNum>0&&"¾ÆÀÌÅÛ ±¸ÀÔ ¿äû ¼ö·®Àº 1°³ ÀÌ»óÀÌ¿©¾ß ÇÑ´Ù.");

            if ( 
    pCrowData->GetSaleNum() <= dwChannel )        return E_FAIL;

            
    GLInventory *pInven pCrowData->GetSaleInven dwChannel );
            if ( !
    pInven )                                    return E_FAIL;

            
    SINVENITEMpSaleItem pInven->FindPosItem wPosXwPosY );
            if ( !
    pSaleItem )
            {
                
    //    »ì·Á°í Çϴ ¾ÆÀÌÅÆÀÌ ¾ø½À´Ï´Ù.
                
    return E_FAIL;
            }
            
            
    SNATIVEID sBUYNID pSaleItem->sItemCustom.sNativeID;

            
    SITEMpItem GLItemMan::GetInstance().GetItem sBUYNID );

            
    LONGLONG dwPrice pCrowData->GetNpcSellPrice(pItem->sBasicOp.sNativeID.dwID);
            
    //add money 2
            //no tax for vot item
            
    if ( pItem->sBasicOp.emLevel == LEVEL_VOTE_ITEM )
            {
                
    dwPrice pItem->sBasicOp.dwBuyPrice;
            }
            
    //add money 3
            //no tax for premium item
            
    else if (pItem->sBasicOp.emLevel == LEVEL_PREMIUM_ITEM )
            {
                
    dwPrice pItem->sBasicOp.dwBuyPrice;
            }
            
    //add contributionpoint by CNDev
            //no tax for contributionpoint item
            
    else if (pItem->sBasicOp.emLevel == LEVEL_CONTRIBUTION_ITEM )
            {
                
    dwPrice pItem->sBasicOp.dwBuyPrice;
            }
            else
            {    
                if( 
    dwPrice == )
                {
                    
    dwPrice pItem->sBasicOp.dwBuyPrice;
                }
            }

            
    //add money 2
            //price check for vote item
            
    if ( pItem->sBasicOp.emLevel == LEVEL_VOTE_ITEM 
            {
                if ( 
    m_lnVoteP < (LONGLONG)dwPrice*wBuyNum )
                {
                
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("BUYITEM_NOMONEY_2") );
                return 
    E_FAIL;
                }
            }
            
    //add money 3
            //price check for premium item
            
    else if ( pItem->sBasicOp.emLevel == LEVEL_PREMIUM_ITEM )
            {
                if ( 
    m_lnPremP < (LONGLONG)dwPrice*wBuyNum )
                {
                
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("BUYITEM_NOMONEY_3") );
                return 
    E_FAIL;
                }
            }
            
    //add contributionpoint by CNDev
            
    else if ( pItem->sBasicOp.emLevel == LEVEL_CONTRIBUTION_ITEM )
            {
                if ( 
    m_wSchool != GLGaeaClient::GetInstance().GetActiveMap()->m_dwCTFWINNER )
                {
                    
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::DISABLE"Your school is not the Tyranny Winner, Unable to purchase the item." );
                    return 
    E_FAIL;
                }
                if ( 
    m_lnContribP < (LONGLONG)dwPrice*wBuyNum )
                {
                    
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("BUYITEM_NOMONEY_4") );
                    return 
    E_FAIL;
                }
            }
            
    //price check for gold
            
    else 
            {
                if ( 
    m_lnMoney < (LONGLONG)dwPrice*wBuyNum )
                {
                
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("BUYITEM_NOMONEY") );
                return 
    E_FAIL;
                }
            }


            

            
    WORD wINVENX pItem->sBasicOp.wInvenSizeX;
            
    WORD wINVENY pItem->sBasicOp.wInvenSizeY;

            
    //    Note : Àκ¥¿¡ ¿©À¯ °ø°£ÀÌ ÀÖ´ÂÁö °Ë»ç.
            //
            
    BOOL bITEM_SPACE(FALSE);
            if ( 
    pItem->ISPILE() )
            {
                
    //    °ãħ ¾ÆÀÌÅÛÀÏ °æ¿ì.
                
    WORD wPILENUM pItem->sDrugOp.wPileNum;
                
    WORD wREQINSRTNUM = ( wBuyNum pItem->GETAPPLYNUM() );
                
    bITEM_SPACE m_cInventory.ValidPileInsrt wREQINSRTNUMsBUYNIDwPILENUMwINVENXwINVENY );
            }
            else
            {
                
    GASSERT(wBuyNum==1&&"°ãħÀÌ ºÒ°¡´ÉÇÑ ¾ÆÀÌÅÛÀº 1°³¾¿¸¸ ±¸ÀÔ °¡´ÉÇÕ´Ï´Ù.");

                
    //    ÀϹݠ¾ÆÀÌÅÛÀÇ °æ¿ì.
                
    WORD wInsertPosX(0), wInsertPosY(0);
                
    bITEM_SPACE m_cInventory.FindInsrtable wINVENXwINVENYwInsertPosXwInsertPosY );
            }

            if ( !
    bITEM_SPACE )
            {
                
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("BUYITEM_NOSPACE") );
                return 
    E_FAIL;
            }

            
    //    ±¸ÀÔ ¿äû ¸Þ½ÃÁö.
            
    GLMSG::SNETPC_REQ_BUY_FROM_NPC NetMsg;
            
    NetMsg.sNID sNID_NPC;
            
    NetMsg.dwNPCID m_dwNPCID;
            
    NetMsg.dwChannel dwChannel;
            
    NetMsg.wPosX pSaleItem->wPosX;
            
    NetMsg.wPosY pSaleItem->wPosY;
            
    NetMsg.wBuyNum wBuyNum;

            
    NETSENDTOFIELD ( &NetMsg );
        }

        return 
    S_OK;
    }

    // *****************************************************
    // Desc: ºô¸µ ¾ÆÀÌÅÛ Á¤º¸ DB¿¡¼­ °¡Á®¿À±â
    // *****************************************************
    HRESULT GLCharacter::ReqItemBankInfo ()
    {
        
    GLMSG::SNET_GET_CHARGEDITEM_FROMDB NetMsg;
        
    NetMsg.dwCharID m_dwCharID;
        
    StringCchCopy NetMsg.szUIDUSR_ID_LENGTH+1m_szUID );

        
    NETSENDTOFIELD ( &NetMsg );

        
    m_cInvenCharged.DeleteItemAll ();
        
    m_mapChargedKey.clear();

        return 
    S_OK;
    }

    HRESULT GLCharacter::ReqDeducPoints DWORD wPoint1 DWORD wPoint2 )
    {
        
    //if ( wPoint1 )
        //     COuterInterface::GetInstance().SetUserPointDeduc(wPoint1);
        //else
            // COuterInterface::GetInstance().SetUserPoint2Deduc(wPoint2);
        
    return S_OK;
    }

    HRESULT GLCharacter::ReqItemShopInfo ()
    {
        for (
    int i=0;i<13;++i)
        {
            
    m_cInvenItemShopVote[i].DeleteItemAll ();
            
    m_mapItemShopVoteKey[i].clear();
            
    m_cInvenItemShopPremium[i].DeleteItemAll ();
            
    m_mapItemShopPremiumKey[i].clear();
            
    m_cInvenItemShop[i].DeleteItemAll ();
            
    m_mapItemShopKey[i].clear();
        }

        
    GLMSG::SNET_GET_ITEMSHOP_FROMDB NetMsg;
        
    NetMsg.dwCharID m_dwCharID;
        
    StringCchCopy NetMsg.szUIDUSR_ID_LENGTH+1m_szUID );

        
    NETSENDTOFIELD ( &NetMsg );

        
    GLMSG::SNETPC_RETRIEVE_POINTS pNetMsg;
        
    NETSENDTOFIELD ( &pNetMsg );
        
        return 
    S_OK;
    }

    HRESULT GLCharacter::ReqBuyItem ( const charszPurkey )
    {
        if ( !
    IsValidBody() )                        return E_FAIL;
        
            
    GLMSG::SNET_ITEMSHOP_BUY NetMsg;
            
    StringCchCopy NetMsg.szPurKeyPURKEY_LENGTH+1szPurkey  );
            
    NETSENDTOFIELD ( &NetMsg );

        return 
    S_OK;
    }

    HRESULT GLCharacter::ReqChargedItemTo WORD wPosXWORD wPosY )
    {
        
    SINVENITEM *pINVENITEM m_cInvenCharged.GetItem wPosXwPosY );
        if ( !
    pINVENITEM )                        return E_FAIL;

        
    SNATIVEID nidPOS(wPosX,wPosY);
        
    MAPSHOP_KEY_ITER iter m_mapChargedKey.find nidPOS.dwID );
        if ( 
    m_mapChargedKey.end()==iter )        return E_FAIL;

        
    std::string strPurKey = (*iter).second;
        
        
    //    Note : ¾ÆÀÌÅÛ °¡Á®¿À±â ¿äû.
        //
        
    GLMSG::SNET_CHARGED_ITEM_GET NetMsg;
        
    NetMsg.dwID nidPOS.dwID;
        
    StringCchCopy NetMsg.szPurKeyPURKEY_LENGTH+1strPurKey.c_str() );
        
    NETSENDTOFIELD ( &NetMsg );

        return 
    S_OK;
    }

    void GLCharacter::ReqLevelUp ()
    {
        
    GLMSG::SNETPC_REQ_LEVELUP NetMsg;
        
    NETSENDTOFIELD ( &NetMsg );
    }

    //void GLCharacter::ReqStatsUp ( EMSTATS emStats )
    //{
    //    if ( m_wStatsPoint==0 )    return;
    //
    //    GLMSG::SNETPC_REQ_STATSUP NetMsg;
    //    NetMsg.emStats = emStats;
    //    NETSENDTOFIELD ( &NetMsg );
    //}

    void GLCharacter::ReqStatsUp SCHARSTATS sStats )
    {
        if ( 
    m_wStatsPoint==)    return;
        if ( 
    sStats.GetTotal() >  m_wStatsPoint )    return;

        
    /*switch( sStats )
        {
            case sStats.dwPow: CInnerInterface::GetInstance().PrintMsgText ( NS_UITEXTCOLOR::GREENYELLOW, "Adding %d Pow. Success!" );    break;
            case sStats.dwStr: CInnerInterface::GetInstance().PrintMsgText ( NS_UITEXTCOLOR::GREENYELLOW, "Adding %d Vit. Success!" );    break;
            case sStats.dwSpi: CInnerInterface::GetInstance().PrintMsgText ( NS_UITEXTCOLOR::GREENYELLOW, "Adding %d Int. Success!" );    break;
            case sStats.dwDex: CInnerInterface::GetInstance().PrintMsgText ( NS_UITEXTCOLOR::GREENYELLOW, "Adding %d Dex. Success!" );    break;
            case sStats.dwSta: CInnerInterface::GetInstance().PrintMsgText ( NS_UITEXTCOLOR::GREENYELLOW, "Adding %d Stamina. Success!" );    break;
            
        }*/

        
    GLMSG::SNETPC_REQ_STATSUP NetMsg;
        
    NetMsg.sStats sStats;
        
    NETSENDTOFIELD ( &NetMsg );
    }
    /*
    void GLCharacter::ReqStatsUpCmd( EMSTATS emStats, DWORD value )
    {
        if ( m_wStatsPoint < value)    return;

        GLMSG::SNETPC_REQ_STATSUPCMD NetMsg;
        NetMsg.emStats = emStats;
        NetMsg.dwValue = value;
        NETSENDTOFIELD ( &NetMsg );
    }*/

    /*void GLCharacter::ReqAllowBet ( BOOL bAllowBet ) //add duel bet
    {
        GLMSG::SNETPC_REQ_ALLOW_BET NetMsg;
        NetMsg.bAllowBet = bAllowBet;
        NETSENDTOFIELD ( &NetMsg );
    }*/
    HRESULT GLCharacter::ReqSkillQuickSet ( const SNATIVEID skill_id, const WORD wSLOT )
    {
        if ( 
    EMSKILLQUICK_SIZE <= wSLOT )    return E_FAIL;

        
    //    Note : ¹è¿î ½ºÅ³ÀÌ ¾Æ´Ò °æ¿ì Ãë¼ÒµÊ.
        
    if ( !ISLEARNED_SKILL(skill_id) )    return E_FAIL;

        
    GLMSG::SNETPC_REQ_SKILLQUICK_SET NetMsg;
        
    NetMsg.wSLOT wSLOT;
        
    NetMsg.skill_id skill_id;
        
    NETSENDTOFIELD ( &NetMsg );

        return 
    S_OK;
    }

    HRESULT GLCharacter::ReqSkillQuickReSet ( const WORD wSLOT )
    {
        if ( 
    EMSKILLQUICK_SIZE <= wSLOT )    return E_FAIL;

        
    //    Note : Å¬¶óÀ̾ðÆ®ÀÇ ½½·ÔÀ» ºñ¿öÁÜ.
        //m_sSKILLQUICK[wSLOT] = NATIVEID_NULL();

        
    GLMSG::SNETPC_REQ_SKILLQUICK_RESET NetMsg;
        
    NetMsg.wSLOT wSLOT;
        
    NETSENDTOFIELD ( &NetMsg );

        return 
    S_OK;
    }

    //    Note : ¾ÆÀÌÅÛ ½½·Ô¿¡ µî·Ï/Á¦°Å.
    HRESULT GLCharacter::ReqItemQuickSet ( const WORD wSLOT )
    {
        if ( 
    EMACTIONQUICK_SIZE <= wSLOT )    return E_FAIL;
        if ( !
    VALID_HOLD_ITEM() )            return S_FALSE;

        const 
    SITEMCUSTOMsITEM GET_HOLD_ITEM ();
        
    #if defined(VN_PARAM) //vietnamtest%%%
        
    if ( sITEM.bVietnamGainItem ) return S_FALSE;
    #endif

        
    SITEMpITEM GLItemMan::GetInstance().GetItem sITEM.sNativeID );
        if ( !
    pITEM )                        return S_FALSE;

        if ( 
    pITEM->sBasicOp.emItemType != ITEM_CURE &&
             
    pITEM->sBasicOp.emItemType != ITEM_RECALL &&
             
    pITEM->sBasicOp.emItemType != ITEM_TELEPORT_CARD /*&& 
             pITEM->sBasicOp.emItemType != ITEM_PET_CARD*/ 
    )
                
    // Disabled to avoid crash on Field Server
                // 08-14-2013 11:25 PM
                //  
             
    return S_FALSE;

        
    //    Note : Å¬¶óÀ̾ðÆ®ÀÇ ½½·Ô¿¡ ¹Ù·Î ³Ö¾îÁÜ.
        //m_sACTIONQUICK[wSLOT].wACT = EMACT_SLOT_DRUG;
        //m_sACTIONQUICK[wSLOT].sNID = sITEM.sNativeID;

        //    Note : ¼­¹ö¿¡ ½½·Ô¿¡ µé¾î°¥ Á¤º¸ Àü¼Û.
        
    GLMSG::SNETPC_REQ_ACTIONQUICK_SET NetMsg;
        
    NetMsg.wSLOT wSLOT;
        
    NetMsg.wACT EMACT_SLOT_DRUG;

        
    NETSENDTOFIELD ( &NetMsg );

        return 
    S_OK;
    }

    HRESULT GLCharacter::ReqItemQuickReSet ( const WORD wSLOT )
    {
        if ( 
    EMACTIONQUICK_SIZE <= wSLOT )    return E_FAIL;

        
    //m_sACTIONQUICK[wSLOT].RESET ();

        
    GLMSG::SNETPC_REQ_ACTIONQUICK_RESET NetMsg;
        
    NetMsg.wSLOT wSLOT;

        
    NETSENDTOFIELD ( &NetMsg );

        return 
    S_OK;
    }

    //    Note : ½ºÅ³ ½½·Ô¿¡ µî·Ï/Á¦°Å.
    HRESULT GLCharacter::ReqSkillRunSet ( const WORD wSLOT )
    {
        if ( 
    EMSKILLQUICK_SIZE <= wSLOT )    return E_FAIL;

        const 
    SNATIVEID &skill_id m_sSKILLQUICK[wSLOT];
        if ( 
    skill_id==NATIVEID_NULL() )    return E_FAIL;

        
    //    Note : ¹è¿î ½ºÅ³ÀÌ ¾Æ´Ò °æ¿ì Ãë¼ÒµÊ.
        
    if ( !ISLEARNED_SKILL(skill_id) )    return E_FAIL;

        
    m_sRunSkill skill_id;

        
    GLMSG::SNETPC_REQ_SKILLQUICK_ACTIVE NetMsg;
        
    NetMsg.wSLOT wSLOT;
        
    NETSENDTOFIELD ( &NetMsg );

        return 
    S_OK;
    }

    HRESULT GLCharacter::ReqSkillRunReSet ()
    {
        
    m_sRunSkill NATIVEID_NULL();
        return 
    S_OK;
    }

    // *****************************************************
    // Desc: ¼­¹ö¿¡ Ã¢°í Á¤º¸ ¿äû ( ¶ôÄ¿ °ü¸®ÀΠ)
    // *****************************************************
    HRESULT GLCharacter::ReqGetStorage DWORD dwChannelDWORD dwNPCID )
    {
        if ( !
    IsValidBody() )                        return E_FAIL;
        if ( 
    IsVALID_STORAGE(dwChannel) )            return S_OK;

        
    //    Note : ¼­¹ö¿¡ ¿äû.
        //
        
    GLMSG::SNETPC_REQ_GETSTORAGE    NetMsg;
        
    NetMsg.dwChannel dwChannel;
        
    NetMsg.dwNPCID   m_dwNPCID;
        
    NETSENDTOFIELD ( &NetMsg );

        return 
    S_OK;
    }


    // *****************************************************
    // Desc: Ã¢°í ¾ÆÀÌÅÛ µé¶§, ³õÀ»¶§, ±³È¯ÇÒ¶§, ÇÕÄ¥¶§.
    // *****************************************************
    HRESULT GLCharacter::ReqStorageTo DWORD dwChannelWORD wPosXWORD wPosY )
    {
        if ( !
    IsValidBody() )                            return E_FAIL;
        if ( !
    IsVALID_STORAGE(dwChannel) )                return S_OK;
        if ( 
    ValidWindowOpen() )                        return E_FAIL;    

        
    SINVENITEMpInvenItem m_cStorage[dwChannel].FindPosItem wPosXwPosY );
        if ( !
    VALID_HOLD_ITEM () && !pInvenItem )        return E_FAIL;


        if ( 
    VALID_HOLD_ITEM() ) 
        {
            
    SITEM *pITEM GLItemMan::GetInstance().GetItem GET_HOLD_ITEM().sNativeID );
            if ( !
    pITEM )        return false;
            
            
    //    °Å·¡¿É¼Ç
            
    if ( GET_HOLD_ITEM().bWrap!= true )
            {
              if ( !
    pITEM->sBasicOp.IsEXCHANGE() )        return FALSE;
              if ( 
    GET_HOLD_ITEM().bNonDrop!= false )  return FALSE;
        
            }
        }


        
    bool bKEEP IsKEEP_STORAGE(dwChannel);

        if ( 
    VALID_HOLD_ITEM () && pInvenItem )
        {
    #if defined(VN_PARAM) //vietnamtest%%%
            
    if ( !GET_HOLD_ITEM().bVietnamGainItem  )
    #endif

            
    {
                if ( !
    bKEEP )
                {
                    
    //    Note : ¾ÆÀÌÅÛÀ» ³ÖÀ» ¼ö ¾øÀ» °æ¿ì..
                    
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("STORAGE_SPAN_END") );
                    return 
    E_FAIL;
                }

                
    GLMSG::SNETPC_REQ_STORAGE_EX_HOLD NetMsg;
                
    NetMsg.dwChannel dwChannel;
                
    NetMsg.dwNPCID m_dwNPCID;
                
    NetMsg.wPosX pInvenItem->wPosX;
                
    NetMsg.wPosY pInvenItem->wPosY;
                
    NETSENDTOFIELD ( &NetMsg );
            }
        }
        else if ( 
    pInvenItem )
        {
            
    GLMSG::SNETPC_REQ_STORAGE_TO_HOLD NetMsg;
            
    NetMsg.dwChannel dwChannel;
            
    NetMsg.dwNPCID m_dwNPCID;
            
    NetMsg.wPosX pInvenItem->wPosX;
            
    NetMsg.wPosY pInvenItem->wPosY;
            
    NETSENDTOFIELD ( &NetMsg );
        }
        else if ( 
    VALID_HOLD_ITEM () )
        {
    #if defined(VN_PARAM) //vietnamtest%%%
            
    if ( !GET_HOLD_ITEM().bVietnamGainItem  )
    #endif

            
    {

                if ( !
    bKEEP )
                {
                    
    //    Note : ¾ÆÀÌÅÛÀ» ³ÖÀ» ¼ö ¾øÀ» °æ¿ì..
                    
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("STORAGE_SPAN_END") );
                    return 
    E_FAIL;
                }

                
    //    Note : ¸Þ½ÃÁö ¼Û½ÅÀü¿¡ À¯È¿ÇÒÁö¸¦ ¹Ì¸® °Ë»çÇÔ.
                //
                
    SITEMpItem GLItemMan::GetInstance().GetItem GET_HOLD_ITEM().sNativeID );
                
    GASSERT(pItem&&"¾ÆÀÌÅÆ ´ëÀÌÅͰ¡ Á¸Á¦ÇÏÁö ¾ÊÀ½");

                
    BOOL bOk m_cStorage[dwChannel].IsInsertable pItem->sBasicOp.wInvenSizeXpItem->sBasicOp.wInvenSizeYwPosXwPosY );
                if ( !
    bOk )
                {
                    
    //    ÀιêÀÌ °¡µæÂþÀ½.
                    
    return E_FAIL;
                }

                
    GLMSG::SNETPC_REQ_HOLD_TO_STORAGE NetMsg;
                
    NetMsg.dwChannel dwChannel;
                
    NetMsg.dwNPCID m_dwNPCID;
                
    NetMsg.wPosX wPosX;
                
    NetMsg.wPosY wPosY;

                
    NETSENDTOFIELD ( &NetMsg );
            }
        }

        return 
    S_OK;
    }


    // *****************************************************
    // Desc: ½ºÅ³ ¹è¿ì±â ¿äû. ( Ã¢°í ¾ÆÀÌÅÛÀ¸·Î. )
    // *****************************************************
    HRESULT GLCharacter::ReqStorageSkill DWORD dwChannelWORD wPosXWORD wPosY )
    {
        if ( !
    IsValidBody() )                        return E_FAIL;
        if ( !
    IsVALID_STORAGE(dwChannel) )            return S_OK;
        if ( 
    ValidWindowOpen() )                    return E_FAIL;    

        
    SINVENITEMpInvenItem m_cStorage[dwChannel].FindPosItem wPosXwPosY );
        if ( !
    pInvenItem )    return E_FAIL;

        
    wPosX pInvenItem->wPosX;
        
    wPosY pInvenItem->wPosY;

        
    SITEMpItem GLItemMan::GetInstance().GetItem pInvenItem->sItemCustom.sNativeID );
        if ( !
    pItem || pItem->sBasicOp.emItemType!=ITEM_SKILL )    return E_FAIL;

        
    SNATIVEID sSKILL_ID pItem->sSkillBookOp.sSkill_ID;

        if ( 
    ISLEARNED_SKILL(sSKILL_ID) )
        {
            
    //    À̹̠½ÀµæÇÑ ½ºÅ³.
            
    return E_FAIL;
        }

        
    EMSKILL_LEARNCHECK emSKILL_LEARNCHECK CHECKLEARNABLE_SKILL(sSKILL_ID);
        if ( 
    emSKILL_LEARNCHECK!=EMSKILL_LEARN_OK )
        {
            
    //    ½ºÅ³ ½Àµæ ¿ä±¸ Á¶°ÇÀ» ÃæÁ·ÇÏÁö ¸øÇÕ´Ï´Ù.
            
    return E_FAIL;
        }

        
    //    Note : ½ºÅ³ ½ÀµæÀ» ¿äûÇÕ´Ï´Ù.
        //
        
    GLMSG::SNETPC_REQ_LEARNSKILL_STORAGE NetMsg;
        
    NetMsg.wPosX wPosX;
        
    NetMsg.wPosY wPosY;
        
    NetMsg.dwNPCID m_dwNPCID;
        
        
    NETSENDTOFIELD ( &NetMsg );

        return 
    S_OK;
    }

    // *****************************************************
    // Desc: Ã¢°í ¾ÆÀÌÅÛ »ç¿ëÇÒ¶§ ( ¸¶½Ã±â, ½ºÅ³¹è¿ì±â µî ).
    // *****************************************************
    HRESULT GLCharacter::ReqStorageDrug DWORD dwChannelWORD wPosXWORD wPosY )
    {
        if ( !
    IsValidBody() )                        return E_FAIL;
        if ( !
    IsVALID_STORAGE(dwChannel) )            return S_OK;
        if ( 
    ValidWindowOpen() )                    return E_FAIL;    

        
    SINVENITEMpInvenItem m_cStorage[dwChannel].FindPosItem wPosXwPosY );
        if ( !
    pInvenItem )    return E_FAIL;

        if ( 
    CheckCoolTimepInvenItem->sItemCustom.sNativeID ) ) return E_FAIL;


        
    wPosX pInvenItem->wPosX;
        
    wPosY pInvenItem->wPosY;

        
    SITEMpItem GLItemMan::GetInstance().GetItem pInvenItem->sItemCustom.sNativeID );
        if ( !
    pItem )            return E_FAIL;

        
    // ·¹º§ Á¶°Ç È®ÀÎ
        
    if ( !SIMPLE_CHECK_ITEMpItem->sBasicOp.sNativeID ) ) return S_FALSE;

        if ( 
    pItem->sBasicOp.emItemType == ITEM_CURE )
        {
            
    //    Note : pk µî±ÞÀÌ »ìÀθ¶ µî±Þ ÀÌ»óÀÏ °æ¿ì È¸º¹¾àÀÇ »ç¿ëÀ» ¸·´Â´Ù.
            //
            
    DWORD dwPK_LEVEL GET_PK_LEVEL();
            if ( 
    dwPK_LEVEL != UINT_MAX && dwPK_LEVEL>GLCONST_CHAR::dwPK_DRUG_ENABLE_LEVEL )
            {
                
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("EMREQ_DRUG_PK_LEVEL") );
                return 
    E_FAIL;
            }

            if ( 
    m_sCONFTING.IsFIGHTING() && !m_sCONFTING.IsRECOVE() )
            {
                
    CInnerInterface::GetInstance().PrintMsgText NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("CONFRONT_RECOVE"), );
                return 
    E_FAIL;
            }

            if ( 
    pItem->sDrugOp.emDrug!=ITEM_DRUG_NUNE )
            {
                switch ( 
    pItem->sDrugOp.emDrug )
                {
                case 
    ITEM_DRUG_HP:
                    if ( 
    m_sHP.dwMax == m_sHP.dwNow )        return S_FALSE;
                    break;

                case 
    ITEM_DRUG_MP:
                    if ( 
    m_sMP.dwMax == m_sMP.dwNow )        return S_FALSE;
                    break;

                case 
    ITEM_DRUG_SP:
                    if ( 
    m_sSP.dwMax == m_sSP.dwNow )        return S_FALSE//add cp
                    
    break;

                case 
    ITEM_DRUG_CP:
                    if ( 
    m_sCP.dwMax == m_sCP.dwNow )        return S_FALSE;
                    break;

                case 
    ITEM_DRUG_HP_MP:
                    if ( 
    m_sHP.dwMax==m_sHP.dwNow && m_sMP.dwMax==m_sMP.dwNow )        return S_FALSE;
                    break;
                case 
    ITEM_DRUG_MP_SP:
                    if ( 
    m_sMP.dwMax==m_sMP.dwNow && m_sSP.dwMax==m_sSP.dwNow )        return S_FALSE;
                    break;

                case 
    ITEM_DRUG_HP_MP_SP:
                    if ( 
    m_sHP.dwMax==m_sHP.dwNow && m_sMP.dwMax==m_sMP.dwNow
                        
    && m_sSP.dwMax==m_sSP.dwNow )        return S_FALSE;
                    break;

                case 
    ITEM_DRUG_CURE:
                    if ( !
    ISSTATEBLOW() )                return S_FALSE;
                    break;

                case 
    ITEM_DRUG_HP_CURE:
                    if ( 
    m_sHP.dwMax == m_sHP.dwNow && !ISSTATEBLOW() )        return S_FALSE;
                    break;

                case 
    ITEM_DRUG_HP_MP_SP_CURE:
                    if ( 
    m_sHP.dwMax==m_sHP.dwNow && m_sMP.dwMax==m_sMP.dwNow
                        
    && m_sSP.dwMax==m_sSP.dwNow && !ISSTATEBLOW() )        return S_FALSE;
                    break;
                };

                
    GLMSG::SNETPC_REQ_STORAGEDRUG NetMsg;
                
    NetMsg.wPosX wPosX;
                
    NetMsg.wPosY wPosY;
                
    NetMsg.dwNPCID m_dwNPCID;

                
    NETSENDTOFIELD ( &NetMsg );
            }
        }
        else if ( 
    pItem->sBasicOp.emItemType ==ITEM_SKILL )
        {
            
    ReqStorageSkill dwChannelwPosXwPosY );
        }
        else if ( 
    pItem->sBasicOp.emItemType ==ITEM_PET_SKILL )
        {
            
    GLGaeaClient::GetInstance().GetPetClient()->ReqLearnSkill dwChannelwPosXwPosY );
        }
        
        return 
    S_OK;
    }

    // *****************************************************
    // Desc: Ã¢°í µ· ³Ö±â.
    // *****************************************************
    HRESULT GLCharacter::ReqStorageSaveMoney LONGLONG lnMoney )
    {
    //#if !defined(KR_PARAM) && !defined(KRT_PARAM)
    //    if( m_lnMoney%UINT_MAX < lnMoney )            return E_FAIL;
    //#endif
        
    if ( m_lnMoney lnMoney )                    return E_FAIL;
        if ( 
    ValidWindowOpen() )                    return E_FAIL;    

        
    GLMSG::SNETPC_REQ_STORAGE_SAVE_MONEY NetMsg;
        
    NetMsg.lnMoney lnMoney;
        
    NetMsg.dwNPCID m_dwNPCID;
        
    NETSENDTOFIELD ( &NetMsg );

        return 
    S_OK;
    }

    // *****************************************************
    // Desc: Ã¢°í µ· »©³»±â.
    // *****************************************************
    HRESULT GLCharacter::ReqStorageDrawMoney LONGLONG lnMoney )
    {
    //#if !defined(KR_PARAM) && !defined(KRT_PARAM)
    //    if( m_lnStorageMoney%UINT_MAX < lnMoney )    return E_FAIL;
    //#endif
        
    if ( m_lnStorageMoney lnMoney )            return E_FAIL;
        if ( 
    ValidWindowOpen() )                    return E_FAIL;    

        
    GLMSG::SNETPC_REQ_STORAGE_DRAW_MONEY NetMsg;
        
    NetMsg.lnMoney lnMoney;
        
    NetMsg.dwNPCID m_dwNPCID;
        
    NETSENDTOFIELD ( &NetMsg );

        return 
    S_OK;
    }

    //    Note : µ· ¹Ù´Ú¿¡ ¹ö¸².
    HRESULT GLCharacter::ReqMoneyToField LONGLONG lnMoney )
    {
        if ( !
    GLCONST_CHAR::bMONEY_DROP2FIELD )        return E_FAIL;
        if ( 
    lnMoney == )                            return E_FAIL;
    //#if !defined(KR_PARAM) && !defined(KRT_PARAM)
    //    if ( m_lnMoney%UINT_MAX < lnMoney )            return E_FAIL;
    //#endif
        
    if ( m_lnMoney lnMoney )                    return E_FAIL;
        if ( 
    ValidWindowOpen() )                    return E_FAIL;    

        
    D3DXVECTOR3 vDir(1,0,0);
        
    BOOL bCollision FALSE;
        
    DWORD dwCollisionID;
        
    D3DXVECTOR3 vCollisionPos(0,0,0);

        
    srand(GetTickCount());
        
    float fBaseY = (rand()%32) * (D3DX_PI*2)/32.0f;

        for ( 
    float fRotY 0.0ffRotY<D3DX_PI*2fRotY += 0.2f )
        {
            
    D3DXMATRIX matRotY;
            
    D3DXMatrixRotationY ( &matRotYfRotY+fBaseY );
            
    D3DXVec3TransformCoord ( &vDir, &vDir, &matRotY );

            
    D3DXVec3Normalize ( &vDir, &vDir );
            
    D3DXVECTOR3 vDropPos GetPosition() + vDir*float(GLCONST_CHAR::wBODYRADIUS+12);

            
    GLGaeaClient::GetInstance().GetActiveMap()->GetNaviMesh()->IsCollision
            
    (
                
    vDropPos D3DXVECTOR3(0,+5,0),
                
    vDropPos D3DXVECTOR3(0,-5,0),
                
    vCollisionPos,
                
    dwCollisionID,
                
    bCollision
            
    );
        }

        if ( !
    bCollision )
        {
            
    GLGaeaClient::GetInstance().GetActiveMap()->GetNaviMesh()->IsCollision
            
    (
                
    GetPosition() + D3DXVECTOR3(0,+5,0),
                
    GetPosition() + D3DXVECTOR3(0,-5,0),
                
    vCollisionPos,
                
    dwCollisionID,
                
    bCollision
            
    );
        }

        if ( 
    bCollision )
        {
            
    GLMSG::SNETPC_REQ_MONEY_TO_FIELD NetMsg;
            
    NetMsg.vPos vCollisionPos;
            
    NetMsg.lnMoney lnMoney;
            
    NETSENDTOFIELD ( &NetMsg );
        }

        return 
    S_OK;
    }

    //    Note : °Å·¡ÇÒ ±Ý¾× ³Ö±â.
    //HRESULT GLCharacter::ReqTradeMoney ( LONGLONG lnMoney )
    //{
    //    if ( !GLTradeClient::GetInstance().Valid () )    return E_FAIL;
    //
    //    //    Note : ¼ÒÁö ±Ý¾×ÀÌ ÃæºÐÇÑÁö °Ë»ç.
    //    //
    //    if ( lnMoney > m_lnMoney )        return E_FAIL;
    //    
    //    //    Note : ±³È¯ÇÒ ±Ý¾× ¼³Á¤ MSG.
    //    //
    //    GLMSG::SNET_TRADE_MONEY NetMsg;
    //    NetMsg.lnMoney = lnMoney;
    //    NETSENDTOFIELD(&NetMsg);
    //
    //    return S_OK;
    //}

    //    Note : °Å·¡ÇÒ ¾ÆÀÌÅÛ ³Ö±â/Á¦°Å/±³È¯.
    HRESULT GLCharacter::ReqTradeBoxTo WORD wPosXWORD wPosY )
    {
        if ( !
    GLTradeClient::GetInstance().Valid () )    return E_FAIL;

        
    SINVENITEMpTradeItem GLTradeClient::GetInstance().FindPosItem wPosXwPosY );    //    ÇöÀç À§Ä¡¿¡ Æ®·¡À̵堹°Ç°ÀÌ µî·ÏµÇ¾î ÀÖÀ½.
        
    SINVEN_POS sPreTradeItem GLTradeClient::GetInstance().GetPreItem();                    //    ¿¹ºñ µî·Ï ¾ÆÀÌÅÛÀÌ Á¸Á¦.

        //    Note : ÇØ´ç À§Ä¡¿¡ À̹̠µî·ÏµÈ ¾ÆÀÌÅÛÀÌ ÀÖ°í µî·ÏÇϰíÀÚ Çϴ ¾ÆÀÌÅÛÀÌ ÀÖÀ» °æ¿ì.
        //
        
    if ( sPreTradeItem.VALID() && pTradeItem )
        {
            
    //    µî·ÏÇϰíÀÚ Çϴ ¾ÆÀÌÅÛ.
            
    SINVENITEMpResistItem m_cInventory.GetItem sPreTradeItem.wPosXsPreTradeItem.wPosY );
            if ( !
    pResistItem )        return E_FAIL;

            
    //    À̹̠µî·ÏµÇ¾î ÀÖ´ÂÁö °Ë»ç.
            
    SINVENITEMpAlready GLTradeClient::GetInstance().FindItemBack pResistItem->wBackXpResistItem->wBackY );
            if ( 
    pAlready )
            {
                
    GLTradeClient::GetInstance().ReSetPreItem();
                return 
    E_FAIL;
            }

            
    SITEM *pItem GLItemMan::GetInstance().GetItem pResistItem->sItemCustom.sNativeID );
            if ( !
    pItem )            return E_FAIL;

            
    //    °Å·¡¿É¼Ç
            
    if ( !pResistItem->sItemCustom.IsWrap() )
            {
              if ( !
    pItem->sBasicOp.IsEXCHANGE() ) return E_FAIL;
              if ( 
    pResistItem->sItemCustom.IsNonDrop() ) return E_FAIL;
            }

            if ( 
    pItem->sBasicOp.emItemType == ITEM_PET_CARD )
            {
                
    // µé°íÀִ ¾ÆÀÌÅÛÀÌ ÆÖÄ«µåÀÌ¸ç ÆÖÀ̠Ȱ¼ºÈ­ µÇ¾î ÀÖÀ¸¸é
                
    GLPetClientpMyPet GLGaeaClient::GetInstance().GetPetClient ();
                if ( 
    pMyPet->IsVALID () && pResistItem->sItemCustom.dwPetID == pMyPet->m_dwPetID )
                {
                    return 
    E_FAIL;
                }
            }

            if ( 
    pItem->sBasicOp.emItemType == ITEM_VEHICLE && pResistItem->sItemCustom.dwVehicleID != )
            {
                return 
    E_FAIL;
            }

            
    //    Note : Á¾Àü ¾ÆÀÌÅÛ°ú »õ·Î¿î ¾ÆÀÌÅÛÀ» ±³È¯ÇÏ¿© À§Ä¡¿¡ µé¾î °¥ ¼ö ÀÖ´ÂÁö °Ë»ç.
            //
            
    BOOL bOk GLTradeClient::GetInstance().IsExInsertable pItem->sBasicOp.wInvenSizeXpItem->sBasicOp.wInvenSizeYwPosXwPosY );
            if ( !
    bOk )                return FALSE;

            
    //    Note : Á¾Àü ¾ÆÀÌÅÛÀ» ¸®½ºÆ®¿¡¼­ Á¦°Å.
            //
            
    GLMSG::SNET_TRADE_ITEM_REMOVE NetMsgReMove;
            
    NetMsgReMove.wPosX pTradeItem->wPosX;
            
    NetMsgReMove.wPosY pTradeItem->wPosY;
            
    NETSENDTOFIELD(&NetMsgReMove);

            
    //    Note : »õ·Î¿î ¾ÆÀÌÅÛÀ» ¸®½ºÆ®¿¡ µî·Ï.
            
    GLMSG::SNET_TRADE_ITEM_REGIST NetMsgRegist;
            
    NetMsgRegist.wPosX wPosX;
            
    NetMsgRegist.wPosY wPosY;
            
    NetMsgRegist.wInvenX sPreTradeItem.wPosX;
            
    NetMsgRegist.wInvenY sPreTradeItem.wPosY;
            
    NETSENDTOFIELD(&NetMsgRegist);

            
    GLTradeClient::GetInstance().ReSetPreItem();
        }
        
    //    Note : µî·ÏÇÒ ¾ÆÀÌÅÛÀÌ Àִ °æ¿ì.
        //
        
    else if ( sPreTradeItem.VALID() )
        {
            
    //    µî·ÏÇϰíÀÚ Çϴ ¾ÆÀÌÅÛ.
            
    SINVENITEMpResistItem m_cInventory.GetItem sPreTradeItem.wPosXsPreTradeItem.wPosY );
            if ( !
    pResistItem )        return E_FAIL;

            
    //    À̹̠µî·ÏµÇ¾î ÀÖ´ÂÁö °Ë»ç.
            
    SINVENITEMpAlready GLTradeClient::GetInstance().FindItemBack sPreTradeItem.wPosXsPreTradeItem.wPosY );
            if ( 
    pAlready )
            {
                
    GLTradeClient::GetInstance().ReSetPreItem();
                return 
    E_FAIL;
            }

            
    //    Note : ÇØ´çÀ§Ä¡¿¡ µé¾î °¥ ¼ö ÀÖ´ÂÁö °Ë»ç.
            //
            
    SITEM *pItem GLItemMan::GetInstance().GetItem pResistItem->sItemCustom.sNativeID );
            if ( !
    pItem )            return E_FAIL;

            
    //    °Å·¡¿É¼Ç
            
    if ( !pResistItem->sItemCustom.IsWrap() )
            {
               if ( !
    pItem->sBasicOp.IsEXCHANGE() ) return E_FAIL;
               if ( 
    pResistItem->sItemCustom.IsNonDrop()  ) return E_FAIL;
            }

            if ( 
    pItem->sBasicOp.emItemType == ITEM_PET_CARD )
            {
                
    // µé°íÀִ ¾ÆÀÌÅÛÀÌ ÆÖÄ«µåÀÌ¸ç ÆÖÀ̠Ȱ¼ºÈ­ µÇ¾î ÀÖÀ¸¸é
                
    const SITEMCUSTOMsHold GET_HOLD_ITEM();
                
    GLPetClientpMyPet GLGaeaClient::GetInstance().GetPetClient ();
                if ( 
    pMyPet->IsVALID () && pResistItem->sItemCustom.dwPetID == pMyPet->m_dwPetID )
                {
                    return 
    E_FAIL;
                }
            }

            if ( 
    pItem->sBasicOp.emItemType == ITEM_VEHICLE && pResistItem->sItemCustom.dwVehicleID != )
            {
                return 
    E_FAIL;
            }

            
    BOOL bOk GLTradeClient::GetInstance().IsInsertable pItem->sBasicOp.wInvenSizeXpItem->sBasicOp.wInvenSizeYwPosXwPosY );
            if ( !
    bOk )                return E_FAIL;

            
    //    Note : »õ·Î¿î ¾ÆÀÌÅÛÀ» ¸®½ºÆ®¿¡ µî·Ï.
            
    GLMSG::SNET_TRADE_ITEM_REGIST NetMsgRegist;
            
    NetMsgRegist.wPosX wPosX;
            
    NetMsgRegist.wPosY wPosY;
            
    NetMsgRegist.wInvenX sPreTradeItem.wPosX;
            
    NetMsgRegist.wInvenY sPreTradeItem.wPosY;
            
    NETSENDTOFIELD(&NetMsgRegist);

            
    GLTradeClient::GetInstance().ReSetPreItem();
        }
        
    //    Note : ¸®½ºÆ®¿¡¼­ »èÁ¦ÇÒ ¾ÆÀÌÅÛÀÌ Àִ°æ¿ì.
        //
        
    else if ( pTradeItem )
        {
            
    GLMSG::SNET_TRADE_ITEM_REMOVE NetMsgReMove;
            
    NetMsgReMove.wPosX pTradeItem->wPosX;
            
    NetMsgReMove.wPosY pTradeItem->wPosY;
            
    NETSENDTOFIELD(&NetMsgReMove);
        }
        
        return 
    S_OK;
    }

    //    Note : °Å·¡ ¼ö¶ô.
    HRESULT GLCharacter::ReqTradeAgree ()
    {
        if ( !
    GLTradeClient::GetInstance().Valid () )    return E_FAIL;

        if ( !
    GLTradeClient::GetInstance().IsAgreeAble() )
        {
            
    //    Note : Áö±ÝÀº °Å·¡ ½ÂÀÎÀ» ÇÒ ¼ö ¾ø½À´Ï´Ù. X`s Èľ֠´Ù½Ã ½Ãµµ ÇÏ¿© Áֽʽÿä.
            
    CInnerInterface::GetInstance().PrintMsgText NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("TRADE_AGREE_TIME") );
            return 
    E_FAIL;
        }

        
    //    Note : °Å·¡½Ã µé¾î¿Ã ¾ÆÀÌÅÛµéÀÇ °ø°£ÀÇ ¿©À¯°¡ ÀÖ´ÂÁö °Ë»ç.
        //
        
    if ( !IsVaildTradeInvenSpace () )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("TRADE_AGREE_FAIL_MYINVEN") );
            return 
    E_FAIL;
        }

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

    //    Note : °Å·¡ Ãë¼Ò.
    HRESULT GLCharacter::ReqTradeCancel ()
    {
        if ( !
    GLTradeClient::GetInstance().Valid () )    return E_FAIL;
        
        
    GLMSG::SNET_TRADE_CANCEL NetMsg;
        
    NETSENDTOFIELD(&NetMsg);

        return 
    S_OK;
    }

    //    Note : ºÎȰ À§Ä¡ ÁöÁ¤ ¿äû.
    HRESULT GLCharacter::ReqReGenGate DWORD dwNpcID )
    {
        
    GLMSG::SNETPC_REQ_REGEN_GATE NetMsg;

        
    PLANDMANCLIENT pLandMan GLGaeaClient::GetInstance().GetActiveMap ();
        
    PGLCROWCLIENT pCrow pLandMan->GetCrow dwNpcID );
        if ( !
    pCrow )                                        goto _REQ_FAIL;
        if ( 
    pCrow->GETCROW() != CROW_NPC )                    goto _REQ_FAIL;

        
    //    Note : ºÎȰÀ§Ä¡ ÁöÁ¤ ¿äû.
        //
        
    NetMsg.dwNpcID dwNpcID;
        
    NETSEND(&NetMsg);

        return 
    S_OK;

    _REQ_FAIL:
        
    CInnerInterface::GetInstance().PrintMsgText NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("EMREGEN_GATE_FAIL") );
        return 
    E_FAIL;
    }

    // *****************************************************
    // Desc: ºÎȰÇϱâ
    // *****************************************************
    void GLCharacter::ReqReBirth ()
    {
        if ( !
    IsACTION(GLAT_DIE) )            return;

        
    //    ´ë±â»óÅ¿¡ µé¾î°¨.
        
    m_dwWAIT 0;
        
    SetSTATE(EM_ACT_DIE);

        
    //    ºÎȰ ¿äû.
        
    GLMSG::SNETPC_REQ_REBIRTH NetMsg;
        
    NetMsg.bRegenEntryFailed FALSE;
        
    NetMsg.bCTFMAP FALSE;

        
    //  ºÎȰ ÁöÁ¡À¸·Î ÁøÀÔ ºÒ°¡½Ã ºÎȰ ÁöÁ¡À» ÃʱâÈ­ÇÑ´Ù.
        
    if ( m_dwUserLvl USER_GM3 )    
        {
            
    SMAPNODE *pNODE GLGaeaClient::GetInstance().FindMapNode(m_sStartMapID);
            if ( 
    pNODE )
            {
                
    EMREQFAIL emReqFail(EMREQUIRE_COMPLETE);
                
    GLLevelFile cLevelFile;
                
    BOOL bOk cLevelFile.LoadFile pNODE->strFile.c_str(), TRUENULL );
                if( 
    bOk )
                {
                    
    SLEVEL_REQUIREpRequire cLevelFile.GetLevelRequire ();
                    
    emReqFail pRequire->ISCOMPLETE this );

                    if ( 
    emReqFail != EMREQUIRE_COMPLETE )
                    {
                        
    m_sStartMapID GLCONST_CHAR::nidSTARTMAP[m_wSchool];
                        
    m_dwStartGate GLCONST_CHAR::dwSTARTGATE[m_wSchool];
                        
    m_vStartPos   D3DXVECTOR3(0.0f,0.0f,0.0f);
                        
    NetMsg.bRegenEntryFailed TRUE;
                    }
                    if ( 
    m_sStartMapID.wMainID==119 && GLGaeaClient::GetInstance().GetActiveMap()->GetMapID().wMainID != 119)
                    {
                        
    m_sStartMapID GLCONST_CHAR::nidSTARTMAP[m_wSchool];
                        
    m_dwStartGate GLCONST_CHAR::dwSTARTGATE[m_wSchool];
                        
    m_vStartPos   D3DXVECTOR3(0.0f,0.0f,0.0f);
                        
    NetMsg.bRegenEntryFailed TRUE;
                    }
                }
            }
        }


        
    PLANDMANCLIENT pLAND GLGaeaClient::GetInstance().GetActiveMap ();
        if ( 
    pLAND && ( pLAND->m_bTowerWars || pLAND->m_bRoyalRumble ))
        {
            
    NetMsg.bCTFMAP TRUE;
            
    NetMsg.sCURMAPID pLAND->GetMapID();
        }

        
    NETSEND ( &NetMsg );

        
    // ¹èƲ·Î¾â À̺¥Æ®À϶§ ¾²·¯Áö¸é Åõ¸í¸ðµå ÇØÁ¦
        
    if ( GLCONST_CHAR::bBATTLEROYAL )
        {
            
    ReSetSTATE(EM_REQ_VISIBLEOFF);

            
    //    Note : (¿¡ÀÌÁ¯Æ®¼­¹ö) ¸Þ¼¼Áö ¹ß»ý.
            //
            
    GLMSG::SNETPC_ACTSTATE NetMsg;
            
    NetMsg.dwActState m_dwActState;
            
    NETSEND ( (NET_MSG_GENERIC*) &NetMsg );
        }
    }

    // *****************************************************
    // Desc: ºÎȰÇϱâ (±ÍÈ¥ÁÖ »ç¿ë)
    // *****************************************************
    HRESULT GLCharacter::ReqReGenRevive ()
    {
        if ( !
    IsACTION(GLAT_DIE) )            return E_FAIL;
        if ( !
    ISREVIVE () )                    return E_FAIL;

        
    //    ´ë±â»óÅ¿¡ µé¾î°¨.
        
    m_dwWAIT 0;
        
    SetSTATE(EM_ACT_DIE);

        
    // ±ÍÈ¥ÁÖ »ç¿ë ¿äû
        
    GLMSG::SNETPC_REQ_REVIVE NetMsg;
        
    NETSENDTOFIELD(&NetMsg);

        return 
    S_OK;
    }

    // °æÇèÄ¡ º¹±¸¸¦ ¿äûÇÑ´Ù.
    HRESULT GLCharacter::ReqRecoveryExp ()
    {
    // °æÇèġȸº¹_Á¤ÀÇ_Normal
    #if defined( _RELEASED ) || defined ( KRT_PARAM ) || defined ( KR_PARAM ) 
        
    if ( !IsACTION(GLAT_DIE) )            return E_FAIL;

        
    //    ´ë±â»óÅ¿¡ µé¾î°¨.
        
    m_dwWAIT 0;
        
    SetSTATE(EM_ACT_DIE);

        
    // °æÇèġȸº¹ ºÎȰ ¿äû
        
    GLMSG::SNETPC_REQ_RECOVERY NetMsg;
        
    NETSENDTOFIELD(&NetMsg);
    #endif
        
        
    return S_OK;
    }

    // °æÇèÄ¡ º¹±¸¸¦ ¿äûÇÑ´Ù Npc
    HRESULT GLCharacter::ReqRecoveryExpNpc DWORD dwNpcID )
    {
    // °æÇèġȸº¹_Á¤ÀÇ_Npc
    #if defined( _RELEASED ) || defined ( KRT_PARAM ) || defined ( KR_PARAM ) || defined ( TH_PARAM ) || defined ( MYE_PARAM ) || defined ( MY_PARAM ) || defined ( PH_PARAM ) || defined ( CH_PARAM ) || defined ( TW_PARAM ) || defined ( HK_PARAM ) || defined ( GS_PARAM )
        
    GLMSG::SNETPC_REQ_RECOVERY_NPC NetMsg;
        
    NetMsg.dwNPCID dwNpcID;
        
    NETSENDTOFIELD(&NetMsg);
    #endif
        
    return S_OK;
    }


    //  Note : º¹±¸ÇÒ °æÇèÄ¡¸¦ ¹¯´Â´Ù.
    HRESULT GLCharacter::ReqGetReExp ()
    {
    // °æÇèġȸº¹_Á¤ÀÇ_Normal
    #if defined( _RELEASED ) || defined ( KRT_PARAM ) || defined ( KR_PARAM )

        
    if ( !IsACTION(GLAT_DIE) )            return E_FAIL;    

        
    // º¹±¸ÇÒ °æÇèÄ¡¸¦ ¿äû
        
    GLMSG::SNETPC_REQ_GETEXP_RECOVERY NetMsg;
        
    NETSENDTOFIELD(&NetMsg);
    #endif

        
    return S_OK;
    }

    HRESULT GLCharacter::ReqGetReExpNpc DWORD dwNpcID )
    {
    // °æÇèġȸº¹_Á¤ÀÇ_Npc
    #if defined( _RELEASED ) || defined ( KRT_PARAM ) || defined ( KR_PARAM ) || defined ( TH_PARAM ) || defined ( MYE_PARAM ) || defined ( MY_PARAM ) || defined ( PH_PARAM ) || defined ( CH_PARAM ) || defined ( TW_PARAM ) || defined ( HK_PARAM ) || defined ( GS_PARAM )
        // º¹±¸ÇÒ °æÇèÄ¡¸¦ ¿äû
        
    GLMSG::SNETPC_REQ_GETEXP_RECOVERY_NPC NetMsg;
        
    NetMsg.dwNPCID dwNpcID;
        
    NETSENDTOFIELD(&NetMsg);
    #endif

        
    return S_OK;
    }


    HRESULT GLCharacter::ReqCure DWORD dwNpcIDDWORD dwGlobalID )
    {
        
    GLMSG::SNETPC_REQ_CURE NetMsg;

        
    PLANDMANCLIENT pLandMan GLGaeaClient::GetInstance().GetActiveMap ();
        
    PGLCROWCLIENT pCrow pLandMan->GetCrow dwNpcID );

        if ( !
    pCrow )                                        goto _REQ_FAIL;
        if ( 
    pCrow->GETCROW() != CROW_NPC )                    goto _REQ_FAIL;

        
    //    Note : Ä¡·á ¿äû.
        
    NetMsg.dwNpcID dwNpcID;
        
    NetMsg.dwGlobalID dwGlobalID;
        
    NETSENDTOFIELD(&NetMsg);

        return 
    S_OK;

    _REQ_FAIL:
        
    CInnerInterface::GetInstance().PrintMsgText NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("EMREGEN_CURE_FAIL") );

        return 
    S_OK;
    }

    //    Note : Ä³¸¯ÅÍ Á¤º¸ ¸®¼Â. ( stats, skill )
    //
    HRESULT GLCharacter::ReqCharReset DWORD dwNpcID )
    {
        
    EMREGEN_CHARRESET_FB emFB EMREGEN_CHARRESET_FAIL;
        
    WORD wPosX(0), wPosY(0);
        
    GLMSG::SNETPC_REQ_CHARRESET NetMsg;

        
    PLANDMANCLIENT pLandMan GLGaeaClient::GetInstance().GetActiveMap ();
        
    PGLCROWCLIENT pCrow pLandMan->GetCrow dwNpcID );

        if ( !
    pCrow )                                        goto _REQ_FAIL;
        if ( 
    pCrow->GETCROW() != CROW_NPC )                    goto _REQ_FAIL;


        
    bool bITEM m_cInventory.GetCharResetItem wPosXwPosY );
        if ( !
    bITEM )
        {
            
    emFB EMREGEN_CHARRESET_ITEM_FAIL;
            goto 
    _REQ_FAIL;
        }

        
    //    Note : Ä³¸¯ÅÍ Á¤º¸ ¸®¼Â.
        
    NetMsg.dwNpcID dwNpcID;
        
    NETSENDTOFIELD(&NetMsg);

        return 
    S_OK;

    _REQ_FAIL:
        
        switch ( 
    emFB )
        {
        case 
    EMREGEN_CHARRESET_FAIL:
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("EMREGEN_CHARRESET_FAIL") );
            break;

        case 
    EMREGEN_CHARRESET_ITEM_FAIL:
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("EMREGEN_CHARRESET_ITEM_FAIL") );
            break;
        };

        return 
    S_OK;
    }

    //    Note : NPC¿Í itemÀ» ±³È¯ A:npc¿¡°Ô Áִ°͵é, b:npc¿¡°Ô¼­ ¹Þ´Â°Í.
    HRESULT GLCharacter::ReqItemTrade DWORD dwNpcIDDWORD dwGlobalIDDWORD *pDwA_NIDDWORD dwB_NID )
    {
        
    EMNPC_ITEM_TRADE_FB emFB EMNPC_ITEM_TRADE_FAIL;
        
    WORD wPosX(0), wPosY(0);
        
    GLMSG::SNETPC_REQ_NPC_ITEM_TRADE NetMsg;

        
    PLANDMANCLIENT pLandMan GLGaeaClient::GetInstance().GetActiveMap ();
        
    PGLCROWCLIENT pCrow pLandMan->GetCrow dwNpcID );

        if ( !
    pCrow )                                        goto _REQ_FAIL;
        if ( 
    pCrow->GETCROW() != CROW_NPC )                    goto _REQ_FAIL;

        
    // Need Add New Item Con.
        
    BOOL bOK[] = { FALSEFALSEFALSEFALSEFALSE };
        
    bOK[0] = ISHAVEITEM SNATIVEID(pDwA_NID[0]) );
        
    BYTE i;
        
    // MAX_NEEDITEM_COUNT 5
        
    for( 15i++ )
        {
            if( 
    pDwA_NID[i] == UINT_MAX )
                
    bOK[i] = TRUE;
            else
                
    bOK[i] = ISHAVEITEM SNATIVEID(pDwA_NID[i]) );    
        }

        if( 
    bOK[0] == FALSE || bOK[1] == FALSE || bOK[2] == FALSE || bOK[3] == FALSE || bOK[4] == FALSE )
        {
            
    emFB EMNPC_ITEM_TRADE_ITEM_FAIL;
            goto 
    _REQ_FAIL;
        }

        
    //    Note : ¾ÆÀÌÅÛ ±³È¯ ¿äû.
        //
        
    NetMsg.dwNpcID    dwNpcID;
        
    // MAX_NEEDITEM_COUNT 5
        
    for( 05i++ )
        {
            
    NetMsg.dwA_NID[i]    = pDwA_NID[i];
        }
        
    NetMsg.dwB_NID    dwB_NID;
        
    NetMsg.dwGlobalID dwGlobalID;
        
    NETSENDTOFIELD(&NetMsg);

        return 
    S_OK;

    _REQ_FAIL:
        switch ( 
    emFB )
        {
        case 
    EMNPC_ITEM_TRADE_FAIL:
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("EMNPC_ITEM_TRADE_FAIL") );
            break;

        case 
    EMNPC_ITEM_TRADE_ITEM_FAIL:
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("EMNPC_ITEM_TRADE_ITEM_FAIL") );
            break;
        };

        return 
    S_OK;
    }

    // *****************************************************
    // Desc: Ä£±¸¿¡°Ô À̵¿(Ä£±¸À̵¿Ä«µå)
    // *****************************************************
    HRESULT    GLCharacter::Req2Friend ( const char *szNAME )
    {
        
    SFRIENDpFRIEND GLFriendClient::GetInstance().GetFriend szNAME );
        if ( !
    pFRIEND )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("EM2FRIEND_FB_FAIL") );
            return 
    S_FALSE;
        }

        
    PLANDMANCLIENT pLAND GLGaeaClient::GetInstance().GetActiveMap();
        if ( 
    pLAND->m_bTowerWars )
        {
            
    CInnerInterface::GetInstance().PrintMsgText NS_UITEXTCOLOR::DISABLE"Disable" );
            return 
    E_FAIL;
        }
        
    SINVENITEM *pINVENITEM m_cInventory.FindItem ITEM_2FRIEND );
        if ( !
    pINVENITEM )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("EM2FRIEND_FB_NO_ITEM") );
            return 
    S_FALSE;
        }

        
    //    Note : Ä£±¸¿¡°Ô °¡±â ¿äû.
        
    GLMSG::SNETPC_2_FRIEND_REQ NetMsg;
        
    StringCchCopy NetMsg.szFRIEND_NAMECHAR_SZNAMEpFRIEND->szCharName );
        
    NetMsg.wItemPosX pINVENITEM->wPosX;
        
    NetMsg.wItemPosY pINVENITEM->wPosY;
        
    NETSEND ( &NetMsg);

        return 
    S_OK;
    }

    bool GLCharacter::IsInvenSplitItem WORD wPosXWORD wPosYbool bVietnamInven )
    {
        
    SINVENITEMpInvenItem NULL;
        if( 
    bVietnamInven )
        {
            
    pInvenItem m_cVietnamInventory.FindPosItem wPosXwPosY );
        }else{
            
    pInvenItem m_cInventory.FindPosItem wPosXwPosY );
        }
        if ( !
    pInvenItem )    return false;

        
    //    Note : ¾ÆÀÌÅÛ Á¤º¸ °¡Á®¿À±â.
        
    SITEMpItem GLItemMan::GetInstance().GetItem pInvenItem->sItemCustom.sNativeID );
        
    GASSERT(pItem&&"¾ÆÀÌÅÆ ´ëÀÌÅͰ¡ Á¸Á¦ÇÏÁö ¾ÊÀ½");

        
    bool bSPLIT(false);
        
    bSPLIT = ( pItem->ISINSTANCE() );
        if ( !
    bSPLIT )                    return FALSE;
        
    bSPLIT = ( pInvenItem->sItemCustom.wTurnNum>);

        return 
    bSPLIT;
    }

    bool GLCharacter::IsStorageSplitItem DWORD dwChannelWORD wPosXWORD wPosY )
    {
        
    GASSERT(EMSTORAGE_CHANNEL>dwChannel);
        if ( 
    EMSTORAGE_CHANNEL<=dwChannel )    return false;

        
    SINVENITEMpInvenItem m_cStorage[dwChannel].FindPosItem wPosXwPosY );
        if ( !
    pInvenItem )    return false;

        
    //    Note : ¾ÆÀÌÅÛ Á¤º¸ °¡Á®¿À±â.
        
    SITEMpItem GLItemMan::GetInstance().GetItem pInvenItem->sItemCustom.sNativeID );
        
    GASSERT(pItem&&"¾ÆÀÌÅÆ ´ëÀÌÅͰ¡ Á¸Á¦ÇÏÁö ¾ÊÀ½");

        
    bool bSPLIT(false);
        
    bSPLIT = ( pItem->ISPILE() );
        if ( !
    bSPLIT )                    return FALSE;
        
    bSPLIT = ( pInvenItem->sItemCustom.wTurnNum>);

        return 
    bSPLIT;
    }

    //    Note : Àκ¥Å丮 - °ãħ ¾ÆÀÌÅÛ ºÐ¸®.
    HRESULT GLCharacter::ReqInvenSplit WORD wPosXWORD wPosYWORD wSplitNum )
    {
        if ( !
    IsInvenSplitItem(wPosX,wPosY) )    return E_FAIL;
        
        
    SINVENITEMpInvenItem m_cInventory.FindPosItem wPosXwPosY );
        if ( !
    pInvenItem )                                    return E_FAIL;

        if ( 
    pInvenItem->sItemCustom.wTurnNum <= wSplitNum )
        {
            return 
    E_FAIL;
        }

        
    //    Note : ¾ÆÀÌÅÛ ºÐ¸® ¸Þ½ÃÁö Àü¼Û.
        
    GLMSG::SNETPC_REQ_INVEN_SPLIT NetMsg;
        
    NetMsg.wPosX wPosX;
        
    NetMsg.wPosY wPosY;
        
    NetMsg.wSplit wSplitNum;
        
    NETSENDTOFIELD(&NetMsg);

        return 
    S_OK;
    }

    // *****************************************************
    // Desc: Ã¢°í - °ãħ ¾ÆÀÌÅÛ ºÐ¸®.
    // *****************************************************
    HRESULT GLCharacter::ReqStorageSplit DWORD dwChannelWORD wPosXWORD wPosYWORD wSplitNum )
    {
        if ( !
    IsStorageSplitItem(dwChannel,wPosX,wPosY) )    return E_FAIL;

        
    SINVENITEMpInvenItem m_cStorage[dwChannel].FindPosItem wPosXwPosY );
        if ( !
    pInvenItem )    return false;
        
        if ( 
    pInvenItem->sItemCustom.wTurnNum <= wSplitNum )
        {
            return 
    E_FAIL;
        }

        
    //    Note : ¾ÆÀÌÅÛ ºÐ¸® ¸Þ½ÃÁö Àü¼Û.
        
    GLMSG::SNETPC_REQ_STORAGE_SPLIT NetMsg;
        
    NetMsg.dwChannel dwChannel;
        
    NetMsg.dwNPCID m_dwNPCID;
        
    NetMsg.wPosX wPosX;
        
    NetMsg.wPosY wPosY;
        
    NetMsg.wSplit wSplitNum;
        
    NETSENDTOFIELD(&NetMsg);

        return 
    S_OK;
    }

    //    Note : ´ë·Ã ¿äû.
    //
    HRESULT GLCharacter::ReqConflict DWORD dwID, const SCONFT_OPTION &sOption )
    {
        if ( !
    IsValidBody() )                    return E_FAIL;

        
    PGLCHARCLIENT pChar GLGaeaClient::GetInstance().GetChar dwID );
        if ( !
    pChar )
        {
            
    CInnerInterface::GetInstance().PrintMsgText NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("EMCONFRONT_FAIL") );
            return 
    E_FAIL;
        }

        
    PLANDMANCLIENT pLAND GLGaeaClient::GetInstance().GetActiveMap();
        if ( 
    pLAND->m_bTowerWars )
        {
            
    CInnerInterface::GetInstance().PrintMsgText NS_UITEXTCOLOR::DISABLE"Disable" );
            return 
    E_FAIL;
        }
        if ( 
    GLGaeaClient::GetInstance().GetActiveMap()->IsPeaceZone() )
        {
            
    //    Note : ÆòÈ­ Áö¿ª¿¡¼­´Â ´ë·ÃÀÌ ºÒ°¡´ÉÇÕ´Ï´Ù.
            
    CInnerInterface::GetInstance().PrintMsgText NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("EMCONFRONT_PEACE") );
            return 
    E_FAIL;
        }

        if ( !
    sOption.VALID_OPT() )    
        {
            
    CInnerInterface::GetInstance().PrintMsgText NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("EMCONFRONT_OPTION") );
            return 
    E_FAIL;
        }

        if ( 
    m_sCONFTING.IsCONFRONTING() )
        {
            
    //    Note : À̹̠´ë·ÃÁßÀÌ¿©¼­ ´ë·Ã ½ÅûÀÌ ºÒ°¡´ÉÇÕ´Ï´Ù.
            
    CInnerInterface::GetInstance().PrintMsgText NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("EMCONFRONT_ALREADY_ME") );
            return 
    E_FAIL;
        }

        
    GLPARTY_CLIENTpParty GLPartyClient::GetInstance().FindMember dwID );
        if ( 
    pParty )
        {
            
    //    Note : °°Àº ¼Ò¼ÓÀÇ ÆÄƼ¿øÀÌ¿©¼­ ´ë·Ã ºÒ°¡´ÉÇÕ´Ï´Ù.
            
    CInnerInterface::GetInstance().PrintMsgText NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("EMCONFRONT_PARTY") );
            return 
    E_FAIL;
        }

        
    //    Note : Å¬·´ ´ë·ÃÀÏ °æ¿ì.
        
    if ( IsClubMaster() && pChar->IsClubMaster() )
        {
            
    GLMSG::SNETPC_REQ_CONFRONT NetMsg;
            
    NetMsg.emTYPE EMCONFT_GUILD;
            
    NetMsg.dwID dwID;
            
    NetMsg.sOption sOption;
            
    NETSEND(&NetMsg);
        }
        
    //    Note : ÆÄƼ ´ë·ÃÀÏ °æ¿ì.
        
    else 
        if ( 
    IsPartyMaster() && pChar->IsPartyMaster() )
        {
            
    GLMSG::SNETPC_REQ_CONFRONT NetMsg;
            
    NetMsg.emTYPE EMCONFT_PARTY;
            
    NetMsg.dwID dwID;
            
    NetMsg.sOption sOption;
            
    NETSEND(&NetMsg);
        }
        
    //    Note : °³ÀΠ´ë·ÃÀÏ °æ¿ì.
        
    else
        {
            if ( 
    IsPartyMem() )
            {
                
    //    Note : ÆÄƼÀ常 'ÆÄƼ´ë·Ã'À» ½ÅûÇÒ ¼ö ÀÖ½À´Ï´Ù.
                
    CInnerInterface::GetInstance().PrintMsgText NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("EMCONFRONT_MENOTMASTER") );
                return 
    E_FAIL;
            }

            
    GLMSG::SNETPC_REQ_CONFRONT NetMsg;
            
    NetMsg.emTYPE EMCONFT_ONE;
            
    NetMsg.dwID dwID;
            
    NetMsg.sOption sOption;
            
    NETSEND(&NetMsg);
        }

        return 
    S_OK;
    }

    void GLCharacter::ReqSkillReaction STARGETID sTID )
    {
        if ( 
    IsACTION(GLAT_SKILL) || IsACTION(GLAT_ATTACK) )    return;

        
    BOOL bMove(FALSE);
        
    D3DXVECTOR3 vMoveTo;

        
    m_sActiveSkill m_sRunSkill;

        
    PGLSKILL pRunSkill GLSkillMan::GetInstance().GetData m_sActiveSkill );
        if ( !
    pRunSkill )                                        return;
        if ( 
    pRunSkill->m_sBASIC.emIMPACT_SIDE == SIDE_ENERMY )    return;

        
    SetDefenseSkillfalse );

        
    GLCOPYpCOPY GLGaeaClient::GetInstance().GetCopyActor(sTID);
        if ( !
    pCOPY )    return;

        
    sTID.vPos pCOPY->GetPosition();
        
    SkillReaction sTIDDXKEY_UPfalsebMovevMoveTo );

        
    //    Note : Reaction ¿¡¼­ À̵¿À» ¿äûÇÑ °æ¿ì.
        //
        
    if ( bMove )
        {
            
    ActionMoveTo 0.0fvMoveTo+D3DXVECTOR3(0,+5,0), vMoveTo+D3DXVECTOR3(0,-5,0), FALSETRUE );
        }
    }

    HRESULT GLCharacter::ReqQuestStart DWORD dwNpcIDDWORD dwTalkIDDWORD dwQUESTID )
    {
        
    //    Note : Äù½ºÆ® ½ÃÀÛÀ» À§ÇÑ °Ë»ç.
        //
        
    GLQUESTpQUEST GLQuestMan::GetInstance().Find dwQUESTID );
        if ( !
    pQUEST )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("EMQUEST_START_FB_FAIL") );
            return 
    S_FALSE;
        }

        
    //    À̹̠ÁøÇàÁßÀΠÄù½ºÆ® ÀÎÁö Á¡°Ë.
        
    GLQUESTPROGpQUEST_PROG m_cQuestPlay.FindProc dwQUESTID );
        if ( 
    pQUEST_PROG )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("EMQUEST_START_FB_ALREADY") );
            return 
    S_FALSE;
        }

        
    //    À̹̠¿Ï·áÇÑ Äù½ºÆ®ÀÎÁö °Ë»ç.
        
    GLQUESTPROGpQUEST_END m_cQuestPlay.FindEnd dwQUESTID );
        if ( 
    pQUEST_END )
        {
            if ( !
    pQUEST_END->m_bCOMPLETE )
            {
                
    //    Æ÷±â(½ÇÆÐ)ÇÑ Äù½ºÆ®¸¦ ´Ù½Ã ½Ãµµ ºÒ°¡´ÉÇÑ °æ¿ì.
                
    if ( !pQUEST->IsAGAIN() )
                {
                    
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("EMQUEST_START_FB_DONAGAIN") );
                    return 
    S_FALSE;
                }
            }
            else
            {
                
    //    ¿©·¯¹ø ½Ãµµ °¡´ÉÇÑÁö °Ë»ç.
                
    if ( !pQUEST->IsREPEAT() )
                {
                    
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("EMQUEST_START_FB_DONREPEAT") );
                    return 
    S_FALSE;
                }
            }
        }

        if ( 
    m_lnMoney pQUEST->m_dwBeginMoney )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("EMQUEST_START_FB_NEEDMONEY") );
            return 
    S_FALSE;
        }

        
    //pQUEST->m_dwBeginPartyMemNum;

        //    Note : quest ½ÃÀÛ ¼­¹ö¿¡ ¿äû.
        //
        
    GLMSG::SNETPC_REQ_QUEST_START NetMsg;
        
    NetMsg.dwNpcID dwNpcID;
        
    NetMsg.dwTalkID dwTalkID;
        
    NetMsg.dwQuestID dwQUESTID;

        
    NETSENDTOFIELD ( &NetMsg );

        return 
    S_OK;
    }

    HRESULT GLCharacter::ReqQuestStepNpcTalk DWORD dwNpcIDDWORD dwTalkIDDWORD dwQUESTIDDWORD dwQUESTSTEP )
    {
        
    //    Note : Äù½ºÆ® ÁøÇàÀ» À§ÇÑ °Ë»ç.
        //
        
    GLQUESTpQUEST GLQuestMan::GetInstance().Find dwQUESTID );
        if ( !
    pQUEST )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("EMQUEST_START_FB_FAIL") );
            return 
    S_FALSE;
        }

        
    //    ÁøÇàÁßÀΠÄù½ºÆ® ÀÎÁö Á¡°Ë.
        
    GLQUESTPROGpQUEST_PROG m_cQuestPlay.FindProc dwQUESTID );
        if ( !
    pQUEST_PROG )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("EMQUEST_START_FB_ALREADY") );
            return 
    S_FALSE;
        }

        
    //    Note : quest ÁøÇà ¼­¹ö¿¡ ¿äû.
        //
        
    GLMSG::SNET_QUEST_STEP_NPC_TALK NetMsg;
        
    NetMsg.dwNpcID dwNpcID;
        
    NetMsg.dwTalkID dwTalkID;
        
    NetMsg.dwQUESTID dwQUESTID;

        
    NETSENDTOFIELD ( &NetMsg );

        return 
    S_OK;
    }

    HRESULT GLCharacter::ReqQuestGiveUp DWORD dwQUESTID )
    {
        
    //    Note : Äù½ºÆ® ÁøÇàÀ» À§ÇÑ °Ë»ç.
        //
        
    GLQUESTpQUEST GLQuestMan::GetInstance().Find dwQUESTID );
        if ( !
    pQUEST )            return S_FALSE;

        
    //    ÁøÇàÁßÀΠÄù½ºÆ® ÀÎÁö Á¡°Ë.
        
    GLQUESTPROGpQUEST_PROG m_cQuestPlay.FindProc dwQUESTID );
        if ( !
    pQUEST_PROG )        return S_FALSE;

        if ( !
    pQUEST->IsGIVEUP() )        return S_FALSE;

        
    //    Note : quest ÁøÇà ¼­¹ö¿¡ ¿äû.
        //
        
    GLMSG::SNET_QUEST_PROG_GIVEUP NetMsg;
        
    NetMsg.dwQUESTID dwQUESTID;

        
    NETSENDTOFIELD ( &NetMsg );

        return 
    S_OK;
    }

    HRESULT GLCharacter::ReqQuestREADINGReset DWORD dwQUESTID )
    {
        
    //    Note : Äù½ºÆ® ÁøÇàÀ» À§ÇÑ °Ë»ç.
        //
        
    GLQUESTpQUEST GLQuestMan::GetInstance().Find dwQUESTID );
        if ( !
    pQUEST )            return S_FALSE;

        
    //    ÁøÇàÁßÀΠÄù½ºÆ® ÀÎÁö Á¡°Ë.
        
    GLQUESTPROGpQUEST_PROG m_cQuestPlay.FindProc dwQUESTID );
        if ( !
    pQUEST_PROG )        return S_FALSE;

        if ( !
    pQUEST_PROG->IsReqREADING() )        return S_FALSE;
        
    pQUEST_PROG->ResetReqREADING ();

        
    //    Note : quest ÀоúÀ½À» ¼­¹ö¿¡ ¾Ë¸².
        //
        
    GLMSG::SNETPC_QUEST_PROG_READ NetMsg;
        
    NetMsg.dwQID dwQUESTID;

        
    NETSENDTOFIELD ( &NetMsg );

        return 
    S_OK;
    }

    HRESULT GLCharacter::ReqQuestComplete DWORD dwQUESTID )
    {
        
    //    Note : Äù½ºÆ® ÁøÇàÀ» À§ÇÑ °Ë»ç.
        //
        
    GLQUESTpQUEST GLQuestMan::GetInstance().Find dwQUESTID );
        if ( !
    pQUEST )            return S_FALSE;

        
    //    ÁøÇàÁßÀΠÄù½ºÆ® ÀÎÁö Á¡°Ë.
        
    GLQUESTPROGpQUEST_PROG m_cQuestPlay.FindProc dwQUESTID );
        if ( !
    pQUEST_PROG )        return S_FALSE;

        if ( !
    pQUEST_PROG->CheckCOMPLETE() )        return S_FALSE;

        
    //    Note : quest ¿Ï·á ¿äû.
        //
        
    GLMSG::SNETPC_REQ_QUEST_COMPLETE NetMsg;
        
    NetMsg.dwQID dwQUESTID;

        
    NETSENDTOFIELD ( &NetMsg );

        return 
    S_OK;
    }

    HRESULT GLCharacter::ReqBusStation DWORD dwNpcIDDWORD dwSTATION )
    {
        
    PLANDMANCLIENT pLandMan GLGaeaClient::GetInstance().GetActiveMap ();
        
    PGLCROWCLIENT pCrow pLandMan->GetCrow dwNpcID );

        if ( !
    pCrow )                                        return S_OK;
        if ( 
    pCrow->GETCROW() != CROW_NPC )                    return S_OK;

        
    //    Note : Á¤·ùÀå id°¡ Á¤È®ÇÑÁö °Ë»ç.
        //
        
    SSTATIONpSTATION GLBusStation::GetInstance().GetStation dwSTATION );
        if ( !
    pSTATION )                                    return S_OK;

        
    SMAPNODE *pNODE GLGaeaClient::GetInstance().FindMapNode(SNATIVEID(pSTATION->dwMAPID));
        if ( !
    pNODE )                                        return S_OK;
        
        
    //    Note : pk µî±ÞÀÌ »ìÀÎÀÚ µî±Þ ÀÌ»óÀÏ °æ¿ì ¹ö½º »ç¿ëÀ» ¸·´Â´Ù.
        //
        //DWORD dwPK_LEVEL = GET_PK_LEVEL();
        //if ( dwPK_LEVEL != UINT_MAX && dwPK_LEVEL>GLCONST_CHAR::dwPK_RECALL_ENABLE_LEVEL )
        //{
        //    CInnerInterface::GetInstance().PrintMsgText ( NS_UITEXTCOLOR::DISABLE, ID2GAMEINTEXT("EMBUS_TAKE_PK_LEVEL") );
        //    return E_FAIL;
        //}

        
    EMREQFAIL emReqFail(EMREQUIRE_COMPLETE);

        
    GLLevelFile cLevelFile;
        
    BOOL bOk cLevelFile.LoadFile pNODE->strFile.c_str(), TRUENULL );
        if ( !
    bOk )                                            return S_OK;

        
    SLEVEL_REQUIREpRequire cLevelFile.GetLevelRequire ();
        
    emReqFail pRequire->ISCOMPLETE this );
        if ( 
    emReqFail != EMREQUIRE_COMPLETE )
        {
            
    CInnerInterface &cINTERFACE CInnerInterface::GetInstance();
            switch ( 
    emReqFail )
            {
            case 
    EMREQUIRE_LEVEL:
                {
                    if( 
    pRequire->m_signLevel == EMSIGN_FROMTO )
                    {
                        
    cINTERFACE.PrintMsgTextDlgNS_UITEXTCOLOR::DISABLE
                            
    ID2GAMEINTEXT("EMREQUIRE_LEVEL2"),
                            
    pRequire->m_wLevel,
                            
    pRequire->m_wLevel2 );
                    }else{
                        
    std::string strSIGN ID2GAMEINTEXT(COMMENT::CDT_SIGN_ID[pRequire->m_signLevel].c_str());

                        if( 
    RANPARAM::emSERVICE_TYPE == EMSERVICE_THAILAND )
                        {
                            
    cINTERFACE.PrintMsgTextDlgNS_UITEXTCOLOR::DISABLE
                                
    ID2GAMEINTEXT("EMREQUIRE_LEVEL"),
                                
    strSIGN.c_str(),
                                
    pRequire->m_wLevel );
                        }
                        else
                        {
                            
    cINTERFACE.PrintMsgTextDlgNS_UITEXTCOLOR::DISABLE
                                
    ID2GAMEINTEXT("EMREQUIRE_LEVEL"),
                                
    pRequire->m_wLevel,
                                
    strSIGN.c_str() );
                        }
                    }
                }
                break;

            case 
    EMREQUIRE_ITEM:
                {
                    
    SITEM *pItem GLItemMan::GetInstance().GetItem pRequire->m_sItemID );
                    if ( 
    pItem )
                    {
                        
    cINTERFACE.PrintMsgTextDlg
                        
    (
                            
    NS_UITEXTCOLOR::DISABLE,
                            
    ID2GAMEINTEXT("EMREQUIRE_ITEM"),
                            
    pItem->GetName()
                        );
                    }
                }
                break;

            case 
    EMREQUIRE_SKILL:
                {
                    
    PGLSKILL pSkill GLSkillMan::GetInstance().GetData pRequire->m_sSkillID );
                    if ( 
    pSkill )
                    {
                        
    cINTERFACE.PrintMsgTextDlg
                        
    (
                            
    NS_UITEXTCOLOR::DISABLE,
                            
    ID2GAMEINTEXT("EMREQUIRE_SKILL"),
                            
    pSkill->GetName()
                        );
                    }
                }
                break;

            case 
    EMREQUIRE_LIVING:
                {
                    
    std::string strSIGN ID2GAMEINTEXT(COMMENT::CDT_SIGN_ID[pRequire->m_signLiving].c_str());
                    
    cINTERFACE.PrintMsgTextDlg
                    
    (
                        
    NS_UITEXTCOLOR::DISABLE,
                        
    ID2GAMEINTEXT("EMREQUIRE_PREMIUM"),
                        
    pRequire->m_nLiving,
                        
    strSIGN.c_str() // 2
                    
    );
                }
                break;

            case 
    EMREQUIRE_BRIGHT:
                {
                    
    std::string strSIGN ID2GAMEINTEXT(COMMENT::CDT_SIGN_ID[pRequire->m_signBright].c_str());
                    
    cINTERFACE.PrintMsgTextDlg
                    
    (
                        
    NS_UITEXTCOLOR::DISABLE,
                        
    ID2GAMEINTEXT("EMREQUIRE_REBORN"),
                        
    pRequire->m_nBright,
                        
    strSIGN.c_str()
                    );
                }
                break;

            case 
    EMREQUIRE_QUEST_COM:
                {
                    
    CString strQUEST "quest";
                    
    GLQUEST *pQUEST GLQuestMan::GetInstance().Find pRequire->m_sComQuestID.dwID );
                    if ( 
    pQUEST )        strQUEST pQUEST->GetTITLE();

                    
    cINTERFACE.PrintMsgTextDlg NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("EMREQUIRE_QUEST_COM"), strQUEST.GetString() );
                }
                break;

            case 
    EMREQUIRE_QUEST_ACT:
                {
                    
    CString strQUEST "quest";
                    
    GLQUEST *pQUEST GLQuestMan::GetInstance().Find pRequire->m_sComQuestID.dwID );
                    if ( 
    pQUEST )        strQUEST pQUEST->GetTITLE();

                    
    cINTERFACE.PrintMsgTextDlg NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("EMREQUIRE_QUEST_ACT"), strQUEST.GetString() );
                }
                break;

            default:
                
    cINTERFACE.PrintMsgTextDlg NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("MAP_REQUIRE_FAIL") );
                break;
            };

            
    //    Note : Ãⱸ »ç¿ë ±ÇÇÑÀÌ ¾ÈµÉ °æ¿ì. GM level ÀÌ»óÀÏ °æ¿ì Á¶°Ç ¹«½Ã.
            //
            
    if ( m_dwUserLvl USER_GM3 )    return S_OK;
        }

        
    //    Note : ¹ö½º Æ¼ÄÏÀÌ ÀÖ´ÂÁö °Ë»ç.
        //
        
    SINVENITEMpITEM_TICKET m_cInventory.FindItem ITEM_TICKET );
        if ( !
    pITEM_TICKET )
        {
            
    CInnerInterface::GetInstance().PrintMsgText NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("EMBUS_TAKE_TICKET") );
            return 
    S_OK;
        }

        
    //    Note : ¹ö½º ½ÂÂ÷.
        //
        
    GLMSG::SNETPC_REQ_BUS NetMsg;
        
    NetMsg.wPosX pITEM_TICKET->wPosX;
        
    NetMsg.wPosY pITEM_TICKET->wPosY;
        
    NetMsg.dwNPC_ID dwNpcID;
        
    NetMsg.dwSTATION_ID dwSTATION;
        
    NETSENDTOFIELD ( &NetMsg );

        return 
    S_OK;
    }

        
    //    Note : Åýà½ÂÂ÷ ¿äû.
    HRESULT GLCharacter::ReqTaxiStation WORD wPosXWORD wPosYint nSelectMapint nSelectStop )
    {
        
    //    Note : Á¤·ùÀå id°¡ Á¤È®ÇÑÁö °Ë»ç.
        //
        
    STAXI_MAPpTaxiMap GLTaxiStation::GetInstance().GetTaxiMap nSelectMap );
        if ( !
    pTaxiMap )
        {
            
    CInnerInterface::GetInstance().PrintMsgText NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("EMTAXI_TAKE_MAPFAIL") );
            return 
    S_OK;
        }

        
    STAXI_STATIONpStation pTaxiMap->GetStationnSelectStop );
        if ( !
    pStation )
        {
            
    CInnerInterface::GetInstance().PrintMsgText NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("EMTAXI_TAKE_STATIONFAIL") );
            return 
    S_OK;
        }

        
    SMAPNODE *pNODE GLGaeaClient::GetInstance().FindMapNode(SNATIVEID(pStation->dwMAPID));
        if ( !
    pNODE )
        {
            
    CInnerInterface::GetInstance().PrintMsgText NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("EMTAXI_TAKE_MAPFAIL") );
            return 
    S_OK;
        }

        
    EMREQFAIL emReqFail(EMREQUIRE_COMPLETE);

        
    GLLevelFile cLevelFile;
        
    BOOL bOk cLevelFile.LoadFile pNODE->strFile.c_str(), TRUENULL );
        if ( !
    bOk )                                            return S_OK;

        
    SLEVEL_REQUIREpRequire cLevelFile.GetLevelRequire ();
        
    emReqFail pRequire->ISCOMPLETE this );
        if ( 
    emReqFail != EMREQUIRE_COMPLETE )
        {
            
    CInnerInterface &cINTERFACE CInnerInterface::GetInstance();
            switch ( 
    emReqFail )
            {
            case 
    EMREQUIRE_LEVEL:
                {
                    if( 
    pRequire->m_signLevel == EMSIGN_FROMTO )
                    {
                        
    cINTERFACE.PrintMsgTextDlgNS_UITEXTCOLOR::DISABLE
                            
    ID2GAMEINTEXT("EMREQUIRE_LEVEL2"),
                            
    pRequire->m_wLevel,
                            
    pRequire->m_wLevel2 );
                    }else{
                        
    std::string strSIGN ID2GAMEINTEXT(COMMENT::CDT_SIGN_ID[pRequire->m_signLevel].c_str());

                        if( 
    RANPARAM::emSERVICE_TYPE == EMSERVICE_THAILAND )
                        {
                            
    cINTERFACE.PrintMsgTextDlgNS_UITEXTCOLOR::DISABLE
                                
    ID2GAMEINTEXT("EMREQUIRE_LEVEL"),
                                
    strSIGN.c_str(),
                                
    pRequire->m_wLevel );
                        }
                        else
                        {
                            
    cINTERFACE.PrintMsgTextDlgNS_UITEXTCOLOR::DISABLE
                                
    ID2GAMEINTEXT("EMREQUIRE_LEVEL"),
                                
    pRequire->m_wLevel,
                                
    strSIGN.c_str() );
                        }
                    }
                }
                break;

            case 
    EMREQUIRE_ITEM:
                {
                    
    SITEM *pItem GLItemMan::GetInstance().GetItem pRequire->m_sItemID );
                    if ( 
    pItem )
                    {
                        
    cINTERFACE.PrintMsgTextDlg
                        
    (
                            
    NS_UITEXTCOLOR::DISABLE,
                            
    ID2GAMEINTEXT("EMREQUIRE_ITEM"),
                            
    pItem->GetName()
                        );
                    }
                }
                break;

            case 
    EMREQUIRE_SKILL:
                {
                    
    PGLSKILL pSkill GLSkillMan::GetInstance().GetData pRequire->m_sSkillID );
                    if ( 
    pSkill )
                    {
                        
    cINTERFACE.PrintMsgTextDlg
                        
    (
                            
    NS_UITEXTCOLOR::DISABLE,
                            
    ID2GAMEINTEXT("EMREQUIRE_SKILL"),
                            
    pSkill->GetName()
                        );
                    }
                }
                break;

            case 
    EMREQUIRE_LIVING:
                {
                    
    std::string strSIGN ID2GAMEINTEXT(COMMENT::CDT_SIGN_ID[pRequire->m_signLiving].c_str());
                    
    cINTERFACE.PrintMsgTextDlg
                    
    (
                        
    NS_UITEXTCOLOR::DISABLE,
                        
    ID2GAMEINTEXT("EMREQUIRE_PREMIUM"),
                        
    pRequire->m_nLiving,
                        
    strSIGN.c_str() // 3
                    
    );
                }
                break;

            case 
    EMREQUIRE_BRIGHT:
                {
                    
    std::string strSIGN ID2GAMEINTEXT(COMMENT::CDT_SIGN_ID[pRequire->m_signBright].c_str());
                    
    cINTERFACE.PrintMsgTextDlg
                    
    (
                        
    NS_UITEXTCOLOR::DISABLE,
                        
    ID2GAMEINTEXT("EMREQUIRE_REBORN"),
                        
    pRequire->m_nBright,
                        
    strSIGN.c_str()
                    );
                }
                break;

            case 
    EMREQUIRE_QUEST_COM:
                {
                    
    CString strQUEST "quest";
                    
    GLQUEST *pQUEST GLQuestMan::GetInstance().Find pRequire->m_sComQuestID.dwID );
                    if ( 
    pQUEST )        strQUEST pQUEST->GetTITLE();

                    
    cINTERFACE.PrintMsgTextDlg NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("EMREQUIRE_QUEST_COM"), strQUEST.GetString() );
                }
                break;

            case 
    EMREQUIRE_QUEST_ACT:
                {
                    
    CString strQUEST "quest";
                    
    GLQUEST *pQUEST GLQuestMan::GetInstance().Find pRequire->m_sComQuestID.dwID );
                    if ( 
    pQUEST )        strQUEST pQUEST->GetTITLE();

                    
    cINTERFACE.PrintMsgTextDlg NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("EMREQUIRE_QUEST_ACT"), strQUEST.GetString() );
                }
                break;

            default:
                
    cINTERFACE.PrintMsgTextDlg NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("MAP_REQUIRE_FAIL") );
                break;
            };

            
    //    Note : Ãⱸ »ç¿ë ±ÇÇÑÀÌ ¾ÈµÉ °æ¿ì. GM level ÀÌ»óÀÏ °æ¿ì Á¶°Ç ¹«½Ã.
            //
            
    if ( m_dwUserLvl USER_GM3 )    return S_OK;
        }

        
    //    Note : Åýàīµå°¡ ÀÖ´ÂÁö °Ë»ç.
        //
        
    SINVENITEMpInvenItem m_cInventory.FindPosItem wPosXwPosY );
        if ( !
    pInvenItem )    return E_FAIL;

        
    wPosX pInvenItem->wPosX;
        
    wPosY pInvenItem->wPosY;

        
    SITEMpItem GLItemMan::GetInstance().GetItem pInvenItem->sItemCustom.sNativeID );
        if ( !
    pItem || pItem->sBasicOp.emItemType != ITEM_TAXI_CARD )
        {
            
    CInnerInterface::GetInstance().PrintMsgText NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("EMTAXI_TAKE_TICKET") );
            return 
    E_FAIL;
        }

        
    LONGLONG lnCharge GetCalcTaxiChargenSelectMapnSelectStop );

        if ( 
    m_lnMoney lnCharge )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("EMTAXI_TAKE_MONEY") );
            return 
    S_FALSE;
        }

        
    //    Note : ¹ö½º ½ÂÂ÷.
        //
        
    GLMSG::SNETPC_REQ_TAXI NetMsg;
        
    NetMsg.wPosX wPosX;
        
    NetMsg.wPosY wPosY;
        
    NetMsg.dwSelectMap nSelectMap;
        
    NetMsg.dwSelectStop nSelectStop;
        
    NetMsg.dwGaeaID m_dwGaeaID;
        
    NETSEND ( &NetMsg );

        return 
    S_OK;
    }

    HRESULT GLCharacter::ReqLoudSpeaker ( const charszChatSITEMLINKpItemLink )
    {
        
    WORD wPosX(0), wPosY(0);

        if ( 
    m_dwUserLvl USER_GM3 )
        {
            
    SINVENITEMpINVENITEM m_cInventory.FindItem ITEM_LOUDSPEAKER );
            if ( !
    pINVENITEM )
            {
                
    //    Note : È®¼º±â ¾ÆÀÌÅÛÀÌ Á¸Á¦ÇÏÁö ¾Ê½À´Ï´Ù.
                
    CInnerInterface::GetInstance().PrintMsgText NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("EMCHAT_LOUDSPEAKER_NOITEM") );
                return 
    S_OK;
            }

            if ( 
    m_sPMarket.IsOpen() ) 
            {
                
    DWORD wTurn m_cInventory.CountTurnItempINVENITEM->sItemCustom.sNativeID );
                
    DWORD wMarketTurn m_sPMarket.GetItemTurnNumpINVENITEM->sItemCustom.sNativeID ) ;

                if ( 
    wTurn <= wMarketTurn 
                {
                    
    //    Note : È®¼º±â ¾ÆÀÌÅÛÀÌ Á¸Á¦ÇÏÁö ¾Ê½À´Ï´Ù.
                    
    CInnerInterface::GetInstance().PrintMsgText NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("EMCHAT_LOUDSPEAKER_NOITEM") );
                    return 
    S_OK;
                }
            }

            
    wPosX pINVENITEM->wPosX;
            
    wPosY pINVENITEM->wPosY;
        }

        
    //    Note : È®¼º±â »ç¿ë ¿äû.
        //
        
    GLMSG::SNETPC_CHAT_LOUDSPEAKER NetMsg;
        
    NetMsg.wPosX wPosX;
        
    NetMsg.wPosY wPosY;
        if ( 
    pItemLink )
            
    NetMsg.sITEMLINK = *pItemLink;
        
    StringCchCopy NetMsg.szMSGCHAT_MSG_SIZE+1szChat );
        
    NETSENDTOFIELD ( &NetMsg );

        return 
    S_OK;
    }

    HRESULT GLCharacter::ReqPMarketTitle ( const charszTitle )
    {
        if ( 
    m_sPMarket.IsOpen() )    return S_FALSE;

        
    //    Note : ÃʱâÈ­¸¦ ÇàÇÑ´Ù.
        
    m_sPMarket.DoMarketClose();

        
    //    Note : Å¸ÀÌÆ² ÁöÁ¤ ¿äû.
        //
        
    GLMSG::SNETPC_PMARKET_TITLE NetMsg;
        
    StringCchCopy NetMsg.szPMarketTitleCHAT_MSG_SIZE+1szTitle );
        
    NETSENDTOFIELD ( &NetMsg );

        return 
    S_OK;
    }

    HRESULT GLCharacter::ReqPMarketRegItem WORD wPosXWORD wPosYLONGLONG dwMoneyDWORD dwNum // Vend Price Max Increased | 07-27-2013 |  
    {
        if ( 
    m_sPMarket.IsOpen() )    return S_FALSE;

        
    SINVENITEM *pINVENITEM m_cInventory.GetItem wPosXwPosY );
        if ( !
    pINVENITEM )            return S_FALSE;

        
    //    Note : µî·ÏÇÒ ¼ö Àִ Çѵµ¸¦ ³Ñ¾î¼­°í ÀÖ½À´Ï´Ù.
        
    if ( m_sPMarket.GetItemNum() >= GLPrivateMarket::EMMAX_SALE_NUM )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("EMPMARKET_REGITEM_FB_MAXNUM") );
            return 
    S_FALSE;
        }

        
    SNATIVEID nidITEM pINVENITEM->sItemCustom.sNativeID;

        
    SITEM *pITEM GLItemMan::GetInstance().GetItem nidITEM );
        if ( !
    pITEM )                return S_FALSE;

        
    //    °Å·¡¿É¼Ç
        
    if ( !pINVENITEM->sItemCustom.IsWrap() )
        {
        if ( !
    pITEM->sBasicOp.IsEXCHANGE() )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg 
                
    NS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("EMPMARKET_REGITEM_FB_NOSALE") );
            return 
    S_FALSE;
        }
        if ( 
    pINVENITEM->sItemCustom.IsNonDrop()  )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg 
                
    NS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("EMPMARKET_REGITEM_FB_NOSALE") );
            return 
    S_FALSE;
        }
        }

        
    // ÆÖÄ«µåÀ̸鼭 ÆÖÀ̠Ȱ¼ºÈ­ µÇ¾î ÀÖÀ¸¸é »óÁ¡¿¡ µî·ÏÇÒ ¼ö ¾ø´Ù.
        
    if ( pITEM->sBasicOp.emItemType == ITEM_PET_CARD )
        {
            
    // µé°íÀִ ¾ÆÀÌÅÛÀÌ ÆÖÄ«µåÀÌ¸ç ÆÖÀ̠Ȱ¼ºÈ­ µÇ¾î ÀÖÀ¸¸é
            
    GLPetClientpMyPet GLGaeaClient::GetInstance().GetPetClient ();
            if ( 
    pMyPet->IsVALID () && pINVENITEM->sItemCustom.dwPetID == pMyPet->m_dwPetID )
            {
                return 
    E_FAIL;
            }
        }

        if ( 
    pITEM->sBasicOp.emItemType == ITEM_VEHICLE && pINVENITEM->sItemCustom.dwVehicleID != )
        {
            return 
    E_FAIL;
        }

        
    //    Note : À̹̠µî·ÏµÈ ¾ÆÀÌÅÛÀÎÁö °Ë»ç.
        
    bool bREGPOS m_sPMarket.IsRegInvenPos SNATIVEID(wPosX,wPosY) );
        if ( 
    bREGPOS )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("EMPMARKET_REGITEM_FB_REGITEM") );
            return 
    S_FALSE;
        }

        
    //    Note : °ãħ °¡´ÉÀÏ °æ¿ì µ¿ÀÏÇÑ Á¾·ùÀÇ ¾ÆÀÌÅÛÀÌ À̹̠µî·ÏµÇ¾î ÀÖ´ÂÁö °Ë»ç.
        
    if ( pITEM->ISPILE() )
        {
            
    bool bREG m_sPMarket.IsRegItem nidITEM );
            if ( 
    bREG )
            {
                
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("EMPMARKET_REGITEM_FB_REGITEM") );
                return 
    S_FALSE;
            }

            
    //    Note : ¼ÒÁöÇϰí Àִ °³¼ö ¸¹Å­ ÆÇ¸Å °¡´É.
            
    DWORD dwTURN m_cInventory.CountTurnItem nidITEM );
            if ( 
    dwNum >= dwTURN )
            {
                
    dwNum dwTURN;
            }
        }

        if ( !
    pITEM->ISPILE() )
        {
            
    dwNum 1;
        }
        
        
    SNATIVEID sSALEPOS;
        
    bool bPOS m_sPMarket.FindInsertPos nidITEMsSALEPOS );
        if ( !
    bPOS )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("EMPMARKET_REGITEM_FB_MAXNUM") );
            return 
    S_FALSE;
        }

        
    GLMSG::SNETPC_PMARKET_REGITEM NetMsg;
        
    NetMsg.wPosX wPosX;
        
    NetMsg.wPosY wPosY;
        
    NetMsg.dwMoney dwMoney;
        
    NetMsg.dwNum dwNum;
        
    NETSENDTOFIELD ( &NetMsg );

        return 
    S_OK;
    }

    HRESULT GLCharacter::ReqPMarketDisItem WORD wPosXWORD wPosY )
    {
        if ( 
    m_sPMarket.IsOpen() )    return S_FALSE;

        
    SNATIVEID sSALEPOS(wPosX,wPosY);
        const 
    SSALEITEMpSALEITEM m_sPMarket.GetItem sSALEPOS );
        if ( !
    pSALEITEM )        return S_FALSE;

        
    GLMSG::SNETPC_PMARKET_DISITEM NetMsg;
        
    NetMsg.sSALEPOS sSALEPOS;
        
    NETSENDTOFIELD ( &NetMsg );

        return 
    S_OK;
    }

    HRESULT GLCharacter::ReqPMarketOpen ()
    {
        if ( 
    m_sPMarket.IsOpen() )        return S_FALSE;

        
    //    Note : ÆÇ¸Å¿ëÀ¸·Î µî·ÏÇÑ ¾ÆÀÌÅÛÀÌ 
        
    if ( m_sPMarket.GetItemNum() == )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("EMPMARKET_OPEN_FB_EMPTY") );
            return 
    S_FALSE;
        }

        if ( 
    m_wPMPosX==USHRT_MAX )        return S_FALSE;
        if ( 
    m_wPMPosY==USHRT_MAX )        return S_FALSE;

        
    //    Note : °³ÀλóÁ¡ °³¼³ ¿äû.
        
    GLMSG::SNETPC_PMARKET_OPEN NetMsg;
        
    NetMsg.wPosX m_wPMPosX;
        
    NetMsg.wPosY m_wPMPosY;
        
    NETSENDTOFIELD ( &NetMsg );

        
    m_wPMPosX = (USHRT_MAX);
        
    m_wPMPosY = (USHRT_MAX);

        return 
    S_OK;
    }

    HRESULT GLCharacter::ReqPMarketClose ()
    {
        if ( !
    m_sPMarket.IsOpen() )        return S_FALSE;

        
    m_sPMarket.DoMarketClose();

        
    GLMSG::SNETPC_PMARKET_CLOSE NetMsg;
        
    NETSENDTOFIELD ( &NetMsg );

        return 
    S_OK;
    }

    HRESULT GLCharacter::ReqPMarketInfo DWORD dwGaeaID )
    {
        
    PGLCHARCLIENT pCLIENT GLGaeaClient::GetInstance().GetChar dwGaeaID );
        if ( !
    pCLIENT )                    return S_FALSE;

        
    bool bOPEN pCLIENT->m_sPMarket.IsOpen();
        if ( !
    bOPEN )
        {
            return 
    S_FALSE;
        }

        
    //    Note : Á¤º¸ Àü¼Û ¿äûÀü Á¾Àü Á¤º¸´Â ¸®¼Â.
        
    pCLIENT->m_sPMarket.DoMarketInfoRelease();

        
    //    Note : Á¤º¸ Àü¼Û ¿äû.
        
    GLMSG::SNETPC_PMARKET_ITEM_INFO NetMsg;
        
    NetMsg.dwGaeaID dwGaeaID;
        
    NETSENDTOFIELD ( &NetMsg );

        return 
    S_OK;
    }

    HRESULT GLCharacter::ReqPMarketInfoRelease DWORD dwGaeaID )
    {
        
    PGLCHARCLIENT pCLIENT GLGaeaClient::GetInstance().GetChar dwGaeaID );
        if ( !
    pCLIENT )                    return S_FALSE;

        
    pCLIENT->m_sPMarket.DoMarketInfoRelease();

        
    // ´Ù¸¥»ç¶÷ °³ÀλóÁ¡À» ´ÝÀ¸¸é Àӽà¼ö½ÅµÈ ÆÖÄ«µå Á¤º¸µµ Á¦°ÅÇØÁØ´Ù.
        
    m_mapPETCardInfoTemp.clear();
        
    m_mapVEHICLEItemInfoTemp.clear();

        return 
    S_OK;
    }

    HRESULT GLCharacter::ReqPMarketBuy DWORD dwGaeaIDWORD wPosXWORD wPosYDWORD dwNum )
    {
        
    PGLCHARCLIENT pCLIENT GLGaeaClient::GetInstance().GetChar dwGaeaID );
        if ( !
    pCLIENT )                    return S_FALSE;

        
    SNATIVEID sSALEPOS(wPosX,wPosY);

        const 
    SSALEITEMpSALEITEM pCLIENT->m_sPMarket.GetItem sSALEPOS );
        if ( !
    pSALEITEM )                return S_FALSE;

        
    SITEM *pITEM GLItemMan::GetInstance().GetItem pSALEITEM->sITEMCUSTOM.sNativeID );
        if ( !
    pITEM )                    return S_FALSE;

        if ( 
    pSALEITEM->bSOLD )
        {
            
    CInnerInterface::GetInstance().PrintMsgText NS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("EMPMARKET_BUY_FB_SOLD") );
            return 
    S_FALSE;
        }

        if ( !
    pITEM->ISPILE() )
        {
            
    dwNum 1;
        }

        if ( 
    pSALEITEM->dwNUMBER dwNum )
        {
            
    CInnerInterface::GetInstance().PrintMsgText NS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("EMPMARKET_BUY_FB_NUM") );
            return 
    S_FALSE;
        }

        if ( 
    m_lnMoney < (dwNum*pSALEITEM->llPRICE) )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("EMPMARKET_BUY_FB_LOWMONEY") );
            return 
    S_FALSE;
        }

        
    WORD wINVENX pITEM->sBasicOp.wInvenSizeX;
        
    WORD wINVENY pITEM->sBasicOp.wInvenSizeY;

        
    BOOL bITEM_SPACE(FALSE);
        if ( 
    pITEM->ISPILE() )
        {
            
    WORD wPILENUM pITEM->sDrugOp.wPileNum;
            
    SNATIVEID sNID pITEM->sBasicOp.sNativeID;
            
    WORD wREQINSRTNUM = (WORDdwNum;

            
    bITEM_SPACE m_cInventory.ValidPileInsrt wREQINSRTNUMsNIDwPILENUMwINVENXwINVENY );
        }
        else
        {
            
    WORD wPosX(0), wPosY(0);
            
    bITEM_SPACE m_cInventory.FindInsrtable wINVENXwINVENYwPosXwPosY );
        }

        if ( !
    bITEM_SPACE )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("EMPMARKET_BUY_FB_NOINVEN") );
            return 
    E_FAIL;
        }

        
    GLMSG::SNETPC_PMARKET_BUY NetMsg;
        
    NetMsg.dwGaeaID dwGaeaID;
        
    NetMsg.dwNum dwNum;
        
    NetMsg.sSALEPOS sSALEPOS;
        
    NETSENDTOFIELD ( &NetMsg );

        return 
    S_OK;
    }

    HRESULT GLCharacter::ReqClubNew DWORD dwNpcID, const charszClubName )
    {
        if  ( 
    szClubName==NULL )    return S_FALSE;

        if ( 
    m_dwGuild!=CLUB_NULL )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("EMCLUB_NEW_FB_ALREADY") );
            return 
    S_FALSE;
        }

        if ( !
    GLPartyClient::GetInstance().GetMaster() )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("EMCLUB_NEW_FB_NOTMASTER") );
            return 
    S_FALSE;
        }

        if ( 
    GLPartyClient::GetInstance().GetMemberNum() < GLCONST_CHAR::dwCLUB_PARTYNUM )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("EMCLUB_NEW_FB_NOTMEMBER"), GLCONST_CHAR::dwCLUB_PARTYNUM );
            return 
    S_FALSE;
        }

        if ( !
    szClubName || (strlen(szClubName) == 0) )
        {
            
    CInnerInterface::GetInstance().PrintMsgText NS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("EMCLUB_NEW_FB_FAIL") );
            return 
    S_FALSE;
        }

        if ( 
    m_wLevel GLCONST_CHAR::sCLUBRANK[0].m_dwMasterLvl )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("EMCLUB_NEW_FB_MASTER_LVL"), GLCONST_CHAR::sCLUBRANK[0].m_dwMasterLvl );
            return 
    S_FALSE;
        }

        if ( 
    m_nLiving int GLCONST_CHAR::sCLUBRANK[0].m_dwLivingPoint ) )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("EMCLUB_NEW_FB_AVER_LIVING"), GLCONST_CHAR::sCLUBRANK[0].m_dwLivingPoint );
            return 
    S_FALSE;
        }

        if ( 
    m_lnMoney GLCONST_CHAR::sCLUBRANK[0].m_dwPay )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("EMCLUB_NEW_FB_NOTMONEY"), GLCONST_CHAR::sCLUBRANK[0].m_dwPay );
            return 
    S_FALSE;
        }


        
    CString strTEMPszClubName ); 

    #ifdef TH_PARAM
        // Å±¹¾î ¹®ÀÚ Á¶Çՠüũ

        
    if ( !m_pCheckString ) return S_FALSE;

        if ( !
    m_pCheckString(strTEMP) )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlgNS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("EMCLUB_NEW_FB_THAICHAR_ERROR"));
            return 
    S_FALSE;
        }
    #endif

    #ifdef VN_PARAM
        // º£Æ®³² ¹®ÀÚ Á¶Çՠüũ 
        
    if( STRUTIL::CheckVietnamStringstrTEMP ) )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlgNS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("EMCLUB_NEW_FB_VNCHAR_ERROR"));
            return 
    S_FALSE;
        }

    #endif 

        
    BOOL bFILTER0 STRUTIL::CheckStringstrTEMP );;
        
    BOOL bFILTER1 CRanFilter::GetInstance().NameFilter szClubName );
        if( 
    bFILTER0 || bFILTER1 || ( strTEMP != szClubName ) )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlgNS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("EMCLUB_NEW_FB_BADNAME"), szClubName );
            return 
    S_FALSE;
        }

        
    GLMSG::SNET_CLUB_NEW NetMsg;
        
    NetMsg.dwNpcID dwNpcID;
        
    StringCchCopy NetMsg.szClubNameCHAR_SZNAMEszClubName );
        
    NETSENDTOFIELD(&NetMsg);

        return 
    S_OK;
    }

    HRESULT GLCharacter::ReqClubRank DWORD dwNpcID )
    {
        if ( 
    m_dwGuild==CLUB_NULL )
        {
            return 
    S_FALSE;
        }

        if ( !
    m_sCLUB.IsMaster(m_dwCharID) )
        {
            return 
    S_FALSE;
        }

        if ( 
    m_sCLUB.m_dwRank >= (GLCONST_CHAR::dwMAX_CLUBRANK-1) )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("EMCLUB_RANK_FB_MAX") );
            return 
    S_FALSE;
        }

        
    DWORD dwRANK m_sCLUB.m_dwRank 1;

        if ( 
    m_wLevel GLCONST_CHAR::sCLUBRANK[dwRANK].m_dwMasterLvl )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("EMCLUB_RANK_FB_MASTER_LVL"), GLCONST_CHAR::sCLUBRANK[dwRANK].m_dwMasterLvl );
            return 
    S_FALSE;
        }

        if ( 
    m_nLiving int GLCONST_CHAR::sCLUBRANK[dwRANK].m_dwLivingPoint ) )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("EMCLUB_RANK_FB_AVER_LIVING"), GLCONST_CHAR::sCLUBRANK[dwRANK].m_dwLivingPoint );
            return 
    S_FALSE;
        }

        if ( 
    m_lnMoney GLCONST_CHAR::sCLUBRANK[dwRANK].m_dwPay )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("EMCLUB_RANK_FB_NOTMONEY"), GLCONST_CHAR::sCLUBRANK[dwRANK].m_dwPay );
            return 
    S_FALSE;
        }

        
    GLMSG::SNET_CLUB_RANK NetMsg;
        
    NetMsg.dwNpcID dwNpcID;
        
    NETSENDTOFIELD(&NetMsg);

        return 
    S_OK;
    }

    HRESULT GLCharacter::ReqClubDissolution ()
    {
        if ( 
    m_dwGuild==CLUB_NULL )
        {
            return 
    S_FALSE;
        }

        if ( !
    m_sCLUB.IsMaster(m_dwCharID) )
        {
            return 
    S_FALSE;
        }

        if ( 
    m_sCLUB.IsAlliance() )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("EMCLUB_DIS_FB_ALLIANCE") );
            return 
    S_FALSE;
        }

        if ( 
    m_sCLUB.GetAllBattleNum() > )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("EMCLUB_DIS_FB_CLUBBATTLE") );
            return 
    S_FALSE;
        }

        
    GLMSG::SNET_CLUB_DISSOLUTION NetMsg;
        
    NETSEND(&NetMsg);

        return 
    S_OK;
    }

    HRESULT GLCharacter::ReqClubDissolutionCancel ()
    {
        if ( 
    m_dwGuild==CLUB_NULL )
        {
            return 
    S_FALSE;
        }

        if ( !
    m_sCLUB.IsMaster(m_dwCharID) )
        {
            return 
    S_FALSE;
        }

        
    GLMSG::SNET_CLUB_DISSOLUTION NetMsg;
        
    NetMsg.bCANCEL true;
        
    NETSEND(&NetMsg);

        return 
    S_OK;
    }

    HRESULT GLCharacter::ReqClubJoin DWORD dwGaeaID )
    {
        if ( 
    m_dwGuild==CLUB_NULL )
        {
            return 
    S_FALSE;
        }

        if ( !
    m_sCLUB.IsMemberFlgJoin(m_dwCharID) )
        {
            return 
    S_FALSE;
        }

        if ( 
    m_sCLUB.GetAllBattleNum() > )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("EMCLUB_MEMBER_REQ_FB_CLUBBATTLE") );
            return 
    S_FALSE;
        }

        
    GLMSG::SNET_CLUB_MEMBER_REQ NetMsg;
        
    NetMsg.dwGaeaID dwGaeaID;
        
    NETSENDTOFIELD(&NetMsg);

        return 
    S_OK;
    }

    HRESULT GLCharacter::ReqClubJoinAns DWORD dwMasterbool bOK )
    {
        
    GLMSG::SNET_CLUB_MEMBER_REQ_ANS NetMsg;
        
    NetMsg.dwMaster dwMaster;
        
    NetMsg.bOK bOK;
        
    NETSENDTOFIELD(&NetMsg);
        
        return 
    S_OK;
    }

    HRESULT GLCharacter::ReqClubMemberDel DWORD dwMember )
    {
        if ( 
    m_dwGuild==CLUB_NULL )
        {
            return 
    S_FALSE;
        }

        if ( !
    m_sCLUB.IsMemberFlgKick(m_dwCharID) )
        {
            return 
    S_FALSE;
        }

        if ( 
    m_sCLUB.m_dwMasterID==dwMember )
        {
            return 
    S_FALSE;
        }

        
    GLMSG::SNET_CLUB_MEMBER_DEL NetMsg;
        
    NetMsg.dwMember dwMember;
        
    NETSEND(&NetMsg);
        
        return 
    S_OK;
    }

        
    //    Note : Å¬·´ ¸¶½ºÅÍ ±ÇÇÑ À§ÀÓ
    HRESULT GLCharacter::ReqClubAuthority DWORD dwMember )
    {
        if ( 
    m_dwGuild==CLUB_NULL )    return S_FALSE;
        if ( !
    m_sCLUB.IsMasterm_dwCharID ) )    return S_FALSE;
        if ( 
    m_sCLUB.m_dwMasterID==dwMember )    return S_FALSE;

        
    //    Å¬·´¿ø È®ÀÎ
        
    GLCLUBMEMBERpMember m_sCLUB.GetMemberdwMember );
        if ( !
    pMember )    return S_FALSE;

        
    //    Á¢¼Ó ¿©ºÎ È®ÀÎ
        
    if ( !pMember->bONLINE 
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("EMCLUB_AUTHORITY_REQ_FB_NOONLINE") );
            return 
    S_FALSE;
        }

        
    //    µ¿¸Í ¿©ºÎ
        
    if ( m_sCLUB.IsAlliance() )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("EMCLUB_AUTHORITY_REQ_FB_ALLIANCE") );
            return 
    S_FALSE;
        }

        
    //    Å¬·´¹èƲ ¿©ºÎ
        
    if ( m_sCLUB.GetAllBattleNum() > )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("EMCLUB_AUTHORITY_REQ_FB_CLUBBATTLE") );
            return 
    S_FALSE;
        }

        
    //    ´ë·Ã ¿©ºÎ
        
    if ( m_sCONFTING.emTYPE != EMCONFT_NONE )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("EMCLUB_AUTHORITY_REQ_FB_CONFING") );
            return 
    S_FALSE;
        }

        
    GLMSG::SNET_CLUB_AUTHORITY_REQ NetMsg;
        
    NetMsg.dwMember dwMember;
        
    NETSEND(&NetMsg);

        return 
    S_OK;
    }

    //    Note : Å¬·´ ¸¶½ºÅÍ ±ÇÇÑ À§ÀÓ ´äº¯
    HRESULT GLCharacter::ReqClubAuthorityAns bool bOK )
    {
        
    GLMSG::SNET_CLUB_AUTHORITY_REQ_ANS NetMsgAns;
        
    NetMsgAns.bOK bOK;
        
    NETSEND(&NetMsgAns);

        return 
    S_OK;
    }

    HRESULT GLCharacter::ReqClubMarkInfo DWORD dwClubIDDWORD dwMarkVer )
    {
        if ( 
    dwMarkVer==)                    return S_FALSE;

        
    //    Note : Å¬¶óÀÌ¾ðÆ® ¹öÀü°ú ºñ±³.
        //
        
    DWORD dwServerID GLGaeaClient::GetInstance().GetCharacter()->m_dwServerID;
        
    bool bVALID DxClubMan::GetInstance().IsValidData dwServerIDdwClubIDdwMarkVer );
        if ( 
    bVALID )                        return S_FALSE;

        
    //    Note : Å¬·´ ¸¶Å© °»½Å ¿äû.
        
    GLMSG::SNET_CLUB_MARK_INFO NetMsgInfo;
        
    NetMsgInfo.dwClubID dwClubID;
        
    NETSEND(&NetMsgInfo);

        return 
    S_OK;
    }

    HRESULT GLCharacter::ReqClubMarkChange ( const charszFileName )
    {
        if ( !
    szFileName )    return E_FAIL;

        
    // Note : ÆÄÀÏ¿¡¼­ Àоî¿À±â.
        
    LPDWORD pMarkColor(NULL);
        
    BOOL bOK DxClubMan::GetInstance().LoadClubMark szFileNamepMarkColor );
        if ( !
    bOK )
        {
            
    CInnerInterface::GetInstance().PrintConsoleTextDlg ID2GAMEINTEXT("CLUB_LOADMARK_FAIL"), szFileName );
            return 
    E_FAIL;
        }

        
    //    Note : Å¬·´ ¸¶Å© °»½Å ¿äû.
        
    GLMSG::SNET_CLUB_MARK_CHANGE NetMsgChange;
        
    memcpy NetMsgChange.aryMarkpMarkColorsizeof(DWORD)*EMCLUB_MARK_SX*EMCLUB_MARK_SY);
        
    NETSEND(&NetMsgChange);

        return 
    S_OK;
    }

    HRESULT GLCharacter::ReqClubNick ( const charszNickName )
    {
        if ( !
    szNickName )                    return S_FALSE;
        
    //if ( strlen(szNickName)==0 )        return S_FALSE;


        
    CString strTEMP szNickName;

    #ifdef TH_PARAM
        // Å±¹¾î ¹®ÀÚ Á¶Çՠüũ

        
    if ( !m_pCheckString ) return S_FALSE;

        if ( !
    m_pCheckString(strTEMP) )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlgNS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("EMCLUB_MEMBER_NICK_FB_THAICHAR_ERROR"));
            return 
    S_FALSE;
        }
    #endif

    #ifdef VN_PARAM
        // º£Æ®³² ¹®ÀÚ Á¶Çՠüũ 
        
    if( STRUTIL::CheckVietnamStringstrTEMP ) )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlgNS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("EMCLUB_MEMBER_NICK_FB_VNCHAR_ERROR"));
            return 
    S_FALSE;
        }

    #endif 
        
        
    BOOL bFILTER0 STRUTIL::CheckStringstrTEMP );
        
    BOOL bFILTER1 CRanFilter::GetInstance().NameFilter szNickName );
        if ( 
    bFILTER0 || bFILTER1 )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("EMCLUB_MEMBER_NICK_FB_BADNAME") );
            return 
    S_FALSE;
        }

        
    //    Note : Å¬·´ ¸â¹ö º°¸í.
        
    GLMSG::SNET_CLUB_MEMBER_NICK NetMsg;
        
    StringCchCopy NetMsg.szNickCHAR_SZNAMEszNickName );
        
    NETSEND(&NetMsg);

        return 
    S_OK;
    }

    HRESULT GLCharacter::ReqClubSecede ()
    {
        if ( 
    m_dwGuild==CLUB_NULL )
        {
            return 
    S_FALSE;
        }

        
    //    Note : Å¬·´ÀåÀº Å»Å𸦠ÇÒ¼ö ¾ø´Ù.
        
    if ( m_sCLUB.IsMaster(m_dwCharID) )
        {
            return 
    S_FALSE;
        }

        
    GLMSG::SNET_CLUB_MEMBER_SECEDE NetMsg;
        
    NETSEND(&NetMsg);
        
        return 
    S_OK;
    }

    HRESULT GLCharacter::ReqCDCertify (DWORD dwNpcID )
    {
        if ( 
    m_dwGuild==CLUB_NULL )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("EMCDCERTIFY_NOTMASTER") );
            return 
    S_FALSE;
        }

        if ( !
    m_sCLUB.IsMemberFlgCDCertify(m_dwCharID) )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("EMCDCERTIFY_NOTMASTER") );
            return 
    S_FALSE;
        }

        
    PLANDMANCLIENT pLand GLGaeaClient::GetInstance().GetActiveMap();
        if ( !
    pLand )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("EMCDCERTIFY_FAIL") );
            return 
    S_FALSE;
        }

        
    PGLCROWCLIENT pCROW pLand->GetCrow(dwNpcID);
        if ( !
    pCROW )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("EMCDCERTIFY_FAIL") );
            return 
    S_FALSE;
        }

        
    GLMSG::SNET_CLUB_CD_CERTIFY NetMsg;
        
    NetMsg.dwNpcID dwNpcID;
        
    NETSENDTOFIELD(&NetMsg);

        return 
    S_OK;
    }
    HRESULT GLCharacter::ReqDetectAP BOOL bDetectDWORD dwCharID )
    {

        
    GLMSG::SNET_AP_DT NetMsg;
        
    NetMsg.bDetect bDetect;
        
    NetMsg.dwCharID dwCharID;
        
    NETSENDTOFIELD(&NetMsg);

        return 
    S_OK;
    }
    HRESULT GLCharacter::ReqDetectWPE BOOL bDetectDWORD dwCharID )
    {
      if ( 
    m_dwCharID!=dwCharID ) return S_FALSE;
      if ( !
    bDetect )  return S_FALSE;
      if  ( 
    bDetect m_bDisconnect TRUE;

      return 
    S_OK;
    }
    HRESULT GLCharacter::ReqGuidCommission DWORD dwNPCIDfloat fRATE )
    {
        if ( 
    m_dwGuild==CLUB_NULL )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("EMGUIDCOMMISSION_FB_NOTCLUB") );
            return 
    S_FALSE;
        }

        if ( !
    m_sCLUB.IsMaster(m_dwCharID) )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("EMGUIDCOMMISSION_FB_NOTCLUB") );
            return 
    S_FALSE;
        }

        
    PLANDMANCLIENT pLand GLGaeaClient::GetInstance().GetActiveMap();
        if ( !
    pLand )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("EMGUIDCOMMISSION_FB_FAIL") );
            return 
    S_FALSE;
        }

        
    PGLCROWCLIENT pCROW pLand->GetCrow(dwNPCID);
        if ( !
    pCROW )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("EMGUIDCOMMISSION_FB_FAIL") );
            return 
    S_FALSE;
        }

        if ( 
    fRATE )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("EMGUIDCOMMISSION_FB_RANGE") );
            return 
    S_FALSE;
        }

        if ( 
    fRATE GLCONST_CHAR::fMAX_COMMISSION )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("EMGUIDCOMMISSION_FB_RANGE") );
            return 
    S_FALSE;
        }

        
    GLMSG::SNET_CLUB_GUID_COMMISSION NetMsg;
        
    NetMsg.fCommission fRATE;
        
    NETSEND(&NetMsg);

        return 
    S_OK;
    }

    //    Note : Å¬·´ °øÁö.
    HRESULT GLCharacter::ReqClubNotice ( const charszClubNotice )
    {
        if ( 
    m_dwGuild==CLUB_NULL )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("EMCLUB_NOTICE_FB_FAIL") );
            return 
    S_FALSE;
        }

        if ( !
    m_sCLUB.IsMemberFlgNotice(m_dwCharID) )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("EMCLUB_NOTICE_FB_NOTMATER") );
            return 
    S_FALSE;
        }

        
    GLMSG::SNET_CLUB_NOTICE_REQ NetMsg;
        
    StringCchCopy NetMsg.szNoticeEMCLUB_NOTICE_LEN+1szClubNotice );
        
    NETSEND(&NetMsg);

        return 
    S_OK;
    }

    //    Note : Å¬·´ ºÎ¸¶ ¼³Á¤.
    HRESULT GLCharacter::ReqClubSubMaster DWORD dwCharIDDWORD dwClubFlag )
    {
        if ( 
    m_dwGuild==CLUB_NULL )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("EMCLUBSUBMASTER_FB_FAIL") );
            return 
    S_FALSE;
        }

        if ( !
    m_sCLUB.IsMaster(m_dwCharID) )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("EMCLUBSUBMASTER_FB_NOTMASTER") );
            return 
    S_FALSE;
        }

        
    GLMSG::SNET_CLUB_SUBMASTER NetMsg;
        
    NetMsg.dwCharID dwCharID;
        
    NetMsg.dwFlags dwClubFlag;
        
    NETSEND(&NetMsg);

        return 
    S_OK;
    }

    //    Note : Å¬·´ ¿¬ÇÕ ¿äû.
    HRESULT GLCharacter::ReqClubAlliance DWORD dwGaeaID )
    {
        
    PGLCHARCLIENT pCHAR_REQ GLGaeaClient::GetInstance().GetChar dwGaeaID );
        if ( !
    pCHAR_REQ )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("EMCLUB_ALLIANCE_REQ_FB_FAIL") );
            return 
    S_FALSE;
        }

        
    DWORD dwCharID pCHAR_REQ->GetCharData().dwCharID;

        if ( 
    m_dwGuild==CLUB_NULL )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("EMCLUB_ALLIANCE_REQ_FB_NOTMASTER") );
            return 
    S_FALSE;
        }

        if ( !
    m_sCLUB.IsMaster(m_dwCharID) )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("EMCLUB_ALLIANCE_REQ_FB_NOTMASTER") );
            return 
    S_FALSE;
        }

        if ( !
    pCHAR_REQ->IsClubMaster() )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("EMCLUB_ALLIANCE_REQ_FB_TARNOTMASTER") );
            return 
    S_FALSE;
        }

        if ( 
    m_sCLUB.IsAlliance() && !m_sCLUB.IsChief() )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("EMCLUB_ALLIANCE_REQ_FB_NOTCHIEF") );
            return 
    S_FALSE;
        }

        if ( 
    m_sCLUB.IsRegDissolution() )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("EMCLUB_ALLIANCE_REQ_FB_DISSOLUTION") );
            return 
    S_FALSE;
        }    

        if ( 
    m_sCLUB.GetAllBattleNum() > 0  )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("EMCLUB_ALLIANCE_REQ_FB_CLUBBATTLE") );
            return 
    S_FALSE;
        }    
        
        
    GLMSG::SNET_CLUB_ALLIANCE_REQ NetMsg;
        
    NetMsg.dwCharID dwCharID;
        
    NETSEND(&NetMsg);

        return 
    S_OK;
    }

    //    Note : Å¬·´ µ¿¸Í ¿äû ´äº¯.
    HRESULT GLCharacter::ReqClubAllianceAns DWORD dwChiefCharIDbool bOK )
    {
        
    GLMSG::SNET_CLUB_ALLIANCE_REQ_ANS NetMsgAns;
        
    NetMsgAns.dwChiefCharID dwChiefCharID;
        
    NetMsgAns.bOK bOK;
        
    NETSEND(&NetMsgAns);

        return 
    S_OK;
    }

    //    Note : Å¬·´ µ¿¸Í Å»Åð ¿äû.
    HRESULT GLCharacter::ReqClubAllianceSec ()
    {
        if ( 
    m_dwGuild==CLUB_NULL )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("EMCLUB_ALLIANCE_SEC_FB_NOTMASTER") );
            return 
    S_FALSE;
        }

        if ( !
    m_sCLUB.IsMaster(m_dwCharID) )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("EMCLUB_ALLIANCE_SEC_FB_NOTMASTER") );
            return 
    S_FALSE;
        }

        if ( !
    m_sCLUB.IsAlliance() )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("EMCLUB_ALLIANCE_SEC_FB_ALLIANCE") );
            return 
    S_FALSE;
        }

        if ( 
    m_sCLUB.IsChief() )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("EMCLUB_ALLIANCE_SEC_FB_FAIL") );
            return 
    S_FALSE;
        }

        if ( 
    m_sCLUB.GetAllBattleNum() > )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("EMCLUB_ALLIANCE_SEC_FB_BATTLE") );
            return 
    S_FALSE;        
        }

        
    GLMSG::SNET_CLUB_ALLIANCE_SEC_REQ NetMsg;
        
    NETSEND(&NetMsg);

        return 
    S_OK;
    }

    //    Note : Å¬·´ µ¿¸Í Á¦¸í ¿äû.
    HRESULT GLCharacter::ReqClubAllianceDel DWORD dwClubID )
    {
        if ( 
    m_dwGuild==CLUB_NULL )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("EMCLUB_ALLIANCE_DEL_FB_NOTMASTER") );
            return 
    S_FALSE;
        }

        if ( !
    m_sCLUB.IsMaster(m_dwCharID) )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("EMCLUB_ALLIANCE_DEL_FB_NOTMASTER") );
            return 
    S_FALSE;
        }

        if ( !
    m_sCLUB.IsAlliance() )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("EMCLUB_ALLIANCE_DEL_FB_NOTCHIEF") );
            return 
    S_FALSE;
        }

        if ( !
    m_sCLUB.IsChief() )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("EMCLUB_ALLIANCE_DEL_FB_NOTCHIEF") );
            return 
    S_FALSE;
        }

        if ( 
    m_sCLUB.GetAllBattleNum() > 
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("EMCLUB_ALLIANCE_DEL_FB_BATTLE") );
            return 
    S_FALSE;
        }

        
    GLMSG::SNET_CLUB_ALLIANCE_DEL_REQ NetMsg;
        
    NetMsg.dwDelClubID dwClubID;
        
    NETSEND(&NetMsg);

        return 
    S_OK;
    }

    //    Note : Å¬·´ µ¿¸Í ÇØÃ¼ ¿äû.
    HRESULT GLCharacter::ReqClubAllianceDis ()
    {
        if ( 
    m_dwGuild==CLUB_NULL )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("EMCLUB_ALLIANCE_DIS_FB_NOTMASTER") );
            return 
    S_FALSE;
        }

        if ( !
    m_sCLUB.IsMaster(m_dwCharID) )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("EMCLUB_ALLIANCE_DIS_FB_NOTMASTER") );
            return 
    S_FALSE;
        }

        if ( !
    m_sCLUB.IsAlliance() )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("EMCLUB_ALLIANCE_DIS_FB_NOTCHIEF") );
            return 
    S_FALSE;
        }

        if ( !
    m_sCLUB.IsChief() )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("EMCLUB_ALLIANCE_DIS_FB_NOTCHIEF") );
            return 
    S_FALSE;
        }

        if ( 
    m_sCLUB.GetAllBattleNum() > )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("EMCLUB_ALLIANCE_DIS_FB_BATTLE") );
            return 
    S_FALSE;
        }

        
    GLMSG::SNET_CLUB_ALLIANCE_DIS_REQ NetMsg;
        
    NETSEND(&NetMsg);

        return 
    S_OK;
    }

    //    Note : Å¬·´ ¹èƲ ¿äû.
    HRESULT GLCharacter::ReqClubBattle DWORD dwGaeaIDDWORD dwTime )
    {

        if ( !
    GLCONST_CHAR::bCLUB_BATTLE )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("EMCLUB_BATTLE_REQ_FB_FAIL") );
            return 
    S_FALSE;
        }

        
    PGLCHARCLIENT pCHAR_REQ GLGaeaClient::GetInstance().GetChar dwGaeaID );
        if ( !
    pCHAR_REQ )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("EMCLUB_BATTLE_REQ_FB_FAIL") );
            return 
    S_FALSE;
        }

        if ( 
    m_sCONFTING.emTYPE != EMCONFT_NONE )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("EMCLUB_BATTLE_REQ_FB_CONFT") );
            return 
    S_FALSE;        
        }

        
    DWORD dwCharID pCHAR_REQ->GetCharData().dwCharID;

        if ( 
    m_dwGuild==CLUB_NULL )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("EMCLUB_BATTLE_REQ_FB_NOTMASTER") );
            return 
    S_FALSE;
        }

        if ( !
    m_sCLUB.IsMaster(m_dwCharID) )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("EMCLUB_BATTLE_REQ_FB_NOTMASTER") );
            return 
    S_FALSE;
        }

        if ( !
    pCHAR_REQ->IsClubMaster() )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("EMCLUB_BATTLE_REQ_FB_TARNOTMASTER") );
            return 
    S_FALSE;
        }

        if ( 
    m_sCLUB.IsAllianceGuildpCHAR_REQ->GETCLUBID() ) )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("EMCLUB_BATTLE_REQ_FB_ALLIANCE") );
                
            return 
    S_FALSE;
        }

        if ( 
    m_sCLUB.IsRegDissolution() )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("EMCLUB_BATTLE_REQ_FB_DISSOLUTION") );
            return 
    S_FALSE;
        }

        if ( 
    m_sCLUB.IsBattlepCHAR_REQ->GETCLUBID() ) || m_sCLUB.IsBattleReadypCHAR_REQ->GETCLUBID() ) )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("EMCLUB_BATTLE_REQ_FB_ALREADY") );
            return 
    S_FALSE;
        }

        if ( 
    m_sCLUB.IsBattleAlliancepCHAR_REQ->GETALLIANCEID() )  || m_sCLUB.IsBattleReadypCHAR_REQ->GETALLIANCEID() )  )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("EMCLUB_BATTLE_REQ_FB_ALREADY2") );
            return 
    S_FALSE;
        }

        if ( 
    dwTime GLCONST_CHAR::dwCLUB_BATTLE_TIMEMIN )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::NEGATIVE
                        
    ID2GAMEINTEXT("EMCLUB_BATTLE_REQ_FB_TIMEMIN")
                        , 
    GLCONST_CHAR::dwCLUB_BATTLE_TIMEMIN 60
                        
    GLCONST_CHAR::dwCLUB_BATTLE_TIMEMIN 60);
            return 
    S_FALSE;
        }

        if ( 
    dwTime GLCONST_CHAR::dwCLUB_BATTLE_TIMEMAX )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::NEGATIVE
                        
    ID2GAMEINTEXT("EMCLUB_BATTLE_REQ_FB_TIMEMAX")
                        , 
    GLCONST_CHAR::dwCLUB_BATTLE_TIMEMAX 60
                        
    GLCONST_CHAR::dwCLUB_BATTLE_TIMEMAX 60);
            return 
    S_FALSE;
        }

        
    GLMSG::SNET_CLUB_BATTLE_REQ NetMsg;
        
    NetMsg.dwCharID dwCharID;
        
    NetMsg.dwBattleTime dwTime;
        
    NETSEND(&NetMsg);

        return 
    S_OK;
    }

    //    Note : µ¿¸Í ¹èƲ ¿äû.
    HRESULT GLCharacter::ReqAllianceBattle DWORD dwGaeaIDDWORD dwTime )
    {

        
    DWORD dwCharID;
        
    PGLCHARCLIENT pCHAR_REQ;

        if ( !
    GLCONST_CHAR::bCLUB_BATTLE || !GLCONST_CHAR::bCLUB_BATTLE_ALLIANCE )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("EMALLIANCE_BATTLE_REQ_FB_FAIL") );
            return 
    S_FALSE;
        }

        
    pCHAR_REQ GLGaeaClient::GetInstance().GetChar dwGaeaID );
        if ( !
    pCHAR_REQ )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("EMALLIANCE_BATTLE_REQ_FB_FAIL") );
            return 
    S_FALSE;
        }

        if ( 
    m_sCONFTING.emTYPE != EMCONFT_NONE )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("EMALLIANCE_BATTLE_REQ_FB_CONFT") );
            return 
    S_FALSE;        
        }

        
    dwCharID pCHAR_REQ->GetCharData().dwCharID;

        if ( 
    m_dwGuild==CLUB_NULL )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("EMALLIANCE_BATTLE_REQ_FB_NOTMASTER") );
            return 
    S_FALSE;
        }

        if ( !
    m_sCLUB.IsMaster(m_dwCharID) )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("EMALLIANCE_BATTLE_REQ_FB_NOTMASTER") );
            return 
    S_FALSE;
        }

        if ( !
    pCHAR_REQ->IsClubMaster() )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("EMALLIANCE_BATTLE_REQ_FB_TARNOTMASTER") );
            return 
    S_FALSE;
        }

        if ( 
    m_sCLUB.IsAllianceGuildpCHAR_REQ->GETCLUBID() ) )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("EMALLIANCE_BATTLE_REQ_FB_ALLIANCE") );
                
            return 
    S_FALSE;
        }

        if ( !
    pCHAR_REQ->IsAllianceMaster() )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("EMALLIANCE_BATTLE_REQ_FB_TARNOTMASTER") );
            return 
    S_FALSE;
        }

        if ( 
    m_sCLUB.IsRegDissolution() )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("EMALLIANCE_BATTLE_REQ_FB_DISSOLUTION") );
            return 
    S_FALSE;
        }

        if ( 
    m_sCLUB.IsBattlepCHAR_REQ->GETCLUBID() ) || m_sCLUB.IsBattleReadypCHAR_REQ->GETCLUBID() ) )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("EMALLIANCE_BATTLE_REQ_FB_ALREADY") );
            return 
    S_FALSE;
        }

        if ( 
    m_sCLUB.IsBattleAlliancepCHAR_REQ->GETALLIANCEID() ) || m_sCLUB.IsBattleReadypCHAR_REQ->GETALLIANCEID() ) )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("EMALLIANCE_BATTLE_REQ_FB_ALREADY2") );
            return 
    S_FALSE;
        }

        if ( 
    dwTime GLCONST_CHAR::dwCLUB_BATTLE_TIMEMIN )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::NEGATIVE
                        
    ID2GAMEINTEXT("EMALLIANCE_BATTLE_REQ_FB_TIMEMIN")
                        , 
    GLCONST_CHAR::dwCLUB_BATTLE_TIMEMIN 60
                        
    GLCONST_CHAR::dwCLUB_BATTLE_TIMEMIN 60);
            return 
    S_FALSE;
        }

        if ( 
    dwTime GLCONST_CHAR::dwCLUB_BATTLE_TIMEMAX )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::NEGATIVE
                        
    ID2GAMEINTEXT("EMALLIANCE_BATTLE_REQ_FB_TIMEMAX")
                        , 
    GLCONST_CHAR::dwCLUB_BATTLE_TIMEMAX 60
                        
    GLCONST_CHAR::dwCLUB_BATTLE_TIMEMAX 60);
            return 
    S_FALSE;
        }

        
    GLMSG::SNET_ALLIANCE_BATTLE_REQ NetMsg;
        
    NetMsg.dwCharID dwCharID;
        
    NetMsg.dwBattleTime dwTime;
        
    NETSEND(&NetMsg);

        return 
    S_OK;
    }

    //    Note : Å¬·´ ¹èƲ ¿äû ´äº¯.
    HRESULT GLCharacter::ReqClubBattleAns DWORD dwChiefCharIDbool bOK )
    {

        
    GLMSG::SNET_CLUB_BATTLE_REQ_ANS NetMsgAns;
        
    NetMsgAns.dwClubCharID dwChiefCharID;
        
    NetMsgAns.bOK bOK;
        
    NETSEND(&NetMsgAns);

        return 
    S_OK;
    }

    //    Note : Å¬·´ ¹èƲ ¿äû ´äº¯.
    HRESULT GLCharacter::ReqAllianceBattleAns DWORD dwChiefCharIDbool bOK )
    {

        
    GLMSG::SNET_ALLIANCE_BATTLE_REQ_ANS NetMsgAns;
        
    NetMsgAns.dwClubCharID dwChiefCharID;
        
    NetMsgAns.bOK bOK;
        
    NETSEND(&NetMsgAns);

        return 
    S_OK;
    }

    //    Note : Å¬·´ ¹èƲ ÈÞÀü ¿äû.
    HRESULT GLCharacter::ReqClubBattleArmisticeDWORD dwCLUBID )
    {
        if ( 
    m_dwGuild==CLUB_NULL )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("EMCLUB_BATTLE_ARMISTICE_FB_NOTMASTER") );
            return 
    S_FALSE;
        }

        if ( !
    m_sCLUB.IsMaster(m_dwCharID) )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("EMCLUB_BATTLE_ARMISTICE_FB_NOTMASTER") );
            return 
    S_FALSE;
        }

        if ( !
    m_sCLUB.IsBattledwCLUBID ) )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("EMCLUB_BATTLE_ARMISTICE_FB_NOBATTLE") );
            return 
    S_FALSE;
        }

        if ( !
    m_sCLUB.IsBattleStopdwCLUBID ) )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("EMCLUB_BATTLE_ARMISTICE_FB_DISTIME") );
            return 
    S_FALSE;
        }

        
    GLMSG::SNET_CLUB_BATTLE_ARMISTICE_REQ NetMsg;
        
    NetMsg.dwClubID dwCLUBID;
        
    NETSEND(&NetMsg);    

        return 
    S_OK;
    }

    HRESULT GLCharacter::ReqAllianceBattleArmisticeDWORD dwCLUBID )
    {
        if ( 
    m_dwGuild==CLUB_NULL )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("EMALLIANCE_BATTLE_ARMISTICE_FB_NOTMASTER") );
            return 
    S_FALSE;
        }

        if ( !
    m_sCLUB.IsMaster(m_dwCharID) )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("EMALLIANCE_BATTLE_ARMISTICE_FB_NOTMASTER") );
            return 
    S_FALSE;
        }

        if ( !
    m_sCLUB.IsAlliance() || !m_sCLUB.IsChief() ) 
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("EMALLIANCE_BATTLE_ARMISTICE_FB_NOTMASTER") );
            return 
    S_FALSE;
        }

        if ( !
    m_sCLUB.IsBattleAlliancedwCLUBID ) )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("EMALLIANCE_BATTLE_ALLIANCE_ARMISTICE_FB_NOBATTLE") );
            return 
    S_FALSE;
        }

        if ( !
    m_sCLUB.IsBattleStopdwCLUBID ) )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("EMALLIANCE_BATTLE_ARMISTICE_FB_DISTIME") );
            return 
    S_FALSE;
        }

        
    GLMSG::SNET_ALLIANCE_BATTLE_ARMISTICE_REQ NetMsg;
        
    NetMsg.dwClubID dwCLUBID;
        
    NETSEND(&NetMsg);    

        return 
    S_OK;
    }

    //    Note : Å¬·´ ¹èƲ ÈÞÀü ´äº¯.
    HRESULT GLCharacter::ReqClubBattleArmisticeAnsDWORD dwCLUBIDbool bOK )
    {    
        
    GLMSG::SNET_CLUB_BATTLE_ARMISTICE_REQ_ANS NetMsgAns;
        
    NetMsgAns.dwClubID dwCLUBID;
        
    NetMsgAns.bOK bOK;
        
    NETSEND(&NetMsgAns);

        return 
    S_OK;
    }

    //    Note : µ¿¸Í ¹èƲ ÈÞÀü ´äº¯.
    HRESULT GLCharacter::ReqAllianceBattleArmisticeAnsDWORD dwCLUBIDbool bOK )
    {    
        
    GLMSG::SNET_ALLIANCE_BATTLE_ARMISTICE_REQ_ANS NetMsgAns;
        
    NetMsgAns.dwClubID dwCLUBID;
        
    NetMsgAns.bOK bOK;
        
    NETSEND(&NetMsgAns);

        return 
    S_OK;
    }


    //    Note : Å¬·´ ¹èƲ Ç׺¹ ¿äû.
    HRESULT GLCharacter::ReqClubBattleSubmission DWORD dwCLUBID )
    {
        if ( 
    m_dwGuild==CLUB_NULL )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("EMCLUB_BATTLE_SUBMISSION_FB_NOTMASTER") );
            return 
    S_FALSE;
        }

        if ( !
    m_sCLUB.IsMaster(m_dwCharID) )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("EMCLUB_BATTLE_SUBMISSION_FB_NOTMASTER") );
            return 
    S_FALSE;
        }

        if ( !
    m_sCLUB.IsBattledwCLUBID ) )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("EMCLUB_BATTLE_SUBMISSION_FB_NOBATTLE") );
            return 
    S_FALSE;
        }

        if ( !
    m_sCLUB.IsBattleStopdwCLUBID ) )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("EMCLUB_BATTLE_SUBMISSION_FB_DISTIME") );
            return 
    S_FALSE;
        }

        
    GLMSG::SNET_CLUB_BATTLE_SUBMISSION_REQ NetMsg;
        
    NetMsg.dwClubID dwCLUBID;
        
    NETSEND(&NetMsg);    

        return 
    S_OK;
    }

    //    Note : µ¿¸Í ¹èƲ Ç׺¹ ¿äû.
    HRESULT GLCharacter::ReqAllianceBattleSubmission DWORD dwCLUBID )
    {
        if ( 
    m_dwGuild==CLUB_NULL )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("EMALLIANCE_BATTLE_SUBMISSION_FB_NOTMASTER") );
            return 
    S_FALSE;
        }

        if ( !
    m_sCLUB.IsMaster(m_dwCharID) )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("EMALLIANCE_BATTLE_SUBMISSION_FB_NOTMASTER") );
            return 
    S_FALSE;
        }

        if ( !
    m_sCLUB.IsAlliance() || !m_sCLUB.IsChief() ) 
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("EMALLIANCE_BATTLE_SUBMISSION_FB_NOTMASTER") );
            return 
    S_FALSE;
        }

        if ( !
    m_sCLUB.IsBattleAlliancedwCLUBID ) )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("EMALLIANCE_BATTLE_SUBMISSION_FB_NOBATTLE") );
            return 
    S_FALSE;
        }

        if ( !
    m_sCLUB.IsBattleStopdwCLUBID ) )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("EMALLIANCE_BATTLE_SUBMISSION_FB_DISTIME") );
            return 
    S_FALSE;
        }

        
    GLMSG::SNET_ALLIANCE_BATTLE_SUBMISSION_REQ NetMsg;
        
    NetMsg.dwClubID dwCLUBID;
        
    NETSEND(&NetMsg);    

        return 
    S_OK;
    }

    bool GLCharacter::IsKEEP_CLUB_STORAGE DWORD dwCHANNEL )
    {
        if ( 
    m_sCLUB.m_dwID==CLUB_NULL )        return false;
        if ( 
    m_sCLUB.m_dwMasterID!=m_dwCharID )    return false;

        if ( !
    m_sCLUB.m_bVALID_STORAGE )        return false;

        if ( 
    m_sCLUB.m_dwRank dwCHANNEL )        return false;

        return 
    true;
    }

    //    Note : Ã¢°í Á¤º¸¸¦ ¼­¹ö¿¡ ¿äû.
    HRESULT GLCharacter::ReqGetClubStorage ()
    {
        if ( !
    IsValidBody() )                    return S_FALSE;
        if ( 
    m_sCLUB.m_dwID==CLUB_NULL )        return S_FALSE;
        if ( 
    m_sCLUB.m_dwMasterID!=m_dwCharID )    return S_FALSE;

        
    //    Note : À̹̠â°í Á¤º¸°¡ À¯È¿Çϴٸ頹«½Ã.
        
    if ( !m_sCLUB.m_bVALID_STORAGE )
        {
            
    //    Note : ¼­¹ö¿¡ ¿äû.
            //        ÀÌ ¸Þ½ÃÁö Àü¼Û ÈÄ ¼­¹öÂÊ¿¡¼­ Å¬·´ÀÇ ¼öÀÍ °»½ÅÀ» ¿äûÇÑ´Ù.
            
    GLMSG::SNET_CLUB_GETSTORAGE    NetMsg;
            
    NETSENDTOFIELD ( &NetMsg );
        }
        else
        {
            
    //    Note : Å¬·´ÀÇ ¼öÀÍ °»½Å ¿äû.
            
    GLMSG::SNET_CLUB_INCOME_RENEW NetMsgReNew;
            
    NETSENDTOFIELD ( &NetMsgReNew );
        }

        return 
    S_OK;
    }

    //    Note : Ã¢°í ¾ÆÀÌÅÛ µé¶§, ³õÀ»¶§, ±³È¯ÇÒ¶§, ÇÕÄ¥¶§.
    HRESULT GLCharacter::ReqClubStorageTo DWORD dwChannelWORD wPosXWORD wPosY )
    {
        
    GASSERT(MAX_CLUBSTORAGE>dwChannel);
        if ( 
    MAX_CLUBSTORAGE<=dwChannel )    return false;

        if ( !
    IsValidBody() )                        return S_FALSE;
        if ( 
    ValidWindowOpen() )                    return S_FALSE;    

        if ( !
    IsKEEP_CLUB_STORAGE(dwChannel) )            return S_FALSE;

        
    //    °Å·¡ ¿É¼Ç È®ÀÎ
        
    if ( VALID_HOLD_ITEM () )
        {
            
    SITEM *pITEM GLItemMan::GetInstance().GetItem GET_HOLD_ITEM().sNativeID );
            if ( !
    pITEM )        return S_FALSE;
            if ( 
    pITEM )        return S_FALSE;
        
            
    //    °Å·¡¿É¼Ç
            
    if ( GET_HOLD_ITEM().bWrap!= true )
            {
            if ( !
    pITEM->sBasicOp.IsEXCHANGE() )    return S_FALSE;
            if ( 
    GET_HOLD_ITEM().bNonDrop!= false )    return S_FALSE;
            }
        }

        
    SINVENITEMpInvenItem m_sCLUB.m_cStorage[dwChannel].FindPosItem wPosXwPosY );
        if ( !
    VALID_HOLD_ITEM () && !pInvenItem )        return E_FAIL;

        if ( 
    VALID_HOLD_ITEM () && pInvenItem )
        {
    #if defined(VN_PARAM) //vietnamtest%%%
            
    if ( GET_HOLD_ITEM().bVietnamGainItem  )    return E_FAIL;
    #endif
            
    GLMSG::SNET_CLUB_STORAGE_EX_HOLD NetMsg;
            
    NetMsg.dwChannel dwChannel;
            
    NetMsg.wPosX pInvenItem->wPosX;
            
    NetMsg.wPosY pInvenItem->wPosY;
            
    NETSENDTOFIELD ( &NetMsg );
        }
        else if ( 
    pInvenItem )
        {
            
    GLMSG::SNET_CLUB_STORAGE_TO_HOLD NetMsg;
            
    NetMsg.dwChannel dwChannel;
            
    NetMsg.wPosX pInvenItem->wPosX;
            
    NetMsg.wPosY pInvenItem->wPosY;
            
    NETSENDTOFIELD ( &NetMsg );
        }
        else if ( 
    VALID_HOLD_ITEM () )
        {
    #if defined(VN_PARAM) //vietnamtest%%%
            
    if ( GET_HOLD_ITEM().bVietnamGainItem  )    return E_FAIL;
    #endif        

            //    Note : ¸Þ½ÃÁö ¼Û½ÅÀü¿¡ À¯È¿ÇÒÁö¸¦ ¹Ì¸® °Ë»çÇÔ.
            //
            
    SITEMpItem GLItemMan::GetInstance().GetItem GET_HOLD_ITEM().sNativeID );
            
    GASSERT(pItem&&"¾ÆÀÌÅÆ ´ëÀÌÅͰ¡ Á¸Á¦ÇÏÁö ¾ÊÀ½");

            
    BOOL bOk m_sCLUB.m_cStorage[dwChannel].IsInsertable pItem->sBasicOp.wInvenSizeXpItem->sBasicOp.wInvenSizeYwPosXwPosY );
            if ( !
    bOk )
            {
                
    //    ÀιêÀÌ °¡µæÂþÀ½.
                
    return E_FAIL;
            }

            
    GLMSG::SNET_CLUB_HOLD_TO_STORAGE NetMsg;
            
    NetMsg.dwChannel dwChannel;
            
    NetMsg.wPosX wPosX;
            
    NetMsg.wPosY wPosY;

            
    NETSENDTOFIELD ( &NetMsg );
        }

        return 
    E_FAIL;
    }

    bool GLCharacter::IsClubStorageSplitItem DWORD dwChannelWORD wPosXWORD wPosY )
    {
        
    GASSERT(MAX_CLUBSTORAGE>dwChannel);
        if ( 
    MAX_CLUBSTORAGE<=dwChannel )    return false;

        if ( !
    IsValidBody() )                return false;
        if ( 
    ValidWindowOpen() )            return false;        
        
        if ( !
    IsKEEP_CLUB_STORAGE(dwChannel) )            return false;

        
    SINVENITEMpInvenItem m_sCLUB.m_cStorage[dwChannel].FindPosItem wPosXwPosY );
        if ( !
    pInvenItem )    return false;

        
    //    Note : ¾ÆÀÌÅÛ Á¤º¸ °¡Á®¿À±â.
        
    SITEMpItem GLItemMan::GetInstance().GetItem pInvenItem->sItemCustom.sNativeID );
        
    GASSERT(pItem&&"¾ÆÀÌÅÆ ´ëÀÌÅͰ¡ Á¸Á¦ÇÏÁö ¾ÊÀ½");

        
    bool bSPLIT(false);
        
    bSPLIT = ( pItem->ISPILE() );
        if ( !
    bSPLIT )                    return false;
        
    bSPLIT = ( pInvenItem->sItemCustom.wTurnNum>);

        return 
    bSPLIT;
    }

    //    Note : Ã¢°í - °ãħ ¾ÆÀÌÅÛ ºÐ¸®.
    HRESULT GLCharacter::ReqClubStorageSplit DWORD dwChannelWORD wPosXWORD wPosYWORD wSplitNum )
    {
        if ( !
    IsClubStorageSplitItem(dwChannel,wPosX,wPosY) )    return E_FAIL;

        
    SINVENITEMpInvenItem m_sCLUB.m_cStorage[dwChannel].FindPosItem wPosXwPosY );
        if ( !
    pInvenItem )    return false;
        
        if ( 
    pInvenItem->sItemCustom.wTurnNum <= wSplitNum )
        {
            return 
    E_FAIL;
        }

        
    //    Note : ¾ÆÀÌÅÛ ºÐ¸® ¸Þ½ÃÁö Àü¼Û.
        
    GLMSG::SNET_CLUB_STORAGE_SPLIT NetMsg;
        
    NetMsg.dwChannel dwChannel;
        
    NetMsg.wPosX wPosX;
        
    NetMsg.wPosY wPosY;
        
    NetMsg.wSplit wSplitNum;
        
    NETSENDTOFIELD(&NetMsg);

        return 
    S_OK;
    }

    //    Note : Ã¢°í µ· ³Ö±â.
    HRESULT GLCharacter::ReqClubStorageSaveMoney LONGLONG lnMoney )
    {
        if( 
    m_sCLUB.m_dwID==CLUB_NULL )                return E_FAIL;
        if( 
    m_sCLUB.m_dwMasterID!=m_dwCharID )        return E_FAIL;
        if( !
    m_sCLUB.m_bVALID_STORAGE )                return E_FAIL;

    //#if !defined(KR_PARAM) && !defined(KRT_PARAM)
    //    if( m_lnMoney%UINT_MAX < lnMoney )            return E_FAIL;
    //#endif
        
    if ( m_lnMoney lnMoney )                    return E_FAIL;
        if ( 
    ValidWindowOpen() )                    return E_FAIL;    

        
    GLMSG::SNET_CLUB_STORAGE_SAVE_MONEY NetMsg;
        
    NetMsg.lnMoney lnMoney;
        
    NETSENDTOFIELD ( &NetMsg );

        return 
    S_OK;
    }

    //    Note : Ã¢°í µ· »©³»±â.
    HRESULT GLCharacter::ReqClubStorageDrawMoney LONGLONG lnMoney )
    {
        if ( 
    m_sCLUB.m_dwID==CLUB_NULL )            return E_FAIL;
        if ( 
    m_sCLUB.m_dwMasterID!=m_dwCharID )        return E_FAIL;

        if ( !
    m_sCLUB.m_bVALID_STORAGE )            return E_FAIL;

    //#if !defined(KR_PARAM) && !defined(KRT_PARAM)
    //    if ( m_sCLUB.m_lnStorageMoney%UINT_MAX < lnMoney )    return E_FAIL;
    //#endif
        
    if ( m_sCLUB.m_lnStorageMoney lnMoney )    return E_FAIL;
        if ( 
    ValidWindowOpen() )                    return E_FAIL;

        
    GLMSG::SNET_CLUB_STORAGE_DRAW_MONEY NetMsg;
        
    NetMsg.lnMoney lnMoney;
        
    NETSENDTOFIELD ( &NetMsg );

        return 
    S_OK;
    }

    HRESULT GLCharacter::ReqGarbageOpen()
    {
        
    InitGarbageData();
        
    OpenGarbage();
        
        return 
    S_OK;
    }

    HRESULT GLCharacter::ReqGarbageMoveItem()
    {
        if( 
    m_sPreInventoryItem.VALID() )
        {
            
    // ¼Õ¿¡ µç ¾ÆÀÌÅÛÀÌ ÀåÂø ¾ÆÀÌÅÛÀ̾î¾ß ¹Ù²Ü ¼ö ÀÖ´Ù
            
    SITEMCUSTOM sPreItem GET_PREHOLD_ITEM();
            
    SITEMpItem GLItemMan::GetInstance().GetItemsPreItem.sNativeID );

            
    // ÆÖÄ«µåÀϰæ¿ì
            
    if ( pItem->sBasicOp.emItemType == ITEM_PET_CARD )
            {
                
    GLPetClientpMyPet GLGaeaClient::GetInstance().GetPetClient ();
                if ( 
    pMyPet && pMyPet->IsVALID () && sPreItem.dwPetID == pMyPet->m_dwPetID )
                {
                    
    m_sPreInventoryItem.RESET();
                    return 
    E_FAIL;
                }
            }

            
    // disabled garbage basicop on item to make all item default deletable by garbage item
            //if( pItem && pItem->sBasicOp.IsGarbage() )
            //{
                
    m_sGarbageItem.SETm_sPreInventoryItem.wPosXm_sPreInventoryItem.wPosY );
            
    //}
            
            
    m_sPreInventoryItem.RESET();
        }
        
        return 
    S_OK;
    }

    HRESULT GLCharacter::ReqGarbageResult()
    {
        
        if( !
    m_sGarbageItem.VALID() )
            return 
    S_FALSE;

        
    GLMSG::SNET_GARBAGE_RESULT NetMsg;

        
    NetMsg.wPosX m_sGarbageItem.wPosX;
        
    NetMsg.wPosY m_sGarbageItem.wPosY;
        
        
    NETSENDTOFIELD( &NetMsg );
        
        return 
    S_OK;
    }

    HRESULT GLCharacter::ReqGarbageClose()
    {
        
    InitGarbageData();
        
    CloseGarbage();

        return 
    S_OK;
    }

    const 
    SITEMCUSTOMGLCharacter::GET_GARBAGE_ITEM()    // ITEMREBUILD_MARK
    {
        static 
    SITEMCUSTOM sItemCustom;
        
    sItemCustom.sNativeID NATIVEID_NULL();

        if( !
    m_sGarbageItem.VALID() )
            return 
    sItemCustom;

        
    SINVENITEMpResistItem m_cInventory.GetItemm_sGarbageItem.wPosXm_sGarbageItem.wPosY );
        if( !
    pResistItem )
            return 
    sItemCustom;

        
    sItemCustom pResistItem->sItemCustom;

        return 
    sItemCustom;
    }

    VOID GLCharacter::InitGarbageData()
    {
        
    m_sGarbageItem.RESET();
        
    m_sPreInventoryItem.RESET();
    }

    void GLCharacter::ReqRetrieveMobInMap() //Request Crow List NaJDeV
    {
        
    CInnerInterface::GetInstance().GetLargeMapWindow()->ClearMobList();

        
    GLMSG::SNETPC_REQ_CROWLIST_FLD NetMsg;
        
    NetMsg.dwGaeaID m_dwGaeaID;
        
    NETSEND ( &NetMsg );
    }

    void GLCharacter::ReqDisableSkillDWORD dwSKILLSNATIVEID sKILLID //disable skill effect NaJDeV
    {
        if ( 
    dwSKILL SKILLFACT_SIZE ) return;

        
    PGLSKILL pSkill GLSkillMan::GetInstance().GetData sKILLID.wMainIDsKILLID.wSubID );
        if ( !
    pSkill ) return;
        if ( 
    pSkill->m_sBASIC.emIMPACT_SIDE == SIDE_ENERMY ) return;

        
    GLMSG::SNETPC_REQ_DISABLESKILLEFF NetMsg;
        
    NetMsg.dwSKILL dwSKILL;
        
    NETSENDTOFIELD ( &NetMsg );
    }
    HRESULT GLCharacter::ReqRebuildOpen() //sealed card 
    {
        
    InitRebuildData();
        
    OpenRebuild();

        
    GLMSG::SNET_REBUILD_RESULT NetMsg;

        
    NetMsg.emResult EMREBUILD_RESULT_OPEN;

        
    NETSENDTOFIELD( &NetMsg );

        return 
    S_OK;
    }

    HRESULT GLCharacter::ReqRebuildMoveItem() //sealed card 
    {
        
    GLMSG::SNET_REBUILD_MOVE_ITEM NetMsg;

        if( 
    m_sPreInventoryItem.VALID() )
        {
            
    SITEMCUSTOM sPreItem GET_PREHOLD_ITEM();
            
    SITEMpItem GLItemMan::GetInstance().GetItemsPreItem.sNativeID );
            if( 
    pItem && pItem->sBasicOp.emItemType == ITEM_SUIT )
            {
                if( 
    strlenpItem->sRandomOpt.szNAME ) > )
                {
                    
    NetMsg.wPosX m_sPreInventoryItem.wPosX;
                    
    NetMsg.wPosY m_sPreInventoryItem.wPosY;
                }
            }
            
    m_sPreInventoryItem.RESET();
        }

        
    NETSENDTOFIELD( &NetMsg );

        return 
    S_OK;
    }

    HRESULT GLCharacter::ReqRebuildResultSITEMSEALDATA pData1SITEMSEALDATA pData2 //sealed card 
    {
        if( !
    m_sRebuildItem.VALID() )
            return 
    S_FALSE;

        if( 
    m_i64RebuildInput != m_i64RebuildCost || m_lnMoney m_i64RebuildCost )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlgNS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT"EMREBUILD_RESULT_MONEY" ) );
            return 
    E_FAIL;
        }

        
    GLMSG::SNET_REBUILD_RESULT NetMsg;
        
    NetMsg.dwNPCID m_dwNPCID;
        
    NetMsg.emResult EMREBUILD_RESULT_SUCCESS;
        
    NetMsg.Data1 pData1;
        
    NetMsg.Data2 pData2;
        
    NETSENDTOFIELD( &NetMsg );

        return 
    S_OK;
    }

    HRESULT GLCharacter::ReqRebuildInputMoneyLONGLONG i64InputMoney //sealed card 
    {
        
    GLMSG::SNET_REBUILD_INPUT_MONEY NetMsg;

        
    NetMsg.i64InputMoney = (LONGLONG)max0i64InputMoney );
        
    NetMsg.i64InputMoney = (LONGLONG)minNetMsg.i64InputMoneym_lnMoney );

        
    NETSENDTOFIELD( &NetMsg );

        return 
    S_OK;
    }

    HRESULT GLCharacter::ReqRebuildClose() //sealed card 
    {
        
    InitRebuildData();

        
    CloseRebuild();

        
    GLMSG::SNET_REBUILD_RESULT NetMsg;

        
    NetMsg.emResult EMREBUILD_RESULT_CLOSE;

        
    NETSENDTOFIELD( &NetMsg );

        return 
    S_OK;
    }

    HRESULT GLCharacter::ReqRebuildMoveSeal() //sealed card 
    {
        
    GLMSG::SNET_REBUILD_MOVE_SEAL NetMsg;

        if( 
    m_sPreInventoryItem.VALID() )
        {
            
    SITEMCUSTOM sCustom GET_REBUILD_ITEM();
            if ( !
    sCustom.sNativeID.IsValidNativeID() )
            {
                
    CInnerInterface::GetInstance().PrintConsoleText"Insert item first and then try again." );
                
    m_sPreInventoryItem.RESET();
                return 
    E_FAIL;
            }

            
    SITEMCUSTOM sPreItem GET_PREHOLD_ITEM();
            
    SITEMpItem GLItemMan::GetInstance().GetItemsPreItem.sNativeID );
            if( 
    pItem && pItem->sBasicOp.emItemType == ITEM_SEALED_CARD )
            {
                
    NetMsg.wPosX m_sPreInventoryItem.wPosX;
                
    NetMsg.wPosY m_sPreInventoryItem.wPosY;
            }
            
            
    m_sPreInventoryItem.RESET();
        }
                
        
    NETSENDTOFIELD( &NetMsg );

        return 
    S_OK;
    }

    HRESULT GLCharacter::ReqUsePetCard WORD wPosXWORD wPosY )
    {
        if ( !
    IsValidBody() )                        return E_FAIL;

        
    // ´ë·ÃÁßÀÌ¸é ÆÖÀ» ¼ÒȯÇÒ ¼ö ¾ø´Ù.
        
    if ( m_sCONFTING.IsCONFRONTING() )            return E_FAIL;

        
    PLANDMANCLIENT pLandManClient GLGaeaClient::GetInstance().GetActiveMap ();
        if ( !
    pLandManClient )                        return E_FAIL;

        
    GLMapList::FIELDMAP MapsList GLGaeaClient::GetInstance().GetMapList ();
        
    GLMapList::FIELDMAP_ITER iter MapsList.find pLandManClient->GetMapID ().dwID );
        if ( 
    iter==MapsList.end() )                    return E_FAIL;

        const 
    SMAPNODE *pMapNode = &(*iter).second;

        
    // ¸ÊÁøÀÔ°¡´É¿©ºÎ Ã¼Å©
        
    if ( !pMapNode->bPetActivity )
        {
            
    CInnerInterface::GetInstance().PrintMsgText 
                            
    NS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("EMPET_USECARD_FB_INVALIDZONE") );
            return 
    E_FAIL;
        }

        
    SINVENITEMpInvenItem m_cInventory.FindPosItem wPosXwPosY );
        if ( !
    pInvenItem )
        {
            
    // ¾ÆÀÌÅÛ ¾ø´Ù
            
    return E_FAIL;
        }

        
    SITEMpItem GLItemMan::GetInstance().GetItem pInvenItem->sItemCustom.sNativeID );
        if ( !
    pItem )
        {
            
    // ¾ÆÀÌÅÛ ¾ø´Ù
            
    return E_FAIL;
        }

        if ( 
    pItem->sBasicOp.emItemType != ITEM_PET_CARD )
        {
            
    // ÆÖÄ«µå ¾Æ´Ï´Ù
            
    return E_FAIL;
        }
        
        
    m_llPetCardGenNum      pInvenItem->sItemCustom.lnGenNum;
        
    m_sPetCardNativeID    pInvenItem->sItemCustom.sNativeID;
        
    m_cPetCardGenType     pInvenItem->sItemCustom.cGenType;

        
    GLMSG::SNETPET_REQ_USEPETCARD NetMsg;
        
    NetMsg.wPosX wPosX;
        
    NetMsg.wPosY wPosY;
        
    NETSENDTOFIELD ( &NetMsg );

        return 
    S_OK;
    }

    HRESULT GLCharacter::ReqReGenPet ()
    {
        if ( !
    IsValidBody() )                        return E_FAIL;

        
    PLANDMANCLIENT pLandManClient GLGaeaClient::GetInstance().GetActiveMap ();
        if ( !
    pLandManClient )                        return E_FAIL;

        
    GLMapList::FIELDMAP MapsList GLGaeaClient::GetInstance().GetMapList ();
        
    GLMapList::FIELDMAP_ITER iter MapsList.find pLandManClient->GetMapID ().dwID );
        if ( 
    iter==MapsList.end() )                    return E_FAIL;

        const 
    SMAPNODE *pMapNode = &(*iter).second;

        if ( !
    pMapNode->bPetActivity )                return E_FAIL;

        
    SINVENITEMpInvenItem m_cInventory.FindItemByGenNumber m_llPetCardGenNumm_sPetCardNativeIDm_cPetCardGenType );
        if ( !
    pInvenItem ) return E_FAIL;
        
        
    GLMSG::SNETPET_REQ_USEPETCARD NetMsg;
        
    NetMsg.wPosX pInvenItem->wPosX;
        
    NetMsg.wPosY pInvenItem->wPosY;
        
    NETSENDTOFIELD ( &NetMsg );

        return 
    S_OK;
    }

    // *****************************************************
    // Desc: DB¿¡¼­ »èÁ¦µÈ ÆÖÀÇ Á¤º¸ ¿äû
    // *****************************************************
    HRESULT    GLCharacter::ReqPetReviveInfo ()
    {
        
    GLMSG::SNETPET_REQ_PETREVIVEINFO NetMsg;
        
    NetMsg.dwCharID m_dwCharID;
        
    NETSENDTOFIELD ( &NetMsg );

        return 
    S_OK;
    }

    // *****************************************************
    // Desc: DB¿¡¼­ »èÁ¦µÈ ÆÖ º¹¿ø¿äû
    // *****************************************************
    HRESULT GLCharacter::ReqPetRevive DWORD dwPetID )
    {
        
    GLMSG::SNETPET_REQ_REVIVE NetMsg;
        
    NetMsg.dwPetID dwPetID;
        
    NetMsg.wPosX   m_wInvenPosX1;
        
    NetMsg.wPosY   m_wInvenPosY1;
        
    NETSENDTOFIELD ( &NetMsg );    

        return 
    S_OK;
    }

    // *****************************************************
    // Desc: ÆÖÄ«µåÀÇ Á¤º¸ ¿äû
    // *****************************************************
    HRESULT    GLCharacter::ReqPetCardInfo ()
    {
        
    GLInventory::CELL_MAPpMapItem m_cInventory.GetItemList();
        
    GLInventory::CELL_MAP_CITER iter pMapItem->begin();
        
    GLInventory::CELL_MAP_CITER iter_end pMapItem->end();
        for ( ; 
    iter!=iter_end; ++iter )
        {
            
    SINVENITEMpInvenItem = (*iter).second;
            
    SITEMpItem GLItemMan::GetInstance().GetItem pInvenItem->sItemCustom.sNativeID );
            if ( 
    pItem && pItem->sBasicOp.emItemType == ITEM_PET_CARD && pInvenItem->sItemCustom.dwPetID != )
            {
                
    GLMSG::SNETPET_REQ_PETCARDINFO NetMsg;
                
    NetMsg.dwPetID pInvenItem->sItemCustom.dwPetID;
                
    NETSENDTOFIELD ( &NetMsg );
            }
        }

        for ( 
    WORD i 0EMSTORAGE_CHANNEL; ++)
        {
            if ( 
    m_bStorage[i] )
            {
                
    GLInventory::CELL_MAPpMapItem m_cStorage[i].GetItemList();
                
    GLInventory::CELL_MAP_CITER iter pMapItem->begin();
                
    GLInventory::CELL_MAP_CITER iter_end pMapItem->end();
                for ( ; 
    iter!=iter_end; ++iter )
                {
                    
    SINVENITEMpInvenItem = (*iter).second;
                    
    SITEMpItem GLItemMan::GetInstance().GetItem pInvenItem->sItemCustom.sNativeID );
                    if ( 
    pItem && pItem->sBasicOp.emItemType == ITEM_PET_CARD && pInvenItem->sItemCustom.dwPetID != 0  )
                    {
                        
    GLMSG::SNETPET_REQ_PETCARDINFO NetMsg;
                        
    NetMsg.dwPetID pInvenItem->sItemCustom.dwPetID;
                        
    NETSENDTOFIELD ( &NetMsg );
                    }
                }
            }
        }
        
        return 
    S_OK;
    }

    HRESULT GLCharacter::ReqSetPhoneNumber ( const TCHAR szPhoneNumber )
    {
        if( !
    szPhoneNumber )    return S_FALSE;

        
    GLMSG::SNETPC_PHONE_NUMBER NetMsg;

        
    StringCchCopy NetMsg.szPhoneNumberSMS_RECEIVERszPhoneNumber );

        
    NETSENDTOFIELD(&NetMsg);

        return 
    S_OK;
    }

    HRESULT GLCharacter::ReqSendSMSint nCharID, const TCHAR szPhoneNumber, const TCHAR szSmsMsg )
    {
        if( !
    szPhoneNumber )    return S_FALSE;
        if( !
    szSmsMsg )            return S_FALSE;

        
    SINVENITEM *pINVENITEM m_cInventory.FindItem ITEM_SMS );
        if ( !
    pINVENITEM )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("EMSMS_FB_NO_ITEM") );
            return 
    S_FALSE;
        }

        
    GLMSG::SNETPC_SEND_SMS NetMsg;

        
    NetMsg.dwReceiveChaNum nCharID;
        
    StringCchCopy NetMsg.szPhoneNumberSMS_RECEIVERszPhoneNumber );
        
    StringCchCopy NetMsg.szSmsMsgSMS_LENGTHszSmsMsg );
        
    NetMsg.wItemPosX pINVENITEM->wPosX;
        
    NetMsg.wItemPosY pINVENITEM->wPosY;

        
    NETSENDTOFIELD(&NetMsg);

        return 
    S_OK;
    }

    HRESULT GLCharacter::ReqMGameOddEvenBattingUINT uiBattingMoney )
    {
        
    // ÃÖ´ë ¹èÆÃ °¡´É ±Ý¾×À» Ã¼Å©ÇÑ´Ù. ¼­¹öÂÊ¿¡¼­µµ Ã¼Å©
        
    if( uiBattingMoney MINIGAME_ODDEVEN::uiMaxBattingMoney )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlgNS_UITEXTCOLOR::NEGATIVE
                                                            
    ID2GAMEINTEXT"EMMGAME_ODDEVEN_FB_MAXBATTING" ), 
                                                            
    MINIGAME_ODDEVEN::uiMaxBattingMoney );
            return 
    S_FALSE;
        }

        
    // º¸À¯±Ý¾×À» Ã¼Å©ÇÑ´Ù. ¼­¹öÂÊ¿¡¼­µµ Ã¼Å©
        
    if( uiBattingMoney m_lnMoney )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlgNS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT"EMMGAME_ODDEVEN_FB_MONEY_FAIL" ) );
            return 
    S_FALSE;
        }

        
    // ¹è´ç ±Ý¾×À» ¼ÂÆÃÇØ¼­ ¼­¹ö·Î Àü¼ÛÇÑ´Ù.
        
    GLMSG::SNETPC_MGAME_ODDEVEN NetMsg;
        
    NetMsg.dwNPCID m_dwNPCID;
        
    NetMsg.emEvent EMMGAME_ODDEVEN_OK;
        
    NetMsg.uiBattingMoney uiBattingMoney;
        
    NETSENDTOFIELD(&NetMsg);

        return 
    S_OK;
    }

    HRESULT GLCharacter::ReqMGameOddEvenAgain()
    {
        
    // °ÔÀ̸Ӱ¡ °ÔÀÓ ¹Ýº¹À» ¿äû

        
    GLMSG::SNETPC_MGAME_ODDEVEN NetMsg;
        
    NetMsg.dwNPCID m_dwNPCID;
        
    NetMsg.emEvent EMMGAME_ODDEVEN_AGAIN_OK;
        
    NETSENDTOFIELD(&NetMsg);

        return 
    S_OK;
    }

    HRESULT GLCharacter::ReqMGameOddEvenCancel()
    {
        
    // ¼­¹ö·Î °ÔÀÓ Ãë¼Ò¸¦ ¾Ë¸°´Ù.
        
    GLMSG::SNETPC_MGAME_ODDEVEN NetMsg;
        
    NetMsg.dwNPCID m_dwNPCID;
        
    NetMsg.emEvent EMMGAME_ODDEVEN_CANCEL;
        
    NETSENDTOFIELD(&NetMsg);

        return 
    S_OK;
    }

    HRESULT GLCharacter::ReqMGameOddEvenSelectBOOL bOdd )
    {
        
    // °ÔÀ̸Ӱ¡ È¦¼ö, Â¦¼ö¸¦ ¼±ÅÃ
        // bOdd°¡ TRUE¸é È¦¼ö, FALSE¸é Â¦¼ö
        
    GLMSG::SNETPC_MGAME_ODDEVEN NetMsg;
        
    NetMsg.dwNPCID m_dwNPCID;
        
    NetMsg.emEvent EMMGAME_ODDEVEN_SELECT;

        if( 
    bOdd )    NetMsg.emCase EMMGAME_ODDEVEN_ODD;
        else        
    NetMsg.emCase EMMGAME_ODDEVEN_EVEN;

        
    NETSENDTOFIELD(&NetMsg);

        return 
    S_OK;
    }

    HRESULT GLCharacter::ReqMGameOddEvenShuffle()
    {
        
    GLMSG::SNETPC_MGAME_ODDEVEN NetMsg;
        
    NetMsg.dwNPCID m_dwNPCID;
        
    NetMsg.emEvent EMMGAME_ODDEVEN_SHUFFLE;
        
    NETSENDTOFIELD(&NetMsg);

        return 
    S_OK;
    }

    HRESULT GLCharacter::ReqMGameOddEvenFinish()
    {
        
    GLMSG::SNETPC_MGAME_ODDEVEN NetMsg;
        
    NetMsg.dwNPCID m_dwNPCID;
        
    NetMsg.emEvent EMMGAME_ODDEVEN_FINISH;
        
    NETSENDTOFIELD(&NetMsg);

        return 
    S_OK;
    }

    HRESULT GLCharacter::ReqFriendWindowOpenbool bOpen )
    {
        
    GLMSG::SNETPC_REQ_FRIEND_CLUB_OPEN NetMsg;
        
    NetMsg.emTYPE EMFRIEND_WINDOW;
        
    NetMsg.bOpen bOpen;

        
    NETSEND( &NetMsg );
        
        return 
    S_OK;
    }

    HRESULT GLCharacter::ReqClubInfoUpdatebool bUpdate )
    {
        if ( !
    bUpdate 
        {
            if ( 
    CInnerInterface::GetInstance().IsVisibleGroupCLUB_WINDOW ) || 
                 
    CInnerInterface::GetInstance().IsVisibleGroupLARGEMAP_WINDOW ) ) 
                return 
    S_OK;
        }

        
    GLMSG::SNETPC_REQ_FRIEND_CLUB_OPEN NetMsg;
        
    NetMsg.emTYPE EMCLUB_WINDOW;
        
    NetMsg.bOpen bUpdate;

        
    NETSEND( &NetMsg );

        return 
    S_OK;
    }


    HRESULT GLCharacter::SetVehicle bool bActive )
    {
        
    // Ä³¸¯ÅÍÀÇ ÇöÀ砻󟦠Ż°Í¿¡ °ü·ÃÇØ¼­ ÃʱâÈ­ ÇÑ´Ù.
         
    if ( bActive )
        {
            if ( 
    m_bVehicle ) return E_FAIL;
            
    m_bVehicle TRUE;
            
    m_bReqVehicle FALSE;
            
            
    int emType m_sVehicle.m_emTYPE ;

            if ( 
    emType == VEHICLE_TYPE_BOARD //modify vehicle anim
            
    {
                
    m_emANISUBTYPE = (EMANI_SUBTYPE) (AN_SUB_HOVERBOARD ) ;  
            }

            if ( !
    IsSTATE(EM_ACT_PEACEMODE) ) ReqTogglePeaceMode();

            
    // Å¾½Â ÀÌÆÑÆ® Ãß°¡
            
    STARGETID sTargetID(CROW_PCm_dwGaeaIDm_vPos);
            
    DxEffGroupPlayer::GetInstance().NewEffGroup
            
    (
                
    GLCONST_CHAR::strVEHICLE_GEN_EFFECT.c_str(),
                
    m_matTrans,
                &
    sTargetID
            
    );

            
    SITEMCUSTOMsItemCustom m_PutOnItems[SLOT_VEHICLE];

            
    SITEMpItem GLItemMan::GetInstance().GetItemsItemCustom.sNativeID );
            if ( !
    pItem ) return E_FAIL;

            
    CInnerInterface::GetInstance().PrintMsgText NS_UITEXTCOLOR::IDCOLORID2GAMEINTEXT("VEHICLE_SET_FB_OK"), pItem->GetName() );

            
    DxViewPort::GetInstance().SetVehicleCamera();

            
    CInnerInterface::GetInstance().SetVehicleDisplay();//add vehicleimage

        
    }
        else
        {
            if ( !
    m_bVehicle )    return E_FAIL;

            
    m_bVehicle FALSE;        
            
    m_bReqVehicle FALSE;

            
    EMSLOT emRHand GetCurRHand();
            
    EMSLOT emLHand GetCurLHand();
            
    m_emANISUBTYPE CHECK_ANISUB m_pITEMS[emRHand], m_pITEMS[emLHand]  );

            
    SITEMCUSTOMsItemCustom m_PutOnItems[SLOT_VEHICLE];
            
    SITEMpItem GLItemMan::GetInstance().GetItemsItemCustom.sNativeID );
            if ( 
    pItem CInnerInterface::GetInstance().PrintMsgText NS_UITEXTCOLOR::IDCOLORID2GAMEINTEXT("VEHICLE_RESET_FB_OK"),pItem->GetName() );
            
            
    DxViewPort::GetInstance().SetGameCamera();

            
    CInnerInterface::GetInstance().ResetVehicleDisplay();//add vehicleimage
        
    }


        
    /*Disable remove buff and Qitem when use vehicle
        // ¹öÇÁ ½ºÅ³ Á¦°Å
        for ( int i = 0; i < SKILLFACT_SIZE; ++i )
        {
            if ( m_sSKILLFACT[i].sNATIVEID == NATIVEID_NULL() ) continue;
            
            PGLSKILL pSkill = GLSkillMan::GetInstance().GetData( m_sSKILLFACT[i].sNATIVEID );

            if ( pSkill && pSkill->m_sBASIC.emIMPACT_SIDE != SIDE_ENERMY )
            {
                FACTEFF::DeleteSkillFactEffect ( STARGETID(CROW_PC,m_dwGaeaID,m_vPos), m_pSkinChar, m_sSKILLFACT[i].sNATIVEID );
                DISABLESKEFF( i );
            }    
        }    

        // Äù¼Ç ¾ÆÀÌÅÛ Á¦°Å
        m_sQITEMFACT.RESET ();
        CInnerInterface::GetInstance().RESET_KEEP_QUESTION_ITEM ();
        */

        
    GLCHARLOGIC::INIT_DATA FALSEFALSE );
        
    UpdateSuitTRUE );
        
    ReSelectAnimation();

        return 
    S_OK;

    }

    HRESULT GLCharacter::ReqSetVehicle(  bool bActive )
    {
        
    // Å»°ÍÀ̠Ȱ¼ºÈ­
        
    if ( bActive )
        {
            
    // ´ë·ÃÁßÀ̸é Å»°ÍÀ» È°¼ºÈ­ ½Ãų¼ö ¾ø´Ù.
            
    if ( m_sCONFTING.IsCONFRONTING() )            return E_FAIL;

            if ( 
    IsACTION(GLAT_ATTACK) || IsACTION(GLAT_SKILL)  || 
                 
    IsACTION(GLAT_FALLING) || IsACTION(GLAT_TALK) || 
                 
    IsACTION(GLAT_GATHERING) )    return E_FAIL;

            if ( !
    m_sVehicle.IsActiveValue() )            return E_FAIL;

            
    // ¸Ê Ã¼Å© 
            
    PLANDMANCLIENT pLandManClient GLGaeaClient::GetInstance().GetActiveMap ();
            if ( !
    pLandManClient )                        return E_FAIL;

            
    GLMapList::FIELDMAP MapsList GLGaeaClient::GetInstance().GetMapList ();
            
    GLMapList::FIELDMAP_ITER iter MapsList.find pLandManClient->GetMapID ().dwID );
            if ( 
    iter==MapsList.end() )                    return E_FAIL;

            const 
    SMAPNODE *pMapNode = &(*iter).second;

            
    // ¸ÊÁøÀÔ°¡´É¿©ºÎ Ã¼Å©
            
    if ( !pMapNode->bVehicleActivity )
            {
                
    CInnerInterface::GetInstance().PrintMsgText NS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("VEHICLE_SET_FB_MAP_FAIL") );
                return 
    S_OK;
            }


            
    // ¹ÙÀÌŬ ¼ÒÀ¯ ¿©ºÎ Ã¼Å©         
            
    SITEMCUSTOMsItemCostom m_PutOnItems[SLOT_VEHICLE];
            if ( 
    sItemCostom.sNativeID == NATIVEID_NULL() )
            {
                
    CInnerInterface::GetInstance().PrintMsgText NS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("VEHICLE_SET_FB_NO_ITEM") );
                return 
    E_FAIL;
            }

            
    SITEMpItem GLItemMan::GetInstance().GetItemsItemCostom.sNativeID );
            if ( !
    pItem || pItem->sBasicOp.emItemType != ITEM_VEHICLE )
            {
                
    CInnerInterface::GetInstance().PrintMsgText NS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("VEHICLE_SET_FB_NO_ITEM") );
                return 
    E_FAIL;        
            }

            if ( 
    m_sVehicle.IsNotEnoughFull() )
            {
                
    CInnerInterface::GetInstance().PrintMsgText NS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("VEHICLE_SET_FB_NOTENOUGH_OIL") );
                return 
    E_FAIL;    
            }

            
    m_sVehicleNativeID  sItemCostom.sNativeID//add vehicleimage

            
    m_bReqVehicle TRUE;
            
            
            
    // ¼­¹ö¿¡ ¿äû
            
    GLMSG::SNETPC_ACTIVE_VEHICLE NetMsg;
            
    NetMsg.bActive true;

            
    NETSENDTOFIELD( &NetMsg );

            return 
    S_OK;
            
        }
        
    // Å»°ÍÀÌ ºñȰ¼ºÈ­
        
    else 
        {
            if ( !
    m_sVehicle.IsActiveValue() )            return E_FAIL;

            if ( 
    IsACTION(GLAT_ATTACK) || IsACTION(GLAT_SKILL) || IsACTION(GLAT_FALLING) )    return E_FAIL;

            
    // ¹ÙÀÌŬ ¼ÒÀ¯ ¿©ºÎ Ã¼Å© 
            
    SITEMCUSTOMsItemCostom m_PutOnItems[SLOT_VEHICLE];
            if ( 
    sItemCostom.sNativeID == NATIVEID_NULL() )
            {
                
    CInnerInterface::GetInstance().PrintMsgText NS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("VEHICLE_SET_FB_NO_ITEM") );
                return 
    E_FAIL;
            }

            
    SITEMpItem GLItemMan::GetInstance().GetItemsItemCostom.sNativeID );
            if ( !
    pItem || pItem->sBasicOp.emItemType != ITEM_VEHICLE )
            {
                
    CInnerInterface::GetInstance().PrintMsgText NS_UITEXTCOLOR::NEGATIVEID2GAMEINTEXT("VEHICLE_SET_FB_NO_ITEM") );
                return 
    E_FAIL;        
            }

            
    // ¼­¹ö¿¡ ¿äû
            
    GLMSG::SNETPC_ACTIVE_VEHICLE NetMsg;
            
    NetMsg.bActive false;

            
    m_bReqVehicle TRUE;

            
    NETSENDTOFIELD( &NetMsg );

            return 
    S_OK;        
            
        }

        return 
    S_OK;
    }

    HRESULT GLCharacter::ReqVehicleUpdate()
    {
        if ( 
    m_sVehicle.IsActiveValue() ) return E_FAIL;

        
    // ¹ÙÀÌŬ ¼ÒÀ¯ ¿©ºÎ Ã¼Å© 
        
    SITEMCUSTOMsItemCostom m_PutOnItems[SLOT_VEHICLE];
        if ( 
    sItemCostom.sNativeID == NATIVEID_NULL() )
        {
            return 
    E_FAIL;
        }

        
    GLMSG::SNETPC_GET_VEHICLE NetMsg;
        
    NetMsg.nItemID sItemCostom.sNativeID;

        
    NETSENDTOFIELD( &NetMsg );

        return 
    S_OK;
    }

    void GLCharacter::ReqVehicleChangeAccessoryEMSUIT emSUIT )
    {
        if ( 
    GLTradeClient::GetInstance().Valid() )        return;

        
    //    Note : °ø°ÝÁßÀ̳ª ½ºÅ³ ½ÃÀü Áß¿¡ ½½·Ô º¯°æÀ» ¼öÇà ÇÒ ¼ö ¾ø´Ù°í º½.
        //
        
    if ( IsACTION(GLAT_ATTACK) || IsACTION(GLAT_SKILL) ) return;

        
    SITEMCUSTOM sHoldItemCustom GET_HOLD_ITEM ();
        
    SITEMCUSTOM    sSlotItemCustom m_sVehicle.GetSlotitembySuittype emSUIT );

        
    //    SLOT <-> HOLD
        
    if ( sHoldItemCustom.sNativeID != NATIVEID_NULL() && sSlotItemCustom.sNativeID != NATIVEID_NULL() )
        {
            
    SITEMpHoldItem GLItemMan::GetInstance().GetItem sHoldItemCustom.sNativeID );
            if ( !
    pHoldItem 
            {
                
    // ÀϹݠ¿À·ù
                
    return;
            }

            if ( !
    m_sVehicle.CheckSlotItempHoldItem->sBasicOp.sNativeIDemSUIT ) ) return;
            
            
    SITEMpSlotItem GLItemMan::GetInstance().GetItem sSlotItemCustom.sNativeID );
            if ( !
    pSlotItem 
            {
                
    // ÀϹݠ¿À·ù
                
    return;
            }

            if ( !
    GLGaeaClient::GetInstance().GetCharacter()->ACCEPT_ITEM sHoldItemCustom.sNativeID ) )
            {
                return;
            }

            
    // Å¸ÀÔÀÌ ´Ù¸£¸é
            
    if ( pHoldItem->sSuitOp.emSuit != pSlotItem->sSuitOp.emSuit ) return;

            
    GLMSG::SNET_VEHICLE_REQ_SLOT_EX_HOLD NetMsg;
            
    NetMsg.emSuit emSUIT;
            
    NETSENDTOFIELD ( &NetMsg );
        }
        
    // HOLD -> SLOT
        
    else if ( sHoldItemCustom.sNativeID != NATIVEID_NULL() )
        {
            
    SITEMpHoldItem GLItemMan::GetInstance().GetItem sHoldItemCustom.sNativeID );
            if ( !
    pHoldItem 
            {
                
    // ÀϹݠ¿À·ù
                
    return;
            }

            if ( !
    m_sVehicle.CheckSlotItempHoldItem->sBasicOp.sNativeIDemSUIT ) ) return;

            if ( !
    GLGaeaClient::GetInstance().GetCharacter()->ACCEPT_ITEM sHoldItemCustom.sNativeID ) )
            {
                return;
            }

            
    // Å¸ÀÔÀÌ ´Ù¸£¸é
            
    if ( pHoldItem->sSuitOp.emSuit != emSUIT ) return;

            
    GLMSG::SNET_VEHICLE_REQ_HOLD_TO_SLOT NetMsg;
            
    NetMsg.emSuit emSUIT;
            
    NETSENDTOFIELD ( &NetMsg );
        }
        
    // SLOT -> HOLD
        
    else if ( sSlotItemCustom.sNativeID != NATIVEID_NULL() )
        {
            
    GLMSG::SNET_VEHICLE_REQ_SLOT_TO_HOLD NetMsg;
            
    NetMsg.emSuit emSUIT;
            
    NETSENDTOFIELD ( &NetMsg );
        }

        return;

    }



    void GLCharacter::ReqVehicleRemoveSlotItemEMSUIT emSUIT )
    {
        
    WORD wPosX(0), wPosY(0);
        
    SITEMCUSTOM    sSlotItemCustom m_sVehicle.GetSlotitembySuittype emSUIT );

        
    SITEMpSlotItem GLItemMan::GetInstance().GetItem sSlotItemCustom.sNativeID );
        if ( !
    pSlotItem 
        {
            
    // ÀϹݠ¿À·ù
            
    return;
        }

        
    BOOL bOk m_cInventory.FindInsrtable pSlotItem->sBasicOp.wInvenSizeXpSlotItem->sBasicOp.wInvenSizeYwPosXwPosY );
        if ( !
    bOk )
        {
            
    //    ÀιêÀÌ °¡µæÂþÀ½.
            
    return;
        }

        
    GLMSG::SNET_VEHICLE_REQ_REMOVE_SLOTITEM NetMsg;
        
    NetMsg.emSuit emSUIT;

        
    NETSENDTOFIELD ( &NetMsg );
    }

    void GLCharacter::ReqVehicleGiveBatteryWORD wPosXWORD wPosY )
    {
        
    // ºñȰ¼º »óÅ¿¡¼­µµ »ç·á¸¦ ÁÙ ¼ö ÀÖ´Ù.
        //if ( !IsVALID() )                            return;

        
    SINVENITEMpInvenItem m_cInventory.FindPosItem wPosXwPosY );
        if ( !
    pInvenItem ) return;

        
    wPosX pInvenItem->wPosX;
        
    wPosY pInvenItem->wPosY;

        
    SITEMpItem GLItemMan::GetInstance().GetItem pInvenItem->sItemCustom.sNativeID );
        if ( !
    pItem ) return;

        
    // ¹ÙÀÌŬ ¾ÆÀÌÅÛ ¿©ºÎ Ã¼Å©
        
    if ( pItem->sBasicOp.emItemType != ITEM_VEHICLE )    return;

        
    SITEMpHold GET_SLOT_ITEMDATA SLOT_HOLD );
        if ( !
    pHold ) return;

        
    // ¿¬·á ¿©ºÎ Ã¼Å©
        
    if ( pHold->sBasicOp.emItemType != ITEM_VEHICLE_OIL )    return;

        
    // ¹ÙÀÌŬ Á¤º¸°¡ ¾ø´Ù¸é Ãë¼Ò
        
    if ( pInvenItem->sItemCustom.dwVehicleID == ) return;



        
    SVEHICLEITEMINFO sVehicle;


        if ( !
    DxGlobalStage::GetInstance().IsEmulator() )
        {
            
    // ¹ÙÀÌŬ ¾ÆÀÌÅÛ Á¤º¸°¡ ¾øÀ¸¸é ¾ø´Â ¹ÙÀÌŬÀÌ´Ù.
            
    VEHICLEITEMINFO_MAP_ITER iter m_mapVEHICLEItemInfo.find pInvenItem->sItemCustom.dwVehicleID );
            if ( 
    iter==m_mapVEHICLEItemInfo.end() ) return;
            
    sVehicle = (*iter).second;
        }
        else
        {
            
    sVehicle.m_nFull  m_sVehicle.m_nFull;
            
    sVehicle.m_emTYPE m_sVehicle.m_emTYPE;
        }

        
    // ¿¬·á°¡ °¡µæÂ÷ ÀÖ´Ù¸é
        
    if ( sVehicle.m_nFull >= 1000 ) return;


        
    GLMSG::SNET_VEHICLE_REQ_GIVE_BATTERY NetMsg;
        
    NetMsg.wPosX wPosX;
        
    NetMsg.wPosY wPosY;

        
    NETSENDTOFIELD ( &NetMsg );
    }

    void GLCharacter::ReqVehicleInvenUpdate()
    {
        
    GLInventory::CELL_MAPpMapItem m_cInventory.GetItemList();
        
    GLInventory::CELL_MAP_CITER iter pMapItem->begin();
        
    GLInventory::CELL_MAP_CITER iter_end pMapItem->end();
        for ( ; 
    iter!=iter_end; ++iter )
        {
            
    SINVENITEMpInvenItem = (*iter).second;
            
    SITEMpItem GLItemMan::GetInstance().GetItem pInvenItem->sItemCustom.sNativeID );
            if ( 
    pItem && pItem->sBasicOp.emItemType == ITEM_VEHICLE && pInvenItem->sItemCustom.dwVehicleID != )
            {
                
    GLMSG::SNET_VEHICLE_REQ_ITEM_INFO NetMsg;
                
    NetMsg.dwVehicleID pInvenItem->sItemCustom.dwVehicleID;
                
    NETSENDTOFIELD ( &NetMsg );
            }
        }

        
    // ¹ÙÀÌŬ ¼ÒÀ¯ ¿©ºÎ Ã¼Å© 
        
    SITEMCUSTOMsItemCustom m_PutOnItems[SLOT_VEHICLE];
        if ( 
    sItemCustom.sNativeID != NATIVEID_NULL() )
        {
            
    SITEMpItem GLItemMan::GetInstance().GetItem sItemCustom.sNativeID );
            if ( 
    pItem && pItem->sBasicOp.emItemType == ITEM_VEHICLE && sItemCustom.dwVehicleID != )
            {
                
    GLMSG::SNET_VEHICLE_REQ_ITEM_INFO NetMsg;
                
    NetMsg.dwVehicleID sItemCustom.dwVehicleID;
                
    NETSENDTOFIELD ( &NetMsg );
            }
        }

        return;

    }

    void GLCharacter::ReqNonRebirthBOOL bNonRebirth )
    {
        
    GLMSG::SNET_NON_REBIRTH_REQ NetMsg;
        
    NetMsg.bNon_Rebirth bNonRebirth;
        
    NETSENDTOFIELD ( &NetMsg );
    }

    void GLCharacter::ReqQBoxEnableStatebool bQboxEnable )
    {
        
    GLMSG::SNET_QBOX_OPTION_REQ_AG NetMsg;
        
    NetMsg.bQBoxEnable bQboxEnable;
        
    NETSEND ( &NetMsg );
    }

    void GLCharacter::ReqItemShopOpenbool bOpen )        // ItemShop Open/Close Å뺸
    {
    //#if defined ( JP_PARAM ) || defined ( _RELEASED)    // JAPAN Item Shop //add itemshop icon
        
        
    if ( m_bItemShopOpen == bOpen )    return;
        
        
    GLMSG::SNETPC_OPEN_ITEMSHOP    NetMsg;
        
    NetMsg.bOpen bOpen;
        
    NETSENDTOFIELD( &NetMsg );
        
        
    m_bItemShopOpen bOpen;
        
        
    CItemShopIconManpShopIconMan CInnerInterface::GetInstance().GetItemShopIconMan();
        if ( !
    pShopIconMan ) return;

        if ( 
    m_bItemShopOpen )
        {
            
    pShopIconMan->ADD_SHOP_ICONm_dwGaeaID );
        }
        else
        {
            
    pShopIconMan->DEL_SHOP_ICONm_dwGaeaID );
        }

    //#endif
        
    return;
    }

    HRESULT GLCharacter::ReqAttendList bool bDay )
    {
        if ( 
    m_bReqAttendList && !bDay )    return S_OK;

        
    m_bReqAttendList true;

        
    //    Note : ¸Þ½ÃÁö Àü¼Û.
        
    GLMSG::SNETPC_REQ_ATTENDLIST NetMsg;
        
    NETSEND(&NetMsg);

        return 
    S_OK;
    }

    HRESULT GLCharacter::ReqAttendance()
    {
        
    //    °ÔÀÓÁ¢¼Ó½Ã°£ Ã¼Å©
        
    CTime cCurTime GLGaeaClient::GetInstance().GetCurrentTime();
        
    CTime cDayTimecCurTime.GetYear(), cCurTime.GetMonth(), cCurTime.GetDay(),0,0,);
        
    CTime cLoginTime;
        if ( 
    m_tAttendLogin cDayTime.GetTime()  ) cLoginTime cDayTime;
        else 
    cLoginTime m_tAttendLogin;

        
    CTimeSpan cGameTime cCurTime cLoginTime;
        if ( 
    cGameTime.GetTotalMinutes() < m_dwAttendTime 
        {
            
    CInnerInterface::GetInstance().PrintMsgText NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("EMREQ_ATTEND_FB_ATTENTIME"),m_dwAttendTime );
            return 
    S_FALSE;
        }

        
    //    Note : ¸Þ½ÃÁö Àü¼Û.
        
    GLMSG::SNETPC_REQ_ATTENDANCE NetMsg;
        
    NETSEND(&NetMsg);

        return 
    S_OK;
    }


    HRESULT GLCharacter::InvenUseTaxiCardWORD wPosXWORD wPosY )
    {
        
    SINVENITEMpInvenItem m_cInventory.FindPosItem wPosXwPosY );
        if ( !
    pInvenItem )    return E_FAIL;

        
    wPosX pInvenItem->wPosX;
        
    wPosY pInvenItem->wPosY;

        
    SITEMpItem GLItemMan::GetInstance().GetItem pInvenItem->sItemCustom.sNativeID );
        if ( !
    pItem )
        {
            
    CInnerInterface::GetInstance().PrintMsgTextDlg NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("EMTAXI_TAKE_TICKET") );
            return 
    E_FAIL;
        }

        
    CInnerInterface::GetInstance().OPEN_TAXI_WINDOWwPosXwPosY );

        return 
    S_OK;
    }

    HRESULT GLCharacter::InvenUseNpcRecallWORD wPosXWORD wPosY )
    {
        
    SINVENITEMpInvenItem m_cInventory.FindPosItem wPosXwPosY );
        if ( !
    pInvenItem )
        {
            
    CInnerInterface::GetInstance().PrintMsgText NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("EMREQ_NPC_RECALL_FB_NOITEM") );
            return 
    E_FAIL;
        }

        
    wPosX pInvenItem->wPosX;
        
    wPosY pInvenItem->wPosY;

        
    SITEMpItem GLItemMan::GetInstance().GetItem pInvenItem->sItemCustom.sNativeID );
        if ( !
    pItem )
        {
            
    CInnerInterface::GetInstance().PrintMsgText NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("EMREQ_NPC_RECALL_FB_NOITEM") );
            return 
    E_FAIL;
        }


        
    //    ¼­¹ö ¿äû

        
    GLMSG::SNET_INVEN_NPC_RECALL NetMsg;
        
    NetMsg.wPosX wPosX;
        
    NetMsg.wPosY wPosY;
        
    NETSENDTOFIELD ( &NetMsg );

        return 
    S_OK;
    }

    HRESULT GLCharacter::ReqItemMixDWORD dwNpcID )
    {
        
    SINVENITEM    sInvenItem[ITEMMIX_ITEMNUM];
        for ( 
    int i =0ITEMMIX_ITEMNUM; ++)
        {
            
    sInvenItem[i].sItemCustom GET_ITEM_MIX);
            
    sInvenItem[i].wPosX m_sItemMixPos[i].wPosX;
            
    sInvenItem[i].wPosY m_sItemMixPos[i].wPosY;
        }

        if ( !
    sInvenItem ) return E_FAIL;


        
    GLItemMixMan::GetInstance().SortInvenItemsInvenItem );    

        
    ITEM_MIX sItemMix;
        for( 
    int i 0ITEMMIX_ITEMNUM; ++
        {
            
    sItemMix.sMeterialItem[i].sNID GET_ITEM_MIX).sNativeID;
            
            if( 
    sItemMix.sMeterialItem[i].sNID != NATIVEID_NULL() )
                
    sItemMix.sMeterialItem[i].nNum GET_ITEM_MIX).wTurnNum;
            if ( 
    sItemMix.sMeterialItem[i].sNID != sInvenItem[i].sItemCustom.sNativeID ) return E_FAIL;
        }

        
    GLItemMixMan::GetInstance().SortMeterialItemsItemMix );
        const 
    ITEM_MIXpItemMix GLItemMixMan::GetInstance().GetItemMixsItemMix );
        
        if ( !
    pItemMix 
        {
            
    //    ¾ø´Â ¾ÆÀÌÅÛ Á¶ÇÕ
            
    CInnerInterface::GetInstance().PrintMsgText NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("EMITEM_MIX_FB_NOMIX") );
            
    CInnerInterface::GetInstance().SetItemMixResultID2GAMEINTEXT("EMITEM_MIX_FB_NOMIX") );
            return 
    E_FAIL;
        }

        if ( 
    m_lnMoney sItemMix.dwPrice 
        {
            
    //    ±Ý¾× ¾øÀ½
            
    CInnerInterface::GetInstance().PrintMsgText NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("EMITEM_MIX_FB_NOMONEY") );
            
    CInnerInterface::GetInstance().SetItemMixResultID2GAMEINTEXT("EMITEM_MIX_FB_NOMONEY") );
            return 
    E_FAIL;
        }

        
    GLMSG::SNET_INVEN_ITEM_MIX sNetMsg;

        
    sNetMsg.dwKey pItemMix->dwKey;
        for ( 
    int i 0ITEMMIX_ITEMNUM; ++)
        {
            
    sNetMsg.sInvenPos[i].wPosX sInvenItem[i].wPosX;
            
    sNetMsg.sInvenPos[i].wPosY sInvenItem[i].wPosY;
        }
        
    sNetMsg.dwNpcID dwNpcID;

        
    NETSENDTOFIELD( &sNetMsg );

        return 
    S_OK;
    }

    HRESULT GLCharacter::ReqGathering( const STARGETIDsTargetID )
    {
        
    PLANDMANCLIENT pLAND GLGaeaClient::GetInstance().GetActiveMap();
        if ( !
    pLAND )    return E_FAIL;

        {
            
    //    Note : ¸Þ½ÃÁö ¼Û½ÅÀü¿¡ À¯È¿ÇÒÁö¸¦ ¹Ì¸® °Ë»çÇÔ.
            //
            // »ç¸ÁÈ®ÀÎ
            
    if ( !IsValidBody() )    return E_FAIL;
            if ( 
    IsACTIONGLAT_GATHERING ) )    return E_FAIL;

            
    //    °Å¸® Ã¼Å©
            
    const D3DXVECTOR3 &vTarPos sTargetID.vPos;

            
    //    °Å¸® Ã¼Å©
            
    D3DXVECTOR3 vPos;
            
    vPos m_vPos;

            
    D3DXVECTOR3 vDistance vPos vTarPos;
            
    float fDistance D3DXVec3Length ( &vDistance );

            
    WORD wTarBodyRadius 4;
            
    WORD wGatherRange wTarBodyRadius GETBODYRADIUS() + 2;
            
    WORD wGatherAbleDis wGatherRange 10;

            if ( 
    fDistance>wGatherAbleDis )
            {
                
    CInnerInterface::GetInstance().PrintMsgTextNS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("EMREQ_GATHER_FB_DISTANCE") );            
                return 
    E_FAIL;
            }

            if ( 
    sTargetID.emCrow!=CROW_MATERIAL )    
            {
                
    CInnerInterface::GetInstance().PrintMsgTextNS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("EMREQ_GATHER_FB_NOTTYPE") );            
                return 
    E_FAIL;
            }
            
            
    PGLMATERIALCLIENT pMaterial pLAND->GetMaterialsTargetID.dwID );
            if ( !
    pMaterial )
            {
                
    CInnerInterface::GetInstance().PrintMsgTextNS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("EMGATHER_FB_NOCROW") );            
                return 
    E_FAIL;        
            }

            
    //    ¸Þ½ÃÁö ¹ß»ý.
            
    GLMSG::SNETPC_REQ_GATHERING NetMsg;
            
    NetMsg.dwTargetID sTargetID.dwID;
            
    NETSENDTOFIELD ( &NetMsg );
        }

        return 
    S_OK;
    }

    HRESULT GLCharacter::ReqCancelGathering()
    {

        
    CInnerInterface::GetInstance().HideGroupGATHER_GAUGE );
        return 
    S_OK;
    }
    HRESULT GLCharacter::ReqSortItem ()
    {
        
    /*
        if ( ValidWindowOpen() )                                                        return E_FAIL;    
        if ( IsACTION(GLAT_ATTACK) || IsACTION(GLAT_SKILL) ||  m_sPMarket.IsOpen() )    return E_FAIL;

        int nIndex = 0;
        GLMSG::SNETPC_REQ_HOLD_ARRAY NetMsg;
        for( int y = 0; y < 10; y++ )
        {
            for( int x = 0; x < 6; x++ )
            {
                SINVENITEM& ref_InvenItem = CInnerInterface::GetInstance().GetInventoryWindow()->GetInventoryPage()->GetItem ( x, y );
                if ( ref_InvenItem.sItemCustom.sNativeID != NATIVEID_NULL() )
                {
                    SITEM* pItem = GLItemMan::GetInstance().GetItem ( ref_InvenItem.sItemCustom.sNativeID );
                    if ( pItem ) 
                    {
                        //CInnerInterface::GetInstance().PrintMsgTextDlg(NS_UITEXTCOLOR::WHITE,"1 %d",nIndex);
                        SINVENITEM* pInvenItem = m_cInventory.FindPosItem ( x, y );
                        NetMsg.wPosX[nIndex] = pInvenItem->wPosX;
                        NetMsg.wPosY[nIndex] = pInvenItem->wPosY;
                    }
                    else
                    {
                        //CInnerInterface::GetInstance().PrintMsgTextDlg(NS_UITEXTCOLOR::WHITE,"2 %d",nIndex);
                        
                        NetMsg.wPosX[nIndex] = -1;
                        NetMsg.wPosY[nIndex] = -1;
                    }
                    nIndex++;
                    
                //CInnerInterface::GetInstance().PrintMsgTextDlg(NS_UITEXTCOLOR::WHITE,"3 %d",nIndex);
                }
                
                //CInnerInterface::GetInstance().PrintMsgTextDlg(NS_UITEXTCOLOR::WHITE,"4 %d",nIndex);        
            }
        }
        NETSENDTOFIELD ( &NetMsg );
        
        GLMSG::SNETPC_REQ_HOLDARRAY_TO_INVEN NetMsg2;
        NETSENDTOFIELD ( &NetMsg2 );

        */
        
    return S_OK;
    }

    //link skill
    void GLCharacter::ReqLinkSkillSNATIVEID sSKILLIDWORD wLevel )
    {
        if ( 
    sSKILLID == NATIVEID_NULL())                        return;

        
    PGLSKILL pSkill GLSkillMan::GetInstance().GetData sSKILLID.wMainIDsSKILLID.wSubID );
        if ( !
    pSkill )                                            return;

        
    GLMSG::SNETPC_REQ_LINKSKILLEFF NetMsg;
        
    NetMsg.sSKILLID sSKILLID;
        
    NetMsg.wSKILLLevel wLevel;
        
    bool bFound false;
        for( 
    int i 0SKILLFACT_SIZEi++ )
        {
            
    SSKILLFACT sEFF m_sSKILLFACT[i];
            if ( 
    sEFF.sNATIVEID == NATIVEID_NULL() || sEFF.sNATIVEID == sSKILLID )
            {
                
    bFound true;
                
    NetMsg.dwSelect i;
                break;
            }
        }
        if ( 
    bFound )    NETSENDTOFIELD ( &NetMsg );
    }

    //dmk14 | 12-9-16 | item compound
    HRESULT GLCharacter::ReqItemCompoundDWORD dwKey )
    {
        const 
    ITEM_MIXpItemMix GLItemMixMan::GetInstance().GetItemMixdwKeytrue );
        if ( !
    pItemMix 
        {
            
    //    ¾ø´Â ¾ÆÀÌÅÛ Á¶ÇÕ
            
    CInnerInterface::GetInstance().PrintMsgText NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("EMITEM_MIX_FB_NOMIX") );
            
    CInnerInterface::GetInstance().SetItemMixResultID2GAMEINTEXT("EMITEM_MIX_FB_NOMIX") );
            return 
    E_FAIL;
        }

        if ( 
    m_lnMoney pItemMix->dwPrice 
        {
            
    //    ±Ý¾× ¾øÀ½
            
    CInnerInterface::GetInstance().PrintMsgText NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("EMITEM_MIX_FB_NOMONEY") );
            
    CInnerInterface::GetInstance().SetItemMixResultID2GAMEINTEXT("EMITEM_MIX_FB_NOMONEY") );
            return 
    E_FAIL;
        }

        
    GLMSG::SNET_INVEN_ITEM_COMPOUND sNetMsg;

        
    sNetMsg.dwKey pItemMix->dwKey;
        
    NETSENDTOFIELD( &sNetMsg );

        return 
    S_OK;
    }
    HRESULT GLCharacter::ReqWrapWORD wPosXWORD wPosY // wrapper
    {
        if ( !
    IsValidBody() )                        
            return 
    E_FAIL;

        if ( 
    GLTradeClient::GetInstance().Valid() )    
            return 
    E_FAIL;

        
    SINVENITEMpInvenItem m_cInventory.FindPosItem wPosXwPosY );
        if ( !
    pInvenItem )    
            return 
    E_FAIL;

        
    wPosX pInvenItem->wPosX;
        
    wPosY pInvenItem->wPosY;

        
    SITEMpItem GLItemMan::GetInstance().GetItem pInvenItem->sItemCustom.sNativeID );
        if ( !
    pItem )            
            return 
    E_FAIL;

        if ( 
    pInvenItem->sItemCustom.IsWrap() )
            return 
    S_FALSE;

        
    // TODO : What items can only be wrapped 
        
    if ( pItem->sBasicOp.emItemType != ITEM_SUIT )
            return 
    S_FALSE;

        if ( 
    pItem->sBasicOp.emItemType == ITEM_SUIT )
        {
            if ( 
    pItem->sSuitOp.emSuit SUIT_HANDHELD )
                return 
    S_FALSE;
        }

        
    SITEMpHold GET_SLOT_ITEMDATA SLOT_HOLD );
        if ( !
    pHold )    
            return 
    S_FALSE;

        if ( 
    pHold->sBasicOp.emItemType != ITEM_WRAPPER )    
            return 
    S_FALSE;

        
    GLMSG::SNET_INVEN_WRAP NetMsg;
        
    NetMsg.wPosX wPosX;
        
    NetMsg.wPosY wPosY;

        
    NETSENDTOFIELD ( &NetMsg );

        return 
    S_OK;
    }

    HRESULT GLCharacter::ReqRemoveWrapWORD wPosXWORD wPosY // wrapper
    {
        if ( !
    IsValidBody() )                        
            return 
    E_FAIL;

        if ( 
    GLTradeClient::GetInstance().Valid() )    
            return 
    E_FAIL;

        
    SINVENITEMpInvenItem m_cInventory.FindPosItem wPosXwPosY );
        if ( !
    pInvenItem )    
            return 
    E_FAIL;

        
    wPosX pInvenItem->wPosX;
        
    wPosY pInvenItem->wPosY;

        
    SITEMpItem GLItemMan::GetInstance().GetItem pInvenItem->sItemCustom.sNativeID );
        if ( !
    pItem )            
            return 
    E_FAIL;

        if ( !
    pInvenItem->sItemCustom.IsWrap() )
            return 
    S_FALSE;

        
    GLMSG::SNET_INVEN_REMOVE_WRAP NetMsg;
        
    NetMsg.wPosX wPosX;
        
    NetMsg.wPosY wPosY;

        
    NETSENDTOFIELD ( &NetMsg );

        return 
    S_OK;
    }
    HRESULT GLCharacter::ReqNonDropWORD wPosXWORD wPosY //nondrop card Eduj
    {
        if ( !
    IsValidBody() )                        
            return 
    E_FAIL;

        if ( 
    GLTradeClient::GetInstance().Valid() )    
            return 
    E_FAIL;

        
    SINVENITEMpInvenItem m_cInventory.FindPosItem wPosXwPosY );
        if ( !
    pInvenItem )    
            return 
    E_FAIL;

        
    wPosX pInvenItem->wPosX;
        
    wPosY pInvenItem->wPosY;

        
    SITEMpItem GLItemMan::GetInstance().GetItem pInvenItem->sItemCustom.sNativeID );
        if ( !
    pItem )            
            return 
    E_FAIL;


        if ( 
    pItem->sBasicOp.emItemType != ITEM_SUIT )
            return 
    S_FALSE;


        
    SITEMpHold GET_SLOT_ITEMDATA SLOT_HOLD );
        if ( !
    pHold )    
            return 
    S_FALSE;

        
    bool bNonDrop(false);
        
    bool bDrop(false);

        if ( 
    pHold->sBasicOp.emItemType == ITEM_NONDROP_CARD )  bNonDrop true;
        
    //if ( pHold->sBasicOp.emItemType == ITEM_DROP_CARD ) bDrop = true;
        //if ( !bNonDrop ) return S_FALSE;

        
    if ( !pItem->sBasicOp.IsTHROW() ||  pInvenItem->sItemCustom.IsNonDrop() )
        {
            if ( 
    bNonDrop )
            {
              
    CInnerInterface::GetInstance().PrintMsgText NS_UITEXTCOLOR::DISABLE"Item is already Nondropable." );
              return 
    S_FALSE
            }
        }



        
    GLMSG::SNET_INVEN_NONDROP NetMsg;
        
    NetMsg.wPosX wPosX;
        
    NetMsg.wPosY wPosY;

        
    NETSENDTOFIELD ( &NetMsg );

        return 
    S_OK;
    }
    HRESULT GLCharacter::ReqRemoveNonDropWORD wPosXWORD wPosY //nondrop card Eduj
    {
        if ( !
    IsValidBody() )                        
            return 
    E_FAIL;

        if ( 
    GLTradeClient::GetInstance().Valid() )    
            return 
    E_FAIL;

        
    SINVENITEMpInvenItem m_cInventory.FindPosItem wPosXwPosY );
        if ( !
    pInvenItem )    
            return 
    E_FAIL;

        
    wPosX pInvenItem->wPosX;
        
    wPosY pInvenItem->wPosY;

        
    SITEMpItem GLItemMan::GetInstance().GetItem pInvenItem->sItemCustom.sNativeID );
        if ( !
    pItem )            
            return 
    E_FAIL;


        if ( 
    pItem->sBasicOp.emItemType != ITEM_SUIT )
            return 
    S_FALSE;

        if ( !
    pInvenItem->sItemCustom.IsNonDrop() )
        {
            
    CInnerInterface::GetInstance().PrintMsgText NS_UITEXTCOLOR::DISABLE"Item is already Dropable." );
        }


        
    SITEMpHold GET_SLOT_ITEMDATA SLOT_HOLD );
        if ( !
    pHold )    
            return 
    S_FALSE;


        
    GLMSG::SNET_INVEN_REMOVE_NONDROP NetMsg;
        
    NetMsg.wPosX wPosX;
        
    NetMsg.wPosY wPosY;

        
    NETSENDTOFIELD ( &NetMsg );

        return 
    S_OK;
    }
    HRESULT GLCharacter::ReqInvenSchoolChange WORD wSchool // Added by mharlon
    {
        
    GLMSG::SNETPC_INVEN_SCHOOL_CHANGE NetMsg;
        
    NetMsg.wPosX      m_wInvenPosX1;
        
    NetMsg.wPosY      m_wInvenPosY1;
        
    NetMsg.wSchool wSchool;
        
    NETSENDTOFIELD ( &NetMsg );

        
    m_wInvenPosX1 0;
        
    m_wInvenPosY1 0;

        return 
    S_OK;
    }
    //Change School
    HRESULT GLCharacter::InvenSchoolChangeSG WORD wPosXWORD wPosY )
    {
        
    //if ( !IsValidBody() )                        return E_FAIL;
        //if ( GLTradeClient::GetInstance().Valid() )    return E_FAIL;
        //if( ValidRebuildOpen() )    return E_FAIL;    // ITEMREBUILD_MARK

        
    SINVENITEMpInvenItem m_cInventory.FindPosItem wPosXwPosY );
        if ( !
    pInvenItem )    return E_FAIL;

        
    SITEMpItem GLItemMan::GetInstance().GetItem pInvenItem->sItemCustom.sNativeID );
        if ( !
    pItem )
        {
            
    CInnerInterface::GetInstance().PrintMsgText NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("EMINVEN_SCHOOL_CHANGE_FB_NOITEM") );
            return 
    E_FAIL;
        }

        if ( 
    pItem->sBasicOp.emItemType == ITEM_SCHOOL_CHANGE_SG && m_wSchool == 0)
        {
            
    CInnerInterface::GetInstance().PrintMsgText NS_UITEXTCOLOR::DISABLE"You are already in Sacred Gate School" );
            return 
    E_FAIL;
        }


        
    DoModal"Are you sure do you want to transfer in Sacred Gate School?"MODAL_INFOMATIONYESNOMODAL_SCHOOL_CHANGE_SG );

        
    m_wInvenPosX1 wPosX;
        
    m_wInvenPosY1 wPosY;

        return 
    S_OK;
    }
    HRESULT GLCharacter::InvenSchoolChangeMP WORD wPosXWORD wPosY )
    {
        
    //if ( !IsValidBody() )                        return E_FAIL;
        //if ( GLTradeClient::GetInstance().Valid() )    return E_FAIL;
        //if( ValidRebuildOpen() )    return E_FAIL;    // ITEMREBUILD_MARK

        
    SINVENITEMpInvenItem m_cInventory.FindPosItem wPosXwPosY );
        if ( !
    pInvenItem )    return E_FAIL;

        
    SITEMpItem GLItemMan::GetInstance().GetItem pInvenItem->sItemCustom.sNativeID );
        if ( !
    pItem )
        {
            
    CInnerInterface::GetInstance().PrintMsgText NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("EMINVEN_SCHOOL_CHANGE_FB_NOITEM") );
            return 
    E_FAIL;
        }

        if ( 
    pItem->sBasicOp.emItemType == ITEM_SCHOOL_CHANGE_MP && m_wSchool == 1)
        {
            
    CInnerInterface::GetInstance().PrintMsgText NS_UITEXTCOLOR::DISABLE"You are already in Mystic Peak School" );
            return 
    E_FAIL;
        }


        
    DoModal"Are you sure do you want to transfer in Mystic Peak School?"MODAL_INFOMATIONYESNOMODAL_SCHOOL_CHANGE_MP );

        
    m_wInvenPosX1 wPosX;
        
    m_wInvenPosY1 wPosY;

        return 
    S_OK;
    }
    HRESULT GLCharacter::InvenSchoolChangePH WORD wPosXWORD wPosY )
    {
        
    //if ( !IsValidBody() )                        return E_FAIL;
        //if ( GLTradeClient::GetInstance().Valid() )    return E_FAIL;
        //if( ValidRebuildOpen() )    return E_FAIL;    // ITEMREBUILD_MARK

        
    SINVENITEMpInvenItem m_cInventory.FindPosItem wPosXwPosY );
        if ( !
    pInvenItem )    return E_FAIL;

        
    SITEMpItem GLItemMan::GetInstance().GetItem pInvenItem->sItemCustom.sNativeID );
        if ( !
    pItem )
        {
            
    CInnerInterface::GetInstance().PrintMsgText NS_UITEXTCOLOR::DISABLEID2GAMEINTEXT("EMINVEN_SCHOOL_CHANGE_FB_NOITEM") );
            return 
    E_FAIL;
        }

        if ( 
    pItem->sBasicOp.emItemType == ITEM_SCHOOL_CHANGE_PH && m_wSchool == 2)
        {
            
    CInnerInterface::GetInstance().PrintMsgText NS_UITEXTCOLOR::DISABLE"You are already in Phoenix School" );
            return 
    E_FAIL;
        }


        
    DoModal"Are you sure do you want to transfer in Phoenix School?"MODAL_INFOMATIONYESNOMODAL_SCHOOL_CHANGE_PH );

        
    m_wInvenPosX1 wPosX;
        
    m_wInvenPosY1 wPosY;

        return 
    S_OK;


  9. #264
    Member captainboy95 is offline
    MemberRank
    Feb 2018 Join Date
    78Posts

    Re: Urban Gaming Client/Database/Source Code Only

    Quote Originally Posted by sadlove92 View Post
    you need tyranny cfg at glogicserver.rcc
    if you don't have it tyranny will defaul id 0,0 is id map for tyranny. use cmd to enter that map .you will see tyranny info same with tyranny at normal map
    did u mean it because of my glogicserver that i cant enter SG school ?
    anyone have fix this "you are unable to enter this area" please help me T_T

  10. #265
    -sad- sadlove92 is offline
    MemberRank
    Feb 2013 Join Date
    Earth 615 - VNLocation
    449Posts

    Re: Urban Gaming Client/Database/Source Code Only

    need tyranny.ini or something cfg your tyranny .
    name of that file from defaulcharclass

  11. #266
    Member captainboy95 is offline
    MemberRank
    Feb 2018 Join Date
    78Posts

    Re: Urban Gaming Client/Database/Source Code Only

    Quote Originally Posted by sadlove92 View Post
    need tyranny.ini or something cfg your tyranny .
    name of that file from defaulcharclass
    i already did it but it same .. can u share ur glogic and glogicserver please

  12. #267
    -sad- sadlove92 is offline
    MemberRank
    Feb 2013 Join Date
    Earth 615 - VNLocation
    449Posts

    Re: Urban Gaming Client/Database/Source Code Only

    i don't use this client, you should check lev file, maplist also tyranny file at defaultchar( try to remove it )

  13. #268
    Enthusiast akoikaw2323 is offline
    MemberRank
    Feb 2019 Join Date
    41Posts

    Re: Urban Gaming Client/Database/Source Code Only

    Guys... How to edit the Error log.
    i want to remove the urban gaming networks.
    and facebook link.
    and how to remove or disable the folder after closing the game?


  14. #269
    Account Upgraded | Title Enabled! LUPIN III is offline
    MemberRank
    Dec 2012 Join Date
    Ran PlanetLocation
    1,127Posts

    Re: Urban Gaming Client/Database/Source Code Only

    @akoikaw2323

    look at the SubPath.cpp and debugset.cpp edit there ;)

  15. #270
    Account Upgraded | Title Enabled! aizen00 is offline
    MemberRank
    Feb 2019 Join Date
    511Posts

    Re: Urban Gaming Client/Database/Source Code Only

    @Caspian what do you mean nothing i just saw it :3 //Ocram - Operation tokhang sa mga items pag lumagpas sa max RV Hahahaha! 7-16-2017 if ( pInvenItem->sItemCustom.GETOptVALUE(EMR_OPT_ATTACK_VOL) >= 101 )//attack direct value - Ocram Networks { return S_FALSE; } if ( pInvenItem->sItemCustom.GETOptVALUE(EMR_OPT_DEFENSE_VOL) >= 101 )//def direct value - Ocram Networks { return S_FALSE; } if ( pInvenItem->sItemCustom.GETOptVALUE(EMR_OPT_MELEE) >= 101 )//meleee direct value - Ocram Networks { return S_FALSE; } if ( pInvenItem->sItemCustom.GETOptVALUE(EMR_OPT_SHOOTING) >= 101 )//shooting direct value - Ocram Networks { return S_FALSE; } if ( pInvenItem->sItemCustom.GETOptVALUE(EMR_OPT_VITALITY) >= 151)//Vit direct value - Ocram Networks { return S_FALSE; } if ( pInvenItem->sItemCustom.GETOptVALUE(EMR_OPT_DAMAGE) >= 10.01 )//Damage rate percentage - Ocram Networks { return S_FALSE; } if ( pInvenItem->sItemCustom.GETOptVALUE(EMR_OPT_AVOID_VOL) >= 31 )//avoid direct value - Ocram Networks { return S_FALSE; } if ( pInvenItem->sItemCustom.GETOptVALUE(EMR_OPT_HIT_VOL) >= 31 )//hitrate direct value - Ocram Networks { return S_FALSE; } if ( pInvenItem->sItemCustom.GETOptVALUE(EMR_OPT_RESIST) >= 21 )//resist - Ocram Networks { return S_FALSE; } GLMSG::SNETPC_REQ_INVEN_TO_HOLD NetMsg; NetMsg.wPosX = pInvenItem->wPosX; NetMsg.wPosY = pInvenItem->wPosY; NETSENDTOFIELD ( &NetMsg ); if ( J == SLOT_RHAND ) { J = GetCurRHand(); } if ( J == SLOT_LHAND ) { J = GetCurLHand(); } bool bEMPTY_SLOT = ISEMPTY_SLOT(pInvenItem->sItemCustom.sNativeID,J); if (!bEMPTY_SLOT) { GLMSG::SNETPC_REQ_SLOT_EX_HOLD NetMsgEquip; NetMsgEquip.emSlot = J; NETSENDTOFIELD ( &NetMsgEquip ); GLMSG::SNETPC_REQ_HOLD_TO_INVEN NetMsgToInven; NetMsgToInven.wPosX = wPosX; NetMsgToInven.wPosY = wPosY; #if defined(VN_PARAM) NetMsgToInven.bUseVietnamInven = sCustom.bVietnamGainItem; #else NetMsgToInven.bUseVietnamInven = FALSE; #endif NETSENDTOFIELD ( &NetMsgToInven ); } else { GLMSG::SNETPC_REQ_HOLD_TO_SLOT NetMsgEquip; NetMsgEquip.emSlot = J; NETSENDTOFIELD ( &NetMsgEquip ); } return S_OK; }
    it's in the glcharactorreq :3



Advertisement