[Share] CryptionRCC Source Code (for source developer).

Page 5 of 5 FirstFirst 12345
Results 61 to 66 of 66
  1. #61
    Member m0nst3r12345 is offline
    MemberRank
    Sep 2016 Join Date
    95Posts

    Re: [Share] CryptionRCC Source Code (for source developer).

    Re.upload files please...dead link...thanks

  2. #62
    Registered ediwow is offline
    MemberRank
    Nov 2019 Join Date
    21Posts

    Re: [Share] CryptionRCC Source Code (for source developer).

    good day ragezone! .. anyone please kindly re-upload those have back up of this files thanks advanced!

  3. #63
    Ultimate Member calibur17 is offline
    MemberRank
    Mar 2011 Join Date
    175Posts

    Re: [Share] CryptionRCC Source Code (for source developer).

    Please reupload files.

  4. #64
    Ultimate Member newbiedeveloper is offline
    MemberRank
    Mar 2017 Join Date
    178Posts

    Re: [Share] CryptionRCC Source Code (for source developer).

    Quote Originally Posted by AsenDURE View Post
    CryptionRCC Source Code



    Screenshot :



    Few editing needed, see post below :

    find : '//add crypt' then add the code


    SerialMemory.cpp
    Code:
    #include "stdafx.h"
    #include "./SerialMemory.h"
    #include "./CompByte.h"
    #include "./Unzipper.h"
    #include "./SFileSystem.h"
    #include "../enginelib/G-Logic/GLogic.h"
    #include "../enginelib/Crypt.h"//add crypt
    
    #ifdef _DEBUG
    #define new DEBUG_NEW
    #endif
    
    CSerialMemory::CSerialMemory(void) 
        : m_pBuffer(NULL)
        , m_nBufSize(0)
        , m_dwOffSet(0)
    {
    }
    
    CSerialMemory::CSerialMemory ( const char *_szZipFileName, const char *_szFileName, bool bencode ) 
        : m_pBuffer(NULL)
        , m_nBufSize(0)
        , m_dwOffSet(0)
    {
        GASSERT(_szFileName);
        GASSERT(_szZipFileName);
    
        OpenFile ( _szZipFileName, _szFileName, bencode );
    }
    
    CSerialMemory::~CSerialMemory(void)
    {
        CloseFile ();
    }
    
    void CSerialMemory::GetFileType ( char *szFileType, int nStrLen, DWORD &FileID )
    {
        StringCchCopy( szFileType, nStrLen, m_szFileType );
        FileID = m_FileID;
    }
    
    void CSerialMemory::CloseFile ()
    {
        if ( m_pBuffer )
        {
            delete[] m_pBuffer;
            m_pBuffer = NULL;
        } // if ( m_pBuffer )
    
        m_DefaultOffSet = 0;
        m_nBufSize = 0;
        m_dwOffSet = 0;
        m_IsFileOpened = FALSE;
        m_FileID = 0;
    }
    
    BOOL CSerialMemory::OpenFile (    const char *_szZipFileName, 
                                    const char *_szFileName, 
                                    bool bencode, 
                                    BOOL bPack )
    {
        //GASSERT(_szFileName);
        //GASSERT(_szZipFileName);
        if( !_szFileName || !_szZipFileName ) return FALSE;
    
        // 捞固 凯妨 乐阑锭 颇老 摧澜.
        if( IsOpen() ) CloseFile ();
    
        if( bPack )
        {
            CString strPath;
            strPath = _szZipFileName;
            strPath += _szFileName;
    
            SFileHandle * pFileHandle = GLOGIC::sFileSystem.OpenFile( strPath );
            if( pFileHandle )
            {
                FILECONTEXT * pFileContext = pFileHandle->GetFileContext();
                if( pFileContext )
                {
                    BYTE buffer[4096]={0};
                    DWORD dwRead;
    
                    m_nBufSize = 0;
                    m_pBuffer = new BYTE[pFileContext->lUncompressSize];
    
                    do
                    {
                        dwRead = pFileHandle->Read( buffer, 4096 );
                        
                        memcpy( m_pBuffer+m_nBufSize, buffer, dwRead );
                        m_nBufSize += dwRead;
                    }
                    while(dwRead > 0);
                }
    
                GLOGIC::sFileSystem.CloseFile( pFileHandle );
            }
        }
        else
        {
            CUnzipper cUnzip;
            m_nBufSize = cUnzip.UnzipToMemory( _szZipFileName, _szFileName, m_pBuffer );
        }
    
        // note :    颇老 荤捞令啊 呈公 目档 UINT_MAX啊 逞绢 咳. 距 17皋啊.
        //            颇老阑 1捞扼档 佬菌促绰吧 犬脚且荐 乐唱?
        if( m_nBufSize == UINT_MAX || m_nBufSize == 0)
            return FALSE;
    
        m_OpenType = FOT_READ;
        m_bencode = bencode;
        StringCchCopy ( m_szFileName, _MAX_FNAME, _szFileName );
        StringCchCopy ( m_szZipFileName, _MAX_PATH, _szZipFileName );
    
        if ( CCrypt::bCryptRCC )//add crypt
        {
            CCrypt::Decryption( (BYTE*) m_pBuffer , m_nBufSize );
        }
    
        //if( m_bencode )
        //{
        //    int nVersion;
        //    memcpy( &nVersion, m_pBuffer, sizeof(int) );
        //    if( nVersion > 0 && CRijndael::VERSION >= nVersion )
        //    {
        //        m_nVersion = nVersion;
        //        m_oRijndael.Initialize( CRijndael::sm_Version[nVersion-1], CRijndael::DEFAULT_KEY_LENGTH );
    
        //        m_nBufSize -= sizeof(int);
        //        memcpy( m_pBuffer, m_pBuffer+sizeof(int), m_nBufSize );
        //        
        //        m_oRijndael.DecryptEx( (char*)m_pBuffer, m_nBufSize );
        //    }
        //}
    
        ReadFileType ();
    
        m_IsFileOpened = TRUE;
        return TRUE;
    }
    
    void CSerialMemory::ReadFileType ()
    {
        int Num = 0;
    
        Num = (int)read( &m_szFileType, sizeof( char )*FILETYPESIZE );
        Num = (int)read( &m_FileID, sizeof( DWORD ) );
    
        m_DefaultOffSet = m_dwOffSet;
    }
    
    DWORD CSerialMemory::ReadBlockSize ()
    {
        DWORD dwSize;
        *this >> dwSize;
        return dwSize;
    }
    
    inline size_t CSerialMemory::read ( void* pbuffer, DWORD dwSize )
    {
        GASSERT(m_nBufSize&&"CSerialMemory::read()");
        GASSERT(pbuffer&&"CSerialMemory::read()");
        
        if ( (m_dwOffSet+dwSize) > m_nBufSize )        return 0;
    
        memcpy( pbuffer, m_pBuffer + m_dwOffSet, dwSize );
        m_dwOffSet += dwSize;
    
        if ( m_bencode )
        {
            //if( m_nVersion == -1 )
            //{
                compbyte::decode ( (BYTE*)pbuffer, dwSize );
            //}
        }
    
        // 喊 狼固绝绰 蔼
        return 1;
    }
    
    BOOL CSerialMemory::ReadBuffer ( void* pBuffer, DWORD Size )
    {
        GASSERT(pBuffer);
    
        int Num = 0;
    
        Num = (int)read ( pBuffer, Size );
    
        return TRUE;
    }
    
    // Note : SerialFile狼 扁夯 颇老 HEADER康开阑 力寇茄 镑 何磐.
    //        0 - Position.
    //
    BOOL CSerialMemory::SetOffSet ( long _OffSet )
    {
        m_dwOffSet = _OffSet + m_DefaultOffSet;
        if( m_dwOffSet < 0 )
            return FALSE;
        
        return TRUE;
    }
    
    //    Note : 颇老狼 m_DefaultOffSet甫 力寇茄 泅力 困摹甫 啊廉柯促.
    //
    long CSerialMemory::GetfTell ()
    {
        return m_dwOffSet - m_DefaultOffSet;
    }
    
    BOOL CSerialMemory::BeginBlock ( EMSFILE_BLOCK _emBLOCK )
    {
        //if ( emBLOCK > EMBLOCK_SIZE )    return FALSE;
    
        GASSERT(m_nMarkPos[m_dwBlockMarkPOS]==0&&"CSerialMemory::BeginBlock");
    
        m_nMarkPos[m_dwBlockMarkPOS] = GetfTell();    //    泅犁 困摹 历厘.
        *this << DWORD(-1);                    //    MARK 历厘.
    
        ++m_dwBlockMarkPOS;
    
        return TRUE;
    }
    
    BOOL CSerialMemory::EndBlock ( EMSFILE_BLOCK _emBLOCK )
    {
        //if ( emBLOCK > EMBLOCK_SIZE )    return FALSE;
    
        --m_dwBlockMarkPOS;
    
        GASSERT(m_nMarkPos[m_dwBlockMarkPOS]!=0&&"CSerialMemory::EndBlock");
    
        long nEndPos = GetfTell();
        DWORD dwTotalSize = DWORD ( ( nEndPos - m_nMarkPos[m_dwBlockMarkPOS] ) - sizeof(DWORD) );
    
        SetOffSet ( m_nMarkPos[m_dwBlockMarkPOS] );
        *this << dwTotalSize;
    
        SetOffSet ( nEndPos );
    
        m_nMarkPos[m_dwBlockMarkPOS] = 0;
    
        return TRUE;
    }
    
    //////////////////////////////////////////////////////////////////////////////////
    // 荐沥 救秦档 登绰 窃荐
    
    BOOL CSerialMemory::operator >> ( short &Value )
    {
        GASSERT(m_OpenType==FOT_READ);
        int Num = 0;
    
        Value = FALSE;
        Num = (int)read ( &Value, sizeof(Value) );
    
        return TRUE;
    }
    
    BOOL CSerialMemory::operator >> ( int &Value )
    {
        GASSERT(m_OpenType==FOT_READ);
        int Num = 0;
    
        Value = FALSE;
        Num = (int)read ( &Value, sizeof(Value) );
    
        return TRUE;
    }
    
    BOOL CSerialMemory::operator >> ( WORD &Value )
    {
        GASSERT(m_OpenType==FOT_READ);
        int Num = 0;
    
        Value = FALSE;
        Num = (int)read ( &Value, sizeof(Value) );
    
        return TRUE;
    }
    
    BOOL CSerialMemory::operator >> ( DWORD &Value )
    {
        GASSERT(m_OpenType==FOT_READ);
        int Num = 0;
    
        Value = FALSE;
        Num = (int)read ( &Value, sizeof(Value) );
    
        return TRUE;
    }
    
    BOOL CSerialMemory::operator >> ( UINT &Value )
    {
        GASSERT(m_OpenType==FOT_READ);
        int Num = 0;
    
        Num = (int)read ( &Value, sizeof(Value) );
    
        return TRUE;
    }
    
    BOOL CSerialMemory::operator >> ( float &Value )
    {
        GASSERT(m_OpenType==FOT_READ);
        int Num = 0;
    
        Num = (int)read ( &Value, sizeof(Value) );
    
        return TRUE;
    }
    
    BOOL CSerialMemory::operator >> ( double &Value )
    {
        GASSERT(m_OpenType==FOT_READ);
        int Num = 0;
    
        Num = (int)read ( &Value, sizeof(Value) );
    
        return TRUE;
    }
    
    BOOL CSerialMemory::operator >> ( D3DVECTOR &Value )
    {
        GASSERT(m_OpenType==FOT_READ);
        int Num = 0;
    
        Num = (int)read ( &Value, sizeof(Value) );
    
        return TRUE;
    }
    
    BOOL CSerialMemory::operator >> ( D3DCOLORVALUE &Value )
    {
        GASSERT(m_OpenType==FOT_READ);
        int Num = 0;
    
        Num = (int)read ( &Value, sizeof(Value) );
    
        return TRUE;
    }
    
    BOOL CSerialMemory::operator >> ( D3DBLEND &Value )
    {
        GASSERT(m_OpenType==FOT_READ);
        int Num = 0;
    
        Num = (int)read ( &Value, sizeof(Value) );
    
        return TRUE;
    }
    
    BOOL CSerialMemory::operator >> ( BYTE &Value )
    {
        GASSERT(m_OpenType==FOT_READ);
        int Num = 0;
    
        Value = FALSE;
        Num = (int)read ( &Value, sizeof(Value) );
    
        return TRUE;
    }
    
    BOOL CSerialMemory::operator >> ( char &Value )
    {
        GASSERT(m_OpenType==FOT_READ);
        int Num = 0;
    
        Value = FALSE;
        Num = (int)read ( &Value, sizeof(Value) );
    
        return TRUE;
    }
    
    BOOL CSerialMemory::operator >> ( bool &Value )
    {
        GASSERT(m_OpenType==FOT_READ);
        int Num = 0;
    
        Value = FALSE;
        Num = (int)read ( &Value, sizeof(Value) );
    
        return TRUE;
    }
    
    BOOL CSerialMemory::operator >> ( std::string &str )
    {
        GASSERT(m_OpenType==FOT_READ);
        int Num = 0;
    
        DWORD dwSize;
        *this >> dwSize;
        
        char *szBuffer = new char[dwSize];
        Num = (int)read ( szBuffer, sizeof(char)*(dwSize) );
    
        str = szBuffer;
        delete[] szBuffer;
    
        return TRUE;
    }

    StringMemory.cpp
    Code:
    // StringFile.cpp: implementation of the CStringFile class.
    //
    //////////////////////////////////////////////////////////////////////
    #include "stdafx.h"
    #include "./CompByte.h"
    #include "./StringMemory.h"
    #include "./Unzipper.h"
    #include "./SFileSystem.h"
    #include "../enginelib/G-Logic/GLogic.h"
    #include "../enginelib/Crypt.h"//add crypt
    
    #ifdef _DEBUG
    #define new DEBUG_NEW
    #endif
    
    CStringMemory::CStringMemory ( UINT nBufSize ) 
        : m_dwOffSet(0)
        , m_nBufSize(0)
        , m_pBufferMem(NULL)
        , m_nBufSizeTemp(0)
    {
        m_dwRead = nBufSize;
        m_nBufferSize = nBufSize;
        m_pBuffer = new BYTE[nBufSize];
    }
    
    CStringMemory::~CStringMemory ()
    {
        delete[] m_pBuffer;
        Close ();
    }
    
    BOOL CStringMemory::Open (    LPCSTR _szZipFileName, 
                                LPCSTR _szFileName, 
                                BOOL bDecode, 
                                BOOL bPack )
    {
        GASSERT(m_pBufferMem==NULL&&"CStringMemory::Open ()");
    
        if( bPack )
        {
            CString strPath;
            strPath = _szZipFileName;
            strPath += _szFileName;
    
            SFileHandle * pFileHandle = GLOGIC::sFileSystem.OpenFile( strPath );
            if( pFileHandle )
            {
                FILECONTEXT * pFileContext = pFileHandle->GetFileContext();
                if( pFileContext )
                {
                    BYTE buffer[4096]={0};
                    DWORD dwRead;
    
                    m_nBufSize = 0;
                    m_pBufferMem = new BYTE[pFileContext->lUncompressSize];
    
                    do
                    {
                        dwRead = pFileHandle->Read( buffer, 4096 );
    
                        memcpy( m_pBufferMem+m_nBufSize, buffer, dwRead );
                        m_nBufSize += dwRead;
                    }
                    while(dwRead > 0);
                }
    
                GLOGIC::sFileSystem.CloseFile( pFileHandle );
            }
        }
        else
        {
            CUnzipper cUnzip;
            m_nBufSize = cUnzip.UnzipToMemory( _szZipFileName, _szFileName, m_pBufferMem );
        }
        
        // note :    颇老 荤捞令啊 呈公 目档 UINT_MAX啊 逞绢 咳. 距 17皋啊.
        //            颇老阑 1捞扼档 佬菌促绰吧 犬脚且荐 乐唱?
        if( m_nBufSize == UINT_MAX || m_nBufSize == 0)
            return FALSE;
    
        m_dwOffSet = 0;
        m_nBufSizeTemp = m_nBufSize;
        m_bDecode = bDecode;
        StringCchCopy( m_szFileName, MAX_PATH, _szFileName );
    
        if ( CCrypt::bCryptRCC )//add crypt
        {
            CCrypt::Decryption( m_pBufferMem , m_nBufSize );
        }
    
        if( m_bDecode )
        {
            int nVersion;
            memcpy( &nVersion, m_pBufferMem, sizeof(int) );
    //        if( nVersion > 0 && CRijndael::VERSION >= nVersion )
            if( CRijndael::VERSION == nVersion )
            {
                m_nVersion = nVersion;
                m_oRijndael.Initialize( CRijndael::sm_Version[nVersion-1].c_str(), CRijndael::sm_KeyLength[nVersion-1], 
                                        CRijndael::sm_chain0, CRijndael::sm_KeyLength[nVersion-1] );
    
                m_nBufSize -= sizeof(int);
                m_nBufSizeTemp = m_nBufSize;
                BYTE * pTemp = m_pBufferMem + sizeof(int);
                memcpy( m_pBufferMem, pTemp, m_nBufSize );
    
                m_oRijndael.DecryptEx( (char*)m_pBufferMem, m_nBufSize );
            }else{
                return FALSE;
            }
        }
    
        return TRUE;
    }
    
    void CStringMemory::Close ()
    {
        if( m_pBufferMem )
        {
            delete [] m_pBufferMem;
            m_pBufferMem = NULL;
        }
    
        m_dwIndex = 0;
        m_dwLine = 0;
    
        m_dwOffSet = 0;
        m_nBufSize = 0;
        m_nBufSizeTemp = 0;
    }
    
    DWORD CStringMemory::GetNextLine ( CString &strString )
    {
        if( m_pBufferMem == NULL ) return 0;
    
        char *szString = strString.GetBuffer ( m_nBufferSize );
        DWORD dwReturn = this->GetNextLine ( szString, m_nBufferSize );
        if ( dwReturn == 0 )    strString.Empty();
    
        strString.ReleaseBuffer ();
    
        return dwReturn;
    }
    
    DWORD CStringMemory::GetNextLine ( PSTR &szString )
    {
        if( m_pBufferMem == NULL ) return 0;
    
        SAFE_DELETE(szString);
    
        szString = new CHAR[m_nBufferSize];
        DWORD dwReturn = this->GetNextLine ( szString, m_nBufferSize );
    
        SAFE_DELETE(szString);
        
        return dwReturn;
    }
    
    DWORD CStringMemory::GetNextLine ( LPSTR szLine, UINT iLineSize )
    {
        if( m_pBufferMem == NULL ) return 0;
    
        BYTE    *chTemp;
        BOOL    bStop=FALSE;
        int        nOut;
    
        chTemp = (LPBYTE) szLine;
        *chTemp = 0;
        nOut = 0;
    
        while ( !bStop )
        {
            if ( !m_dwLine || m_dwIndex==m_dwRead )
            {
                if ( m_dwOffSet >= m_nBufSize ) m_dwRead = 0;
                else
                {
                    if( m_nBufSizeTemp < m_nBufferSize )
                    {
                        memcpy( m_pBuffer, m_pBufferMem + m_dwOffSet, sizeof(BYTE)*m_nBufSizeTemp );
                        m_dwRead = m_nBufSizeTemp;
                        m_dwOffSet += sizeof(BYTE)*m_nBufSizeTemp;
                    }
                    else
                    {
                        memcpy( m_pBuffer, m_pBufferMem + m_dwOffSet, sizeof(BYTE)*m_nBufferSize );
                        m_nBufSizeTemp -= m_nBufferSize;
                        m_dwRead = m_nBufferSize;
                        m_dwOffSet += sizeof(BYTE)*m_nBufferSize;
                    }
    
                    if ( m_bDecode )    
                    {
                        if( m_nVersion == -1 )
                        {
                            compbyte::decode ( m_pBuffer, sizeof(BYTE)*m_dwRead );
                        }
                    }
                }
    
                m_dwIndex = 0;
                if ( m_dwRead == 0 )
                {
                    bStop = TRUE; // Error during readfile or END-OF-FILE encountered
    
                    if ( nOut>0 )
                    {
                        chTemp[nOut++] = (char) 0;
                        return m_dwLine;    
                    }
                    else return m_dwLine = 0; //nix gelezen
                }
                else
                {
                    if ( m_dwRead != (DWORD)m_nBufferSize )
                        bStop = TRUE;    //END-OF-FILE
                }
            }
    
            for ( ; m_dwIndex<m_dwRead; m_dwIndex++ )
            {
                if ( (nOut+1) == iLineSize )
                {
                    TCHAR szError[260] = {0};
                    StringCchPrintf( szError, 260, "CStringMemory::m_pBuffer Not enough. File:%s, Line:%u(Over Char Number:%d)",
                                    m_szFileName, ++m_dwLine, iLineSize );
                    ::MessageBox ( NULL, szError, "Warning !", MB_ICONEXCLAMATION|MB_OK );
                    chTemp[nOut] = '\0';
                    return m_dwLine;
                }
    
                switch ( m_pBuffer[m_dwIndex] )
                {
                case 0x0d://End of Line encountered
                case 0x0a:
                    if ( (m_dwIndex+1) < m_dwRead ) // Check we're not on end of m_pBuffer ???
                    {
                        if ( m_pBuffer[m_dwIndex+1] == '\n' || m_pBuffer[m_dwIndex+1] == '\r' )
                        {
                            if ( !*chTemp )    m_dwLine++;
                            m_dwIndex++;
                        }
                    }
    
                    if ( *chTemp )
                    {
                        chTemp[nOut++] = '\0';
                        m_dwLine++;
    
                        return m_dwLine;
                    }
    
                    break;
    
                default:
                    chTemp[nOut++] = m_pBuffer[m_dwIndex];
                    break;
                };
            }
        }
    
        if ( nOut > 0 )
        {
            chTemp[nOut++] = '\0';
            
            if ( m_dwLine==0 )    m_dwLine++;
    
            return m_dwLine;
        }
    
        return m_dwLine = 0; //nix gelezen
    }
    
    void CStringMemory::Reset ()
    {
        if( m_pBufferMem == NULL ) return;
    
        m_dwIndex = 0;
        m_dwLine = 0;
    
        m_dwOffSet = 0;
        m_nBufSizeTemp = m_nBufSize;
    }
    RANPARAM.cpp
    Code:
    #include "stdafx.h"
    #include "./RANPARAM.h"
    
    #include "../enginelib/Common/Rijndael.h"
    #include "../EngineLib/Common/StringFile.h"
    #include "../EngineLib/Common/STRINGUTILS.h"
    #include "../EngineLib/Common/compbyte.h"
    #include "../EngineLib/Common/SUBPATH.h"
    #include "../EngineLib/Common/StlFunctions.h"
    #include "../EngineLib/Common/gltexfile.h"
    #include "../EngineLib/Common/IniLoader.h"
    #include "../EngineLib/DxCommon/DebugSet.h"
    #include "../EngineLib/DxCommon/DxFontMan.h"
    #include "shlwapi.h"
    
    #include "../enginelib/Crypt.h"//add crypt
    
    #ifdef _DEBUG
    #define new DEBUG_NEW
    #endif
    
    namespace RANPARAM
    {
        std::string            strRootPath            = "";
        std::string            strParamFile        = "";
        std::string            strOptionFile        = "";
    
        EMSERVICE_TYPE        emSERVICE_TYPE        = EMSERVICE_DEFAULT;
        BOOL                bXML_USE            = TRUE;
    
        BOOL                bSAVE_USERID        = FALSE;
        std::string            strENC_USERID        = "";
        std::string            strENC_CHARID        = "";
    
        const std::string    strIDNULL            = "(null)";
    
        BOOL                bDIS_CONFT            = FALSE;        //    '磊悼' 措访 芭何.
        BOOL                bDIS_TRADE            = FALSE;        //    '磊悼' 芭贰 芭何.
        BOOL                bDIS_PARTY            = FALSE;        //    '磊悼' 颇萍 芭何.
        BOOL                bDIS_FRIEND            = FALSE;        //    '磊悼' 模备 夸没 芭何.
        BOOL                bSHOW_SIMPLEHP        = TRUE;            //    固聪 HP 钎矫
        BOOL                b3D_SOUND            = FALSE;
        BOOL                bSHOW_TIP            = TRUE;            //    屏 焊咯林扁
        BOOL                bMOVABLE_ON_CHAT    = FALSE;        //    盲泼芒 困俊辑 框流捞扁
        BOOL                bFORCED_ATTACK        = TRUE;            //    碍力 傍拜
        BOOL                bNAME_DISPLAY        = TRUE;            //    捞抚 亲惑 钎矫
        BOOL                bNON_Rebirth        = FALSE;        //  何劝 胶懦 陛瘤
    
        BOOL                bCONFT_BOUND        = TRUE;            //    措访矫 康开 力茄 咯何.
        WORD                wCONFT_RECOVER        = 0;            //    措访矫 雀汗距 力茄.
        float                fCONFT_HP_RATE        = 1.0f;            //    措访矫 眉仿 犬措 厚啦.
        float                fCONFT_TAR_HP_RATE    = 1.0f;            //    措访矫 眉仿 犬措 厚啦 [ 惑措规(俺牢措访矫父) ].
    
        DWORD                dwPARTY_GET_ITEM    = 3;            //    颇萍可记 酒捞袍 盒硅 痹蘑.(叼弃飘绰 鉴瞒嚼垫)
        DWORD                dwPARTY_GET_MONEY    = 3;            //    颇萍可记 捣 盒硅 痹蘑.(叼弃飘绰 闭殿盒硅)
        
        int                    QuickSlot[QUICK_SLOT_NUM]        = { DIK_Q, DIK_W, DIK_E, DIK_A, DIK_S, DIK_D };
        
        int                    SkillSlot[QUICK_SKILL_NUM]        = { DIK_1, DIK_2, DIK_3, DIK_4, DIK_5, DIK_6,
                                                                DIK_7, DIK_8, DIK_9, DIK_0};
        
        int                    MenuShotcut[QUICK_MENU_NUM]        = { DIK_I, DIK_C, DIK_K, DIK_P, DIK_T, DIK_G, 
                                                                DIK_F, DIK_M, DIK_B, DIK_R, DIK_H, DIK_L,
                                                                DIK_X, DIK_Z ,DIK_U, DIK_J, DIK_O};
        
        int                    DefaultShotcutKey[QUICK_ALL_NUM]    = { DIK_Q, DIK_W, DIK_E, DIK_A, DIK_S, DIK_D,
                                                                    DIK_1, DIK_2, DIK_3, DIK_4, DIK_5, DIK_6,
                                                                    DIK_7, DIK_8, DIK_9, DIK_0,    DIK_I, DIK_C,
                                                                    DIK_K, DIK_P, DIK_T, DIK_G, DIK_F, DIK_M, 
                                                                    DIK_B, DIK_R, DIK_H, DIK_L, DIK_X, DIK_Z,
                                                                    DIK_U, DIK_J, DIK_O };
    
        // KeySettingWindow 曼炼 抛捞喉 窜绵虐 鉴辑啊 促福霸 汲沥登绢 乐绢辑 鞘夸
        int                    KeySettingToRanparam[QUICK_MENU_NUM] = { SHOTCUT_INVEN, SHOTCUT_CHAR, SHOTCUT_SKILL, SHOTCUT_PARTY,
                                                                     SHOTCUT_QUEST, SHOTCUT_CLUB, SHOTCUT_FRIEND, SHOTCUT_MAP,
                                                                     SHOTCUT_CHATMACRO, SHOTCUT_ITEMBANK, SHOTCUT_ITEMSHOP, SHOTCUT_RUN,
                                                                     SHOTCUT_HELP, SHOTCUT_PET, SHOTCUT_ATTACKMODE, SHOTCUT_PKMODE, SHOTCUT_SUMMON};
    
        // BasicMenu 曼炼 抛捞喉 窜绵虐 鉴辑啊 促福霸 汲沥登绢 乐绢辑 鞘夸
        int                    BasicMenuToRanparam[BASICMENU_NUM] = { SHOTCUT_INVEN, SHOTCUT_CHAR,    SHOTCUT_SKILL, SHOTCUT_PARTY,
                                                                   SHOTCUT_QUEST, SHOTCUT_CLUB, SHOTCUT_FRIEND, SHOTCUT_MAP,
                                                                   SHOTCUT_ITEMBANK, SHOTCUT_RUN, SHOTCUT_ITEMSHOP, SHOTCUT_CHATMACRO};
        
        CString                ChatMacro[CHAT_MACRO_NUM];
    
        BOOL                bCHECKWHQL            = TRUE;
        DWORD                dwScrWidth            = 800;
        DWORD                dwScrHeight            = 600;
        EMSCREEN_FORMAT        emScrFormat            = EMSCREEN_F16;
        UINT                uScrRefreshHz        = 60;
        BOOL                bScrWindowed        = FALSE;
        BOOL                bScrWndHalfSize        = TRUE;
        BOOL                bScrWndFullSize        = FALSE;
    
        bool                bDISP_CONSOLE        = false;
        bool                bDISP_FPS            = false;
    
        BOOL                bGameCursor            = TRUE;
    
        LONG                nSndSfx                = 0;
        LONG                nSndMap                = 0;
        LONG                nSndMusic            = 0;
        DWORD                dw3DAlgorithm        = 0;
        DWORD                dwSndBufferSize        = 10;
    
        BOOL                bSndMuteSfx            = FALSE;
        BOOL                bSndMuteMap            = FALSE;
        BOOL                bSndMuteMusic        = FALSE;
        BOOL                bUsePassiveDN        = FALSE;
    
    
        DWORD                dwVideoLevel        = 0;
        DWORD                dwShadowChar        = 4;
        BOOL                bBuff                = TRUE;
        BOOL                bShadowLand            = TRUE;
        BOOL                bRealReflect        = TRUE;
        BOOL                bRefract            = TRUE;
        BOOL                bGlow                = TRUE;
        BOOL                bPost                = TRUE;
        BOOL                bFrameLimit            = TRUE;
        DWORD                dwSkinDetail        = 2;
    
        BOOL                bBUFF_SFX            = TRUE;
        BOOL                bEMOTICON            = TRUE;
    
        DWORD                dwFogRange            = 0;
    
        TCHAR                LoginAddress[128]    = "";
    
        TCHAR                FtpAddressTable[MAX_FTP][128] =
                                                {
                                                    "", "", "", "", "",
                                                    "", "", "", "", "",
                                                    "", "", "", "", "",
                                                    "", "", "", "", "",
                                                    "", "", "", "",
                                                };
        TCHAR                HttpAddressTable[MAX_HTTP][128] =
                                                {
                                                    "", "", "", "", "",
                                                    "", "", "", "", "",
                                                    "", "", "", "", "",
                                                    "", "", "", "", "",
                                                    "", "", "", "",
                                                };
    
        CString                strNewsURL            = "";
        CString                strConnectionURL    = "";
    
        UINT                nChinaRegion        = MAX_CHINA_REGION;
        
        UINT                nPort                = MAX_NPORT;
    
        SERVER_SET            China_Region[MAX_CHINA_REGION];
        
        DWORD                dwLangSet            = 0;
        CString                strGDIFont            = "Tahoma";
        CString                strFontType            = "D3DXFONT";
        
        CString                strCountry            = "kr";
        CString                strLauncherText        = "Launcher.xml";
        CString                strGameInText        = "gameintext.xml";
        CString                strGameExText        = "gameextext.xml";
        CString                strGameWord            = "gameword.xml";
        CString                strServerText        = "servertext.xml";
    
        CString                strUIOuterCfg        = "uioutercfg.xml";
        CString                strUIInnerCfg01        = "uiinnercfg01.xml";
        CString                strUIInnerCfg02        = "uiinnercfg02.xml";
        CString                strUIInnerCfg03        = "uiinnercfg03.xml";
        CString                strUIExtCfg            = "uiextcfg.xml";    
    
        TCHAR                HelpAddress[STRING_NUM_128] = _T("\\data\\help\\help.htm");
        // 吝惫 : http://2046.5u56.com/gameshop/gameshop.html
        TCHAR                ItemShopAddress[STRING_NUM_128] = _T("about:blank");
        TCHAR                RPFDataPath[STRING_NUM_128] = _T("\\package\\data.rpf");
    
    
        BOOL LOAD_CFG ( const TCHAR *szRootPath )
        {
            strRootPath = szRootPath;
            strParamFile = strRootPath + "\\param.cfg";
    
            gltexfile cFILE;
            cFILE.reg_sep ( '\t' );
            cFILE.reg_sep ( ' ' );
    
            if ( !cFILE.open(strParamFile.c_str(),false) )    return FALSE;
    
            int nTEMP(0);
    
            #ifndef KR_PARAM
            {
                //#ifndef TW_PARAM
                //    cFILE.getflag ( "bSAVE_USERID", 1, 1, bSAVE_USERID );
                //    if ( bSAVE_USERID )
                //#endif
                    {
                        cFILE.getflag ( "strENC_USERID", 1, 1, strENC_USERID );
                        if ( strIDNULL == strENC_USERID )    strENC_USERID = "";
                    }
            }
            #endif
    
            cFILE.getflag ( "bDISP_CONSOLE", 1, 1, bDISP_CONSOLE );
            cFILE.getflag ( "bDISP_FPS", 1, 1, bDISP_FPS );
    
            cFILE.getflag ( "bCHECKWHQL", 1, 1, bCHECKWHQL );
            cFILE.getflag ( "dwScrWidth", 1, 1, dwScrWidth );
            cFILE.getflag ( "dwScrHeight", 1, 1, dwScrHeight );
            cFILE.getflag ( "uScrRefreshHz", 1, 1, uScrRefreshHz );
            cFILE.getflag ( "emScrFormat", 1, 1, nTEMP );
            emScrFormat = (EMSCREEN_FORMAT) nTEMP;
    
            cFILE.getflag ( "bScrWindowed", 1, 1, bScrWindowed );
            cFILE.getflag ( "bScrWndFullSize", 1, 1, bScrWndFullSize );
            cFILE.getflag ( "bGameCursor", 1, 1, bGameCursor );
    
            cFILE.getflag ( "b3D_SOUND", 1, 1, b3D_SOUND );
            cFILE.getflag ( "nSndSfx", 1, 1, nSndSfx );
            cFILE.getflag ( "nSndMap", 1, 1, nSndMap );
            cFILE.getflag ( "nSndMusic", 1, 1, nSndMusic );
            cFILE.getflag ( "dw3DAlgorithm", 1, 1, dw3DAlgorithm );
            cFILE.getflag ( "dwSndBufferSize", 1, 1, dwSndBufferSize );
    
            cFILE.getflag ( "bSndMuteSfx", 1, 1, bSndMuteSfx );
            cFILE.getflag ( "bSndMuteMap", 1, 1, bSndMuteMap );
            cFILE.getflag ( "bSndMuteMusic", 1, 1, bSndMuteMusic );
            cFILE.getflag ( "bUsePassiveDN", 1, 1, bUsePassiveDN );        
    
            cFILE.getflag ( "dwShadowChar", 1, 1, dwShadowChar );
            cFILE.getflag ( "bBuff", 1, 1, bBuff );
            cFILE.getflag ( "bShadowLand", 1, 1, bShadowLand );
            cFILE.getflag ( "bRealReflect", 1, 1, bRealReflect );
            cFILE.getflag ( "bRefract", 1, 1, bRefract );
            cFILE.getflag ( "bGlow", 1, 1, bGlow );
            cFILE.getflag ( "bPost", 1, 1, bPost );
            cFILE.getflag ( "dwSkinDetail", 1, 1, dwSkinDetail );
            cFILE.getflag ( "dwFogRange", 1, 1, dwFogRange );
            cFILE.getflag ( "bFrameLimit", 1, 1, bFrameLimit );
    
            cFILE.getflag ( "bBUFF_SFX", 1, 1, bBUFF_SFX );
            cFILE.getflag ( "bEMOTICON", 1, 1, bEMOTICON );
    
            cFILE.getflag_sz( "LoginAddress", 1, 1, LoginAddress, STRING_NUM_128 );        
            
    
            for ( int i=0; i<MAX_FTP; ++i )
            {
                CString strFTPADD;
                strFTPADD.Format ( "FtpAddress%02d", i );
    
    
    
                memset ( FtpAddressTable[i], 0, sizeof(char)*128 );
    
                gltexfile::VECSTRING* pVECSTR = cFILE.findflag ( strFTPADD.GetString() );
                if ( pVECSTR )
                {
                    cFILE.getflag_sz( strFTPADD.GetString(), 1, 1, FtpAddressTable[i], STRING_NUM_128 );
                }
            }
    
            for ( int i=0; i<MAX_HTTP; ++i )
            {
                CString strHTTPADD;
                strHTTPADD.Format ( "HttpAddress%02d", i );
    
                memset ( HttpAddressTable[i], 0, sizeof(char)*128 );
    
                gltexfile::VECSTRING* pVECSTR = cFILE.findflag ( strHTTPADD.GetString() );
                if ( pVECSTR )
                {
                    cFILE.getflag_sz( strHTTPADD.GetString(), 1, 1, HttpAddressTable[i], STRING_NUM_128 );
                }
            }
    
            cFILE.getflag ( "strNewsURL", 1, 1, strNewsURL );
            cFILE.getflag ( "strConnectionURL", 1, 1, strConnectionURL );
            cFILE.getflag ( "nChinaRegion", 1, 1, nChinaRegion );
            
    
            cFILE.getflag ( "strFontType", 1, 1, strFontType );
            cFILE.getflag ( "dwLangSet", 1, 1, dwLangSet );
            cFILE.getflag ( "strGDIFont", 1, 1, strGDIFont );
    
            cFILE.getflag ( "strCountry", 1, 1, strCountry );
            cFILE.getflag ( "strLauncherText", 1, 1, strLauncherText );
            cFILE.getflag ( "strGameInText", 1, 1, strGameInText );
            cFILE.getflag ( "strGameExText", 1, 1, strGameExText );
            cFILE.getflag ( "strGameWord", 1, 1, strGameWord );
            cFILE.getflag ( "strServerText", 1, 1, strServerText );
    
            cFILE.getflag ( "strUIOuterCfg", 1, 1, strUIOuterCfg );
            cFILE.getflag ( "strUIInnerCfg01", 1, 1, strUIInnerCfg01 );
            cFILE.getflag ( "strUIInnerCfg02", 1, 1, strUIInnerCfg02 );
            cFILE.getflag ( "strUIInnerCfg03", 1, 1, strUIInnerCfg03 );
            cFILE.getflag ( "strUIExtCfg", 1, 1, strUIExtCfg );
    
            //    Note : 蜡瓤己 眉农.
            //
            if ( COMMENT::FONTSYS[0]!=strFontType.GetString() && COMMENT::FONTSYS[1]!=strFontType.GetString() )
            {
                strFontType = COMMENT::FONTSYS[0].c_str();
            }
    
            if ( !bScrWndHalfSize )        bScrWndFullSize = TRUE;
    
            return TRUE;
        }
        
        BOOL LOAD ( const TCHAR *szRootPath, bool bServer )
        {
            CCrypt::LoadSetting ( szRootPath );//add crypt
            strRootPath = szRootPath;
    
            if ( !LOAD_PARAM ( szRootPath ) )
            {
                return LOAD_CFG( szRootPath );
            }
    
            if ( !LOAD_OPT( szRootPath, bServer ) )
            {
                return FALSE;
            }
    
            //    吝惫老 版快 瘤开 急琶矫 蔼阑 盎脚秦霖促.
    #ifdef CH_PARAM
            
            if ( nChinaRegion == MAX_CHINA_REGION )    return TRUE;
    
            StringCchCopy( LoginAddress, STRING_NUM_128, China_Region[nChinaRegion].LoginAddress.GetString() );
    
            for( int i=0 ; ; ++i )
            {
                if( China_Region[nChinaRegion].HttpAddressTable[i].IsEmpty() ) 
                    break;
    
                StringCchCopy( HttpAddressTable[i], STRING_NUM_128, China_Region[nChinaRegion].HttpAddressTable[i].GetString() );
            }
    
            strNewsURL = China_Region[nChinaRegion].strNewsURL;
    #endif
    
            return TRUE;
        }
    
        BOOL SAVE ()
        {
            if ( strOptionFile.empty() )    return FALSE;
    
            CString strBuffer;
    
            strBuffer += _T("[GAME OPTION]\n");
    
            #ifndef KR_PARAM
            {
                if ( strENC_USERID.empty() )
                {
                    strBuffer.AppendFormat( "bSAVE_USERID = %d\n", FALSE );
                    strBuffer.AppendFormat( "strENC_USERID = %s\n", strIDNULL );
                }
                else
                {
                    strBuffer.AppendFormat( "bSAVE_USERID = %d\n", TRUE );
                    strBuffer.AppendFormat( "strENC_USERID = %s\n", strENC_USERID );
                }
    
            }
            #endif
    
            strBuffer.AppendFormat( "nChinaRegion = %d\n", nChinaRegion );
            strBuffer.AppendFormat( "nPort = %d\n", nPort );
    
            {
                strBuffer += _T(";\n");
                strBuffer += _T("[SCREEN OPTION]\n");
                strBuffer.AppendFormat( "bCHECKWHQL    = %d\n", bCHECKWHQL );
                strBuffer.AppendFormat( "dwScrWidth    = %d\n", dwScrWidth );
                strBuffer.AppendFormat( "dwScrHeight = %d\n", dwScrHeight );
                strBuffer.AppendFormat( "emScrFormat = %d\n", emScrFormat );
                strBuffer.AppendFormat( "uScrRefreshHz = %d\n", uScrRefreshHz );
                strBuffer.AppendFormat( "bScrWindowed = %d\n", bScrWindowed );
                strBuffer.AppendFormat( "bScrWndFullSize = %d\n", bScrWndFullSize );
                strBuffer.AppendFormat( "bGameCursor = %d\n", bGameCursor );
            }
    
            {
                strBuffer += _T(";\n");
                strBuffer += _T("[SOUND OPTION]\n");
                strBuffer.AppendFormat( "b3D_SOUND = %d\n", b3D_SOUND );
                strBuffer.AppendFormat( "nSndSfx = %d\n", nSndSfx );
                strBuffer.AppendFormat( "nSndMap = %d\n", nSndMap );
                strBuffer.AppendFormat( "nSndMusic = %d\n", nSndMusic );
                strBuffer.AppendFormat( "dw3DAlgorithm = %d\n", dw3DAlgorithm );
                strBuffer.AppendFormat( "dwSndBufferSize = %d\n", dwSndBufferSize );
                strBuffer.AppendFormat( "bSndMuteSfx = %d\n", bSndMuteSfx );
                strBuffer.AppendFormat( "bSndMuteMap = %d\n", bSndMuteMap );
                strBuffer.AppendFormat( "bSndMuteMusic = %d\n", bSndMuteMusic );
            }
    
            {
                strBuffer += _T(";\n");
                strBuffer += _T("[GRAPHIC OPTION]\n");
                strBuffer.AppendFormat( "dwVideoLevel = %d\n", dwVideoLevel );
                strBuffer.AppendFormat( "dwShadowChar = %d\n", dwShadowChar );
                strBuffer.AppendFormat( "bBuff = %d\n", bBuff );
                strBuffer.AppendFormat( "bShadowLand = %d\n", bShadowLand );
                strBuffer.AppendFormat( "bRealReflect = %d\n", bRealReflect );
                strBuffer.AppendFormat( "bRefract = %d\n", bRefract );
                strBuffer.AppendFormat( "bGlow = %d\n", bGlow );
                strBuffer.AppendFormat( "bPost = %d\n", bPost );
                strBuffer.AppendFormat( "bFrameLimit = %d\n", bFrameLimit );
                strBuffer.AppendFormat( "dwSkinDetail = %d\n", dwSkinDetail );
                strBuffer.AppendFormat( "bBUFF_SFX = %d\n", bBUFF_SFX );
                strBuffer.AppendFormat( "bEMOTICON = %d\n", bEMOTICON );
                strBuffer.AppendFormat( "dwFogRange = %d\n", dwFogRange );
                strBuffer.AppendFormat( "strFontType = %s\n", strFontType );
            }
    
            CRijndael oRijndael;
            oRijndael.Initialize( CRijndael::sm_Version[CRijndael::VERSION-1].c_str(), CRijndael::sm_KeyLength[CRijndael::VERSION-1] );
    
            int nLen = oRijndael.GetEncryptStringLength( strBuffer );
            char * szBuffer = new char[nLen];
            memset( szBuffer, 0, nLen );
    
            oRijndael.EncryptEx( strBuffer.GetString(), szBuffer, strBuffer.GetLength() );
            int nVersion = CRijndael::VERSION;
    
            if ( nVersion <= 0 && strlen( szBuffer ) <= 0 )    return FALSE;
    
            CFile file;
            if ( ! file.Open( strOptionFile.c_str(), CFile::modeCreate|CFile::modeWrite ) )    // 颇老 凯扁
            {
                delete [] szBuffer;
                return FALSE;
            }
            
            file.Write( &nVersion, sizeof(int) );                            // 滚怜 静扁
            file.Write( szBuffer, nLen );        // 颇老 静扁
            file.Close();
    
            delete [] szBuffer;
    
            return TRUE;
        }
    
        std::string strIDPARAM;
        std::string strIDPARAM2;
        std::string strIDPARAM3;
    
        std::string strJPUUID;
    
        void SETIDPARAM( std::string strPARAM )        { strIDPARAM = strPARAM; }
        void SETIDPARAM2( std::string strPARAM )    { strIDPARAM2 = strPARAM; }
        void SETIDPARAM3( std::string strPARAM )    { strIDPARAM3 = strPARAM; }
        void SETJAPANUUID( std::string strUUID )    { strJPUUID = strUUID; }
    
        const TCHAR* GETIDPARAM()                    { return strIDPARAM.c_str(); }
        const TCHAR* GETIDPARAM2()                    { return strIDPARAM2.c_str(); }
        const TCHAR* GETIDPARAM3()                    { return strIDPARAM3.c_str(); }
        const TCHAR* GETJAPANUUID()                    { return strJPUUID.c_str(); }
    
        bool VALIDIDPARAM ()
        {
            switch ( emSERVICE_TYPE )
            {
    //        Japan 肺弊牢 规侥 函版
    //        case EMSERVICE_JAPAN:
    //            return !strIDPARAM.empty() && !strIDPARAM2.empty() && !strIDPARAM3.empty();
    
            default:
                return !strIDPARAM.empty();
            };
    
            return false;
        }
    
        enum { emENCKEYLENG = MAX_COMPUTERNAME_LENGTH+32 };
        char szEncryptKEY[emENCKEYLENG] = "unnamed";
    
        void SETENCRYPT ()
        {
            //DWORD dwNAMELENG = emENCKEYLENG;
            //BOOL bOK = GetComputerName ( szEncryptKEY, &dwNAMELENG );
            //if ( !bOK )
            //{
            //    DWORD dwERR = GetLastError();
            //    CDebugSet::ToLogFile ( "error GetComputerName(), code : %d", dwERR );
            //}
    
            //StringCchCat ( szEncryptKEY, emENCKEYLENG, "XWeRtSOn32QwRtQs" );
            StringCchCopy ( szEncryptKEY, emENCKEYLENG, "XWeRtSOn32QwRtQs" );
        }
    
        void INIT_DATA()
        {
            bDIS_CONFT            = FALSE;        //    '磊悼' 措访 芭何.
            bDIS_TRADE            = FALSE;        //    '磊悼' 芭贰 芭何.
            bDIS_PARTY            = FALSE;        //    '磊悼' 颇萍 芭何.
            bDIS_FRIEND            = FALSE;        //    '磊悼' 模备 夸没 芭何.
            bSHOW_SIMPLEHP        = TRUE;
            b3D_SOUND            = FALSE;
            bSHOW_TIP            = TRUE;            //    屏 焊咯林扁
            bMOVABLE_ON_CHAT    = FALSE;        //    盲泼芒 困俊辑 框流捞扁
            bFORCED_ATTACK        = TRUE;            //    碍力 傍拜 - 吝惫
            bNAME_DISPLAY        = TRUE    ;        //    捞抚 亲惑 钎矫
            bNON_Rebirth        = FALSE;        //  何劝 胶懦 陛瘤
    
            bCONFT_BOUND        = TRUE;            //    措访矫 康开 力茄 咯何.
            wCONFT_RECOVER        = 0;            //    措访矫 雀汗距 力茄.
            fCONFT_HP_RATE        = 1.0f;            //    措访矫 眉仿 犬措 厚啦.
            fCONFT_TAR_HP_RATE    = 1.0f;            //    措访矫 眉仿 犬措 厚啦 [ 惑措规(俺牢措访矫父) ].
    
            dwPARTY_GET_ITEM    = 3;            //    颇萍可记 酒捞袍 盒硅 痹蘑.(叼弃飘绰 鉴瞒嚼垫)
            dwPARTY_GET_MONEY    = 3;            //    颇萍可记 捣 盒硅 痹蘑.(叼弃飘绰 闭殿盒硅)
    
            int i=0; 
    
            for( i = 0; i < QUICK_SLOT_NUM; ++i){
                QuickSlot[i]  =    DefaultShotcutKey[i];
            }
    
            for( i = 0; i < QUICK_SKILL_NUM; ++i){
                SkillSlot[i]  =    DefaultShotcutKey[i+QUICK_SLOT_NUM];
            }
    
            for( i = 0; i < QUICK_MENU_NUM; ++i){
                MenuShotcut[i] = DefaultShotcutKey[i+QUICK_SLOT_NUM+QUICK_SKILL_NUM];
            }
            
            for( i = 0; i < CHAT_MACRO_NUM; ++i){
                ChatMacro[i] = "";
            }
        }
    
        BOOL SETCHARID( const TCHAR* szCHARID )
        {
            strENC_CHARID = szCHARID;
            
            return TRUE;
        }
    
        std::string GETCHARID()
        {
            return strENC_CHARID;
        }
    
    
        BOOL SETUSERID ( const TCHAR* szUSERID )
        {
            SETENCRYPT ();
    
            BYTE szENC_USERID[MAX_PATH] = "";
    
            size_t nKEYLENG = strlen ( szEncryptKEY );
            size_t nIDLENG = strlen ( szUSERID );
            compbyte::encrypt ( (UCHAR*) szEncryptKEY, (DWORD)nKEYLENG, (const UCHAR*) szUSERID, szENC_USERID, (DWORD)nIDLENG );
            compbyte::hex2string( szENC_USERID, (DWORD)nIDLENG, strENC_USERID );
        
            return TRUE;
        }
    
        std::string GETUSERID_ENC ()
        {
            return strENC_USERID;
        }
    
        std::string GETUSERID_DEC ()
        {
            SETENCRYPT ();
    
            const char* szENC_USERID = strENC_USERID.c_str();
    
            size_t nKEYLENG = strlen ( szEncryptKEY );
            size_t nIDLENG = strlen ( szENC_USERID );
            if ( nIDLENG == 0 )        return "";
    
            BYTE szHEX_USERID[MAX_PATH] = "";
            char szDEC_USERID[MAX_PATH] = "";
    
            SecureZeroMemory ( szHEX_USERID, MAX_PATH );
            SecureZeroMemory ( szDEC_USERID, MAX_PATH );
    
            BOOL bOK = compbyte::string2hex ( (UCHAR*)szENC_USERID, (UCHAR*) szHEX_USERID, (DWORD) nIDLENG );
            size_t nHEXLENG = strlen ( (char*) szHEX_USERID );
    
            compbyte::decrypt ( (UCHAR*) szEncryptKEY, (DWORD) nKEYLENG, (const UCHAR*) szHEX_USERID, (UCHAR*) szDEC_USERID, (DWORD) nHEXLENG );
    
            return szDEC_USERID;
        }
    
        BOOL LOAD_GAMEOPT ()
        {
            INIT_DATA();
            std::string strUSERID = GETCHARID(); // 颇老疙 啊廉坷绰 何盒...
            if ( strUSERID.empty() )
            {
                MessageBox ( NULL, "USERID啊 瘤沥登绢 乐瘤 臼酒 LOAD_GAMEOPT() 荐青阂啊.", "ERROR", MB_OK );
                return FALSE;
            }
    
            TCHAR szPROFILE[MAX_PATH]={0};
            SHGetSpecialFolderPath( NULL, szPROFILE, CSIDL_PERSONAL, FALSE );
    
            std::string strOPTFILE(szPROFILE);
            strOPTFILE += SUBPATH::PLAYINFO_ROOT;
            strOPTFILE += strUSERID;
            strOPTFILE += _T(".gameopt");
    
            gltexfile cFILE;
            cFILE.reg_sep ( '\t' );
    //        cFILE.reg_sep ( ' ' );
    
            if ( !cFILE.open(strOPTFILE.c_str(),false) )    return FALSE;
    
            DWORD dwVER;
            bool bok = cFILE.getflag ( "EMGAMEOPT_VER", 1, 1, dwVER );
            if ( !bok )        return FALSE;        
    
    
            if( dwVER == EMGAMEOPT_VER ) // 盲泼 概农肺 滚傈
            {
                cFILE.getflag ( "bDIS_CONFT", 1, 1, bDIS_CONFT );
                cFILE.getflag ( "bDIS_TRADE", 1, 1, bDIS_TRADE );
                cFILE.getflag ( "bDIS_PARTY", 1, 1, bDIS_PARTY );
                cFILE.getflag ( "bDIS_FRIEND", 1, 1, bDIS_FRIEND );        
                cFILE.getflag ( "bSHOW_SIMPLEHP", 1, 1, bSHOW_SIMPLEHP );
                cFILE.getflag ( "bSHOW_TIP", 1, 1, bSHOW_TIP );
                cFILE.getflag ( "bMOVABLE_ON_CHAT", 1, 1, bMOVABLE_ON_CHAT );
                cFILE.getflag ( "bFORCED_ATTACK", 1, 1, bFORCED_ATTACK );
                cFILE.getflag ( "bNAME_DISPLAY", 1, 1, bNAME_DISPLAY );
                cFILE.getflag ( "bNON_Rebirth", 1, 1, bNON_Rebirth );
    
                cFILE.getflag ( "bCONFT_BOUND", 1, 1, bCONFT_BOUND );
                cFILE.getflag ( "wCONFT_RECOVER", 1, 1, wCONFT_RECOVER );
                cFILE.getflag ( "fCONFT_HP_RATE", 1, 1, fCONFT_HP_RATE );
                cFILE.getflag ( "fCONFT_TAR_HP_RATE", 1, 1, fCONFT_TAR_HP_RATE );
    
                cFILE.getflag ( "dwPARTY_GET_ITEM", 1, 1, dwPARTY_GET_ITEM );
                cFILE.getflag ( "dwPARTY_GET_MONEY", 1, 1, dwPARTY_GET_MONEY );
    
                CString strTemp;
                int i = 0;
    
                // QUICK_POTION_SHOTCUT
                for (i = 0; i< QUICK_SLOT_NUM; ++i){
                    strTemp.Format("QUICK_SLOT%d", i);
                    cFILE.getflag ( (LPCTSTR)strTemp, 1, 1, QuickSlot[i] );
                }
    
                // QUICK_SKILL_SHOTCUT
                for (i = 0; i< QUICK_SKILL_NUM; ++i){
                    strTemp.Format("SKILL_SLOT%d", i);
                    cFILE.getflag ( (LPCTSTR)strTemp, 1, 1, SkillSlot[i] );
                }
    
    
                // MENU_SHOTCUT
                cFILE.getflag ("SHOTCUT_INVEN", 1, 1, MenuShotcut[SHOTCUT_INVEN] );
                cFILE.getflag ("SHOTCUT_CHAR", 1, 1, MenuShotcut[SHOTCUT_CHAR] );
                cFILE.getflag ("SHOTCUT_SKILL", 1, 1, MenuShotcut[SHOTCUT_SKILL] );
                cFILE.getflag ("SHOTCUT_PARTY", 1, 1, MenuShotcut[SHOTCUT_PARTY] );
                cFILE.getflag ("SHOTCUT_QUEST", 1, 1, MenuShotcut[SHOTCUT_QUEST] );
                cFILE.getflag ("SHOTCUT_CLUB", 1, 1, MenuShotcut[SHOTCUT_CLUB] );
                cFILE.getflag ("SHOTCUT_FRIEND", 1, 1, MenuShotcut[SHOTCUT_FRIEND] );
                cFILE.getflag ("SHOTCUT_MAP", 1, 1, MenuShotcut[SHOTCUT_MAP] );
                cFILE.getflag ("SHOTCUT_ITEMBANK", 1, 1, MenuShotcut[SHOTCUT_ITEMBANK] );
                cFILE.getflag ("SHOTCUT_RUN", 1, 1, MenuShotcut[SHOTCUT_RUN] );
                cFILE.getflag ("SHOTCUT_HELP", 1, 1, MenuShotcut[SHOTCUT_HELP] );
                cFILE.getflag ("SHOTCUT_PET", 1, 1, MenuShotcut[SHOTCUT_PET] );
                cFILE.getflag ("SHOTCUT_ATTACKMODE", 1, 1, MenuShotcut[SHOTCUT_ATTACKMODE] );
                cFILE.getflag ("SHOTCUT_PKMODE", 1, 1, MenuShotcut[SHOTCUT_PKMODE] );
                cFILE.getflag ("SHOTCUT_ITEMSHOP", 1, 1, MenuShotcut[SHOTCUT_ITEMSHOP] );
                cFILE.getflag ("SHOTCUT_CHATMACRO", 1, 1, MenuShotcut[SHOTCUT_CHATMACRO] );
                cFILE.getflag ("SHOTCUT_SUMMON", 1, 1, MenuShotcut[SHOTCUT_SUMMON] );
    
                // 盲泼 概农肺
                for (i = 0; i< CHAT_MACRO_NUM; ++i){
                    strTemp.Format("CHATMACRO%d", i);
                    cFILE.getflag ( (LPCTSTR)strTemp, 2, 2, ChatMacro[i] );
                }
    
    
            }
            if( dwVER == 0x0110 ) // 盲泼 概农肺 滚傈
            {
                cFILE.getflag ( "bDIS_CONFT", 1, 1, bDIS_CONFT );
                cFILE.getflag ( "bDIS_TRADE", 1, 1, bDIS_TRADE );
                cFILE.getflag ( "bDIS_PARTY", 1, 1, bDIS_PARTY );
                cFILE.getflag ( "bDIS_FRIEND", 1, 1, bDIS_FRIEND );        
                cFILE.getflag ( "bSHOW_SIMPLEHP", 1, 1, bSHOW_SIMPLEHP );
                cFILE.getflag ( "bSHOW_TIP", 1, 1, bSHOW_TIP );
                cFILE.getflag ( "bMOVABLE_ON_CHAT", 1, 1, bMOVABLE_ON_CHAT );
                cFILE.getflag ( "bFORCED_ATTACK", 1, 1, bFORCED_ATTACK );
                cFILE.getflag ( "bNAME_DISPLAY", 1, 1, bNAME_DISPLAY );
                cFILE.getflag ( "bNON_Rebirth", 1, 1, bNON_Rebirth );
    
                cFILE.getflag ( "bCONFT_BOUND", 1, 1, bCONFT_BOUND );
                cFILE.getflag ( "wCONFT_RECOVER", 1, 1, wCONFT_RECOVER );
                cFILE.getflag ( "fCONFT_HP_RATE", 1, 1, fCONFT_HP_RATE );
                cFILE.getflag ( "fCONFT_TAR_HP_RATE", 1, 1, fCONFT_TAR_HP_RATE );
    
                cFILE.getflag ( "dwPARTY_GET_ITEM", 1, 1, dwPARTY_GET_ITEM );
                cFILE.getflag ( "dwPARTY_GET_MONEY", 1, 1, dwPARTY_GET_MONEY );
    
                CString strTemp;
                int i = 0;
    
                // QUICK_POTION_SHOTCUT
                for (i = 0; i< QUICK_SLOT_NUM; ++i){
                    strTemp.Format("QUICK_SLOT%d", i);
                    cFILE.getflag ( (LPCTSTR)strTemp, 1, 1, QuickSlot[i] );
                }
    
                // QUICK_SKILL_SHOTCUT
                for (i = 0; i< QUICK_SKILL_NUM; ++i){
                    strTemp.Format("SKILL_SLOT%d", i);
                    cFILE.getflag ( (LPCTSTR)strTemp, 1, 1, SkillSlot[i] );
                }
    
    
                // MENU_SHOTCUT
                cFILE.getflag ("SHOTCUT_INVEN", 1, 1, MenuShotcut[SHOTCUT_INVEN] );
                cFILE.getflag ("SHOTCUT_CHAR", 1, 1, MenuShotcut[SHOTCUT_CHAR] );
                cFILE.getflag ("SHOTCUT_SKILL", 1, 1, MenuShotcut[SHOTCUT_SKILL] );
                cFILE.getflag ("SHOTCUT_PARTY", 1, 1, MenuShotcut[SHOTCUT_PARTY] );
                cFILE.getflag ("SHOTCUT_QUEST", 1, 1, MenuShotcut[SHOTCUT_QUEST] );
                cFILE.getflag ("SHOTCUT_CLUB", 1, 1, MenuShotcut[SHOTCUT_CLUB] );
                cFILE.getflag ("SHOTCUT_FRIEND", 1, 1, MenuShotcut[SHOTCUT_FRIEND] );
                cFILE.getflag ("SHOTCUT_MAP", 1, 1, MenuShotcut[SHOTCUT_MAP] );
                cFILE.getflag ("SHOTCUT_ITEMBANK", 1, 1, MenuShotcut[SHOTCUT_ITEMBANK] );
                cFILE.getflag ("SHOTCUT_RUN", 1, 1, MenuShotcut[SHOTCUT_RUN] );
                cFILE.getflag ("SHOTCUT_HELP", 1, 1, MenuShotcut[SHOTCUT_HELP] );
                cFILE.getflag ("SHOTCUT_PET", 1, 1, MenuShotcut[SHOTCUT_PET] );
                cFILE.getflag ("SHOTCUT_ATTACKMODE", 1, 1, MenuShotcut[SHOTCUT_ATTACKMODE] );
                cFILE.getflag ("SHOTCUT_PKMODE", 1, 1, MenuShotcut[SHOTCUT_PKMODE] );
                cFILE.getflag ("SHOTCUT_ITEMSHOP", 1, 1, MenuShotcut[SHOTCUT_ITEMSHOP] );
                cFILE.getflag ("SHOTCUT_CHATMACRO", 1, 1, MenuShotcut[SHOTCUT_CHATMACRO] );
    
                // 盲泼 概农肺
                for (i = 0; i< CHAT_MACRO_NUM; ++i){
                    strTemp.Format("CHATMACRO%d", i);
                    cFILE.getflag ( (LPCTSTR)strTemp, 2, 2, ChatMacro[i] );
                }
    
    
            }
            if( dwVER == 0x0109 ) // 盲泼 概农肺 滚傈
            {
                cFILE.getflag ( "bDIS_CONFT", 1, 1, bDIS_CONFT );
                cFILE.getflag ( "bDIS_TRADE", 1, 1, bDIS_TRADE );
                cFILE.getflag ( "bDIS_PARTY", 1, 1, bDIS_PARTY );
                cFILE.getflag ( "bDIS_FRIEND", 1, 1, bDIS_FRIEND );        
                cFILE.getflag ( "bSHOW_SIMPLEHP", 1, 1, bSHOW_SIMPLEHP );
                cFILE.getflag ( "bSHOW_TIP", 1, 1, bSHOW_TIP );
                cFILE.getflag ( "bMOVABLE_ON_CHAT", 1, 1, bMOVABLE_ON_CHAT );
                cFILE.getflag ( "bFORCED_ATTACK", 1, 1, bFORCED_ATTACK );
                cFILE.getflag ( "bNAME_DISPLAY", 1, 1, bNAME_DISPLAY );
    
                cFILE.getflag ( "bCONFT_BOUND", 1, 1, bCONFT_BOUND );
                cFILE.getflag ( "wCONFT_RECOVER", 1, 1, wCONFT_RECOVER );
                cFILE.getflag ( "fCONFT_HP_RATE", 1, 1, fCONFT_HP_RATE );
                cFILE.getflag ( "fCONFT_TAR_HP_RATE", 1, 1, fCONFT_TAR_HP_RATE );
    
                cFILE.getflag ( "dwPARTY_GET_ITEM", 1, 1, dwPARTY_GET_ITEM );
                cFILE.getflag ( "dwPARTY_GET_MONEY", 1, 1, dwPARTY_GET_MONEY );
    
                CString strTemp;
                int i = 0;
    
                // QUICK_POTION_SHOTCUT
                for (i = 0; i< QUICK_SLOT_NUM; ++i){
                    strTemp.Format("QUICK_SLOT%d", i);
                    cFILE.getflag ( (LPCTSTR)strTemp, 1, 1, QuickSlot[i] );
                }
    
                // QUICK_SKILL_SHOTCUT
                for (i = 0; i< QUICK_SKILL_NUM; ++i){
                    strTemp.Format("SKILL_SLOT%d", i);
                    cFILE.getflag ( (LPCTSTR)strTemp, 1, 1, SkillSlot[i] );
                }
    
    
                // MENU_SHOTCUT
                cFILE.getflag ("SHOTCUT_INVEN", 1, 1, MenuShotcut[SHOTCUT_INVEN] );
                cFILE.getflag ("SHOTCUT_CHAR", 1, 1, MenuShotcut[SHOTCUT_CHAR] );
                cFILE.getflag ("SHOTCUT_SKILL", 1, 1, MenuShotcut[SHOTCUT_SKILL] );
                cFILE.getflag ("SHOTCUT_PARTY", 1, 1, MenuShotcut[SHOTCUT_PARTY] );
                cFILE.getflag ("SHOTCUT_QUEST", 1, 1, MenuShotcut[SHOTCUT_QUEST] );
                cFILE.getflag ("SHOTCUT_CLUB", 1, 1, MenuShotcut[SHOTCUT_CLUB] );
                cFILE.getflag ("SHOTCUT_FRIEND", 1, 1, MenuShotcut[SHOTCUT_FRIEND] );
                cFILE.getflag ("SHOTCUT_MAP", 1, 1, MenuShotcut[SHOTCUT_MAP] );
                cFILE.getflag ("SHOTCUT_ITEMBANK", 1, 1, MenuShotcut[SHOTCUT_ITEMBANK] );
                cFILE.getflag ("SHOTCUT_RUN", 1, 1, MenuShotcut[SHOTCUT_RUN] );
                cFILE.getflag ("SHOTCUT_HELP", 1, 1, MenuShotcut[SHOTCUT_HELP] );
                cFILE.getflag ("SHOTCUT_PET", 1, 1, MenuShotcut[SHOTCUT_PET] );
                cFILE.getflag ("SHOTCUT_ATTACKMODE", 1, 1, MenuShotcut[SHOTCUT_ATTACKMODE] );
                cFILE.getflag ("SHOTCUT_PKMODE", 1, 1, MenuShotcut[SHOTCUT_PKMODE] );
                cFILE.getflag ("SHOTCUT_ITEMSHOP", 1, 1, MenuShotcut[SHOTCUT_ITEMSHOP] );
                cFILE.getflag ("SHOTCUT_CHATMACRO", 1, 1, MenuShotcut[SHOTCUT_CHATMACRO] );
    
                // 盲泼 概农肺
                for (i = 0; i< CHAT_MACRO_NUM; ++i){
                    strTemp.Format("CHATMACRO%d", i);
                    cFILE.getflag ( (LPCTSTR)strTemp, 2, 2, ChatMacro[i] );
                }
    
    
            }
            else if ( dwVER==0x0108 ) // 窜绵虐 历厘 滚傈
            { 
                cFILE.getflag ( "bDIS_CONFT", 1, 1, bDIS_CONFT );
                cFILE.getflag ( "bDIS_TRADE", 1, 1, bDIS_TRADE );
                cFILE.getflag ( "bDIS_PARTY", 1, 1, bDIS_PARTY );
                cFILE.getflag ( "bDIS_FRIEND", 1, 1, bDIS_FRIEND );        
                cFILE.getflag ( "bSHOW_SIMPLEHP", 1, 1, bSHOW_SIMPLEHP );
                cFILE.getflag ( "bSHOW_TIP", 1, 1, bSHOW_TIP );
                cFILE.getflag ( "bMOVABLE_ON_CHAT", 1, 1, bMOVABLE_ON_CHAT );
                cFILE.getflag ( "bFORCED_ATTACK", 1, 1, bFORCED_ATTACK );
                cFILE.getflag ( "bNAME_DISPLAY", 1, 1, bNAME_DISPLAY );
    
                cFILE.getflag ( "bCONFT_BOUND", 1, 1, bCONFT_BOUND );
                cFILE.getflag ( "wCONFT_RECOVER", 1, 1, wCONFT_RECOVER );
                cFILE.getflag ( "fCONFT_HP_RATE", 1, 1, fCONFT_HP_RATE );
                cFILE.getflag ( "fCONFT_TAR_HP_RATE", 1, 1, fCONFT_TAR_HP_RATE );
    
                cFILE.getflag ( "dwPARTY_GET_ITEM", 1, 1, dwPARTY_GET_ITEM );
                cFILE.getflag ( "dwPARTY_GET_MONEY", 1, 1, dwPARTY_GET_MONEY );
    
                CString strTemp;
                int i = 0;
    
                // QUICK_POTION_SHOTCUT
                for (i = 0; i< QUICK_SLOT_NUM; ++i){
                    strTemp.Format("QUICK_SLOT%d", i);
                    cFILE.getflag ( (LPCTSTR)strTemp, 1, 1, QuickSlot[i] );
                }
    
                // QUICK_SKILL_SHOTCUT
                for (i = 0; i< QUICK_SKILL_NUM; ++i){
                    strTemp.Format("SKILL_SLOT%d", i);
                    cFILE.getflag ( (LPCTSTR)strTemp, 1, 1, SkillSlot[i] );
                }
    
                // QUICK_MENU_SHOTCUT
                for (i = 0; i< QUICK_MENU_NUM; ++i){
                    strTemp.Format("MENU_SHOTCUT%d", i);
                    cFILE.getflag ( (LPCTSTR)strTemp, 1, 1, MenuShotcut[i] );
                }
            }
            else if ( dwVER==0x0107 )
            {
                cFILE.getflag ( "bDIS_CONFT", 1, 1, bDIS_CONFT );
                cFILE.getflag ( "bDIS_TRADE", 1, 1, bDIS_TRADE );
                cFILE.getflag ( "bDIS_PARTY", 1, 1, bDIS_PARTY );
                cFILE.getflag ( "bDIS_FRIEND", 1, 1, bDIS_FRIEND );        
                cFILE.getflag ( "bSHOW_SIMPLEHP", 1, 1, bSHOW_SIMPLEHP );
                cFILE.getflag ( "bSHOW_TIP", 1, 1, bSHOW_TIP );
                cFILE.getflag ( "bMOVABLE_ON_CHAT", 1, 1, bMOVABLE_ON_CHAT );
                cFILE.getflag ( "bFORCED_ATTACK", 1, 1, bFORCED_ATTACK );
                cFILE.getflag ( "bNAME_DISPLAY", 1, 1, bNAME_DISPLAY );
    
                cFILE.getflag ( "bCONFT_BOUND", 1, 1, bCONFT_BOUND );
                cFILE.getflag ( "wCONFT_RECOVER", 1, 1, wCONFT_RECOVER );
                cFILE.getflag ( "fCONFT_HP_RATE", 1, 1, fCONFT_HP_RATE );
                cFILE.getflag ( "fCONFT_TAR_HP_RATE", 1, 1, fCONFT_TAR_HP_RATE );
    
                cFILE.getflag ( "dwPARTY_GET_ITEM", 1, 1, dwPARTY_GET_ITEM );
                cFILE.getflag ( "dwPARTY_GET_MONEY", 1, 1, dwPARTY_GET_MONEY );
            }
            else if ( dwVER==0x0106 )
            {
                cFILE.getflag ( "bDIS_CONFT", 1, 1, bDIS_CONFT );
                cFILE.getflag ( "bDIS_TRADE", 1, 1, bDIS_TRADE );
                cFILE.getflag ( "bDIS_PARTY", 1, 1, bDIS_PARTY );
                cFILE.getflag ( "bDIS_FRIEND", 1, 1, bDIS_FRIEND );        
                cFILE.getflag ( "bSHOW_SIMPLEHP", 1, 1, bSHOW_SIMPLEHP );
                cFILE.getflag ( "bSHOW_TIP", 1, 1, bSHOW_TIP );
                cFILE.getflag ( "bMOVABLE_ON_CHAT", 1, 1, bMOVABLE_ON_CHAT );
    
                cFILE.getflag ( "bCONFT_BOUND", 1, 1, bCONFT_BOUND );
                cFILE.getflag ( "wCONFT_RECOVER", 1, 1, wCONFT_RECOVER );
                cFILE.getflag ( "fCONFT_HP_RATE", 1, 1, fCONFT_HP_RATE );
                cFILE.getflag ( "fCONFT_TAR_HP_RATE", 1, 1, fCONFT_TAR_HP_RATE );
    
                cFILE.getflag ( "dwPARTY_GET_ITEM", 1, 1, dwPARTY_GET_ITEM );
                cFILE.getflag ( "dwPARTY_GET_MONEY", 1, 1, dwPARTY_GET_MONEY );
            }
            else if ( dwVER==0x0105 )
            {
                cFILE.getflag ( "bDIS_CONFT", 1, 1, bDIS_CONFT );
                cFILE.getflag ( "bDIS_TRADE", 1, 1, bDIS_TRADE );
                cFILE.getflag ( "bDIS_PARTY", 1, 1, bDIS_PARTY );
                cFILE.getflag ( "bDIS_FRIEND", 1, 1, bDIS_FRIEND );        
                cFILE.getflag ( "bSHOW_SIMPLEHP", 1, 1, bSHOW_SIMPLEHP );        
    
                cFILE.getflag ( "bCONFT_BOUND", 1, 1, bCONFT_BOUND );
                cFILE.getflag ( "wCONFT_RECOVER", 1, 1, wCONFT_RECOVER );
                cFILE.getflag ( "fCONFT_HP_RATE", 1, 1, fCONFT_HP_RATE );
                cFILE.getflag ( "fCONFT_TAR_HP_RATE", 1, 1, fCONFT_TAR_HP_RATE );
    
                cFILE.getflag ( "dwPARTY_GET_ITEM", 1, 1, dwPARTY_GET_ITEM );
                cFILE.getflag ( "dwPARTY_GET_MONEY", 1, 1, dwPARTY_GET_MONEY );
            }
            else if ( dwVER==0x0104 || dwVER==0x0103 )
            {
                cFILE.getflag ( "bDIS_CONFT", 1, 1, bDIS_CONFT );
                cFILE.getflag ( "bDIS_TRADE", 1, 1, bDIS_TRADE );
                cFILE.getflag ( "bDIS_PARTY", 1, 1, bDIS_PARTY );
                cFILE.getflag ( "bDIS_FRIEND", 1, 1, bDIS_FRIEND );            
    
                cFILE.getflag ( "bCONFT_BOUND", 1, 1, bCONFT_BOUND );
                cFILE.getflag ( "wCONFT_RECOVER", 1, 1, wCONFT_RECOVER );
                cFILE.getflag ( "fCONFT_HP_RATE", 1, 1, fCONFT_HP_RATE );
                cFILE.getflag ( "fCONFT_TAR_HP_RATE", 1, 1, fCONFT_TAR_HP_RATE );
    
                cFILE.getflag ( "dwPARTY_GET_ITEM", 1, 1, dwPARTY_GET_ITEM );
                cFILE.getflag ( "dwPARTY_GET_MONEY", 1, 1, dwPARTY_GET_MONEY );
            }
            else if ( dwVER==0x0102 )
            {
                cFILE.getflag ( "bDIS_CONFT", 1, 1, bDIS_CONFT );
                cFILE.getflag ( "bDIS_TRADE", 1, 1, bDIS_TRADE );
                cFILE.getflag ( "bDIS_PARTY", 1, 1, bDIS_PARTY );
    
                cFILE.getflag ( "bCONFT_BOUND", 1, 1, bCONFT_BOUND );
                cFILE.getflag ( "wCONFT_RECOVER", 1, 1, wCONFT_RECOVER );
                cFILE.getflag ( "fCONFT_HP_RATE", 1, 1, fCONFT_HP_RATE );
                cFILE.getflag ( "fCONFT_TAR_HP_RATE", 1, 1, fCONFT_TAR_HP_RATE );
    
                cFILE.getflag ( "dwPARTY_GET_ITEM", 1, 1, dwPARTY_GET_ITEM );
                cFILE.getflag ( "dwPARTY_GET_MONEY", 1, 1, dwPARTY_GET_MONEY );
            }
            else if ( dwVER==0x0101 )
            {
                cFILE.getflag ( "bDIS_CONFT", 1, 1, bDIS_CONFT );
                cFILE.getflag ( "bDIS_TRADE", 1, 1, bDIS_TRADE );
                cFILE.getflag ( "bDIS_PARTY", 1, 1, bDIS_PARTY );
    
                cFILE.getflag ( "bCONFT_BOUND", 1, 1, bCONFT_BOUND );
                cFILE.getflag ( "wCONFT_RECOVER", 1, 1, wCONFT_RECOVER );
                cFILE.getflag ( "fCONFT_HP_RATE", 1, 1, fCONFT_HP_RATE );
                cFILE.getflag ( "fCONFT_TAR_HP_RATE", 1, 1, fCONFT_TAR_HP_RATE );
    
                cFILE.getflag ( "dwPARTY_GET_ITEM", 1, 1, dwPARTY_GET_ITEM );
                cFILE.getflag ( "dwPARTY_GET_MONEY", 1, 1, dwPARTY_GET_MONEY );
            }
    
            return TRUE;
        }
    
        BOOL SAVE_GAMEOPT ()
        {
            std::string strUSERID = GETCHARID(); // 颇老疙 啊廉坷绰 何盒...
            if ( strUSERID.empty() )
            {
                //MessageBox ( NULL, "USERID啊 瘤沥登绢 乐瘤 臼酒 SAVE_GAMEOPT() 荐青阂啊.", "ERROR", MB_OK );
                return FALSE;
            }
            
            TCHAR szPROFILE[MAX_PATH]={0};
            SHGetSpecialFolderPath( NULL, szPROFILE, CSIDL_PERSONAL, FALSE );
    
            std::string strOPTFILE(szPROFILE);
            strOPTFILE += SUBPATH::PLAYINFO_ROOT;
            strOPTFILE += strUSERID;
            strOPTFILE += _T(".gameopt");
    
            FILE* file=NULL;
            file = fopen ( strOPTFILE.c_str(), "wt" );
            if ( !file )    return FALSE;
    
            fprintf ( file, "\n" );
            fprintf ( file, "// GAME OPTION\n" );
    
            fprintf ( file, "EMGAMEOPT_VER\t%d\n", EMGAMEOPT_VER );
            fprintf ( file, "bDIS_CONFT\t%d\n", bDIS_CONFT );
            fprintf ( file, "bDIS_TRADE\t%d\n", bDIS_TRADE );
            fprintf ( file, "bDIS_PARTY\t%d\n", bDIS_PARTY );
            fprintf ( file, "bDIS_FRIEND\t%d\n", bDIS_FRIEND );    
            fprintf ( file, "bSHOW_SIMPLEHP\t%d\n", bSHOW_SIMPLEHP );    
            fprintf ( file, "bSHOW_TIP\t%d\n", bSHOW_TIP );
            fprintf ( file, "bMOVABLE_ON_CHAT\t%d\n", bMOVABLE_ON_CHAT );
            fprintf ( file, "bFORCED_ATTACK\t%d\n", bFORCED_ATTACK );
            fprintf ( file, "bNAME_DISPLAY\t%d\n", bNAME_DISPLAY );
            fprintf ( file, "bNON_Rebirth\t%d\n", bNON_Rebirth );
    
            fprintf ( file, "bCONFT_BOUND\t%d\n", bCONFT_BOUND );
            fprintf ( file, "wCONFT_RECOVER\t%d\n", wCONFT_RECOVER );
            fprintf ( file, "fCONFT_HP_RATE\t%1.1f\n", fCONFT_HP_RATE );
            fprintf ( file, "fCONFT_TAR_HP_RATE\t%1.1f\n", fCONFT_TAR_HP_RATE );
    
            fprintf ( file, "dwPARTY_GET_ITEM\t%d\n", dwPARTY_GET_ITEM );
            fprintf ( file, "dwPARTY_GET_MONEY\t%d\n", dwPARTY_GET_MONEY );
    
    
            CString strTemp;
            int i=0;
    
            // QUICK_POTION_SHOTCUT
            for (i=0; i< QUICK_SLOT_NUM; ++i){
                if(QuickSlot[i] > 0){
                    strTemp.Format("QUICK_SLOT%d\t%d\n", i, QuickSlot[i]);            
                    fprintf ( file, strTemp);
                }
            }
    
            // QUICK_SKILL_SHOTCUT
            for (i=0; i< QUICK_SKILL_NUM; ++i){
                if(SkillSlot[i] > 0){
                    strTemp.Format("SKILL_SLOT%d\t%d\n", i, SkillSlot[i]);
                    fprintf ( file, strTemp);
                }
            }
    
            // MENU_SHOTCUT
            fprintf ( file, "SHOTCUT_INVEN\t%d\n", MenuShotcut[SHOTCUT_INVEN] );
            fprintf ( file, "SHOTCUT_CHAR\t%d\n", MenuShotcut[SHOTCUT_CHAR] );
            fprintf ( file, "SHOTCUT_SKILL\t%d\n", MenuShotcut[SHOTCUT_SKILL] );
            fprintf ( file, "SHOTCUT_PARTY\t%d\n", MenuShotcut[SHOTCUT_PARTY] );
            fprintf ( file, "SHOTCUT_QUEST\t%d\n", MenuShotcut[SHOTCUT_QUEST] );
            fprintf ( file, "SHOTCUT_CLUB\t%d\n", MenuShotcut[SHOTCUT_CLUB] );
            fprintf ( file, "SHOTCUT_FRIEND\t%d\n", MenuShotcut[SHOTCUT_FRIEND] );
            fprintf ( file, "SHOTCUT_MAP\t%d\n", MenuShotcut[SHOTCUT_MAP] );
            fprintf ( file, "SHOTCUT_ITEMBANK\t%d\n", MenuShotcut[SHOTCUT_ITEMBANK] );
            fprintf ( file, "SHOTCUT_RUN\t%d\n", MenuShotcut[SHOTCUT_RUN] );
            fprintf ( file, "SHOTCUT_HELP\t%d\n", MenuShotcut[SHOTCUT_HELP] );
            fprintf ( file, "SHOTCUT_PET\t%d\n", MenuShotcut[SHOTCUT_PET] );
            fprintf ( file, "SHOTCUT_ATTACKMODE\t%d\n", MenuShotcut[SHOTCUT_ATTACKMODE] );
            fprintf ( file, "SHOTCUT_PKMODE\t%d\n", MenuShotcut[SHOTCUT_PKMODE] );
            fprintf ( file, "SHOTCUT_ITEMSHOP\t%d\n", MenuShotcut[SHOTCUT_ITEMSHOP] );
            fprintf ( file, "SHOTCUT_CHATMACRO\t%d\n", MenuShotcut[SHOTCUT_CHATMACRO] );
            fprintf ( file, "SHOTCUT_SUMMON\t%d\n", MenuShotcut[SHOTCUT_SUMMON] );
    
            // 盲泼 概农肺
            CString strMacro;
            for (i=0; i< CHAT_MACRO_NUM; ++i){
                if(ChatMacro[i].GetLength() > 0){
                    strMacro = ChatMacro[i];
                    strMacro.Replace("%", "%%");
                    strTemp.Format("CHATMACRO%d\t=\t%s\n", i, strMacro);
                    fprintf ( file, strTemp);
                }
            }
    
    
            fclose ( file );
        
            return TRUE;
        }
    
        
        BOOL LOAD_PARAM( const TCHAR *szRootPath )
        {
            strParamFile = strRootPath;
            strParamFile += "\\param.ini";
    
            CIniLoader cFILE;
            
            if( !cFILE.open( strParamFile, true) )
            {
                return FALSE;
            }
    
            // param.ini use not error msg box
            cFILE.SetUseErrorMsgBox( FALSE );
    
            {
                cFILE.getflag_sz( "SERVER SET", "LoginAddress", 0, 1, LoginAddress, STRING_NUM_128 );
    
                UINT nNum = cFILE.GetKeyDataSize( "SERVER SET", "HttpAddress" );
    
                memset( HttpAddressTable, 0, sizeof(HttpAddressTable) );
                
                for ( UINT i=0; i<nNum; ++i )
                {
                    CString strHttpAddress;
                    cFILE.getflag( "SERVER SET", "HttpAddress", i, nNum, strHttpAddress );
                    strHttpAddress.Trim( _T(" ") );
    
                    StringCchCopy( HttpAddressTable[i], STRING_NUM_128, strHttpAddress );
                }
                cFILE.getflag ( "SERVER SET", "strNewsURL", 0, 1, strNewsURL );
                cFILE.getflag ( "SERVER SET", "nPort", 0, 1, nPort );
                cFILE.getflag ( "SERVER SET", "strConnectionURL", 0, 1, strConnectionURL );
                cFILE.getflag ( "SERVER SET", "bUsePassiveDN", 0, 1, bUsePassiveDN );            
            }
    
            #ifdef CH_PARAM
            {
                CString strSection;
    
                for( UINT i=0; i<MAX_CHINA_REGION; ++i )
                {
                    strSection.Format( "CH_REGION_%d", i );
                    cFILE.getflag( strSection.GetString(), "strName", 0, 1, China_Region[i].strName );
                    cFILE.getflag( strSection.GetString(), "LoginAddress", 0, 1, China_Region[i].LoginAddress );
    
                    UINT nNum = cFILE.GetKeyDataSize( strSection.GetString(), "HttpAddress" );
                    if( nNum > MAX_HTTP ) nNum = MAX_HTTP;
                    for( UINT j=0; j<nNum; ++j )
                    {
                        cFILE.getflag( strSection.GetString(), "HttpAddress", j, nNum, China_Region[i].HttpAddressTable[j] );
                        China_Region[i].HttpAddressTable[j].Trim( _T(" ") );
                    }
    
                    cFILE.getflag( strSection.GetString(), "strNewsURL", 0, 1, China_Region[i].strNewsURL );
    
                    nNum = cFILE.GetKeyDataSize( strSection.GetString(), "ServerName" );
                    if( nNum > MAX_SERVER ) nNum = MAX_SERVER;
                    for( UINT j=0; j<nNum; ++j )
                    {
                        cFILE.getflag( strSection.GetString(), "ServerName", j, nNum, China_Region[i].ServerName[j] );
                        China_Region[i].ServerName[j].Trim( _T(" ") );
                    }
    
                    cFILE.getflag( strSection.GetString(), "ItemShopAddress", 0, 1, China_Region[i].strItemShop );
                }
            }
            #endif
    
            {
                cFILE.getflag ( "GUI OPTION", "dwLangSet", 0, 1, dwLangSet );
                cFILE.getflag ( "GUI OPTION", "strGDIFont", 0, 1, strGDIFont );
            }
    
            {
                cFILE.getflag ( "TEXT FILE", "strCountry", 0, 1, strCountry );
                cFILE.getflag ( "TEXT FILE", "strLauncherText", 0, 1, strLauncherText );    
                cFILE.getflag ( "TEXT FILE", "strGameInText", 0, 1, strGameInText );
                cFILE.getflag ( "TEXT FILE", "strGameExText", 0, 1, strGameExText );
                cFILE.getflag ( "TEXT FILE", "strGameWord", 0, 1, strGameWord );
                cFILE.getflag ( "TEXT FILE", "strServerText", 0, 1, strServerText );
    
                cFILE.getflag ( "TEXT FILE", "strUIOuterCfg", 0, 1, strUIOuterCfg );
                cFILE.getflag ( "TEXT FILE", "strUIInnerCfg01", 0, 1, strUIInnerCfg01 );
                cFILE.getflag ( "TEXT FILE", "strUIInnerCfg02", 0, 1, strUIInnerCfg02 );
                cFILE.getflag ( "TEXT FILE", "strUIInnerCfg03", 0, 1, strUIInnerCfg03 );
                cFILE.getflag ( "TEXT FILE", "strUIExtCfg", 0, 1, strUIExtCfg );
            }
    
            // 档框富 昆 其捞瘤 林家, 酒流 荤侩 救窃 ( 霖酋 )
    cFILE.getflag_sz( "ETC OPTION", "HelpAddress", 0, 1, HelpAddress, STRING_NUM_128 );
    cFILE.getflag_sz( "ETC OPTION", "ItemShopAddress", 0, 1, ItemShopAddress, STRING_NUM_128 );
    cFILE.getflag_sz( "ETC OPTION", "RPFDataPath", 0, 1, RPFDataPath, STRING_NUM_128 );
    
            //    Note : 蜡瓤己 眉农.
            //
            if ( COMMENT::FONTSYS[0]!=strFontType.GetString() && COMMENT::FONTSYS[1]!=strFontType.GetString() )
            {
                strFontType = COMMENT::FONTSYS[0].c_str();
            }        
    
            return TRUE;
        }
    
        
        BOOL LOAD_OPT( const TCHAR *szRootPath, bool bServer )
        {
            strOptionFile = strRootPath;
            strOptionFile += "\\option.ini";
    
    
            if ( !PathFileExists( strOptionFile.c_str() ) )
            {
                return FALSE;
            }
    
            CIniLoader cFILE;
            
            if( !cFILE.open( strOptionFile, true) )
            {
                return FALSE;
            }
    
            // param.ini use not error msg box
            cFILE.SetUseErrorMsgBox( FALSE );
    
            #ifndef KR_PARAM
            {
                if( !bServer )
                {
                //#ifndef TW_PARAM
                //    cFILE.getflag( "GAME OPTION", "bSAVE_USERID", 0, 1, bSAVE_USERID );
                //    if ( bSAVE_USERID )
                //#endif
                    {
                        cFILE.getflag( "GAME OPTION", "strENC_USERID", 0, 1, strENC_USERID );
                        if ( strIDNULL == strENC_USERID )    strENC_USERID = "";
                    }
                }
                //cFILE.getflag ( "GAME OPTION", "bDISP_CONSOLE", 0, 1, bDISP_CONSOLE );
                //cFILE.getflag ( "GAME OPTION", "bDISP_FPS", 0, 1, bDISP_FPS );
            }
            #endif
    
            cFILE.getflag( "GAME OPTION", "nChinaRegion", 0, 1, nChinaRegion );
            //cFILE.getflag( "GAME OPTION", "nPort", 0, 1, nPort );
            
            {
                cFILE.getflag ( "SCREEN OPTION", "bCHECKWHQL", 0, 1, bCHECKWHQL );
                cFILE.getflag ( "SCREEN OPTION", "dwScrWidth", 0, 1, dwScrWidth );
                cFILE.getflag ( "SCREEN OPTION", "dwScrHeight", 0, 1, dwScrHeight );
                int nTEMP(0);
                cFILE.getflag ( "SCREEN OPTION", "emScrFormat", 0, 1, nTEMP );
                emScrFormat = (EMSCREEN_FORMAT) nTEMP;
                cFILE.getflag ( "SCREEN OPTION", "uScrRefreshHz", 0, 1, uScrRefreshHz );
                cFILE.getflag ( "SCREEN OPTION", "bScrWindowed", 0, 1, bScrWindowed );
                cFILE.getflag ( "SCREEN OPTION", "bScrWndFullSize", 0, 1, bScrWndFullSize );
                cFILE.getflag ( "SCREEN OPTION", "bGameCursor", 0, 1, bGameCursor );
            }
            
            {
                cFILE.getflag ( "SOUND OPTION", "b3D_SOUND", 0, 1, b3D_SOUND );
                cFILE.getflag ( "SOUND OPTION", "nSndSfx", 0, 1, nSndSfx );
                cFILE.getflag ( "SOUND OPTION", "nSndMap", 0, 1, nSndMap );
                cFILE.getflag ( "SOUND OPTION", "nSndMusic", 0, 1, nSndMusic );
                cFILE.getflag ( "SOUND OPTION", "dw3DAlgorithm", 0, 1, dw3DAlgorithm );
                cFILE.getflag ( "SOUND OPTION", "dwSndBufferSize", 0, 1, dwSndBufferSize );
                cFILE.getflag ( "SOUND OPTION", "bSndMuteSfx", 0, 1, bSndMuteSfx );
                cFILE.getflag ( "SOUND OPTION", "bSndMuteMap", 0, 1, bSndMuteMap );
                cFILE.getflag ( "SOUND OPTION", "bSndMuteMusic", 0, 1, bSndMuteMusic );
            }
    
            {
                cFILE.getflag ( "GRAPHIC OPTION", "dwVideoLevel", 0, 1, dwVideoLevel );
                cFILE.getflag ( "GRAPHIC OPTION", "dwShadowChar", 0, 1, dwShadowChar );
                cFILE.getflag ( "GRAPHIC OPTION", "bBuff", 0, 1, bBuff );
                cFILE.getflag ( "GRAPHIC OPTION", "bShadowLand", 0, 1, bShadowLand );
                cFILE.getflag ( "GRAPHIC OPTION", "bRealReflect", 0, 1, bRealReflect );
                cFILE.getflag ( "GRAPHIC OPTION", "bRefract", 0, 1, bRefract );
                cFILE.getflag ( "GRAPHIC OPTION", "bGlow", 0, 1, bGlow );
                cFILE.getflag ( "GRAPHIC OPTION", "bPost", 0, 1, bPost );
                cFILE.getflag ( "GRAPHIC OPTION", "bFrameLimit", 0, 1, bFrameLimit );
                cFILE.getflag ( "GRAPHIC OPTION", "dwSkinDetail", 0, 1, dwSkinDetail );
                cFILE.getflag ( "GRAPHIC OPTION", "dwFogRange", 0, 1, dwFogRange );
                cFILE.getflag ( "GRAPHIC OPTION", "bBUFF_SFX", 0, 1, bBUFF_SFX );
                cFILE.getflag ( "GRAPHIC OPTION", "bEMOTICON", 0, 1, bEMOTICON );
                cFILE.getflag ( "GRAPHIC OPTION", "strFontType", 0, 1, strFontType );
            }
    
            if ( !bScrWndHalfSize )        bScrWndFullSize = TRUE;
    
            return TRUE;        
        }
    };

    add crypt.cpp & h under enginelib project

    rebuild enginelib then build cryptionrcc. done


    >>Click here to download<<

    EDIT :
    Asendure.ini <-- download and put inside client directory (same directory with param.ini)
    and encrypt AsenDURE.ini with your REditor.


    NOTE : THIS ENCRYPTION ONLY CAN BE APPLIED FOR FILES INSIDE .RCC ONLY!

    QUIT.


    'SELAMAT HARI RAYA AIDILFITRI'

    Credits :
    prisonmx : for the fresh source
    seiferxiii : for forwarding the source to jdev
    jdev : for fixing the fresh code

    thanks for reupload i just want to merge this to ran gs source hope it will run to gs source to be able to encrypt files

  5. #65
    Newbie Borri is offline
    MemberRank
    Jul 2021 Join Date
    4Posts

    Re: [Share] CryptionRCC Source Code (for source developer).

    Quote Originally Posted by AsenDURE View Post
    CryptionRCC Source Code



    Screenshot :



    Few editing needed, see post below :

    find : '//add crypt' then add the code


    SerialMemory.cpp
    Code:
    #include "stdafx.h"
    #include "./SerialMemory.h"
    #include "./CompByte.h"
    #include "./Unzipper.h"
    #include "./SFileSystem.h"
    #include "../enginelib/G-Logic/GLogic.h"
    #include "../enginelib/Crypt.h"//add crypt
    
    #ifdef _DEBUG
    #define new DEBUG_NEW
    #endif
    
    CSerialMemory::CSerialMemory(void) 
        : m_pBuffer(NULL)
        , m_nBufSize(0)
        , m_dwOffSet(0)
    {
    }
    
    CSerialMemory::CSerialMemory ( const char *_szZipFileName, const char *_szFileName, bool bencode ) 
        : m_pBuffer(NULL)
        , m_nBufSize(0)
        , m_dwOffSet(0)
    {
        GASSERT(_szFileName);
        GASSERT(_szZipFileName);
    
        OpenFile ( _szZipFileName, _szFileName, bencode );
    }
    
    CSerialMemory::~CSerialMemory(void)
    {
        CloseFile ();
    }
    
    void CSerialMemory::GetFileType ( char *szFileType, int nStrLen, DWORD &FileID )
    {
        StringCchCopy( szFileType, nStrLen, m_szFileType );
        FileID = m_FileID;
    }
    
    void CSerialMemory::CloseFile ()
    {
        if ( m_pBuffer )
        {
            delete[] m_pBuffer;
            m_pBuffer = NULL;
        } // if ( m_pBuffer )
    
        m_DefaultOffSet = 0;
        m_nBufSize = 0;
        m_dwOffSet = 0;
        m_IsFileOpened = FALSE;
        m_FileID = 0;
    }
    
    BOOL CSerialMemory::OpenFile (    const char *_szZipFileName, 
                                    const char *_szFileName, 
                                    bool bencode, 
                                    BOOL bPack )
    {
        //GASSERT(_szFileName);
        //GASSERT(_szZipFileName);
        if( !_szFileName || !_szZipFileName ) return FALSE;
    
        // 捞固 凯妨 乐阑锭 颇老 摧澜.
        if( IsOpen() ) CloseFile ();
    
        if( bPack )
        {
            CString strPath;
            strPath = _szZipFileName;
            strPath += _szFileName;
    
            SFileHandle * pFileHandle = GLOGIC::sFileSystem.OpenFile( strPath );
            if( pFileHandle )
            {
                FILECONTEXT * pFileContext = pFileHandle->GetFileContext();
                if( pFileContext )
                {
                    BYTE buffer[4096]={0};
                    DWORD dwRead;
    
                    m_nBufSize = 0;
                    m_pBuffer = new BYTE[pFileContext->lUncompressSize];
    
                    do
                    {
                        dwRead = pFileHandle->Read( buffer, 4096 );
                        
                        memcpy( m_pBuffer+m_nBufSize, buffer, dwRead );
                        m_nBufSize += dwRead;
                    }
                    while(dwRead > 0);
                }
    
                GLOGIC::sFileSystem.CloseFile( pFileHandle );
            }
        }
        else
        {
            CUnzipper cUnzip;
            m_nBufSize = cUnzip.UnzipToMemory( _szZipFileName, _szFileName, m_pBuffer );
        }
    
        // note :    颇老 荤捞令啊 呈公 目档 UINT_MAX啊 逞绢 咳. 距 17皋啊.
        //            颇老阑 1捞扼档 佬菌促绰吧 犬脚且荐 乐唱?
        if( m_nBufSize == UINT_MAX || m_nBufSize == 0)
            return FALSE;
    
        m_OpenType = FOT_READ;
        m_bencode = bencode;
        StringCchCopy ( m_szFileName, _MAX_FNAME, _szFileName );
        StringCchCopy ( m_szZipFileName, _MAX_PATH, _szZipFileName );
    
        if ( CCrypt::bCryptRCC )//add crypt
        {
            CCrypt::Decryption( (BYTE*) m_pBuffer , m_nBufSize );
        }
    
        //if( m_bencode )
        //{
        //    int nVersion;
        //    memcpy( &nVersion, m_pBuffer, sizeof(int) );
        //    if( nVersion > 0 && CRijndael::VERSION >= nVersion )
        //    {
        //        m_nVersion = nVersion;
        //        m_oRijndael.Initialize( CRijndael::sm_Version[nVersion-1], CRijndael::DEFAULT_KEY_LENGTH );
    
        //        m_nBufSize -= sizeof(int);
        //        memcpy( m_pBuffer, m_pBuffer+sizeof(int), m_nBufSize );
        //        
        //        m_oRijndael.DecryptEx( (char*)m_pBuffer, m_nBufSize );
        //    }
        //}
    
        ReadFileType ();
    
        m_IsFileOpened = TRUE;
        return TRUE;
    }
    
    void CSerialMemory::ReadFileType ()
    {
        int Num = 0;
    
        Num = (int)read( &m_szFileType, sizeof( char )*FILETYPESIZE );
        Num = (int)read( &m_FileID, sizeof( DWORD ) );
    
        m_DefaultOffSet = m_dwOffSet;
    }
    
    DWORD CSerialMemory::ReadBlockSize ()
    {
        DWORD dwSize;
        *this >> dwSize;
        return dwSize;
    }
    
    inline size_t CSerialMemory::read ( void* pbuffer, DWORD dwSize )
    {
        GASSERT(m_nBufSize&&"CSerialMemory::read()");
        GASSERT(pbuffer&&"CSerialMemory::read()");
        
        if ( (m_dwOffSet+dwSize) > m_nBufSize )        return 0;
    
        memcpy( pbuffer, m_pBuffer + m_dwOffSet, dwSize );
        m_dwOffSet += dwSize;
    
        if ( m_bencode )
        {
            //if( m_nVersion == -1 )
            //{
                compbyte::decode ( (BYTE*)pbuffer, dwSize );
            //}
        }
    
        // 喊 狼固绝绰 蔼
        return 1;
    }
    
    BOOL CSerialMemory::ReadBuffer ( void* pBuffer, DWORD Size )
    {
        GASSERT(pBuffer);
    
        int Num = 0;
    
        Num = (int)read ( pBuffer, Size );
    
        return TRUE;
    }
    
    // Note : SerialFile狼 扁夯 颇老 HEADER康开阑 力寇茄 镑 何磐.
    //        0 - Position.
    //
    BOOL CSerialMemory::SetOffSet ( long _OffSet )
    {
        m_dwOffSet = _OffSet + m_DefaultOffSet;
        if( m_dwOffSet < 0 )
            return FALSE;
        
        return TRUE;
    }
    
    //    Note : 颇老狼 m_DefaultOffSet甫 力寇茄 泅力 困摹甫 啊廉柯促.
    //
    long CSerialMemory::GetfTell ()
    {
        return m_dwOffSet - m_DefaultOffSet;
    }
    
    BOOL CSerialMemory::BeginBlock ( EMSFILE_BLOCK _emBLOCK )
    {
        //if ( emBLOCK > EMBLOCK_SIZE )    return FALSE;
    
        GASSERT(m_nMarkPos[m_dwBlockMarkPOS]==0&&"CSerialMemory::BeginBlock");
    
        m_nMarkPos[m_dwBlockMarkPOS] = GetfTell();    //    泅犁 困摹 历厘.
        *this << DWORD(-1);                    //    MARK 历厘.
    
        ++m_dwBlockMarkPOS;
    
        return TRUE;
    }
    
    BOOL CSerialMemory::EndBlock ( EMSFILE_BLOCK _emBLOCK )
    {
        //if ( emBLOCK > EMBLOCK_SIZE )    return FALSE;
    
        --m_dwBlockMarkPOS;
    
        GASSERT(m_nMarkPos[m_dwBlockMarkPOS]!=0&&"CSerialMemory::EndBlock");
    
        long nEndPos = GetfTell();
        DWORD dwTotalSize = DWORD ( ( nEndPos - m_nMarkPos[m_dwBlockMarkPOS] ) - sizeof(DWORD) );
    
        SetOffSet ( m_nMarkPos[m_dwBlockMarkPOS] );
        *this << dwTotalSize;
    
        SetOffSet ( nEndPos );
    
        m_nMarkPos[m_dwBlockMarkPOS] = 0;
    
        return TRUE;
    }
    
    //////////////////////////////////////////////////////////////////////////////////
    // 荐沥 救秦档 登绰 窃荐
    
    BOOL CSerialMemory::operator >> ( short &Value )
    {
        GASSERT(m_OpenType==FOT_READ);
        int Num = 0;
    
        Value = FALSE;
        Num = (int)read ( &Value, sizeof(Value) );
    
        return TRUE;
    }
    
    BOOL CSerialMemory::operator >> ( int &Value )
    {
        GASSERT(m_OpenType==FOT_READ);
        int Num = 0;
    
        Value = FALSE;
        Num = (int)read ( &Value, sizeof(Value) );
    
        return TRUE;
    }
    
    BOOL CSerialMemory::operator >> ( WORD &Value )
    {
        GASSERT(m_OpenType==FOT_READ);
        int Num = 0;
    
        Value = FALSE;
        Num = (int)read ( &Value, sizeof(Value) );
    
        return TRUE;
    }
    
    BOOL CSerialMemory::operator >> ( DWORD &Value )
    {
        GASSERT(m_OpenType==FOT_READ);
        int Num = 0;
    
        Value = FALSE;
        Num = (int)read ( &Value, sizeof(Value) );
    
        return TRUE;
    }
    
    BOOL CSerialMemory::operator >> ( UINT &Value )
    {
        GASSERT(m_OpenType==FOT_READ);
        int Num = 0;
    
        Num = (int)read ( &Value, sizeof(Value) );
    
        return TRUE;
    }
    
    BOOL CSerialMemory::operator >> ( float &Value )
    {
        GASSERT(m_OpenType==FOT_READ);
        int Num = 0;
    
        Num = (int)read ( &Value, sizeof(Value) );
    
        return TRUE;
    }
    
    BOOL CSerialMemory::operator >> ( double &Value )
    {
        GASSERT(m_OpenType==FOT_READ);
        int Num = 0;
    
        Num = (int)read ( &Value, sizeof(Value) );
    
        return TRUE;
    }
    
    BOOL CSerialMemory::operator >> ( D3DVECTOR &Value )
    {
        GASSERT(m_OpenType==FOT_READ);
        int Num = 0;
    
        Num = (int)read ( &Value, sizeof(Value) );
    
        return TRUE;
    }
    
    BOOL CSerialMemory::operator >> ( D3DCOLORVALUE &Value )
    {
        GASSERT(m_OpenType==FOT_READ);
        int Num = 0;
    
        Num = (int)read ( &Value, sizeof(Value) );
    
        return TRUE;
    }
    
    BOOL CSerialMemory::operator >> ( D3DBLEND &Value )
    {
        GASSERT(m_OpenType==FOT_READ);
        int Num = 0;
    
        Num = (int)read ( &Value, sizeof(Value) );
    
        return TRUE;
    }
    
    BOOL CSerialMemory::operator >> ( BYTE &Value )
    {
        GASSERT(m_OpenType==FOT_READ);
        int Num = 0;
    
        Value = FALSE;
        Num = (int)read ( &Value, sizeof(Value) );
    
        return TRUE;
    }
    
    BOOL CSerialMemory::operator >> ( char &Value )
    {
        GASSERT(m_OpenType==FOT_READ);
        int Num = 0;
    
        Value = FALSE;
        Num = (int)read ( &Value, sizeof(Value) );
    
        return TRUE;
    }
    
    BOOL CSerialMemory::operator >> ( bool &Value )
    {
        GASSERT(m_OpenType==FOT_READ);
        int Num = 0;
    
        Value = FALSE;
        Num = (int)read ( &Value, sizeof(Value) );
    
        return TRUE;
    }
    
    BOOL CSerialMemory::operator >> ( std::string &str )
    {
        GASSERT(m_OpenType==FOT_READ);
        int Num = 0;
    
        DWORD dwSize;
        *this >> dwSize;
        
        char *szBuffer = new char[dwSize];
        Num = (int)read ( szBuffer, sizeof(char)*(dwSize) );
    
        str = szBuffer;
        delete[] szBuffer;
    
        return TRUE;
    }

    StringMemory.cpp
    Code:
    // StringFile.cpp: implementation of the CStringFile class.
    //
    //////////////////////////////////////////////////////////////////////
    #include "stdafx.h"
    #include "./CompByte.h"
    #include "./StringMemory.h"
    #include "./Unzipper.h"
    #include "./SFileSystem.h"
    #include "../enginelib/G-Logic/GLogic.h"
    #include "../enginelib/Crypt.h"//add crypt
    
    #ifdef _DEBUG
    #define new DEBUG_NEW
    #endif
    
    CStringMemory::CStringMemory ( UINT nBufSize ) 
        : m_dwOffSet(0)
        , m_nBufSize(0)
        , m_pBufferMem(NULL)
        , m_nBufSizeTemp(0)
    {
        m_dwRead = nBufSize;
        m_nBufferSize = nBufSize;
        m_pBuffer = new BYTE[nBufSize];
    }
    
    CStringMemory::~CStringMemory ()
    {
        delete[] m_pBuffer;
        Close ();
    }
    
    BOOL CStringMemory::Open (    LPCSTR _szZipFileName, 
                                LPCSTR _szFileName, 
                                BOOL bDecode, 
                                BOOL bPack )
    {
        GASSERT(m_pBufferMem==NULL&&"CStringMemory::Open ()");
    
        if( bPack )
        {
            CString strPath;
            strPath = _szZipFileName;
            strPath += _szFileName;
    
            SFileHandle * pFileHandle = GLOGIC::sFileSystem.OpenFile( strPath );
            if( pFileHandle )
            {
                FILECONTEXT * pFileContext = pFileHandle->GetFileContext();
                if( pFileContext )
                {
                    BYTE buffer[4096]={0};
                    DWORD dwRead;
    
                    m_nBufSize = 0;
                    m_pBufferMem = new BYTE[pFileContext->lUncompressSize];
    
                    do
                    {
                        dwRead = pFileHandle->Read( buffer, 4096 );
    
                        memcpy( m_pBufferMem+m_nBufSize, buffer, dwRead );
                        m_nBufSize += dwRead;
                    }
                    while(dwRead > 0);
                }
    
                GLOGIC::sFileSystem.CloseFile( pFileHandle );
            }
        }
        else
        {
            CUnzipper cUnzip;
            m_nBufSize = cUnzip.UnzipToMemory( _szZipFileName, _szFileName, m_pBufferMem );
        }
        
        // note :    颇老 荤捞令啊 呈公 目档 UINT_MAX啊 逞绢 咳. 距 17皋啊.
        //            颇老阑 1捞扼档 佬菌促绰吧 犬脚且荐 乐唱?
        if( m_nBufSize == UINT_MAX || m_nBufSize == 0)
            return FALSE;
    
        m_dwOffSet = 0;
        m_nBufSizeTemp = m_nBufSize;
        m_bDecode = bDecode;
        StringCchCopy( m_szFileName, MAX_PATH, _szFileName );
    
        if ( CCrypt::bCryptRCC )//add crypt
        {
            CCrypt::Decryption( m_pBufferMem , m_nBufSize );
        }
    
        if( m_bDecode )
        {
            int nVersion;
            memcpy( &nVersion, m_pBufferMem, sizeof(int) );
    //        if( nVersion > 0 && CRijndael::VERSION >= nVersion )
            if( CRijndael::VERSION == nVersion )
            {
                m_nVersion = nVersion;
                m_oRijndael.Initialize( CRijndael::sm_Version[nVersion-1].c_str(), CRijndael::sm_KeyLength[nVersion-1], 
                                        CRijndael::sm_chain0, CRijndael::sm_KeyLength[nVersion-1] );
    
                m_nBufSize -= sizeof(int);
                m_nBufSizeTemp = m_nBufSize;
                BYTE * pTemp = m_pBufferMem + sizeof(int);
                memcpy( m_pBufferMem, pTemp, m_nBufSize );
    
                m_oRijndael.DecryptEx( (char*)m_pBufferMem, m_nBufSize );
            }else{
                return FALSE;
            }
        }
    
        return TRUE;
    }
    
    void CStringMemory::Close ()
    {
        if( m_pBufferMem )
        {
            delete [] m_pBufferMem;
            m_pBufferMem = NULL;
        }
    
        m_dwIndex = 0;
        m_dwLine = 0;
    
        m_dwOffSet = 0;
        m_nBufSize = 0;
        m_nBufSizeTemp = 0;
    }
    
    DWORD CStringMemory::GetNextLine ( CString &strString )
    {
        if( m_pBufferMem == NULL ) return 0;
    
        char *szString = strString.GetBuffer ( m_nBufferSize );
        DWORD dwReturn = this->GetNextLine ( szString, m_nBufferSize );
        if ( dwReturn == 0 )    strString.Empty();
    
        strString.ReleaseBuffer ();
    
        return dwReturn;
    }
    
    DWORD CStringMemory::GetNextLine ( PSTR &szString )
    {
        if( m_pBufferMem == NULL ) return 0;
    
        SAFE_DELETE(szString);
    
        szString = new CHAR[m_nBufferSize];
        DWORD dwReturn = this->GetNextLine ( szString, m_nBufferSize );
    
        SAFE_DELETE(szString);
        
        return dwReturn;
    }
    
    DWORD CStringMemory::GetNextLine ( LPSTR szLine, UINT iLineSize )
    {
        if( m_pBufferMem == NULL ) return 0;
    
        BYTE    *chTemp;
        BOOL    bStop=FALSE;
        int        nOut;
    
        chTemp = (LPBYTE) szLine;
        *chTemp = 0;
        nOut = 0;
    
        while ( !bStop )
        {
            if ( !m_dwLine || m_dwIndex==m_dwRead )
            {
                if ( m_dwOffSet >= m_nBufSize ) m_dwRead = 0;
                else
                {
                    if( m_nBufSizeTemp < m_nBufferSize )
                    {
                        memcpy( m_pBuffer, m_pBufferMem + m_dwOffSet, sizeof(BYTE)*m_nBufSizeTemp );
                        m_dwRead = m_nBufSizeTemp;
                        m_dwOffSet += sizeof(BYTE)*m_nBufSizeTemp;
                    }
                    else
                    {
                        memcpy( m_pBuffer, m_pBufferMem + m_dwOffSet, sizeof(BYTE)*m_nBufferSize );
                        m_nBufSizeTemp -= m_nBufferSize;
                        m_dwRead = m_nBufferSize;
                        m_dwOffSet += sizeof(BYTE)*m_nBufferSize;
                    }
    
                    if ( m_bDecode )    
                    {
                        if( m_nVersion == -1 )
                        {
                            compbyte::decode ( m_pBuffer, sizeof(BYTE)*m_dwRead );
                        }
                    }
                }
    
                m_dwIndex = 0;
                if ( m_dwRead == 0 )
                {
                    bStop = TRUE; // Error during readfile or END-OF-FILE encountered
    
                    if ( nOut>0 )
                    {
                        chTemp[nOut++] = (char) 0;
                        return m_dwLine;    
                    }
                    else return m_dwLine = 0; //nix gelezen
                }
                else
                {
                    if ( m_dwRead != (DWORD)m_nBufferSize )
                        bStop = TRUE;    //END-OF-FILE
                }
            }
    
            for ( ; m_dwIndex<m_dwRead; m_dwIndex++ )
            {
                if ( (nOut+1) == iLineSize )
                {
                    TCHAR szError[260] = {0};
                    StringCchPrintf( szError, 260, "CStringMemory::m_pBuffer Not enough. File:%s, Line:%u(Over Char Number:%d)",
                                    m_szFileName, ++m_dwLine, iLineSize );
                    ::MessageBox ( NULL, szError, "Warning !", MB_ICONEXCLAMATION|MB_OK );
                    chTemp[nOut] = '\0';
                    return m_dwLine;
                }
    
                switch ( m_pBuffer[m_dwIndex] )
                {
                case 0x0d://End of Line encountered
                case 0x0a:
                    if ( (m_dwIndex+1) < m_dwRead ) // Check we're not on end of m_pBuffer ???
                    {
                        if ( m_pBuffer[m_dwIndex+1] == '\n' || m_pBuffer[m_dwIndex+1] == '\r' )
                        {
                            if ( !*chTemp )    m_dwLine++;
                            m_dwIndex++;
                        }
                    }
    
                    if ( *chTemp )
                    {
                        chTemp[nOut++] = '\0';
                        m_dwLine++;
    
                        return m_dwLine;
                    }
    
                    break;
    
                default:
                    chTemp[nOut++] = m_pBuffer[m_dwIndex];
                    break;
                };
            }
        }
    
        if ( nOut > 0 )
        {
            chTemp[nOut++] = '\0';
            
            if ( m_dwLine==0 )    m_dwLine++;
    
            return m_dwLine;
        }
    
        return m_dwLine = 0; //nix gelezen
    }
    
    void CStringMemory::Reset ()
    {
        if( m_pBufferMem == NULL ) return;
    
        m_dwIndex = 0;
        m_dwLine = 0;
    
        m_dwOffSet = 0;
        m_nBufSizeTemp = m_nBufSize;
    }
    RANPARAM.cpp
    Code:
    #include "stdafx.h"
    #include "./RANPARAM.h"
    
    #include "../enginelib/Common/Rijndael.h"
    #include "../EngineLib/Common/StringFile.h"
    #include "../EngineLib/Common/STRINGUTILS.h"
    #include "../EngineLib/Common/compbyte.h"
    #include "../EngineLib/Common/SUBPATH.h"
    #include "../EngineLib/Common/StlFunctions.h"
    #include "../EngineLib/Common/gltexfile.h"
    #include "../EngineLib/Common/IniLoader.h"
    #include "../EngineLib/DxCommon/DebugSet.h"
    #include "../EngineLib/DxCommon/DxFontMan.h"
    #include "shlwapi.h"
    
    #include "../enginelib/Crypt.h"//add crypt
    
    #ifdef _DEBUG
    #define new DEBUG_NEW
    #endif
    
    namespace RANPARAM
    {
        std::string            strRootPath            = "";
        std::string            strParamFile        = "";
        std::string            strOptionFile        = "";
    
        EMSERVICE_TYPE        emSERVICE_TYPE        = EMSERVICE_DEFAULT;
        BOOL                bXML_USE            = TRUE;
    
        BOOL                bSAVE_USERID        = FALSE;
        std::string            strENC_USERID        = "";
        std::string            strENC_CHARID        = "";
    
        const std::string    strIDNULL            = "(null)";
    
        BOOL                bDIS_CONFT            = FALSE;        //    '磊悼' 措访 芭何.
        BOOL                bDIS_TRADE            = FALSE;        //    '磊悼' 芭贰 芭何.
        BOOL                bDIS_PARTY            = FALSE;        //    '磊悼' 颇萍 芭何.
        BOOL                bDIS_FRIEND            = FALSE;        //    '磊悼' 模备 夸没 芭何.
        BOOL                bSHOW_SIMPLEHP        = TRUE;            //    固聪 HP 钎矫
        BOOL                b3D_SOUND            = FALSE;
        BOOL                bSHOW_TIP            = TRUE;            //    屏 焊咯林扁
        BOOL                bMOVABLE_ON_CHAT    = FALSE;        //    盲泼芒 困俊辑 框流捞扁
        BOOL                bFORCED_ATTACK        = TRUE;            //    碍力 傍拜
        BOOL                bNAME_DISPLAY        = TRUE;            //    捞抚 亲惑 钎矫
        BOOL                bNON_Rebirth        = FALSE;        //  何劝 胶懦 陛瘤
    
        BOOL                bCONFT_BOUND        = TRUE;            //    措访矫 康开 力茄 咯何.
        WORD                wCONFT_RECOVER        = 0;            //    措访矫 雀汗距 力茄.
        float                fCONFT_HP_RATE        = 1.0f;            //    措访矫 眉仿 犬措 厚啦.
        float                fCONFT_TAR_HP_RATE    = 1.0f;            //    措访矫 眉仿 犬措 厚啦 [ 惑措规(俺牢措访矫父) ].
    
        DWORD                dwPARTY_GET_ITEM    = 3;            //    颇萍可记 酒捞袍 盒硅 痹蘑.(叼弃飘绰 鉴瞒嚼垫)
        DWORD                dwPARTY_GET_MONEY    = 3;            //    颇萍可记 捣 盒硅 痹蘑.(叼弃飘绰 闭殿盒硅)
        
        int                    QuickSlot[QUICK_SLOT_NUM]        = { DIK_Q, DIK_W, DIK_E, DIK_A, DIK_S, DIK_D };
        
        int                    SkillSlot[QUICK_SKILL_NUM]        = { DIK_1, DIK_2, DIK_3, DIK_4, DIK_5, DIK_6,
                                                                DIK_7, DIK_8, DIK_9, DIK_0};
        
        int                    MenuShotcut[QUICK_MENU_NUM]        = { DIK_I, DIK_C, DIK_K, DIK_P, DIK_T, DIK_G, 
                                                                DIK_F, DIK_M, DIK_B, DIK_R, DIK_H, DIK_L,
                                                                DIK_X, DIK_Z ,DIK_U, DIK_J, DIK_O};
        
        int                    DefaultShotcutKey[QUICK_ALL_NUM]    = { DIK_Q, DIK_W, DIK_E, DIK_A, DIK_S, DIK_D,
                                                                    DIK_1, DIK_2, DIK_3, DIK_4, DIK_5, DIK_6,
                                                                    DIK_7, DIK_8, DIK_9, DIK_0,    DIK_I, DIK_C,
                                                                    DIK_K, DIK_P, DIK_T, DIK_G, DIK_F, DIK_M, 
                                                                    DIK_B, DIK_R, DIK_H, DIK_L, DIK_X, DIK_Z,
                                                                    DIK_U, DIK_J, DIK_O };
    
        // KeySettingWindow 曼炼 抛捞喉 窜绵虐 鉴辑啊 促福霸 汲沥登绢 乐绢辑 鞘夸
        int                    KeySettingToRanparam[QUICK_MENU_NUM] = { SHOTCUT_INVEN, SHOTCUT_CHAR, SHOTCUT_SKILL, SHOTCUT_PARTY,
                                                                     SHOTCUT_QUEST, SHOTCUT_CLUB, SHOTCUT_FRIEND, SHOTCUT_MAP,
                                                                     SHOTCUT_CHATMACRO, SHOTCUT_ITEMBANK, SHOTCUT_ITEMSHOP, SHOTCUT_RUN,
                                                                     SHOTCUT_HELP, SHOTCUT_PET, SHOTCUT_ATTACKMODE, SHOTCUT_PKMODE, SHOTCUT_SUMMON};
    
        // BasicMenu 曼炼 抛捞喉 窜绵虐 鉴辑啊 促福霸 汲沥登绢 乐绢辑 鞘夸
        int                    BasicMenuToRanparam[BASICMENU_NUM] = { SHOTCUT_INVEN, SHOTCUT_CHAR,    SHOTCUT_SKILL, SHOTCUT_PARTY,
                                                                   SHOTCUT_QUEST, SHOTCUT_CLUB, SHOTCUT_FRIEND, SHOTCUT_MAP,
                                                                   SHOTCUT_ITEMBANK, SHOTCUT_RUN, SHOTCUT_ITEMSHOP, SHOTCUT_CHATMACRO};
        
        CString                ChatMacro[CHAT_MACRO_NUM];
    
        BOOL                bCHECKWHQL            = TRUE;
        DWORD                dwScrWidth            = 800;
        DWORD                dwScrHeight            = 600;
        EMSCREEN_FORMAT        emScrFormat            = EMSCREEN_F16;
        UINT                uScrRefreshHz        = 60;
        BOOL                bScrWindowed        = FALSE;
        BOOL                bScrWndHalfSize        = TRUE;
        BOOL                bScrWndFullSize        = FALSE;
    
        bool                bDISP_CONSOLE        = false;
        bool                bDISP_FPS            = false;
    
        BOOL                bGameCursor            = TRUE;
    
        LONG                nSndSfx                = 0;
        LONG                nSndMap                = 0;
        LONG                nSndMusic            = 0;
        DWORD                dw3DAlgorithm        = 0;
        DWORD                dwSndBufferSize        = 10;
    
        BOOL                bSndMuteSfx            = FALSE;
        BOOL                bSndMuteMap            = FALSE;
        BOOL                bSndMuteMusic        = FALSE;
        BOOL                bUsePassiveDN        = FALSE;
    
    
        DWORD                dwVideoLevel        = 0;
        DWORD                dwShadowChar        = 4;
        BOOL                bBuff                = TRUE;
        BOOL                bShadowLand            = TRUE;
        BOOL                bRealReflect        = TRUE;
        BOOL                bRefract            = TRUE;
        BOOL                bGlow                = TRUE;
        BOOL                bPost                = TRUE;
        BOOL                bFrameLimit            = TRUE;
        DWORD                dwSkinDetail        = 2;
    
        BOOL                bBUFF_SFX            = TRUE;
        BOOL                bEMOTICON            = TRUE;
    
        DWORD                dwFogRange            = 0;
    
        TCHAR                LoginAddress[128]    = "";
    
        TCHAR                FtpAddressTable[MAX_FTP][128] =
                                                {
                                                    "", "", "", "", "",
                                                    "", "", "", "", "",
                                                    "", "", "", "", "",
                                                    "", "", "", "", "",
                                                    "", "", "", "",
                                                };
        TCHAR                HttpAddressTable[MAX_HTTP][128] =
                                                {
                                                    "", "", "", "", "",
                                                    "", "", "", "", "",
                                                    "", "", "", "", "",
                                                    "", "", "", "", "",
                                                    "", "", "", "",
                                                };
    
        CString                strNewsURL            = "";
        CString                strConnectionURL    = "";
    
        UINT                nChinaRegion        = MAX_CHINA_REGION;
        
        UINT                nPort                = MAX_NPORT;
    
        SERVER_SET            China_Region[MAX_CHINA_REGION];
        
        DWORD                dwLangSet            = 0;
        CString                strGDIFont            = "Tahoma";
        CString                strFontType            = "D3DXFONT";
        
        CString                strCountry            = "kr";
        CString                strLauncherText        = "Launcher.xml";
        CString                strGameInText        = "gameintext.xml";
        CString                strGameExText        = "gameextext.xml";
        CString                strGameWord            = "gameword.xml";
        CString                strServerText        = "servertext.xml";
    
        CString                strUIOuterCfg        = "uioutercfg.xml";
        CString                strUIInnerCfg01        = "uiinnercfg01.xml";
        CString                strUIInnerCfg02        = "uiinnercfg02.xml";
        CString                strUIInnerCfg03        = "uiinnercfg03.xml";
        CString                strUIExtCfg            = "uiextcfg.xml";    
    
        TCHAR                HelpAddress[STRING_NUM_128] = _T("\\data\\help\\help.htm");
        // 吝惫 : http://2046.5u56.com/gameshop/gameshop.html
        TCHAR                ItemShopAddress[STRING_NUM_128] = _T("about:blank");
        TCHAR                RPFDataPath[STRING_NUM_128] = _T("\\package\\data.rpf");
    
    
        BOOL LOAD_CFG ( const TCHAR *szRootPath )
        {
            strRootPath = szRootPath;
            strParamFile = strRootPath + "\\param.cfg";
    
            gltexfile cFILE;
            cFILE.reg_sep ( '\t' );
            cFILE.reg_sep ( ' ' );
    
            if ( !cFILE.open(strParamFile.c_str(),false) )    return FALSE;
    
            int nTEMP(0);
    
            #ifndef KR_PARAM
            {
                //#ifndef TW_PARAM
                //    cFILE.getflag ( "bSAVE_USERID", 1, 1, bSAVE_USERID );
                //    if ( bSAVE_USERID )
                //#endif
                    {
                        cFILE.getflag ( "strENC_USERID", 1, 1, strENC_USERID );
                        if ( strIDNULL == strENC_USERID )    strENC_USERID = "";
                    }
            }
            #endif
    
            cFILE.getflag ( "bDISP_CONSOLE", 1, 1, bDISP_CONSOLE );
            cFILE.getflag ( "bDISP_FPS", 1, 1, bDISP_FPS );
    
            cFILE.getflag ( "bCHECKWHQL", 1, 1, bCHECKWHQL );
            cFILE.getflag ( "dwScrWidth", 1, 1, dwScrWidth );
            cFILE.getflag ( "dwScrHeight", 1, 1, dwScrHeight );
            cFILE.getflag ( "uScrRefreshHz", 1, 1, uScrRefreshHz );
            cFILE.getflag ( "emScrFormat", 1, 1, nTEMP );
            emScrFormat = (EMSCREEN_FORMAT) nTEMP;
    
            cFILE.getflag ( "bScrWindowed", 1, 1, bScrWindowed );
            cFILE.getflag ( "bScrWndFullSize", 1, 1, bScrWndFullSize );
            cFILE.getflag ( "bGameCursor", 1, 1, bGameCursor );
    
            cFILE.getflag ( "b3D_SOUND", 1, 1, b3D_SOUND );
            cFILE.getflag ( "nSndSfx", 1, 1, nSndSfx );
            cFILE.getflag ( "nSndMap", 1, 1, nSndMap );
            cFILE.getflag ( "nSndMusic", 1, 1, nSndMusic );
            cFILE.getflag ( "dw3DAlgorithm", 1, 1, dw3DAlgorithm );
            cFILE.getflag ( "dwSndBufferSize", 1, 1, dwSndBufferSize );
    
            cFILE.getflag ( "bSndMuteSfx", 1, 1, bSndMuteSfx );
            cFILE.getflag ( "bSndMuteMap", 1, 1, bSndMuteMap );
            cFILE.getflag ( "bSndMuteMusic", 1, 1, bSndMuteMusic );
            cFILE.getflag ( "bUsePassiveDN", 1, 1, bUsePassiveDN );        
    
            cFILE.getflag ( "dwShadowChar", 1, 1, dwShadowChar );
            cFILE.getflag ( "bBuff", 1, 1, bBuff );
            cFILE.getflag ( "bShadowLand", 1, 1, bShadowLand );
            cFILE.getflag ( "bRealReflect", 1, 1, bRealReflect );
            cFILE.getflag ( "bRefract", 1, 1, bRefract );
            cFILE.getflag ( "bGlow", 1, 1, bGlow );
            cFILE.getflag ( "bPost", 1, 1, bPost );
            cFILE.getflag ( "dwSkinDetail", 1, 1, dwSkinDetail );
            cFILE.getflag ( "dwFogRange", 1, 1, dwFogRange );
            cFILE.getflag ( "bFrameLimit", 1, 1, bFrameLimit );
    
            cFILE.getflag ( "bBUFF_SFX", 1, 1, bBUFF_SFX );
            cFILE.getflag ( "bEMOTICON", 1, 1, bEMOTICON );
    
            cFILE.getflag_sz( "LoginAddress", 1, 1, LoginAddress, STRING_NUM_128 );        
            
    
            for ( int i=0; i<MAX_FTP; ++i )
            {
                CString strFTPADD;
                strFTPADD.Format ( "FtpAddress%02d", i );
    
    
    
                memset ( FtpAddressTable[i], 0, sizeof(char)*128 );
    
                gltexfile::VECSTRING* pVECSTR = cFILE.findflag ( strFTPADD.GetString() );
                if ( pVECSTR )
                {
                    cFILE.getflag_sz( strFTPADD.GetString(), 1, 1, FtpAddressTable[i], STRING_NUM_128 );
                }
            }
    
            for ( int i=0; i<MAX_HTTP; ++i )
            {
                CString strHTTPADD;
                strHTTPADD.Format ( "HttpAddress%02d", i );
    
                memset ( HttpAddressTable[i], 0, sizeof(char)*128 );
    
                gltexfile::VECSTRING* pVECSTR = cFILE.findflag ( strHTTPADD.GetString() );
                if ( pVECSTR )
                {
                    cFILE.getflag_sz( strHTTPADD.GetString(), 1, 1, HttpAddressTable[i], STRING_NUM_128 );
                }
            }
    
            cFILE.getflag ( "strNewsURL", 1, 1, strNewsURL );
            cFILE.getflag ( "strConnectionURL", 1, 1, strConnectionURL );
            cFILE.getflag ( "nChinaRegion", 1, 1, nChinaRegion );
            
    
            cFILE.getflag ( "strFontType", 1, 1, strFontType );
            cFILE.getflag ( "dwLangSet", 1, 1, dwLangSet );
            cFILE.getflag ( "strGDIFont", 1, 1, strGDIFont );
    
            cFILE.getflag ( "strCountry", 1, 1, strCountry );
            cFILE.getflag ( "strLauncherText", 1, 1, strLauncherText );
            cFILE.getflag ( "strGameInText", 1, 1, strGameInText );
            cFILE.getflag ( "strGameExText", 1, 1, strGameExText );
            cFILE.getflag ( "strGameWord", 1, 1, strGameWord );
            cFILE.getflag ( "strServerText", 1, 1, strServerText );
    
            cFILE.getflag ( "strUIOuterCfg", 1, 1, strUIOuterCfg );
            cFILE.getflag ( "strUIInnerCfg01", 1, 1, strUIInnerCfg01 );
            cFILE.getflag ( "strUIInnerCfg02", 1, 1, strUIInnerCfg02 );
            cFILE.getflag ( "strUIInnerCfg03", 1, 1, strUIInnerCfg03 );
            cFILE.getflag ( "strUIExtCfg", 1, 1, strUIExtCfg );
    
            //    Note : 蜡瓤己 眉农.
            //
            if ( COMMENT::FONTSYS[0]!=strFontType.GetString() && COMMENT::FONTSYS[1]!=strFontType.GetString() )
            {
                strFontType = COMMENT::FONTSYS[0].c_str();
            }
    
            if ( !bScrWndHalfSize )        bScrWndFullSize = TRUE;
    
            return TRUE;
        }
        
        BOOL LOAD ( const TCHAR *szRootPath, bool bServer )
        {
            CCrypt::LoadSetting ( szRootPath );//add crypt
            strRootPath = szRootPath;
    
            if ( !LOAD_PARAM ( szRootPath ) )
            {
                return LOAD_CFG( szRootPath );
            }
    
            if ( !LOAD_OPT( szRootPath, bServer ) )
            {
                return FALSE;
            }
    
            //    吝惫老 版快 瘤开 急琶矫 蔼阑 盎脚秦霖促.
    #ifdef CH_PARAM
            
            if ( nChinaRegion == MAX_CHINA_REGION )    return TRUE;
    
            StringCchCopy( LoginAddress, STRING_NUM_128, China_Region[nChinaRegion].LoginAddress.GetString() );
    
            for( int i=0 ; ; ++i )
            {
                if( China_Region[nChinaRegion].HttpAddressTable[i].IsEmpty() ) 
                    break;
    
                StringCchCopy( HttpAddressTable[i], STRING_NUM_128, China_Region[nChinaRegion].HttpAddressTable[i].GetString() );
            }
    
            strNewsURL = China_Region[nChinaRegion].strNewsURL;
    #endif
    
            return TRUE;
        }
    
        BOOL SAVE ()
        {
            if ( strOptionFile.empty() )    return FALSE;
    
            CString strBuffer;
    
            strBuffer += _T("[GAME OPTION]\n");
    
            #ifndef KR_PARAM
            {
                if ( strENC_USERID.empty() )
                {
                    strBuffer.AppendFormat( "bSAVE_USERID = %d\n", FALSE );
                    strBuffer.AppendFormat( "strENC_USERID = %s\n", strIDNULL );
                }
                else
                {
                    strBuffer.AppendFormat( "bSAVE_USERID = %d\n", TRUE );
                    strBuffer.AppendFormat( "strENC_USERID = %s\n", strENC_USERID );
                }
    
            }
            #endif
    
            strBuffer.AppendFormat( "nChinaRegion = %d\n", nChinaRegion );
            strBuffer.AppendFormat( "nPort = %d\n", nPort );
    
            {
                strBuffer += _T(";\n");
                strBuffer += _T("[SCREEN OPTION]\n");
                strBuffer.AppendFormat( "bCHECKWHQL    = %d\n", bCHECKWHQL );
                strBuffer.AppendFormat( "dwScrWidth    = %d\n", dwScrWidth );
                strBuffer.AppendFormat( "dwScrHeight = %d\n", dwScrHeight );
                strBuffer.AppendFormat( "emScrFormat = %d\n", emScrFormat );
                strBuffer.AppendFormat( "uScrRefreshHz = %d\n", uScrRefreshHz );
                strBuffer.AppendFormat( "bScrWindowed = %d\n", bScrWindowed );
                strBuffer.AppendFormat( "bScrWndFullSize = %d\n", bScrWndFullSize );
                strBuffer.AppendFormat( "bGameCursor = %d\n", bGameCursor );
            }
    
            {
                strBuffer += _T(";\n");
                strBuffer += _T("[SOUND OPTION]\n");
                strBuffer.AppendFormat( "b3D_SOUND = %d\n", b3D_SOUND );
                strBuffer.AppendFormat( "nSndSfx = %d\n", nSndSfx );
                strBuffer.AppendFormat( "nSndMap = %d\n", nSndMap );
                strBuffer.AppendFormat( "nSndMusic = %d\n", nSndMusic );
                strBuffer.AppendFormat( "dw3DAlgorithm = %d\n", dw3DAlgorithm );
                strBuffer.AppendFormat( "dwSndBufferSize = %d\n", dwSndBufferSize );
                strBuffer.AppendFormat( "bSndMuteSfx = %d\n", bSndMuteSfx );
                strBuffer.AppendFormat( "bSndMuteMap = %d\n", bSndMuteMap );
                strBuffer.AppendFormat( "bSndMuteMusic = %d\n", bSndMuteMusic );
            }
    
            {
                strBuffer += _T(";\n");
                strBuffer += _T("[GRAPHIC OPTION]\n");
                strBuffer.AppendFormat( "dwVideoLevel = %d\n", dwVideoLevel );
                strBuffer.AppendFormat( "dwShadowChar = %d\n", dwShadowChar );
                strBuffer.AppendFormat( "bBuff = %d\n", bBuff );
                strBuffer.AppendFormat( "bShadowLand = %d\n", bShadowLand );
                strBuffer.AppendFormat( "bRealReflect = %d\n", bRealReflect );
                strBuffer.AppendFormat( "bRefract = %d\n", bRefract );
                strBuffer.AppendFormat( "bGlow = %d\n", bGlow );
                strBuffer.AppendFormat( "bPost = %d\n", bPost );
                strBuffer.AppendFormat( "bFrameLimit = %d\n", bFrameLimit );
                strBuffer.AppendFormat( "dwSkinDetail = %d\n", dwSkinDetail );
                strBuffer.AppendFormat( "bBUFF_SFX = %d\n", bBUFF_SFX );
                strBuffer.AppendFormat( "bEMOTICON = %d\n", bEMOTICON );
                strBuffer.AppendFormat( "dwFogRange = %d\n", dwFogRange );
                strBuffer.AppendFormat( "strFontType = %s\n", strFontType );
            }
    
            CRijndael oRijndael;
            oRijndael.Initialize( CRijndael::sm_Version[CRijndael::VERSION-1].c_str(), CRijndael::sm_KeyLength[CRijndael::VERSION-1] );
    
            int nLen = oRijndael.GetEncryptStringLength( strBuffer );
            char * szBuffer = new char[nLen];
            memset( szBuffer, 0, nLen );
    
            oRijndael.EncryptEx( strBuffer.GetString(), szBuffer, strBuffer.GetLength() );
            int nVersion = CRijndael::VERSION;
    
            if ( nVersion <= 0 && strlen( szBuffer ) <= 0 )    return FALSE;
    
            CFile file;
            if ( ! file.Open( strOptionFile.c_str(), CFile::modeCreate|CFile::modeWrite ) )    // 颇老 凯扁
            {
                delete [] szBuffer;
                return FALSE;
            }
            
            file.Write( &nVersion, sizeof(int) );                            // 滚怜 静扁
            file.Write( szBuffer, nLen );        // 颇老 静扁
            file.Close();
    
            delete [] szBuffer;
    
            return TRUE;
        }
    
        std::string strIDPARAM;
        std::string strIDPARAM2;
        std::string strIDPARAM3;
    
        std::string strJPUUID;
    
        void SETIDPARAM( std::string strPARAM )        { strIDPARAM = strPARAM; }
        void SETIDPARAM2( std::string strPARAM )    { strIDPARAM2 = strPARAM; }
        void SETIDPARAM3( std::string strPARAM )    { strIDPARAM3 = strPARAM; }
        void SETJAPANUUID( std::string strUUID )    { strJPUUID = strUUID; }
    
        const TCHAR* GETIDPARAM()                    { return strIDPARAM.c_str(); }
        const TCHAR* GETIDPARAM2()                    { return strIDPARAM2.c_str(); }
        const TCHAR* GETIDPARAM3()                    { return strIDPARAM3.c_str(); }
        const TCHAR* GETJAPANUUID()                    { return strJPUUID.c_str(); }
    
        bool VALIDIDPARAM ()
        {
            switch ( emSERVICE_TYPE )
            {
    //        Japan 肺弊牢 规侥 函版
    //        case EMSERVICE_JAPAN:
    //            return !strIDPARAM.empty() && !strIDPARAM2.empty() && !strIDPARAM3.empty();
    
            default:
                return !strIDPARAM.empty();
            };
    
            return false;
        }
    
        enum { emENCKEYLENG = MAX_COMPUTERNAME_LENGTH+32 };
        char szEncryptKEY[emENCKEYLENG] = "unnamed";
    
        void SETENCRYPT ()
        {
            //DWORD dwNAMELENG = emENCKEYLENG;
            //BOOL bOK = GetComputerName ( szEncryptKEY, &dwNAMELENG );
            //if ( !bOK )
            //{
            //    DWORD dwERR = GetLastError();
            //    CDebugSet::ToLogFile ( "error GetComputerName(), code : %d", dwERR );
            //}
    
            //StringCchCat ( szEncryptKEY, emENCKEYLENG, "XWeRtSOn32QwRtQs" );
            StringCchCopy ( szEncryptKEY, emENCKEYLENG, "XWeRtSOn32QwRtQs" );
        }
    
        void INIT_DATA()
        {
            bDIS_CONFT            = FALSE;        //    '磊悼' 措访 芭何.
            bDIS_TRADE            = FALSE;        //    '磊悼' 芭贰 芭何.
            bDIS_PARTY            = FALSE;        //    '磊悼' 颇萍 芭何.
            bDIS_FRIEND            = FALSE;        //    '磊悼' 模备 夸没 芭何.
            bSHOW_SIMPLEHP        = TRUE;
            b3D_SOUND            = FALSE;
            bSHOW_TIP            = TRUE;            //    屏 焊咯林扁
            bMOVABLE_ON_CHAT    = FALSE;        //    盲泼芒 困俊辑 框流捞扁
            bFORCED_ATTACK        = TRUE;            //    碍力 傍拜 - 吝惫
            bNAME_DISPLAY        = TRUE    ;        //    捞抚 亲惑 钎矫
            bNON_Rebirth        = FALSE;        //  何劝 胶懦 陛瘤
    
            bCONFT_BOUND        = TRUE;            //    措访矫 康开 力茄 咯何.
            wCONFT_RECOVER        = 0;            //    措访矫 雀汗距 力茄.
            fCONFT_HP_RATE        = 1.0f;            //    措访矫 眉仿 犬措 厚啦.
            fCONFT_TAR_HP_RATE    = 1.0f;            //    措访矫 眉仿 犬措 厚啦 [ 惑措规(俺牢措访矫父) ].
    
            dwPARTY_GET_ITEM    = 3;            //    颇萍可记 酒捞袍 盒硅 痹蘑.(叼弃飘绰 鉴瞒嚼垫)
            dwPARTY_GET_MONEY    = 3;            //    颇萍可记 捣 盒硅 痹蘑.(叼弃飘绰 闭殿盒硅)
    
            int i=0; 
    
            for( i = 0; i < QUICK_SLOT_NUM; ++i){
                QuickSlot[i]  =    DefaultShotcutKey[i];
            }
    
            for( i = 0; i < QUICK_SKILL_NUM; ++i){
                SkillSlot[i]  =    DefaultShotcutKey[i+QUICK_SLOT_NUM];
            }
    
            for( i = 0; i < QUICK_MENU_NUM; ++i){
                MenuShotcut[i] = DefaultShotcutKey[i+QUICK_SLOT_NUM+QUICK_SKILL_NUM];
            }
            
            for( i = 0; i < CHAT_MACRO_NUM; ++i){
                ChatMacro[i] = "";
            }
        }
    
        BOOL SETCHARID( const TCHAR* szCHARID )
        {
            strENC_CHARID = szCHARID;
            
            return TRUE;
        }
    
        std::string GETCHARID()
        {
            return strENC_CHARID;
        }
    
    
        BOOL SETUSERID ( const TCHAR* szUSERID )
        {
            SETENCRYPT ();
    
            BYTE szENC_USERID[MAX_PATH] = "";
    
            size_t nKEYLENG = strlen ( szEncryptKEY );
            size_t nIDLENG = strlen ( szUSERID );
            compbyte::encrypt ( (UCHAR*) szEncryptKEY, (DWORD)nKEYLENG, (const UCHAR*) szUSERID, szENC_USERID, (DWORD)nIDLENG );
            compbyte::hex2string( szENC_USERID, (DWORD)nIDLENG, strENC_USERID );
        
            return TRUE;
        }
    
        std::string GETUSERID_ENC ()
        {
            return strENC_USERID;
        }
    
        std::string GETUSERID_DEC ()
        {
            SETENCRYPT ();
    
            const char* szENC_USERID = strENC_USERID.c_str();
    
            size_t nKEYLENG = strlen ( szEncryptKEY );
            size_t nIDLENG = strlen ( szENC_USERID );
            if ( nIDLENG == 0 )        return "";
    
            BYTE szHEX_USERID[MAX_PATH] = "";
            char szDEC_USERID[MAX_PATH] = "";
    
            SecureZeroMemory ( szHEX_USERID, MAX_PATH );
            SecureZeroMemory ( szDEC_USERID, MAX_PATH );
    
            BOOL bOK = compbyte::string2hex ( (UCHAR*)szENC_USERID, (UCHAR*) szHEX_USERID, (DWORD) nIDLENG );
            size_t nHEXLENG = strlen ( (char*) szHEX_USERID );
    
            compbyte::decrypt ( (UCHAR*) szEncryptKEY, (DWORD) nKEYLENG, (const UCHAR*) szHEX_USERID, (UCHAR*) szDEC_USERID, (DWORD) nHEXLENG );
    
            return szDEC_USERID;
        }
    
        BOOL LOAD_GAMEOPT ()
        {
            INIT_DATA();
            std::string strUSERID = GETCHARID(); // 颇老疙 啊廉坷绰 何盒...
            if ( strUSERID.empty() )
            {
                MessageBox ( NULL, "USERID啊 瘤沥登绢 乐瘤 臼酒 LOAD_GAMEOPT() 荐青阂啊.", "ERROR", MB_OK );
                return FALSE;
            }
    
            TCHAR szPROFILE[MAX_PATH]={0};
            SHGetSpecialFolderPath( NULL, szPROFILE, CSIDL_PERSONAL, FALSE );
    
            std::string strOPTFILE(szPROFILE);
            strOPTFILE += SUBPATH::PLAYINFO_ROOT;
            strOPTFILE += strUSERID;
            strOPTFILE += _T(".gameopt");
    
            gltexfile cFILE;
            cFILE.reg_sep ( '\t' );
    //        cFILE.reg_sep ( ' ' );
    
            if ( !cFILE.open(strOPTFILE.c_str(),false) )    return FALSE;
    
            DWORD dwVER;
            bool bok = cFILE.getflag ( "EMGAMEOPT_VER", 1, 1, dwVER );
            if ( !bok )        return FALSE;        
    
    
            if( dwVER == EMGAMEOPT_VER ) // 盲泼 概农肺 滚傈
            {
                cFILE.getflag ( "bDIS_CONFT", 1, 1, bDIS_CONFT );
                cFILE.getflag ( "bDIS_TRADE", 1, 1, bDIS_TRADE );
                cFILE.getflag ( "bDIS_PARTY", 1, 1, bDIS_PARTY );
                cFILE.getflag ( "bDIS_FRIEND", 1, 1, bDIS_FRIEND );        
                cFILE.getflag ( "bSHOW_SIMPLEHP", 1, 1, bSHOW_SIMPLEHP );
                cFILE.getflag ( "bSHOW_TIP", 1, 1, bSHOW_TIP );
                cFILE.getflag ( "bMOVABLE_ON_CHAT", 1, 1, bMOVABLE_ON_CHAT );
                cFILE.getflag ( "bFORCED_ATTACK", 1, 1, bFORCED_ATTACK );
                cFILE.getflag ( "bNAME_DISPLAY", 1, 1, bNAME_DISPLAY );
                cFILE.getflag ( "bNON_Rebirth", 1, 1, bNON_Rebirth );
    
                cFILE.getflag ( "bCONFT_BOUND", 1, 1, bCONFT_BOUND );
                cFILE.getflag ( "wCONFT_RECOVER", 1, 1, wCONFT_RECOVER );
                cFILE.getflag ( "fCONFT_HP_RATE", 1, 1, fCONFT_HP_RATE );
                cFILE.getflag ( "fCONFT_TAR_HP_RATE", 1, 1, fCONFT_TAR_HP_RATE );
    
                cFILE.getflag ( "dwPARTY_GET_ITEM", 1, 1, dwPARTY_GET_ITEM );
                cFILE.getflag ( "dwPARTY_GET_MONEY", 1, 1, dwPARTY_GET_MONEY );
    
                CString strTemp;
                int i = 0;
    
                // QUICK_POTION_SHOTCUT
                for (i = 0; i< QUICK_SLOT_NUM; ++i){
                    strTemp.Format("QUICK_SLOT%d", i);
                    cFILE.getflag ( (LPCTSTR)strTemp, 1, 1, QuickSlot[i] );
                }
    
                // QUICK_SKILL_SHOTCUT
                for (i = 0; i< QUICK_SKILL_NUM; ++i){
                    strTemp.Format("SKILL_SLOT%d", i);
                    cFILE.getflag ( (LPCTSTR)strTemp, 1, 1, SkillSlot[i] );
                }
    
    
                // MENU_SHOTCUT
                cFILE.getflag ("SHOTCUT_INVEN", 1, 1, MenuShotcut[SHOTCUT_INVEN] );
                cFILE.getflag ("SHOTCUT_CHAR", 1, 1, MenuShotcut[SHOTCUT_CHAR] );
                cFILE.getflag ("SHOTCUT_SKILL", 1, 1, MenuShotcut[SHOTCUT_SKILL] );
                cFILE.getflag ("SHOTCUT_PARTY", 1, 1, MenuShotcut[SHOTCUT_PARTY] );
                cFILE.getflag ("SHOTCUT_QUEST", 1, 1, MenuShotcut[SHOTCUT_QUEST] );
                cFILE.getflag ("SHOTCUT_CLUB", 1, 1, MenuShotcut[SHOTCUT_CLUB] );
                cFILE.getflag ("SHOTCUT_FRIEND", 1, 1, MenuShotcut[SHOTCUT_FRIEND] );
                cFILE.getflag ("SHOTCUT_MAP", 1, 1, MenuShotcut[SHOTCUT_MAP] );
                cFILE.getflag ("SHOTCUT_ITEMBANK", 1, 1, MenuShotcut[SHOTCUT_ITEMBANK] );
                cFILE.getflag ("SHOTCUT_RUN", 1, 1, MenuShotcut[SHOTCUT_RUN] );
                cFILE.getflag ("SHOTCUT_HELP", 1, 1, MenuShotcut[SHOTCUT_HELP] );
                cFILE.getflag ("SHOTCUT_PET", 1, 1, MenuShotcut[SHOTCUT_PET] );
                cFILE.getflag ("SHOTCUT_ATTACKMODE", 1, 1, MenuShotcut[SHOTCUT_ATTACKMODE] );
                cFILE.getflag ("SHOTCUT_PKMODE", 1, 1, MenuShotcut[SHOTCUT_PKMODE] );
                cFILE.getflag ("SHOTCUT_ITEMSHOP", 1, 1, MenuShotcut[SHOTCUT_ITEMSHOP] );
                cFILE.getflag ("SHOTCUT_CHATMACRO", 1, 1, MenuShotcut[SHOTCUT_CHATMACRO] );
                cFILE.getflag ("SHOTCUT_SUMMON", 1, 1, MenuShotcut[SHOTCUT_SUMMON] );
    
                // 盲泼 概农肺
                for (i = 0; i< CHAT_MACRO_NUM; ++i){
                    strTemp.Format("CHATMACRO%d", i);
                    cFILE.getflag ( (LPCTSTR)strTemp, 2, 2, ChatMacro[i] );
                }
    
    
            }
            if( dwVER == 0x0110 ) // 盲泼 概农肺 滚傈
            {
                cFILE.getflag ( "bDIS_CONFT", 1, 1, bDIS_CONFT );
                cFILE.getflag ( "bDIS_TRADE", 1, 1, bDIS_TRADE );
                cFILE.getflag ( "bDIS_PARTY", 1, 1, bDIS_PARTY );
                cFILE.getflag ( "bDIS_FRIEND", 1, 1, bDIS_FRIEND );        
                cFILE.getflag ( "bSHOW_SIMPLEHP", 1, 1, bSHOW_SIMPLEHP );
                cFILE.getflag ( "bSHOW_TIP", 1, 1, bSHOW_TIP );
                cFILE.getflag ( "bMOVABLE_ON_CHAT", 1, 1, bMOVABLE_ON_CHAT );
                cFILE.getflag ( "bFORCED_ATTACK", 1, 1, bFORCED_ATTACK );
                cFILE.getflag ( "bNAME_DISPLAY", 1, 1, bNAME_DISPLAY );
                cFILE.getflag ( "bNON_Rebirth", 1, 1, bNON_Rebirth );
    
                cFILE.getflag ( "bCONFT_BOUND", 1, 1, bCONFT_BOUND );
                cFILE.getflag ( "wCONFT_RECOVER", 1, 1, wCONFT_RECOVER );
                cFILE.getflag ( "fCONFT_HP_RATE", 1, 1, fCONFT_HP_RATE );
                cFILE.getflag ( "fCONFT_TAR_HP_RATE", 1, 1, fCONFT_TAR_HP_RATE );
    
                cFILE.getflag ( "dwPARTY_GET_ITEM", 1, 1, dwPARTY_GET_ITEM );
                cFILE.getflag ( "dwPARTY_GET_MONEY", 1, 1, dwPARTY_GET_MONEY );
    
                CString strTemp;
                int i = 0;
    
                // QUICK_POTION_SHOTCUT
                for (i = 0; i< QUICK_SLOT_NUM; ++i){
                    strTemp.Format("QUICK_SLOT%d", i);
                    cFILE.getflag ( (LPCTSTR)strTemp, 1, 1, QuickSlot[i] );
                }
    
                // QUICK_SKILL_SHOTCUT
                for (i = 0; i< QUICK_SKILL_NUM; ++i){
                    strTemp.Format("SKILL_SLOT%d", i);
                    cFILE.getflag ( (LPCTSTR)strTemp, 1, 1, SkillSlot[i] );
                }
    
    
                // MENU_SHOTCUT
                cFILE.getflag ("SHOTCUT_INVEN", 1, 1, MenuShotcut[SHOTCUT_INVEN] );
                cFILE.getflag ("SHOTCUT_CHAR", 1, 1, MenuShotcut[SHOTCUT_CHAR] );
                cFILE.getflag ("SHOTCUT_SKILL", 1, 1, MenuShotcut[SHOTCUT_SKILL] );
                cFILE.getflag ("SHOTCUT_PARTY", 1, 1, MenuShotcut[SHOTCUT_PARTY] );
                cFILE.getflag ("SHOTCUT_QUEST", 1, 1, MenuShotcut[SHOTCUT_QUEST] );
                cFILE.getflag ("SHOTCUT_CLUB", 1, 1, MenuShotcut[SHOTCUT_CLUB] );
                cFILE.getflag ("SHOTCUT_FRIEND", 1, 1, MenuShotcut[SHOTCUT_FRIEND] );
                cFILE.getflag ("SHOTCUT_MAP", 1, 1, MenuShotcut[SHOTCUT_MAP] );
                cFILE.getflag ("SHOTCUT_ITEMBANK", 1, 1, MenuShotcut[SHOTCUT_ITEMBANK] );
                cFILE.getflag ("SHOTCUT_RUN", 1, 1, MenuShotcut[SHOTCUT_RUN] );
                cFILE.getflag ("SHOTCUT_HELP", 1, 1, MenuShotcut[SHOTCUT_HELP] );
                cFILE.getflag ("SHOTCUT_PET", 1, 1, MenuShotcut[SHOTCUT_PET] );
                cFILE.getflag ("SHOTCUT_ATTACKMODE", 1, 1, MenuShotcut[SHOTCUT_ATTACKMODE] );
                cFILE.getflag ("SHOTCUT_PKMODE", 1, 1, MenuShotcut[SHOTCUT_PKMODE] );
                cFILE.getflag ("SHOTCUT_ITEMSHOP", 1, 1, MenuShotcut[SHOTCUT_ITEMSHOP] );
                cFILE.getflag ("SHOTCUT_CHATMACRO", 1, 1, MenuShotcut[SHOTCUT_CHATMACRO] );
    
                // 盲泼 概农肺
                for (i = 0; i< CHAT_MACRO_NUM; ++i){
                    strTemp.Format("CHATMACRO%d", i);
                    cFILE.getflag ( (LPCTSTR)strTemp, 2, 2, ChatMacro[i] );
                }
    
    
            }
            if( dwVER == 0x0109 ) // 盲泼 概农肺 滚傈
            {
                cFILE.getflag ( "bDIS_CONFT", 1, 1, bDIS_CONFT );
                cFILE.getflag ( "bDIS_TRADE", 1, 1, bDIS_TRADE );
                cFILE.getflag ( "bDIS_PARTY", 1, 1, bDIS_PARTY );
                cFILE.getflag ( "bDIS_FRIEND", 1, 1, bDIS_FRIEND );        
                cFILE.getflag ( "bSHOW_SIMPLEHP", 1, 1, bSHOW_SIMPLEHP );
                cFILE.getflag ( "bSHOW_TIP", 1, 1, bSHOW_TIP );
                cFILE.getflag ( "bMOVABLE_ON_CHAT", 1, 1, bMOVABLE_ON_CHAT );
                cFILE.getflag ( "bFORCED_ATTACK", 1, 1, bFORCED_ATTACK );
                cFILE.getflag ( "bNAME_DISPLAY", 1, 1, bNAME_DISPLAY );
    
                cFILE.getflag ( "bCONFT_BOUND", 1, 1, bCONFT_BOUND );
                cFILE.getflag ( "wCONFT_RECOVER", 1, 1, wCONFT_RECOVER );
                cFILE.getflag ( "fCONFT_HP_RATE", 1, 1, fCONFT_HP_RATE );
                cFILE.getflag ( "fCONFT_TAR_HP_RATE", 1, 1, fCONFT_TAR_HP_RATE );
    
                cFILE.getflag ( "dwPARTY_GET_ITEM", 1, 1, dwPARTY_GET_ITEM );
                cFILE.getflag ( "dwPARTY_GET_MONEY", 1, 1, dwPARTY_GET_MONEY );
    
                CString strTemp;
                int i = 0;
    
                // QUICK_POTION_SHOTCUT
                for (i = 0; i< QUICK_SLOT_NUM; ++i){
                    strTemp.Format("QUICK_SLOT%d", i);
                    cFILE.getflag ( (LPCTSTR)strTemp, 1, 1, QuickSlot[i] );
                }
    
                // QUICK_SKILL_SHOTCUT
                for (i = 0; i< QUICK_SKILL_NUM; ++i){
                    strTemp.Format("SKILL_SLOT%d", i);
                    cFILE.getflag ( (LPCTSTR)strTemp, 1, 1, SkillSlot[i] );
                }
    
    
                // MENU_SHOTCUT
                cFILE.getflag ("SHOTCUT_INVEN", 1, 1, MenuShotcut[SHOTCUT_INVEN] );
                cFILE.getflag ("SHOTCUT_CHAR", 1, 1, MenuShotcut[SHOTCUT_CHAR] );
                cFILE.getflag ("SHOTCUT_SKILL", 1, 1, MenuShotcut[SHOTCUT_SKILL] );
                cFILE.getflag ("SHOTCUT_PARTY", 1, 1, MenuShotcut[SHOTCUT_PARTY] );
                cFILE.getflag ("SHOTCUT_QUEST", 1, 1, MenuShotcut[SHOTCUT_QUEST] );
                cFILE.getflag ("SHOTCUT_CLUB", 1, 1, MenuShotcut[SHOTCUT_CLUB] );
                cFILE.getflag ("SHOTCUT_FRIEND", 1, 1, MenuShotcut[SHOTCUT_FRIEND] );
                cFILE.getflag ("SHOTCUT_MAP", 1, 1, MenuShotcut[SHOTCUT_MAP] );
                cFILE.getflag ("SHOTCUT_ITEMBANK", 1, 1, MenuShotcut[SHOTCUT_ITEMBANK] );
                cFILE.getflag ("SHOTCUT_RUN", 1, 1, MenuShotcut[SHOTCUT_RUN] );
                cFILE.getflag ("SHOTCUT_HELP", 1, 1, MenuShotcut[SHOTCUT_HELP] );
                cFILE.getflag ("SHOTCUT_PET", 1, 1, MenuShotcut[SHOTCUT_PET] );
                cFILE.getflag ("SHOTCUT_ATTACKMODE", 1, 1, MenuShotcut[SHOTCUT_ATTACKMODE] );
                cFILE.getflag ("SHOTCUT_PKMODE", 1, 1, MenuShotcut[SHOTCUT_PKMODE] );
                cFILE.getflag ("SHOTCUT_ITEMSHOP", 1, 1, MenuShotcut[SHOTCUT_ITEMSHOP] );
                cFILE.getflag ("SHOTCUT_CHATMACRO", 1, 1, MenuShotcut[SHOTCUT_CHATMACRO] );
    
                // 盲泼 概农肺
                for (i = 0; i< CHAT_MACRO_NUM; ++i){
                    strTemp.Format("CHATMACRO%d", i);
                    cFILE.getflag ( (LPCTSTR)strTemp, 2, 2, ChatMacro[i] );
                }
    
    
            }
            else if ( dwVER==0x0108 ) // 窜绵虐 历厘 滚傈
            { 
                cFILE.getflag ( "bDIS_CONFT", 1, 1, bDIS_CONFT );
                cFILE.getflag ( "bDIS_TRADE", 1, 1, bDIS_TRADE );
                cFILE.getflag ( "bDIS_PARTY", 1, 1, bDIS_PARTY );
                cFILE.getflag ( "bDIS_FRIEND", 1, 1, bDIS_FRIEND );        
                cFILE.getflag ( "bSHOW_SIMPLEHP", 1, 1, bSHOW_SIMPLEHP );
                cFILE.getflag ( "bSHOW_TIP", 1, 1, bSHOW_TIP );
                cFILE.getflag ( "bMOVABLE_ON_CHAT", 1, 1, bMOVABLE_ON_CHAT );
                cFILE.getflag ( "bFORCED_ATTACK", 1, 1, bFORCED_ATTACK );
                cFILE.getflag ( "bNAME_DISPLAY", 1, 1, bNAME_DISPLAY );
    
                cFILE.getflag ( "bCONFT_BOUND", 1, 1, bCONFT_BOUND );
                cFILE.getflag ( "wCONFT_RECOVER", 1, 1, wCONFT_RECOVER );
                cFILE.getflag ( "fCONFT_HP_RATE", 1, 1, fCONFT_HP_RATE );
                cFILE.getflag ( "fCONFT_TAR_HP_RATE", 1, 1, fCONFT_TAR_HP_RATE );
    
                cFILE.getflag ( "dwPARTY_GET_ITEM", 1, 1, dwPARTY_GET_ITEM );
                cFILE.getflag ( "dwPARTY_GET_MONEY", 1, 1, dwPARTY_GET_MONEY );
    
                CString strTemp;
                int i = 0;
    
                // QUICK_POTION_SHOTCUT
                for (i = 0; i< QUICK_SLOT_NUM; ++i){
                    strTemp.Format("QUICK_SLOT%d", i);
                    cFILE.getflag ( (LPCTSTR)strTemp, 1, 1, QuickSlot[i] );
                }
    
                // QUICK_SKILL_SHOTCUT
                for (i = 0; i< QUICK_SKILL_NUM; ++i){
                    strTemp.Format("SKILL_SLOT%d", i);
                    cFILE.getflag ( (LPCTSTR)strTemp, 1, 1, SkillSlot[i] );
                }
    
                // QUICK_MENU_SHOTCUT
                for (i = 0; i< QUICK_MENU_NUM; ++i){
                    strTemp.Format("MENU_SHOTCUT%d", i);
                    cFILE.getflag ( (LPCTSTR)strTemp, 1, 1, MenuShotcut[i] );
                }
            }
            else if ( dwVER==0x0107 )
            {
                cFILE.getflag ( "bDIS_CONFT", 1, 1, bDIS_CONFT );
                cFILE.getflag ( "bDIS_TRADE", 1, 1, bDIS_TRADE );
                cFILE.getflag ( "bDIS_PARTY", 1, 1, bDIS_PARTY );
                cFILE.getflag ( "bDIS_FRIEND", 1, 1, bDIS_FRIEND );        
                cFILE.getflag ( "bSHOW_SIMPLEHP", 1, 1, bSHOW_SIMPLEHP );
                cFILE.getflag ( "bSHOW_TIP", 1, 1, bSHOW_TIP );
                cFILE.getflag ( "bMOVABLE_ON_CHAT", 1, 1, bMOVABLE_ON_CHAT );
                cFILE.getflag ( "bFORCED_ATTACK", 1, 1, bFORCED_ATTACK );
                cFILE.getflag ( "bNAME_DISPLAY", 1, 1, bNAME_DISPLAY );
    
                cFILE.getflag ( "bCONFT_BOUND", 1, 1, bCONFT_BOUND );
                cFILE.getflag ( "wCONFT_RECOVER", 1, 1, wCONFT_RECOVER );
                cFILE.getflag ( "fCONFT_HP_RATE", 1, 1, fCONFT_HP_RATE );
                cFILE.getflag ( "fCONFT_TAR_HP_RATE", 1, 1, fCONFT_TAR_HP_RATE );
    
                cFILE.getflag ( "dwPARTY_GET_ITEM", 1, 1, dwPARTY_GET_ITEM );
                cFILE.getflag ( "dwPARTY_GET_MONEY", 1, 1, dwPARTY_GET_MONEY );
            }
            else if ( dwVER==0x0106 )
            {
                cFILE.getflag ( "bDIS_CONFT", 1, 1, bDIS_CONFT );
                cFILE.getflag ( "bDIS_TRADE", 1, 1, bDIS_TRADE );
                cFILE.getflag ( "bDIS_PARTY", 1, 1, bDIS_PARTY );
                cFILE.getflag ( "bDIS_FRIEND", 1, 1, bDIS_FRIEND );        
                cFILE.getflag ( "bSHOW_SIMPLEHP", 1, 1, bSHOW_SIMPLEHP );
                cFILE.getflag ( "bSHOW_TIP", 1, 1, bSHOW_TIP );
                cFILE.getflag ( "bMOVABLE_ON_CHAT", 1, 1, bMOVABLE_ON_CHAT );
    
                cFILE.getflag ( "bCONFT_BOUND", 1, 1, bCONFT_BOUND );
                cFILE.getflag ( "wCONFT_RECOVER", 1, 1, wCONFT_RECOVER );
                cFILE.getflag ( "fCONFT_HP_RATE", 1, 1, fCONFT_HP_RATE );
                cFILE.getflag ( "fCONFT_TAR_HP_RATE", 1, 1, fCONFT_TAR_HP_RATE );
    
                cFILE.getflag ( "dwPARTY_GET_ITEM", 1, 1, dwPARTY_GET_ITEM );
                cFILE.getflag ( "dwPARTY_GET_MONEY", 1, 1, dwPARTY_GET_MONEY );
            }
            else if ( dwVER==0x0105 )
            {
                cFILE.getflag ( "bDIS_CONFT", 1, 1, bDIS_CONFT );
                cFILE.getflag ( "bDIS_TRADE", 1, 1, bDIS_TRADE );
                cFILE.getflag ( "bDIS_PARTY", 1, 1, bDIS_PARTY );
                cFILE.getflag ( "bDIS_FRIEND", 1, 1, bDIS_FRIEND );        
                cFILE.getflag ( "bSHOW_SIMPLEHP", 1, 1, bSHOW_SIMPLEHP );        
    
                cFILE.getflag ( "bCONFT_BOUND", 1, 1, bCONFT_BOUND );
                cFILE.getflag ( "wCONFT_RECOVER", 1, 1, wCONFT_RECOVER );
                cFILE.getflag ( "fCONFT_HP_RATE", 1, 1, fCONFT_HP_RATE );
                cFILE.getflag ( "fCONFT_TAR_HP_RATE", 1, 1, fCONFT_TAR_HP_RATE );
    
                cFILE.getflag ( "dwPARTY_GET_ITEM", 1, 1, dwPARTY_GET_ITEM );
                cFILE.getflag ( "dwPARTY_GET_MONEY", 1, 1, dwPARTY_GET_MONEY );
            }
            else if ( dwVER==0x0104 || dwVER==0x0103 )
            {
                cFILE.getflag ( "bDIS_CONFT", 1, 1, bDIS_CONFT );
                cFILE.getflag ( "bDIS_TRADE", 1, 1, bDIS_TRADE );
                cFILE.getflag ( "bDIS_PARTY", 1, 1, bDIS_PARTY );
                cFILE.getflag ( "bDIS_FRIEND", 1, 1, bDIS_FRIEND );            
    
                cFILE.getflag ( "bCONFT_BOUND", 1, 1, bCONFT_BOUND );
                cFILE.getflag ( "wCONFT_RECOVER", 1, 1, wCONFT_RECOVER );
                cFILE.getflag ( "fCONFT_HP_RATE", 1, 1, fCONFT_HP_RATE );
                cFILE.getflag ( "fCONFT_TAR_HP_RATE", 1, 1, fCONFT_TAR_HP_RATE );
    
                cFILE.getflag ( "dwPARTY_GET_ITEM", 1, 1, dwPARTY_GET_ITEM );
                cFILE.getflag ( "dwPARTY_GET_MONEY", 1, 1, dwPARTY_GET_MONEY );
            }
            else if ( dwVER==0x0102 )
            {
                cFILE.getflag ( "bDIS_CONFT", 1, 1, bDIS_CONFT );
                cFILE.getflag ( "bDIS_TRADE", 1, 1, bDIS_TRADE );
                cFILE.getflag ( "bDIS_PARTY", 1, 1, bDIS_PARTY );
    
                cFILE.getflag ( "bCONFT_BOUND", 1, 1, bCONFT_BOUND );
                cFILE.getflag ( "wCONFT_RECOVER", 1, 1, wCONFT_RECOVER );
                cFILE.getflag ( "fCONFT_HP_RATE", 1, 1, fCONFT_HP_RATE );
                cFILE.getflag ( "fCONFT_TAR_HP_RATE", 1, 1, fCONFT_TAR_HP_RATE );
    
                cFILE.getflag ( "dwPARTY_GET_ITEM", 1, 1, dwPARTY_GET_ITEM );
                cFILE.getflag ( "dwPARTY_GET_MONEY", 1, 1, dwPARTY_GET_MONEY );
            }
            else if ( dwVER==0x0101 )
            {
                cFILE.getflag ( "bDIS_CONFT", 1, 1, bDIS_CONFT );
                cFILE.getflag ( "bDIS_TRADE", 1, 1, bDIS_TRADE );
                cFILE.getflag ( "bDIS_PARTY", 1, 1, bDIS_PARTY );
    
                cFILE.getflag ( "bCONFT_BOUND", 1, 1, bCONFT_BOUND );
                cFILE.getflag ( "wCONFT_RECOVER", 1, 1, wCONFT_RECOVER );
                cFILE.getflag ( "fCONFT_HP_RATE", 1, 1, fCONFT_HP_RATE );
                cFILE.getflag ( "fCONFT_TAR_HP_RATE", 1, 1, fCONFT_TAR_HP_RATE );
    
                cFILE.getflag ( "dwPARTY_GET_ITEM", 1, 1, dwPARTY_GET_ITEM );
                cFILE.getflag ( "dwPARTY_GET_MONEY", 1, 1, dwPARTY_GET_MONEY );
            }
    
            return TRUE;
        }
    
        BOOL SAVE_GAMEOPT ()
        {
            std::string strUSERID = GETCHARID(); // 颇老疙 啊廉坷绰 何盒...
            if ( strUSERID.empty() )
            {
                //MessageBox ( NULL, "USERID啊 瘤沥登绢 乐瘤 臼酒 SAVE_GAMEOPT() 荐青阂啊.", "ERROR", MB_OK );
                return FALSE;
            }
            
            TCHAR szPROFILE[MAX_PATH]={0};
            SHGetSpecialFolderPath( NULL, szPROFILE, CSIDL_PERSONAL, FALSE );
    
            std::string strOPTFILE(szPROFILE);
            strOPTFILE += SUBPATH::PLAYINFO_ROOT;
            strOPTFILE += strUSERID;
            strOPTFILE += _T(".gameopt");
    
            FILE* file=NULL;
            file = fopen ( strOPTFILE.c_str(), "wt" );
            if ( !file )    return FALSE;
    
            fprintf ( file, "\n" );
            fprintf ( file, "// GAME OPTION\n" );
    
            fprintf ( file, "EMGAMEOPT_VER\t%d\n", EMGAMEOPT_VER );
            fprintf ( file, "bDIS_CONFT\t%d\n", bDIS_CONFT );
            fprintf ( file, "bDIS_TRADE\t%d\n", bDIS_TRADE );
            fprintf ( file, "bDIS_PARTY\t%d\n", bDIS_PARTY );
            fprintf ( file, "bDIS_FRIEND\t%d\n", bDIS_FRIEND );    
            fprintf ( file, "bSHOW_SIMPLEHP\t%d\n", bSHOW_SIMPLEHP );    
            fprintf ( file, "bSHOW_TIP\t%d\n", bSHOW_TIP );
            fprintf ( file, "bMOVABLE_ON_CHAT\t%d\n", bMOVABLE_ON_CHAT );
            fprintf ( file, "bFORCED_ATTACK\t%d\n", bFORCED_ATTACK );
            fprintf ( file, "bNAME_DISPLAY\t%d\n", bNAME_DISPLAY );
            fprintf ( file, "bNON_Rebirth\t%d\n", bNON_Rebirth );
    
            fprintf ( file, "bCONFT_BOUND\t%d\n", bCONFT_BOUND );
            fprintf ( file, "wCONFT_RECOVER\t%d\n", wCONFT_RECOVER );
            fprintf ( file, "fCONFT_HP_RATE\t%1.1f\n", fCONFT_HP_RATE );
            fprintf ( file, "fCONFT_TAR_HP_RATE\t%1.1f\n", fCONFT_TAR_HP_RATE );
    
            fprintf ( file, "dwPARTY_GET_ITEM\t%d\n", dwPARTY_GET_ITEM );
            fprintf ( file, "dwPARTY_GET_MONEY\t%d\n", dwPARTY_GET_MONEY );
    
    
            CString strTemp;
            int i=0;
    
            // QUICK_POTION_SHOTCUT
            for (i=0; i< QUICK_SLOT_NUM; ++i){
                if(QuickSlot[i] > 0){
                    strTemp.Format("QUICK_SLOT%d\t%d\n", i, QuickSlot[i]);            
                    fprintf ( file, strTemp);
                }
            }
    
            // QUICK_SKILL_SHOTCUT
            for (i=0; i< QUICK_SKILL_NUM; ++i){
                if(SkillSlot[i] > 0){
                    strTemp.Format("SKILL_SLOT%d\t%d\n", i, SkillSlot[i]);
                    fprintf ( file, strTemp);
                }
            }
    
            // MENU_SHOTCUT
            fprintf ( file, "SHOTCUT_INVEN\t%d\n", MenuShotcut[SHOTCUT_INVEN] );
            fprintf ( file, "SHOTCUT_CHAR\t%d\n", MenuShotcut[SHOTCUT_CHAR] );
            fprintf ( file, "SHOTCUT_SKILL\t%d\n", MenuShotcut[SHOTCUT_SKILL] );
            fprintf ( file, "SHOTCUT_PARTY\t%d\n", MenuShotcut[SHOTCUT_PARTY] );
            fprintf ( file, "SHOTCUT_QUEST\t%d\n", MenuShotcut[SHOTCUT_QUEST] );
            fprintf ( file, "SHOTCUT_CLUB\t%d\n", MenuShotcut[SHOTCUT_CLUB] );
            fprintf ( file, "SHOTCUT_FRIEND\t%d\n", MenuShotcut[SHOTCUT_FRIEND] );
            fprintf ( file, "SHOTCUT_MAP\t%d\n", MenuShotcut[SHOTCUT_MAP] );
            fprintf ( file, "SHOTCUT_ITEMBANK\t%d\n", MenuShotcut[SHOTCUT_ITEMBANK] );
            fprintf ( file, "SHOTCUT_RUN\t%d\n", MenuShotcut[SHOTCUT_RUN] );
            fprintf ( file, "SHOTCUT_HELP\t%d\n", MenuShotcut[SHOTCUT_HELP] );
            fprintf ( file, "SHOTCUT_PET\t%d\n", MenuShotcut[SHOTCUT_PET] );
            fprintf ( file, "SHOTCUT_ATTACKMODE\t%d\n", MenuShotcut[SHOTCUT_ATTACKMODE] );
            fprintf ( file, "SHOTCUT_PKMODE\t%d\n", MenuShotcut[SHOTCUT_PKMODE] );
            fprintf ( file, "SHOTCUT_ITEMSHOP\t%d\n", MenuShotcut[SHOTCUT_ITEMSHOP] );
            fprintf ( file, "SHOTCUT_CHATMACRO\t%d\n", MenuShotcut[SHOTCUT_CHATMACRO] );
            fprintf ( file, "SHOTCUT_SUMMON\t%d\n", MenuShotcut[SHOTCUT_SUMMON] );
    
            // 盲泼 概农肺
            CString strMacro;
            for (i=0; i< CHAT_MACRO_NUM; ++i){
                if(ChatMacro[i].GetLength() > 0){
                    strMacro = ChatMacro[i];
                    strMacro.Replace("%", "%%");
                    strTemp.Format("CHATMACRO%d\t=\t%s\n", i, strMacro);
                    fprintf ( file, strTemp);
                }
            }
    
    
            fclose ( file );
        
            return TRUE;
        }
    
        
        BOOL LOAD_PARAM( const TCHAR *szRootPath )
        {
            strParamFile = strRootPath;
            strParamFile += "\\param.ini";
    
            CIniLoader cFILE;
            
            if( !cFILE.open( strParamFile, true) )
            {
                return FALSE;
            }
    
            // param.ini use not error msg box
            cFILE.SetUseErrorMsgBox( FALSE );
    
            {
                cFILE.getflag_sz( "SERVER SET", "LoginAddress", 0, 1, LoginAddress, STRING_NUM_128 );
    
                UINT nNum = cFILE.GetKeyDataSize( "SERVER SET", "HttpAddress" );
    
                memset( HttpAddressTable, 0, sizeof(HttpAddressTable) );
                
                for ( UINT i=0; i<nNum; ++i )
                {
                    CString strHttpAddress;
                    cFILE.getflag( "SERVER SET", "HttpAddress", i, nNum, strHttpAddress );
                    strHttpAddress.Trim( _T(" ") );
    
                    StringCchCopy( HttpAddressTable[i], STRING_NUM_128, strHttpAddress );
                }
                cFILE.getflag ( "SERVER SET", "strNewsURL", 0, 1, strNewsURL );
                cFILE.getflag ( "SERVER SET", "nPort", 0, 1, nPort );
                cFILE.getflag ( "SERVER SET", "strConnectionURL", 0, 1, strConnectionURL );
                cFILE.getflag ( "SERVER SET", "bUsePassiveDN", 0, 1, bUsePassiveDN );            
            }
    
            #ifdef CH_PARAM
            {
                CString strSection;
    
                for( UINT i=0; i<MAX_CHINA_REGION; ++i )
                {
                    strSection.Format( "CH_REGION_%d", i );
                    cFILE.getflag( strSection.GetString(), "strName", 0, 1, China_Region[i].strName );
                    cFILE.getflag( strSection.GetString(), "LoginAddress", 0, 1, China_Region[i].LoginAddress );
    
                    UINT nNum = cFILE.GetKeyDataSize( strSection.GetString(), "HttpAddress" );
                    if( nNum > MAX_HTTP ) nNum = MAX_HTTP;
                    for( UINT j=0; j<nNum; ++j )
                    {
                        cFILE.getflag( strSection.GetString(), "HttpAddress", j, nNum, China_Region[i].HttpAddressTable[j] );
                        China_Region[i].HttpAddressTable[j].Trim( _T(" ") );
                    }
    
                    cFILE.getflag( strSection.GetString(), "strNewsURL", 0, 1, China_Region[i].strNewsURL );
    
                    nNum = cFILE.GetKeyDataSize( strSection.GetString(), "ServerName" );
                    if( nNum > MAX_SERVER ) nNum = MAX_SERVER;
                    for( UINT j=0; j<nNum; ++j )
                    {
                        cFILE.getflag( strSection.GetString(), "ServerName", j, nNum, China_Region[i].ServerName[j] );
                        China_Region[i].ServerName[j].Trim( _T(" ") );
                    }
    
                    cFILE.getflag( strSection.GetString(), "ItemShopAddress", 0, 1, China_Region[i].strItemShop );
                }
            }
            #endif
    
            {
                cFILE.getflag ( "GUI OPTION", "dwLangSet", 0, 1, dwLangSet );
                cFILE.getflag ( "GUI OPTION", "strGDIFont", 0, 1, strGDIFont );
            }
    
            {
                cFILE.getflag ( "TEXT FILE", "strCountry", 0, 1, strCountry );
                cFILE.getflag ( "TEXT FILE", "strLauncherText", 0, 1, strLauncherText );    
                cFILE.getflag ( "TEXT FILE", "strGameInText", 0, 1, strGameInText );
                cFILE.getflag ( "TEXT FILE", "strGameExText", 0, 1, strGameExText );
                cFILE.getflag ( "TEXT FILE", "strGameWord", 0, 1, strGameWord );
                cFILE.getflag ( "TEXT FILE", "strServerText", 0, 1, strServerText );
    
                cFILE.getflag ( "TEXT FILE", "strUIOuterCfg", 0, 1, strUIOuterCfg );
                cFILE.getflag ( "TEXT FILE", "strUIInnerCfg01", 0, 1, strUIInnerCfg01 );
                cFILE.getflag ( "TEXT FILE", "strUIInnerCfg02", 0, 1, strUIInnerCfg02 );
                cFILE.getflag ( "TEXT FILE", "strUIInnerCfg03", 0, 1, strUIInnerCfg03 );
                cFILE.getflag ( "TEXT FILE", "strUIExtCfg", 0, 1, strUIExtCfg );
            }
    
            // 档框富 昆 其捞瘤 林家, 酒流 荤侩 救窃 ( 霖酋 )
    cFILE.getflag_sz( "ETC OPTION", "HelpAddress", 0, 1, HelpAddress, STRING_NUM_128 );
    cFILE.getflag_sz( "ETC OPTION", "ItemShopAddress", 0, 1, ItemShopAddress, STRING_NUM_128 );
    cFILE.getflag_sz( "ETC OPTION", "RPFDataPath", 0, 1, RPFDataPath, STRING_NUM_128 );
    
            //    Note : 蜡瓤己 眉农.
            //
            if ( COMMENT::FONTSYS[0]!=strFontType.GetString() && COMMENT::FONTSYS[1]!=strFontType.GetString() )
            {
                strFontType = COMMENT::FONTSYS[0].c_str();
            }        
    
            return TRUE;
        }
    
        
        BOOL LOAD_OPT( const TCHAR *szRootPath, bool bServer )
        {
            strOptionFile = strRootPath;
            strOptionFile += "\\option.ini";
    
    
            if ( !PathFileExists( strOptionFile.c_str() ) )
            {
                return FALSE;
            }
    
            CIniLoader cFILE;
            
            if( !cFILE.open( strOptionFile, true) )
            {
                return FALSE;
            }
    
            // param.ini use not error msg box
            cFILE.SetUseErrorMsgBox( FALSE );
    
            #ifndef KR_PARAM
            {
                if( !bServer )
                {
                //#ifndef TW_PARAM
                //    cFILE.getflag( "GAME OPTION", "bSAVE_USERID", 0, 1, bSAVE_USERID );
                //    if ( bSAVE_USERID )
                //#endif
                    {
                        cFILE.getflag( "GAME OPTION", "strENC_USERID", 0, 1, strENC_USERID );
                        if ( strIDNULL == strENC_USERID )    strENC_USERID = "";
                    }
                }
                //cFILE.getflag ( "GAME OPTION", "bDISP_CONSOLE", 0, 1, bDISP_CONSOLE );
                //cFILE.getflag ( "GAME OPTION", "bDISP_FPS", 0, 1, bDISP_FPS );
            }
            #endif
    
            cFILE.getflag( "GAME OPTION", "nChinaRegion", 0, 1, nChinaRegion );
            //cFILE.getflag( "GAME OPTION", "nPort", 0, 1, nPort );
            
            {
                cFILE.getflag ( "SCREEN OPTION", "bCHECKWHQL", 0, 1, bCHECKWHQL );
                cFILE.getflag ( "SCREEN OPTION", "dwScrWidth", 0, 1, dwScrWidth );
                cFILE.getflag ( "SCREEN OPTION", "dwScrHeight", 0, 1, dwScrHeight );
                int nTEMP(0);
                cFILE.getflag ( "SCREEN OPTION", "emScrFormat", 0, 1, nTEMP );
                emScrFormat = (EMSCREEN_FORMAT) nTEMP;
                cFILE.getflag ( "SCREEN OPTION", "uScrRefreshHz", 0, 1, uScrRefreshHz );
                cFILE.getflag ( "SCREEN OPTION", "bScrWindowed", 0, 1, bScrWindowed );
                cFILE.getflag ( "SCREEN OPTION", "bScrWndFullSize", 0, 1, bScrWndFullSize );
                cFILE.getflag ( "SCREEN OPTION", "bGameCursor", 0, 1, bGameCursor );
            }
            
            {
                cFILE.getflag ( "SOUND OPTION", "b3D_SOUND", 0, 1, b3D_SOUND );
                cFILE.getflag ( "SOUND OPTION", "nSndSfx", 0, 1, nSndSfx );
                cFILE.getflag ( "SOUND OPTION", "nSndMap", 0, 1, nSndMap );
                cFILE.getflag ( "SOUND OPTION", "nSndMusic", 0, 1, nSndMusic );
                cFILE.getflag ( "SOUND OPTION", "dw3DAlgorithm", 0, 1, dw3DAlgorithm );
                cFILE.getflag ( "SOUND OPTION", "dwSndBufferSize", 0, 1, dwSndBufferSize );
                cFILE.getflag ( "SOUND OPTION", "bSndMuteSfx", 0, 1, bSndMuteSfx );
                cFILE.getflag ( "SOUND OPTION", "bSndMuteMap", 0, 1, bSndMuteMap );
                cFILE.getflag ( "SOUND OPTION", "bSndMuteMusic", 0, 1, bSndMuteMusic );
            }
    
            {
                cFILE.getflag ( "GRAPHIC OPTION", "dwVideoLevel", 0, 1, dwVideoLevel );
                cFILE.getflag ( "GRAPHIC OPTION", "dwShadowChar", 0, 1, dwShadowChar );
                cFILE.getflag ( "GRAPHIC OPTION", "bBuff", 0, 1, bBuff );
                cFILE.getflag ( "GRAPHIC OPTION", "bShadowLand", 0, 1, bShadowLand );
                cFILE.getflag ( "GRAPHIC OPTION", "bRealReflect", 0, 1, bRealReflect );
                cFILE.getflag ( "GRAPHIC OPTION", "bRefract", 0, 1, bRefract );
                cFILE.getflag ( "GRAPHIC OPTION", "bGlow", 0, 1, bGlow );
                cFILE.getflag ( "GRAPHIC OPTION", "bPost", 0, 1, bPost );
                cFILE.getflag ( "GRAPHIC OPTION", "bFrameLimit", 0, 1, bFrameLimit );
                cFILE.getflag ( "GRAPHIC OPTION", "dwSkinDetail", 0, 1, dwSkinDetail );
                cFILE.getflag ( "GRAPHIC OPTION", "dwFogRange", 0, 1, dwFogRange );
                cFILE.getflag ( "GRAPHIC OPTION", "bBUFF_SFX", 0, 1, bBUFF_SFX );
                cFILE.getflag ( "GRAPHIC OPTION", "bEMOTICON", 0, 1, bEMOTICON );
                cFILE.getflag ( "GRAPHIC OPTION", "strFontType", 0, 1, strFontType );
            }
    
            if ( !bScrWndHalfSize )        bScrWndFullSize = TRUE;
    
            return TRUE;        
        }
    };

    add crypt.cpp & h under enginelib project

    rebuild enginelib then build cryptionrcc. done


    >>Click here to download<<

    EDIT :
    Asendure.ini <-- download and put inside client directory (same directory with param.ini)
    and encrypt AsenDURE.ini with your REditor.


    NOTE : THIS ENCRYPTION ONLY CAN BE APPLIED FOR FILES INSIDE .RCC ONLY!

    QUIT.


    'SELAMAT HARI RAYA AIDILFITRI'

    Credits :
    prisonmx : for the fresh source
    seiferxiii : for forwarding the source to jdev
    jdev : for fixing the fresh code

    i try this on gs source but not working bugtrap error occur
    Last edited by Borri; 1 Week Ago at 12:04 PM.

  6. #66
    荷希 (糖糖姐姐) AsenDURE is offline
    True MemberRank
    Mar 2012 Join Date
    MalaysiaLocation
    757Posts

    Re: [Share] CryptionRCC Source Code (for source developer).

    This CryptionRCC was released 7 years ago, at that time RanGS Source Code wasn't released yet on Ragezone. This source is compatible with any source code if you know where to put it and where to add the function. That's the reason why the source code was released.



Page 5 of 5 FirstFirst 12345

Advertisement